warscript 0.0.1-dev.ee6f224 → 0.0.1-dev.ef189a5

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 (63) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/player.d.ts +16 -0
  4. package/core/types/player.lua +57 -14
  5. package/core/types/tileCell.d.ts +2 -1
  6. package/core/types/tileCell.lua +5 -0
  7. package/core/types/timer.d.ts +3 -2
  8. package/core/types/timer.lua +8 -2
  9. package/engine/behavior.d.ts +7 -1
  10. package/engine/behavior.lua +88 -65
  11. package/engine/behaviour/ability/apply-buff.lua +4 -4
  12. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  13. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  14. package/engine/behaviour/ability.d.ts +2 -1
  15. package/engine/behaviour/ability.lua +2 -1
  16. package/engine/behaviour/unit/stun-immunity.d.ts +8 -4
  17. package/engine/behaviour/unit/stun-immunity.lua +12 -3
  18. package/engine/behaviour/unit.d.ts +9 -3
  19. package/engine/behaviour/unit.lua +94 -22
  20. package/engine/buff.d.ts +12 -2
  21. package/engine/buff.lua +80 -17
  22. package/engine/internal/item.d.ts +12 -12
  23. package/engine/internal/item.lua +41 -26
  24. package/engine/internal/unit/ability.d.ts +14 -14
  25. package/engine/internal/unit/ability.lua +72 -45
  26. package/engine/internal/unit/fly-height.d.ts +7 -0
  27. package/engine/internal/unit/fly-height.lua +20 -0
  28. package/engine/internal/unit/main-selected.lua +12 -27
  29. package/engine/internal/unit/scale.d.ts +7 -0
  30. package/engine/internal/unit/scale.lua +20 -0
  31. package/engine/internal/unit-missile-launch.lua +44 -20
  32. package/engine/internal/unit.d.ts +13 -10
  33. package/engine/internal/unit.lua +83 -64
  34. package/engine/local-client.d.ts +2 -0
  35. package/engine/local-client.lua +30 -0
  36. package/engine/object-data/entry/ability-type.lua +4 -1
  37. package/engine/object-data/entry/destructible-type.d.ts +5 -1
  38. package/engine/object-data/entry/destructible-type.lua +12 -0
  39. package/engine/object-data/entry/unit-type.d.ts +4 -0
  40. package/engine/object-data/entry/unit-type.lua +76 -32
  41. package/engine/object-field/unit.d.ts +13 -1
  42. package/engine/object-field/unit.lua +57 -0
  43. package/engine/object-field.d.ts +7 -1
  44. package/engine/object-field.lua +199 -112
  45. package/engine/standard/fields/ability.d.ts +2 -2
  46. package/engine/standard/fields/ability.lua +2 -2
  47. package/engine/standard/fields/unit.d.ts +3 -1
  48. package/engine/standard/fields/unit.lua +4 -0
  49. package/engine/synchronization.d.ts +11 -0
  50. package/engine/synchronization.lua +77 -0
  51. package/engine/text-tag.lua +3 -2
  52. package/engine/unit.d.ts +2 -0
  53. package/engine/unit.lua +2 -0
  54. package/net/socket.lua +1 -1
  55. package/objutil/buff.lua +1 -1
  56. package/package.json +2 -2
  57. package/utility/arrays.d.ts +1 -0
  58. package/utility/arrays.lua +8 -0
  59. package/utility/callback-array.d.ts +5 -1
  60. package/utility/callback-array.lua +16 -1
  61. package/utility/linked-set.d.ts +1 -0
  62. package/utility/linked-set.lua +19 -1
  63. package/utility/types.d.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import { Unit } from "../internal/unit";
3
- import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectLevelFieldType } from "../object-field";
3
+ import { ObjectField, ObjectFieldValueChangeEvent, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectFieldType, ReadonlyObjectLevelFieldType } from "../object-field";
4
4
  import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
5
5
  import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
6
6
  import { AttackType } from "../object-data/auxiliary/attack-type";
@@ -9,30 +9,35 @@ export declare abstract class UnitField<ValueType extends number | string | bool
9
9
  protected get instanceClass(): typeof Unit;
10
10
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
11
11
  protected hasNativeFieldValue(): boolean;
12
+ static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitField>>;
12
13
  }
13
14
  export declare class UnitBooleanField extends UnitField<boolean, junitbooleanfield> {
14
15
  protected get defaultValue(): boolean;
15
16
  protected getNativeFieldById(id: number): junitbooleanfield;
16
17
  protected getNativeFieldValue(instance: Unit): boolean;
17
18
  protected setNativeFieldValue(instance: Unit, value: boolean): boolean;
19
+ static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitBooleanField>>;
18
20
  }
19
21
  export declare class UnitFloatField extends UnitField<number, junitrealfield> {
20
22
  protected get defaultValue(): number;
21
23
  protected getNativeFieldById(id: number): junitrealfield;
22
24
  protected getNativeFieldValue(instance: Unit): number;
23
25
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
26
+ static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitFloatField>>;
24
27
  }
25
28
  export declare class UnitIntegerField extends UnitField<number, junitintegerfield> {
26
29
  protected get defaultValue(): number;
27
30
  protected getNativeFieldById(id: number): junitintegerfield;
28
31
  protected getNativeFieldValue(instance: Unit): number;
29
32
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
33
+ static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitIntegerField>>;
30
34
  }
31
35
  export declare class UnitStringField extends UnitField<string, junitstringfield> {
32
36
  protected get defaultValue(): string;
33
37
  protected getNativeFieldById(id: number): junitstringfield;
34
38
  protected getNativeFieldValue(instance: Unit): string;
35
39
  protected setNativeFieldValue(instance: Unit, value: string): boolean;
40
+ static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitStringField>>;
36
41
  }
37
42
  type junitweaponfield = junitweaponbooleanfield | junitweaponintegerfield | junitweaponrealfield | junitweaponstringfield;
38
43
  export declare abstract class UnitWeaponField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends junitweaponfield = junitweaponfield> extends ObjectLevelField<UnitType, Unit, ValueType, InputValueType, NativeFieldType> {
@@ -63,8 +68,15 @@ export declare class UnitClassificationsField extends UnitField<UnitClassificati
63
68
  protected getNativeFieldValue(instance: Unit): UnitClassifications;
64
69
  protected setNativeFieldValue(instance: Unit, value: UnitClassifications): boolean;
65
70
  }
71
+ export declare class UnitFlyHeightField extends UnitFloatField {
72
+ protected getNativeFieldValue(instance: Unit): number;
73
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
74
+ }
66
75
  export declare class UnitPropulsionWindowField extends UnitFloatField {
67
76
  protected getNativeFieldValue(instance: Unit): number;
68
77
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
69
78
  }
79
+ export declare class UnitScalingValueField extends UnitFloatField {
80
+ protected setNativeFieldValue(instance: Unit, value: number): boolean;
81
+ }
70
82
  export {};
@@ -18,8 +18,11 @@ local convertUnitStringField = ConvertUnitStringField
18
18
  local convertUnitWeaponIntegerField = ConvertUnitWeaponIntegerField
19
19
  local getUnitWeaponIntegerField = BlzGetUnitWeaponIntegerField
20
20
  local setUnitWeaponIntegerField = BlzSetUnitWeaponIntegerField
21
+ local getUnitFlyHeight = GetUnitFlyHeight
22
+ local setUnitFlyHeight = SetUnitFlyHeight
21
23
  local getUnitPropulsionWindow = GetUnitPropWindow
22
24
  local setUnitPropulsionWindow = SetUnitPropWindow
25
+ local setUnitScale = SetUnitScale
23
26
  ____exports.UnitField = __TS__Class()
24
27
  local UnitField = ____exports.UnitField
25
28
  UnitField.name = "UnitField"
@@ -38,6 +41,13 @@ __TS__SetDescriptor(
38
41
  end},
39
42
  true
40
43
  )
44
+ __TS__ObjectDefineProperty(
45
+ UnitField,
46
+ "valueChangeEvent",
47
+ {get = function(self)
48
+ return self:getOrCreateValueChangeEvent()
49
+ end}
50
+ )
41
51
  ____exports.UnitBooleanField = __TS__Class()
42
52
  local UnitBooleanField = ____exports.UnitBooleanField
43
53
  UnitBooleanField.name = "UnitBooleanField"
@@ -59,6 +69,13 @@ __TS__SetDescriptor(
59
69
  end},
60
70
  true
61
71
  )
72
+ __TS__ObjectDefineProperty(
73
+ UnitBooleanField,
74
+ "valueChangeEvent",
75
+ {get = function(self)
76
+ return self:getOrCreateValueChangeEvent()
77
+ end}
78
+ )
62
79
  ____exports.UnitFloatField = __TS__Class()
63
80
  local UnitFloatField = ____exports.UnitFloatField
64
81
  UnitFloatField.name = "UnitFloatField"
@@ -80,6 +97,13 @@ __TS__SetDescriptor(
80
97
  end},
81
98
  true
82
99
  )
100
+ __TS__ObjectDefineProperty(
101
+ UnitFloatField,
102
+ "valueChangeEvent",
103
+ {get = function(self)
104
+ return self:getOrCreateValueChangeEvent()
105
+ end}
106
+ )
83
107
  ____exports.UnitIntegerField = __TS__Class()
84
108
  local UnitIntegerField = ____exports.UnitIntegerField
85
109
  UnitIntegerField.name = "UnitIntegerField"
@@ -101,6 +125,13 @@ __TS__SetDescriptor(
101
125
  end},
102
126
  true
103
127
  )
128
+ __TS__ObjectDefineProperty(
129
+ UnitIntegerField,
130
+ "valueChangeEvent",
131
+ {get = function(self)
132
+ return self:getOrCreateValueChangeEvent()
133
+ end}
134
+ )
104
135
  ____exports.UnitStringField = __TS__Class()
105
136
  local UnitStringField = ____exports.UnitStringField
106
137
  UnitStringField.name = "UnitStringField"
@@ -122,6 +153,13 @@ __TS__SetDescriptor(
122
153
  end},
123
154
  true
124
155
  )
156
+ __TS__ObjectDefineProperty(
157
+ UnitStringField,
158
+ "valueChangeEvent",
159
+ {get = function(self)
160
+ return self:getOrCreateValueChangeEvent()
161
+ end}
162
+ )
125
163
  ____exports.UnitWeaponField = __TS__Class()
126
164
  local UnitWeaponField = ____exports.UnitWeaponField
127
165
  UnitWeaponField.name = "UnitWeaponField"
@@ -238,6 +276,17 @@ __TS__SetDescriptor(
238
276
  end},
239
277
  true
240
278
  )
279
+ ____exports.UnitFlyHeightField = __TS__Class()
280
+ local UnitFlyHeightField = ____exports.UnitFlyHeightField
281
+ UnitFlyHeightField.name = "UnitFlyHeightField"
282
+ __TS__ClassExtends(UnitFlyHeightField, ____exports.UnitFloatField)
283
+ function UnitFlyHeightField.prototype.getNativeFieldValue(self, instance)
284
+ return getUnitFlyHeight(instance.handle)
285
+ end
286
+ function UnitFlyHeightField.prototype.setNativeFieldValue(self, instance, value)
287
+ setUnitFlyHeight(instance.handle, value, 100000)
288
+ return true
289
+ end
241
290
  ____exports.UnitPropulsionWindowField = __TS__Class()
242
291
  local UnitPropulsionWindowField = ____exports.UnitPropulsionWindowField
243
292
  UnitPropulsionWindowField.name = "UnitPropulsionWindowField"
@@ -249,4 +298,12 @@ function UnitPropulsionWindowField.prototype.setNativeFieldValue(self, instance,
249
298
  setUnitPropulsionWindow(instance.handle, value)
250
299
  return true
251
300
  end
301
+ ____exports.UnitScalingValueField = __TS__Class()
302
+ local UnitScalingValueField = ____exports.UnitScalingValueField
303
+ UnitScalingValueField.name = "UnitScalingValueField"
304
+ __TS__ClassExtends(UnitScalingValueField, ____exports.UnitFloatField)
305
+ function UnitScalingValueField.prototype.setNativeFieldValue(self, instance, value)
306
+ setUnitScale(instance.handle, value, value, value)
307
+ return UnitScalingValueField.____super.prototype.setNativeFieldValue(self, instance, value)
308
+ end
252
309
  return ____exports
@@ -36,7 +36,8 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
36
36
  ]> : never;
37
37
  export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
38
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;
39
+ export type ObjectFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, currentValue: ValueType, originalValue: ValueType) => ValueType;
40
+ export type ObjectLevelFieldModifier<InstanceType extends AnyNotNil, ValueType extends number | string | boolean> = (instance: InstanceType, level: number, currentValue: ValueType, originalValue: ValueType) => ValueType;
40
41
  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> {
41
42
  protected abstract readonly defaultValue: ValueType;
42
43
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
@@ -88,7 +89,12 @@ export declare abstract class ObjectLevelField<ObjectDataEntryType extends Objec
88
89
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
89
90
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
90
91
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
92
+ applyModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): void;
93
+ removeModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): boolean;
91
94
  trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
95
+ private getActualValue;
96
+ private setActualValue;
97
+ private calculateActualValue;
92
98
  private invokeValueChangeEvent;
93
99
  private invokeValueChangeEventRecursive;
94
100
  protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
@@ -25,6 +25,7 @@ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
25
  local ____lua_2Dmaps = require("utility.lua-maps")
26
26
  local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
27
  local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
28
29
  local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
29
30
  local ____arrays = require("utility.arrays")
30
31
  local emptyArray = ____arrays.emptyArray
@@ -99,7 +100,7 @@ function ObjectField.prototype.getValue(self, entry, includeModifiers)
99
100
  end
100
101
  return self.defaultValue
101
102
  end
102
- if includeModifiers == false then
103
+ if not includeModifiers then
103
104
  local originalValueByInstance = self.originalValueByInstance
104
105
  if originalValueByInstance ~= nil then
105
106
  local originalValue = originalValueByInstance[entry]
@@ -150,7 +151,13 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
150
151
  originalValueByInstance = mutableWeakLuaMap()
151
152
  self.originalValueByInstance = originalValueByInstance
152
153
  end
153
- originalValueByInstance[instance] = self:getActualValue(instance)
154
+ local ____originalValueByInstance_1 = originalValueByInstance
155
+ local ____instance_2 = instance
156
+ local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
+ if ____originalValueByInstance_instance_0 == nil then
158
+ ____originalValueByInstance_instance_0 = self:getActualValue(instance)
159
+ end
160
+ ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
154
161
  self:setActualValue(
155
162
  instance,
156
163
  self:calculateActualValue(instance)
@@ -196,22 +203,22 @@ function ObjectField.prototype.getActualValue(self, instance)
196
203
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
197
204
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
198
205
  if defaultValue ~= nil or self.isGlobal then
199
- local ____self_valueByInstance_instance_0 = self.valueByInstance[instance]
200
- if ____self_valueByInstance_instance_0 == nil then
201
- ____self_valueByInstance_instance_0 = defaultValue
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
202
209
  end
203
- local ____self_valueByInstance_instance_0_1 = ____self_valueByInstance_instance_0
204
- if ____self_valueByInstance_instance_0_1 == nil then
205
- ____self_valueByInstance_instance_0_1 = self.defaultValue
210
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
+ if ____self_valueByInstance_instance_3_4 == nil then
212
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
206
213
  end
207
- return ____self_valueByInstance_instance_0_1
214
+ return ____self_valueByInstance_instance_3_4
208
215
  end
209
216
  end
210
- local ____temp_2 = self:getNativeFieldValue(instance)
211
- if ____temp_2 == nil then
212
- ____temp_2 = self.defaultValue
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
213
220
  end
214
- return ____temp_2
221
+ return ____temp_5
215
222
  end
216
223
  function ObjectField.prototype.setActualValue(self, instance, value)
217
224
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
@@ -219,19 +226,17 @@ function ObjectField.prototype.setActualValue(self, instance, value)
219
226
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
220
227
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
221
228
  if defaultValue ~= nil or self.isGlobal then
222
- local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
223
- if ____self_valueByInstance_instance_3 == nil then
224
- ____self_valueByInstance_instance_3 = defaultValue
225
- end
226
- local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
227
- if ____self_valueByInstance_instance_3_4 == nil then
228
- ____self_valueByInstance_instance_3_4 = self.defaultValue
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
229
232
  end
230
- local previousValue = ____self_valueByInstance_instance_3_4
231
- if value ~= previousValue then
232
- self.valueByInstance[instance] = value
233
- self:invokeValueChangeEvent(instance, self, previousValue, value)
233
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
+ if ____self_valueByInstance_instance_6_7 == nil then
235
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
234
236
  end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
235
240
  return true
236
241
  end
237
242
  end
@@ -239,19 +244,17 @@ function ObjectField.prototype.setActualValue(self, instance, value)
239
244
  return false
240
245
  end
241
246
  local previousValue = self:getNativeFieldValue(instance)
242
- if value ~= previousValue then
243
- if not self:setNativeFieldValue(instance, value) then
244
- return false
245
- end
246
- self:invokeValueChangeEvent(instance, self, previousValue, value)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
247
249
  end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
248
251
  return true
249
252
  end
250
253
  function ObjectField.prototype.calculateActualValue(self, instance)
251
- local ____opt_5 = self.originalValueByInstance
252
- local originalValue = ____opt_5 and ____opt_5[instance]
253
- local ____opt_7 = self.modifiersByInstance
254
- local modifiers = ____opt_7 and ____opt_7[instance]
254
+ local ____opt_8 = self.originalValueByInstance
255
+ local originalValue = ____opt_8 and ____opt_8[instance]
256
+ local ____opt_10 = self.modifiersByInstance
257
+ local modifiers = ____opt_10 and ____opt_10[instance]
255
258
  if originalValue ~= nil then
256
259
  local value = originalValue
257
260
  if modifiers ~= nil then
@@ -316,17 +319,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
316
319
  if defaultValueByObjectDataEntryId ~= nil then
317
320
  local value = defaultValueByObjectDataEntryId[entry.id]
318
321
  if value ~= nil then
319
- local ____temp_10
322
+ local ____temp_13
320
323
  if index == nil then
321
- ____temp_10 = value
324
+ ____temp_13 = value
322
325
  else
323
- local ____value_index_9 = value[index + 1]
324
- if ____value_index_9 == nil then
325
- ____value_index_9 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
326
329
  end
327
- ____temp_10 = ____value_index_9
330
+ ____temp_13 = ____value_index_12
328
331
  end
329
- return ____temp_10
332
+ return ____temp_13
330
333
  end
331
334
  end
332
335
  return index == nil and ({}) or self.defaultValue
@@ -336,17 +339,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
336
339
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
337
340
  if defaultValue ~= nil or self.isGlobal then
338
341
  local value = self.valueByInstance[entry] or defaultValue or emptyArray()
339
- local ____temp_12
342
+ local ____temp_15
340
343
  if index == nil then
341
- ____temp_12 = value
344
+ ____temp_15 = value
342
345
  else
343
- local ____value_index_11 = value[index + 1]
344
- if ____value_index_11 == nil then
345
- ____value_index_11 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
346
349
  end
347
- ____temp_12 = ____value_index_11
350
+ ____temp_15 = ____value_index_14
348
351
  end
349
- return ____temp_12
352
+ return ____temp_15
350
353
  end
351
354
  end
352
355
  if index ~= nil then
@@ -391,36 +394,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
391
394
  if defaultValueByObjectDataEntryId ~= nil then
392
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
393
396
  if valueByLevel ~= nil then
394
- local ____valueByLevel_index_13 = valueByLevel[level + 1]
395
- if ____valueByLevel_index_13 == nil then
396
- ____valueByLevel_index_13 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
397
400
  end
398
- return ____valueByLevel_index_13
401
+ return ____valueByLevel_index_16
399
402
  end
400
403
  end
401
404
  return self.defaultValue
402
405
  end
403
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
404
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
405
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
406
- if defaultValueByLevel ~= nil or self.isGlobal then
407
- local ____opt_14 = self.valueByInstance[entry]
408
- local ____temp_16 = ____opt_14 and ____opt_14[level + 1]
409
- if ____temp_16 == nil then
410
- ____temp_16 = (defaultValueByLevel or emptyArray())[level + 1]
411
- end
412
- local ____temp_16_17 = ____temp_16
413
- if ____temp_16_17 == nil then
414
- ____temp_16_17 = self.defaultValue
415
- end
416
- return ____temp_16_17
417
- end
418
- end
419
- local ____temp_18 = self:getNativeFieldValue(entry, level)
420
- if ____temp_18 == nil then
421
- ____temp_18 = self.defaultValue
406
+ local ____opt_19 = self.originalValueByLevelByInstance
407
+ local ____opt_17 = ____opt_19 and ____opt_19[entry]
408
+ local originalValue = ____opt_17 and ____opt_17[level]
409
+ if originalValue ~= nil then
410
+ return originalValue
422
411
  end
423
- return ____temp_18
412
+ return self:getActualValue(entry, level)
424
413
  end
425
414
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
426
415
  if value == nil then
@@ -460,55 +449,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
460
449
  valueByLevel[level + 1] = value
461
450
  return true
462
451
  end
463
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
464
- local objectDataEntryId = self:getObjectDataEntryId(entry)
465
- if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
466
- local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
467
- if defaultValueByLevel ~= nil or self.isGlobal then
468
- local valueByLevel = self.valueByInstance[entry]
469
- if valueByLevel == nil then
470
- valueByLevel = {}
471
- self.valueByInstance[entry] = valueByLevel
472
- end
473
- local ____valueByLevel_index_19 = valueByLevel[level + 1]
474
- if ____valueByLevel_index_19 == nil then
475
- ____valueByLevel_index_19 = (defaultValueByLevel or emptyArray())[level + 1]
452
+ local modifiersByInstance = self.modifiersByInstance
453
+ if modifiersByInstance ~= nil then
454
+ local modifiers = modifiersByInstance[entry]
455
+ if modifiers ~= nil and modifiers.size ~= 0 then
456
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
457
+ if originalValueByLevelByInstance == nil then
458
+ originalValueByLevelByInstance = mutableWeakLuaMap()
459
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
476
460
  end
477
- local ____valueByLevel_index_19_20 = ____valueByLevel_index_19
478
- if ____valueByLevel_index_19_20 == nil then
479
- ____valueByLevel_index_19_20 = self.defaultValue
461
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
462
+ value = self:calculateActualValue(entry, level)
463
+ end
464
+ end
465
+ return self:setActualValue(entry, level, value)
466
+ end
467
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
468
+ local modifiersByInstance = self.modifiersByInstance
469
+ if modifiersByInstance == nil then
470
+ modifiersByInstance = mutableWeakLuaMap()
471
+ self.modifiersByInstance = modifiersByInstance
472
+ end
473
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
474
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
475
+ if originalValueByLevelByInstance == nil then
476
+ originalValueByLevelByInstance = mutableWeakLuaMap()
477
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
478
+ end
479
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
480
+ local levelCount = self:getLevelCount(instance)
481
+ for level = 0, levelCount - 1 do
482
+ local ____originalValueByLevel_level_21 = originalValueByLevel[level]
483
+ if ____originalValueByLevel_level_21 == nil then
484
+ ____originalValueByLevel_level_21 = self:getActualValue(instance, level)
480
485
  end
481
- local previousValue = ____valueByLevel_index_19_20
482
- if value ~= previousValue then
483
- valueByLevel[level + 1] = value
484
- self:invokeValueChangeEvent(
485
- entry,
486
- self,
486
+ originalValueByLevel[level] = ____originalValueByLevel_level_21
487
+ self:setActualValue(
488
+ instance,
489
+ level,
490
+ self:calculateActualValue(instance, level)
491
+ )
492
+ end
493
+ end
494
+ end
495
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
496
+ local modifiersByInstance = self.modifiersByInstance
497
+ if modifiersByInstance ~= nil then
498
+ local modifiers = modifiersByInstance[instance]
499
+ if modifiers ~= nil and modifiers:remove(modifier) then
500
+ local levelCount = self:getLevelCount(instance)
501
+ for level = 0, levelCount - 1 do
502
+ self:setActualValue(
503
+ instance,
487
504
  level,
488
- previousValue,
489
- value
505
+ self:calculateActualValue(instance, level)
490
506
  )
491
507
  end
492
508
  return true
493
509
  end
494
510
  end
495
- if not self:hasNativeFieldValue(objectDataEntryId) then
496
- return false
497
- end
498
- local previousValue = self:getNativeFieldValue(entry, level)
499
- if value ~= previousValue then
500
- if not self:setNativeFieldValue(entry, level, value) then
501
- return false
502
- end
503
- self:invokeValueChangeEvent(
504
- entry,
505
- self,
506
- level,
507
- previousValue,
508
- value
509
- )
510
- end
511
- return true
511
+ return false
512
512
  end
513
513
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
514
514
  if value ~= nil then
@@ -525,6 +525,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
525
525
  end
526
526
  return self:setValue(entry, levelOrValue)
527
527
  end
528
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
529
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
530
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
531
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
532
+ if defaultValueByLevel ~= nil or self.isGlobal then
533
+ local ____opt_22 = self.valueByInstance[instance]
534
+ local ____temp_24 = ____opt_22 and ____opt_22[level + 1]
535
+ if ____temp_24 == nil then
536
+ ____temp_24 = (defaultValueByLevel or emptyArray())[level + 1]
537
+ end
538
+ local ____temp_24_25 = ____temp_24
539
+ if ____temp_24_25 == nil then
540
+ ____temp_24_25 = self.defaultValue
541
+ end
542
+ return ____temp_24_25
543
+ end
544
+ end
545
+ local ____temp_26 = self:getNativeFieldValue(instance, level)
546
+ if ____temp_26 == nil then
547
+ ____temp_26 = self.defaultValue
548
+ end
549
+ return ____temp_26
550
+ end
551
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
552
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
553
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
554
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
555
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
556
+ if defaultValueByLevel ~= nil or self.isGlobal then
557
+ local valueByLevel = self.valueByInstance[instance]
558
+ if valueByLevel == nil then
559
+ valueByLevel = {}
560
+ self.valueByInstance[instance] = valueByLevel
561
+ end
562
+ local ____valueByLevel_index_27 = valueByLevel[level + 1]
563
+ if ____valueByLevel_index_27 == nil then
564
+ ____valueByLevel_index_27 = (defaultValueByLevel or emptyArray())[level + 1]
565
+ end
566
+ local ____valueByLevel_index_27_28 = ____valueByLevel_index_27
567
+ if ____valueByLevel_index_27_28 == nil then
568
+ ____valueByLevel_index_27_28 = self.defaultValue
569
+ end
570
+ local previousValue = ____valueByLevel_index_27_28
571
+ valueByLevel[level + 1] = value
572
+ self:invokeValueChangeEvent(
573
+ instance,
574
+ self,
575
+ level,
576
+ previousValue,
577
+ value
578
+ )
579
+ return true
580
+ end
581
+ end
582
+ if not self:hasNativeFieldValue(objectDataEntryId) then
583
+ return false
584
+ end
585
+ local previousValue = self:getNativeFieldValue(instance, level)
586
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
587
+ return false
588
+ end
589
+ self:invokeValueChangeEvent(
590
+ instance,
591
+ self,
592
+ level,
593
+ previousValue,
594
+ value
595
+ )
596
+ return true
597
+ end
598
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
599
+ local ____opt_31 = self.originalValueByLevelByInstance
600
+ local ____opt_29 = ____opt_31 and ____opt_31[instance]
601
+ local originalValue = ____opt_29 and ____opt_29[level]
602
+ local ____opt_33 = self.modifiersByInstance
603
+ local modifiers = ____opt_33 and ____opt_33[instance]
604
+ if originalValue ~= nil then
605
+ local value = originalValue
606
+ if modifiers ~= nil then
607
+ for modifier in pairs(modifiers) do
608
+ value = modifier(instance, level, value, originalValue)
609
+ end
610
+ end
611
+ return value
612
+ end
613
+ return self.defaultValue
614
+ end
528
615
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
529
616
  self:invokeValueChangeEventRecursive(
530
617
  getClass(self),
@@ -376,8 +376,8 @@ export declare const INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD: Abi
376
376
  export declare const ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
377
377
  export declare const AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
378
378
  export declare const DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
- export declare const ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
- export declare const MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
379
+ export declare const MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
380
+ export declare const ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
381
381
  export declare const EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
382
382
  export declare const DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
383
383
  export declare const ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD: AbilityFloatLevelField & symbol;
@@ -387,8 +387,8 @@ ____exports.INVISIBILITY_TRANSITION_TIME_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloa
387
387
  ____exports.ACTIVATION_RADIUS_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Neu1"))
388
388
  ____exports.AMOUNT_REGENERATED_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Arm1"))
389
389
  ____exports.DAMAGE_PER_SECOND_POI1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi1"))
390
- ____exports.ATTACK_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
- ____exports.MOVEMENT_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
390
+ ____exports.MOVEMENT_SPEED_FACTOR_POI2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi2"))
391
+ ____exports.ATTACK_SPEED_FACTOR_POI3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poi3"))
392
392
  ____exports.EXTRA_DAMAGE_POA1_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa1"))
393
393
  ____exports.DAMAGE_PER_SECOND_POA2_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa2"))
394
394
  ____exports.ATTACK_SPEED_FACTOR_POA3_ABILITY_FLOAT_LEVEL_FIELD = AbilityFloatLevelField:create(fourCC("Poa3"))
@@ -1,4 +1,6 @@
1
1
  /** @noSelfInFile */
2
- import { UnitClassificationsField, UnitPropulsionWindowField } from "../../object-field/unit";
2
+ import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
3
  export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
4
  export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FLOAT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FLOAT_FIELD: UnitScalingValueField & symbol;
@@ -1,7 +1,11 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.object-field.unit")
3
3
  local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFlyHeightField = ____unit.UnitFlyHeightField
4
5
  local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
+ local UnitScalingValueField = ____unit.UnitScalingValueField
5
7
  ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
6
8
  ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
+ ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
10
+ ____exports.SCALING_VALUE_UNIT_FLOAT_FIELD = UnitScalingValueField:create(fourCC("usca"))
7
11
  return ____exports