warscript 0.0.1-dev.eda504c → 0.0.1-dev.edf7fad

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 (104) hide show
  1. package/core/types/frame.lua +47 -1
  2. package/core/types/player.d.ts +16 -0
  3. package/core/types/player.lua +57 -14
  4. package/core/types/sound.lua +1 -1
  5. package/core/types/tileCell.d.ts +2 -1
  6. package/core/types/tileCell.lua +5 -0
  7. package/destroyable.d.ts +1 -0
  8. package/destroyable.lua +9 -0
  9. package/engine/behavior.d.ts +10 -2
  10. package/engine/behavior.lua +157 -76
  11. package/engine/behaviour/ability/apply-buff.lua +4 -4
  12. package/engine/behaviour/ability/damage.d.ts +3 -0
  13. package/engine/behaviour/ability/damage.lua +8 -2
  14. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  15. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  16. package/engine/behaviour/ability.d.ts +11 -6
  17. package/engine/behaviour/ability.lua +31 -1
  18. package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
  19. package/engine/behaviour/unit/stun-immunity.lua +6 -5
  20. package/engine/behaviour/unit.d.ts +7 -3
  21. package/engine/behaviour/unit.lua +101 -24
  22. package/engine/buff.d.ts +65 -18
  23. package/engine/buff.lua +356 -152
  24. package/engine/internal/mechanics/cast-ability.lua +6 -3
  25. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  26. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  27. package/engine/internal/object-data/health-bonus.lua +16 -0
  28. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  29. package/engine/internal/object-data/mana-bonus.lua +16 -0
  30. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  31. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  32. package/engine/internal/unit/attributes.d.ts +17 -0
  33. package/engine/internal/unit/attributes.lua +46 -0
  34. package/engine/internal/unit/bonus.d.ts +6 -0
  35. package/engine/internal/unit/bonus.lua +33 -3
  36. package/engine/internal/unit/fly-height.d.ts +7 -0
  37. package/engine/internal/unit/fly-height.lua +20 -0
  38. package/engine/internal/unit/interrupts.d.ts +12 -0
  39. package/engine/internal/unit/interrupts.lua +28 -0
  40. package/engine/internal/unit/main-selected.lua +12 -27
  41. package/engine/internal/unit/range-event.d.ts +12 -0
  42. package/engine/internal/unit/range-event.lua +90 -0
  43. package/engine/internal/unit/scale.d.ts +7 -0
  44. package/engine/internal/unit/scale.lua +20 -0
  45. package/engine/internal/unit+bonus.lua +3 -3
  46. package/engine/internal/unit-missile-launch.lua +16 -6
  47. package/engine/internal/unit.d.ts +13 -19
  48. package/engine/internal/unit.lua +140 -173
  49. package/engine/local-client.d.ts +7 -0
  50. package/engine/local-client.lua +79 -1
  51. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  52. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  53. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  54. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  55. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  56. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  57. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  58. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  59. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  60. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  61. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  62. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  63. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  64. package/engine/object-data/entry/ability-type.d.ts +2 -0
  65. package/engine/object-data/entry/ability-type.lua +84 -4
  66. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  67. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  68. package/engine/object-data/entry/destructible-type.lua +155 -0
  69. package/engine/object-data/entry/unit-type.d.ts +4 -0
  70. package/engine/object-data/entry/unit-type.lua +76 -32
  71. package/engine/object-field/ability.lua +2 -2
  72. package/engine/object-field/unit.d.ts +20 -5
  73. package/engine/object-field/unit.lua +61 -0
  74. package/engine/object-field.d.ts +10 -2
  75. package/engine/object-field.lua +268 -123
  76. package/engine/random.d.ts +1 -0
  77. package/engine/random.lua +8 -0
  78. package/engine/standard/fields/ability.d.ts +2 -2
  79. package/engine/standard/fields/ability.lua +2 -2
  80. package/engine/standard/fields/unit.d.ts +11 -3
  81. package/engine/standard/fields/unit.lua +15 -2
  82. package/engine/synchronization.d.ts +11 -0
  83. package/engine/synchronization.lua +77 -0
  84. package/engine/text-tag.lua +2 -1
  85. package/engine/unit.d.ts +5 -0
  86. package/engine/unit.lua +5 -0
  87. package/lualib_bundle.lua +1 -1
  88. package/math.d.ts +2 -0
  89. package/math.lua +14 -0
  90. package/net/socket.lua +1 -1
  91. package/objutil/buff.lua +9 -7
  92. package/objutil/object.lua +1 -1
  93. package/operation.lua +1 -4
  94. package/package.json +5 -5
  95. package/patch-lua.lua +15 -0
  96. package/utility/linked-map.d.ts +34 -0
  97. package/utility/linked-map.lua +101 -0
  98. package/utility/linked-set.d.ts +3 -1
  99. package/utility/linked-set.lua +38 -0
  100. package/utility/records.lua +20 -1
  101. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  102. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  103. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  104. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -109,12 +109,13 @@ declare const enum UnitPropertyKey {
109
109
  SYNC_ID = 100,
110
110
  IS_PAUSED = 101,
111
111
  STUN_COUNTER = 102,
112
- DELAY_HEALTH_CHECKS_COUNTER = 103,
113
- DELAY_HEALTH_CHECKS_HEALTH_BONUS = 104,
114
- PREVENT_DEATH_HEALTH_BONUS = 105,
115
- IS_TEAM_GLOW_HIDDEN = 106,
116
- LAST_X = 107,
117
- LAST_Y = 108
112
+ FORCE_STUN_COUNTER = 103,
113
+ DELAY_HEALTH_CHECKS_COUNTER = 104,
114
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 105,
115
+ PREVENT_DEATH_HEALTH_BONUS = 106,
116
+ IS_TEAM_GLOW_HIDDEN = 107,
117
+ LAST_X = 108,
118
+ LAST_Y = 109
118
119
  }
119
120
  export type UnitSyncId = number & {
120
121
  readonly __unitSyncId: unique symbol;
@@ -123,6 +124,7 @@ export declare class Unit extends Handle<junit> {
123
124
  readonly syncId: UnitSyncId;
124
125
  private [UnitPropertyKey.IS_PAUSED]?;
125
126
  private [UnitPropertyKey.STUN_COUNTER]?;
127
+ private [UnitPropertyKey.FORCE_STUN_COUNTER]?;
126
128
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
127
129
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
128
130
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
@@ -137,6 +139,7 @@ export declare class Unit extends Handle<junit> {
137
139
  private _fields?;
138
140
  private getEvent;
139
141
  constructor(handle: junit);
142
+ private saveData;
140
143
  protected onDestroy(): HandleDestructor;
141
144
  addAttackHandler(condition: AttackHandlerCondition, action: AttackHandlerAction): AttackHandler;
142
145
  removeAttackHandler(handler: AttackHandler): boolean;
@@ -175,16 +178,10 @@ export declare class Unit extends Handle<junit> {
175
178
  set xp(v: number);
176
179
  get primaryAttribute(): UnitAttribute;
177
180
  set primaryAttribute(primaryAttribute: UnitAttribute);
178
- get strengthBase(): number;
179
- set strengthBase(strengthBase: number);
180
181
  get strengthBonus(): number;
181
182
  get strength(): number;
182
- get agilityBase(): number;
183
- set agilityBase(agilityBase: number);
184
183
  get agilityBonus(): number;
185
184
  get agility(): number;
186
- get intelligenceBase(): number;
187
- set intelligenceBase(intelligenceBase: number);
188
185
  get intelligenceBonus(): number;
189
186
  get intelligence(): number;
190
187
  get name(): string;
@@ -218,8 +215,6 @@ export declare class Unit extends Handle<junit> {
218
215
  set facing(v: number);
219
216
  get speed(): number;
220
217
  set speed(v: number);
221
- get flyHeight(): number;
222
- set flyHeight(v: number);
223
218
  get x(): number;
224
219
  set x(v: number);
225
220
  get y(): number;
@@ -243,8 +238,6 @@ export declare class Unit extends Handle<junit> {
243
238
  get isInvulnerable(): boolean;
244
239
  get vertexColor(): Color;
245
240
  set vertexColor(v: Color);
246
- get scale(): number;
247
- set scale(v: number);
248
241
  get timeScale(): number;
249
242
  set timeScale(v: number);
250
243
  get collisionSize(): number;
@@ -279,8 +272,6 @@ export declare class Unit extends Handle<junit> {
279
272
  getAbilityRemainingCooldown(abilityId: number): number;
280
273
  startAbilityCooldown(abilityId: number, cooldown: number): void;
281
274
  endAbilityCooldown(abilityId: number): void;
282
- interruptMovement(): void;
283
- interruptAttack(): void;
284
275
  interruptCast(abilityId: number): void;
285
276
  getDistanceTo(target: Unit | Vec2): number;
286
277
  getCollisionDistanceTo(...target: [Unit] | [targetX: number, targetY: number]): number;
@@ -294,12 +285,13 @@ export declare class Unit extends Handle<junit> {
294
285
  unpauseEx(): void;
295
286
  incrementStunCounter(): void;
296
287
  decrementStunCounter(): void;
288
+ incrementForceStunCounter(): void;
289
+ decrementForceStunCounter(): void;
297
290
  set waygateActive(v: boolean);
298
291
  get waygateActive(): boolean;
299
292
  set waygateDestination(v: Vec2);
300
293
  get waygateDestination(): Vec2;
301
294
  get abilities(): ReadonlyArray<UnitAbility>;
302
- get onUnitInRange(): Record<number, Event<[Unit]>>;
303
295
  get onManaEqual(): Record<number, Event<[Unit, number]>>;
304
296
  get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
305
297
  get targetAcquiredEvent(): Event;
@@ -318,6 +310,7 @@ export declare class Unit extends Handle<junit> {
318
310
  static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
319
311
  static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
320
312
  static getSelectionOf(player: Player, target?: Unit[]): Unit[];
313
+ static readonly levelChangedEvent: UnitTriggerEvent<[]>;
321
314
  static readonly deathEvent: UnitTriggerEvent<[Unit]>;
322
315
  static readonly onDecay: UnitTriggerEvent<[]>;
323
316
  static readonly onResurrect: InitializingEvent<[Unit], void>;
@@ -375,5 +368,6 @@ export declare class Unit extends Handle<junit> {
375
368
  setField(field: junitstringfield, value: string): boolean;
376
369
  toString(): string;
377
370
  static getBySyncId(syncId: UnitSyncId): Unit | undefined;
371
+ static synchronize: (player: Player, object: Unit | undefined) => Promise<Unit | undefined>;
378
372
  }
379
373
  export {};
@@ -62,6 +62,10 @@ local ____attributes = require("attributes")
62
62
  local isAttribute = ____attributes.isAttribute
63
63
  local ____ability = require("engine.internal.item.ability")
64
64
  local doUnitAbilityAction = ____ability.doUnitAbilityAction
65
+ local ____synchronization = require("engine.synchronization")
66
+ local synchronizer = ____synchronization.synchronizer
67
+ local ____linked_2Dmap = require("utility.linked-map")
68
+ local LinkedMap = ____linked_2Dmap.LinkedMap
65
69
  local match = string.match
66
70
  local ____tostring = _G.tostring
67
71
  local setUnitAnimation = SetUnitAnimation
@@ -71,16 +75,12 @@ local getUnitRealField = BlzGetUnitRealField
71
75
  local getHeroStr = GetHeroStr
72
76
  local getHeroAgi = GetHeroAgi
73
77
  local getHeroInt = GetHeroInt
74
- local setHeroStr = SetHeroStr
75
- local setHeroAgi = SetHeroAgi
76
- local setHeroInt = SetHeroInt
77
78
  local getUnitBooleanField = BlzGetUnitBooleanField
78
79
  local getUnitStringField = BlzGetUnitStringField
79
80
  local setUnitIntegerField = BlzSetUnitIntegerField
80
81
  local setUnitRealField = BlzSetUnitRealField
81
82
  local setUnitBooleanField = BlzSetUnitBooleanField
82
83
  local setUnitStringField = BlzSetUnitStringField
83
- local setUnitScale = SetUnitScale
84
84
  local setUnitPosition = SetUnitPosition
85
85
  local setUnitTimeScale = SetUnitTimeScale
86
86
  local getHandleId = GetHandleId
@@ -108,7 +108,6 @@ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
108
108
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
109
109
  local getUnitAbilityLevel = GetUnitAbilityLevel
110
110
  local unitDisableAbility = BlzUnitDisableAbility
111
- local unitInterruptAttack = BlzUnitInterruptAttack
112
111
  local isUnitInvisible = IsUnitInvisible
113
112
  local isUnitVisible = IsUnitVisible
114
113
  local getUnitX = GetUnitX
@@ -384,15 +383,27 @@ local modifiers = {
384
383
  end,
385
384
  armor = function(unit, value)
386
385
  if UnitAddAbility(unit, armorBonusAbilityId) then
387
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
386
+ assert(
387
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
388
+ "armor bonus ability must be made permanent",
389
+ unit
390
+ )
388
391
  end
389
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
390
- assert(BlzSetAbilityRealLevelField(
391
- ability,
392
- armorBonusField,
393
- 0,
394
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
395
- ))
392
+ local ability = assert(
393
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
394
+ "armor bonus ability must be existing",
395
+ unit
396
+ )
397
+ assert(
398
+ BlzSetAbilityRealLevelField(
399
+ ability,
400
+ armorBonusField,
401
+ 0,
402
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
403
+ ),
404
+ "armor bonus ability field must be set",
405
+ unit
406
+ )
396
407
  end
397
408
  }
398
409
  local getters = {
@@ -646,26 +657,30 @@ local fieldSetters = {
646
657
  }
647
658
  local dummies = {}
648
659
  for ____, player in ipairs(Player.all) do
649
- local dummy = assert(createUnit(
650
- player.handle,
651
- dummyUnitId,
652
- 0,
653
- 0,
654
- 270
655
- ))
660
+ local dummy = assert(
661
+ createUnit(
662
+ player.handle,
663
+ dummyUnitId,
664
+ 0,
665
+ 0,
666
+ 270
667
+ ),
668
+ "dummy must be created",
669
+ player
670
+ )
656
671
  ShowUnit(dummy, false)
657
672
  dummies[player] = dummy
658
673
  end
659
674
  local function delayHealthChecksCallback(unit)
660
- local counter = (unit[103] or 0) - 1
675
+ local counter = (unit[104] or 0) - 1
661
676
  if counter ~= 0 then
662
- unit[103] = counter
677
+ unit[104] = counter
663
678
  return
664
679
  end
665
- unit[103] = nil
666
- local healthBonus = unit[104]
680
+ unit[104] = nil
681
+ local healthBonus = unit[105]
667
682
  if healthBonus ~= nil then
668
- unit[104] = nil
683
+ unit[105] = nil
669
684
  local handle = unit.handle
670
685
  BlzSetUnitMaxHP(
671
686
  handle,
@@ -695,41 +710,57 @@ function Unit.prototype.____constructor(self, handle)
695
710
  nextSyncId = ____nextSyncId_1 + 1
696
711
  self.syncId = ____nextSyncId_1
697
712
  self._owner = Player:of(getOwningPlayer(handle))
698
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
699
- assert(unitAddAbility(handle, morphDetectAbilityId))
713
+ assert(
714
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
715
+ "leave detection ability must be added",
716
+ self
717
+ )
718
+ assert(
719
+ unitAddAbility(handle, morphDetectAbilityId),
720
+ "morph detection ability must be added",
721
+ self
722
+ )
700
723
  if unitAddAbility(
701
724
  handle,
702
725
  fourCC("Amrf")
703
726
  ) then
704
- assert(unitRemoveAbility(
705
- handle,
706
- fourCC("Amrf")
707
- ))
727
+ assert(
728
+ unitRemoveAbility(
729
+ handle,
730
+ fourCC("Amrf")
731
+ ),
732
+ "fly ability must be removed after addition",
733
+ self
734
+ )
708
735
  end
709
736
  unitBySyncId[self.syncId] = self
710
737
  local ____ = self.abilities
711
738
  end
712
- function Unit.prototype.getEvent(self, event, collector)
713
- self.events = self.events or ({})
714
- local eventId = GetHandleId(event)
715
- if not self.events[eventId] then
716
- self.events[eventId] = __TS__New(
739
+ function Unit.prototype.getEvent(self, jevent, collector)
740
+ self.events = self.events or __TS__New(LinkedMap)
741
+ local eventId = GetHandleId(jevent)
742
+ local event = self.events:get(eventId)
743
+ if event == nil then
744
+ event = __TS__New(
717
745
  TriggerEvent,
718
746
  function(trigger)
719
- TriggerRegisterUnitEvent(trigger, self.handle, event)
747
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
720
748
  end,
721
749
  collector or (function() return {} end)
722
750
  )
751
+ self.events:put(eventId, event)
723
752
  end
724
- return self.events[eventId]
753
+ return event
754
+ end
755
+ function Unit.prototype.saveData(self)
756
+ local handle = self.handle
757
+ self[108] = self[108] or getUnitX(handle)
758
+ self[109] = self[109] or getUnitY(handle)
759
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
725
760
  end
726
761
  function Unit.prototype.onDestroy(self)
727
762
  local handle = self.handle
728
- self[107] = getUnitX(handle)
729
- self[108] = getUnitY(handle)
730
- if not self._owner then
731
- self._owner = Player:of(getOwningPlayer(handle))
732
- end
763
+ self:saveData()
733
764
  local abilities = self.abilities
734
765
  for ____, ability in ipairs(abilities) do
735
766
  ability:destroy()
@@ -765,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
765
796
  self._attackHandlers = handlers
766
797
  if #handlers == 1 then
767
798
  local handle = self.handle
768
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
799
+ assert(
800
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
801
+ "attack handler ability must be added",
802
+ self
803
+ )
769
804
  end
770
805
  return handler
771
806
  end
@@ -860,7 +895,7 @@ function Unit.prototype.chooseWeapon(self, target)
860
895
  return nil
861
896
  end
862
897
  function Unit.prototype.delayHealthChecks(self)
863
- self[103] = (self[103] or 0) + 1
898
+ self[104] = (self[104] or 0) + 1
864
899
  Timer:run(delayHealthChecksCallback, self)
865
900
  end
866
901
  function Unit.prototype.setPosition(self, x, y)
@@ -978,24 +1013,6 @@ end
978
1013
  function Unit.prototype.endAbilityCooldown(self, abilityId)
979
1014
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
980
1015
  end
981
- function Unit.prototype.interruptMovement(self)
982
- local handle = self.handle
983
- unitDisableAbility(
984
- handle,
985
- fourCC("Amov"),
986
- true,
987
- false
988
- )
989
- unitDisableAbility(
990
- handle,
991
- fourCC("Amov"),
992
- false,
993
- false
994
- )
995
- end
996
- function Unit.prototype.interruptAttack(self)
997
- unitInterruptAttack(self.handle)
998
- end
999
1016
  function Unit.prototype.interruptCast(self, abilityId)
1000
1017
  local handle = self.handle
1001
1018
  unitDisableAbility(handle, abilityId, true, false)
@@ -1066,18 +1083,44 @@ function Unit.prototype.unpauseEx(self)
1066
1083
  end
1067
1084
  function Unit.prototype.incrementStunCounter(self)
1068
1085
  local stunCounter = self[102] or 0
1069
- if not self[101] or stunCounter >= 0 then
1086
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1070
1087
  BlzPauseUnitEx(self.handle, true)
1071
1088
  end
1072
1089
  self[102] = stunCounter + 1
1073
1090
  end
1074
1091
  function Unit.prototype.decrementStunCounter(self)
1075
1092
  local stunCounter = self[102] or 0
1076
- if not self[101] or stunCounter >= 1 then
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1077
1094
  BlzPauseUnitEx(self.handle, false)
1078
1095
  end
1079
1096
  self[102] = stunCounter - 1
1080
1097
  end
1098
+ function Unit.prototype.incrementForceStunCounter(self)
1099
+ local forceStunCounter = self[103] or 0
1100
+ if forceStunCounter == 0 then
1101
+ local handle = self.handle
1102
+ if not self[101] then
1103
+ for _ = self[102] or 0, -1 do
1104
+ BlzPauseUnitEx(handle, true)
1105
+ end
1106
+ end
1107
+ BlzPauseUnitEx(handle, true)
1108
+ end
1109
+ self[103] = forceStunCounter + 1
1110
+ end
1111
+ function Unit.prototype.decrementForceStunCounter(self)
1112
+ local forceStunCounter = self[103] or 0
1113
+ if forceStunCounter == 1 then
1114
+ local handle = self.handle
1115
+ if not self[101] then
1116
+ for _ = self[102] or 0, -1 do
1117
+ BlzPauseUnitEx(handle, false)
1118
+ end
1119
+ end
1120
+ BlzPauseUnitEx(handle, false)
1121
+ end
1122
+ self[103] = forceStunCounter - 1
1123
+ end
1081
1124
  function Unit.create(self, owner, id, x, y, facing, skinId)
1082
1125
  local handle = skinId and BlzCreateUnitWithSkin(
1083
1126
  owner.handle,
@@ -1364,19 +1407,6 @@ __TS__SetDescriptor(
1364
1407
  },
1365
1408
  true
1366
1409
  )
1367
- __TS__SetDescriptor(
1368
- Unit.prototype,
1369
- "strengthBase",
1370
- {
1371
- get = function(self)
1372
- return getHeroStr(self.handle, false)
1373
- end,
1374
- set = function(self, strengthBase)
1375
- setHeroStr(self.handle, strengthBase, true)
1376
- end
1377
- },
1378
- true
1379
- )
1380
1410
  __TS__SetDescriptor(
1381
1411
  Unit.prototype,
1382
1412
  "strengthBonus",
@@ -1394,19 +1424,6 @@ __TS__SetDescriptor(
1394
1424
  end},
1395
1425
  true
1396
1426
  )
1397
- __TS__SetDescriptor(
1398
- Unit.prototype,
1399
- "agilityBase",
1400
- {
1401
- get = function(self)
1402
- return getHeroAgi(self.handle, false)
1403
- end,
1404
- set = function(self, agilityBase)
1405
- setHeroAgi(self.handle, agilityBase, true)
1406
- end
1407
- },
1408
- true
1409
- )
1410
1427
  __TS__SetDescriptor(
1411
1428
  Unit.prototype,
1412
1429
  "agilityBonus",
@@ -1424,19 +1441,6 @@ __TS__SetDescriptor(
1424
1441
  end},
1425
1442
  true
1426
1443
  )
1427
- __TS__SetDescriptor(
1428
- Unit.prototype,
1429
- "intelligenceBase",
1430
- {
1431
- get = function(self)
1432
- return getHeroInt(self.handle, false)
1433
- end,
1434
- set = function(self, intelligenceBase)
1435
- setHeroInt(self.handle, intelligenceBase, true)
1436
- end
1437
- },
1438
- true
1439
- )
1440
1444
  __TS__SetDescriptor(
1441
1445
  Unit.prototype,
1442
1446
  "intelligenceBonus",
@@ -1485,7 +1489,7 @@ __TS__SetDescriptor(
1485
1489
  "isTeamGlowVisible",
1486
1490
  {
1487
1491
  get = function(self)
1488
- return not self[106]
1492
+ return not self[107]
1489
1493
  end,
1490
1494
  set = function(self, isTeamGlowVisible)
1491
1495
  BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
@@ -1495,7 +1499,7 @@ __TS__SetDescriptor(
1495
1499
  else
1496
1500
  ____temp_7 = nil
1497
1501
  end
1498
- self[106] = ____temp_7
1502
+ self[107] = ____temp_7
1499
1503
  end
1500
1504
  },
1501
1505
  true
@@ -1505,7 +1509,7 @@ __TS__SetDescriptor(
1505
1509
  "color",
1506
1510
  {set = function(self, color)
1507
1511
  SetUnitColor(self.handle, color.handle)
1508
- if self[106] then
1512
+ if self[107] then
1509
1513
  BlzShowUnitTeamGlow(self.handle, false)
1510
1514
  end
1511
1515
  end},
@@ -1529,14 +1533,14 @@ __TS__SetDescriptor(
1529
1533
  "maxHealth",
1530
1534
  {
1531
1535
  get = function(self)
1532
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1536
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1533
1537
  end,
1534
1538
  set = function(self, maxHealth)
1535
- if maxHealth < 1 and self[103] ~= nil then
1536
- self[104] = (self[104] or 0) + (1 - maxHealth)
1539
+ if maxHealth < 1 and self[104] ~= nil then
1540
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1537
1541
  maxHealth = 1
1538
1542
  end
1539
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1543
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1540
1544
  end
1541
1545
  },
1542
1546
  true
@@ -1578,10 +1582,10 @@ __TS__SetDescriptor(
1578
1582
  "health",
1579
1583
  {
1580
1584
  get = function(self)
1581
- return GetWidgetLife(self.handle) - (self[105] or 0)
1585
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1582
1586
  end,
1583
1587
  set = function(self, health)
1584
- SetWidgetLife(self.handle, health + (self[105] or 0))
1588
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1585
1589
  end
1586
1590
  },
1587
1591
  true
@@ -1657,25 +1661,12 @@ __TS__SetDescriptor(
1657
1661
  },
1658
1662
  true
1659
1663
  )
1660
- __TS__SetDescriptor(
1661
- Unit.prototype,
1662
- "flyHeight",
1663
- {
1664
- get = function(self)
1665
- return getUnitFlyHeight(self.handle)
1666
- end,
1667
- set = function(self, v)
1668
- SetUnitFlyHeight(self.handle, v, 100000)
1669
- end
1670
- },
1671
- true
1672
- )
1673
1664
  __TS__SetDescriptor(
1674
1665
  Unit.prototype,
1675
1666
  "x",
1676
1667
  {
1677
1668
  get = function(self)
1678
- return self[107] or getUnitX(self.handle)
1669
+ return self[108] or getUnitX(self.handle)
1679
1670
  end,
1680
1671
  set = function(self, v)
1681
1672
  SetUnitX(self.handle, v)
@@ -1688,7 +1679,7 @@ __TS__SetDescriptor(
1688
1679
  "y",
1689
1680
  {
1690
1681
  get = function(self)
1691
- return self[108] or getUnitY(self.handle)
1682
+ return self[109] or getUnitY(self.handle)
1692
1683
  end,
1693
1684
  set = function(self, v)
1694
1685
  SetUnitY(self.handle, v)
@@ -1793,14 +1784,18 @@ __TS__SetDescriptor(
1793
1784
  local handle = self.handle
1794
1785
  if isPaused and not IsUnitPaused(handle) then
1795
1786
  self[101] = true
1796
- for _ = self[102] or 0, -1 do
1797
- BlzPauseUnitEx(handle, true)
1787
+ if (self[103] or 0) <= 0 then
1788
+ for _ = self[102] or 0, -1 do
1789
+ BlzPauseUnitEx(handle, true)
1790
+ end
1798
1791
  end
1799
1792
  PauseUnit(handle, true)
1800
1793
  elseif not isPaused and IsUnitPaused(handle) then
1801
1794
  PauseUnit(handle, false)
1802
- for _ = self[102] or 0, -1 do
1803
- BlzPauseUnitEx(handle, false)
1795
+ if (self[103] or 0) <= 0 then
1796
+ for _ = self[102] or 0, -1 do
1797
+ BlzPauseUnitEx(handle, false)
1798
+ end
1804
1799
  end
1805
1800
  self[101] = nil
1806
1801
  end
@@ -1858,20 +1853,6 @@ __TS__SetDescriptor(
1858
1853
  },
1859
1854
  true
1860
1855
  )
1861
- __TS__SetDescriptor(
1862
- Unit.prototype,
1863
- "scale",
1864
- {
1865
- get = function(self)
1866
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1867
- end,
1868
- set = function(self, v)
1869
- setUnitScale(self.handle, v, v, v)
1870
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1871
- end
1872
- },
1873
- true
1874
- )
1875
1856
  __TS__SetDescriptor(
1876
1857
  Unit.prototype,
1877
1858
  "timeScale",
@@ -2008,30 +1989,6 @@ __TS__SetDescriptor(
2008
1989
  end},
2009
1990
  true
2010
1991
  )
2011
- __TS__SetDescriptor(
2012
- Unit.prototype,
2013
- "onUnitInRange",
2014
- {get = function(self)
2015
- local handle = self.handle
2016
- local onUnitInRange = setmetatable(
2017
- {},
2018
- {__index = function(self, value)
2019
- local event = __TS__New(
2020
- TriggerEvent,
2021
- function(trigger)
2022
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
2023
- end,
2024
- function() return ____exports.Unit:of(handle) end
2025
- )
2026
- rawset(self, value, event)
2027
- return event
2028
- end}
2029
- )
2030
- rawset(self, "onUnitInRange", onUnitInRange)
2031
- return onUnitInRange
2032
- end},
2033
- true
2034
- )
2035
1992
  __TS__SetDescriptor(
2036
1993
  Unit.prototype,
2037
1994
  "onManaEqual",
@@ -2167,6 +2124,11 @@ __TS__SetDescriptor(
2167
2124
  end},
2168
2125
  true
2169
2126
  )
2127
+ Unit.levelChangedEvent = __TS__New(
2128
+ ____exports.UnitTriggerEvent,
2129
+ EVENT_PLAYER_HERO_LEVEL,
2130
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2131
+ )
2170
2132
  Unit.deathEvent = __TS__New(
2171
2133
  ____exports.UnitTriggerEvent,
2172
2134
  EVENT_PLAYER_UNIT_DEATH,
@@ -2628,7 +2590,7 @@ Unit.onDamage = __TS__New(
2628
2590
  invoke(event, source, target, evData)
2629
2591
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2630
2592
  local bonusHealth = math.ceil(evData.amount)
2631
- target[105] = (target[105] or 0) + bonusHealth
2593
+ target[106] = (target[106] or 0) + bonusHealth
2632
2594
  BlzSetUnitMaxHP(
2633
2595
  target.handle,
2634
2596
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2642,7 +2604,7 @@ Unit.onDamage = __TS__New(
2642
2604
  evData[0],
2643
2605
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2644
2606
  )
2645
- target[105] = (target[105] or 0) - bonusHealth
2607
+ target[106] = (target[106] or 0) - bonusHealth
2646
2608
  SetWidgetLife(
2647
2609
  target.handle,
2648
2610
  GetWidgetLife(target.handle) - bonusHealth
@@ -2792,6 +2754,10 @@ __TS__ObjectDefineProperty(
2792
2754
  rawset(self, "destroyEvent", destroyEvent)
2793
2755
  return destroyEvent
2794
2756
  end}
2757
+ )
2758
+ Unit.synchronize = synchronizer(
2759
+ function(unit) return unit.syncId end,
2760
+ function(syncId) return unitBySyncId[syncId] end
2795
2761
  );
2796
2762
  (function(self)
2797
2763
  local leaveAbilityIds = postcompile(function()
@@ -2821,7 +2787,8 @@ __TS__ObjectDefineProperty(
2821
2787
  return
2822
2788
  end
2823
2789
  end
2824
- unit:destroy()
2790
+ unit:saveData()
2791
+ Timer:run(unit, "destroy")
2825
2792
  end)
2826
2793
  end
2827
2794
  end)(Unit)
@@ -3,6 +3,7 @@ import { Unit } from "../core/types/unit";
3
3
  import { Async } from "../core/types/async";
4
4
  import { Event, TriggerEvent } from "../event";
5
5
  import { GraphicsMode } from "./index";
6
+ import { Color } from "../core/types/color";
6
7
  export declare class LocalClient {
7
8
  private constructor();
8
9
  static readonly locale: string;
@@ -11,11 +12,17 @@ export declare class LocalClient {
11
12
  static get isHD(): boolean;
12
13
  static get graphicsMode(): GraphicsMode;
13
14
  static get isActive(): boolean;
15
+ static get isMinimized(): boolean;
16
+ static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
14
17
  static get mouseFocusUnit(): Async<Unit> | undefined;
15
18
  static get mainSelectedUnit(): Async<Unit> | undefined;
16
19
  static get mainSelectedUnitChangeEvent(): Event<[
17
20
  previousMainSelectedUnit: Unit | undefined,
18
21
  newMainSelectedUnit: Unit | undefined
19
22
  ]>;
23
+ static get isInTargetingMode(): boolean;
24
+ static readonly targetingModeEnterEvent: Event<[]>;
25
+ static readonly targetingModeLeaveEvent: Event<[]>;
26
+ static readonly targetingModeStateChangeEvent: Event<[]>;
20
27
  static readonly onDisconnect: TriggerEvent<[]>;
21
28
  }