warscript 0.0.1-dev.2cd2e68 → 0.0.1-dev.2ce63f3

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 (97) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/tileCell.d.ts +11 -1
  9. package/core/types/tileCell.lua +97 -0
  10. package/core/types/timer.d.ts +3 -1
  11. package/core/types/timer.lua +27 -2
  12. package/decl/native.d.ts +6 -4
  13. package/engine/behavior.d.ts +12 -1
  14. package/engine/behavior.lua +172 -70
  15. package/engine/behaviour/ability/apply-buff.lua +1 -1
  16. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  17. package/engine/behaviour/ability/emulate-impact.lua +2 -1
  18. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  19. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  20. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  21. package/engine/behaviour/ability/restore-mana.lua +6 -6
  22. package/engine/behaviour/ability.lua +7 -16
  23. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  24. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  25. package/engine/behaviour/unit.d.ts +26 -5
  26. package/engine/behaviour/unit.lua +170 -27
  27. package/engine/buff.d.ts +12 -5
  28. package/engine/buff.lua +128 -87
  29. package/engine/internal/ability.d.ts +3 -1
  30. package/engine/internal/ability.lua +34 -11
  31. package/engine/internal/item/ability.lua +51 -1
  32. package/engine/internal/item+owner.lua +12 -6
  33. package/engine/internal/item.d.ts +13 -15
  34. package/engine/internal/item.lua +63 -49
  35. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  36. package/engine/internal/misc/frame-coordinates.lua +21 -0
  37. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  38. package/engine/internal/misc/get-terrain-z.lua +11 -0
  39. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  40. package/engine/internal/misc/player-local-handle.lua +5 -0
  41. package/engine/internal/unit/ability.d.ts +35 -5
  42. package/engine/internal/unit/ability.lua +96 -21
  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/main-selected.lua +12 -27
  46. package/engine/internal/unit/order.d.ts +20 -0
  47. package/engine/internal/unit/order.lua +136 -0
  48. package/engine/internal/unit/scale.d.ts +7 -0
  49. package/engine/internal/unit/scale.lua +20 -0
  50. package/engine/internal/unit+ability.lua +10 -1
  51. package/engine/internal/unit-missile-launch.lua +45 -14
  52. package/engine/internal/unit.d.ts +19 -16
  53. package/engine/internal/unit.lua +170 -136
  54. package/engine/local-client.d.ts +2 -0
  55. package/engine/local-client.lua +30 -0
  56. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  57. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  58. package/engine/object-data/entry/ability-type.lua +5 -4
  59. package/engine/object-data/entry/unit-type.d.ts +11 -2
  60. package/engine/object-data/entry/unit-type.lua +59 -1
  61. package/engine/object-field/ability.d.ts +3 -3
  62. package/engine/object-field/ability.lua +7 -6
  63. package/engine/object-field/unit.d.ts +24 -1
  64. package/engine/object-field/unit.lua +91 -0
  65. package/engine/object-field.d.ts +11 -3
  66. package/engine/object-field.lua +213 -123
  67. package/engine/random.d.ts +9 -0
  68. package/engine/random.lua +13 -0
  69. package/engine/standard/fields/ability.d.ts +2 -2
  70. package/engine/standard/fields/ability.lua +2 -2
  71. package/engine/standard/fields/unit.d.ts +6 -0
  72. package/engine/standard/fields/unit.lua +11 -0
  73. package/engine/synchronization.d.ts +11 -0
  74. package/engine/synchronization.lua +77 -0
  75. package/engine/text-tag.d.ts +36 -2
  76. package/engine/text-tag.lua +250 -10
  77. package/engine/unit.d.ts +3 -0
  78. package/engine/unit.lua +3 -0
  79. package/net/socket.lua +1 -1
  80. package/objutil/buff.lua +1 -1
  81. package/package.json +2 -2
  82. package/patch-lualib.lua +1 -1
  83. package/utility/arrays.d.ts +1 -0
  84. package/utility/arrays.lua +8 -0
  85. package/utility/callback-array.d.ts +17 -0
  86. package/utility/callback-array.lua +61 -0
  87. package/utility/functions.d.ts +7 -0
  88. package/utility/functions.lua +12 -0
  89. package/utility/linked-set.d.ts +1 -0
  90. package/utility/linked-set.lua +19 -1
  91. package/utility/lua-maps.d.ts +12 -2
  92. package/utility/lua-maps.lua +37 -2
  93. package/utility/lua-sets.d.ts +1 -0
  94. package/utility/lua-sets.lua +4 -0
  95. package/utility/types.d.ts +3 -0
  96. package/core/types/order.d.ts +0 -26
  97. package/core/types/order.lua +0 -65
@@ -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]
@@ -149,7 +151,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
149
151
  originalValueByInstance = mutableWeakLuaMap()
150
152
  self.originalValueByInstance = originalValueByInstance
151
153
  end
152
- originalValueByInstance[instance] = self:getActualValue(instance)
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
153
161
  self:setActualValue(
154
162
  instance,
155
163
  self:calculateActualValue(instance)
@@ -192,64 +200,61 @@ function ObjectField.prototype.trySetValue(self, entry, value)
192
200
  end
193
201
  function ObjectField.prototype.getActualValue(self, instance)
194
202
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
195
- if defaultValueByObjectDataEntryId ~= nil then
196
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
203
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
197
205
  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
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
201
209
  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
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
205
213
  end
206
- return ____self_valueByInstance_instance_0_1
214
+ return ____self_valueByInstance_instance_3_4
207
215
  end
208
216
  end
209
- local ____temp_2 = self:getNativeFieldValue(instance)
210
- if ____temp_2 == nil then
211
- ____temp_2 = self.defaultValue
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
212
220
  end
213
- return ____temp_2
221
+ return ____temp_5
214
222
  end
215
223
  function ObjectField.prototype.setActualValue(self, instance, value)
216
224
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
217
- if defaultValueByObjectDataEntryId ~= nil then
218
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
226
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
219
228
  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
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
223
232
  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
227
- 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)
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
232
236
  end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
233
240
  return true
234
241
  end
235
242
  end
236
- if not self:hasNativeFieldValue(instance) then
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
237
244
  return false
238
245
  end
239
246
  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)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
245
249
  end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
246
251
  return true
247
252
  end
248
253
  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]
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]
253
258
  if originalValue ~= nil then
254
259
  local value = originalValue
255
260
  if modifiers ~= nil then
@@ -314,37 +319,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
314
319
  if defaultValueByObjectDataEntryId ~= nil then
315
320
  local value = defaultValueByObjectDataEntryId[entry.id]
316
321
  if value ~= nil then
317
- local ____temp_10
322
+ local ____temp_13
318
323
  if index == nil then
319
- ____temp_10 = value
324
+ ____temp_13 = value
320
325
  else
321
- local ____value_index_9 = value[index + 1]
322
- if ____value_index_9 == nil then
323
- ____value_index_9 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
324
329
  end
325
- ____temp_10 = ____value_index_9
330
+ ____temp_13 = ____value_index_12
326
331
  end
327
- return ____temp_10
332
+ return ____temp_13
328
333
  end
329
334
  end
330
335
  return index == nil and ({}) or self.defaultValue
331
336
  end
332
337
  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
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
338
343
  if index == nil then
339
- ____temp_12 = value
344
+ ____temp_15 = value
340
345
  else
341
- local ____value_index_11 = value[index + 1]
342
- if ____value_index_11 == nil then
343
- ____value_index_11 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
344
349
  end
345
- ____temp_12 = ____value_index_11
350
+ ____temp_15 = ____value_index_14
346
351
  end
347
- return ____temp_12
352
+ return ____temp_15
348
353
  end
349
354
  end
350
355
  if index ~= nil then
@@ -389,36 +394,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
389
394
  if defaultValueByObjectDataEntryId ~= nil then
390
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
391
396
  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
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
395
400
  end
396
- return ____valueByLevel_index_13
401
+ return ____valueByLevel_index_16
397
402
  end
398
403
  end
399
404
  return self.defaultValue
400
405
  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
415
- end
416
- end
417
- local ____temp_18 = self:getNativeFieldValue(entry, level)
418
- if ____temp_18 == nil then
419
- ____temp_18 = 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
420
411
  end
421
- return ____temp_18
412
+ return self:getActualValue(entry, level)
422
413
  end
423
414
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
424
415
  if value == nil then
@@ -458,54 +449,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
458
449
  valueByLevel[level + 1] = value
459
450
  return true
460
451
  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]
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
473
460
  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
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)
477
485
  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,
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,
484
504
  level,
485
- previousValue,
486
- value
505
+ self:calculateActualValue(instance, level)
487
506
  )
488
507
  end
489
508
  return true
490
509
  end
491
510
  end
492
- if not self:hasNativeFieldValue(entry) then
493
- return false
494
- 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
499
- end
500
- self:invokeValueChangeEvent(
501
- entry,
502
- self,
503
- level,
504
- previousValue,
505
- value
506
- )
507
- end
508
- return true
511
+ return false
509
512
  end
510
513
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
511
514
  if value ~= nil then
@@ -522,6 +525,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
522
525
  end
523
526
  return self:setValue(entry, levelOrValue)
524
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
525
615
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
526
616
  self:invokeValueChangeEventRecursive(
527
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
@@ -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,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
+ }
@@ -0,0 +1,77 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local __TS__Promise = ____lualib.__TS__Promise
4
+ local __TS__Class = ____lualib.__TS__Class
5
+ local ____exports = {}
6
+ local ____player = require("core.types.player")
7
+ local Player = ____player.Player
8
+ local ____math = require("math")
9
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
10
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
11
+ local ____linked_2Dset = require("utility.linked-set")
12
+ local LinkedSet = ____linked_2Dset.LinkedSet
13
+ local ____event = require("event")
14
+ local Event = ____event.Event
15
+ local eventInvoke = Event.invoke
16
+ local createFrameByType = BlzCreateFrameByType
17
+ local createTrigger = CreateTrigger
18
+ local getOriginFrame = BlzGetOriginFrame
19
+ local getTriggerFrameValue = BlzGetTriggerFrameValue
20
+ local getTriggerPlayer = GetTriggerPlayer
21
+ local frameSetMinMaxValue = BlzFrameSetMinMaxValue
22
+ local frameSetValue = BlzFrameSetValue
23
+ local triggerAddAction = TriggerAddAction
24
+ local triggerRegisterFrameEvent = BlzTriggerRegisterFrameEvent
25
+ ____exports.synchronizer = function(getSyncId, getObject)
26
+ local queue = __TS__New(LinkedSet)
27
+ local socket = __TS__New(____exports.ObjectBus, getSyncId, getObject)
28
+ socket.event:addListener(function(_, object)
29
+ local ____opt_0 = queue:pop()
30
+ if ____opt_0 ~= nil then
31
+ ____opt_0(object)
32
+ end
33
+ end)
34
+ local function executor(____, resolve)
35
+ queue:add(resolve)
36
+ end
37
+ return function(player, object)
38
+ if player.isLocal then
39
+ socket:send(object)
40
+ end
41
+ return __TS__New(__TS__Promise, executor)
42
+ end
43
+ end
44
+ ____exports.ObjectBus = __TS__Class()
45
+ local ObjectBus = ____exports.ObjectBus
46
+ ObjectBus.name = "ObjectBus"
47
+ function ObjectBus.prototype.____constructor(self, getSyncId, getObject)
48
+ self.getSyncId = getSyncId
49
+ local syncSlider = createFrameByType(
50
+ "SLIDER",
51
+ "Synchronizer",
52
+ getOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
53
+ "",
54
+ 0
55
+ )
56
+ frameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
57
+ self.syncSlider = syncSlider
58
+ local event = __TS__New(Event)
59
+ local trigger = createTrigger()
60
+ triggerRegisterFrameEvent(trigger, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
61
+ triggerAddAction(
62
+ trigger,
63
+ function()
64
+ eventInvoke(
65
+ event,
66
+ Player:of(getTriggerPlayer()),
67
+ getObject(getTriggerFrameValue())
68
+ )
69
+ end
70
+ )
71
+ self.event = event
72
+ end
73
+ function ObjectBus.prototype.send(self, object)
74
+ local syncId = object ~= nil and self.getSyncId(object) or 0
75
+ frameSetValue(self.syncSlider, syncId)
76
+ end
77
+ return ____exports