warscript 0.0.1-dev.87b6c38 → 0.0.1-dev.8895ff6

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 (45) 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/unit/stun-immunity.d.ts +1 -1
  6. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  7. package/engine/behaviour/unit.lua +13 -3
  8. package/engine/buff.d.ts +7 -2
  9. package/engine/buff.lua +42 -24
  10. package/engine/internal/mechanics/cast-ability.lua +6 -3
  11. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  12. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  13. package/engine/internal/unit/attributes.d.ts +17 -0
  14. package/engine/internal/unit/attributes.lua +46 -0
  15. package/engine/internal/unit/bonus.d.ts +2 -0
  16. package/engine/internal/unit/bonus.lua +10 -0
  17. package/engine/internal/unit/fly-height.lua +3 -3
  18. package/engine/internal/unit/interrupts.d.ts +12 -0
  19. package/engine/internal/unit/interrupts.lua +28 -0
  20. package/engine/internal/unit/scale.lua +3 -3
  21. package/engine/internal/unit-missile-launch.lua +12 -5
  22. package/engine/internal/unit.d.ts +1 -8
  23. package/engine/internal/unit.lua +16 -69
  24. package/engine/local-client.d.ts +1 -1
  25. package/engine/local-client.lua +4 -4
  26. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  27. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  28. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  29. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  30. package/engine/object-data/entry/destructible-type.d.ts +12 -0
  31. package/engine/object-data/entry/destructible-type.lua +78 -0
  32. package/engine/object-field/unit.d.ts +7 -4
  33. package/engine/object-field/unit.lua +4 -0
  34. package/engine/object-field.d.ts +2 -0
  35. package/engine/object-field.lua +171 -115
  36. package/engine/standard/fields/unit.d.ts +11 -5
  37. package/engine/standard/fields/unit.lua +13 -4
  38. package/engine/unit.d.ts +2 -0
  39. package/engine/unit.lua +2 -0
  40. package/objutil/buff.lua +9 -7
  41. package/package.json +1 -1
  42. package/utility/linked-map.d.ts +26 -0
  43. package/utility/linked-map.lua +66 -0
  44. package/utility/linked-set.lua +4 -0
  45. package/utility/records.lua +20 -1
@@ -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
@@ -1,6 +1,12 @@
1
1
  /** @noSelfInFile */
2
- import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
- export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
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;
2
+ import { UnitClassificationsField, UnitFloatField, UnitFlyHeightField, UnitHealthRegenerationTypeField, UnitIntegerField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const CLASSIFICATIONS_UNIT_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FIELD: UnitScalingValueField & symbol;
7
+ export declare const HEALTH_REGENERATION_RATE_UNIT_FIELD: UnitFloatField & symbol;
8
+ export declare const MANA_REGENERATION_RATE_UNIT_FIELD: UnitFloatField & symbol;
9
+ export declare const HEALTH_REGENERATION_TYPE_UNIT_FIELD: UnitHealthRegenerationTypeField & symbol;
10
+ export declare const STRENGTH_UNIT_FIELD: UnitIntegerField<number> & symbol;
11
+ export declare const AGILITY_UNIT_FIELD: UnitIntegerField<number> & symbol;
12
+ export declare const INTELLIGENCE_UNIT_FIELD: UnitIntegerField<number> & symbol;
@@ -1,11 +1,20 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.object-field.unit")
3
3
  local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFloatField = ____unit.UnitFloatField
4
5
  local UnitFlyHeightField = ____unit.UnitFlyHeightField
6
+ local UnitHealthRegenerationTypeField = ____unit.UnitHealthRegenerationTypeField
7
+ local UnitIntegerField = ____unit.UnitIntegerField
5
8
  local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
9
  local UnitScalingValueField = ____unit.UnitScalingValueField
7
- ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
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"))
10
+ ____exports.PROPULSION_WINDOW_UNIT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
11
+ ____exports.CLASSIFICATIONS_UNIT_FIELD = UnitClassificationsField:create(fourCC("utyp"))
12
+ ____exports.FLY_HEIGHT_UNIT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
13
+ ____exports.SCALING_VALUE_UNIT_FIELD = UnitScalingValueField:create(fourCC("usca"))
14
+ ____exports.HEALTH_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("uhpr"))
15
+ ____exports.MANA_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("umpr"))
16
+ ____exports.HEALTH_REGENERATION_TYPE_UNIT_FIELD = UnitHealthRegenerationTypeField:create(fourCC("uhrt"))
17
+ ____exports.STRENGTH_UNIT_FIELD = UnitIntegerField:create(fourCC("ustc"))
18
+ ____exports.AGILITY_UNIT_FIELD = UnitIntegerField:create(fourCC("uagc"))
19
+ ____exports.INTELLIGENCE_UNIT_FIELD = UnitIntegerField:create(fourCC("uinc"))
11
20
  return ____exports
package/engine/unit.d.ts CHANGED
@@ -19,8 +19,10 @@ import "./internal/unit/invulnerability-counter";
19
19
  import "./internal/unit/detach-missiles";
20
20
  import "./internal/unit/main-selected";
21
21
  import "./internal/unit/add-item-to-slot-init";
22
+ import "./internal/unit/attributes";
22
23
  import "./internal/unit/fly-height";
23
24
  import "./internal/unit/scale";
25
+ import "./internal/unit/interrupts";
24
26
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
25
27
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
26
28
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -19,8 +19,10 @@ require("engine.internal.unit.invulnerability-counter")
19
19
  require("engine.internal.unit.detach-missiles")
20
20
  require("engine.internal.unit.main-selected")
21
21
  require("engine.internal.unit.add-item-to-slot-init")
22
+ require("engine.internal.unit.attributes")
22
23
  require("engine.internal.unit.fly-height")
23
24
  require("engine.internal.unit.scale")
25
+ require("engine.internal.unit.interrupts")
24
26
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
25
27
  do
26
28
  local ____unit = require("engine.internal.unit")
package/objutil/buff.lua CHANGED
@@ -29,6 +29,8 @@ local ____timer = require("core.types.timer")
29
29
  local Timer = ____timer.Timer
30
30
  local ____exception = require("exception")
31
31
  local IllegalStateException = ____exception.IllegalStateException
32
+ local ____linked_2Dmap = require("utility.linked-map")
33
+ local LinkedMap = ____linked_2Dmap.LinkedMap
32
34
  local ____assert = _G.assert
33
35
  local ____pairs = _G.pairs
34
36
  ____exports.BuffDefinition = __TS__Class()
@@ -461,7 +463,7 @@ local buffs = setmetatable(
461
463
  {
462
464
  __mode = "k",
463
465
  __index = function(self, unit)
464
- local ____table = {}
466
+ local ____table = __TS__New(LinkedMap)
465
467
  self[unit] = ____table
466
468
  return ____table
467
469
  end
@@ -494,7 +496,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
494
496
  end
495
497
  local constructor = self.constructor
496
498
  local instances = buffs[unit]
497
- local instance = instances[constructor]
499
+ local instance = instances:get(constructor)
498
500
  if instance then
499
501
  instance:destroy()
500
502
  if not instance.destroyed then
@@ -507,7 +509,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
507
509
  )
508
510
  end
509
511
  end
510
- instances[constructor] = self
512
+ instances:put(constructor, self)
511
513
  if preset then
512
514
  local unitHandle = unit.handle
513
515
  local slowPoisonMethod = not preset.positive and not preset.magic
@@ -586,13 +588,13 @@ function Buff.apply(self, ...)
586
588
  end
587
589
  end
588
590
  function Buff.getInstance(self, unit)
589
- return buffs[unit][self]
591
+ return buffs[unit]:get(self)
590
592
  end
591
593
  function Buff.isApplied(self, unit)
592
- return buffs[unit][self] ~= nil
594
+ return buffs[unit]:get(self) ~= nil
593
595
  end
594
596
  function Buff.ifApplied(self, unit, action)
595
- local instance = buffs[unit][self]
597
+ local instance = buffs[unit]:get(self)
596
598
  if instance then
597
599
  ____assert(__TS__InstanceOf(instance, self))
598
600
  action(instance)
@@ -615,7 +617,7 @@ function Buff.prototype.destroy(self)
615
617
  if self.preset then
616
618
  self.unit:removeAbility(self.preset.buffId)
617
619
  end
618
- buffs[self.unit][self.constructor] = nil
620
+ buffs[self.unit]:remove(self.constructor)
619
621
  self.destroyed = true
620
622
  end
621
623
  function Buff.prototype.onDispel(self, source)
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.87b6c38",
4
+ "version": "0.0.1-dev.8895ff6",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -0,0 +1,26 @@
1
+ /** @noSelfInFile */
2
+ import { ReadonlyLinkedSet } from "./linked-set";
3
+ type IteratorState<K extends AnyNotNil, V> = {
4
+ n?: K;
5
+ t: LuaMap<K, K>;
6
+ v: LuaMap<K, V>;
7
+ };
8
+ type OneSidedTypeGuard = {
9
+ readonly __oneSidedTypeGuard: unique symbol;
10
+ };
11
+ export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
12
+ readonly __linkedSet: unique symbol;
13
+ }
14
+ export declare class LinkedMap<K extends AnyNotNil, V> {
15
+ private k;
16
+ private v;
17
+ get keys(): ReadonlyLinkedSet<K>;
18
+ get(key: K): V | undefined;
19
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
20
+ put(key: K, value: V): void;
21
+ remove(key: K): boolean;
22
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
23
+ get size(): number;
24
+ protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
25
+ }
26
+ export {};