warscript 0.0.1-dev.effa673 → 0.0.1-dev.f074376

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 (139) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  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/sound.lua +5 -0
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +9 -8
  12. package/core/types/timer.lua +45 -23
  13. package/decl/native.d.ts +846 -790
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +6 -3
  20. package/engine/behaviour/ability/damage.lua +24 -36
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +2 -1
  28. package/engine/behaviour/ability.lua +10 -18
  29. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +259 -6
  33. package/engine/buff.d.ts +17 -6
  34. package/engine/buff.lua +160 -97
  35. package/engine/internal/ability.d.ts +7 -1
  36. package/engine/internal/ability.lua +49 -9
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +18 -17
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  42. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  43. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  44. package/engine/internal/misc/frame-coordinates.lua +21 -0
  45. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  46. package/engine/internal/misc/get-terrain-z.lua +11 -0
  47. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  48. package/engine/internal/misc/player-local-handle.lua +5 -0
  49. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  50. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  51. package/engine/internal/unit/ability.d.ts +35 -0
  52. package/engine/internal/unit/ability.lua +98 -9
  53. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  54. package/engine/internal/unit/allowed-targets.lua +9 -1
  55. package/engine/internal/unit/bonus.d.ts +2 -0
  56. package/engine/internal/unit/bonus.lua +10 -0
  57. package/engine/internal/unit/fly-height.d.ts +7 -0
  58. package/engine/internal/unit/fly-height.lua +20 -0
  59. package/engine/internal/unit/main-selected.lua +12 -27
  60. package/engine/internal/unit/order.d.ts +20 -0
  61. package/engine/internal/unit/order.lua +136 -0
  62. package/engine/internal/unit/scale.d.ts +7 -0
  63. package/engine/internal/unit/scale.lua +20 -0
  64. package/engine/internal/unit+ability.lua +10 -1
  65. package/engine/internal/unit+damage.d.ts +2 -11
  66. package/engine/internal/unit+damage.lua +10 -14
  67. package/engine/internal/unit+spellSteal.lua +1 -2
  68. package/engine/internal/unit-missile-launch.lua +45 -14
  69. package/engine/internal/unit.d.ts +39 -19
  70. package/engine/internal/unit.lua +329 -169
  71. package/engine/local-client.d.ts +2 -0
  72. package/engine/local-client.lua +30 -0
  73. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  74. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  75. package/engine/object-data/auxiliary/attachment-preset.d.ts +1 -1
  76. package/engine/object-data/auxiliary/attachment-preset.lua +3 -2
  77. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  78. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  79. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  81. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  82. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  83. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  84. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  85. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  86. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  87. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  89. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  91. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  92. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  93. package/engine/object-data/entry/ability-type.lua +11 -3
  94. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  95. package/engine/object-data/entry/buff-type.d.ts +5 -11
  96. package/engine/object-data/entry/buff-type.lua +11 -27
  97. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  98. package/engine/object-data/entry/destructible-type.lua +155 -0
  99. package/engine/object-data/entry/unit-type.d.ts +17 -4
  100. package/engine/object-data/entry/unit-type.lua +197 -85
  101. package/engine/object-field/ability.d.ts +4 -4
  102. package/engine/object-field/ability.lua +7 -6
  103. package/engine/object-field/unit.d.ts +72 -3
  104. package/engine/object-field/unit.lua +268 -7
  105. package/engine/object-field.d.ts +23 -6
  106. package/engine/object-field.lua +335 -118
  107. package/engine/random.d.ts +9 -0
  108. package/engine/random.lua +13 -0
  109. package/engine/standard/entries/buff-type.d.ts +3 -0
  110. package/engine/standard/entries/buff-type.lua +3 -0
  111. package/engine/standard/fields/ability.d.ts +2 -2
  112. package/engine/standard/fields/ability.lua +2 -2
  113. package/engine/standard/fields/unit.d.ts +7 -0
  114. package/engine/standard/fields/unit.lua +13 -0
  115. package/engine/synchronization.d.ts +11 -0
  116. package/engine/synchronization.lua +77 -0
  117. package/engine/text-tag.d.ts +36 -2
  118. package/engine/text-tag.lua +250 -10
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +3 -0
  121. package/net/socket.lua +1 -1
  122. package/objutil/buff.lua +2 -3
  123. package/package.json +2 -2
  124. package/patch-lualib.lua +1 -1
  125. package/utility/arrays.d.ts +2 -0
  126. package/utility/arrays.lua +11 -0
  127. package/utility/callback-array.d.ts +17 -0
  128. package/utility/callback-array.lua +61 -0
  129. package/utility/functions.d.ts +8 -0
  130. package/utility/functions.lua +13 -0
  131. package/utility/linked-set.d.ts +2 -0
  132. package/utility/linked-set.lua +22 -1
  133. package/utility/lua-maps.d.ts +15 -2
  134. package/utility/lua-maps.lua +53 -2
  135. package/utility/lua-sets.d.ts +2 -0
  136. package/utility/lua-sets.lua +7 -0
  137. package/utility/types.d.ts +3 -0
  138. package/core/types/order.d.ts +0 -25
  139. package/core/types/order.lua +0 -55
@@ -20,6 +20,15 @@ local extractObjectDataEntryLevelFieldValue = ____entry.extractObjectDataEntryLe
20
20
  local ObjectDataEntry = ____entry.ObjectDataEntry
21
21
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
22
22
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
23
+ local ____linked_2Dset = require("utility.linked-set")
24
+ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
+ local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
+ local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
29
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
30
+ local ____arrays = require("utility.arrays")
31
+ local emptyArray = ____arrays.emptyArray
23
32
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
33
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
34
  local objectFieldById = {}
@@ -29,7 +38,11 @@ local idGenerator = __TS__New(
29
38
  )
30
39
  local ObjectFieldBase = __TS__Class()
31
40
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
41
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
42
+ if isGlobal == nil then
43
+ isGlobal = false
44
+ end
45
+ self.isGlobal = isGlobal
33
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
47
  if objectFieldById[id] ~= nil then
35
48
  error(
@@ -46,14 +59,15 @@ end
46
59
  function ObjectFieldBase.prototype.supports(self, instance)
47
60
  return __TS__InstanceOf(instance, self.instanceClass)
48
61
  end
49
- function ObjectFieldBase.prototype.hasValue(self, instance)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
50
63
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
64
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
52
65
  end
53
- function ObjectFieldBase.create(self, id)
66
+ function ObjectFieldBase.create(self, id, isGlobal)
54
67
  return __TS__New(
55
68
  self,
56
- id or idGenerator:next()
69
+ id or idGenerator:next(),
70
+ isGlobal
57
71
  )
58
72
  end
59
73
  function ObjectFieldBase.of(self, id)
@@ -75,7 +89,7 @@ ____exports.ObjectField = __TS__Class()
75
89
  local ObjectField = ____exports.ObjectField
76
90
  ObjectField.name = "ObjectField"
77
91
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
78
- function ObjectField.prototype.getValue(self, entry)
92
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
79
93
  if __TS__InstanceOf(entry, ObjectDataEntry) then
80
94
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
81
95
  if defaultValueByObjectDataEntryId ~= nil then
@@ -86,22 +100,16 @@ function ObjectField.prototype.getValue(self, entry)
86
100
  end
87
101
  return self.defaultValue
88
102
  end
89
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
90
- if defaultValueByObjectDataEntryId ~= nil then
91
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
92
- if defaultValue ~= nil then
93
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
94
- if ____self_valueByInstance_entry_0 == nil then
95
- ____self_valueByInstance_entry_0 = defaultValue
103
+ if not includeModifiers then
104
+ local originalValueByInstance = self.originalValueByInstance
105
+ if originalValueByInstance ~= nil then
106
+ local originalValue = originalValueByInstance[entry]
107
+ if originalValue ~= nil then
108
+ return originalValue
96
109
  end
97
- return ____self_valueByInstance_entry_0
98
110
  end
99
111
  end
100
- local ____temp_1 = self:getNativeFieldValue(entry)
101
- if ____temp_1 == nil then
102
- ____temp_1 = self.defaultValue
103
- end
104
- return ____temp_1
112
+ return self:getActualValue(entry)
105
113
  end
106
114
  function ObjectField.prototype.setValue(self, entry, value)
107
115
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,38 +124,84 @@ function ObjectField.prototype.setValue(self, entry, value)
116
124
  defaultValueByObjectDataEntryId[entry.id] = value
117
125
  return true
118
126
  end
119
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
120
- if defaultValueByObjectDataEntryId ~= nil then
121
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
122
- if defaultValue ~= nil then
123
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
124
- if ____self_valueByInstance_entry_2 == nil then
125
- ____self_valueByInstance_entry_2 = defaultValue
127
+ local previousOriginalValue
128
+ local modifiersByInstance = self.modifiersByInstance
129
+ if modifiersByInstance ~= nil then
130
+ local modifiers = modifiersByInstance[entry]
131
+ if modifiers ~= nil and modifiers.size ~= 0 then
132
+ local originalValueByInstance = self.originalValueByInstance
133
+ if originalValueByInstance == nil then
134
+ originalValueByInstance = mutableWeakLuaMap()
135
+ self.originalValueByInstance = originalValueByInstance
126
136
  end
127
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
128
- if ____self_valueByInstance_entry_2_3 == nil then
129
- ____self_valueByInstance_entry_2_3 = self.defaultValue
137
+ previousOriginalValue = originalValueByInstance[entry]
138
+ if value == previousOriginalValue then
139
+ return true
130
140
  end
131
- local previousValue = ____self_valueByInstance_entry_2_3
132
- if value ~= previousValue then
133
- self.valueByInstance[entry] = value
134
- self:invokeValueChangeEvent(entry, self, previousValue, value)
135
- end
136
- return true
141
+ originalValueByInstance[entry] = value
142
+ value = self:calculateActualValue(entry)
137
143
  end
138
144
  end
139
- if not self:hasNativeFieldValue(entry) then
145
+ local previousValue = self:setActualValue(entry, value)
146
+ if previousValue == nil then
140
147
  return false
141
148
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
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
146
155
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
156
+ ____self_invokeValueChangeEvent_2(
157
+ self,
158
+ ____entry_1,
159
+ self,
160
+ ____previousOriginalValue_0,
161
+ value
162
+ )
148
163
  end
149
164
  return true
150
165
  end
166
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
167
+ local modifiersByInstance = self.modifiersByInstance
168
+ if modifiersByInstance == nil then
169
+ modifiersByInstance = mutableWeakLuaMap()
170
+ self.modifiersByInstance = modifiersByInstance
171
+ end
172
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
173
+ local originalValueByInstance = self.originalValueByInstance
174
+ if originalValueByInstance == nil then
175
+ originalValueByInstance = mutableWeakLuaMap()
176
+ self.originalValueByInstance = originalValueByInstance
177
+ end
178
+ local ____originalValueByInstance_4 = originalValueByInstance
179
+ local ____instance_5 = instance
180
+ local ____originalValueByInstance_instance_3 = originalValueByInstance[instance]
181
+ if ____originalValueByInstance_instance_3 == nil then
182
+ ____originalValueByInstance_instance_3 = self:getActualValue(instance)
183
+ end
184
+ ____originalValueByInstance_4[____instance_5] = ____originalValueByInstance_instance_3
185
+ self:setActualValue(
186
+ instance,
187
+ self:calculateActualValue(instance)
188
+ )
189
+ end
190
+ end
191
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
192
+ local modifiersByInstance = self.modifiersByInstance
193
+ if modifiersByInstance ~= nil then
194
+ local modifiers = modifiersByInstance[instance]
195
+ if modifiers ~= nil and modifiers:remove(modifier) then
196
+ self:setActualValue(
197
+ instance,
198
+ self:calculateActualValue(instance)
199
+ )
200
+ return true
201
+ end
202
+ end
203
+ return false
204
+ end
151
205
  function ObjectField.prototype.removeValue(self, entry)
152
206
  if not warpack.compiletime then
153
207
  return false
@@ -168,6 +222,72 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
222
  end
169
223
  return self:setValue(entry, value)
170
224
  end
225
+ function ObjectField.prototype.getActualValue(self, instance)
226
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
227
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
228
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
229
+ if defaultValue ~= nil or self.isGlobal then
230
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
231
+ if ____self_valueByInstance_instance_6 == nil then
232
+ ____self_valueByInstance_instance_6 = defaultValue
233
+ end
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
237
+ end
238
+ return ____self_valueByInstance_instance_6_7
239
+ end
240
+ end
241
+ local ____temp_8 = self:getNativeFieldValue(instance)
242
+ if ____temp_8 == nil then
243
+ ____temp_8 = self.defaultValue
244
+ end
245
+ return ____temp_8
246
+ end
247
+ function ObjectField.prototype.setActualValue(self, instance, value)
248
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
249
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
250
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
251
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
252
+ if defaultValue ~= nil or self.isGlobal then
253
+ local ____self_valueByInstance_instance_9 = self.valueByInstance[instance]
254
+ if ____self_valueByInstance_instance_9 == nil then
255
+ ____self_valueByInstance_instance_9 = defaultValue
256
+ end
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
260
+ end
261
+ local previousValue = ____self_valueByInstance_instance_9_10
262
+ self.valueByInstance[instance] = value
263
+ return previousValue
264
+ end
265
+ end
266
+ if not self:hasNativeFieldValue(objectDataEntryId) then
267
+ return nil
268
+ end
269
+ local previousValue = self:getNativeFieldValue(instance)
270
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
271
+ return nil
272
+ end
273
+ return previousValue
274
+ end
275
+ function ObjectField.prototype.calculateActualValue(self, 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]
280
+ if originalValue ~= nil then
281
+ local value = originalValue
282
+ if modifiers ~= nil then
283
+ for modifier in pairs(modifiers) do
284
+ value = modifier(instance, value, originalValue)
285
+ end
286
+ end
287
+ return value
288
+ end
289
+ return self.defaultValue
290
+ end
171
291
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
292
  self:invokeValueChangeEventRecursive(
173
293
  getClass(self),
@@ -221,37 +341,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
341
  if defaultValueByObjectDataEntryId ~= nil then
222
342
  local value = defaultValueByObjectDataEntryId[entry.id]
223
343
  if value ~= nil then
224
- local ____temp_5
344
+ local ____temp_16
225
345
  if index == nil then
226
- ____temp_5 = value
346
+ ____temp_16 = value
227
347
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
348
+ local ____value_index_15 = value[index + 1]
349
+ if ____value_index_15 == nil then
350
+ ____value_index_15 = self.defaultValue
231
351
  end
232
- ____temp_5 = ____value_index_4
352
+ ____temp_16 = ____value_index_15
233
353
  end
234
- return ____temp_5
354
+ return ____temp_16
235
355
  end
236
356
  end
237
357
  return index == nil and ({}) or self.defaultValue
238
358
  end
239
359
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
240
- if defaultValueByObjectDataEntryId ~= nil then
241
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
- if defaultValue ~= nil then
243
- local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
360
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
361
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
362
+ if defaultValue ~= nil or self.isGlobal then
363
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
364
+ local ____temp_18
245
365
  if index == nil then
246
- ____temp_7 = value
366
+ ____temp_18 = value
247
367
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
368
+ local ____value_index_17 = value[index + 1]
369
+ if ____value_index_17 == nil then
370
+ ____value_index_17 = self.defaultValue
251
371
  end
252
- ____temp_7 = ____value_index_6
372
+ ____temp_18 = ____value_index_17
253
373
  end
254
- return ____temp_7
374
+ return ____temp_18
255
375
  end
256
376
  end
257
377
  if index ~= nil then
@@ -296,36 +416,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
416
  if defaultValueByObjectDataEntryId ~= nil then
297
417
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
418
  if valueByLevel ~= nil then
299
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
300
- if ____valueByLevel_index_8 == nil then
301
- ____valueByLevel_index_8 = self.defaultValue
419
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
420
+ if ____valueByLevel_index_19 == nil then
421
+ ____valueByLevel_index_19 = self.defaultValue
302
422
  end
303
- return ____valueByLevel_index_8
423
+ return ____valueByLevel_index_19
304
424
  end
305
425
  end
306
426
  return self.defaultValue
307
427
  end
308
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
309
- if defaultValueByObjectDataEntryId ~= nil then
310
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
- if defaultValueByLevel ~= nil then
312
- local ____opt_9 = self.valueByInstance[entry]
313
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
314
- if ____temp_11 == nil then
315
- ____temp_11 = defaultValueByLevel[level + 1]
316
- end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
320
- end
321
- return ____temp_11_12
322
- end
428
+ local ____opt_22 = self.originalValueByLevelByInstance
429
+ local ____opt_20 = ____opt_22 and ____opt_22[entry]
430
+ local originalValue = ____opt_20 and ____opt_20[level]
431
+ if originalValue ~= nil then
432
+ return originalValue
323
433
  end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
327
- end
328
- return ____temp_13
434
+ return self:getActualValue(entry, level)
329
435
  end
330
436
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
437
  if value == nil then
@@ -365,55 +471,93 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
365
471
  valueByLevel[level + 1] = value
366
472
  return true
367
473
  end
368
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
369
- if defaultValueByObjectDataEntryId ~= nil then
370
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
371
- if defaultValueByLevel ~= nil then
372
- local valueByLevel = self.valueByInstance[entry]
373
- if valueByLevel == nil then
374
- valueByLevel = {}
375
- self.valueByInstance[entry] = valueByLevel
376
- end
377
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
378
- if ____valueByLevel_index_14 == nil then
379
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
474
+ local previousOriginalValue
475
+ local modifiersByInstance = self.modifiersByInstance
476
+ if modifiersByInstance ~= nil then
477
+ local modifiers = modifiersByInstance[entry]
478
+ if modifiers ~= nil and modifiers.size ~= 0 then
479
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
480
+ if originalValueByLevelByInstance == nil then
481
+ originalValueByLevelByInstance = mutableWeakLuaMap()
482
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
380
483
  end
381
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
382
- if ____valueByLevel_index_14_15 == nil then
383
- ____valueByLevel_index_14_15 = self.defaultValue
484
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)
485
+ previousOriginalValue = originalValueByLevel[level]
486
+ if value == previousOriginalValue then
487
+ return true
384
488
  end
385
- local previousValue = ____valueByLevel_index_14_15
386
- if value ~= previousValue then
387
- valueByLevel[level + 1] = value
388
- self:invokeValueChangeEvent(
389
- entry,
390
- self,
391
- level,
392
- previousValue,
393
- value
394
- )
395
- end
396
- return true
489
+ originalValueByLevel[level] = value
490
+ value = self:calculateActualValue(entry, level)
397
491
  end
398
492
  end
399
- if not self:hasNativeFieldValue(entry) then
493
+ local previousValue = self:setActualValue(entry, level, value)
494
+ if previousValue == nil then
400
495
  return false
401
496
  end
402
- local previousValue = self:getNativeFieldValue(entry, level)
403
- if value ~= previousValue then
404
- if not self:setNativeFieldValue(entry, level, value) then
405
- return false
497
+ if previousOriginalValue ~= nil or value ~= previousValue then
498
+ local ____self_invokeValueChangeEvent_26 = self.invokeValueChangeEvent
499
+ local ____entry_25 = entry
500
+ local ____previousOriginalValue_24 = previousOriginalValue
501
+ if ____previousOriginalValue_24 == nil then
502
+ ____previousOriginalValue_24 = previousValue
406
503
  end
407
- self:invokeValueChangeEvent(
408
- entry,
504
+ ____self_invokeValueChangeEvent_26(
505
+ self,
506
+ ____entry_25,
409
507
  self,
410
508
  level,
411
- previousValue,
509
+ ____previousOriginalValue_24,
412
510
  value
413
511
  )
414
512
  end
415
513
  return true
416
514
  end
515
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
516
+ local modifiersByInstance = self.modifiersByInstance
517
+ if modifiersByInstance == nil then
518
+ modifiersByInstance = mutableWeakLuaMap()
519
+ self.modifiersByInstance = modifiersByInstance
520
+ end
521
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
522
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
523
+ if originalValueByLevelByInstance == nil then
524
+ originalValueByLevelByInstance = mutableWeakLuaMap()
525
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
526
+ end
527
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
528
+ local levelCount = self:getLevelCount(instance)
529
+ for level = 0, levelCount - 1 do
530
+ local ____originalValueByLevel_level_27 = originalValueByLevel[level]
531
+ if ____originalValueByLevel_level_27 == nil then
532
+ ____originalValueByLevel_level_27 = self:getActualValue(instance, level)
533
+ end
534
+ originalValueByLevel[level] = ____originalValueByLevel_level_27
535
+ self:setActualValue(
536
+ instance,
537
+ level,
538
+ self:calculateActualValue(instance, level)
539
+ )
540
+ end
541
+ end
542
+ end
543
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
544
+ local modifiersByInstance = self.modifiersByInstance
545
+ if modifiersByInstance ~= nil then
546
+ local modifiers = modifiersByInstance[instance]
547
+ if modifiers ~= nil and modifiers:remove(modifier) then
548
+ local levelCount = self:getLevelCount(instance)
549
+ for level = 0, levelCount - 1 do
550
+ self:setActualValue(
551
+ instance,
552
+ level,
553
+ self:calculateActualValue(instance, level)
554
+ )
555
+ end
556
+ return true
557
+ end
558
+ end
559
+ return false
560
+ end
417
561
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
418
562
  if value ~= nil then
419
563
  if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
@@ -429,6 +573,79 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
429
573
  end
430
574
  return self:setValue(entry, levelOrValue)
431
575
  end
576
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
577
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
578
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
579
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
580
+ if defaultValueByLevel ~= nil or self.isGlobal then
581
+ local ____opt_28 = self.valueByInstance[instance]
582
+ local ____temp_30 = ____opt_28 and ____opt_28[level + 1]
583
+ if ____temp_30 == nil then
584
+ ____temp_30 = (defaultValueByLevel or emptyArray())[level + 1]
585
+ end
586
+ local ____temp_30_31 = ____temp_30
587
+ if ____temp_30_31 == nil then
588
+ ____temp_30_31 = self.defaultValue
589
+ end
590
+ return ____temp_30_31
591
+ end
592
+ end
593
+ local ____temp_32 = self:getNativeFieldValue(instance, level)
594
+ if ____temp_32 == nil then
595
+ ____temp_32 = self.defaultValue
596
+ end
597
+ return ____temp_32
598
+ end
599
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
600
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
601
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
602
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
603
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
604
+ if defaultValueByLevel ~= nil or self.isGlobal then
605
+ local valueByLevel = self.valueByInstance[instance]
606
+ if valueByLevel == nil then
607
+ valueByLevel = {}
608
+ self.valueByInstance[instance] = valueByLevel
609
+ end
610
+ local ____valueByLevel_index_33 = valueByLevel[level + 1]
611
+ if ____valueByLevel_index_33 == nil then
612
+ ____valueByLevel_index_33 = (defaultValueByLevel or emptyArray())[level + 1]
613
+ end
614
+ local ____valueByLevel_index_33_34 = ____valueByLevel_index_33
615
+ if ____valueByLevel_index_33_34 == nil then
616
+ ____valueByLevel_index_33_34 = self.defaultValue
617
+ end
618
+ local previousValue = ____valueByLevel_index_33_34
619
+ valueByLevel[level + 1] = value
620
+ return previousValue
621
+ end
622
+ end
623
+ if not self:hasNativeFieldValue(objectDataEntryId) then
624
+ return nil
625
+ end
626
+ local previousValue = self:getNativeFieldValue(instance, level)
627
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
628
+ return nil
629
+ end
630
+ return previousValue
631
+ end
632
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
633
+ local ____opt_37 = self.originalValueByLevelByInstance
634
+ local ____opt_35 = ____opt_37 and ____opt_37[instance]
635
+ local originalValue = ____opt_35 and ____opt_35[level]
636
+ local ____opt_39 = self.modifiersByInstance
637
+ local modifiers = ____opt_39 and ____opt_39[instance]
638
+ if originalValue ~= nil then
639
+ local value = originalValue
640
+ if modifiers ~= nil then
641
+ for modifier in pairs(modifiers) do
642
+ value = modifier(instance, level, value, originalValue)
643
+ end
644
+ end
645
+ return value
646
+ end
647
+ return self.defaultValue
648
+ end
432
649
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
433
650
  self:invokeValueChangeEventRecursive(
434
651
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -0,0 +1,3 @@
1
+ /** @noSelfInFile */
2
+ import { StandardBuffTypeId } from "../../object-data/entry/buff-type";
3
+ export declare const CHEMICAL_RAGE_BUFF_TYPE_ID: StandardBuffTypeId;
@@ -0,0 +1,3 @@
1
+ local ____exports = {}
2
+ ____exports.CHEMICAL_RAGE_BUFF_TYPE_ID = fourCC("BNcr")
3
+ return ____exports
@@ -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,7 @@
1
+ /** @noSelfInFile */
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitHealthRegenerationTypeField, 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;
7
+ export declare const UNIT_HEALTH_REGENERATION_TYPE_FIELD: UnitHealthRegenerationTypeField & symbol;