warscript 0.0.1-dev.0a43a35 → 0.0.1-dev.0d4b872

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -0
  10. package/core/types/frame.lua +93 -1
  11. package/core/types/order.d.ts +1 -0
  12. package/core/types/order.lua +11 -1
  13. package/core/types/sound.d.ts +17 -24
  14. package/core/types/sound.lua +99 -24
  15. package/core/types/timer.d.ts +6 -7
  16. package/core/types/timer.lua +18 -21
  17. package/core/util.d.ts +1 -1
  18. package/core/util.lua +18 -1
  19. package/decl/native.d.ts +840 -786
  20. package/engine/behavior.d.ts +2 -2
  21. package/engine/behavior.lua +6 -6
  22. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  23. package/engine/behaviour/ability/always-enabled.lua +31 -0
  24. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  25. package/engine/behaviour/ability/apply-buff.lua +32 -0
  26. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  27. package/engine/behaviour/ability/damage.d.ts +39 -11
  28. package/engine/behaviour/ability/damage.lua +83 -37
  29. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  30. package/engine/behaviour/ability/emulate-impact.lua +42 -0
  31. package/engine/behaviour/ability/heal.d.ts +33 -6
  32. package/engine/behaviour/ability/heal.lua +89 -10
  33. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  34. package/engine/behaviour/ability/instant-impact.lua +4 -19
  35. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  36. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  37. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  38. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  39. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  40. package/engine/behaviour/ability/restore-mana.lua +29 -0
  41. package/engine/behaviour/ability.d.ts +20 -4
  42. package/engine/behaviour/ability.lua +112 -39
  43. package/engine/behaviour/unit.d.ts +22 -0
  44. package/engine/behaviour/unit.lua +134 -4
  45. package/engine/buff.d.ts +101 -39
  46. package/engine/buff.lua +458 -203
  47. package/engine/game-map.d.ts +7 -0
  48. package/engine/game-map.lua +32 -0
  49. package/engine/internal/ability.d.ts +20 -13
  50. package/engine/internal/ability.lua +97 -76
  51. package/engine/internal/item/ability.lua +112 -4
  52. package/engine/internal/item+owner.lua +2 -2
  53. package/engine/internal/item.d.ts +7 -4
  54. package/engine/internal/item.lua +131 -28
  55. package/engine/internal/mechanics/ability-duration.lua +1 -1
  56. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  57. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  58. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  59. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  60. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  61. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  62. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  63. package/engine/internal/object-data/evasion-probability.lua +16 -0
  64. package/engine/internal/unit/ability.d.ts +15 -1
  65. package/engine/internal/unit/ability.lua +50 -14
  66. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  67. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  68. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  69. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  70. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  71. package/engine/internal/unit/allowed-targets.lua +9 -1
  72. package/engine/internal/unit/bonus.d.ts +6 -2
  73. package/engine/internal/unit/bonus.lua +23 -1
  74. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  75. package/engine/internal/unit/ignore-events-items.lua +5 -0
  76. package/engine/internal/unit/item.d.ts +24 -0
  77. package/engine/internal/unit/item.lua +78 -0
  78. package/engine/internal/unit/main-selected.d.ts +13 -0
  79. package/engine/internal/unit/main-selected.lua +51 -0
  80. package/engine/internal/unit+ability.lua +2 -2
  81. package/engine/internal/unit+damage.d.ts +2 -11
  82. package/engine/internal/unit+damage.lua +10 -14
  83. package/engine/internal/unit+spellSteal.lua +1 -2
  84. package/engine/internal/unit+transport.lua +4 -10
  85. package/engine/internal/unit-missile-launch.lua +25 -6
  86. package/engine/internal/unit.d.ts +51 -13
  87. package/engine/internal/unit.lua +340 -124
  88. package/engine/internal/utility.lua +12 -0
  89. package/engine/lightning.d.ts +12 -5
  90. package/engine/lightning.lua +48 -14
  91. package/engine/local-client.d.ts +7 -2
  92. package/engine/local-client.lua +82 -0
  93. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  94. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  95. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  96. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  97. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  98. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  99. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  100. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  101. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  102. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  103. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  104. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  105. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  106. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  107. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  108. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  109. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  110. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  111. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  112. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  113. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  114. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  115. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  116. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  117. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  118. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  119. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  120. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  121. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  122. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  123. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  124. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  125. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  126. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  127. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  128. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  129. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  130. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  131. package/engine/object-data/entry/ability-type/web.lua +52 -0
  132. package/engine/object-data/entry/ability-type.d.ts +19 -17
  133. package/engine/object-data/entry/ability-type.lua +89 -33
  134. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  135. package/engine/object-data/entry/buff-type.d.ts +6 -12
  136. package/engine/object-data/entry/buff-type.lua +13 -29
  137. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  138. package/engine/object-data/entry/item-type.d.ts +15 -1
  139. package/engine/object-data/entry/item-type.lua +93 -2
  140. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  141. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  142. package/engine/object-data/entry/sound-preset.lua +140 -0
  143. package/engine/object-data/entry/unit-type.d.ts +10 -3
  144. package/engine/object-data/entry/unit-type.lua +155 -92
  145. package/engine/object-data/entry/upgrade.d.ts +1 -1
  146. package/engine/object-data/entry/upgrade.lua +4 -4
  147. package/engine/object-data/entry.d.ts +16 -14
  148. package/engine/object-data/entry.lua +60 -32
  149. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  150. package/engine/object-field/ability.d.ts +26 -3
  151. package/engine/object-field/ability.lua +54 -1
  152. package/engine/object-field/unit.d.ts +46 -3
  153. package/engine/object-field/unit.lua +173 -7
  154. package/engine/object-field.d.ts +15 -6
  155. package/engine/object-field.lua +170 -79
  156. package/engine/standard/entries/buff-type.d.ts +3 -0
  157. package/engine/standard/entries/buff-type.lua +3 -0
  158. package/engine/standard/entries/sound-preset.d.ts +10 -0
  159. package/engine/standard/entries/sound-preset.lua +10 -0
  160. package/engine/standard/fields/ability.d.ts +2 -0
  161. package/engine/standard/fields/ability.lua +2 -0
  162. package/engine/unit.d.ts +3 -0
  163. package/engine/unit.lua +3 -0
  164. package/index.d.ts +1 -0
  165. package/index.lua +1 -0
  166. package/lualib_bundle.lua +7 -2
  167. package/net/socket.d.ts +7 -1
  168. package/net/socket.lua +45 -4
  169. package/network.d.ts +1 -0
  170. package/network.lua +3 -2
  171. package/objutil/buff.lua +2 -3
  172. package/objutil/unit.lua +8 -0
  173. package/package.json +2 -2
  174. package/patch-lua.d.ts +0 -0
  175. package/patch-lua.lua +10 -0
  176. package/property.d.ts +55 -0
  177. package/property.lua +374 -0
  178. package/utility/arrays.d.ts +9 -1
  179. package/utility/arrays.lua +37 -3
  180. package/utility/functions.d.ts +1 -0
  181. package/utility/functions.lua +1 -0
  182. package/utility/lazy.d.ts +2 -0
  183. package/utility/lazy.lua +14 -0
  184. package/utility/linked-set.d.ts +12 -2
  185. package/utility/linked-set.lua +8 -2
  186. package/utility/lua-maps.d.ts +3 -0
  187. package/utility/lua-maps.lua +16 -0
  188. package/utility/lua-sets.d.ts +1 -0
  189. package/utility/lua-sets.lua +3 -0
  190. package/utility/reflection.lua +11 -7
  191. package/utility/types.d.ts +1 -0
  192. package/core/mapbounds.d.ts +0 -8
  193. package/core/mapbounds.lua +0 -12
@@ -5,9 +5,10 @@ import { ObjectDataEntry, ObjectDataEntryIdType, ObjectDataEntryLevelFieldValueS
5
5
  export type ObjectFieldId = number & {
6
6
  readonly __objectDataEntryFieldId: unique symbol;
7
7
  };
8
- export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
8
+ export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number, isGlobal?: boolean) => T);
9
9
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
10
10
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
11
+ readonly isGlobal: boolean;
11
12
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
12
13
  supports(instance: AnyNotNil): instance is InstanceType & {
13
14
  readonly __oneSidedTypeGuard: unique symbol;
@@ -16,8 +17,10 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
16
17
  readonly id: ObjectFieldId;
17
18
  protected abstract getNativeFieldById(id: number): NativeFieldType;
18
19
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
- constructor(id: number);
20
- static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
20
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
21
+ hasValue(instance: InstanceType): boolean;
22
+ constructor(id: number, isGlobal?: boolean);
23
+ static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number, isGlobal?: boolean): T & symbol;
21
24
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
22
25
  }
23
26
  export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any> | ReadonlyObjectFieldType<ObjectField<any, any, any, any>>> = T extends ObjectField<any, infer InstanceType, infer ValueType, any> ? DispatchingEvent<[
@@ -33,15 +36,22 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
33
36
  ]> : never;
34
37
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
35
38
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
39
+ type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
36
40
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
37
41
  protected abstract readonly defaultValue: ValueType;
38
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
39
42
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
40
43
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
41
- getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
44
+ private originalValueByInstance?;
45
+ private modifiersByInstance?;
46
+ getValue(entry: ObjectDataEntryType | InstanceType, includeModifiers?: boolean): ValueType;
42
47
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
48
+ applyModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): void;
49
+ removeModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): boolean;
43
50
  removeValue(entry: ObjectDataEntryType): boolean;
44
51
  trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
52
+ private getActualValue;
53
+ private setActualValue;
54
+ private calculateActualValue;
45
55
  private invokeValueChangeEvent;
46
56
  private invokeValueChangeEventRecursive;
47
57
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
@@ -71,7 +81,6 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
71
81
  }
72
82
  export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
73
83
  protected abstract readonly defaultValue: ValueType;
74
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
75
84
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
76
85
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
77
86
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
@@ -20,6 +20,11 @@ local extractObjectDataEntryLevelFieldValue = ____entry.extractObjectDataEntryLe
20
20
  local ObjectDataEntry = ____entry.ObjectDataEntry
21
21
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
22
22
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
23
+ local ____linked_2Dset = require("utility.linked-set")
24
+ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
+ local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local getOrPut = ____lua_2Dmaps.getOrPut
27
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
23
28
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
29
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
30
  local objectFieldById = {}
@@ -29,7 +34,11 @@ local idGenerator = __TS__New(
29
34
  )
30
35
  local ObjectFieldBase = __TS__Class()
31
36
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
37
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
38
+ if isGlobal == nil then
39
+ isGlobal = true
40
+ end
41
+ self.isGlobal = isGlobal
33
42
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
43
  if objectFieldById[id] ~= nil then
35
44
  error(
@@ -46,10 +55,15 @@ end
46
55
  function ObjectFieldBase.prototype.supports(self, instance)
47
56
  return __TS__InstanceOf(instance, self.instanceClass)
48
57
  end
49
- function ObjectFieldBase.create(self, id)
58
+ function ObjectFieldBase.prototype.hasValue(self, instance)
59
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
60
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
61
+ end
62
+ function ObjectFieldBase.create(self, id, isGlobal)
50
63
  return __TS__New(
51
64
  self,
52
- id or idGenerator:next()
65
+ id or idGenerator:next(),
66
+ isGlobal
53
67
  )
54
68
  end
55
69
  function ObjectFieldBase.of(self, id)
@@ -71,7 +85,7 @@ ____exports.ObjectField = __TS__Class()
71
85
  local ObjectField = ____exports.ObjectField
72
86
  ObjectField.name = "ObjectField"
73
87
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
74
- function ObjectField.prototype.getValue(self, entry)
88
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
75
89
  if __TS__InstanceOf(entry, ObjectDataEntry) then
76
90
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
77
91
  if defaultValueByObjectDataEntryId ~= nil then
@@ -82,22 +96,16 @@ function ObjectField.prototype.getValue(self, entry)
82
96
  end
83
97
  return self.defaultValue
84
98
  end
85
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
86
- if defaultValueByObjectDataEntryId ~= nil then
87
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
88
- if defaultValue ~= nil then
89
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
90
- if ____self_valueByInstance_entry_0 == nil then
91
- ____self_valueByInstance_entry_0 = defaultValue
99
+ if includeModifiers == false then
100
+ local originalValueByInstance = self.originalValueByInstance
101
+ if originalValueByInstance ~= nil then
102
+ local originalValue = originalValueByInstance[entry]
103
+ if originalValue ~= nil then
104
+ return originalValue
92
105
  end
93
- return ____self_valueByInstance_entry_0
94
106
  end
95
107
  end
96
- local ____temp_1 = self:getNativeFieldValue(entry)
97
- if ____temp_1 == nil then
98
- ____temp_1 = self.defaultValue
99
- end
100
- return ____temp_1
108
+ return self:getActualValue(entry)
101
109
  end
102
110
  function ObjectField.prototype.setValue(self, entry, value)
103
111
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -112,37 +120,53 @@ function ObjectField.prototype.setValue(self, entry, value)
112
120
  defaultValueByObjectDataEntryId[entry.id] = value
113
121
  return true
114
122
  end
115
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
116
- if defaultValueByObjectDataEntryId ~= nil then
117
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
118
- if defaultValue ~= nil then
119
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
120
- if ____self_valueByInstance_entry_2 == nil then
121
- ____self_valueByInstance_entry_2 = defaultValue
122
- end
123
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
124
- if ____self_valueByInstance_entry_2_3 == nil then
125
- ____self_valueByInstance_entry_2_3 = self.defaultValue
123
+ local modifiersByInstance = self.modifiersByInstance
124
+ if modifiersByInstance ~= nil then
125
+ local modifiers = modifiersByInstance[entry]
126
+ if modifiers ~= nil and modifiers.size ~= 0 then
127
+ local originalValueByInstance = self.originalValueByInstance
128
+ if originalValueByInstance == nil then
129
+ originalValueByInstance = mutableWeakLuaMap()
130
+ self.originalValueByInstance = originalValueByInstance
126
131
  end
127
- local previousValue = ____self_valueByInstance_entry_2_3
128
- if value ~= previousValue then
129
- self.valueByInstance[entry] = value
130
- self:invokeValueChangeEvent(entry, self, previousValue, value)
131
- end
132
- return true
132
+ originalValueByInstance[entry] = value
133
+ value = self:calculateActualValue(entry)
133
134
  end
134
135
  end
135
- if not self:hasNativeFieldValue(entry) then
136
- return false
136
+ return self:setActualValue(entry, value)
137
+ end
138
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
139
+ local modifiersByInstance = self.modifiersByInstance
140
+ if modifiersByInstance == nil then
141
+ modifiersByInstance = mutableWeakLuaMap()
142
+ self.modifiersByInstance = modifiersByInstance
143
+ end
144
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
145
+ local originalValueByInstance = self.originalValueByInstance
146
+ if originalValueByInstance == nil then
147
+ originalValueByInstance = mutableWeakLuaMap()
148
+ self.originalValueByInstance = originalValueByInstance
149
+ end
150
+ originalValueByInstance[instance] = self:getActualValue(instance)
151
+ self:setActualValue(
152
+ instance,
153
+ self:calculateActualValue(instance)
154
+ )
137
155
  end
138
- local previousValue = self:getNativeFieldValue(entry)
139
- if value ~= previousValue then
140
- if not self:setNativeFieldValue(entry, value) then
141
- return false
156
+ end
157
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
158
+ local modifiersByInstance = self.modifiersByInstance
159
+ if modifiersByInstance ~= nil then
160
+ local modifiers = modifiersByInstance[instance]
161
+ if modifiers ~= nil and modifiers:remove(modifier) then
162
+ self:setActualValue(
163
+ instance,
164
+ self:calculateActualValue(instance)
165
+ )
166
+ return true
142
167
  end
143
- self:invokeValueChangeEvent(entry, self, previousValue, value)
144
168
  end
145
- return true
169
+ return false
146
170
  end
147
171
  function ObjectField.prototype.removeValue(self, entry)
148
172
  if not warpack.compiletime then
@@ -164,6 +188,73 @@ function ObjectField.prototype.trySetValue(self, entry, value)
164
188
  end
165
189
  return self:setValue(entry, value)
166
190
  end
191
+ function ObjectField.prototype.getActualValue(self, instance)
192
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
193
+ if defaultValueByObjectDataEntryId ~= nil then
194
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
195
+ if defaultValue ~= nil then
196
+ local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
197
+ if ____self_valueByInstance_instance_0 == nil then
198
+ ____self_valueByInstance_instance_0 = defaultValue
199
+ end
200
+ return ____self_valueByInstance_instance_0
201
+ end
202
+ end
203
+ local ____temp_1 = self:getNativeFieldValue(instance)
204
+ if ____temp_1 == nil then
205
+ ____temp_1 = self.defaultValue
206
+ end
207
+ return ____temp_1
208
+ end
209
+ function ObjectField.prototype.setActualValue(self, instance, value)
210
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
211
+ if defaultValueByObjectDataEntryId ~= nil then
212
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
213
+ if defaultValue ~= nil then
214
+ local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
215
+ if ____self_valueByInstance_instance_2 == nil then
216
+ ____self_valueByInstance_instance_2 = defaultValue
217
+ end
218
+ local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
219
+ if ____self_valueByInstance_instance_2_3 == nil then
220
+ ____self_valueByInstance_instance_2_3 = self.defaultValue
221
+ end
222
+ local previousValue = ____self_valueByInstance_instance_2_3
223
+ if value ~= previousValue then
224
+ self.valueByInstance[instance] = value
225
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
226
+ end
227
+ return true
228
+ end
229
+ end
230
+ if not self:hasNativeFieldValue(instance) then
231
+ return false
232
+ end
233
+ local previousValue = self:getNativeFieldValue(instance)
234
+ if value ~= previousValue then
235
+ if not self:setNativeFieldValue(instance, value) then
236
+ return false
237
+ end
238
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
239
+ end
240
+ return true
241
+ end
242
+ function ObjectField.prototype.calculateActualValue(self, instance)
243
+ local ____opt_4 = self.originalValueByInstance
244
+ local originalValue = ____opt_4 and ____opt_4[instance]
245
+ local ____opt_6 = self.modifiersByInstance
246
+ local modifiers = ____opt_6 and ____opt_6[instance]
247
+ if originalValue ~= nil then
248
+ local value = originalValue
249
+ if modifiers ~= nil then
250
+ for modifier in pairs(modifiers) do
251
+ value = modifier(instance, value, originalValue)
252
+ end
253
+ end
254
+ return value
255
+ end
256
+ return self.defaultValue
257
+ end
167
258
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
168
259
  self:invokeValueChangeEventRecursive(
169
260
  getClass(self),
@@ -217,17 +308,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
217
308
  if defaultValueByObjectDataEntryId ~= nil then
218
309
  local value = defaultValueByObjectDataEntryId[entry.id]
219
310
  if value ~= nil then
220
- local ____temp_5
311
+ local ____temp_9
221
312
  if index == nil then
222
- ____temp_5 = value
313
+ ____temp_9 = value
223
314
  else
224
- local ____value_index_4 = value[index + 1]
225
- if ____value_index_4 == nil then
226
- ____value_index_4 = self.defaultValue
315
+ local ____value_index_8 = value[index + 1]
316
+ if ____value_index_8 == nil then
317
+ ____value_index_8 = self.defaultValue
227
318
  end
228
- ____temp_5 = ____value_index_4
319
+ ____temp_9 = ____value_index_8
229
320
  end
230
- return ____temp_5
321
+ return ____temp_9
231
322
  end
232
323
  end
233
324
  return index == nil and ({}) or self.defaultValue
@@ -237,17 +328,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
237
328
  local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
238
329
  if defaultValue ~= nil then
239
330
  local value = self.valueByInstance[entry] or defaultValue
240
- local ____temp_7
331
+ local ____temp_11
241
332
  if index == nil then
242
- ____temp_7 = value
333
+ ____temp_11 = value
243
334
  else
244
- local ____value_index_6 = value[index + 1]
245
- if ____value_index_6 == nil then
246
- ____value_index_6 = self.defaultValue
335
+ local ____value_index_10 = value[index + 1]
336
+ if ____value_index_10 == nil then
337
+ ____value_index_10 = self.defaultValue
247
338
  end
248
- ____temp_7 = ____value_index_6
339
+ ____temp_11 = ____value_index_10
249
340
  end
250
- return ____temp_7
341
+ return ____temp_11
251
342
  end
252
343
  end
253
344
  if index ~= nil then
@@ -292,11 +383,11 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
292
383
  if defaultValueByObjectDataEntryId ~= nil then
293
384
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
294
385
  if valueByLevel ~= nil then
295
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
296
- if ____valueByLevel_index_8 == nil then
297
- ____valueByLevel_index_8 = self.defaultValue
386
+ local ____valueByLevel_index_12 = valueByLevel[level + 1]
387
+ if ____valueByLevel_index_12 == nil then
388
+ ____valueByLevel_index_12 = self.defaultValue
298
389
  end
299
- return ____valueByLevel_index_8
390
+ return ____valueByLevel_index_12
300
391
  end
301
392
  end
302
393
  return self.defaultValue
@@ -305,23 +396,23 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
305
396
  if defaultValueByObjectDataEntryId ~= nil then
306
397
  local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
307
398
  if defaultValueByLevel ~= nil then
308
- local ____opt_9 = self.valueByInstance[entry]
309
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
310
- if ____temp_11 == nil then
311
- ____temp_11 = defaultValueByLevel[level + 1]
399
+ local ____opt_13 = self.valueByInstance[entry]
400
+ local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
401
+ if ____temp_15 == nil then
402
+ ____temp_15 = defaultValueByLevel[level + 1]
312
403
  end
313
- local ____temp_11_12 = ____temp_11
314
- if ____temp_11_12 == nil then
315
- ____temp_11_12 = self.defaultValue
404
+ local ____temp_15_16 = ____temp_15
405
+ if ____temp_15_16 == nil then
406
+ ____temp_15_16 = self.defaultValue
316
407
  end
317
- return ____temp_11_12
408
+ return ____temp_15_16
318
409
  end
319
410
  end
320
- local ____temp_13 = self:getNativeFieldValue(entry, level)
321
- if ____temp_13 == nil then
322
- ____temp_13 = self.defaultValue
411
+ local ____temp_17 = self:getNativeFieldValue(entry, level)
412
+ if ____temp_17 == nil then
413
+ ____temp_17 = self.defaultValue
323
414
  end
324
- return ____temp_13
415
+ return ____temp_17
325
416
  end
326
417
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
327
418
  if value == nil then
@@ -370,15 +461,15 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
370
461
  valueByLevel = {}
371
462
  self.valueByInstance[entry] = valueByLevel
372
463
  end
373
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
374
- if ____valueByLevel_index_14 == nil then
375
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
464
+ local ____valueByLevel_index_18 = valueByLevel[level + 1]
465
+ if ____valueByLevel_index_18 == nil then
466
+ ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
376
467
  end
377
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
378
- if ____valueByLevel_index_14_15 == nil then
379
- ____valueByLevel_index_14_15 = self.defaultValue
468
+ local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
469
+ if ____valueByLevel_index_18_19 == nil then
470
+ ____valueByLevel_index_18_19 = self.defaultValue
380
471
  end
381
- local previousValue = ____valueByLevel_index_14_15
472
+ local previousValue = ____valueByLevel_index_18_19
382
473
  if value ~= previousValue then
383
474
  valueByLevel[level + 1] = value
384
475
  self:invokeValueChangeEvent(
@@ -0,0 +1,3 @@
1
+ /** @noSelfInFile */
2
+ import { StandardBuffTypeId } from "../../object-data/entry/buff-type";
3
+ export declare const CHEMICAL_RAGE_BUFF_TYPE_ID: StandardBuffTypeId;
@@ -0,0 +1,3 @@
1
+ local ____exports = {}
2
+ ____exports.CHEMICAL_RAGE_BUFF_TYPE_ID = fourCC("BNcr")
3
+ return ____exports
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { StandardSoundPresetId } from "../../object-data/entry/sound-preset";
3
+ export declare const ABOMINATION_PISSED_SOUND_PRESET_ID: StandardSoundPresetId;
4
+ export declare const ABOMINATION_READY_SOUND_PRESET_ID: StandardSoundPresetId;
5
+ export declare const ABOMINATION_WAR_CRY_SOUND_PRESET_ID: StandardSoundPresetId;
6
+ export declare const AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID: StandardSoundPresetId;
7
+ export declare const IMPALE_SOUND_PRESET_ID: StandardSoundPresetId;
8
+ export declare const IMPALE_HIT_SOUND_PRESET_ID: StandardSoundPresetId;
9
+ export declare const IMPALE_LAND_SOUND_PRESET_ID: StandardSoundPresetId;
10
+ export declare const IMPALE_CAST_SOUND_PRESET_ID: StandardSoundPresetId;
@@ -0,0 +1,10 @@
1
+ local ____exports = {}
2
+ ____exports.ABOMINATION_PISSED_SOUND_PRESET_ID = "AbominationPissed"
3
+ ____exports.ABOMINATION_READY_SOUND_PRESET_ID = "AbominationReady"
4
+ ____exports.ABOMINATION_WAR_CRY_SOUND_PRESET_ID = "AbominationWarcry"
5
+ ____exports.AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID = "AxeMediumChopWood"
6
+ ____exports.IMPALE_SOUND_PRESET_ID = "Impale"
7
+ ____exports.IMPALE_HIT_SOUND_PRESET_ID = "ImpaleHit"
8
+ ____exports.IMPALE_LAND_SOUND_PRESET_ID = "ImpaleLand"
9
+ ____exports.IMPALE_CAST_SOUND_PRESET_ID = "ImpaleCast"
10
+ return ____exports
@@ -687,6 +687,8 @@ export declare const DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD: Abilit
687
687
  export declare const ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD: AbilityBooleanLevelField & symbol;
688
688
  export declare const ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD: AbilityStringLevelField & symbol;
689
689
  export declare const CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
690
+ export declare const CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
691
+ export declare const CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
690
692
  export declare const TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
691
693
  export declare const TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
692
694
  export declare const TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
@@ -698,6 +698,8 @@ ____exports.DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBoolean
698
698
  ____exports.ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBooleanLevelField:create(fourCC("Ntm4"))
699
699
  ____exports.ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD = AbilityStringLevelField:create(fourCC("aart"))
700
700
  ____exports.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("acat"))
701
+ ____exports.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("acap"))
702
+ ____exports.CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("aca1"))
701
703
  ____exports.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("atat"))
702
704
  ____exports.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata0"))
703
705
  ____exports.TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata1"))
package/engine/unit.d.ts CHANGED
@@ -4,6 +4,7 @@ import "./internal/unit/ability";
4
4
  import "./internal/unit/allowed-targets";
5
5
  import "./internal/unit/buff";
6
6
  import "./internal/unit/expiration-timer";
7
+ import "./internal/unit/item";
7
8
  import "./internal/unit+ability";
8
9
  import "./internal/unit+damage";
9
10
  import "./internal/unit+rally";
@@ -15,6 +16,8 @@ import "./internal/unit-missile-launch";
15
16
  import "./internal/unit/ghost-counter";
16
17
  import "./internal/unit/invulnerability-counter";
17
18
  import "./internal/unit/detach-missiles";
19
+ import "./internal/unit/main-selected";
20
+ import "./internal/unit/add-item-to-slot-init";
18
21
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
19
22
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
20
23
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -4,6 +4,7 @@ require("engine.internal.unit.ability")
4
4
  require("engine.internal.unit.allowed-targets")
5
5
  require("engine.internal.unit.buff")
6
6
  require("engine.internal.unit.expiration-timer")
7
+ require("engine.internal.unit.item")
7
8
  require("engine.internal.unit+ability")
8
9
  require("engine.internal.unit+damage")
9
10
  require("engine.internal.unit+rally")
@@ -15,6 +16,8 @@ require("engine.internal.unit-missile-launch")
15
16
  require("engine.internal.unit.ghost-counter")
16
17
  require("engine.internal.unit.invulnerability-counter")
17
18
  require("engine.internal.unit.detach-missiles")
19
+ require("engine.internal.unit.main-selected")
20
+ require("engine.internal.unit.add-item-to-slot-init")
18
21
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
19
22
  do
20
23
  local ____unit = require("engine.internal.unit")
package/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import "./types";
3
+ import "./patch-lua";
3
4
  import "./patch-lualib";
4
5
  import "./patch-natives";
5
6
  import "./global/math";
package/index.lua CHANGED
@@ -1,5 +1,6 @@
1
1
  local ____exports = {}
2
2
  require("types")
3
+ require("patch-lua")
3
4
  require("patch-lualib")
4
5
  require("patch-natives")
5
6
  require("global.math")
package/lualib_bundle.lua CHANGED
@@ -1094,6 +1094,11 @@ do
1094
1094
  end
1095
1095
  if __TS__StringIncludes(_VERSION, "Lua 5.0") then
1096
1096
  return debug.traceback(("[Level " .. tostring(level)) .. "]")
1097
+ elseif _VERSION == "Lua 5.1" then
1098
+ return string.sub(
1099
+ debug.traceback("", level),
1100
+ 2
1101
+ )
1097
1102
  else
1098
1103
  return debug.traceback(nil, level)
1099
1104
  end
@@ -1102,7 +1107,7 @@ do
1102
1107
  return function(self)
1103
1108
  local description = getDescription(self)
1104
1109
  local caller = debug.getinfo(3, "f")
1105
- local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0") or _VERSION == "Lua 5.1"
1110
+ local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0")
1106
1111
  if isClassicLua or caller and caller.func ~= error then
1107
1112
  return description
1108
1113
  else
@@ -1126,7 +1131,7 @@ do
1126
1131
  end
1127
1132
  self.message = message
1128
1133
  self.name = "Error"
1129
- self.stack = getErrorStack(nil, self.constructor.new)
1134
+ self.stack = getErrorStack(nil, __TS__New)
1130
1135
  local metatable = getmetatable(self)
1131
1136
  if metatable and not metatable.__errorToStringPatched then
1132
1137
  metatable.__errorToStringPatched = true
package/net/socket.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../event";
3
3
  import { Player } from "../core/types/player";
4
+ declare const enum SocketPropertyKey {
5
+ ID = 0,
6
+ CHUNK_ID = 1
7
+ }
4
8
  export declare class Socket {
5
- private readonly id;
9
+ private readonly [SocketPropertyKey.ID];
10
+ private readonly [SocketPropertyKey.CHUNK_ID];
6
11
  readonly onMessage: Event<[Player, string]>;
7
12
  constructor();
8
13
  send(data: string): void;
9
14
  }
15
+ export {};
package/net/socket.lua CHANGED
@@ -7,6 +7,11 @@ local Event = ____event.Event
7
7
  local ____network = require("network")
8
8
  local send = ____network.send
9
9
  local onReceive = ____network.onReceive
10
+ local MAX_PAYLOAD_LENGTH = ____network.MAX_PAYLOAD_LENGTH
11
+ local ____math = require("math")
12
+ local ceil = ____math.ceil
13
+ local stringSub = string.sub
14
+ local tableConcat = table.concat
10
15
  local nextId = 0
11
16
  ____exports.Socket = __TS__Class()
12
17
  local Socket = ____exports.Socket
@@ -14,13 +19,49 @@ Socket.name = "Socket"
14
19
  function Socket.prototype.____constructor(self)
15
20
  local ____tostring_0 = tostring
16
21
  nextId = nextId + 1
17
- self.id = ____tostring_0(nextId)
22
+ self[0] = ____tostring_0(nextId)
23
+ local ____tostring_1 = tostring
24
+ nextId = nextId + 1
25
+ self[1] = ____tostring_1(nextId)
18
26
  self.onMessage = __TS__New(Event)
19
- onReceive[self.id]:addListener(function(sender, data)
20
- Event.invoke(self.onMessage, sender, data)
27
+ local chunksByPlayer = {}
28
+ onReceive[self[0]]:addListener(function(sender, data)
29
+ local chunks = chunksByPlayer[sender]
30
+ if chunks ~= nil then
31
+ chunks[#chunks + 1] = data
32
+ Event.invoke(
33
+ self.onMessage,
34
+ sender,
35
+ tableConcat(chunks)
36
+ )
37
+ chunksByPlayer[sender] = nil
38
+ else
39
+ Event.invoke(self.onMessage, sender, data)
40
+ end
41
+ end)
42
+ onReceive[self[1]]:addListener(function(sender, data)
43
+ local chunks = chunksByPlayer[sender]
44
+ if chunks == nil then
45
+ chunks = {}
46
+ chunksByPlayer[sender] = chunks
47
+ end
48
+ chunks[#chunks + 1] = data
21
49
  end)
22
50
  end
23
51
  function Socket.prototype.send(self, data)
24
- send(self.id, data)
52
+ local chunks = ceil(#data / MAX_PAYLOAD_LENGTH) - 1
53
+ local offset = 1
54
+ for _ = 0, chunks - 1 do
55
+ local nextOffset = offset + MAX_PAYLOAD_LENGTH
56
+ send(
57
+ self[1],
58
+ stringSub(data, offset, nextOffset - 1)
59
+ )
60
+ offset = nextOffset
61
+ end
62
+ send(
63
+ self[0],
64
+ stringSub(data, offset)
65
+ )
25
66
  end
26
67
  return ____exports
package/network.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Event } from "./event";
3
3
  import { Player } from "./core/types/player";
4
4
  import { Operation, OperationContinue, OperationMonitor } from "./operation";
5
+ export declare const MAX_PAYLOAD_LENGTH = 255;
5
6
  export declare const onReceive: {
6
7
  [prefix: string]: Event<[Player, string]>;
7
8
  } & {