warscript 0.0.1-dev.87bdb89 → 0.0.1-dev.8895725

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 (161) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/handle.lua +6 -9
  5. package/core/types/item.d.ts +1 -0
  6. package/core/types/item.lua +1 -0
  7. package/core/types/player.d.ts +17 -1
  8. package/core/types/player.lua +70 -24
  9. package/core/types/playerCamera.d.ts +2 -0
  10. package/core/types/playerCamera.lua +123 -5
  11. package/core/types/sound.lua +1 -1
  12. package/core/types/tileCell.d.ts +11 -1
  13. package/core/types/tileCell.lua +97 -0
  14. package/core/types/timer.d.ts +3 -1
  15. package/core/types/timer.lua +27 -2
  16. package/decl/native.d.ts +6 -4
  17. package/destroyable.d.ts +1 -0
  18. package/destroyable.lua +9 -0
  19. package/engine/behavior.d.ts +14 -1
  20. package/engine/behavior.lua +230 -70
  21. package/engine/behaviour/ability/apply-buff.lua +5 -5
  22. package/engine/behaviour/ability/damage.d.ts +3 -0
  23. package/engine/behaviour/ability/damage.lua +8 -2
  24. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  25. package/engine/behaviour/ability/emulate-impact.lua +7 -5
  26. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  27. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +11 -6
  31. package/engine/behaviour/ability.lua +37 -16
  32. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  33. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  34. package/engine/behaviour/unit.d.ts +26 -5
  35. package/engine/behaviour/unit.lua +180 -27
  36. package/engine/buff.d.ts +67 -22
  37. package/engine/buff.lua +371 -182
  38. package/engine/internal/ability.d.ts +3 -1
  39. package/engine/internal/ability.lua +49 -26
  40. package/engine/internal/item/ability.lua +51 -1
  41. package/engine/internal/item/fields.d.ts +12 -0
  42. package/engine/internal/item/fields.lua +33 -0
  43. package/engine/internal/item+owner.lua +12 -6
  44. package/engine/internal/item.d.ts +11 -14
  45. package/engine/internal/item.lua +81 -70
  46. package/engine/internal/mechanics/cast-ability.lua +6 -3
  47. package/engine/internal/misc/frame-coordinates.lua +21 -0
  48. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  49. package/engine/internal/misc/get-terrain-z.lua +11 -0
  50. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  51. package/engine/internal/misc/player-local-handle.lua +5 -0
  52. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  53. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  54. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  55. package/engine/internal/object-data/health-bonus.lua +16 -0
  56. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  57. package/engine/internal/object-data/mana-bonus.lua +16 -0
  58. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  59. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  60. package/engine/internal/unit/ability.d.ts +35 -5
  61. package/engine/internal/unit/ability.lua +96 -21
  62. package/engine/internal/unit/attributes.d.ts +17 -0
  63. package/engine/internal/unit/attributes.lua +46 -0
  64. package/engine/internal/unit/bonus.d.ts +6 -0
  65. package/engine/internal/unit/bonus.lua +33 -3
  66. package/engine/internal/unit/fly-height.d.ts +7 -0
  67. package/engine/internal/unit/fly-height.lua +20 -0
  68. package/engine/internal/unit/interrupts.d.ts +12 -0
  69. package/engine/internal/unit/interrupts.lua +28 -0
  70. package/engine/internal/unit/main-selected.lua +12 -27
  71. package/engine/internal/unit/order.d.ts +20 -0
  72. package/engine/internal/unit/order.lua +136 -0
  73. package/engine/internal/unit/range-event.d.ts +12 -0
  74. package/engine/internal/unit/range-event.lua +90 -0
  75. package/engine/internal/unit/scale.d.ts +7 -0
  76. package/engine/internal/unit/scale.lua +20 -0
  77. package/engine/internal/unit+ability.lua +10 -1
  78. package/engine/internal/unit+bonus.lua +3 -3
  79. package/engine/internal/unit-missile-launch.lua +52 -14
  80. package/engine/internal/unit.d.ts +20 -24
  81. package/engine/internal/unit.lua +232 -240
  82. package/engine/local-client.d.ts +7 -0
  83. package/engine/local-client.lua +86 -1
  84. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  85. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  86. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  87. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  88. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  89. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  90. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  91. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  92. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  93. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  94. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  95. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  96. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  97. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  98. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  99. package/engine/object-data/entry/ability-type.d.ts +2 -0
  100. package/engine/object-data/entry/ability-type.lua +89 -8
  101. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  102. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  103. package/engine/object-data/entry/destructible-type.lua +155 -0
  104. package/engine/object-data/entry/unit-type.d.ts +15 -2
  105. package/engine/object-data/entry/unit-type.lua +135 -33
  106. package/engine/object-field/ability.d.ts +3 -3
  107. package/engine/object-field/ability.lua +9 -8
  108. package/engine/object-field/item.d.ts +22 -0
  109. package/engine/object-field/item.lua +118 -0
  110. package/engine/object-field/unit.d.ts +31 -5
  111. package/engine/object-field/unit.lua +95 -0
  112. package/engine/object-field.d.ts +14 -4
  113. package/engine/object-field.lua +282 -134
  114. package/engine/random.d.ts +10 -0
  115. package/engine/random.lua +21 -0
  116. package/engine/standard/fields/ability.d.ts +2 -2
  117. package/engine/standard/fields/ability.lua +2 -2
  118. package/engine/standard/fields/item.d.ts +4 -0
  119. package/engine/standard/fields/item.lua +6 -0
  120. package/engine/standard/fields/unit.d.ts +12 -0
  121. package/engine/standard/fields/unit.lua +20 -0
  122. package/engine/synchronization.d.ts +11 -0
  123. package/engine/synchronization.lua +77 -0
  124. package/engine/text-tag.d.ts +26 -3
  125. package/engine/text-tag.lua +217 -11
  126. package/engine/unit.d.ts +6 -0
  127. package/engine/unit.lua +6 -0
  128. package/lualib_bundle.lua +1 -1
  129. package/math.d.ts +2 -0
  130. package/math.lua +14 -0
  131. package/net/socket.lua +1 -1
  132. package/objutil/buff.lua +10 -8
  133. package/objutil/object.lua +1 -1
  134. package/operation.lua +1 -4
  135. package/package.json +5 -5
  136. package/patch-lua.lua +15 -0
  137. package/patch-lualib.lua +1 -1
  138. package/utility/arrays.d.ts +1 -0
  139. package/utility/arrays.lua +8 -0
  140. package/utility/callback-array.d.ts +17 -0
  141. package/utility/callback-array.lua +61 -0
  142. package/utility/functions.d.ts +7 -0
  143. package/utility/functions.lua +12 -0
  144. package/utility/linked-map.d.ts +35 -0
  145. package/utility/linked-map.lua +107 -0
  146. package/utility/linked-set.d.ts +4 -1
  147. package/utility/linked-set.lua +46 -1
  148. package/utility/lua-maps.d.ts +12 -2
  149. package/utility/lua-maps.lua +37 -2
  150. package/utility/lua-sets.d.ts +1 -0
  151. package/utility/lua-sets.lua +4 -0
  152. package/utility/records.lua +20 -1
  153. package/utility/types.d.ts +3 -0
  154. package/utility/unordered-map.d.ts +27 -0
  155. package/utility/unordered-map.lua +99 -0
  156. package/core/types/order.d.ts +0 -26
  157. package/core/types/order.lua +0 -65
  158. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  159. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  160. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  161. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -23,7 +23,9 @@ local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.Ob
23
23
  local ____linked_2Dset = require("utility.linked-set")
24
24
  local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
26
27
  local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
27
29
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
28
30
  local ____arrays = require("utility.arrays")
29
31
  local emptyArray = ____arrays.emptyArray
@@ -38,7 +40,7 @@ local ObjectFieldBase = __TS__Class()
38
40
  ObjectFieldBase.name = "ObjectFieldBase"
39
41
  function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
40
42
  if isGlobal == nil then
41
- isGlobal = true
43
+ isGlobal = false
42
44
  end
43
45
  self.isGlobal = isGlobal
44
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
@@ -57,9 +59,9 @@ end
57
59
  function ObjectFieldBase.prototype.supports(self, instance)
58
60
  return __TS__InstanceOf(instance, self.instanceClass)
59
61
  end
60
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
61
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
62
- return self.isGlobal or 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)
63
65
  end
64
66
  function ObjectFieldBase.create(self, id, isGlobal)
65
67
  return __TS__New(
@@ -98,7 +100,7 @@ function ObjectField.prototype.getValue(self, entry, includeModifiers)
98
100
  end
99
101
  return self.defaultValue
100
102
  end
101
- if includeModifiers == false then
103
+ if not includeModifiers then
102
104
  local originalValueByInstance = self.originalValueByInstance
103
105
  if originalValueByInstance ~= nil then
104
106
  local originalValue = originalValueByInstance[entry]
@@ -122,6 +124,7 @@ function ObjectField.prototype.setValue(self, entry, value)
122
124
  defaultValueByObjectDataEntryId[entry.id] = value
123
125
  return true
124
126
  end
127
+ local previousOriginalValue
125
128
  local modifiersByInstance = self.modifiersByInstance
126
129
  if modifiersByInstance ~= nil then
127
130
  local modifiers = modifiersByInstance[entry]
@@ -131,11 +134,40 @@ function ObjectField.prototype.setValue(self, entry, value)
131
134
  originalValueByInstance = mutableWeakLuaMap()
132
135
  self.originalValueByInstance = originalValueByInstance
133
136
  end
137
+ previousOriginalValue = originalValueByInstance[entry]
138
+ if value == previousOriginalValue then
139
+ return true
140
+ end
134
141
  originalValueByInstance[entry] = value
135
- value = self:calculateActualValue(entry)
142
+ value = (self:calculateActualValue(entry))
136
143
  end
137
144
  end
138
- return self:setActualValue(entry, value)
145
+ local previousValue = self:setActualValue(entry, value)
146
+ if previousValue == nil then
147
+ return false
148
+ end
149
+ if previousOriginalValue ~= nil or value ~= previousValue then
150
+ local ____self_invokeValueChangeEvent_2 = self.invokeValueChangeEvent
151
+ local ____entry_1 = entry
152
+ local ____previousOriginalValue_0 = previousOriginalValue
153
+ if ____previousOriginalValue_0 == nil then
154
+ ____previousOriginalValue_0 = previousValue
155
+ end
156
+ ____self_invokeValueChangeEvent_2(
157
+ self,
158
+ ____entry_1,
159
+ self,
160
+ ____previousOriginalValue_0,
161
+ value
162
+ )
163
+ end
164
+ return true
165
+ end
166
+ function ObjectField.prototype.updateActualValue(self, instance)
167
+ local actualValue, hasModifiers = self:calculateActualValue(instance)
168
+ if hasModifiers then
169
+ self:setActualValue(instance, actualValue)
170
+ end
139
171
  end
140
172
  function ObjectField.prototype.applyModifier(self, instance, modifier)
141
173
  local modifiersByInstance = self.modifiersByInstance
@@ -149,11 +181,14 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
149
181
  originalValueByInstance = mutableWeakLuaMap()
150
182
  self.originalValueByInstance = originalValueByInstance
151
183
  end
152
- originalValueByInstance[instance] = self:getActualValue(instance)
153
- self:setActualValue(
154
- instance,
155
- self:calculateActualValue(instance)
156
- )
184
+ local ____originalValueByInstance_4 = originalValueByInstance
185
+ local ____instance_5 = instance
186
+ local ____originalValueByInstance_instance_3 = originalValueByInstance[instance]
187
+ if ____originalValueByInstance_instance_3 == nil then
188
+ ____originalValueByInstance_instance_3 = self:getActualValue(instance)
189
+ end
190
+ ____originalValueByInstance_4[____instance_5] = ____originalValueByInstance_instance_3
191
+ self:setActualValue(instance, (self:calculateActualValue(instance)))
157
192
  end
158
193
  end
159
194
  function ObjectField.prototype.removeModifier(self, instance, modifier)
@@ -161,10 +196,7 @@ function ObjectField.prototype.removeModifier(self, instance, modifier)
161
196
  if modifiersByInstance ~= nil then
162
197
  local modifiers = modifiersByInstance[instance]
163
198
  if modifiers ~= nil and modifiers:remove(modifier) then
164
- self:setActualValue(
165
- instance,
166
- self:calculateActualValue(instance)
167
- )
199
+ self:setActualValue(instance, (self:calculateActualValue(instance)))
168
200
  return true
169
201
  end
170
202
  end
@@ -192,74 +224,70 @@ function ObjectField.prototype.trySetValue(self, entry, value)
192
224
  end
193
225
  function ObjectField.prototype.getActualValue(self, instance)
194
226
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
195
- if defaultValueByObjectDataEntryId ~= nil then
196
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
227
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
228
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
197
229
  if defaultValue ~= nil or self.isGlobal then
198
- local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
199
- if ____self_valueByInstance_instance_0 == nil then
200
- ____self_valueByInstance_instance_0 = defaultValue
230
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
231
+ if ____self_valueByInstance_instance_6 == nil then
232
+ ____self_valueByInstance_instance_6 = defaultValue
201
233
  end
202
- local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
203
- if ____self_valueByInstance_instance_0_1 == nil then
204
- ____self_valueByInstance_instance_0_1 = self.defaultValue
234
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
235
+ if ____self_valueByInstance_instance_6_7 == nil then
236
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
205
237
  end
206
- return ____self_valueByInstance_instance_0_1
238
+ return ____self_valueByInstance_instance_6_7
207
239
  end
208
240
  end
209
- local ____temp_2 = self:getNativeFieldValue(instance)
210
- if ____temp_2 == nil then
211
- ____temp_2 = self.defaultValue
241
+ local ____temp_8 = self:getNativeFieldValue(instance)
242
+ if ____temp_8 == nil then
243
+ ____temp_8 = self.defaultValue
212
244
  end
213
- return ____temp_2
245
+ return ____temp_8
214
246
  end
215
247
  function ObjectField.prototype.setActualValue(self, instance, value)
216
248
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
217
- if defaultValueByObjectDataEntryId ~= nil then
218
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
249
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
250
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
251
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
219
252
  if defaultValue ~= nil or self.isGlobal then
220
- local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
221
- if ____self_valueByInstance_instance_3 == nil then
222
- ____self_valueByInstance_instance_3 = defaultValue
253
+ local ____self_valueByInstance_instance_9 = self.valueByInstance[instance]
254
+ if ____self_valueByInstance_instance_9 == nil then
255
+ ____self_valueByInstance_instance_9 = defaultValue
223
256
  end
224
- local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
225
- if ____self_valueByInstance_instance_3_4 == nil then
226
- ____self_valueByInstance_instance_3_4 = self.defaultValue
257
+ local ____self_valueByInstance_instance_9_10 = ____self_valueByInstance_instance_9
258
+ if ____self_valueByInstance_instance_9_10 == nil then
259
+ ____self_valueByInstance_instance_9_10 = self.defaultValue
227
260
  end
228
- local previousValue = ____self_valueByInstance_instance_3_4
229
- if value ~= previousValue then
230
- self.valueByInstance[instance] = value
231
- self:invokeValueChangeEvent(instance, self, previousValue, value)
232
- end
233
- return true
261
+ local previousValue = ____self_valueByInstance_instance_9_10
262
+ self.valueByInstance[instance] = value
263
+ return previousValue
234
264
  end
235
265
  end
236
- if not self:hasNativeFieldValue(instance) then
237
- return false
266
+ if not self:hasNativeFieldValue(objectDataEntryId) then
267
+ return nil
238
268
  end
239
269
  local previousValue = self:getNativeFieldValue(instance)
240
- if value ~= previousValue then
241
- if not self:setNativeFieldValue(instance, value) then
242
- return false
243
- end
244
- self:invokeValueChangeEvent(instance, self, previousValue, value)
270
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
271
+ return nil
245
272
  end
246
- return true
273
+ return previousValue
247
274
  end
248
275
  function ObjectField.prototype.calculateActualValue(self, instance)
249
- local ____opt_5 = self.originalValueByInstance
250
- local originalValue = ____opt_5 and ____opt_5[instance]
251
- local ____opt_7 = self.modifiersByInstance
252
- local modifiers = ____opt_7 and ____opt_7[instance]
276
+ local ____opt_11 = self.originalValueByInstance
277
+ local originalValue = ____opt_11 and ____opt_11[instance]
278
+ local ____opt_13 = self.modifiersByInstance
279
+ local modifiers = ____opt_13 and ____opt_13[instance]
253
280
  if originalValue ~= nil then
254
281
  local value = originalValue
255
282
  if modifiers ~= nil then
256
283
  for modifier in pairs(modifiers) do
257
284
  value = modifier(instance, value, originalValue)
258
285
  end
286
+ return value, true
259
287
  end
260
- return value
288
+ return value, false
261
289
  end
262
- return self.defaultValue
290
+ return self.defaultValue, false
263
291
  end
264
292
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
265
293
  self:invokeValueChangeEventRecursive(
@@ -314,37 +342,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
314
342
  if defaultValueByObjectDataEntryId ~= nil then
315
343
  local value = defaultValueByObjectDataEntryId[entry.id]
316
344
  if value ~= nil then
317
- local ____temp_10
345
+ local ____temp_16
318
346
  if index == nil then
319
- ____temp_10 = value
347
+ ____temp_16 = value
320
348
  else
321
- local ____value_index_9 = value[index + 1]
322
- if ____value_index_9 == nil then
323
- ____value_index_9 = self.defaultValue
349
+ local ____value_index_15 = value[index + 1]
350
+ if ____value_index_15 == nil then
351
+ ____value_index_15 = self.defaultValue
324
352
  end
325
- ____temp_10 = ____value_index_9
353
+ ____temp_16 = ____value_index_15
326
354
  end
327
- return ____temp_10
355
+ return ____temp_16
328
356
  end
329
357
  end
330
358
  return index == nil and ({}) or self.defaultValue
331
359
  end
332
360
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
333
- if defaultValueByObjectDataEntryId ~= nil then
334
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
335
- if defaultValue ~= nil then
336
- local value = self.valueByInstance[entry] or defaultValue
337
- local ____temp_12
361
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
362
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
363
+ if defaultValue ~= nil or self.isGlobal then
364
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
365
+ local ____temp_18
338
366
  if index == nil then
339
- ____temp_12 = value
367
+ ____temp_18 = value
340
368
  else
341
- local ____value_index_11 = value[index + 1]
342
- if ____value_index_11 == nil then
343
- ____value_index_11 = self.defaultValue
369
+ local ____value_index_17 = value[index + 1]
370
+ if ____value_index_17 == nil then
371
+ ____value_index_17 = self.defaultValue
344
372
  end
345
- ____temp_12 = ____value_index_11
373
+ ____temp_18 = ____value_index_17
346
374
  end
347
- return ____temp_12
375
+ return ____temp_18
348
376
  end
349
377
  end
350
378
  if index ~= nil then
@@ -375,12 +403,12 @@ ____exports.ObjectLevelField = __TS__Class()
375
403
  local ObjectLevelField = ____exports.ObjectLevelField
376
404
  ObjectLevelField.name = "ObjectLevelField"
377
405
  __TS__ClassExtends(ObjectLevelField, ObjectFieldBase)
378
- function ObjectLevelField.prototype.getValue(self, entry, level)
406
+ function ObjectLevelField.prototype.getValue(self, entry, level, includeModifiers)
379
407
  if level == nil then
380
408
  local result = {}
381
409
  local levelCount = self:getLevelCount(entry)
382
410
  for i = 0, levelCount - 1 do
383
- result[i + 1] = self:getValue(entry, i)
411
+ result[i + 1] = self:getValue(entry, i, includeModifiers)
384
412
  end
385
413
  return result
386
414
  end
@@ -389,36 +417,24 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
389
417
  if defaultValueByObjectDataEntryId ~= nil then
390
418
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
391
419
  if valueByLevel ~= nil then
392
- local ____valueByLevel_index_13 = valueByLevel[level + 1]
393
- if ____valueByLevel_index_13 == nil then
394
- ____valueByLevel_index_13 = self.defaultValue
420
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
421
+ if ____valueByLevel_index_19 == nil then
422
+ ____valueByLevel_index_19 = self.defaultValue
395
423
  end
396
- return ____valueByLevel_index_13
424
+ return ____valueByLevel_index_19
397
425
  end
398
426
  end
399
427
  return self.defaultValue
400
428
  end
401
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
402
- if defaultValueByObjectDataEntryId ~= nil then
403
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
404
- if defaultValueByLevel ~= nil or self.isGlobal then
405
- local ____opt_14 = self.valueByInstance[entry]
406
- local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
407
- if ____temp_16 == nil then
408
- ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
409
- end
410
- local ____temp_16_17 = ____temp_16
411
- if ____temp_16_17 == nil then
412
- ____temp_16_17 = self.defaultValue
413
- end
414
- return ____temp_16_17
429
+ if not includeModifiers then
430
+ local ____opt_22 = self.originalValueByLevelByInstance
431
+ local ____opt_20 = ____opt_22 and ____opt_22[entry]
432
+ local originalValue = ____opt_20 and ____opt_20[level]
433
+ if originalValue ~= nil then
434
+ return originalValue
415
435
  end
416
436
  end
417
- local ____temp_18 = self:getNativeFieldValue(entry, level)
418
- if ____temp_18 == nil then
419
- ____temp_18 = self.defaultValue
420
- end
421
- return ____temp_18
437
+ return self:getActualValue(entry, level)
422
438
  end
423
439
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
424
440
  if value == nil then
@@ -458,55 +474,114 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
458
474
  valueByLevel[level + 1] = value
459
475
  return true
460
476
  end
461
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
462
- if defaultValueByObjectDataEntryId ~= nil then
463
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
464
- if defaultValueByLevel ~= nil or self.isGlobal then
465
- local valueByLevel = self.valueByInstance[entry]
466
- if valueByLevel == nil then
467
- valueByLevel = {}
468
- self.valueByInstance[entry] = valueByLevel
469
- end
470
- local ____valueByLevel_index_19 = valueByLevel[level + 1]
471
- if ____valueByLevel_index_19 == nil then
472
- ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
473
- end
474
- local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
475
- if ____valueByLevel_index_19_20 == nil then
476
- ____valueByLevel_index_19_20 = self.defaultValue
477
+ local previousOriginalValue
478
+ local modifiersByInstance = self.modifiersByInstance
479
+ if modifiersByInstance ~= nil then
480
+ local modifiers = modifiersByInstance[entry]
481
+ if modifiers ~= nil and modifiers.size ~= 0 then
482
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
483
+ if originalValueByLevelByInstance == nil then
484
+ originalValueByLevelByInstance = mutableWeakLuaMap()
485
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
477
486
  end
478
- local previousValue = ____valueByLevel_index_19_20
479
- if value ~= previousValue then
480
- valueByLevel[level + 1] = value
481
- self:invokeValueChangeEvent(
482
- entry,
483
- self,
484
- level,
485
- previousValue,
486
- value
487
- )
487
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)
488
+ previousOriginalValue = originalValueByLevel[level]
489
+ if value == previousOriginalValue then
490
+ return true
488
491
  end
489
- return true
492
+ originalValueByLevel[level] = value
493
+ value = self:calculateActualValue(entry, level)
490
494
  end
491
495
  end
492
- if not self:hasNativeFieldValue(entry) then
496
+ local previousValue = self:setActualValue(entry, level, value)
497
+ if previousValue == nil then
493
498
  return false
494
499
  end
495
- local previousValue = self:getNativeFieldValue(entry, level)
496
- if value ~= previousValue then
497
- if not self:setNativeFieldValue(entry, level, value) then
498
- return false
500
+ if previousOriginalValue ~= nil or value ~= previousValue then
501
+ local ____self_invokeValueChangeEvent_26 = self.invokeValueChangeEvent
502
+ local ____entry_25 = entry
503
+ local ____previousOriginalValue_24 = previousOriginalValue
504
+ if ____previousOriginalValue_24 == nil then
505
+ ____previousOriginalValue_24 = previousValue
499
506
  end
500
- self:invokeValueChangeEvent(
501
- entry,
507
+ ____self_invokeValueChangeEvent_26(
508
+ self,
509
+ ____entry_25,
502
510
  self,
503
511
  level,
504
- previousValue,
512
+ ____previousOriginalValue_24,
505
513
  value
506
514
  )
507
515
  end
508
516
  return true
509
517
  end
518
+ function ObjectLevelField.prototype.updateActualValue(self, instance, level)
519
+ local modifiersByInstance = self.modifiersByInstance
520
+ if modifiersByInstance == nil then
521
+ return
522
+ end
523
+ local modifiers = modifiersByInstance[instance]
524
+ if modifiers == nil or modifiers.size == 0 then
525
+ return
526
+ end
527
+ if level == nil then
528
+ for i = 0, self:getLevelCount(instance) - 1 do
529
+ self:updateActualValue(instance, i)
530
+ end
531
+ return
532
+ end
533
+ self:setActualValue(
534
+ instance,
535
+ level,
536
+ self:calculateActualValue(instance, level)
537
+ )
538
+ end
539
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
540
+ local modifiersByInstance = self.modifiersByInstance
541
+ if modifiersByInstance == nil then
542
+ modifiersByInstance = mutableWeakLuaMap()
543
+ self.modifiersByInstance = modifiersByInstance
544
+ end
545
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
546
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
547
+ if originalValueByLevelByInstance == nil then
548
+ originalValueByLevelByInstance = mutableWeakLuaMap()
549
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
550
+ end
551
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
552
+ local levelCount = self:getLevelCount(instance)
553
+ for level = 0, levelCount - 1 do
554
+ local ____originalValueByLevel_level_27 = originalValueByLevel[level]
555
+ if ____originalValueByLevel_level_27 == nil then
556
+ ____originalValueByLevel_level_27 = self:getActualValue(instance, level)
557
+ end
558
+ originalValueByLevel[level] = ____originalValueByLevel_level_27
559
+ self:setActualValue(
560
+ instance,
561
+ level,
562
+ self:calculateActualValue(instance, level)
563
+ )
564
+ end
565
+ end
566
+ end
567
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
568
+ local modifiersByInstance = self.modifiersByInstance
569
+ if modifiersByInstance ~= nil then
570
+ local modifiers = modifiersByInstance[instance]
571
+ if modifiers ~= nil and modifiers:remove(modifier) then
572
+ local levelCount = self:getLevelCount(instance)
573
+ for level = 0, levelCount - 1 do
574
+ self:setActualValue(
575
+ instance,
576
+ level,
577
+ self:calculateActualValue(instance, level)
578
+ )
579
+ end
580
+ return true
581
+ end
582
+ end
583
+ return false
584
+ end
510
585
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
511
586
  if value ~= nil then
512
587
  if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
@@ -522,6 +597,79 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
522
597
  end
523
598
  return self:setValue(entry, levelOrValue)
524
599
  end
600
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
601
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
602
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
603
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
604
+ if defaultValueByLevel ~= nil or self.isGlobal then
605
+ local ____opt_28 = self.valueByInstance[instance]
606
+ local ____temp_30 = ____opt_28 and ____opt_28[level + 1]
607
+ if ____temp_30 == nil then
608
+ ____temp_30 = (defaultValueByLevel or emptyArray())[level + 1]
609
+ end
610
+ local ____temp_30_31 = ____temp_30
611
+ if ____temp_30_31 == nil then
612
+ ____temp_30_31 = self.defaultValue
613
+ end
614
+ return ____temp_30_31
615
+ end
616
+ end
617
+ local ____temp_32 = self:getNativeFieldValue(instance, level)
618
+ if ____temp_32 == nil then
619
+ ____temp_32 = self.defaultValue
620
+ end
621
+ return ____temp_32
622
+ end
623
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
624
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
625
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
626
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
627
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
628
+ if defaultValueByLevel ~= nil or self.isGlobal then
629
+ local valueByLevel = self.valueByInstance[instance]
630
+ if valueByLevel == nil then
631
+ valueByLevel = {}
632
+ self.valueByInstance[instance] = valueByLevel
633
+ end
634
+ local ____valueByLevel_index_33 = valueByLevel[level + 1]
635
+ if ____valueByLevel_index_33 == nil then
636
+ ____valueByLevel_index_33 = (defaultValueByLevel or emptyArray())[level + 1]
637
+ end
638
+ local ____valueByLevel_index_33_34 = ____valueByLevel_index_33
639
+ if ____valueByLevel_index_33_34 == nil then
640
+ ____valueByLevel_index_33_34 = self.defaultValue
641
+ end
642
+ local previousValue = ____valueByLevel_index_33_34
643
+ valueByLevel[level + 1] = value
644
+ return previousValue
645
+ end
646
+ end
647
+ if not self:hasNativeFieldValue(objectDataEntryId) then
648
+ return nil
649
+ end
650
+ local previousValue = self:getNativeFieldValue(instance, level)
651
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
652
+ return nil
653
+ end
654
+ return previousValue
655
+ end
656
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
657
+ local ____opt_37 = self.originalValueByLevelByInstance
658
+ local ____opt_35 = ____opt_37 and ____opt_37[instance]
659
+ local originalValue = ____opt_35 and ____opt_35[level]
660
+ local ____opt_39 = self.modifiersByInstance
661
+ local modifiers = ____opt_39 and ____opt_39[instance]
662
+ if originalValue ~= nil then
663
+ local value = originalValue
664
+ if modifiers ~= nil then
665
+ for modifier in pairs(modifiers) do
666
+ value = modifier(instance, level, value, originalValue)
667
+ end
668
+ end
669
+ return value
670
+ end
671
+ return self.defaultValue
672
+ end
525
673
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
526
674
  self:invokeValueChangeEventRecursive(
527
675
  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,12 @@ 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
+ };
21
+ export declare const shuffle: (array: unknown[]) => void;
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,24 @@ ____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
31
+ ____exports.shuffle = function(array)
32
+ for i = #array - 1, 1 do
33
+ local j = getRandomInt(0, i)
34
+ local value = array[i + 1]
35
+ array[i + 1] = array[j + 1]
36
+ array[j + 1] = value
37
+ end
38
+ end
18
39
  return ____exports
@@ -376,8 +376,8 @@ export declare const INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD: Abi
376
376
  export declare const ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
377
377
  export declare const AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
378
378
  export declare const DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
- export declare const ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
- export declare const MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
+ export declare const MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
+ export declare const ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
381
381
  export declare const EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
382
382
  export declare const DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
383
383
  export declare const ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
@@ -387,8 +387,8 @@ ____exports.INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloa
387
387
  ____exports.ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Neu1"))
388
388
  ____exports.AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Arm1"))
389
389
  ____exports.DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi1"))
390
- ____exports.ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
- ____exports.MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
390
+ ____exports.MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
+ ____exports.ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
392
392
  ____exports.EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa1"))
393
393
  ____exports.DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa2"))
394
394
  ____exports.ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa3"))
@@ -0,0 +1,4 @@
1
+ /** @noSelfInFile */
2
+ import { ItemBooleanField } from "../../object-field/item";
3
+ export declare const CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD: ItemBooleanField & symbol;
4
+ export declare const IS_ACTIVELY_USED_ITEM_FIELD: ItemBooleanField & symbol;