warscript 0.0.1-dev.d5f6f38 → 0.0.1-dev.d690591

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 (148) hide show
  1. package/config.d.ts +5 -0
  2. package/config.lua +10 -0
  3. package/core/types/effect.d.ts +2 -3
  4. package/core/types/effect.lua +97 -50
  5. package/core/types/sound.d.ts +17 -24
  6. package/core/types/sound.lua +99 -24
  7. package/core/types/timer.d.ts +6 -7
  8. package/core/types/timer.lua +18 -21
  9. package/core/util.d.ts +1 -1
  10. package/core/util.lua +12 -1
  11. package/decl/native.d.ts +840 -786
  12. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  13. package/engine/behaviour/ability/always-enabled.lua +31 -0
  14. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  15. package/engine/behaviour/ability/apply-buff.lua +32 -0
  16. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  17. package/engine/behaviour/ability/damage.d.ts +9 -3
  18. package/engine/behaviour/ability/damage.lua +26 -38
  19. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  20. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  21. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  22. package/engine/behaviour/ability/instant-impact.lua +4 -19
  23. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  24. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  25. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  26. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  27. package/engine/behaviour/ability.d.ts +20 -4
  28. package/engine/behaviour/ability.lua +111 -38
  29. package/engine/behaviour/unit.d.ts +2 -0
  30. package/engine/buff.d.ts +56 -41
  31. package/engine/buff.lua +295 -228
  32. package/engine/internal/ability.d.ts +13 -2
  33. package/engine/internal/ability.lua +77 -4
  34. package/engine/internal/item/ability.lua +106 -0
  35. package/engine/internal/item.d.ts +4 -3
  36. package/engine/internal/item.lua +56 -25
  37. package/engine/internal/mechanics/ability-duration.lua +1 -1
  38. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  39. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  40. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  41. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  42. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  43. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  44. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  45. package/engine/internal/object-data/evasion-probability.lua +16 -0
  46. package/engine/internal/unit/ability.d.ts +10 -1
  47. package/engine/internal/unit/ability.lua +36 -0
  48. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  49. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  50. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  51. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  52. package/engine/internal/unit/bonus.d.ts +2 -0
  53. package/engine/internal/unit/bonus.lua +17 -0
  54. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  55. package/engine/internal/unit/ignore-events-items.lua +5 -0
  56. package/engine/internal/unit/item.lua +6 -12
  57. package/engine/internal/unit+damage.d.ts +2 -11
  58. package/engine/internal/unit+damage.lua +10 -14
  59. package/engine/internal/unit+spellSteal.lua +1 -2
  60. package/engine/internal/unit.d.ts +19 -3
  61. package/engine/internal/unit.lua +144 -45
  62. package/engine/internal/utility.lua +12 -0
  63. package/engine/lightning.d.ts +12 -5
  64. package/engine/lightning.lua +48 -14
  65. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  66. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  67. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  68. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  69. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  70. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  71. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  72. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  73. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  74. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  75. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  76. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  77. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  78. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  79. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  80. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  81. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  82. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  83. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  84. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  85. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  86. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  87. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  88. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  89. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  90. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  91. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  92. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  93. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  94. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  95. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  96. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  97. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  98. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  99. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  100. package/engine/object-data/entry/ability-type/web.lua +52 -0
  101. package/engine/object-data/entry/ability-type.d.ts +19 -17
  102. package/engine/object-data/entry/ability-type.lua +89 -33
  103. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  104. package/engine/object-data/entry/buff-type.d.ts +6 -12
  105. package/engine/object-data/entry/buff-type.lua +13 -29
  106. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  107. package/engine/object-data/entry/item-type.d.ts +3 -1
  108. package/engine/object-data/entry/item-type.lua +15 -2
  109. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  110. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  111. package/engine/object-data/entry/sound-preset.lua +140 -0
  112. package/engine/object-data/entry/unit-type.d.ts +10 -3
  113. package/engine/object-data/entry/unit-type.lua +155 -92
  114. package/engine/object-data/entry/upgrade.d.ts +1 -1
  115. package/engine/object-data/entry/upgrade.lua +4 -4
  116. package/engine/object-data/entry.d.ts +16 -14
  117. package/engine/object-data/entry.lua +60 -32
  118. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  119. package/engine/object-field/ability.d.ts +10 -4
  120. package/engine/object-field/ability.lua +3 -0
  121. package/engine/object-field/unit.d.ts +46 -3
  122. package/engine/object-field/unit.lua +173 -7
  123. package/engine/object-field.d.ts +11 -3
  124. package/engine/object-field.lua +162 -76
  125. package/engine/standard/entries/buff-type.d.ts +3 -0
  126. package/engine/standard/entries/buff-type.lua +3 -0
  127. package/engine/standard/entries/sound-preset.d.ts +10 -0
  128. package/engine/standard/entries/sound-preset.lua +10 -0
  129. package/engine/standard/fields/ability.d.ts +2 -0
  130. package/engine/standard/fields/ability.lua +2 -0
  131. package/engine/unit.d.ts +1 -0
  132. package/engine/unit.lua +1 -0
  133. package/objutil/buff.lua +1 -2
  134. package/objutil/unit.lua +8 -0
  135. package/package.json +2 -2
  136. package/utility/arrays.d.ts +1 -0
  137. package/utility/arrays.lua +3 -0
  138. package/utility/functions.d.ts +1 -0
  139. package/utility/functions.lua +1 -0
  140. package/utility/lazy.d.ts +2 -0
  141. package/utility/lazy.lua +14 -0
  142. package/utility/linked-set.d.ts +1 -0
  143. package/utility/linked-set.lua +3 -0
  144. package/utility/lua-maps.d.ts +3 -0
  145. package/utility/lua-maps.lua +16 -0
  146. package/utility/lua-sets.d.ts +1 -0
  147. package/utility/lua-sets.lua +3 -0
  148. package/utility/reflection.lua +11 -7
@@ -20,6 +20,11 @@ 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 getOrPut = ____lua_2Dmaps.getOrPut
27
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
23
28
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
29
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
30
  local objectFieldById = {}
@@ -46,6 +51,10 @@ end
46
51
  function ObjectFieldBase.prototype.supports(self, instance)
47
52
  return __TS__InstanceOf(instance, self.instanceClass)
48
53
  end
54
+ function ObjectFieldBase.prototype.hasValue(self, instance)
55
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
56
+ return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
57
+ end
49
58
  function ObjectFieldBase.create(self, id)
50
59
  return __TS__New(
51
60
  self,
@@ -71,7 +80,7 @@ ____exports.ObjectField = __TS__Class()
71
80
  local ObjectField = ____exports.ObjectField
72
81
  ObjectField.name = "ObjectField"
73
82
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
74
- function ObjectField.prototype.getValue(self, entry)
83
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
75
84
  if __TS__InstanceOf(entry, ObjectDataEntry) then
76
85
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
77
86
  if defaultValueByObjectDataEntryId ~= nil then
@@ -82,22 +91,16 @@ function ObjectField.prototype.getValue(self, entry)
82
91
  end
83
92
  return self.defaultValue
84
93
  end
85
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
86
- if defaultValueByObjectDataEntryId ~= nil then
87
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
88
- if defaultValue ~= nil then
89
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
90
- if ____self_valueByInstance_entry_0 == nil then
91
- ____self_valueByInstance_entry_0 = defaultValue
94
+ if includeModifiers == false then
95
+ local originalValueByInstance = self.originalValueByInstance
96
+ if originalValueByInstance ~= nil then
97
+ local originalValue = originalValueByInstance[entry]
98
+ if originalValue ~= nil then
99
+ return originalValue
92
100
  end
93
- return ____self_valueByInstance_entry_0
94
101
  end
95
102
  end
96
- local ____temp_1 = self:getNativeFieldValue(entry)
97
- if ____temp_1 == nil then
98
- ____temp_1 = self.defaultValue
99
- end
100
- return ____temp_1
103
+ return self:getActualValue(entry)
101
104
  end
102
105
  function ObjectField.prototype.setValue(self, entry, value)
103
106
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -112,37 +115,53 @@ function ObjectField.prototype.setValue(self, entry, value)
112
115
  defaultValueByObjectDataEntryId[entry.id] = value
113
116
  return true
114
117
  end
115
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
116
- if defaultValueByObjectDataEntryId ~= nil then
117
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
118
- if defaultValue ~= nil then
119
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
120
- if ____self_valueByInstance_entry_2 == nil then
121
- ____self_valueByInstance_entry_2 = defaultValue
118
+ local modifiersByInstance = self.modifiersByInstance
119
+ if modifiersByInstance ~= nil then
120
+ local modifiers = modifiersByInstance[entry]
121
+ if modifiers ~= nil and modifiers.size ~= 0 then
122
+ local originalValueByInstance = self.originalValueByInstance
123
+ if originalValueByInstance == nil then
124
+ originalValueByInstance = mutableWeakLuaMap()
125
+ self.originalValueByInstance = originalValueByInstance
122
126
  end
123
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
124
- if ____self_valueByInstance_entry_2_3 == nil then
125
- ____self_valueByInstance_entry_2_3 = self.defaultValue
126
- end
127
- local previousValue = ____self_valueByInstance_entry_2_3
128
- if value ~= previousValue then
129
- self.valueByInstance[entry] = value
130
- self:invokeValueChangeEvent(entry, self, previousValue, value)
131
- end
132
- return true
127
+ originalValueByInstance[entry] = value
128
+ value = self:calculateActualValue(entry)
133
129
  end
134
130
  end
135
- if not self:hasNativeFieldValue(entry) then
136
- return false
131
+ return self:setActualValue(entry, value)
132
+ end
133
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
134
+ local modifiersByInstance = self.modifiersByInstance
135
+ if modifiersByInstance == nil then
136
+ modifiersByInstance = mutableWeakLuaMap()
137
+ self.modifiersByInstance = modifiersByInstance
138
+ end
139
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
140
+ local originalValueByInstance = self.originalValueByInstance
141
+ if originalValueByInstance == nil then
142
+ originalValueByInstance = mutableWeakLuaMap()
143
+ self.originalValueByInstance = originalValueByInstance
144
+ end
145
+ originalValueByInstance[instance] = self:getActualValue(instance)
146
+ self:setActualValue(
147
+ instance,
148
+ self:calculateActualValue(instance)
149
+ )
137
150
  end
138
- local previousValue = self:getNativeFieldValue(entry)
139
- if value ~= previousValue then
140
- if not self:setNativeFieldValue(entry, value) then
141
- return false
151
+ end
152
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
153
+ local modifiersByInstance = self.modifiersByInstance
154
+ if modifiersByInstance ~= nil then
155
+ local modifiers = modifiersByInstance[instance]
156
+ if modifiers ~= nil and modifiers:remove(modifier) then
157
+ self:setActualValue(
158
+ instance,
159
+ self:calculateActualValue(instance)
160
+ )
161
+ return true
142
162
  end
143
- self:invokeValueChangeEvent(entry, self, previousValue, value)
144
163
  end
145
- return true
164
+ return false
146
165
  end
147
166
  function ObjectField.prototype.removeValue(self, entry)
148
167
  if not warpack.compiletime then
@@ -164,6 +183,73 @@ function ObjectField.prototype.trySetValue(self, entry, value)
164
183
  end
165
184
  return self:setValue(entry, value)
166
185
  end
186
+ function ObjectField.prototype.getActualValue(self, instance)
187
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
188
+ if defaultValueByObjectDataEntryId ~= nil then
189
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
190
+ if defaultValue ~= nil then
191
+ local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
192
+ if ____self_valueByInstance_instance_0 == nil then
193
+ ____self_valueByInstance_instance_0 = defaultValue
194
+ end
195
+ return ____self_valueByInstance_instance_0
196
+ end
197
+ end
198
+ local ____temp_1 = self:getNativeFieldValue(instance)
199
+ if ____temp_1 == nil then
200
+ ____temp_1 = self.defaultValue
201
+ end
202
+ return ____temp_1
203
+ end
204
+ function ObjectField.prototype.setActualValue(self, instance, value)
205
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
206
+ if defaultValueByObjectDataEntryId ~= nil then
207
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
208
+ if defaultValue ~= nil then
209
+ local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
210
+ if ____self_valueByInstance_instance_2 == nil then
211
+ ____self_valueByInstance_instance_2 = defaultValue
212
+ end
213
+ local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
214
+ if ____self_valueByInstance_instance_2_3 == nil then
215
+ ____self_valueByInstance_instance_2_3 = self.defaultValue
216
+ end
217
+ local previousValue = ____self_valueByInstance_instance_2_3
218
+ if value ~= previousValue then
219
+ self.valueByInstance[instance] = value
220
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
221
+ end
222
+ return true
223
+ end
224
+ end
225
+ if not self:hasNativeFieldValue(instance) then
226
+ return false
227
+ end
228
+ local previousValue = self:getNativeFieldValue(instance)
229
+ if value ~= previousValue then
230
+ if not self:setNativeFieldValue(instance, value) then
231
+ return false
232
+ end
233
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
234
+ end
235
+ return true
236
+ end
237
+ function ObjectField.prototype.calculateActualValue(self, instance)
238
+ local ____opt_4 = self.originalValueByInstance
239
+ local originalValue = ____opt_4 and ____opt_4[instance]
240
+ local ____opt_6 = self.modifiersByInstance
241
+ local modifiers = ____opt_6 and ____opt_6[instance]
242
+ if originalValue ~= nil then
243
+ local value = originalValue
244
+ if modifiers ~= nil then
245
+ for modifier in pairs(modifiers) do
246
+ value = modifier(instance, value, originalValue)
247
+ end
248
+ end
249
+ return value
250
+ end
251
+ return self.defaultValue
252
+ end
167
253
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
168
254
  self:invokeValueChangeEventRecursive(
169
255
  getClass(self),
@@ -217,17 +303,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
217
303
  if defaultValueByObjectDataEntryId ~= nil then
218
304
  local value = defaultValueByObjectDataEntryId[entry.id]
219
305
  if value ~= nil then
220
- local ____temp_5
306
+ local ____temp_9
221
307
  if index == nil then
222
- ____temp_5 = value
308
+ ____temp_9 = value
223
309
  else
224
- local ____value_index_4 = value[index + 1]
225
- if ____value_index_4 == nil then
226
- ____value_index_4 = self.defaultValue
310
+ local ____value_index_8 = value[index + 1]
311
+ if ____value_index_8 == nil then
312
+ ____value_index_8 = self.defaultValue
227
313
  end
228
- ____temp_5 = ____value_index_4
314
+ ____temp_9 = ____value_index_8
229
315
  end
230
- return ____temp_5
316
+ return ____temp_9
231
317
  end
232
318
  end
233
319
  return index == nil and ({}) or self.defaultValue
@@ -237,17 +323,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
237
323
  local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
238
324
  if defaultValue ~= nil then
239
325
  local value = self.valueByInstance[entry] or defaultValue
240
- local ____temp_7
326
+ local ____temp_11
241
327
  if index == nil then
242
- ____temp_7 = value
328
+ ____temp_11 = value
243
329
  else
244
- local ____value_index_6 = value[index + 1]
245
- if ____value_index_6 == nil then
246
- ____value_index_6 = self.defaultValue
330
+ local ____value_index_10 = value[index + 1]
331
+ if ____value_index_10 == nil then
332
+ ____value_index_10 = self.defaultValue
247
333
  end
248
- ____temp_7 = ____value_index_6
334
+ ____temp_11 = ____value_index_10
249
335
  end
250
- return ____temp_7
336
+ return ____temp_11
251
337
  end
252
338
  end
253
339
  if index ~= nil then
@@ -292,11 +378,11 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
292
378
  if defaultValueByObjectDataEntryId ~= nil then
293
379
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
294
380
  if valueByLevel ~= nil then
295
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
296
- if ____valueByLevel_index_8 == nil then
297
- ____valueByLevel_index_8 = self.defaultValue
381
+ local ____valueByLevel_index_12 = valueByLevel[level + 1]
382
+ if ____valueByLevel_index_12 == nil then
383
+ ____valueByLevel_index_12 = self.defaultValue
298
384
  end
299
- return ____valueByLevel_index_8
385
+ return ____valueByLevel_index_12
300
386
  end
301
387
  end
302
388
  return self.defaultValue
@@ -305,23 +391,23 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
305
391
  if defaultValueByObjectDataEntryId ~= nil then
306
392
  local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
307
393
  if defaultValueByLevel ~= nil then
308
- local ____opt_9 = self.valueByInstance[entry]
309
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
310
- if ____temp_11 == nil then
311
- ____temp_11 = defaultValueByLevel[level + 1]
394
+ local ____opt_13 = self.valueByInstance[entry]
395
+ local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
396
+ if ____temp_15 == nil then
397
+ ____temp_15 = defaultValueByLevel[level + 1]
312
398
  end
313
- local ____temp_11_12 = ____temp_11
314
- if ____temp_11_12 == nil then
315
- ____temp_11_12 = self.defaultValue
399
+ local ____temp_15_16 = ____temp_15
400
+ if ____temp_15_16 == nil then
401
+ ____temp_15_16 = self.defaultValue
316
402
  end
317
- return ____temp_11_12
403
+ return ____temp_15_16
318
404
  end
319
405
  end
320
- local ____temp_13 = self:getNativeFieldValue(entry, level)
321
- if ____temp_13 == nil then
322
- ____temp_13 = self.defaultValue
406
+ local ____temp_17 = self:getNativeFieldValue(entry, level)
407
+ if ____temp_17 == nil then
408
+ ____temp_17 = self.defaultValue
323
409
  end
324
- return ____temp_13
410
+ return ____temp_17
325
411
  end
326
412
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
327
413
  if value == nil then
@@ -370,15 +456,15 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
370
456
  valueByLevel = {}
371
457
  self.valueByInstance[entry] = valueByLevel
372
458
  end
373
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
374
- if ____valueByLevel_index_14 == nil then
375
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
459
+ local ____valueByLevel_index_18 = valueByLevel[level + 1]
460
+ if ____valueByLevel_index_18 == nil then
461
+ ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
376
462
  end
377
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
378
- if ____valueByLevel_index_14_15 == nil then
379
- ____valueByLevel_index_14_15 = self.defaultValue
463
+ local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
464
+ if ____valueByLevel_index_18_19 == nil then
465
+ ____valueByLevel_index_18_19 = self.defaultValue
380
466
  end
381
- local previousValue = ____valueByLevel_index_14_15
467
+ local previousValue = ____valueByLevel_index_18_19
382
468
  if value ~= previousValue then
383
469
  valueByLevel[level + 1] = value
384
470
  self:invokeValueChangeEvent(
@@ -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,10 @@
1
+ /** @noSelfInFile */
2
+ import { StandardSoundPresetId } from "../../object-data/entry/sound-preset";
3
+ export declare const ABOMINATION_PISSED_SOUND_PRESET_ID: StandardSoundPresetId;
4
+ export declare const ABOMINATION_READY_SOUND_PRESET_ID: StandardSoundPresetId;
5
+ export declare const ABOMINATION_WAR_CRY_SOUND_PRESET_ID: StandardSoundPresetId;
6
+ export declare const AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID: StandardSoundPresetId;
7
+ export declare const IMPALE_SOUND_PRESET_ID: StandardSoundPresetId;
8
+ export declare const IMPALE_HIT_SOUND_PRESET_ID: StandardSoundPresetId;
9
+ export declare const IMPALE_LAND_SOUND_PRESET_ID: StandardSoundPresetId;
10
+ export declare const IMPALE_CAST_SOUND_PRESET_ID: StandardSoundPresetId;
@@ -0,0 +1,10 @@
1
+ local ____exports = {}
2
+ ____exports.ABOMINATION_PISSED_SOUND_PRESET_ID = "AbominationPissed"
3
+ ____exports.ABOMINATION_READY_SOUND_PRESET_ID = "AbominationReady"
4
+ ____exports.ABOMINATION_WAR_CRY_SOUND_PRESET_ID = "AbominationWarcry"
5
+ ____exports.AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID = "AxeMediumChopWood"
6
+ ____exports.IMPALE_SOUND_PRESET_ID = "Impale"
7
+ ____exports.IMPALE_HIT_SOUND_PRESET_ID = "ImpaleHit"
8
+ ____exports.IMPALE_LAND_SOUND_PRESET_ID = "ImpaleLand"
9
+ ____exports.IMPALE_CAST_SOUND_PRESET_ID = "ImpaleCast"
10
+ return ____exports
@@ -687,6 +687,8 @@ export declare const DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD: Abilit
687
687
  export declare const ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD: AbilityBooleanLevelField & symbol;
688
688
  export declare const ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD: AbilityStringLevelField & symbol;
689
689
  export declare const CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
690
+ export declare const CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
691
+ export declare const CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
690
692
  export declare const TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
691
693
  export declare const TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
692
694
  export declare const TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
@@ -698,6 +698,8 @@ ____exports.DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBoolean
698
698
  ____exports.ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBooleanLevelField:create(fourCC("Ntm4"))
699
699
  ____exports.ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD = AbilityStringLevelField:create(fourCC("aart"))
700
700
  ____exports.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("acat"))
701
+ ____exports.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("acap"))
702
+ ____exports.CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("aca1"))
701
703
  ____exports.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("atat"))
702
704
  ____exports.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata0"))
703
705
  ____exports.TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata1"))
package/engine/unit.d.ts CHANGED
@@ -17,6 +17,7 @@ import "./internal/unit/ghost-counter";
17
17
  import "./internal/unit/invulnerability-counter";
18
18
  import "./internal/unit/detach-missiles";
19
19
  import "./internal/unit/main-selected";
20
+ import "./internal/unit/add-item-to-slot-init";
20
21
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
21
22
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
22
23
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -17,6 +17,7 @@ require("engine.internal.unit.ghost-counter")
17
17
  require("engine.internal.unit.invulnerability-counter")
18
18
  require("engine.internal.unit.detach-missiles")
19
19
  require("engine.internal.unit.main-selected")
20
+ require("engine.internal.unit.add-item-to-slot-init")
20
21
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
21
22
  do
22
23
  local ____unit = require("engine.internal.unit")
package/objutil/buff.lua CHANGED
@@ -20,7 +20,6 @@ local AbilityDefinitionInnerFire = ____ability.AbilityDefinitionInnerFire
20
20
  local AbilityDefinitionSearingArrows = ____ability.AbilityDefinitionSearingArrows
21
21
  local AbilityDefinitionSlowPoison = ____ability.AbilityDefinitionSlowPoison
22
22
  local ____unit = require("core.types.unit")
23
- local AttackType = ____unit.AttackType
24
23
  local DamageType = ____unit.DamageType
25
24
  local Unit = ____unit.Unit
26
25
  local ____dummy = require("core.dummy")
@@ -756,7 +755,7 @@ for ____, pointDispelAbilityId in ipairs(pointDispelAbilityIds) do
756
755
  end)
757
756
  end
758
757
  Unit.onDamaging:addListener(function(source, target, event)
759
- if event.amount == 0 and event.attackType == AttackType.SPELL and event.damageType == DamageType.NORMAL and not event.isAttack then
758
+ if event.amount == 0 and event.attackType == 0 and event.damageType == DamageType.NORMAL and not event.isAttack then
760
759
  Timer:run(function()
761
760
  checkBuffs(target, true, source)
762
761
  end)
package/objutil/unit.lua CHANGED
@@ -11,6 +11,8 @@ local ____exports = {}
11
11
  local ____object = require("objutil.object")
12
12
  local ObjectDefinition = ____object.ObjectDefinition
13
13
  local idgen = require("objutil.idgen")
14
+ local ____config = require("config")
15
+ local WarscriptConfig = ____config.WarscriptConfig
14
16
  local attackTypes = setmetatable(
15
17
  {
16
18
  normal = "normal",
@@ -593,6 +595,9 @@ __TS__SetDescriptor(
593
595
  end,
594
596
  set = function(self, v)
595
597
  self:setStringField("umdl", v)
598
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
599
+ self:setStringField("upor", "")
600
+ end
596
601
  end
597
602
  },
598
603
  true
@@ -606,6 +611,9 @@ __TS__SetDescriptor(
606
611
  end,
607
612
  set = function(self, v)
608
613
  self.object:setField("umdl:hd", v)
614
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
615
+ self.object:setField("upor:hd", "")
616
+ end
609
617
  end
610
618
  },
611
619
  true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.d5f6f38",
4
+ "version": "0.0.1-dev.d690591",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -24,7 +24,7 @@
24
24
  "@warscript/language-extensions": "^0.0.1",
25
25
  "@warscript/tstl-plugin": "^0.0.4",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.880fc91"
27
+ "warpack": "0.0.1-dev.fa5e065"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
@@ -22,6 +22,7 @@ export declare const mapToLuaSet: {
22
22
  <T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
23
23
  <T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
24
24
  };
25
+ export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
25
26
  export declare const flatMap: {
26
27
  <T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
27
28
  <T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
3
3
  local ____exports = {}
4
4
  local ____exception = require("exception")
5
5
  local IllegalArgumentException = ____exception.IllegalArgumentException
6
+ local ____functions = require("utility.functions")
7
+ local identity = ____functions.identity
6
8
  local mathMax = math.max
7
9
  local mathMin = math.min
8
10
  local select = _G.select
@@ -120,6 +122,7 @@ ____exports.mapToLuaSet = function(array, transform)
120
122
  end
121
123
  return result
122
124
  end
125
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
123
126
  ____exports.flatMap = function(array, transform)
124
127
  local result = {}
125
128
  local k = 1
@@ -3,3 +3,4 @@ export declare const apply: {
3
3
  <T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
+ export declare const identity: <T>(value: T) => T;
@@ -87,4 +87,5 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
90
91
  return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export declare const lazyRecord: <K extends keyof any, V>(initializer: (key: K) => V) => Readonly<Record<K, V>>;
@@ -0,0 +1,14 @@
1
+ local ____exports = {}
2
+ local rawset = _G.rawset
3
+ local setmetatable = _G.setmetatable
4
+ ____exports.lazyRecord = function(initializer)
5
+ return setmetatable(
6
+ {},
7
+ {__index = function(self, key)
8
+ local value = initializer(key)
9
+ rawset(self, key, value)
10
+ return value
11
+ end}
12
+ )
13
+ end
14
+ return ____exports
@@ -50,6 +50,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
50
50
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
51
51
  }
52
52
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
53
+ export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
53
54
  export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
54
55
  export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
55
56
  export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
@@ -177,6 +177,9 @@ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
177
  ____exports.emptyLinkedSet = function()
178
178
  return EMPTY_LINKED_SET
179
179
  end
180
+ ____exports.mutableLinkedSet = function()
181
+ return __TS__New(____exports.LinkedSet)
182
+ end
180
183
  ____exports.mutableLinkedSetOf = function(...)
181
184
  local linkedSet = __TS__New(____exports.LinkedSet)
182
185
  for i = 1, select("#", ...) do
@@ -1,5 +1,8 @@
1
1
  /** @noSelfInFile */
2
2
  import { Flatten, TupleOf } from "./types";
3
+ export declare const mutableLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
4
+ export declare const mutableWeakLuaMap: <K extends AnyNotNil, V>() => LuaMap<K, V>;
3
5
  export declare const luaMapOf: <K extends AnyNotNil, V>(...pairs: Flatten<TupleOf<[K, V], 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40>>) => LuaMap<K, V>;
4
6
  export declare const luaMapInvert: <K extends AnyNotNil, V extends AnyNotNil>(luaMap: LuaMap<K, V>) => LuaMap<V, K>;
5
7
  export declare const mapValues: <K extends AnyNotNil, V1, V2>(luaMap: LuaMap<K, V1>, transform: (value: V1) => V2) => LuaMap<K, V2>;
8
+ export declare const getOrPut: <K extends AnyNotNil, V>(luaMap: LuaMap<K, V>, key: K, defaultValue: () => V) => V;
@@ -1,5 +1,13 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ local setmetatable = _G.setmetatable
4
+ local weakKeysMetatable = {__mode = "k"}
5
+ ____exports.mutableLuaMap = function()
6
+ return {}
7
+ end
8
+ ____exports.mutableWeakLuaMap = function()
9
+ return setmetatable({}, weakKeysMetatable)
10
+ end
3
11
  ____exports.luaMapOf = function(...)
4
12
  local luaMap = {}
5
13
  for i = 1, select("#", ...), 2 do
@@ -22,4 +30,12 @@ ____exports.mapValues = function(luaMap, transform)
22
30
  end
23
31
  return result
24
32
  end
33
+ ____exports.getOrPut = function(luaMap, key, defaultValue)
34
+ local value = luaMap[key]
35
+ if value == nil then
36
+ value = defaultValue()
37
+ luaMap[key] = value
38
+ end
39
+ return value
40
+ end
25
41
  return ____exports
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ export declare const mutableLuaSet: <T extends AnyNotNil>() => LuaSet<T>;
2
3
  export declare const luaSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LuaSet<T>;
3
4
  export declare const luaSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LuaSet<T>;
4
5
  export declare const luaSetIntersection: <T extends AnyNotNil>(firstLuaSet: ReadonlyLuaSet<T>, secondLuaSet: ReadonlyLuaSet<T>) => LuaSet<T>;
@@ -1,5 +1,8 @@
1
1
  local ____exports = {}
2
2
  local select = _G.select
3
+ ____exports.mutableLuaSet = function()
4
+ return {}
5
+ end
3
6
  ____exports.luaSetOf = function(...)
4
7
  local luaSet = {}
5
8
  for i = 1, select("#", ...) do
@@ -5,21 +5,25 @@ local checkNotNull = ____preconditions.checkNotNull
5
5
  -- @internal For use by internal systems only.
6
6
  ____exports.implementReadonlyNumberIndexSupplier = function(clazz, supplier)
7
7
  local metatable = checkNotNull(getmetatable(clazz))
8
- local originalIndex = checkNotNull(metatable.__index)
8
+ local originalIndex = checkNotNull(rawget(metatable, "__index"))
9
9
  local memoizedValueByKey = {}
10
- metatable.__index = setmetatable(
11
- memoizedValueByKey,
12
- {__index = function(self, key)
10
+ rawset(
11
+ metatable,
12
+ "__index",
13
+ function(self, key)
13
14
  if type(key) == "number" then
14
- local value = supplier(key)
15
- memoizedValueByKey[key] = value
15
+ local value = memoizedValueByKey[key]
16
+ if value == nil then
17
+ value = supplier(key)
18
+ memoizedValueByKey[key] = value
19
+ end
16
20
  return value
17
21
  end
18
22
  if type(originalIndex) == "function" then
19
23
  return originalIndex(self, key)
20
24
  end
21
25
  return originalIndex[key]
22
- end}
26
+ end
23
27
  )
24
28
  end
25
29
  ____exports.getClass = function(object)