warscript 0.0.1-dev.193ed34 → 0.0.1-dev.1a26d39

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