warscript 0.0.1-dev.82b83f9 → 0.0.1-dev.83957b1

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 (120) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/order.d.ts +1 -0
  8. package/core/types/order.lua +11 -1
  9. package/core/types/sound.d.ts +17 -24
  10. package/core/types/sound.lua +99 -24
  11. package/core/types/timer.d.ts +6 -7
  12. package/core/types/timer.lua +18 -21
  13. package/core/util.lua +6 -1
  14. package/decl/native.d.ts +840 -786
  15. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  16. package/engine/behaviour/ability/damage.d.ts +9 -3
  17. package/engine/behaviour/ability/damage.lua +26 -38
  18. package/engine/behaviour/ability/emulate-impact.lua +16 -2
  19. package/engine/behaviour/ability.d.ts +5 -1
  20. package/engine/behaviour/ability.lua +19 -5
  21. package/engine/behaviour/unit.d.ts +17 -0
  22. package/engine/behaviour/unit.lua +114 -4
  23. package/engine/buff.d.ts +51 -41
  24. package/engine/buff.lua +274 -227
  25. package/engine/internal/ability.d.ts +4 -0
  26. package/engine/internal/ability.lua +17 -0
  27. package/engine/internal/item/ability.lua +12 -10
  28. package/engine/internal/item.d.ts +5 -2
  29. package/engine/internal/item.lua +75 -3
  30. package/engine/internal/mechanics/ability-duration.lua +1 -1
  31. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  32. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  33. package/engine/internal/unit/ability.d.ts +5 -0
  34. package/engine/internal/unit/ability.lua +14 -0
  35. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  36. package/engine/internal/unit/allowed-targets.lua +9 -1
  37. package/engine/internal/unit+damage.d.ts +2 -11
  38. package/engine/internal/unit+damage.lua +10 -14
  39. package/engine/internal/unit+spellSteal.lua +1 -2
  40. package/engine/internal/unit-missile-launch.lua +1 -1
  41. package/engine/internal/unit.d.ts +26 -4
  42. package/engine/internal/unit.lua +169 -37
  43. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  44. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  45. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  46. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  47. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  48. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  49. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  50. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  51. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  52. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  53. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  54. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  55. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  56. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  57. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  58. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  59. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  60. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  61. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  62. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  63. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  64. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  65. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  66. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  67. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  68. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  69. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  70. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  71. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  72. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  73. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  74. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  75. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  76. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  77. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  78. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  79. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  80. package/engine/object-data/entry/ability-type/web.lua +52 -0
  81. package/engine/object-data/entry/ability-type.d.ts +19 -17
  82. package/engine/object-data/entry/ability-type.lua +81 -21
  83. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  84. package/engine/object-data/entry/buff-type.d.ts +6 -12
  85. package/engine/object-data/entry/buff-type.lua +13 -29
  86. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  87. package/engine/object-data/entry/item-type.d.ts +1 -1
  88. package/engine/object-data/entry/item-type.lua +4 -4
  89. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  90. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  91. package/engine/object-data/entry/sound-preset.lua +140 -0
  92. package/engine/object-data/entry/unit-type.d.ts +10 -3
  93. package/engine/object-data/entry/unit-type.lua +155 -92
  94. package/engine/object-data/entry/upgrade.d.ts +1 -1
  95. package/engine/object-data/entry/upgrade.lua +4 -4
  96. package/engine/object-data/entry.d.ts +16 -14
  97. package/engine/object-data/entry.lua +60 -32
  98. package/engine/object-field/ability.d.ts +1 -1
  99. package/engine/object-field/unit.d.ts +46 -3
  100. package/engine/object-field/unit.lua +173 -7
  101. package/engine/object-field.d.ts +13 -4
  102. package/engine/object-field.lua +167 -80
  103. package/engine/standard/entries/buff-type.d.ts +3 -0
  104. package/engine/standard/entries/buff-type.lua +3 -0
  105. package/engine/standard/entries/sound-preset.d.ts +10 -0
  106. package/engine/standard/entries/sound-preset.lua +10 -0
  107. package/objutil/buff.lua +1 -2
  108. package/objutil/unit.lua +8 -0
  109. package/package.json +2 -2
  110. package/utility/arrays.d.ts +1 -0
  111. package/utility/arrays.lua +3 -0
  112. package/utility/functions.d.ts +1 -0
  113. package/utility/functions.lua +1 -0
  114. package/utility/linked-set.d.ts +1 -0
  115. package/utility/linked-set.lua +3 -0
  116. package/utility/lua-maps.d.ts +3 -0
  117. package/utility/lua-maps.lua +16 -0
  118. package/utility/lua-sets.d.ts +1 -0
  119. package/utility/lua-sets.lua +3 -0
  120. 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 = {}
@@ -29,7 +34,11 @@ local idGenerator = __TS__New(
29
34
  )
30
35
  local ObjectFieldBase = __TS__Class()
31
36
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
37
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
38
+ if isGlobal == nil then
39
+ isGlobal = true
40
+ end
41
+ self.isGlobal = isGlobal
33
42
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
43
  if objectFieldById[id] ~= nil then
35
44
  error(
@@ -48,12 +57,13 @@ function ObjectFieldBase.prototype.supports(self, instance)
48
57
  end
49
58
  function ObjectFieldBase.prototype.hasValue(self, instance)
50
59
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
60
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
52
61
  end
53
- function ObjectFieldBase.create(self, id)
62
+ function ObjectFieldBase.create(self, id, isGlobal)
54
63
  return __TS__New(
55
64
  self,
56
- id or idGenerator:next()
65
+ id or idGenerator:next(),
66
+ isGlobal
57
67
  )
58
68
  end
59
69
  function ObjectFieldBase.of(self, id)
@@ -75,7 +85,7 @@ ____exports.ObjectField = __TS__Class()
75
85
  local ObjectField = ____exports.ObjectField
76
86
  ObjectField.name = "ObjectField"
77
87
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
78
- function ObjectField.prototype.getValue(self, entry)
88
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
79
89
  if __TS__InstanceOf(entry, ObjectDataEntry) then
80
90
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
81
91
  if defaultValueByObjectDataEntryId ~= nil then
@@ -86,22 +96,16 @@ function ObjectField.prototype.getValue(self, entry)
86
96
  end
87
97
  return self.defaultValue
88
98
  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
99
+ if includeModifiers == false then
100
+ local originalValueByInstance = self.originalValueByInstance
101
+ if originalValueByInstance ~= nil then
102
+ local originalValue = originalValueByInstance[entry]
103
+ if originalValue ~= nil then
104
+ return originalValue
96
105
  end
97
- return ____self_valueByInstance_entry_0
98
106
  end
99
107
  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
108
+ return self:getActualValue(entry)
105
109
  end
106
110
  function ObjectField.prototype.setValue(self, entry, value)
107
111
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,37 +120,53 @@ function ObjectField.prototype.setValue(self, entry, value)
116
120
  defaultValueByObjectDataEntryId[entry.id] = value
117
121
  return true
118
122
  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
130
- 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)
123
+ local modifiersByInstance = self.modifiersByInstance
124
+ if modifiersByInstance ~= nil then
125
+ local modifiers = modifiersByInstance[entry]
126
+ if modifiers ~= nil and modifiers.size ~= 0 then
127
+ local originalValueByInstance = self.originalValueByInstance
128
+ if originalValueByInstance == nil then
129
+ originalValueByInstance = mutableWeakLuaMap()
130
+ self.originalValueByInstance = originalValueByInstance
135
131
  end
136
- return true
132
+ originalValueByInstance[entry] = value
133
+ value = self:calculateActualValue(entry)
137
134
  end
138
135
  end
139
- if not self:hasNativeFieldValue(entry) then
140
- return false
136
+ return self:setActualValue(entry, value)
137
+ end
138
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
139
+ local modifiersByInstance = self.modifiersByInstance
140
+ if modifiersByInstance == nil then
141
+ modifiersByInstance = mutableWeakLuaMap()
142
+ self.modifiersByInstance = modifiersByInstance
143
+ end
144
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
145
+ local originalValueByInstance = self.originalValueByInstance
146
+ if originalValueByInstance == nil then
147
+ originalValueByInstance = mutableWeakLuaMap()
148
+ self.originalValueByInstance = originalValueByInstance
149
+ end
150
+ originalValueByInstance[instance] = self:getActualValue(instance)
151
+ self:setActualValue(
152
+ instance,
153
+ self:calculateActualValue(instance)
154
+ )
141
155
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
156
+ end
157
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
158
+ local modifiersByInstance = self.modifiersByInstance
159
+ if modifiersByInstance ~= nil then
160
+ local modifiers = modifiersByInstance[instance]
161
+ if modifiers ~= nil and modifiers:remove(modifier) then
162
+ self:setActualValue(
163
+ instance,
164
+ self:calculateActualValue(instance)
165
+ )
166
+ return true
146
167
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
148
168
  end
149
- return true
169
+ return false
150
170
  end
151
171
  function ObjectField.prototype.removeValue(self, entry)
152
172
  if not warpack.compiletime then
@@ -168,6 +188,73 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
188
  end
169
189
  return self:setValue(entry, value)
170
190
  end
191
+ function ObjectField.prototype.getActualValue(self, instance)
192
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
193
+ if defaultValueByObjectDataEntryId ~= nil then
194
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
195
+ if defaultValue ~= nil then
196
+ local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
197
+ if ____self_valueByInstance_instance_0 == nil then
198
+ ____self_valueByInstance_instance_0 = defaultValue
199
+ end
200
+ return ____self_valueByInstance_instance_0
201
+ end
202
+ end
203
+ local ____temp_1 = self:getNativeFieldValue(instance)
204
+ if ____temp_1 == nil then
205
+ ____temp_1 = self.defaultValue
206
+ end
207
+ return ____temp_1
208
+ end
209
+ function ObjectField.prototype.setActualValue(self, instance, value)
210
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
211
+ if defaultValueByObjectDataEntryId ~= nil then
212
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
213
+ if defaultValue ~= nil or self.isGlobal then
214
+ local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
215
+ if ____self_valueByInstance_instance_2 == nil then
216
+ ____self_valueByInstance_instance_2 = defaultValue
217
+ end
218
+ local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
219
+ if ____self_valueByInstance_instance_2_3 == nil then
220
+ ____self_valueByInstance_instance_2_3 = self.defaultValue
221
+ end
222
+ local previousValue = ____self_valueByInstance_instance_2_3
223
+ if value ~= previousValue then
224
+ self.valueByInstance[instance] = value
225
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
226
+ end
227
+ return true
228
+ end
229
+ end
230
+ if not self:hasNativeFieldValue(instance) then
231
+ return false
232
+ end
233
+ local previousValue = self:getNativeFieldValue(instance)
234
+ if value ~= previousValue then
235
+ if not self:setNativeFieldValue(instance, value) then
236
+ return false
237
+ end
238
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
239
+ end
240
+ return true
241
+ end
242
+ function ObjectField.prototype.calculateActualValue(self, instance)
243
+ local ____opt_4 = self.originalValueByInstance
244
+ local originalValue = ____opt_4 and ____opt_4[instance]
245
+ local ____opt_6 = self.modifiersByInstance
246
+ local modifiers = ____opt_6 and ____opt_6[instance]
247
+ if originalValue ~= nil then
248
+ local value = originalValue
249
+ if modifiers ~= nil then
250
+ for modifier in pairs(modifiers) do
251
+ value = modifier(instance, value, originalValue)
252
+ end
253
+ end
254
+ return value
255
+ end
256
+ return self.defaultValue
257
+ end
171
258
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
259
  self:invokeValueChangeEventRecursive(
173
260
  getClass(self),
@@ -221,17 +308,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
308
  if defaultValueByObjectDataEntryId ~= nil then
222
309
  local value = defaultValueByObjectDataEntryId[entry.id]
223
310
  if value ~= nil then
224
- local ____temp_5
311
+ local ____temp_9
225
312
  if index == nil then
226
- ____temp_5 = value
313
+ ____temp_9 = value
227
314
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
315
+ local ____value_index_8 = value[index + 1]
316
+ if ____value_index_8 == nil then
317
+ ____value_index_8 = self.defaultValue
231
318
  end
232
- ____temp_5 = ____value_index_4
319
+ ____temp_9 = ____value_index_8
233
320
  end
234
- return ____temp_5
321
+ return ____temp_9
235
322
  end
236
323
  end
237
324
  return index == nil and ({}) or self.defaultValue
@@ -241,17 +328,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
241
328
  local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
329
  if defaultValue ~= nil then
243
330
  local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
331
+ local ____temp_11
245
332
  if index == nil then
246
- ____temp_7 = value
333
+ ____temp_11 = value
247
334
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
335
+ local ____value_index_10 = value[index + 1]
336
+ if ____value_index_10 == nil then
337
+ ____value_index_10 = self.defaultValue
251
338
  end
252
- ____temp_7 = ____value_index_6
339
+ ____temp_11 = ____value_index_10
253
340
  end
254
- return ____temp_7
341
+ return ____temp_11
255
342
  end
256
343
  end
257
344
  if index ~= nil then
@@ -296,11 +383,11 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
383
  if defaultValueByObjectDataEntryId ~= nil then
297
384
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
385
  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
386
+ local ____valueByLevel_index_12 = valueByLevel[level + 1]
387
+ if ____valueByLevel_index_12 == nil then
388
+ ____valueByLevel_index_12 = self.defaultValue
302
389
  end
303
- return ____valueByLevel_index_8
390
+ return ____valueByLevel_index_12
304
391
  end
305
392
  end
306
393
  return self.defaultValue
@@ -309,23 +396,23 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
309
396
  if defaultValueByObjectDataEntryId ~= nil then
310
397
  local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
398
  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]
399
+ local ____opt_13 = self.valueByInstance[entry]
400
+ local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
401
+ if ____temp_15 == nil then
402
+ ____temp_15 = defaultValueByLevel[level + 1]
316
403
  end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
404
+ local ____temp_15_16 = ____temp_15
405
+ if ____temp_15_16 == nil then
406
+ ____temp_15_16 = self.defaultValue
320
407
  end
321
- return ____temp_11_12
408
+ return ____temp_15_16
322
409
  end
323
410
  end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
411
+ local ____temp_17 = self:getNativeFieldValue(entry, level)
412
+ if ____temp_17 == nil then
413
+ ____temp_17 = self.defaultValue
327
414
  end
328
- return ____temp_13
415
+ return ____temp_17
329
416
  end
330
417
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
418
  if value == nil then
@@ -374,15 +461,15 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
374
461
  valueByLevel = {}
375
462
  self.valueByInstance[entry] = valueByLevel
376
463
  end
377
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
378
- if ____valueByLevel_index_14 == nil then
379
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
464
+ local ____valueByLevel_index_18 = valueByLevel[level + 1]
465
+ if ____valueByLevel_index_18 == nil then
466
+ ____valueByLevel_index_18 = defaultValueByLevel[level + 1]
380
467
  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
468
+ local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
469
+ if ____valueByLevel_index_18_19 == nil then
470
+ ____valueByLevel_index_18_19 = self.defaultValue
384
471
  end
385
- local previousValue = ____valueByLevel_index_14_15
472
+ local previousValue = ____valueByLevel_index_18_19
386
473
  if value ~= previousValue then
387
474
  valueByLevel[level + 1] = value
388
475
  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
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.82b83f9",
4
+ "version": "0.0.1-dev.83957b1",
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.1830aad"
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
@@ -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)