warscript 0.0.1-dev.7a744ff → 0.0.1-dev.7aaa070

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 (90) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/core/types/effect.d.ts +13 -3
  4. package/core/types/effect.lua +116 -17
  5. package/core/types/frame.d.ts +8 -0
  6. package/core/types/frame.lua +93 -1
  7. package/core/util.d.ts +1 -1
  8. package/core/util.lua +12 -0
  9. package/engine/behavior.d.ts +6 -6
  10. package/engine/behavior.lua +6 -6
  11. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  12. package/engine/behaviour/ability/always-enabled.lua +31 -0
  13. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  14. package/engine/behaviour/ability/damage.d.ts +33 -11
  15. package/engine/behaviour/ability/damage.lua +89 -31
  16. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  17. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  18. package/engine/behaviour/ability/heal.d.ts +33 -6
  19. package/engine/behaviour/ability/heal.lua +89 -10
  20. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  21. package/engine/behaviour/ability/instant-impact.lua +4 -19
  22. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  23. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  24. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  25. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  26. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  27. package/engine/behaviour/ability/restore-mana.lua +29 -0
  28. package/engine/behaviour/ability.d.ts +9 -2
  29. package/engine/behaviour/ability.lua +47 -33
  30. package/engine/behaviour/unit.d.ts +5 -0
  31. package/engine/behaviour/unit.lua +20 -0
  32. package/engine/buff.d.ts +66 -19
  33. package/engine/buff.lua +268 -80
  34. package/engine/game-map.d.ts +7 -0
  35. package/engine/game-map.lua +32 -0
  36. package/engine/internal/ability.d.ts +16 -13
  37. package/engine/internal/ability.lua +87 -76
  38. package/engine/internal/item/ability.lua +32 -0
  39. package/engine/internal/item+owner.lua +2 -2
  40. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  41. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  42. package/engine/internal/unit/ability.d.ts +10 -1
  43. package/engine/internal/unit/ability.lua +36 -14
  44. package/engine/internal/unit/bonus.d.ts +4 -2
  45. package/engine/internal/unit/bonus.lua +6 -1
  46. package/engine/internal/unit/item.d.ts +24 -0
  47. package/engine/internal/unit/item.lua +79 -0
  48. package/engine/internal/unit/main-selected.d.ts +13 -0
  49. package/engine/internal/unit/main-selected.lua +51 -0
  50. package/engine/internal/unit+ability.lua +2 -2
  51. package/engine/internal/unit+transport.lua +4 -10
  52. package/engine/internal/unit-missile-launch.lua +24 -5
  53. package/engine/internal/unit.d.ts +26 -11
  54. package/engine/internal/unit.lua +136 -76
  55. package/engine/internal/utility.lua +12 -0
  56. package/engine/local-client.d.ts +7 -2
  57. package/engine/local-client.lua +82 -0
  58. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  59. package/engine/object-data/entry/item-type.d.ts +12 -0
  60. package/engine/object-data/entry/item-type.lua +78 -0
  61. package/engine/object-field/ability.d.ts +21 -1
  62. package/engine/object-field/ability.lua +51 -1
  63. package/engine/standard/fields/ability.d.ts +2 -0
  64. package/engine/standard/fields/ability.lua +2 -0
  65. package/engine/unit.d.ts +2 -0
  66. package/engine/unit.lua +2 -0
  67. package/event.d.ts +2 -2
  68. package/event.lua +9 -5
  69. package/index.d.ts +1 -0
  70. package/index.lua +1 -0
  71. package/lualib_bundle.lua +7 -2
  72. package/net/socket.d.ts +7 -1
  73. package/net/socket.lua +45 -4
  74. package/network.d.ts +1 -0
  75. package/network.lua +3 -2
  76. package/objutil/buff.lua +1 -1
  77. package/package.json +2 -2
  78. package/patch-lua.d.ts +0 -0
  79. package/patch-lua.lua +10 -0
  80. package/property.d.ts +55 -0
  81. package/property.lua +374 -0
  82. package/utility/arrays.d.ts +8 -1
  83. package/utility/arrays.lua +34 -3
  84. package/utility/lazy.d.ts +2 -0
  85. package/utility/lazy.lua +14 -0
  86. package/utility/linked-set.d.ts +11 -2
  87. package/utility/linked-set.lua +5 -2
  88. package/utility/types.d.ts +1 -0
  89. package/core/mapbounds.d.ts +0 -8
  90. package/core/mapbounds.lua +0 -12
@@ -40,7 +40,7 @@ ItemAbility.onCreate:addListener(
40
40
  end
41
41
  end
42
42
  )
43
- Unit.onItemPickup:addListener(
43
+ Unit.itemPickedUpEvent:addListener(
44
44
  0,
45
45
  function(unit, item)
46
46
  for ____, ability in ipairs(item.abilities) do
@@ -48,7 +48,7 @@ Unit.onItemPickup:addListener(
48
48
  end
49
49
  end
50
50
  )
51
- Unit.onItemDrop:addListener(
51
+ Unit.itemDroppedEvent:addListener(
52
52
  4,
53
53
  function(unit, item)
54
54
  for ____, ability in ipairs(item.abilities) do
@@ -6,9 +6,8 @@ local ____unit = require("engine.internal.unit")
6
6
  local Unit = ____unit.Unit
7
7
  local ____event = require("event")
8
8
  local Event = ____event.Event
9
- local ____mapbounds = require("core.mapbounds")
10
- local boundMax = ____mapbounds.boundMax
11
- local boundRegion = ____mapbounds.boundRegion
9
+ local ____game_2Dmap = require("engine.game-map")
10
+ local GameMap = ____game_2Dmap.GameMap
12
11
  local eventInvoke = Event.invoke
13
12
  local tableRemove = table.remove
14
13
  local ____assert = _G.assert
@@ -58,8 +57,8 @@ triggerAddCondition(
58
57
  deboard(unit)
59
58
  end
60
59
  if not unitAlive(handle) then
61
- unit.x = boundMax.x
62
- unit.y = boundMax.y
60
+ unit.x = GameMap.worldBoundsRect.maxX
61
+ unit.y = GameMap.worldBoundsRect.maxY
63
62
  end
64
63
  local transport = Unit:of(getTransportUnit())
65
64
  transportByUnit[unit] = transport
@@ -68,11 +67,6 @@ triggerAddCondition(
68
67
  eventInvoke(onBoardEvent, unit, transport)
69
68
  end)
70
69
  )
71
- boundRegion.onUnitEnter:addListener(function(unit)
72
- if transportByUnit[unit] ~= nil and not isUnitLoaded(unit.handle) then
73
- deboard(unit)
74
- end
75
- end)
76
70
  Unit.deathEvent:addListener(function(unit)
77
71
  if transportByUnit[unit] ~= nil then
78
72
  deboard(unit)
@@ -7,14 +7,33 @@ local ____event = require("event")
7
7
  local Event = ____event.Event
8
8
  local ____timer = require("core.types.timer")
9
9
  local Timer = ____timer.Timer
10
+ local ____lua_2Dsets = require("utility.lua-sets")
11
+ local luaSetOf = ____lua_2Dsets.luaSetOf
10
12
  local autoAttackFinishEvent = __TS__New(Event)
11
13
  rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
12
14
  local eventTimerByUnit = {}
13
- local function reset(source)
14
- local eventTimer = eventTimerByUnit[source]
15
- if eventTimer then
16
- eventTimer:destroy()
17
- eventTimerByUnit[source] = nil
15
+ local instantOrderIds = luaSetOf(
16
+ orderId("avatar"),
17
+ orderId("berserk"),
18
+ orderId("divineshield"),
19
+ orderId("immolation"),
20
+ orderId("moveslot0"),
21
+ orderId("moveslot1"),
22
+ orderId("moveslot2"),
23
+ orderId("moveslot3"),
24
+ orderId("moveslot4"),
25
+ orderId("moveslot5"),
26
+ orderId("unavatar"),
27
+ orderId("undivineshield"),
28
+ orderId("unimmolation")
29
+ )
30
+ local function reset(source, orderId)
31
+ if not (instantOrderIds[orderId] ~= nil) then
32
+ local eventTimer = eventTimerByUnit[source]
33
+ if eventTimer then
34
+ eventTimer:destroy()
35
+ eventTimerByUnit[source] = nil
36
+ end
18
37
  end
19
38
  end
20
39
  Unit.onImmediateOrder:addListener(reset)
@@ -42,6 +42,7 @@ export interface DamagingEvent {
42
42
  damageType: jdamagetype;
43
43
  weaponType: jweapontype;
44
44
  readonly isAttack: boolean;
45
+ readonly originalAmount: number;
45
46
  }
46
47
  export type DamageEvent = DamagingEvent & {
47
48
  preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
@@ -93,14 +94,19 @@ export declare class UnitWeapon {
93
94
  set missileSpeed(missileSpeed: number);
94
95
  }
95
96
  declare const enum UnitPropertyKey {
96
- IS_PAUSED = 100,
97
- STUN_COUNTER = 101,
98
- DELAY_HEALTH_CHECKS_COUNTER = 102,
99
- DELAY_HEALTH_CHECKS_HEALTH_BONUS = 103,
100
- PREVENT_DEATH_HEALTH_BONUS = 104,
101
- IS_TEAM_GLOW_HIDDEN = 105
97
+ SYNC_ID = 100,
98
+ IS_PAUSED = 101,
99
+ STUN_COUNTER = 102,
100
+ DELAY_HEALTH_CHECKS_COUNTER = 103,
101
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 104,
102
+ PREVENT_DEATH_HEALTH_BONUS = 105,
103
+ IS_TEAM_GLOW_HIDDEN = 106
102
104
  }
105
+ export type UnitSyncId = number & {
106
+ readonly __unitSyncId: unique symbol;
107
+ };
103
108
  export declare class Unit extends Handle<junit> {
109
+ readonly syncId: UnitSyncId;
104
110
  private [UnitPropertyKey.IS_PAUSED]?;
105
111
  private [UnitPropertyKey.STUN_COUNTER]?;
106
112
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
@@ -227,7 +233,7 @@ export declare class Unit extends Handle<junit> {
227
233
  isSelected(player: Player): boolean;
228
234
  explode(): void;
229
235
  kill(): void;
230
- revive(pos: Vec2, doEffect: boolean): void;
236
+ revive(x: number, y: number, doEffect?: boolean): void;
231
237
  healTarget(target: Widget, amount: number): void;
232
238
  useItem(item: Item): boolean;
233
239
  issueImmediateOrder(order: number): boolean;
@@ -287,7 +293,7 @@ export declare class Unit extends Handle<junit> {
287
293
  static getInRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
288
294
  static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
289
295
  static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
290
- static getSelectionOf(player: Player): Unit[];
296
+ static getSelectionOf(player: Player, target?: Unit[]): Unit[];
291
297
  static readonly deathEvent: UnitTriggerEvent<[Unit]>;
292
298
  static readonly onDecay: UnitTriggerEvent<[]>;
293
299
  static readonly onResurrect: InitializingEvent<[Unit], void>;
@@ -322,9 +328,17 @@ export declare class Unit extends Handle<junit> {
322
328
  static readonly autoAttackStartEvent: UnitTriggerEvent<[Unit]>;
323
329
  static readonly onDamaging: Event<[source: Unit | undefined, target: Unit, event: DamagingEvent]>;
324
330
  static readonly onDamage: InitializingEvent<[source: Unit | undefined, target: Unit, event: DamageEvent], jtrigger>;
325
- static onItemDrop: UnitTriggerEvent<[Item]>;
326
- static onItemPickup: UnitTriggerEvent<[Item]>;
327
- static onItemUse: UnitTriggerEvent<[Item]>;
331
+ static itemDroppedEvent: UnitTriggerEvent<[Item]>;
332
+ static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
333
+ static itemUsedEvent: UnitTriggerEvent<[Item]>;
334
+ static itemStackedEvent: UnitTriggerEvent<[Item]>;
335
+ static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
336
+ static get itemMoveOrderEvent(): Event<[
337
+ unit: Unit,
338
+ item: Item,
339
+ slotFrom: 0 | 1 | 2 | 3 | 4 | 5,
340
+ slotTo: 0 | 1 | 2 | 3 | 4 | 5
341
+ ]>;
328
342
  static get onCreate(): EventDispatcher<[Unit], [Unit]>;
329
343
  static get destroyEvent(): EventDispatcher<[Unit], [Unit]>;
330
344
  getField(field: junitintegerfield | junitrealfield): number;
@@ -335,5 +349,6 @@ export declare class Unit extends Handle<junit> {
335
349
  setField(field: junitbooleanfield, value: boolean): boolean;
336
350
  setField(field: junitstringfield, value: string): boolean;
337
351
  toString(): string;
352
+ static getBySyncId(syncId: UnitSyncId): Unit | undefined;
338
353
  }
339
354
  export {};
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
10
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
@@ -279,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
282
  end
280
283
  local function dispatch(event, idGetter, argsGetter)
281
284
  local initialized = false
282
- local x = {}
283
285
  return setmetatable(
284
- x,
286
+ {},
285
287
  {
286
288
  __index = function(self, id)
287
289
  if type(id) ~= "number" then
288
290
  return event[id]
289
291
  end
290
292
  if not initialized then
291
- local invoke = Event.invoke
292
293
  event:addListener(function(...)
293
294
  local id = idGetter(...)
294
295
  local dispatched = rawget(self, id)
@@ -326,7 +327,6 @@ local function dispatchAbility(event)
326
327
  return event[id]
327
328
  end
328
329
  if not initialized then
329
- local invoke = Event.invoke
330
330
  event:addListener(function(unit, ability, ...)
331
331
  local dispatched = rawget(self, ability.typeId)
332
332
  if dispatched ~= nil then
@@ -562,17 +562,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
562
  ____exports.Unit:of(unit)
563
563
  )
564
564
  end
565
- if not unitAddAbility(unit, abilityId) then
566
- if getUnitAbility(unit, abilityId) == ability then
567
- return UnitAbility:of(
568
- ability,
569
- abilityId,
570
- ____exports.Unit:of(unit)
571
- )
572
- end
573
- else
574
- unitRemoveAbility(unit, abilityId)
575
- end
576
565
  for i = 0, unitInventorySize(unit) - 1 do
577
566
  local item = unitItemInSlot(unit, i)
578
567
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +619,15 @@ for ____, player in ipairs(Player.all) do
630
619
  dummies[player] = dummy
631
620
  end
632
621
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
622
+ local counter = (unit[103] or 0) - 1
634
623
  if counter ~= 0 then
635
- unit[102] = counter
624
+ unit[103] = counter
636
625
  return
637
626
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
627
+ unit[103] = nil
628
+ local healthBonus = unit[104]
640
629
  if healthBonus ~= nil then
641
- unit[103] = nil
630
+ unit[104] = nil
642
631
  local handle = unit.handle
643
632
  BlzSetUnitMaxHP(
644
633
  handle,
@@ -646,12 +635,17 @@ local function delayHealthChecksCallback(unit)
646
635
  )
647
636
  end
648
637
  end
638
+ local nextSyncId = 1
639
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
649
640
  ____exports.Unit = __TS__Class()
650
641
  local Unit = ____exports.Unit
651
642
  Unit.name = "Unit"
652
643
  __TS__ClassExtends(Unit, Handle)
653
644
  function Unit.prototype.____constructor(self, handle)
654
645
  Handle.prototype.____constructor(self, handle)
646
+ local ____nextSyncId_0 = nextSyncId
647
+ nextSyncId = ____nextSyncId_0 + 1
648
+ self.syncId = ____nextSyncId_0
655
649
  self._owner = Player:of(getOwningPlayer(handle))
656
650
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
651
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +658,7 @@ function Unit.prototype.____constructor(self, handle)
664
658
  fourCC("Amrf")
665
659
  ))
666
660
  end
661
+ unitBySyncId[self.syncId] = self
667
662
  local ____ = self.abilities
668
663
  end
669
664
  function Unit.prototype.getEvent(self, event, collector)
@@ -749,8 +744,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
744
  end}
750
745
  end
751
746
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
747
+ local ____combatClassification_1 = combatClassification
748
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
754
749
  end
755
750
  function Unit.prototype.addClassification(self, classification)
756
751
  return unitAddType(self.handle, classification)
@@ -768,13 +763,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
763
  return isUnitInvisible(self.handle, player.handle)
769
764
  end
770
765
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
766
+ local ____temp_2
772
767
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
768
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
769
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
770
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
771
  end
777
- return ____temp_1
772
+ return ____temp_2
778
773
  end
779
774
  function Unit.prototype.isAllyOf(self, unit)
780
775
  return isUnitAlly(
@@ -801,7 +796,7 @@ function Unit.prototype.queueAnimation(self, animation)
801
796
  queueUnitAnimation(self.handle, animation)
802
797
  end
803
798
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
799
+ self[103] = (self[103] or 0) + 1
805
800
  Timer:run(delayHealthChecksCallback, self)
806
801
  end
807
802
  function Unit.prototype.setPosition(self, x, y)
@@ -817,8 +812,15 @@ end
817
812
  function Unit.prototype.kill(self)
818
813
  killUnit(self.handle)
819
814
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
815
+ function Unit.prototype.revive(self, x, y, doEffect)
816
+ local ____ReviveHero_5 = ReviveHero
817
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
818
+ local ____doEffect_3 = doEffect
819
+ if ____doEffect_3 == nil then
820
+ ____doEffect_3 = false
821
+ end
822
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
822
824
  end
823
825
  function Unit.prototype.healTarget(self, target, amount)
824
826
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,7 +860,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
860
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
861
  end
860
862
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
863
+ return Item:of(unitItemInSlot(self.handle, slot))
862
864
  end
863
865
  function Unit.prototype.addAbility(self, abilityId)
864
866
  if unitAddAbility(self.handle, abilityId) then
@@ -988,18 +990,18 @@ function Unit.prototype.unpauseEx(self)
988
990
  self:decrementStunCounter()
989
991
  end
990
992
  function Unit.prototype.incrementStunCounter(self)
991
- local stunCounter = self[101] or 0
992
- if not self[100] or stunCounter >= 0 then
993
+ local stunCounter = self[102] or 0
994
+ if not self[101] or stunCounter >= 0 then
993
995
  BlzPauseUnitEx(self.handle, true)
994
996
  end
995
- self[101] = stunCounter + 1
997
+ self[102] = stunCounter + 1
996
998
  end
997
999
  function Unit.prototype.decrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 1 then
1000
+ local stunCounter = self[102] or 0
1001
+ if not self[101] or stunCounter >= 1 then
1000
1002
  BlzPauseUnitEx(self.handle, false)
1001
1003
  end
1002
- self[101] = stunCounter - 1
1004
+ self[102] = stunCounter - 1
1003
1005
  end
1004
1006
  function Unit.create(self, owner, id, x, y, facing, skinId)
1005
1007
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1101,8 +1103,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1101
1103
  )
1102
1104
  return targetCollection
1103
1105
  end
1104
- function Unit.getSelectionOf(self, player)
1105
- targetCollection = {}
1106
+ function Unit.getSelectionOf(self, player, target)
1107
+ if target == nil then
1108
+ target = {}
1109
+ end
1110
+ targetCollection = target
1106
1111
  targetCollectionNextIndex = 1
1107
1112
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1108
1113
  return targetCollection
@@ -1124,6 +1129,9 @@ end
1124
1129
  function Unit.prototype.__tostring(self)
1125
1130
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1126
1131
  end
1132
+ function Unit.getBySyncId(self, syncId)
1133
+ return unitBySyncId[syncId]
1134
+ end
1127
1135
  __TS__SetDescriptor(
1128
1136
  Unit.prototype,
1129
1137
  "_deltas",
@@ -1381,17 +1389,17 @@ __TS__SetDescriptor(
1381
1389
  "isTeamGlowVisible",
1382
1390
  {
1383
1391
  get = function(self)
1384
- return not self[105]
1392
+ return not self[106]
1385
1393
  end,
1386
1394
  set = function(self, isTeamGlowVisible)
1387
1395
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1388
- local ____temp_2
1396
+ local ____temp_6
1389
1397
  if not isTeamGlowVisible then
1390
- ____temp_2 = true
1398
+ ____temp_6 = true
1391
1399
  else
1392
- ____temp_2 = nil
1400
+ ____temp_6 = nil
1393
1401
  end
1394
- self[105] = ____temp_2
1402
+ self[106] = ____temp_6
1395
1403
  end
1396
1404
  },
1397
1405
  true
@@ -1401,7 +1409,7 @@ __TS__SetDescriptor(
1401
1409
  "color",
1402
1410
  {set = function(self, color)
1403
1411
  setUnitColor(self.handle, color.handle)
1404
- if self[105] then
1412
+ if self[106] then
1405
1413
  showUnitTeamGlow(self.handle, false)
1406
1414
  end
1407
1415
  end},
@@ -1425,14 +1433,14 @@ __TS__SetDescriptor(
1425
1433
  "maxHealth",
1426
1434
  {
1427
1435
  get = function(self)
1428
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1436
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1429
1437
  end,
1430
1438
  set = function(self, maxHealth)
1431
- if maxHealth < 1 and self[102] ~= nil then
1432
- self[103] = (self[103] or 0) + (1 - maxHealth)
1439
+ if maxHealth < 1 and self[103] ~= nil then
1440
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1433
1441
  maxHealth = 1
1434
1442
  end
1435
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1443
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1436
1444
  end
1437
1445
  },
1438
1446
  true
@@ -1474,10 +1482,10 @@ __TS__SetDescriptor(
1474
1482
  "health",
1475
1483
  {
1476
1484
  get = function(self)
1477
- return GetWidgetLife(self.handle) - (self[104] or 0)
1485
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1478
1486
  end,
1479
1487
  set = function(self, health)
1480
- SetWidgetLife(self.handle, health + (self[104] or 0))
1488
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1481
1489
  end
1482
1490
  },
1483
1491
  true
@@ -1688,17 +1696,17 @@ __TS__SetDescriptor(
1688
1696
  set = function(self, isPaused)
1689
1697
  local handle = self.handle
1690
1698
  if isPaused and not IsUnitPaused(handle) then
1691
- self[100] = true
1692
- for _ = self[101] or 0, -1 do
1699
+ self[101] = true
1700
+ for _ = self[102] or 0, -1 do
1693
1701
  BlzPauseUnitEx(handle, true)
1694
1702
  end
1695
1703
  PauseUnit(handle, true)
1696
1704
  elseif not isPaused and IsUnitPaused(handle) then
1697
1705
  PauseUnit(handle, false)
1698
- for _ = self[101] or 0, -1 do
1706
+ for _ = self[102] or 0, -1 do
1699
1707
  BlzPauseUnitEx(handle, false)
1700
1708
  end
1701
- self[100] = nil
1709
+ self[101] = nil
1702
1710
  end
1703
1711
  end
1704
1712
  },
@@ -2055,7 +2063,6 @@ Unit.onDecay = __TS__New(
2055
2063
  Unit.onResurrect = __TS__New(
2056
2064
  InitializingEvent,
2057
2065
  function(event)
2058
- local invoke = Event.invoke
2059
2066
  local dead = setmetatable({}, {__mode = "k"})
2060
2067
  ____exports.Unit.deathEvent:addListener(function(unit)
2061
2068
  dead[unit] = true
@@ -2071,10 +2078,15 @@ Unit.onResurrect = __TS__New(
2071
2078
  Unit.morphEvent = __TS__New(
2072
2079
  InitializingEvent,
2073
2080
  function(event)
2081
+ local function ifNotLeft(unit)
2082
+ local handle = unit.handle
2083
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2084
+ invoke(event, unit)
2085
+ end
2086
+ end
2074
2087
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2075
2088
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2076
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2077
- Timer:run(Event.invoke, event, unit)
2089
+ Timer:run(ifNotLeft, unit)
2078
2090
  end
2079
2091
  end)
2080
2092
  end
@@ -2112,27 +2124,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2112
2124
  Unit.onTargetCast = dispatchId(__TS__New(
2113
2125
  InitializingEvent,
2114
2126
  function(event)
2115
- local invoke = Event.invoke
2116
2127
  local function listener(unit, id)
2117
- local ____GetSpellTargetUnit_result_5
2128
+ local ____GetSpellTargetUnit_result_9
2118
2129
  if GetSpellTargetUnit() then
2119
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2130
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2120
2131
  else
2121
- local ____GetSpellTargetItem_result_4
2132
+ local ____GetSpellTargetItem_result_8
2122
2133
  if GetSpellTargetItem() then
2123
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2134
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2124
2135
  else
2125
- local ____GetSpellTargetDestructable_result_3
2136
+ local ____GetSpellTargetDestructable_result_7
2126
2137
  if GetSpellTargetDestructable() then
2127
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2138
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2128
2139
  else
2129
- ____GetSpellTargetDestructable_result_3 = nil
2140
+ ____GetSpellTargetDestructable_result_7 = nil
2130
2141
  end
2131
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2142
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2132
2143
  end
2133
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2144
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2134
2145
  end
2135
- local target = ____GetSpellTargetUnit_result_5
2146
+ local target = ____GetSpellTargetUnit_result_9
2136
2147
  if target then
2137
2148
  invoke(event, unit, id, target)
2138
2149
  end
@@ -2329,7 +2340,6 @@ Unit.autoAttackStartEvent = __TS__New(
2329
2340
  )
2330
2341
  Unit.onDamaging = (function()
2331
2342
  local event = __TS__New(Event)
2332
- local invoke = Event.invoke
2333
2343
  local trigger = CreateTrigger()
2334
2344
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2335
2345
  TriggerAddCondition(
@@ -2428,7 +2438,6 @@ end)()
2428
2438
  Unit.onDamage = __TS__New(
2429
2439
  InitializingEvent,
2430
2440
  function(event)
2431
- local invoke = Event.invoke
2432
2441
  local trigger = CreateTrigger()
2433
2442
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2434
2443
  TriggerAddCondition(
@@ -2444,6 +2453,7 @@ Unit.onDamage = __TS__New(
2444
2453
  damageType = BlzGetEventDamageType(),
2445
2454
  weaponType = BlzGetEventWeaponType(),
2446
2455
  isAttack = BlzGetEventIsAttack(),
2456
+ originalAmount = GetEventDamage(),
2447
2457
  preventDeath = damageEventPreventDeath
2448
2458
  }
2449
2459
  local evData = setmetatable(
@@ -2460,7 +2470,7 @@ Unit.onDamage = __TS__New(
2460
2470
  invoke(event, source, target, evData)
2461
2471
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2462
2472
  local bonusHealth = math.ceil(evData.amount)
2463
- target[104] = (target[104] or 0) + bonusHealth
2473
+ target[105] = (target[105] or 0) + bonusHealth
2464
2474
  BlzSetUnitMaxHP(
2465
2475
  target.handle,
2466
2476
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2474,7 +2484,7 @@ Unit.onDamage = __TS__New(
2474
2484
  evData[0],
2475
2485
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2476
2486
  )
2477
- target[104] = (target[104] or 0) - bonusHealth
2487
+ target[105] = (target[105] or 0) - bonusHealth
2478
2488
  SetWidgetLife(
2479
2489
  target.handle,
2480
2490
  GetWidgetLife(target.handle) - bonusHealth
@@ -2494,7 +2504,7 @@ Unit.onDamage = __TS__New(
2494
2504
  DestroyTrigger(trigger)
2495
2505
  end
2496
2506
  )
2497
- Unit.onItemDrop = __TS__New(
2507
+ Unit.itemDroppedEvent = __TS__New(
2498
2508
  ____exports.UnitTriggerEvent,
2499
2509
  EVENT_PLAYER_UNIT_DROP_ITEM,
2500
2510
  function()
@@ -2505,7 +2515,7 @@ Unit.onItemDrop = __TS__New(
2505
2515
  return IgnoreEvent
2506
2516
  end
2507
2517
  )
2508
- Unit.onItemPickup = __TS__New(
2518
+ Unit.itemPickedUpEvent = __TS__New(
2509
2519
  ____exports.UnitTriggerEvent,
2510
2520
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2511
2521
  function()
@@ -2516,10 +2526,60 @@ Unit.onItemPickup = __TS__New(
2516
2526
  return IgnoreEvent
2517
2527
  end
2518
2528
  )
2519
- Unit.onItemUse = __TS__New(
2529
+ Unit.itemUsedEvent = __TS__New(
2520
2530
  ____exports.UnitTriggerEvent,
2521
2531
  EVENT_PLAYER_UNIT_USE_ITEM,
2522
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2532
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2533
+ )
2534
+ Unit.itemStackedEvent = __TS__New(
2535
+ ____exports.UnitTriggerEvent,
2536
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2537
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2538
+ )
2539
+ __TS__ObjectDefineProperty(
2540
+ Unit,
2541
+ "itemUseOrderEvent",
2542
+ {get = function(self)
2543
+ local event = __TS__New(Event)
2544
+ for order = orderId("useslot0"), orderId("useslot5") do
2545
+ local slot = order - orderId("useslot0")
2546
+ local function listener(unit)
2547
+ local item = unit.items[slot + 1]
2548
+ if item ~= nil then
2549
+ invoke(event, unit, item)
2550
+ end
2551
+ end
2552
+ self.onImmediateOrder[order]:addListener(listener)
2553
+ self.onTargetOrder[order]:addListener(listener)
2554
+ self.onPointOrder[order]:addListener(listener)
2555
+ end
2556
+ rawset(self, "itemUseOrderEvent", event)
2557
+ return event
2558
+ end}
2559
+ )
2560
+ __TS__ObjectDefineProperty(
2561
+ Unit,
2562
+ "itemMoveOrderEvent",
2563
+ {get = function(self)
2564
+ local event = __TS__New(Event)
2565
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2566
+ local slotTo = order - orderId("moveslot0")
2567
+ self.onTargetOrder[order]:addListener(function(unit, item)
2568
+ local slotFrom = unit.items:findSlot(item)
2569
+ if slotFrom ~= nil then
2570
+ invoke(
2571
+ event,
2572
+ unit,
2573
+ item,
2574
+ slotFrom,
2575
+ slotTo
2576
+ )
2577
+ end
2578
+ end)
2579
+ end
2580
+ rawset(self, "itemMoveOrderEvent", event)
2581
+ return event
2582
+ end}
2523
2583
  )
2524
2584
  __TS__ObjectDefineProperty(
2525
2585
  Unit,
@@ -1,6 +1,8 @@
1
1
  local ____exports = {}
2
2
  local getUnitAbility = BlzGetUnitAbility
3
3
  local unitAddAbility = UnitAddAbility
4
+ local unitInventorySize = UnitInventorySize
5
+ local unitItemInSlot = UnitItemInSlot
4
6
  local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
5
7
  ---
6
8
  -- @internal For use by internal systems only.
@@ -10,4 +12,14 @@ ____exports.addInternalAbility = function(unit, abilityTypeId)
10
12
  end
11
13
  return getUnitAbility(unit, abilityTypeId)
12
14
  end
15
+ ---
16
+ -- @internal For use by internal systems only.
17
+ ____exports.findUnitItemSlot = function(unit, item)
18
+ for slot = 0, unitInventorySize(unit) - 1 do
19
+ if item == unitItemInSlot(unit, slot) then
20
+ return slot
21
+ end
22
+ end
23
+ return nil
24
+ end
13
25
  return ____exports