warscript 0.0.1-dev.064c144 → 0.0.1-dev.072eba1

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 (49) hide show
  1. package/destroyable.d.ts +1 -0
  2. package/destroyable.lua +9 -0
  3. package/engine/behavior.d.ts +4 -2
  4. package/engine/behavior.lua +69 -11
  5. package/engine/behaviour/ability/apply-buff.lua +4 -4
  6. package/engine/behaviour/ability.d.ts +4 -0
  7. package/engine/behaviour/ability.lua +29 -0
  8. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  9. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  10. package/engine/behaviour/unit.lua +13 -3
  11. package/engine/buff.d.ts +7 -2
  12. package/engine/buff.lua +42 -24
  13. package/engine/internal/mechanics/cast-ability.lua +6 -3
  14. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  15. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  16. package/engine/internal/unit/attributes.d.ts +17 -0
  17. package/engine/internal/unit/attributes.lua +46 -0
  18. package/engine/internal/unit/bonus.d.ts +2 -0
  19. package/engine/internal/unit/bonus.lua +10 -0
  20. package/engine/internal/unit/fly-height.lua +3 -3
  21. package/engine/internal/unit/interrupts.d.ts +12 -0
  22. package/engine/internal/unit/interrupts.lua +28 -0
  23. package/engine/internal/unit/scale.lua +3 -3
  24. package/engine/internal/unit-missile-launch.lua +12 -5
  25. package/engine/internal/unit.d.ts +2 -8
  26. package/engine/internal/unit.lua +79 -97
  27. package/engine/local-client.d.ts +1 -1
  28. package/engine/local-client.lua +4 -4
  29. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  30. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  31. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  32. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  33. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  34. package/engine/object-data/entry/destructible-type.lua +155 -0
  35. package/engine/object-field/unit.d.ts +7 -4
  36. package/engine/object-field/unit.lua +4 -0
  37. package/engine/object-field.d.ts +2 -0
  38. package/engine/object-field.lua +171 -115
  39. package/engine/standard/fields/unit.d.ts +11 -5
  40. package/engine/standard/fields/unit.lua +13 -4
  41. package/engine/unit.d.ts +2 -0
  42. package/engine/unit.lua +2 -0
  43. package/objutil/buff.lua +9 -7
  44. package/package.json +2 -2
  45. package/patch-lua.lua +15 -0
  46. package/utility/linked-map.d.ts +26 -0
  47. package/utility/linked-map.lua +66 -0
  48. package/utility/linked-set.lua +4 -0
  49. package/utility/records.lua +20 -1
@@ -11,6 +11,8 @@ local ____entry = require("engine.object-data.entry")
11
11
  local ObjectDataEntry = ____entry.ObjectDataEntry
12
12
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
13
13
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
14
+ local ____reflection = require("utility.reflection")
15
+ local implementReadonlyNumberIndexSupplier = ____reflection.implementReadonlyNumberIndexSupplier
14
16
  ____exports.DestructibleType = __TS__Class()
15
17
  local DestructibleType = ____exports.DestructibleType
16
18
  DestructibleType.name = "DestructibleType"
@@ -25,6 +27,84 @@ DestructibleType.idGenerator = __TS__New(
25
27
  ObjectDataEntryIdGenerator,
26
28
  fourCC("D000")
27
29
  )
30
+ __TS__SetDescriptor(
31
+ DestructibleType.prototype,
32
+ "fixedFacing",
33
+ {
34
+ get = function(self)
35
+ return self:getNumberField("bfxr")
36
+ end,
37
+ set = function(self, fixedFacing)
38
+ self:setNumberField("bfxr", fixedFacing)
39
+ end
40
+ },
41
+ true
42
+ )
43
+ __TS__SetDescriptor(
44
+ DestructibleType.prototype,
45
+ "flyOverHeight",
46
+ {
47
+ get = function(self)
48
+ return self:getNumberField("bflh")
49
+ end,
50
+ set = function(self, flyOverHeight)
51
+ self:setNumberField("bflh", flyOverHeight)
52
+ end
53
+ },
54
+ true
55
+ )
56
+ __TS__SetDescriptor(
57
+ DestructibleType.prototype,
58
+ "modelPath",
59
+ {
60
+ get = function(self)
61
+ return self:getStringField("bfil")
62
+ end,
63
+ set = function(self, modelPath)
64
+ self:setStringField("bfil", modelPath)
65
+ end
66
+ },
67
+ true
68
+ )
69
+ __TS__SetDescriptor(
70
+ DestructibleType.prototype,
71
+ "modelPathSD",
72
+ {
73
+ get = function(self)
74
+ return self:getStringField("bfil:sd")
75
+ end,
76
+ set = function(self, modelPathSD)
77
+ self:setStringField("bfil:sd", modelPathSD)
78
+ end
79
+ },
80
+ true
81
+ )
82
+ __TS__SetDescriptor(
83
+ DestructibleType.prototype,
84
+ "modelPathHD",
85
+ {
86
+ get = function(self)
87
+ return self:getStringField("bfil:hd")
88
+ end,
89
+ set = function(self, modelPathHD)
90
+ self:setStringField("bfil:hd", modelPathHD)
91
+ end
92
+ },
93
+ true
94
+ )
95
+ __TS__SetDescriptor(
96
+ DestructibleType.prototype,
97
+ "occlusionHeight",
98
+ {
99
+ get = function(self)
100
+ return self:getNumberField("boch")
101
+ end,
102
+ set = function(self, occlusionHeight)
103
+ self:setNumberField("boch", occlusionHeight)
104
+ end
105
+ },
106
+ true
107
+ )
28
108
  __TS__SetDescriptor(
29
109
  DestructibleType.prototype,
30
110
  "armorSoundType",
@@ -80,4 +160,79 @@ __TS__SetDescriptor(
80
160
  },
81
161
  true
82
162
  )
163
+ __TS__SetDescriptor(
164
+ DestructibleType.prototype,
165
+ "cliffHeight",
166
+ {
167
+ get = function(self)
168
+ return self:getNumberField("bclh")
169
+ end,
170
+ set = function(self, cliffHeight)
171
+ self:setNumberField("bclh", cliffHeight)
172
+ end
173
+ },
174
+ true
175
+ )
176
+ __TS__SetDescriptor(
177
+ DestructibleType.prototype,
178
+ "isWalkable",
179
+ {
180
+ get = function(self)
181
+ return self:getBooleanField("bwal")
182
+ end,
183
+ set = function(self, isWalkable)
184
+ self:setBooleanField("bwal", isWalkable)
185
+ end
186
+ },
187
+ true
188
+ )
189
+ __TS__SetDescriptor(
190
+ DestructibleType.prototype,
191
+ "pathingTexturePath",
192
+ {
193
+ get = function(self)
194
+ return self:getStringField("bptx")
195
+ end,
196
+ set = function(self, pathingTexturePath)
197
+ self:setStringField("bptx", pathingTexturePath)
198
+ end
199
+ },
200
+ true
201
+ )
202
+ __TS__SetDescriptor(
203
+ DestructibleType.prototype,
204
+ "deadPathingTexturePath",
205
+ {
206
+ get = function(self)
207
+ return self:getStringField("bptd")
208
+ end,
209
+ set = function(self, deadPathingTexturePath)
210
+ self:setStringField("bptd", deadPathingTexturePath)
211
+ end
212
+ },
213
+ true
214
+ )
215
+ __TS__SetDescriptor(
216
+ DestructibleType.prototype,
217
+ "name",
218
+ {
219
+ get = function(self)
220
+ return self:getStringField("bnam")
221
+ end,
222
+ set = function(self, name)
223
+ self:setStringField("bnam", name)
224
+ end
225
+ },
226
+ true
227
+ )
228
+ implementReadonlyNumberIndexSupplier(
229
+ ____exports.DestructibleType,
230
+ function(id)
231
+ local ____class_0 = __TS__Class()
232
+ ____class_0.name = ____class_0.name
233
+ __TS__ClassExtends(____class_0, ____exports.DestructibleType)
234
+ ____class_0.BASE_ID = id
235
+ return ____class_0
236
+ end
237
+ )
83
238
  return ____exports
@@ -5,6 +5,7 @@ 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";
7
7
  import { UnitClassifications } from "../object-data/auxiliary/unit-classification";
8
+ import { HealthRegenerationType } from "../object-data/auxiliary/health-regeneration-type";
8
9
  export declare abstract class UnitField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = any> extends ObjectField<UnitType, Unit, ValueType, NativeFieldType> {
9
10
  protected get instanceClass(): typeof Unit;
10
11
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
@@ -25,11 +26,11 @@ export declare class UnitFloatField extends UnitField<number, junitrealfield> {
25
26
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
26
27
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitFloatField>>;
27
28
  }
28
- export declare class UnitIntegerField extends UnitField<number, junitintegerfield> {
29
- protected get defaultValue(): number;
29
+ export declare class UnitIntegerField<T extends number = number> extends UnitField<T, junitintegerfield> {
30
+ protected get defaultValue(): T;
30
31
  protected getNativeFieldById(id: number): junitintegerfield;
31
- protected getNativeFieldValue(instance: Unit): number;
32
- protected setNativeFieldValue(instance: Unit, value: number): boolean;
32
+ protected getNativeFieldValue(instance: Unit): T;
33
+ protected setNativeFieldValue(instance: Unit, value: T): boolean;
33
34
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitIntegerField>>;
34
35
  }
35
36
  export declare class UnitStringField extends UnitField<string, junitstringfield> {
@@ -76,6 +77,8 @@ export declare class UnitPropulsionWindowField extends UnitFloatField {
76
77
  protected getNativeFieldValue(instance: Unit): number;
77
78
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
78
79
  }
80
+ export declare class UnitHealthRegenerationTypeField extends UnitIntegerField<HealthRegenerationType> {
81
+ }
79
82
  export declare class UnitScalingValueField extends UnitFloatField {
80
83
  protected setNativeFieldValue(instance: Unit, value: number): boolean;
81
84
  }
@@ -298,6 +298,10 @@ function UnitPropulsionWindowField.prototype.setNativeFieldValue(self, instance,
298
298
  setUnitPropulsionWindow(instance.handle, value)
299
299
  return true
300
300
  end
301
+ ____exports.UnitHealthRegenerationTypeField = __TS__Class()
302
+ local UnitHealthRegenerationTypeField = ____exports.UnitHealthRegenerationTypeField
303
+ UnitHealthRegenerationTypeField.name = "UnitHealthRegenerationTypeField"
304
+ __TS__ClassExtends(UnitHealthRegenerationTypeField, ____exports.UnitIntegerField)
301
305
  ____exports.UnitScalingValueField = __TS__Class()
302
306
  local UnitScalingValueField = ____exports.UnitScalingValueField
303
307
  UnitScalingValueField.name = "UnitScalingValueField"
@@ -46,6 +46,7 @@ export declare abstract class ObjectField<ObjectDataEntryType extends ObjectData
46
46
  private modifiersByInstance?;
47
47
  getValue(entry: ObjectDataEntryType | InstanceType, includeModifiers?: boolean): ValueType;
48
48
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
49
+ updateActualValue(instance: InstanceType): void;
49
50
  applyModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): void;
50
51
  removeModifier(instance: InstanceType, modifier: ObjectFieldModifier<InstanceType, ValueType>): boolean;
51
52
  removeValue(entry: ObjectDataEntryType): boolean;
@@ -89,6 +90,7 @@ export declare abstract class ObjectLevelField<ObjectDataEntryType extends Objec
89
90
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
90
91
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
91
92
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
93
+ updateActualValue(instance: InstanceType, level?: number): void;
92
94
  applyModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): void;
93
95
  removeModifier(instance: InstanceType, modifier: ObjectLevelFieldModifier<InstanceType, ValueType>): boolean;
94
96
  trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
@@ -124,6 +124,7 @@ function ObjectField.prototype.setValue(self, entry, value)
124
124
  defaultValueByObjectDataEntryId[entry.id] = value
125
125
  return true
126
126
  end
127
+ local previousOriginalValue
127
128
  local modifiersByInstance = self.modifiersByInstance
128
129
  if modifiersByInstance ~= nil then
129
130
  local modifiers = modifiersByInstance[entry]
@@ -133,11 +134,40 @@ function ObjectField.prototype.setValue(self, entry, value)
133
134
  originalValueByInstance = mutableWeakLuaMap()
134
135
  self.originalValueByInstance = originalValueByInstance
135
136
  end
137
+ previousOriginalValue = originalValueByInstance[entry]
138
+ if value == previousOriginalValue then
139
+ return true
140
+ end
136
141
  originalValueByInstance[entry] = value
137
- value = self:calculateActualValue(entry)
142
+ value = (self:calculateActualValue(entry))
143
+ end
144
+ end
145
+ local previousValue = self:setActualValue(entry, value)
146
+ if previousValue == nil then
147
+ return false
148
+ end
149
+ if previousOriginalValue ~= nil or value ~= previousValue then
150
+ local ____self_invokeValueChangeEvent_2 = self.invokeValueChangeEvent
151
+ local ____entry_1 = entry
152
+ local ____previousOriginalValue_0 = previousOriginalValue
153
+ if ____previousOriginalValue_0 == nil then
154
+ ____previousOriginalValue_0 = previousValue
138
155
  end
156
+ ____self_invokeValueChangeEvent_2(
157
+ self,
158
+ ____entry_1,
159
+ self,
160
+ ____previousOriginalValue_0,
161
+ value
162
+ )
163
+ end
164
+ return true
165
+ end
166
+ function ObjectField.prototype.updateActualValue(self, instance)
167
+ local actualValue, hasModifiers = self:calculateActualValue(instance)
168
+ if hasModifiers then
169
+ self:setActualValue(instance, actualValue)
139
170
  end
140
- return self:setActualValue(entry, value)
141
171
  end
142
172
  function ObjectField.prototype.applyModifier(self, instance, modifier)
143
173
  local modifiersByInstance = self.modifiersByInstance
@@ -151,17 +181,14 @@ function ObjectField.prototype.applyModifier(self, instance, modifier)
151
181
  originalValueByInstance = mutableWeakLuaMap()
152
182
  self.originalValueByInstance = originalValueByInstance
153
183
  end
154
- local ____originalValueByInstance_1 = originalValueByInstance
155
- local ____instance_2 = instance
156
- local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
- if ____originalValueByInstance_instance_0 == nil then
158
- ____originalValueByInstance_instance_0 = self:getActualValue(instance)
184
+ local ____originalValueByInstance_4 = originalValueByInstance
185
+ local ____instance_5 = instance
186
+ local ____originalValueByInstance_instance_3 = originalValueByInstance[instance]
187
+ if ____originalValueByInstance_instance_3 == nil then
188
+ ____originalValueByInstance_instance_3 = self:getActualValue(instance)
159
189
  end
160
- ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
161
- self:setActualValue(
162
- instance,
163
- self:calculateActualValue(instance)
164
- )
190
+ ____originalValueByInstance_4[____instance_5] = ____originalValueByInstance_instance_3
191
+ self:setActualValue(instance, (self:calculateActualValue(instance)))
165
192
  end
166
193
  end
167
194
  function ObjectField.prototype.removeModifier(self, instance, modifier)
@@ -169,10 +196,7 @@ function ObjectField.prototype.removeModifier(self, instance, modifier)
169
196
  if modifiersByInstance ~= nil then
170
197
  local modifiers = modifiersByInstance[instance]
171
198
  if modifiers ~= nil and modifiers:remove(modifier) then
172
- self:setActualValue(
173
- instance,
174
- self:calculateActualValue(instance)
175
- )
199
+ self:setActualValue(instance, (self:calculateActualValue(instance)))
176
200
  return true
177
201
  end
178
202
  end
@@ -203,22 +227,22 @@ function ObjectField.prototype.getActualValue(self, instance)
203
227
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
228
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
205
229
  if defaultValue ~= nil or self.isGlobal then
206
- local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
- if ____self_valueByInstance_instance_3 == nil then
208
- ____self_valueByInstance_instance_3 = defaultValue
230
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
231
+ if ____self_valueByInstance_instance_6 == nil then
232
+ ____self_valueByInstance_instance_6 = defaultValue
209
233
  end
210
- local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
- if ____self_valueByInstance_instance_3_4 == nil then
212
- ____self_valueByInstance_instance_3_4 = self.defaultValue
234
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
235
+ if ____self_valueByInstance_instance_6_7 == nil then
236
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
213
237
  end
214
- return ____self_valueByInstance_instance_3_4
238
+ return ____self_valueByInstance_instance_6_7
215
239
  end
216
240
  end
217
- local ____temp_5 = self:getNativeFieldValue(instance)
218
- if ____temp_5 == nil then
219
- ____temp_5 = self.defaultValue
241
+ local ____temp_8 = self:getNativeFieldValue(instance)
242
+ if ____temp_8 == nil then
243
+ ____temp_8 = self.defaultValue
220
244
  end
221
- return ____temp_5
245
+ return ____temp_8
222
246
  end
223
247
  function ObjectField.prototype.setActualValue(self, instance, value)
224
248
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
@@ -226,45 +250,44 @@ function ObjectField.prototype.setActualValue(self, instance, value)
226
250
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
251
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
228
252
  if defaultValue ~= nil or self.isGlobal then
229
- local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
- if ____self_valueByInstance_instance_6 == nil then
231
- ____self_valueByInstance_instance_6 = defaultValue
253
+ local ____self_valueByInstance_instance_9 = self.valueByInstance[instance]
254
+ if ____self_valueByInstance_instance_9 == nil then
255
+ ____self_valueByInstance_instance_9 = defaultValue
232
256
  end
233
- local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
- if ____self_valueByInstance_instance_6_7 == nil then
235
- ____self_valueByInstance_instance_6_7 = self.defaultValue
257
+ local ____self_valueByInstance_instance_9_10 = ____self_valueByInstance_instance_9
258
+ if ____self_valueByInstance_instance_9_10 == nil then
259
+ ____self_valueByInstance_instance_9_10 = self.defaultValue
236
260
  end
237
- local previousValue = ____self_valueByInstance_instance_6_7
261
+ local previousValue = ____self_valueByInstance_instance_9_10
238
262
  self.valueByInstance[instance] = value
239
- self:invokeValueChangeEvent(instance, self, previousValue, value)
240
- return true
263
+ return previousValue
241
264
  end
242
265
  end
243
266
  if not self:hasNativeFieldValue(objectDataEntryId) then
244
- return false
267
+ return nil
245
268
  end
246
269
  local previousValue = self:getNativeFieldValue(instance)
247
270
  if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
- return false
271
+ return nil
249
272
  end
250
- self:invokeValueChangeEvent(instance, self, previousValue, value)
251
- return true
273
+ return previousValue
252
274
  end
253
275
  function ObjectField.prototype.calculateActualValue(self, instance)
254
- local ____opt_8 = self.originalValueByInstance
255
- local originalValue = ____opt_8 and ____opt_8[instance]
256
- local ____opt_10 = self.modifiersByInstance
257
- local modifiers = ____opt_10 and ____opt_10[instance]
276
+ local ____opt_11 = self.originalValueByInstance
277
+ local originalValue = ____opt_11 and ____opt_11[instance]
278
+ local ____opt_13 = self.modifiersByInstance
279
+ local modifiers = ____opt_13 and ____opt_13[instance]
258
280
  if originalValue ~= nil then
259
281
  local value = originalValue
260
282
  if modifiers ~= nil then
261
283
  for modifier in pairs(modifiers) do
262
284
  value = modifier(instance, value, originalValue)
263
285
  end
286
+ return value, true
264
287
  end
265
- return value
288
+ return value, false
266
289
  end
267
- return self.defaultValue
290
+ return self.defaultValue, false
268
291
  end
269
292
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
270
293
  self:invokeValueChangeEventRecursive(
@@ -319,17 +342,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
319
342
  if defaultValueByObjectDataEntryId ~= nil then
320
343
  local value = defaultValueByObjectDataEntryId[entry.id]
321
344
  if value ~= nil then
322
- local ____temp_13
345
+ local ____temp_16
323
346
  if index == nil then
324
- ____temp_13 = value
347
+ ____temp_16 = value
325
348
  else
326
- local ____value_index_12 = value[index + 1]
327
- if ____value_index_12 == nil then
328
- ____value_index_12 = self.defaultValue
349
+ local ____value_index_15 = value[index + 1]
350
+ if ____value_index_15 == nil then
351
+ ____value_index_15 = self.defaultValue
329
352
  end
330
- ____temp_13 = ____value_index_12
353
+ ____temp_16 = ____value_index_15
331
354
  end
332
- return ____temp_13
355
+ return ____temp_16
333
356
  end
334
357
  end
335
358
  return index == nil and ({}) or self.defaultValue
@@ -339,17 +362,17 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
339
362
  local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
340
363
  if defaultValue ~= nil or self.isGlobal then
341
364
  local value = self.valueByInstance[entry] or defaultValue or emptyArray()
342
- local ____temp_15
365
+ local ____temp_18
343
366
  if index == nil then
344
- ____temp_15 = value
367
+ ____temp_18 = value
345
368
  else
346
- local ____value_index_14 = value[index + 1]
347
- if ____value_index_14 == nil then
348
- ____value_index_14 = self.defaultValue
369
+ local ____value_index_17 = value[index + 1]
370
+ if ____value_index_17 == nil then
371
+ ____value_index_17 = self.defaultValue
349
372
  end
350
- ____temp_15 = ____value_index_14
373
+ ____temp_18 = ____value_index_17
351
374
  end
352
- return ____temp_15
375
+ return ____temp_18
353
376
  end
354
377
  end
355
378
  if index ~= nil then
@@ -394,18 +417,18 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
394
417
  if defaultValueByObjectDataEntryId ~= nil then
395
418
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
396
419
  if valueByLevel ~= nil then
397
- local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
- if ____valueByLevel_index_16 == nil then
399
- ____valueByLevel_index_16 = self.defaultValue
420
+ local ____valueByLevel_index_19 = valueByLevel[level + 1]
421
+ if ____valueByLevel_index_19 == nil then
422
+ ____valueByLevel_index_19 = self.defaultValue
400
423
  end
401
- return ____valueByLevel_index_16
424
+ return ____valueByLevel_index_19
402
425
  end
403
426
  end
404
427
  return self.defaultValue
405
428
  end
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]
429
+ local ____opt_22 = self.originalValueByLevelByInstance
430
+ local ____opt_20 = ____opt_22 and ____opt_22[entry]
431
+ local originalValue = ____opt_20 and ____opt_20[level]
409
432
  if originalValue ~= nil then
410
433
  return originalValue
411
434
  end
@@ -449,6 +472,7 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
449
472
  valueByLevel[level + 1] = value
450
473
  return true
451
474
  end
475
+ local previousOriginalValue
452
476
  local modifiersByInstance = self.modifiersByInstance
453
477
  if modifiersByInstance ~= nil then
454
478
  local modifiers = modifiersByInstance[entry]
@@ -458,11 +482,57 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
458
482
  originalValueByLevelByInstance = mutableWeakLuaMap()
459
483
  self.originalValueByLevelByInstance = originalValueByLevelByInstance
460
484
  end
461
- getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
485
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)
486
+ previousOriginalValue = originalValueByLevel[level]
487
+ if value == previousOriginalValue then
488
+ return true
489
+ end
490
+ originalValueByLevel[level] = value
462
491
  value = self:calculateActualValue(entry, level)
463
492
  end
464
493
  end
465
- return self:setActualValue(entry, level, value)
494
+ local previousValue = self:setActualValue(entry, level, value)
495
+ if previousValue == nil then
496
+ return false
497
+ end
498
+ if previousOriginalValue ~= nil or value ~= previousValue then
499
+ local ____self_invokeValueChangeEvent_26 = self.invokeValueChangeEvent
500
+ local ____entry_25 = entry
501
+ local ____previousOriginalValue_24 = previousOriginalValue
502
+ if ____previousOriginalValue_24 == nil then
503
+ ____previousOriginalValue_24 = previousValue
504
+ end
505
+ ____self_invokeValueChangeEvent_26(
506
+ self,
507
+ ____entry_25,
508
+ self,
509
+ level,
510
+ ____previousOriginalValue_24,
511
+ value
512
+ )
513
+ end
514
+ return true
515
+ end
516
+ function ObjectLevelField.prototype.updateActualValue(self, instance, level)
517
+ local modifiersByInstance = self.modifiersByInstance
518
+ if modifiersByInstance == nil then
519
+ return
520
+ end
521
+ local modifiers = modifiersByInstance[instance]
522
+ if modifiers == nil or modifiers.size == 0 then
523
+ return
524
+ end
525
+ if level == nil then
526
+ for i = 0, self:getLevelCount(instance) - 1 do
527
+ self:updateActualValue(instance, i)
528
+ end
529
+ return
530
+ end
531
+ self:setActualValue(
532
+ instance,
533
+ level,
534
+ self:calculateActualValue(instance, level)
535
+ )
466
536
  end
467
537
  function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
468
538
  local modifiersByInstance = self.modifiersByInstance
@@ -479,11 +549,11 @@ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
479
549
  local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
480
550
  local levelCount = self:getLevelCount(instance)
481
551
  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)
552
+ local ____originalValueByLevel_level_27 = originalValueByLevel[level]
553
+ if ____originalValueByLevel_level_27 == nil then
554
+ ____originalValueByLevel_level_27 = self:getActualValue(instance, level)
485
555
  end
486
- originalValueByLevel[level] = ____originalValueByLevel_level_21
556
+ originalValueByLevel[level] = ____originalValueByLevel_level_27
487
557
  self:setActualValue(
488
558
  instance,
489
559
  level,
@@ -530,23 +600,23 @@ function ObjectLevelField.prototype.getActualValue(self, instance, level)
530
600
  if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
531
601
  local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
532
602
  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]
603
+ local ____opt_28 = self.valueByInstance[instance]
604
+ local ____temp_30 = ____opt_28 and ____opt_28[level + 1]
605
+ if ____temp_30 == nil then
606
+ ____temp_30 = (defaultValueByLevel or emptyArray())[level + 1]
537
607
  end
538
- local ____temp_24_25 = ____temp_24
539
- if ____temp_24_25 == nil then
540
- ____temp_24_25 = self.defaultValue
608
+ local ____temp_30_31 = ____temp_30
609
+ if ____temp_30_31 == nil then
610
+ ____temp_30_31 = self.defaultValue
541
611
  end
542
- return ____temp_24_25
612
+ return ____temp_30_31
543
613
  end
544
614
  end
545
- local ____temp_26 = self:getNativeFieldValue(instance, level)
546
- if ____temp_26 == nil then
547
- ____temp_26 = self.defaultValue
615
+ local ____temp_32 = self:getNativeFieldValue(instance, level)
616
+ if ____temp_32 == nil then
617
+ ____temp_32 = self.defaultValue
548
618
  end
549
- return ____temp_26
619
+ return ____temp_32
550
620
  end
551
621
  function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
552
622
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
@@ -559,48 +629,34 @@ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
559
629
  valueByLevel = {}
560
630
  self.valueByInstance[instance] = valueByLevel
561
631
  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]
632
+ local ____valueByLevel_index_33 = valueByLevel[level + 1]
633
+ if ____valueByLevel_index_33 == nil then
634
+ ____valueByLevel_index_33 = (defaultValueByLevel or emptyArray())[level + 1]
565
635
  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
636
+ local ____valueByLevel_index_33_34 = ____valueByLevel_index_33
637
+ if ____valueByLevel_index_33_34 == nil then
638
+ ____valueByLevel_index_33_34 = self.defaultValue
569
639
  end
570
- local previousValue = ____valueByLevel_index_27_28
640
+ local previousValue = ____valueByLevel_index_33_34
571
641
  valueByLevel[level + 1] = value
572
- self:invokeValueChangeEvent(
573
- instance,
574
- self,
575
- level,
576
- previousValue,
577
- value
578
- )
579
- return true
642
+ return previousValue
580
643
  end
581
644
  end
582
645
  if not self:hasNativeFieldValue(objectDataEntryId) then
583
- return false
646
+ return nil
584
647
  end
585
648
  local previousValue = self:getNativeFieldValue(instance, level)
586
649
  if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
587
- return false
650
+ return nil
588
651
  end
589
- self:invokeValueChangeEvent(
590
- instance,
591
- self,
592
- level,
593
- previousValue,
594
- value
595
- )
596
- return true
652
+ return previousValue
597
653
  end
598
654
  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]
655
+ local ____opt_37 = self.originalValueByLevelByInstance
656
+ local ____opt_35 = ____opt_37 and ____opt_37[instance]
657
+ local originalValue = ____opt_35 and ____opt_35[level]
658
+ local ____opt_39 = self.modifiersByInstance
659
+ local modifiers = ____opt_39 and ____opt_39[instance]
604
660
  if originalValue ~= nil then
605
661
  local value = originalValue
606
662
  if modifiers ~= nil then