warscript 0.0.1-dev.47f470c → 0.0.1-dev.4f51f48

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 (154) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/effect.d.ts +1 -3
  4. package/core/types/effect.lua +26 -29
  5. package/core/types/frame.lua +24 -21
  6. package/core/types/player.d.ts +15 -0
  7. package/core/types/player.lua +56 -14
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  10. package/core/types/sound.d.ts +17 -25
  11. package/core/types/sound.lua +91 -46
  12. package/core/types/tileCell.d.ts +11 -1
  13. package/core/types/tileCell.lua +97 -0
  14. package/core/types/timer.d.ts +9 -8
  15. package/core/types/timer.lua +45 -23
  16. package/core/util.lua +6 -1
  17. package/decl/native.d.ts +846 -790
  18. package/engine/behavior.d.ts +5 -0
  19. package/engine/behavior.lua +106 -27
  20. package/engine/behaviour/ability/apply-buff.lua +1 -1
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  22. package/engine/behaviour/ability/damage.d.ts +9 -3
  23. package/engine/behaviour/ability/damage.lua +26 -38
  24. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  25. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  26. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  27. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +5 -1
  31. package/engine/behaviour/ability.lua +26 -21
  32. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  33. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  34. package/engine/behaviour/unit.d.ts +34 -0
  35. package/engine/behaviour/unit.lua +190 -4
  36. package/engine/buff.d.ts +24 -12
  37. package/engine/buff.lua +190 -121
  38. package/engine/internal/ability.d.ts +7 -1
  39. package/engine/internal/ability.lua +49 -9
  40. package/engine/internal/item/ability.lua +63 -11
  41. package/engine/internal/item+owner.lua +12 -6
  42. package/engine/internal/item.d.ts +18 -17
  43. package/engine/internal/item.lua +135 -49
  44. package/engine/internal/mechanics/ability-duration.lua +1 -1
  45. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  46. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  47. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  48. package/engine/internal/misc/frame-coordinates.lua +21 -0
  49. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  50. package/engine/internal/misc/get-terrain-z.lua +11 -0
  51. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  52. package/engine/internal/misc/player-local-handle.lua +5 -0
  53. package/engine/internal/unit/ability.d.ts +35 -0
  54. package/engine/internal/unit/ability.lua +98 -9
  55. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  56. package/engine/internal/unit/allowed-targets.lua +9 -1
  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 +42 -17
  70. package/engine/internal/unit.lua +331 -165
  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 +7 -2
  76. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  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/movement-type.d.ts +7 -7
  80. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  81. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  82. package/engine/object-data/auxiliary/sound-eax.lua +2 -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/blank-configurable.lua +0 -9
  88. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  89. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  90. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  91. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  92. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  93. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  94. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  95. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  96. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  97. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  98. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  99. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  100. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  101. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  102. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  103. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  104. package/engine/object-data/entry/ability-type/web.lua +52 -0
  105. package/engine/object-data/entry/ability-type.d.ts +18 -16
  106. package/engine/object-data/entry/ability-type.lua +77 -16
  107. package/engine/object-data/entry/buff-type/applicable.lua +9 -4
  108. package/engine/object-data/entry/buff-type.d.ts +5 -11
  109. package/engine/object-data/entry/buff-type.lua +11 -27
  110. package/engine/object-data/entry/sound-preset.d.ts +18 -2
  111. package/engine/object-data/entry/sound-preset.lua +105 -15
  112. package/engine/object-data/entry/unit-type.d.ts +13 -4
  113. package/engine/object-data/entry/unit-type.lua +156 -88
  114. package/engine/object-data/entry.d.ts +2 -2
  115. package/engine/object-data/entry.lua +14 -7
  116. package/engine/object-field/ability.d.ts +4 -4
  117. package/engine/object-field/ability.lua +7 -6
  118. package/engine/object-field/unit.d.ts +69 -3
  119. package/engine/object-field/unit.lua +264 -7
  120. package/engine/object-field.d.ts +23 -6
  121. package/engine/object-field.lua +304 -127
  122. package/engine/random.d.ts +9 -0
  123. package/engine/random.lua +13 -0
  124. package/engine/standard/entries/buff-type.d.ts +3 -0
  125. package/engine/standard/entries/buff-type.lua +3 -0
  126. package/engine/standard/fields/unit.d.ts +6 -0
  127. package/engine/standard/fields/unit.lua +11 -0
  128. package/engine/synchronization.d.ts +11 -0
  129. package/engine/synchronization.lua +77 -0
  130. package/engine/text-tag.d.ts +36 -2
  131. package/engine/text-tag.lua +250 -10
  132. package/engine/unit.d.ts +3 -0
  133. package/engine/unit.lua +3 -0
  134. package/net/socket.lua +1 -1
  135. package/objutil/buff.lua +2 -3
  136. package/objutil/unit.lua +2 -2
  137. package/package.json +2 -2
  138. package/patch-lualib.lua +1 -1
  139. package/utility/arrays.d.ts +2 -0
  140. package/utility/arrays.lua +11 -0
  141. package/utility/callback-array.d.ts +17 -0
  142. package/utility/callback-array.lua +61 -0
  143. package/utility/functions.d.ts +8 -0
  144. package/utility/functions.lua +13 -0
  145. package/utility/linked-set.d.ts +2 -0
  146. package/utility/linked-set.lua +22 -1
  147. package/utility/lua-maps.d.ts +15 -2
  148. package/utility/lua-maps.lua +53 -2
  149. package/utility/lua-sets.d.ts +2 -0
  150. package/utility/lua-sets.lua +7 -0
  151. package/utility/reflection.lua +11 -7
  152. package/utility/types.d.ts +3 -0
  153. package/core/types/order.d.ts +0 -25
  154. 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 includeModifiers == false then
104
+ local originalValueByInstance = self.originalValueByInstance
105
+ if originalValueByInstance ~= nil then
106
+ local originalValue = originalValueByInstance[entry]
107
+ if originalValue ~= nil then
108
+ return originalValue
96
109
  end
97
- return ____self_valueByInstance_entry_0
98
110
  end
99
111
  end
100
- local ____temp_1 = self:getNativeFieldValue(entry)
101
- if ____temp_1 == nil then
102
- ____temp_1 = self.defaultValue
103
- end
104
- return ____temp_1
112
+ return self:getActualValue(entry)
105
113
  end
106
114
  function ObjectField.prototype.setValue(self, entry, value)
107
115
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,37 +124,59 @@ function ObjectField.prototype.setValue(self, entry, value)
116
124
  defaultValueByObjectDataEntryId[entry.id] = value
117
125
  return true
118
126
  end
119
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
120
- if defaultValueByObjectDataEntryId ~= nil then
121
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
122
- if defaultValue ~= nil then
123
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
124
- if ____self_valueByInstance_entry_2 == nil then
125
- ____self_valueByInstance_entry_2 = defaultValue
126
- end
127
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
128
- if ____self_valueByInstance_entry_2_3 == nil then
129
- ____self_valueByInstance_entry_2_3 = self.defaultValue
127
+ local modifiersByInstance = self.modifiersByInstance
128
+ if modifiersByInstance ~= nil then
129
+ local modifiers = modifiersByInstance[entry]
130
+ if modifiers ~= nil and modifiers.size ~= 0 then
131
+ local originalValueByInstance = self.originalValueByInstance
132
+ if originalValueByInstance == nil then
133
+ originalValueByInstance = mutableWeakLuaMap()
134
+ self.originalValueByInstance = originalValueByInstance
130
135
  end
131
- local previousValue = ____self_valueByInstance_entry_2_3
132
- if value ~= previousValue then
133
- self.valueByInstance[entry] = value
134
- self:invokeValueChangeEvent(entry, self, previousValue, value)
135
- end
136
- return true
136
+ originalValueByInstance[entry] = value
137
+ value = self:calculateActualValue(entry)
137
138
  end
138
139
  end
139
- if not self:hasNativeFieldValue(entry) then
140
- return false
140
+ return self:setActualValue(entry, value)
141
+ end
142
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
143
+ local modifiersByInstance = self.modifiersByInstance
144
+ if modifiersByInstance == nil then
145
+ modifiersByInstance = mutableWeakLuaMap()
146
+ self.modifiersByInstance = modifiersByInstance
147
+ end
148
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
149
+ local originalValueByInstance = self.originalValueByInstance
150
+ if originalValueByInstance == nil then
151
+ originalValueByInstance = mutableWeakLuaMap()
152
+ self.originalValueByInstance = originalValueByInstance
153
+ end
154
+ local ____originalValueByInstance_1 = originalValueByInstance
155
+ local ____instance_2 = instance
156
+ local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
+ if ____originalValueByInstance_instance_0 == nil then
158
+ ____originalValueByInstance_instance_0 = self:getActualValue(instance)
159
+ end
160
+ ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
161
+ self:setActualValue(
162
+ instance,
163
+ self:calculateActualValue(instance)
164
+ )
141
165
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
166
+ end
167
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
168
+ local modifiersByInstance = self.modifiersByInstance
169
+ if modifiersByInstance ~= nil then
170
+ local modifiers = modifiersByInstance[instance]
171
+ if modifiers ~= nil and modifiers:remove(modifier) then
172
+ self:setActualValue(
173
+ instance,
174
+ self:calculateActualValue(instance)
175
+ )
176
+ return true
146
177
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
148
178
  end
149
- return true
179
+ return false
150
180
  end
151
181
  function ObjectField.prototype.removeValue(self, entry)
152
182
  if not warpack.compiletime then
@@ -168,6 +198,74 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
198
  end
169
199
  return self:setValue(entry, value)
170
200
  end
201
+ function ObjectField.prototype.getActualValue(self, instance)
202
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
203
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
205
+ if defaultValue ~= nil or self.isGlobal then
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
209
+ end
210
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
+ if ____self_valueByInstance_instance_3_4 == nil then
212
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
213
+ end
214
+ return ____self_valueByInstance_instance_3_4
215
+ end
216
+ end
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
220
+ end
221
+ return ____temp_5
222
+ end
223
+ function ObjectField.prototype.setActualValue(self, instance, value)
224
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
226
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
228
+ if defaultValue ~= nil or self.isGlobal then
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
232
+ end
233
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
+ if ____self_valueByInstance_instance_6_7 == nil then
235
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
236
+ end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
240
+ return true
241
+ end
242
+ end
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
244
+ return false
245
+ end
246
+ local previousValue = self:getNativeFieldValue(instance)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
249
+ end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
251
+ return true
252
+ end
253
+ function ObjectField.prototype.calculateActualValue(self, instance)
254
+ local ____opt_8 = self.originalValueByInstance
255
+ local originalValue = ____opt_8 and ____opt_8[instance]
256
+ local ____opt_10 = self.modifiersByInstance
257
+ local modifiers = ____opt_10 and ____opt_10[instance]
258
+ if originalValue ~= nil then
259
+ local value = originalValue
260
+ if modifiers ~= nil then
261
+ for modifier in pairs(modifiers) do
262
+ value = modifier(instance, value, originalValue)
263
+ end
264
+ end
265
+ return value
266
+ end
267
+ return self.defaultValue
268
+ end
171
269
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
270
  self:invokeValueChangeEventRecursive(
173
271
  getClass(self),
@@ -221,37 +319,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
319
  if defaultValueByObjectDataEntryId ~= nil then
222
320
  local value = defaultValueByObjectDataEntryId[entry.id]
223
321
  if value ~= nil then
224
- local ____temp_5
322
+ local ____temp_13
225
323
  if index == nil then
226
- ____temp_5 = value
324
+ ____temp_13 = value
227
325
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
231
329
  end
232
- ____temp_5 = ____value_index_4
330
+ ____temp_13 = ____value_index_12
233
331
  end
234
- return ____temp_5
332
+ return ____temp_13
235
333
  end
236
334
  end
237
335
  return index == nil and ({}) or self.defaultValue
238
336
  end
239
337
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
240
- if defaultValueByObjectDataEntryId ~= nil then
241
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
- if defaultValue ~= nil then
243
- local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
338
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
339
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
340
+ if defaultValue ~= nil or self.isGlobal then
341
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
342
+ local ____temp_15
245
343
  if index == nil then
246
- ____temp_7 = value
344
+ ____temp_15 = value
247
345
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
251
349
  end
252
- ____temp_7 = ____value_index_6
350
+ ____temp_15 = ____value_index_14
253
351
  end
254
- return ____temp_7
352
+ return ____temp_15
255
353
  end
256
354
  end
257
355
  if index ~= nil then
@@ -296,36 +394,16 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
394
  if defaultValueByObjectDataEntryId ~= nil then
297
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
396
  if valueByLevel ~= nil then
299
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
300
- if ____valueByLevel_index_8 == nil then
301
- ____valueByLevel_index_8 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
302
400
  end
303
- return ____valueByLevel_index_8
401
+ return ____valueByLevel_index_16
304
402
  end
305
403
  end
306
404
  return self.defaultValue
307
405
  end
308
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
309
- if defaultValueByObjectDataEntryId ~= nil then
310
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
- if defaultValueByLevel ~= nil then
312
- local ____opt_9 = self.valueByInstance[entry]
313
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
314
- if ____temp_11 == nil then
315
- ____temp_11 = defaultValueByLevel[level + 1]
316
- end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
320
- end
321
- return ____temp_11_12
322
- end
323
- end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
327
- end
328
- return ____temp_13
406
+ return self:getActualValue(entry, level)
329
407
  end
330
408
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
409
  if value == nil then
@@ -365,54 +443,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
365
443
  valueByLevel[level + 1] = value
366
444
  return true
367
445
  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]
446
+ local modifiersByInstance = self.modifiersByInstance
447
+ if modifiersByInstance ~= nil then
448
+ local modifiers = modifiersByInstance[entry]
449
+ if modifiers ~= nil and modifiers.size ~= 0 then
450
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
451
+ if originalValueByLevelByInstance == nil then
452
+ originalValueByLevelByInstance = mutableWeakLuaMap()
453
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
380
454
  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
455
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
456
+ value = self:calculateActualValue(entry, level)
457
+ end
458
+ end
459
+ return self:setActualValue(entry, level, value)
460
+ end
461
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
462
+ local modifiersByInstance = self.modifiersByInstance
463
+ if modifiersByInstance == nil then
464
+ modifiersByInstance = mutableWeakLuaMap()
465
+ self.modifiersByInstance = modifiersByInstance
466
+ end
467
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
468
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
469
+ if originalValueByLevelByInstance == nil then
470
+ originalValueByLevelByInstance = mutableWeakLuaMap()
471
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
472
+ end
473
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
474
+ local levelCount = self:getLevelCount(instance)
475
+ for level = 0, levelCount - 1 do
476
+ local ____originalValueByLevel_level_17 = originalValueByLevel[level]
477
+ if ____originalValueByLevel_level_17 == nil then
478
+ ____originalValueByLevel_level_17 = self:getActualValue(instance, level)
384
479
  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,
480
+ originalValueByLevel[level] = ____originalValueByLevel_level_17
481
+ self:setActualValue(
482
+ instance,
483
+ level,
484
+ self:calculateActualValue(instance, level)
485
+ )
486
+ end
487
+ end
488
+ end
489
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
490
+ local modifiersByInstance = self.modifiersByInstance
491
+ if modifiersByInstance ~= nil then
492
+ local modifiers = modifiersByInstance[instance]
493
+ if modifiers ~= nil and modifiers:remove(modifier) then
494
+ local levelCount = self:getLevelCount(instance)
495
+ for level = 0, levelCount - 1 do
496
+ self:setActualValue(
497
+ instance,
391
498
  level,
392
- previousValue,
393
- value
499
+ self:calculateActualValue(instance, level)
394
500
  )
395
501
  end
396
502
  return true
397
503
  end
398
504
  end
399
- if not self:hasNativeFieldValue(entry) then
400
- return false
401
- end
402
- local previousValue = self:getNativeFieldValue(entry, level)
403
- if value ~= previousValue then
404
- if not self:setNativeFieldValue(entry, level, value) then
405
- return false
406
- end
407
- self:invokeValueChangeEvent(
408
- entry,
409
- self,
410
- level,
411
- previousValue,
412
- value
413
- )
414
- end
415
- return true
505
+ return false
416
506
  end
417
507
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
418
508
  if value ~= nil then
@@ -429,6 +519,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
429
519
  end
430
520
  return self:setValue(entry, levelOrValue)
431
521
  end
522
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
523
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
524
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
525
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
526
+ if defaultValueByLevel ~= nil or self.isGlobal then
527
+ local ____opt_18 = self.valueByInstance[instance]
528
+ local ____temp_20 = ____opt_18 and ____opt_18[level + 1]
529
+ if ____temp_20 == nil then
530
+ ____temp_20 = (defaultValueByLevel or emptyArray())[level + 1]
531
+ end
532
+ local ____temp_20_21 = ____temp_20
533
+ if ____temp_20_21 == nil then
534
+ ____temp_20_21 = self.defaultValue
535
+ end
536
+ return ____temp_20_21
537
+ end
538
+ end
539
+ local ____temp_22 = self:getNativeFieldValue(instance, level)
540
+ if ____temp_22 == nil then
541
+ ____temp_22 = self.defaultValue
542
+ end
543
+ return ____temp_22
544
+ end
545
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
546
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
547
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
548
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
549
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
550
+ if defaultValueByLevel ~= nil or self.isGlobal then
551
+ local valueByLevel = self.valueByInstance[instance]
552
+ if valueByLevel == nil then
553
+ valueByLevel = {}
554
+ self.valueByInstance[instance] = valueByLevel
555
+ end
556
+ local ____valueByLevel_index_23 = valueByLevel[level + 1]
557
+ if ____valueByLevel_index_23 == nil then
558
+ ____valueByLevel_index_23 = (defaultValueByLevel or emptyArray())[level + 1]
559
+ end
560
+ local ____valueByLevel_index_23_24 = ____valueByLevel_index_23
561
+ if ____valueByLevel_index_23_24 == nil then
562
+ ____valueByLevel_index_23_24 = self.defaultValue
563
+ end
564
+ local previousValue = ____valueByLevel_index_23_24
565
+ valueByLevel[level + 1] = value
566
+ self:invokeValueChangeEvent(
567
+ instance,
568
+ self,
569
+ level,
570
+ previousValue,
571
+ value
572
+ )
573
+ return true
574
+ end
575
+ end
576
+ if not self:hasNativeFieldValue(objectDataEntryId) then
577
+ return false
578
+ end
579
+ local previousValue = self:getNativeFieldValue(instance, level)
580
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
581
+ return false
582
+ end
583
+ self:invokeValueChangeEvent(
584
+ instance,
585
+ self,
586
+ level,
587
+ previousValue,
588
+ value
589
+ )
590
+ return true
591
+ end
592
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
593
+ local ____opt_27 = self.originalValueByLevelByInstance
594
+ local ____opt_25 = ____opt_27 and ____opt_27[instance]
595
+ local originalValue = ____opt_25 and ____opt_25[level]
596
+ local ____opt_29 = self.modifiersByInstance
597
+ local modifiers = ____opt_29 and ____opt_29[instance]
598
+ if originalValue ~= nil then
599
+ local value = originalValue
600
+ if modifiers ~= nil then
601
+ for modifier in pairs(modifiers) do
602
+ value = modifier(instance, level, value, originalValue)
603
+ end
604
+ end
605
+ return value
606
+ end
607
+ return self.defaultValue
608
+ end
432
609
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
433
610
  self:invokeValueChangeEventRecursive(
434
611
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -9,3 +10,11 @@ export declare const randomFloat: {
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
11
12
  export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -4,6 +4,7 @@ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
4
  local PI = ____math.PI
5
5
  local getRandomInt = GetRandomInt
6
6
  local getRandomReal = GetRandomReal
7
+ local select = _G.select
7
8
  local cos = math.cos
8
9
  local sin = math.sin
9
10
  local sqrt = math.sqrt
@@ -15,4 +16,16 @@ ____exports.randomXY = function(centerX, centerY, range)
15
16
  local t = getRandomReal(0, 1) * 2 * PI
16
17
  return centerX + r * cos(t), centerY + r * sin(t)
17
18
  end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
18
31
  return ____exports
@@ -0,0 +1,3 @@
1
+ /** @noSelfInFile */
2
+ import { StandardBuffTypeId } from "../../object-data/entry/buff-type";
3
+ export declare const CHEMICAL_RAGE_BUFF_TYPE_ID: StandardBuffTypeId;
@@ -0,0 +1,3 @@
1
+ local ____exports = {}
2
+ ____exports.CHEMICAL_RAGE_BUFF_TYPE_ID = fourCC("BNcr")
3
+ return ____exports
@@ -0,0 +1,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
+ }