warscript 0.0.1-dev.f48f7bb → 0.0.1-dev.f70428f

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 (186) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.d.ts +15 -0
  9. package/core/types/player.lua +56 -14
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/tileCell.d.ts +11 -1
  15. package/core/types/tileCell.lua +97 -0
  16. package/core/types/timer.d.ts +9 -8
  17. package/core/types/timer.lua +45 -23
  18. package/core/util.lua +6 -1
  19. package/decl/native.d.ts +846 -790
  20. package/engine/behavior.d.ts +12 -1
  21. package/engine/behavior.lua +172 -70
  22. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  23. package/engine/behaviour/ability/apply-buff.lua +32 -0
  24. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  25. package/engine/behaviour/ability/damage.d.ts +9 -3
  26. package/engine/behaviour/ability/damage.lua +26 -38
  27. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  28. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  29. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  30. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  31. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  32. package/engine/behaviour/ability/restore-mana.lua +6 -6
  33. package/engine/behaviour/ability.d.ts +7 -2
  34. package/engine/behaviour/ability.lua +42 -24
  35. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  36. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  37. package/engine/behaviour/unit.d.ts +36 -2
  38. package/engine/behaviour/unit.lua +192 -6
  39. package/engine/buff.d.ts +66 -44
  40. package/engine/buff.lua +330 -225
  41. package/engine/internal/ability.d.ts +7 -1
  42. package/engine/internal/ability.lua +49 -11
  43. package/engine/internal/item/ability.lua +66 -14
  44. package/engine/internal/item+owner.lua +12 -6
  45. package/engine/internal/item.d.ts +20 -19
  46. package/engine/internal/item.lua +191 -74
  47. package/engine/internal/mechanics/ability-duration.lua +1 -1
  48. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  49. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  50. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  51. package/engine/internal/misc/frame-coordinates.lua +21 -0
  52. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  53. package/engine/internal/misc/get-terrain-z.lua +11 -0
  54. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  55. package/engine/internal/misc/player-local-handle.lua +5 -0
  56. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  57. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  58. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  59. package/engine/internal/object-data/evasion-probability.lua +16 -0
  60. package/engine/internal/unit/ability.d.ts +35 -0
  61. package/engine/internal/unit/ability.lua +98 -9
  62. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  63. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  64. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  65. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  66. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  67. package/engine/internal/unit/allowed-targets.lua +9 -1
  68. package/engine/internal/unit/bonus.d.ts +2 -0
  69. package/engine/internal/unit/bonus.lua +17 -0
  70. package/engine/internal/unit/fly-height.d.ts +7 -0
  71. package/engine/internal/unit/fly-height.lua +20 -0
  72. package/engine/internal/unit/item.lua +3 -48
  73. package/engine/internal/unit/main-selected.lua +12 -27
  74. package/engine/internal/unit/order.d.ts +20 -0
  75. package/engine/internal/unit/order.lua +136 -0
  76. package/engine/internal/unit/scale.d.ts +7 -0
  77. package/engine/internal/unit/scale.lua +20 -0
  78. package/engine/internal/unit+ability.lua +10 -1
  79. package/engine/internal/unit+damage.d.ts +2 -11
  80. package/engine/internal/unit+damage.lua +10 -14
  81. package/engine/internal/unit+spellSteal.lua +1 -2
  82. package/engine/internal/unit-missile-launch.lua +45 -14
  83. package/engine/internal/unit.d.ts +43 -17
  84. package/engine/internal/unit.lua +340 -165
  85. package/engine/lightning.d.ts +12 -5
  86. package/engine/lightning.lua +48 -14
  87. package/engine/local-client.d.ts +2 -0
  88. package/engine/local-client.lua +30 -0
  89. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  90. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  91. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  92. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  93. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  94. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  95. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  96. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  97. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  98. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  99. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  100. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  101. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  102. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  103. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  104. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  105. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  106. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  107. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  108. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  109. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  110. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  111. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  112. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  113. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  114. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  115. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  116. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  117. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  118. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  119. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  120. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  121. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  122. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  123. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  124. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  125. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  126. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  127. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  128. package/engine/object-data/entry/ability-type/web.lua +52 -0
  129. package/engine/object-data/entry/ability-type.d.ts +19 -17
  130. package/engine/object-data/entry/ability-type.lua +85 -24
  131. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  132. package/engine/object-data/entry/buff-type.d.ts +6 -12
  133. package/engine/object-data/entry/buff-type.lua +13 -29
  134. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  135. package/engine/object-data/entry/item-type.d.ts +1 -1
  136. package/engine/object-data/entry/item-type.lua +4 -4
  137. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  138. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  139. package/engine/object-data/entry/sound-preset.lua +140 -0
  140. package/engine/object-data/entry/unit-type.d.ts +21 -5
  141. package/engine/object-data/entry/unit-type.lua +214 -93
  142. package/engine/object-data/entry/upgrade.d.ts +1 -1
  143. package/engine/object-data/entry/upgrade.lua +4 -4
  144. package/engine/object-data/entry.d.ts +16 -14
  145. package/engine/object-data/entry.lua +60 -32
  146. package/engine/object-field/ability.d.ts +4 -4
  147. package/engine/object-field/ability.lua +7 -6
  148. package/engine/object-field/unit.d.ts +69 -3
  149. package/engine/object-field/unit.lua +264 -7
  150. package/engine/object-field.d.ts +23 -6
  151. package/engine/object-field.lua +309 -126
  152. package/engine/random.d.ts +9 -0
  153. package/engine/random.lua +13 -0
  154. package/engine/standard/entries/buff-type.d.ts +3 -0
  155. package/engine/standard/entries/buff-type.lua +3 -0
  156. package/engine/standard/entries/sound-preset.d.ts +10 -0
  157. package/engine/standard/entries/sound-preset.lua +10 -0
  158. package/engine/standard/fields/unit.d.ts +6 -0
  159. package/engine/standard/fields/unit.lua +11 -0
  160. package/engine/synchronization.d.ts +11 -0
  161. package/engine/synchronization.lua +77 -0
  162. package/engine/text-tag.d.ts +36 -2
  163. package/engine/text-tag.lua +250 -10
  164. package/engine/unit.d.ts +4 -0
  165. package/engine/unit.lua +4 -0
  166. package/net/socket.lua +1 -1
  167. package/objutil/buff.lua +2 -3
  168. package/objutil/unit.lua +8 -0
  169. package/package.json +2 -2
  170. package/patch-lualib.lua +1 -1
  171. package/utility/arrays.d.ts +2 -0
  172. package/utility/arrays.lua +11 -0
  173. package/utility/callback-array.d.ts +17 -0
  174. package/utility/callback-array.lua +61 -0
  175. package/utility/functions.d.ts +8 -0
  176. package/utility/functions.lua +13 -0
  177. package/utility/linked-set.d.ts +2 -0
  178. package/utility/linked-set.lua +22 -1
  179. package/utility/lua-maps.d.ts +15 -2
  180. package/utility/lua-maps.lua +53 -2
  181. package/utility/lua-sets.d.ts +2 -0
  182. package/utility/lua-sets.lua +7 -0
  183. package/utility/reflection.lua +11 -7
  184. package/utility/types.d.ts +3 -0
  185. package/core/types/order.d.ts +0 -25
  186. package/core/types/order.lua +0 -55
@@ -20,6 +20,15 @@ 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 emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
+ local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
29
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
30
+ local ____arrays = require("utility.arrays")
31
+ local emptyArray = ____arrays.emptyArray
23
32
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
33
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
34
  local objectFieldById = {}
@@ -29,7 +38,11 @@ local idGenerator = __TS__New(
29
38
  )
30
39
  local ObjectFieldBase = __TS__Class()
31
40
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
41
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
42
+ if isGlobal == nil then
43
+ isGlobal = false
44
+ end
45
+ self.isGlobal = isGlobal
33
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
47
  if objectFieldById[id] ~= nil then
35
48
  error(
@@ -46,14 +59,15 @@ end
46
59
  function ObjectFieldBase.prototype.supports(self, instance)
47
60
  return __TS__InstanceOf(instance, self.instanceClass)
48
61
  end
49
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
50
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
64
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
52
65
  end
53
- function ObjectFieldBase.create(self, id)
66
+ function ObjectFieldBase.create(self, id, isGlobal)
54
67
  return __TS__New(
55
68
  self,
56
- id or idGenerator:next()
69
+ id or idGenerator:next(),
70
+ isGlobal
57
71
  )
58
72
  end
59
73
  function ObjectFieldBase.of(self, id)
@@ -75,7 +89,7 @@ ____exports.ObjectField = __TS__Class()
75
89
  local ObjectField = ____exports.ObjectField
76
90
  ObjectField.name = "ObjectField"
77
91
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
78
- function ObjectField.prototype.getValue(self, entry)
92
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
79
93
  if __TS__InstanceOf(entry, ObjectDataEntry) then
80
94
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
81
95
  if defaultValueByObjectDataEntryId ~= nil then
@@ -86,22 +100,16 @@ function ObjectField.prototype.getValue(self, entry)
86
100
  end
87
101
  return self.defaultValue
88
102
  end
89
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
90
- if defaultValueByObjectDataEntryId ~= nil then
91
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
92
- if defaultValue ~= nil then
93
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
94
- if ____self_valueByInstance_entry_0 == nil then
95
- ____self_valueByInstance_entry_0 = defaultValue
103
+ if not includeModifiers then
104
+ local originalValueByInstance = self.originalValueByInstance
105
+ if originalValueByInstance ~= nil then
106
+ local originalValue = originalValueByInstance[entry]
107
+ if originalValue ~= nil then
108
+ return originalValue
96
109
  end
97
- return ____self_valueByInstance_entry_0
98
110
  end
99
111
  end
100
- local ____temp_1 = self:getNativeFieldValue(entry)
101
- if ____temp_1 == nil then
102
- ____temp_1 = self.defaultValue
103
- end
104
- return ____temp_1
112
+ return self:getActualValue(entry)
105
113
  end
106
114
  function ObjectField.prototype.setValue(self, entry, value)
107
115
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,37 +124,59 @@ function ObjectField.prototype.setValue(self, entry, value)
116
124
  defaultValueByObjectDataEntryId[entry.id] = value
117
125
  return true
118
126
  end
119
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
120
- if defaultValueByObjectDataEntryId ~= nil then
121
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
122
- if defaultValue ~= nil then
123
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
124
- if ____self_valueByInstance_entry_2 == nil then
125
- ____self_valueByInstance_entry_2 = defaultValue
126
- end
127
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
128
- if ____self_valueByInstance_entry_2_3 == nil then
129
- ____self_valueByInstance_entry_2_3 = self.defaultValue
127
+ local modifiersByInstance = self.modifiersByInstance
128
+ if modifiersByInstance ~= nil then
129
+ local modifiers = modifiersByInstance[entry]
130
+ if modifiers ~= nil and modifiers.size ~= 0 then
131
+ local originalValueByInstance = self.originalValueByInstance
132
+ if originalValueByInstance == nil then
133
+ originalValueByInstance = mutableWeakLuaMap()
134
+ self.originalValueByInstance = originalValueByInstance
130
135
  end
131
- local previousValue = ____self_valueByInstance_entry_2_3
132
- if value ~= previousValue then
133
- self.valueByInstance[entry] = value
134
- self:invokeValueChangeEvent(entry, self, previousValue, value)
135
- end
136
- return true
136
+ originalValueByInstance[entry] = value
137
+ value = self:calculateActualValue(entry)
137
138
  end
138
139
  end
139
- if not self:hasNativeFieldValue(entry) then
140
- return false
140
+ return self:setActualValue(entry, value)
141
+ end
142
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
143
+ local modifiersByInstance = self.modifiersByInstance
144
+ if modifiersByInstance == nil then
145
+ modifiersByInstance = mutableWeakLuaMap()
146
+ self.modifiersByInstance = modifiersByInstance
147
+ end
148
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
149
+ local originalValueByInstance = self.originalValueByInstance
150
+ if originalValueByInstance == nil then
151
+ originalValueByInstance = mutableWeakLuaMap()
152
+ self.originalValueByInstance = originalValueByInstance
153
+ end
154
+ local ____originalValueByInstance_1 = originalValueByInstance
155
+ local ____instance_2 = instance
156
+ local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
+ if ____originalValueByInstance_instance_0 == nil then
158
+ ____originalValueByInstance_instance_0 = self:getActualValue(instance)
159
+ end
160
+ ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
161
+ self:setActualValue(
162
+ instance,
163
+ self:calculateActualValue(instance)
164
+ )
141
165
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
166
+ end
167
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
168
+ local modifiersByInstance = self.modifiersByInstance
169
+ if modifiersByInstance ~= nil then
170
+ local modifiers = modifiersByInstance[instance]
171
+ if modifiers ~= nil and modifiers:remove(modifier) then
172
+ self:setActualValue(
173
+ instance,
174
+ self:calculateActualValue(instance)
175
+ )
176
+ return true
146
177
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
148
178
  end
149
- return true
179
+ return false
150
180
  end
151
181
  function ObjectField.prototype.removeValue(self, entry)
152
182
  if not warpack.compiletime then
@@ -168,6 +198,74 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
198
  end
169
199
  return self:setValue(entry, value)
170
200
  end
201
+ function ObjectField.prototype.getActualValue(self, instance)
202
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
203
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
205
+ if defaultValue ~= nil or self.isGlobal then
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
209
+ end
210
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
+ if ____self_valueByInstance_instance_3_4 == nil then
212
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
213
+ end
214
+ return ____self_valueByInstance_instance_3_4
215
+ end
216
+ end
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
220
+ end
221
+ return ____temp_5
222
+ end
223
+ function ObjectField.prototype.setActualValue(self, instance, value)
224
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
226
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
228
+ if defaultValue ~= nil or self.isGlobal then
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
232
+ end
233
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
+ if ____self_valueByInstance_instance_6_7 == nil then
235
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
236
+ end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
240
+ return true
241
+ end
242
+ end
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
244
+ return false
245
+ end
246
+ local previousValue = self:getNativeFieldValue(instance)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
249
+ end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
251
+ return true
252
+ end
253
+ function ObjectField.prototype.calculateActualValue(self, instance)
254
+ local ____opt_8 = self.originalValueByInstance
255
+ local originalValue = ____opt_8 and ____opt_8[instance]
256
+ local ____opt_10 = self.modifiersByInstance
257
+ local modifiers = ____opt_10 and ____opt_10[instance]
258
+ if originalValue ~= nil then
259
+ local value = originalValue
260
+ if modifiers ~= nil then
261
+ for modifier in pairs(modifiers) do
262
+ value = modifier(instance, value, originalValue)
263
+ end
264
+ end
265
+ return value
266
+ end
267
+ return self.defaultValue
268
+ end
171
269
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
270
  self:invokeValueChangeEventRecursive(
173
271
  getClass(self),
@@ -221,37 +319,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
319
  if defaultValueByObjectDataEntryId ~= nil then
222
320
  local value = defaultValueByObjectDataEntryId[entry.id]
223
321
  if value ~= nil then
224
- local ____temp_5
322
+ local ____temp_13
225
323
  if index == nil then
226
- ____temp_5 = value
324
+ ____temp_13 = value
227
325
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
231
329
  end
232
- ____temp_5 = ____value_index_4
330
+ ____temp_13 = ____value_index_12
233
331
  end
234
- return ____temp_5
332
+ return ____temp_13
235
333
  end
236
334
  end
237
335
  return index == nil and ({}) or self.defaultValue
238
336
  end
239
337
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
240
- if defaultValueByObjectDataEntryId ~= nil then
241
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
- if defaultValue ~= nil then
243
- local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
338
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
339
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
340
+ if defaultValue ~= nil or self.isGlobal then
341
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
342
+ local ____temp_15
245
343
  if index == nil then
246
- ____temp_7 = value
344
+ ____temp_15 = value
247
345
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
251
349
  end
252
- ____temp_7 = ____value_index_6
350
+ ____temp_15 = ____value_index_14
253
351
  end
254
- return ____temp_7
352
+ return ____temp_15
255
353
  end
256
354
  end
257
355
  if index ~= nil then
@@ -296,36 +394,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
394
  if defaultValueByObjectDataEntryId ~= nil then
297
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
396
  if valueByLevel ~= nil then
299
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
300
- if ____valueByLevel_index_8 == nil then
301
- ____valueByLevel_index_8 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
302
400
  end
303
- return ____valueByLevel_index_8
401
+ return ____valueByLevel_index_16
304
402
  end
305
403
  end
306
404
  return self.defaultValue
307
405
  end
308
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
309
- if defaultValueByObjectDataEntryId ~= nil then
310
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
- if defaultValueByLevel ~= nil then
312
- local ____opt_9 = self.valueByInstance[entry]
313
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
314
- if ____temp_11 == nil then
315
- ____temp_11 = defaultValueByLevel[level + 1]
316
- end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
320
- end
321
- return ____temp_11_12
322
- end
323
- end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
406
+ local ____opt_19 = self.originalValueByLevelByInstance
407
+ local ____opt_17 = ____opt_19 and ____opt_19[entry]
408
+ local originalValue = ____opt_17 and ____opt_17[level]
409
+ if originalValue ~= nil then
410
+ return originalValue
327
411
  end
328
- return ____temp_13
412
+ return self:getActualValue(entry, level)
329
413
  end
330
414
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
415
  if value == nil then
@@ -365,54 +449,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
365
449
  valueByLevel[level + 1] = value
366
450
  return true
367
451
  end
368
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
369
- if defaultValueByObjectDataEntryId ~= nil then
370
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
371
- if defaultValueByLevel ~= nil then
372
- local valueByLevel = self.valueByInstance[entry]
373
- if valueByLevel == nil then
374
- valueByLevel = {}
375
- self.valueByInstance[entry] = valueByLevel
376
- end
377
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
378
- if ____valueByLevel_index_14 == nil then
379
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
452
+ local modifiersByInstance = self.modifiersByInstance
453
+ if modifiersByInstance ~= nil then
454
+ local modifiers = modifiersByInstance[entry]
455
+ if modifiers ~= nil and modifiers.size ~= 0 then
456
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
457
+ if originalValueByLevelByInstance == nil then
458
+ originalValueByLevelByInstance = mutableWeakLuaMap()
459
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
380
460
  end
381
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
382
- if ____valueByLevel_index_14_15 == nil then
383
- ____valueByLevel_index_14_15 = self.defaultValue
461
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
462
+ value = self:calculateActualValue(entry, level)
463
+ end
464
+ end
465
+ return self:setActualValue(entry, level, value)
466
+ end
467
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
468
+ local modifiersByInstance = self.modifiersByInstance
469
+ if modifiersByInstance == nil then
470
+ modifiersByInstance = mutableWeakLuaMap()
471
+ self.modifiersByInstance = modifiersByInstance
472
+ end
473
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
474
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
475
+ if originalValueByLevelByInstance == nil then
476
+ originalValueByLevelByInstance = mutableWeakLuaMap()
477
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
478
+ end
479
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
480
+ local levelCount = self:getLevelCount(instance)
481
+ for level = 0, levelCount - 1 do
482
+ local ____originalValueByLevel_level_21 = originalValueByLevel[level]
483
+ if ____originalValueByLevel_level_21 == nil then
484
+ ____originalValueByLevel_level_21 = self:getActualValue(instance, level)
384
485
  end
385
- local previousValue = ____valueByLevel_index_14_15
386
- if value ~= previousValue then
387
- valueByLevel[level + 1] = value
388
- self:invokeValueChangeEvent(
389
- entry,
390
- self,
486
+ originalValueByLevel[level] = ____originalValueByLevel_level_21
487
+ self:setActualValue(
488
+ instance,
489
+ level,
490
+ self:calculateActualValue(instance, level)
491
+ )
492
+ end
493
+ end
494
+ end
495
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
496
+ local modifiersByInstance = self.modifiersByInstance
497
+ if modifiersByInstance ~= nil then
498
+ local modifiers = modifiersByInstance[instance]
499
+ if modifiers ~= nil and modifiers:remove(modifier) then
500
+ local levelCount = self:getLevelCount(instance)
501
+ for level = 0, levelCount - 1 do
502
+ self:setActualValue(
503
+ instance,
391
504
  level,
392
- previousValue,
393
- value
505
+ self:calculateActualValue(instance, level)
394
506
  )
395
507
  end
396
508
  return true
397
509
  end
398
510
  end
399
- if not self:hasNativeFieldValue(entry) then
400
- return false
401
- end
402
- local previousValue = self:getNativeFieldValue(entry, level)
403
- if value ~= previousValue then
404
- if not self:setNativeFieldValue(entry, level, value) then
405
- return false
406
- end
407
- self:invokeValueChangeEvent(
408
- entry,
409
- self,
410
- level,
411
- previousValue,
412
- value
413
- )
414
- end
415
- return true
511
+ return false
416
512
  end
417
513
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
418
514
  if value ~= nil then
@@ -429,6 +525,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
429
525
  end
430
526
  return self:setValue(entry, levelOrValue)
431
527
  end
528
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
529
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
530
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
531
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
532
+ if defaultValueByLevel ~= nil or self.isGlobal then
533
+ local ____opt_22 = self.valueByInstance[instance]
534
+ local ____temp_24 = ____opt_22 and ____opt_22[level + 1]
535
+ if ____temp_24 == nil then
536
+ ____temp_24 = (defaultValueByLevel or emptyArray())[level + 1]
537
+ end
538
+ local ____temp_24_25 = ____temp_24
539
+ if ____temp_24_25 == nil then
540
+ ____temp_24_25 = self.defaultValue
541
+ end
542
+ return ____temp_24_25
543
+ end
544
+ end
545
+ local ____temp_26 = self:getNativeFieldValue(instance, level)
546
+ if ____temp_26 == nil then
547
+ ____temp_26 = self.defaultValue
548
+ end
549
+ return ____temp_26
550
+ end
551
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
552
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
553
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
554
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
555
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
556
+ if defaultValueByLevel ~= nil or self.isGlobal then
557
+ local valueByLevel = self.valueByInstance[instance]
558
+ if valueByLevel == nil then
559
+ valueByLevel = {}
560
+ self.valueByInstance[instance] = valueByLevel
561
+ end
562
+ local ____valueByLevel_index_27 = valueByLevel[level + 1]
563
+ if ____valueByLevel_index_27 == nil then
564
+ ____valueByLevel_index_27 = (defaultValueByLevel or emptyArray())[level + 1]
565
+ end
566
+ local ____valueByLevel_index_27_28 = ____valueByLevel_index_27
567
+ if ____valueByLevel_index_27_28 == nil then
568
+ ____valueByLevel_index_27_28 = self.defaultValue
569
+ end
570
+ local previousValue = ____valueByLevel_index_27_28
571
+ valueByLevel[level + 1] = value
572
+ self:invokeValueChangeEvent(
573
+ instance,
574
+ self,
575
+ level,
576
+ previousValue,
577
+ value
578
+ )
579
+ return true
580
+ end
581
+ end
582
+ if not self:hasNativeFieldValue(objectDataEntryId) then
583
+ return false
584
+ end
585
+ local previousValue = self:getNativeFieldValue(instance, level)
586
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
587
+ return false
588
+ end
589
+ self:invokeValueChangeEvent(
590
+ instance,
591
+ self,
592
+ level,
593
+ previousValue,
594
+ value
595
+ )
596
+ return true
597
+ end
598
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
599
+ local ____opt_31 = self.originalValueByLevelByInstance
600
+ local ____opt_29 = ____opt_31 and ____opt_31[instance]
601
+ local originalValue = ____opt_29 and ____opt_29[level]
602
+ local ____opt_33 = self.modifiersByInstance
603
+ local modifiers = ____opt_33 and ____opt_33[instance]
604
+ if originalValue ~= nil then
605
+ local value = originalValue
606
+ if modifiers ~= nil then
607
+ for modifier in pairs(modifiers) do
608
+ value = modifier(instance, level, value, originalValue)
609
+ end
610
+ end
611
+ return value
612
+ end
613
+ return self.defaultValue
614
+ end
432
615
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
433
616
  self:invokeValueChangeEventRecursive(
434
617
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -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
@@ -0,0 +1,6 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FLOAT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FLOAT_FIELD: UnitScalingValueField & symbol;
@@ -0,0 +1,11 @@
1
+ local ____exports = {}
2
+ local ____unit = require("engine.object-field.unit")
3
+ local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
5
+ local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
+ local UnitScalingValueField = ____unit.UnitScalingValueField
7
+ ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
8
+ ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
+ ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
10
+ ____exports.SCALING_VALUE_UNIT_FLOAT_FIELD = UnitScalingValueField:create(fourCC("usca"))
11
+ return ____exports
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "../core/types/player";
3
+ import { Event } from "../event";
4
+ export declare const synchronizer: <T, K extends number>(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined) => ((player: Player, object: T | undefined) => Promise<T | undefined>);
5
+ export declare class ObjectBus<T, K extends number> {
6
+ private readonly getSyncId;
7
+ readonly event: Event<[Player, T | undefined]>;
8
+ private readonly syncSlider;
9
+ constructor(getSyncId: (object: T) => K, getObject: (syncId: K) => T | undefined);
10
+ send(object: T | undefined): void;
11
+ }