warscript 0.0.1-dev.148c073 → 0.0.1-dev.1766d07

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 (74) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/core/types/effect.d.ts +1 -3
  4. package/core/types/effect.lua +26 -29
  5. package/core/types/order.d.ts +1 -0
  6. package/core/types/order.lua +11 -1
  7. package/core/types/sound.lua +5 -0
  8. package/core/types/timer.d.ts +6 -7
  9. package/core/types/timer.lua +18 -21
  10. package/decl/native.d.ts +840 -786
  11. package/engine/behaviour/ability/damage.d.ts +6 -3
  12. package/engine/behaviour/ability/damage.lua +24 -36
  13. package/engine/behaviour/ability/emulate-impact.lua +16 -2
  14. package/engine/behaviour/ability.d.ts +4 -1
  15. package/engine/behaviour/ability.lua +7 -5
  16. package/engine/behaviour/unit.d.ts +15 -0
  17. package/engine/behaviour/unit.lua +114 -4
  18. package/engine/internal/ability.d.ts +4 -0
  19. package/engine/internal/ability.lua +17 -0
  20. package/engine/internal/item/ability.lua +12 -10
  21. package/engine/internal/item.d.ts +5 -2
  22. package/engine/internal/item.lua +75 -3
  23. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  24. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  25. package/engine/internal/unit/ability.d.ts +5 -0
  26. package/engine/internal/unit/ability.lua +14 -0
  27. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  28. package/engine/internal/unit/allowed-targets.lua +9 -1
  29. package/engine/internal/unit+damage.d.ts +2 -11
  30. package/engine/internal/unit+damage.lua +10 -14
  31. package/engine/internal/unit+spellSteal.lua +1 -2
  32. package/engine/internal/unit-missile-launch.lua +1 -1
  33. package/engine/internal/unit.d.ts +20 -3
  34. package/engine/internal/unit.lua +163 -37
  35. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  36. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  37. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  38. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  39. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  40. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  41. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  42. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  43. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  44. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  45. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  46. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  47. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  48. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  49. package/engine/object-data/entry/ability-type.d.ts +11 -11
  50. package/engine/object-data/entry/ability-type.lua +27 -6
  51. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  52. package/engine/object-data/entry/buff-type.d.ts +5 -11
  53. package/engine/object-data/entry/buff-type.lua +11 -27
  54. package/engine/object-data/entry/unit-type.d.ts +2 -2
  55. package/engine/object-data/entry/unit-type.lua +94 -84
  56. package/engine/object-field/ability.d.ts +1 -1
  57. package/engine/object-field/unit.d.ts +46 -3
  58. package/engine/object-field/unit.lua +173 -7
  59. package/engine/object-field.d.ts +13 -4
  60. package/engine/object-field.lua +170 -81
  61. package/engine/standard/entries/buff-type.d.ts +3 -0
  62. package/engine/standard/entries/buff-type.lua +3 -0
  63. package/objutil/buff.lua +1 -2
  64. package/package.json +2 -2
  65. package/utility/arrays.d.ts +1 -0
  66. package/utility/arrays.lua +3 -0
  67. package/utility/functions.d.ts +1 -0
  68. package/utility/functions.lua +1 -0
  69. package/utility/linked-set.d.ts +1 -0
  70. package/utility/linked-set.lua +3 -0
  71. package/utility/lua-maps.d.ts +3 -0
  72. package/utility/lua-maps.lua +16 -0
  73. package/utility/lua-sets.d.ts +1 -0
  74. package/utility/lua-sets.lua +3 -0
@@ -5,9 +5,10 @@ import { ObjectDataEntry, ObjectDataEntryIdType, ObjectDataEntryLevelFieldValueS
5
5
  export type ObjectFieldId = number & {
6
6
  readonly __objectDataEntryFieldId: unique symbol;
7
7
  };
8
- export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
8
+ export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number, isGlobal?: boolean) => T);
9
9
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
10
10
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
11
+ readonly isGlobal: boolean;
11
12
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
12
13
  supports(instance: AnyNotNil): instance is InstanceType & {
13
14
  readonly __oneSidedTypeGuard: unique symbol;
@@ -18,8 +19,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
18
19
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
20
  protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
20
21
  hasValue(instance: InstanceType): boolean;
21
- constructor(id: number);
22
- static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
22
+ constructor(id: number, isGlobal?: boolean);
23
+ static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number, isGlobal?: boolean): T & symbol;
23
24
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
24
25
  }
25
26
  export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any> | ReadonlyObjectFieldType<ObjectField<any, any, any, any>>> = T extends ObjectField<any, infer InstanceType, infer ValueType, any> ? DispatchingEvent<[
@@ -35,14 +36,22 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
35
36
  ]> : never;
36
37
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
37
38
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
39
+ type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
38
40
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
39
41
  protected abstract readonly defaultValue: ValueType;
40
42
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
41
43
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
42
- getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
44
+ private originalValueByInstance?;
45
+ private modifiersByInstance?;
46
+ getValue(entry: ObjectDataEntryType | InstanceType, includeModifiers?: boolean): ValueType;
43
47
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
48
+ applyModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): void;
49
+ removeModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): boolean;
44
50
  removeValue(entry: ObjectDataEntryType): boolean;
45
51
  trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
52
+ private getActualValue;
53
+ private setActualValue;
54
+ private calculateActualValue;
46
55
  private invokeValueChangeEvent;
47
56
  private invokeValueChangeEventRecursive;
48
57
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
@@ -20,6 +20,13 @@ 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
28
+ local ____arrays = require("utility.arrays")
29
+ local emptyArray = ____arrays.emptyArray
23
30
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
31
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
32
  local objectFieldById = {}
@@ -29,7 +36,11 @@ local idGenerator = __TS__New(
29
36
  )
30
37
  local ObjectFieldBase = __TS__Class()
31
38
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
39
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
40
+ if isGlobal == nil then
41
+ isGlobal = true
42
+ end
43
+ self.isGlobal = isGlobal
33
44
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
45
  if objectFieldById[id] ~= nil then
35
46
  error(
@@ -48,12 +59,13 @@ function ObjectFieldBase.prototype.supports(self, instance)
48
59
  end
49
60
  function ObjectFieldBase.prototype.hasValue(self, instance)
50
61
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
- return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
62
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
52
63
  end
53
- function ObjectFieldBase.create(self, id)
64
+ function ObjectFieldBase.create(self, id, isGlobal)
54
65
  return __TS__New(
55
66
  self,
56
- id or idGenerator:next()
67
+ id or idGenerator:next(),
68
+ isGlobal
57
69
  )
58
70
  end
59
71
  function ObjectFieldBase.of(self, id)
@@ -75,7 +87,7 @@ ____exports.ObjectField = __TS__Class()
75
87
  local ObjectField = ____exports.ObjectField
76
88
  ObjectField.name = "ObjectField"
77
89
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
78
- function ObjectField.prototype.getValue(self, entry)
90
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
79
91
  if __TS__InstanceOf(entry, ObjectDataEntry) then
80
92
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
81
93
  if defaultValueByObjectDataEntryId ~= nil then
@@ -86,22 +98,16 @@ function ObjectField.prototype.getValue(self, entry)
86
98
  end
87
99
  return self.defaultValue
88
100
  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
101
+ if includeModifiers == false then
102
+ local originalValueByInstance = self.originalValueByInstance
103
+ if originalValueByInstance ~= nil then
104
+ local originalValue = originalValueByInstance[entry]
105
+ if originalValue ~= nil then
106
+ return originalValue
96
107
  end
97
- return ____self_valueByInstance_entry_0
98
108
  end
99
109
  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
110
+ return self:getActualValue(entry)
105
111
  end
106
112
  function ObjectField.prototype.setValue(self, entry, value)
107
113
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -116,37 +122,53 @@ function ObjectField.prototype.setValue(self, entry, value)
116
122
  defaultValueByObjectDataEntryId[entry.id] = value
117
123
  return true
118
124
  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)
125
+ local modifiersByInstance = self.modifiersByInstance
126
+ if modifiersByInstance ~= nil then
127
+ local modifiers = modifiersByInstance[entry]
128
+ if modifiers ~= nil and modifiers.size ~= 0 then
129
+ local originalValueByInstance = self.originalValueByInstance
130
+ if originalValueByInstance == nil then
131
+ originalValueByInstance = mutableWeakLuaMap()
132
+ self.originalValueByInstance = originalValueByInstance
135
133
  end
136
- return true
134
+ originalValueByInstance[entry] = value
135
+ value = self:calculateActualValue(entry)
137
136
  end
138
137
  end
139
- if not self:hasNativeFieldValue(entry) then
140
- return false
138
+ return self:setActualValue(entry, value)
139
+ end
140
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
141
+ local modifiersByInstance = self.modifiersByInstance
142
+ if modifiersByInstance == nil then
143
+ modifiersByInstance = mutableWeakLuaMap()
144
+ self.modifiersByInstance = modifiersByInstance
145
+ end
146
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
147
+ local originalValueByInstance = self.originalValueByInstance
148
+ if originalValueByInstance == nil then
149
+ originalValueByInstance = mutableWeakLuaMap()
150
+ self.originalValueByInstance = originalValueByInstance
151
+ end
152
+ originalValueByInstance[instance] = self:getActualValue(instance)
153
+ self:setActualValue(
154
+ instance,
155
+ self:calculateActualValue(instance)
156
+ )
141
157
  end
142
- local previousValue = self:getNativeFieldValue(entry)
143
- if value ~= previousValue then
144
- if not self:setNativeFieldValue(entry, value) then
145
- return false
158
+ end
159
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
160
+ local modifiersByInstance = self.modifiersByInstance
161
+ if modifiersByInstance ~= nil then
162
+ local modifiers = modifiersByInstance[instance]
163
+ if modifiers ~= nil and modifiers:remove(modifier) then
164
+ self:setActualValue(
165
+ instance,
166
+ self:calculateActualValue(instance)
167
+ )
168
+ return true
146
169
  end
147
- self:invokeValueChangeEvent(entry, self, previousValue, value)
148
170
  end
149
- return true
171
+ return false
150
172
  end
151
173
  function ObjectField.prototype.removeValue(self, entry)
152
174
  if not warpack.compiletime then
@@ -168,6 +190,73 @@ function ObjectField.prototype.trySetValue(self, entry, value)
168
190
  end
169
191
  return self:setValue(entry, value)
170
192
  end
193
+ function ObjectField.prototype.getActualValue(self, instance)
194
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
195
+ if defaultValueByObjectDataEntryId ~= nil then
196
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
197
+ if defaultValue ~= nil then
198
+ local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
199
+ if ____self_valueByInstance_instance_0 == nil then
200
+ ____self_valueByInstance_instance_0 = defaultValue
201
+ end
202
+ return ____self_valueByInstance_instance_0
203
+ end
204
+ end
205
+ local ____temp_1 = self:getNativeFieldValue(instance)
206
+ if ____temp_1 == nil then
207
+ ____temp_1 = self.defaultValue
208
+ end
209
+ return ____temp_1
210
+ end
211
+ function ObjectField.prototype.setActualValue(self, instance, value)
212
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
213
+ if defaultValueByObjectDataEntryId ~= nil then
214
+ local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)]
215
+ if defaultValue ~= nil or self.isGlobal then
216
+ local ____self_valueByInstance_instance_2 = self.valueByInstance[instance]
217
+ if ____self_valueByInstance_instance_2 == nil then
218
+ ____self_valueByInstance_instance_2 = defaultValue
219
+ end
220
+ local ____self_valueByInstance_instance_2_3 = ____self_valueByInstance_instance_2
221
+ if ____self_valueByInstance_instance_2_3 == nil then
222
+ ____self_valueByInstance_instance_2_3 = self.defaultValue
223
+ end
224
+ local previousValue = ____self_valueByInstance_instance_2_3
225
+ if value ~= previousValue then
226
+ self.valueByInstance[instance] = value
227
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
228
+ end
229
+ return true
230
+ end
231
+ end
232
+ if not self:hasNativeFieldValue(instance) then
233
+ return false
234
+ end
235
+ local previousValue = self:getNativeFieldValue(instance)
236
+ if value ~= previousValue then
237
+ if not self:setNativeFieldValue(instance, value) then
238
+ return false
239
+ end
240
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
241
+ end
242
+ return true
243
+ end
244
+ function ObjectField.prototype.calculateActualValue(self, instance)
245
+ local ____opt_4 = self.originalValueByInstance
246
+ local originalValue = ____opt_4 and ____opt_4[instance]
247
+ local ____opt_6 = self.modifiersByInstance
248
+ local modifiers = ____opt_6 and ____opt_6[instance]
249
+ if originalValue ~= nil then
250
+ local value = originalValue
251
+ if modifiers ~= nil then
252
+ for modifier in pairs(modifiers) do
253
+ value = modifier(instance, value, originalValue)
254
+ end
255
+ end
256
+ return value
257
+ end
258
+ return self.defaultValue
259
+ end
171
260
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
172
261
  self:invokeValueChangeEventRecursive(
173
262
  getClass(self),
@@ -221,17 +310,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
221
310
  if defaultValueByObjectDataEntryId ~= nil then
222
311
  local value = defaultValueByObjectDataEntryId[entry.id]
223
312
  if value ~= nil then
224
- local ____temp_5
313
+ local ____temp_9
225
314
  if index == nil then
226
- ____temp_5 = value
315
+ ____temp_9 = value
227
316
  else
228
- local ____value_index_4 = value[index + 1]
229
- if ____value_index_4 == nil then
230
- ____value_index_4 = self.defaultValue
317
+ local ____value_index_8 = value[index + 1]
318
+ if ____value_index_8 == nil then
319
+ ____value_index_8 = self.defaultValue
231
320
  end
232
- ____temp_5 = ____value_index_4
321
+ ____temp_9 = ____value_index_8
233
322
  end
234
- return ____temp_5
323
+ return ____temp_9
235
324
  end
236
325
  end
237
326
  return index == nil and ({}) or self.defaultValue
@@ -241,17 +330,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
241
330
  local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
242
331
  if defaultValue ~= nil then
243
332
  local value = self.valueByInstance[entry] or defaultValue
244
- local ____temp_7
333
+ local ____temp_11
245
334
  if index == nil then
246
- ____temp_7 = value
335
+ ____temp_11 = value
247
336
  else
248
- local ____value_index_6 = value[index + 1]
249
- if ____value_index_6 == nil then
250
- ____value_index_6 = self.defaultValue
337
+ local ____value_index_10 = value[index + 1]
338
+ if ____value_index_10 == nil then
339
+ ____value_index_10 = self.defaultValue
251
340
  end
252
- ____temp_7 = ____value_index_6
341
+ ____temp_11 = ____value_index_10
253
342
  end
254
- return ____temp_7
343
+ return ____temp_11
255
344
  end
256
345
  end
257
346
  if index ~= nil then
@@ -296,11 +385,11 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
296
385
  if defaultValueByObjectDataEntryId ~= nil then
297
386
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
298
387
  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
388
+ local ____valueByLevel_index_12 = valueByLevel[level + 1]
389
+ if ____valueByLevel_index_12 == nil then
390
+ ____valueByLevel_index_12 = self.defaultValue
302
391
  end
303
- return ____valueByLevel_index_8
392
+ return ____valueByLevel_index_12
304
393
  end
305
394
  end
306
395
  return self.defaultValue
@@ -309,23 +398,23 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
309
398
  if defaultValueByObjectDataEntryId ~= nil then
310
399
  local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
311
400
  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]
401
+ local ____opt_13 = self.valueByInstance[entry]
402
+ local ____temp_15 = ____opt_13 and ____opt_13[level + 1]
403
+ if ____temp_15 == nil then
404
+ ____temp_15 = defaultValueByLevel[level + 1]
316
405
  end
317
- local ____temp_11_12 = ____temp_11
318
- if ____temp_11_12 == nil then
319
- ____temp_11_12 = self.defaultValue
406
+ local ____temp_15_16 = ____temp_15
407
+ if ____temp_15_16 == nil then
408
+ ____temp_15_16 = self.defaultValue
320
409
  end
321
- return ____temp_11_12
410
+ return ____temp_15_16
322
411
  end
323
412
  end
324
- local ____temp_13 = self:getNativeFieldValue(entry, level)
325
- if ____temp_13 == nil then
326
- ____temp_13 = self.defaultValue
413
+ local ____temp_17 = self:getNativeFieldValue(entry, level)
414
+ if ____temp_17 == nil then
415
+ ____temp_17 = self.defaultValue
327
416
  end
328
- return ____temp_13
417
+ return ____temp_17
329
418
  end
330
419
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
331
420
  if value == nil then
@@ -368,21 +457,21 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
368
457
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
369
458
  if defaultValueByObjectDataEntryId ~= nil then
370
459
  local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
371
- if defaultValueByLevel ~= nil then
460
+ if defaultValueByLevel ~= nil or self.isGlobal then
372
461
  local valueByLevel = self.valueByInstance[entry]
373
462
  if valueByLevel == nil then
374
463
  valueByLevel = {}
375
464
  self.valueByInstance[entry] = valueByLevel
376
465
  end
377
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
378
- if ____valueByLevel_index_14 == nil then
379
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
466
+ local ____valueByLevel_index_18 = valueByLevel[level + 1]
467
+ if ____valueByLevel_index_18 == nil then
468
+ ____valueByLevel_index_18 = (defaultValueByLevel or emptyArray())[level + 1]
380
469
  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
470
+ local ____valueByLevel_index_18_19 = ____valueByLevel_index_18
471
+ if ____valueByLevel_index_18_19 == nil then
472
+ ____valueByLevel_index_18_19 = self.defaultValue
384
473
  end
385
- local previousValue = ____valueByLevel_index_14_15
474
+ local previousValue = ____valueByLevel_index_18_19
386
475
  if value ~= previousValue then
387
476
  valueByLevel[level + 1] = value
388
477
  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
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/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.148c073",
4
+ "version": "0.0.1-dev.1766d07",
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.9a8d1de"
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