warscript 0.0.1-dev.effa673 → 0.0.1-dev.f074376

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 (139) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/types/frame.lua +24 -21
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +5 -0
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +9 -8
  12. package/core/types/timer.lua +45 -23
  13. package/decl/native.d.ts +846 -790
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +6 -3
  20. package/engine/behaviour/ability/damage.lua +24 -36
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +2 -1
  28. package/engine/behaviour/ability.lua +10 -18
  29. package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
  30. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +259 -6
  33. package/engine/buff.d.ts +17 -6
  34. package/engine/buff.lua +160 -97
  35. package/engine/internal/ability.d.ts +7 -1
  36. package/engine/internal/ability.lua +49 -9
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +18 -17
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  42. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  43. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  44. package/engine/internal/misc/frame-coordinates.lua +21 -0
  45. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  46. package/engine/internal/misc/get-terrain-z.lua +11 -0
  47. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  48. package/engine/internal/misc/player-local-handle.lua +5 -0
  49. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  50. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  51. package/engine/internal/unit/ability.d.ts +35 -0
  52. package/engine/internal/unit/ability.lua +98 -9
  53. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  54. package/engine/internal/unit/allowed-targets.lua +9 -1
  55. package/engine/internal/unit/bonus.d.ts +2 -0
  56. package/engine/internal/unit/bonus.lua +10 -0
  57. package/engine/internal/unit/fly-height.d.ts +7 -0
  58. package/engine/internal/unit/fly-height.lua +20 -0
  59. package/engine/internal/unit/main-selected.lua +12 -27
  60. package/engine/internal/unit/order.d.ts +20 -0
  61. package/engine/internal/unit/order.lua +136 -0
  62. package/engine/internal/unit/scale.d.ts +7 -0
  63. package/engine/internal/unit/scale.lua +20 -0
  64. package/engine/internal/unit+ability.lua +10 -1
  65. package/engine/internal/unit+damage.d.ts +2 -11
  66. package/engine/internal/unit+damage.lua +10 -14
  67. package/engine/internal/unit+spellSteal.lua +1 -2
  68. package/engine/internal/unit-missile-launch.lua +45 -14
  69. package/engine/internal/unit.d.ts +39 -19
  70. package/engine/internal/unit.lua +329 -169
  71. package/engine/local-client.d.ts +2 -0
  72. package/engine/local-client.lua +30 -0
  73. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  74. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  75. package/engine/object-data/auxiliary/attachment-preset.d.ts +1 -1
  76. package/engine/object-data/auxiliary/attachment-preset.lua +3 -2
  77. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  78. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  79. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  80. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  81. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  82. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  83. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  84. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  85. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  86. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  87. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  89. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  91. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  92. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  93. package/engine/object-data/entry/ability-type.lua +11 -3
  94. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  95. package/engine/object-data/entry/buff-type.d.ts +5 -11
  96. package/engine/object-data/entry/buff-type.lua +11 -27
  97. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  98. package/engine/object-data/entry/destructible-type.lua +155 -0
  99. package/engine/object-data/entry/unit-type.d.ts +17 -4
  100. package/engine/object-data/entry/unit-type.lua +197 -85
  101. package/engine/object-field/ability.d.ts +4 -4
  102. package/engine/object-field/ability.lua +7 -6
  103. package/engine/object-field/unit.d.ts +72 -3
  104. package/engine/object-field/unit.lua +268 -7
  105. package/engine/object-field.d.ts +23 -6
  106. package/engine/object-field.lua +335 -118
  107. package/engine/random.d.ts +9 -0
  108. package/engine/random.lua +13 -0
  109. package/engine/standard/entries/buff-type.d.ts +3 -0
  110. package/engine/standard/entries/buff-type.lua +3 -0
  111. package/engine/standard/fields/ability.d.ts +2 -2
  112. package/engine/standard/fields/ability.lua +2 -2
  113. package/engine/standard/fields/unit.d.ts +7 -0
  114. package/engine/standard/fields/unit.lua +13 -0
  115. package/engine/synchronization.d.ts +11 -0
  116. package/engine/synchronization.lua +77 -0
  117. package/engine/text-tag.d.ts +36 -2
  118. package/engine/text-tag.lua +250 -10
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +3 -0
  121. package/net/socket.lua +1 -1
  122. package/objutil/buff.lua +2 -3
  123. package/package.json +2 -2
  124. package/patch-lualib.lua +1 -1
  125. package/utility/arrays.d.ts +2 -0
  126. package/utility/arrays.lua +11 -0
  127. package/utility/callback-array.d.ts +17 -0
  128. package/utility/callback-array.lua +61 -0
  129. package/utility/functions.d.ts +8 -0
  130. package/utility/functions.lua +13 -0
  131. package/utility/linked-set.d.ts +2 -0
  132. package/utility/linked-set.lua +22 -1
  133. package/utility/lua-maps.d.ts +15 -2
  134. package/utility/lua-maps.lua +53 -2
  135. package/utility/lua-sets.d.ts +2 -0
  136. package/utility/lua-sets.lua +7 -0
  137. package/utility/types.d.ts +3 -0
  138. package/core/types/order.d.ts +0 -25
  139. package/core/types/order.lua +0 -55
@@ -53,13 +53,21 @@ local ____math = require("math")
53
53
  local min = ____math.min
54
54
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
55
  local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
63
+ local ____ability = require("engine.internal.item.ability")
64
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
65
+ local ____synchronization = require("engine.synchronization")
66
+ local synchronizer = ____synchronization.synchronizer
56
67
  local match = string.match
57
68
  local ____tostring = _G.tostring
58
69
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local resetUnitAnimation = ResetUnitAnimation
62
- local queueUnitAnimation = QueueUnitAnimation
63
71
  local getUnitIntegerField = BlzGetUnitIntegerField
64
72
  local getUnitRealField = BlzGetUnitRealField
65
73
  local getHeroStr = GetHeroStr
@@ -81,7 +89,6 @@ local getHandleId = GetHandleId
81
89
  local getUnitCurrentOrder = GetUnitCurrentOrder
82
90
  local createUnit = CreateUnit
83
91
  local killUnit = KillUnit
84
- local setUnitExploded = SetUnitExploded
85
92
  local removeUnit = RemoveUnit
86
93
  local getUnitTypeId = GetUnitTypeId
87
94
  local isHeroUnitId = IsHeroUnitId
@@ -97,8 +104,6 @@ local getSpellTargetItem = GetSpellTargetItem
97
104
  local getSpellTargetDestructable = GetSpellTargetDestructable
98
105
  local isUnitInRangeXY = IsUnitInRangeXY
99
106
  local isUnitInRange = IsUnitInRange
100
- local setResourceAmount = SetResourceAmount
101
- local getResourceAmount = GetResourceAmount
102
107
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
103
108
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
104
109
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -122,15 +127,9 @@ local getOrderedUnit = GetOrderedUnit
122
127
  local getIssuedOrderId = GetIssuedOrderId
123
128
  local isUnitInvulnerable = BlzIsUnitInvulnerable
124
129
  local unitAlive = UnitAlive
125
- local unitAddType = UnitAddType
126
- local unitRemoveType = UnitRemoveType
127
- local isUnitIllusion = IsUnitIllusion
128
- local isUnitType = IsUnitType
129
130
  local isUnitAlly = IsUnitAlly
130
131
  local isUnitEnemy = IsUnitEnemy
131
132
  local getOwningPlayer = GetOwningPlayer
132
- local setUnitColor = SetUnitColor
133
- local showUnitTeamGlow = BlzShowUnitTeamGlow
134
133
  ____exports.UnitClassification = {}
135
134
  local UnitClassification = ____exports.UnitClassification
136
135
  do
@@ -140,6 +139,7 @@ do
140
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
141
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
142
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
143
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
144
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
145
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -347,6 +347,9 @@ local function dispatchAbility(event)
347
347
  }
348
348
  )
349
349
  end
350
+ local function damagingEventPreventRetaliation(self)
351
+ self[0] = true
352
+ end
350
353
  local function damageEventPreventDeath(self, callback, ...)
351
354
  if self[0] ~= nil then
352
355
  return
@@ -358,7 +361,14 @@ local function damageEventPreventDeath(self, callback, ...)
358
361
  rawset(self, 1 + i, (select(i, ...)))
359
362
  end
360
363
  end
361
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
364
+ local damageSetters = {
365
+ amount = BlzSetEventDamage,
366
+ attackType = function(attackType)
367
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
368
+ end,
369
+ damageType = BlzSetEventDamageType,
370
+ weaponType = BlzSetEventWeaponType
371
+ }
362
372
  local jlimitopByOperator = {
363
373
  [0] = LESS_THAN_OR_EQUAL,
364
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -402,6 +412,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
402
412
  self.unit = unit
403
413
  self.index = index
404
414
  end
415
+ __TS__SetDescriptor(
416
+ UnitWeapon.prototype,
417
+ "isEnabled",
418
+ {
419
+ get = function(self)
420
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
421
+ end,
422
+ set = function(self, isEnabled)
423
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
424
+ end
425
+ },
426
+ true
427
+ )
405
428
  __TS__SetDescriptor(
406
429
  UnitWeapon.prototype,
407
430
  "cooldown",
@@ -436,6 +459,19 @@ __TS__SetDescriptor(
436
459
  },
437
460
  true
438
461
  )
462
+ __TS__SetDescriptor(
463
+ UnitWeapon.prototype,
464
+ "allowedTargetCombatClassifications",
465
+ {
466
+ get = function(self)
467
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
468
+ end,
469
+ set = function(self, allowedTargetCombatClassifications)
470
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
471
+ end
472
+ },
473
+ true
474
+ )
439
475
  __TS__SetDescriptor(
440
476
  UnitWeapon.prototype,
441
477
  "damageBase",
@@ -623,15 +659,15 @@ for ____, player in ipairs(Player.all) do
623
659
  dummies[player] = dummy
624
660
  end
625
661
  local function delayHealthChecksCallback(unit)
626
- local counter = (unit[103] or 0) - 1
662
+ local counter = (unit[104] or 0) - 1
627
663
  if counter ~= 0 then
628
- unit[103] = counter
664
+ unit[104] = counter
629
665
  return
630
666
  end
631
- unit[103] = nil
632
- local healthBonus = unit[104]
667
+ unit[104] = nil
668
+ local healthBonus = unit[105]
633
669
  if healthBonus ~= nil then
634
- unit[104] = nil
670
+ unit[105] = nil
635
671
  local handle = unit.handle
636
672
  BlzSetUnitMaxHP(
637
673
  handle,
@@ -640,16 +676,26 @@ local function delayHealthChecksCallback(unit)
640
676
  end
641
677
  end
642
678
  local nextSyncId = 1
643
- local unitBySyncId = setmetatable({}, {__mode = "k"})
679
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
680
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
681
+ local function addAbility(unit, abilityTypeId)
682
+ local ____unitAddAbility_result_0
683
+ if unitAddAbility(unit, abilityTypeId) then
684
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
685
+ else
686
+ ____unitAddAbility_result_0 = nil
687
+ end
688
+ return ____unitAddAbility_result_0
689
+ end
644
690
  ____exports.Unit = __TS__Class()
645
691
  local Unit = ____exports.Unit
646
692
  Unit.name = "Unit"
647
693
  __TS__ClassExtends(Unit, Handle)
648
694
  function Unit.prototype.____constructor(self, handle)
649
695
  Handle.prototype.____constructor(self, handle)
650
- local ____nextSyncId_0 = nextSyncId
651
- nextSyncId = ____nextSyncId_0 + 1
652
- self.syncId = ____nextSyncId_0
696
+ local ____nextSyncId_1 = nextSyncId
697
+ nextSyncId = ____nextSyncId_1 + 1
698
+ self.syncId = ____nextSyncId_1
653
699
  self._owner = Player:of(getOwningPlayer(handle))
654
700
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
655
701
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -681,8 +727,8 @@ function Unit.prototype.getEvent(self, event, collector)
681
727
  end
682
728
  function Unit.prototype.onDestroy(self)
683
729
  local handle = self.handle
684
- self[107] = getUnitX(handle)
685
- self[108] = getUnitY(handle)
730
+ self[108] = getUnitX(handle)
731
+ self[109] = getUnitY(handle)
686
732
  if not self._owner then
687
733
  self._owner = Player:of(getOwningPlayer(handle))
688
734
  end
@@ -750,17 +796,17 @@ function Unit.prototype.addModifier(self, property, modifier)
750
796
  end}
751
797
  end
752
798
  function Unit.prototype.hasCombatClassification(self, combatClassification)
753
- local ____combatClassification_1 = combatClassification
754
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
799
+ local ____combatClassification_2 = combatClassification
800
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
755
801
  end
756
802
  function Unit.prototype.addClassification(self, classification)
757
- return unitAddType(self.handle, classification)
803
+ return UnitAddType(self.handle, classification)
758
804
  end
759
805
  function Unit.prototype.removeClassification(self, classification)
760
- return unitRemoveType(self.handle, classification)
806
+ return UnitRemoveType(self.handle, classification)
761
807
  end
762
808
  function Unit.prototype.hasClassification(self, classification)
763
- return isUnitType(self.handle, classification)
809
+ return IsUnitType(self.handle, classification)
764
810
  end
765
811
  function Unit.prototype.isVisibleTo(self, player)
766
812
  return isUnitVisible(self.handle, player.handle)
@@ -769,13 +815,13 @@ function Unit.prototype.isInvisibleTo(self, player)
769
815
  return isUnitInvisible(self.handle, player.handle)
770
816
  end
771
817
  function Unit.prototype.isInRangeOf(self, x, y, range)
772
- local ____temp_2
818
+ local ____temp_3
773
819
  if type(x) == "number" then
774
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
820
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
775
821
  else
776
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
822
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
777
823
  end
778
- return ____temp_2
824
+ return ____temp_3
779
825
  end
780
826
  function Unit.prototype.isAllyOf(self, unit)
781
827
  return isUnitAlly(
@@ -793,19 +839,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
793
839
  if type(animation) == "number" then
794
840
  setUnitAnimationByIndex(self.handle, animation)
795
841
  elseif rarity then
796
- setUnitAnimationWithRarity(self.handle, animation, rarity)
842
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
797
843
  else
798
844
  setUnitAnimation(self.handle, animation)
799
845
  end
800
846
  end
801
847
  function Unit.prototype.resetAnimation(self)
802
- resetUnitAnimation(self.handle)
848
+ ResetUnitAnimation(self.handle)
803
849
  end
804
850
  function Unit.prototype.queueAnimation(self, animation)
805
- queueUnitAnimation(self.handle, animation)
851
+ QueueUnitAnimation(self.handle, animation)
852
+ end
853
+ function Unit.prototype.chooseWeapon(self, target)
854
+ local firstWeapon = self.firstWeapon
855
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
856
+ return firstWeapon
857
+ end
858
+ local secondWeapon = self.secondWeapon
859
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
860
+ return secondWeapon
861
+ end
862
+ return nil
806
863
  end
807
864
  function Unit.prototype.delayHealthChecks(self)
808
- self[103] = (self[103] or 0) + 1
865
+ self[104] = (self[104] or 0) + 1
809
866
  Timer:run(delayHealthChecksCallback, self)
810
867
  end
811
868
  function Unit.prototype.setPosition(self, x, y)
@@ -815,21 +872,21 @@ function Unit.prototype.isSelected(self, player)
815
872
  return IsUnitSelected(self.handle, player.handle)
816
873
  end
817
874
  function Unit.prototype.explode(self)
818
- setUnitExploded(self.handle, true)
875
+ SetUnitExploded(self.handle, true)
819
876
  killUnit(self.handle)
820
877
  end
821
878
  function Unit.prototype.kill(self)
822
879
  killUnit(self.handle)
823
880
  end
824
881
  function Unit.prototype.revive(self, x, y, doEffect)
825
- local ____ReviveHero_5 = ReviveHero
826
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
827
- local ____doEffect_3 = doEffect
828
- if ____doEffect_3 == nil then
829
- ____doEffect_3 = false
882
+ local ____ReviveHero_6 = ReviveHero
883
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
884
+ local ____doEffect_4 = doEffect
885
+ if ____doEffect_4 == nil then
886
+ ____doEffect_4 = false
830
887
  end
831
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
832
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
888
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
889
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
833
890
  end
834
891
  function Unit.prototype.healTarget(self, target, amount)
835
892
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -872,17 +929,16 @@ function Unit.prototype.itemInSlot(self, slot)
872
929
  return Item:of(unitItemInSlot(self.handle, slot))
873
930
  end
874
931
  function Unit.prototype.addAbility(self, abilityId)
875
- if unitAddAbility(self.handle, abilityId) then
876
- local ability = UnitAbility:of(
877
- checkNotNull(getUnitAbility(self.handle, abilityId)),
878
- abilityId,
879
- self
880
- )
932
+ local ability = UnitAbility:of(
933
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
934
+ abilityId,
935
+ self
936
+ )
937
+ if ability ~= nil then
881
938
  local abilities = self.abilities
882
939
  abilities[#abilities + 1] = ability
883
- return ability
884
940
  end
885
- return nil
941
+ return ability
886
942
  end
887
943
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
888
944
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -896,31 +952,21 @@ end
896
952
  function Unit.prototype.hasAbility(self, abilityId)
897
953
  return getUnitAbilityLevel(self.handle, abilityId) > 0
898
954
  end
899
- function Unit.prototype.getAbilityById(self, abilityId)
900
- local handle = self.handle
901
- if unitAddAbility(handle, abilityId) then
902
- assert(unitRemoveAbility(handle, abilityId))
903
- return nil
904
- end
905
- return UnitAbility:of(
906
- getUnitAbility(self.handle, abilityId),
907
- abilityId,
908
- self
909
- )
955
+ function Unit.prototype.getAbility(self, abilityId)
956
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
957
+ return UnitAbility:of(ability, abilityId, self)
910
958
  end
911
- function Unit.prototype.removeAbility(self, abilityId)
912
- if unitRemoveAbility(self.handle, abilityId) then
913
- local abilities = self.abilities
914
- for i = 1, #abilities do
915
- if abilities[i].typeId == abilityId then
916
- abilities[i]:destroy()
917
- tremove(abilities, i)
918
- return true
919
- end
959
+ function Unit.prototype.removeAbility(self, abilityTypeId)
960
+ local abilities = self.abilities
961
+ for i = 1, #abilities do
962
+ if abilities[i].typeId == abilityTypeId then
963
+ local ability = abilities[i]
964
+ tremove(abilities, i)
965
+ ability:destroy()
966
+ return true
920
967
  end
921
- return true
922
968
  end
923
- return false
969
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
924
970
  end
925
971
  function Unit.prototype.hideAbility(self, abilityId, flag)
926
972
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -934,6 +980,21 @@ end
934
980
  function Unit.prototype.endAbilityCooldown(self, abilityId)
935
981
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
936
982
  end
983
+ function Unit.prototype.interruptMovement(self)
984
+ local handle = self.handle
985
+ unitDisableAbility(
986
+ handle,
987
+ fourCC("Amov"),
988
+ true,
989
+ false
990
+ )
991
+ unitDisableAbility(
992
+ handle,
993
+ fourCC("Amov"),
994
+ false,
995
+ false
996
+ )
997
+ end
937
998
  function Unit.prototype.interruptAttack(self)
938
999
  unitInterruptAttack(self.handle)
939
1000
  end
@@ -1007,18 +1068,44 @@ function Unit.prototype.unpauseEx(self)
1007
1068
  end
1008
1069
  function Unit.prototype.incrementStunCounter(self)
1009
1070
  local stunCounter = self[102] or 0
1010
- if not self[101] or stunCounter >= 0 then
1071
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1011
1072
  BlzPauseUnitEx(self.handle, true)
1012
1073
  end
1013
1074
  self[102] = stunCounter + 1
1014
1075
  end
1015
1076
  function Unit.prototype.decrementStunCounter(self)
1016
1077
  local stunCounter = self[102] or 0
1017
- if not self[101] or stunCounter >= 1 then
1078
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1018
1079
  BlzPauseUnitEx(self.handle, false)
1019
1080
  end
1020
1081
  self[102] = stunCounter - 1
1021
1082
  end
1083
+ function Unit.prototype.incrementForceStunCounter(self)
1084
+ local forceStunCounter = self[103] or 0
1085
+ if forceStunCounter == 0 then
1086
+ local handle = self.handle
1087
+ if not self[101] then
1088
+ for _ = self[102] or 0, -1 do
1089
+ BlzPauseUnitEx(handle, true)
1090
+ end
1091
+ end
1092
+ BlzPauseUnitEx(handle, true)
1093
+ end
1094
+ self[103] = forceStunCounter + 1
1095
+ end
1096
+ function Unit.prototype.decrementForceStunCounter(self)
1097
+ local forceStunCounter = self[103] or 0
1098
+ if forceStunCounter == 1 then
1099
+ local handle = self.handle
1100
+ if not self[101] then
1101
+ for _ = self[102] or 0, -1 do
1102
+ BlzPauseUnitEx(handle, false)
1103
+ end
1104
+ end
1105
+ BlzPauseUnitEx(handle, false)
1106
+ end
1107
+ self[103] = forceStunCounter - 1
1108
+ end
1022
1109
  function Unit.create(self, owner, id, x, y, facing, skinId)
1023
1110
  local handle = skinId and BlzCreateUnitWithSkin(
1024
1111
  owner.handle,
@@ -1207,7 +1294,7 @@ __TS__SetDescriptor(
1207
1294
  Unit.prototype,
1208
1295
  "isIllusion",
1209
1296
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1297
+ return IsUnitIllusion(self.handle)
1211
1298
  end},
1212
1299
  true
1213
1300
  )
@@ -1292,6 +1379,19 @@ __TS__SetDescriptor(
1292
1379
  },
1293
1380
  true
1294
1381
  )
1382
+ __TS__SetDescriptor(
1383
+ Unit.prototype,
1384
+ "primaryAttribute",
1385
+ {
1386
+ get = function(self)
1387
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1388
+ end,
1389
+ set = function(self, primaryAttribute)
1390
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1391
+ end
1392
+ },
1393
+ true
1394
+ )
1295
1395
  __TS__SetDescriptor(
1296
1396
  Unit.prototype,
1297
1397
  "strengthBase",
@@ -1413,17 +1513,17 @@ __TS__SetDescriptor(
1413
1513
  "isTeamGlowVisible",
1414
1514
  {
1415
1515
  get = function(self)
1416
- return not self[106]
1516
+ return not self[107]
1417
1517
  end,
1418
1518
  set = function(self, isTeamGlowVisible)
1419
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1420
- local ____temp_6
1519
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1520
+ local ____temp_7
1421
1521
  if not isTeamGlowVisible then
1422
- ____temp_6 = true
1522
+ ____temp_7 = true
1423
1523
  else
1424
- ____temp_6 = nil
1524
+ ____temp_7 = nil
1425
1525
  end
1426
- self[106] = ____temp_6
1526
+ self[107] = ____temp_7
1427
1527
  end
1428
1528
  },
1429
1529
  true
@@ -1432,9 +1532,9 @@ __TS__SetDescriptor(
1432
1532
  Unit.prototype,
1433
1533
  "color",
1434
1534
  {set = function(self, color)
1435
- setUnitColor(self.handle, color.handle)
1436
- if self[106] then
1437
- showUnitTeamGlow(self.handle, false)
1535
+ SetUnitColor(self.handle, color.handle)
1536
+ if self[107] then
1537
+ BlzShowUnitTeamGlow(self.handle, false)
1438
1538
  end
1439
1539
  end},
1440
1540
  true
@@ -1457,14 +1557,14 @@ __TS__SetDescriptor(
1457
1557
  "maxHealth",
1458
1558
  {
1459
1559
  get = function(self)
1460
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1560
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1461
1561
  end,
1462
1562
  set = function(self, maxHealth)
1463
- if maxHealth < 1 and self[103] ~= nil then
1464
- self[104] = (self[104] or 0) + (1 - maxHealth)
1563
+ if maxHealth < 1 and self[104] ~= nil then
1564
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1465
1565
  maxHealth = 1
1466
1566
  end
1467
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1567
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1468
1568
  end
1469
1569
  },
1470
1570
  true
@@ -1506,10 +1606,10 @@ __TS__SetDescriptor(
1506
1606
  "health",
1507
1607
  {
1508
1608
  get = function(self)
1509
- return GetWidgetLife(self.handle) - (self[105] or 0)
1609
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1510
1610
  end,
1511
1611
  set = function(self, health)
1512
- SetWidgetLife(self.handle, health + (self[105] or 0))
1612
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1513
1613
  end
1514
1614
  },
1515
1615
  true
@@ -1585,25 +1685,12 @@ __TS__SetDescriptor(
1585
1685
  },
1586
1686
  true
1587
1687
  )
1588
- __TS__SetDescriptor(
1589
- Unit.prototype,
1590
- "flyHeight",
1591
- {
1592
- get = function(self)
1593
- return getUnitFlyHeight(self.handle)
1594
- end,
1595
- set = function(self, v)
1596
- SetUnitFlyHeight(self.handle, v, 100000)
1597
- end
1598
- },
1599
- true
1600
- )
1601
1688
  __TS__SetDescriptor(
1602
1689
  Unit.prototype,
1603
1690
  "x",
1604
1691
  {
1605
1692
  get = function(self)
1606
- return self[107] or getUnitX(self.handle)
1693
+ return self[108] or getUnitX(self.handle)
1607
1694
  end,
1608
1695
  set = function(self, v)
1609
1696
  SetUnitX(self.handle, v)
@@ -1616,7 +1703,7 @@ __TS__SetDescriptor(
1616
1703
  "y",
1617
1704
  {
1618
1705
  get = function(self)
1619
- return self[108] or getUnitY(self.handle)
1706
+ return self[109] or getUnitY(self.handle)
1620
1707
  end,
1621
1708
  set = function(self, v)
1622
1709
  SetUnitY(self.handle, v)
@@ -1702,10 +1789,10 @@ __TS__SetDescriptor(
1702
1789
  "gold",
1703
1790
  {
1704
1791
  get = function(self)
1705
- return getResourceAmount(self.handle)
1792
+ return GetResourceAmount(self.handle)
1706
1793
  end,
1707
1794
  set = function(self, gold)
1708
- setResourceAmount(self.handle, gold)
1795
+ SetResourceAmount(self.handle, gold)
1709
1796
  end
1710
1797
  },
1711
1798
  true
@@ -1721,14 +1808,18 @@ __TS__SetDescriptor(
1721
1808
  local handle = self.handle
1722
1809
  if isPaused and not IsUnitPaused(handle) then
1723
1810
  self[101] = true
1724
- for _ = self[102] or 0, -1 do
1725
- BlzPauseUnitEx(handle, true)
1811
+ if (self[103] or 0) <= 0 then
1812
+ for _ = self[102] or 0, -1 do
1813
+ BlzPauseUnitEx(handle, true)
1814
+ end
1726
1815
  end
1727
1816
  PauseUnit(handle, true)
1728
1817
  elseif not isPaused and IsUnitPaused(handle) then
1729
1818
  PauseUnit(handle, false)
1730
- for _ = self[102] or 0, -1 do
1731
- BlzPauseUnitEx(handle, false)
1819
+ if (self[103] or 0) <= 0 then
1820
+ for _ = self[102] or 0, -1 do
1821
+ BlzPauseUnitEx(handle, false)
1822
+ end
1732
1823
  end
1733
1824
  self[101] = nil
1734
1825
  end
@@ -1786,20 +1877,6 @@ __TS__SetDescriptor(
1786
1877
  },
1787
1878
  true
1788
1879
  )
1789
- __TS__SetDescriptor(
1790
- Unit.prototype,
1791
- "scale",
1792
- {
1793
- get = function(self)
1794
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1795
- end,
1796
- set = function(self, v)
1797
- setUnitScale(self.handle, v, v, v)
1798
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1799
- end
1800
- },
1801
- true
1802
- )
1803
1880
  __TS__SetDescriptor(
1804
1881
  Unit.prototype,
1805
1882
  "timeScale",
@@ -1833,6 +1910,19 @@ __TS__SetDescriptor(
1833
1910
  end},
1834
1911
  true
1835
1912
  )
1913
+ __TS__SetDescriptor(
1914
+ Unit.prototype,
1915
+ "movementType",
1916
+ {
1917
+ get = function(self)
1918
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1919
+ end,
1920
+ set = function(self, movementType)
1921
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1922
+ end
1923
+ },
1924
+ true
1925
+ )
1836
1926
  __TS__SetDescriptor(
1837
1927
  Unit.prototype,
1838
1928
  "pathing",
@@ -2014,6 +2104,14 @@ __TS__SetDescriptor(
2014
2104
  end},
2015
2105
  true
2016
2106
  )
2107
+ __TS__SetDescriptor(
2108
+ Unit.prototype,
2109
+ "targetAcquiredEvent",
2110
+ {get = function(self)
2111
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2112
+ end},
2113
+ true
2114
+ )
2017
2115
  __TS__SetDescriptor(
2018
2116
  Unit.prototype,
2019
2117
  "onSelect",
@@ -2149,25 +2247,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2149
2247
  InitializingEvent,
2150
2248
  function(event)
2151
2249
  local function listener(unit, id)
2152
- local ____GetSpellTargetUnit_result_9
2250
+ local ____GetSpellTargetUnit_result_10
2153
2251
  if GetSpellTargetUnit() then
2154
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2252
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2155
2253
  else
2156
- local ____GetSpellTargetItem_result_8
2254
+ local ____GetSpellTargetItem_result_9
2157
2255
  if GetSpellTargetItem() then
2158
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2256
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2159
2257
  else
2160
- local ____GetSpellTargetDestructable_result_7
2258
+ local ____GetSpellTargetDestructable_result_8
2161
2259
  if GetSpellTargetDestructable() then
2162
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2260
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2163
2261
  else
2164
- ____GetSpellTargetDestructable_result_7 = nil
2262
+ ____GetSpellTargetDestructable_result_8 = nil
2165
2263
  end
2166
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2264
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2167
2265
  end
2168
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2266
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2169
2267
  end
2170
- local target = ____GetSpellTargetUnit_result_9
2268
+ local target = ____GetSpellTargetUnit_result_10
2171
2269
  if target then
2172
2270
  invoke(event, unit, id, target)
2173
2271
  end
@@ -2375,38 +2473,57 @@ Unit.onDamaging = (function()
2375
2473
  if source and source.typeId == dummyUnitId then
2376
2474
  source = nil
2377
2475
  end
2378
- local target = BlzGetEventDamageTarget()
2476
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2477
+ local metadata = damageMetadataByTarget[target]
2478
+ damageMetadataByTarget[target] = nil
2379
2479
  local data = {
2380
2480
  amount = GetEventDamage(),
2381
- attackType = BlzGetEventAttackType(),
2481
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2382
2482
  damageType = BlzGetEventDamageType(),
2383
2483
  weaponType = BlzGetEventWeaponType(),
2384
- isAttack = BlzGetEventIsAttack()
2484
+ metadata = metadata,
2485
+ isAttack = BlzGetEventIsAttack(),
2486
+ originalAmount = GetEventDamage(),
2487
+ originalMetadata = metadata,
2488
+ preventRetaliation = damagingEventPreventRetaliation
2385
2489
  }
2386
2490
  if data.isAttack and source then
2387
- local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
2388
- if weapon == -1 then
2389
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2390
- weapon = 0
2391
- end
2392
- data.weapon = assert(source.weapons[weapon + 1])
2491
+ data.weapon = source:chooseWeapon(target)
2393
2492
  end
2394
2493
  if not data.isAttack or not source or not source._attackHandlers then
2395
2494
  invoke(
2396
2495
  event,
2397
2496
  source,
2398
- ____exports.Unit:of(target),
2497
+ target,
2399
2498
  setmetatable(
2400
2499
  {},
2401
2500
  {
2402
2501
  __index = data,
2403
2502
  __newindex = function(self, key, value)
2404
- damageSetters[key](value)
2503
+ local damageSetter = damageSetters[key]
2504
+ if damageSetter ~= nil then
2505
+ damageSetter(value)
2506
+ end
2405
2507
  data[key] = value
2406
2508
  end
2407
2509
  }
2408
2510
  )
2409
2511
  )
2512
+ if data[0] and source then
2513
+ local sourceOwner = source.owner.handle
2514
+ data[1] = sourceOwner
2515
+ local targetOwner = target.owner.handle
2516
+ data[2] = targetOwner
2517
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2518
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2519
+ data[3] = true
2520
+ end
2521
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2522
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2523
+ data[4] = true
2524
+ end
2525
+ end
2526
+ damagingEventByTarget[target] = data
2410
2527
  return
2411
2528
  end
2412
2529
  BlzSetEventDamage(0)
@@ -2414,7 +2531,7 @@ Unit.onDamaging = (function()
2414
2531
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2415
2532
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2416
2533
  local sourceOwner = source.owner.handle
2417
- local targetOwner = GetOwningPlayer(target)
2534
+ local targetOwner = target.owner.handle
2418
2535
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2419
2536
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2420
2537
  Timer:run(function()
@@ -2430,23 +2547,19 @@ Unit.onDamaging = (function()
2430
2547
  for ____, ____value in ipairs(source._attackHandlers) do
2431
2548
  local condition = ____value[1]
2432
2549
  local action = ____value[2]
2433
- if condition(
2434
- source,
2435
- ____exports.Unit:of(target),
2436
- data
2437
- ) then
2550
+ if condition(source, target, data) then
2438
2551
  action(
2439
2552
  source,
2440
- ____exports.Unit:of(target),
2553
+ target,
2441
2554
  setmetatable(
2442
2555
  {fire = function()
2443
2556
  UnitDamageTarget(
2444
2557
  source.handle,
2445
- target,
2558
+ target.handle,
2446
2559
  data.amount,
2447
2560
  true,
2448
2561
  true,
2449
- data.attackType,
2562
+ attackTypeToNative(data.attackType),
2450
2563
  data.damageType,
2451
2564
  data.weaponType
2452
2565
  )
@@ -2473,30 +2586,54 @@ Unit.onDamage = __TS__New(
2473
2586
  if source and source.typeId == dummyUnitId then
2474
2587
  source = nil
2475
2588
  end
2589
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2590
+ local damagingEvent = damagingEventByTarget[target]
2591
+ damagingEventByTarget[target] = nil
2476
2592
  local data = {
2477
2593
  amount = GetEventDamage(),
2478
- attackType = BlzGetEventAttackType(),
2594
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2479
2595
  damageType = BlzGetEventDamageType(),
2480
2596
  weaponType = BlzGetEventWeaponType(),
2597
+ metadata = damagingEvent and damagingEvent.metadata,
2481
2598
  isAttack = BlzGetEventIsAttack(),
2482
- originalAmount = GetEventDamage(),
2599
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2600
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2483
2601
  preventDeath = damageEventPreventDeath
2484
2602
  }
2603
+ if damagingEvent then
2604
+ for key, value in pairs(damagingEvent) do
2605
+ if isAttribute(key) then
2606
+ data[key] = value
2607
+ end
2608
+ end
2609
+ local sourceOwner = damagingEvent[1]
2610
+ if sourceOwner then
2611
+ local targetOwner = damagingEvent[2]
2612
+ if damagingEvent[3] then
2613
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2614
+ end
2615
+ if damagingEvent[4] then
2616
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2617
+ end
2618
+ end
2619
+ end
2485
2620
  local evData = setmetatable(
2486
2621
  {},
2487
2622
  {
2488
2623
  __index = data,
2489
2624
  __newindex = function(self, key, value)
2490
- damageSetters[key](value)
2625
+ local damageSetter = damageSetters[key]
2626
+ if damageSetter ~= nil then
2627
+ damageSetter(value)
2628
+ end
2491
2629
  data[key] = value
2492
2630
  end
2493
2631
  }
2494
2632
  )
2495
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2496
2633
  invoke(event, source, target, evData)
2497
2634
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2498
2635
  local bonusHealth = math.ceil(evData.amount)
2499
- target[105] = (target[105] or 0) + bonusHealth
2636
+ target[106] = (target[106] or 0) + bonusHealth
2500
2637
  BlzSetUnitMaxHP(
2501
2638
  target.handle,
2502
2639
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2510,7 +2647,7 @@ Unit.onDamage = __TS__New(
2510
2647
  evData[0],
2511
2648
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2512
2649
  )
2513
- target[105] = (target[105] or 0) - bonusHealth
2650
+ target[106] = (target[106] or 0) - bonusHealth
2514
2651
  SetWidgetLife(
2515
2652
  target.handle,
2516
2653
  GetWidgetLife(target.handle) - bonusHealth
@@ -2546,10 +2683,14 @@ Unit.itemPickedUpEvent = __TS__New(
2546
2683
  ____exports.UnitTriggerEvent,
2547
2684
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2548
2685
  function()
2549
- local unit = getTriggerUnit()
2550
- local item = getManipulatedItem()
2551
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2552
- return ____exports.Unit:of(unit), Item:of(item)
2686
+ local unitHandle = getTriggerUnit()
2687
+ local itemHandle = getManipulatedItem()
2688
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2689
+ local unit = ____exports.Unit:of(unitHandle)
2690
+ local item = Item:of(itemHandle)
2691
+ if item.owner ~= unit then
2692
+ return unit, item
2693
+ end
2553
2694
  end
2554
2695
  return IgnoreEvent
2555
2696
  end
@@ -2569,7 +2710,22 @@ Unit.itemUsedEvent = __TS__New(
2569
2710
  Unit.itemStackedEvent = __TS__New(
2570
2711
  ____exports.UnitTriggerEvent,
2571
2712
  EVENT_PLAYER_UNIT_STACK_ITEM,
2572
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2713
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2714
+ )
2715
+ __TS__ObjectDefineProperty(
2716
+ Unit,
2717
+ "itemChargesChangedEvent",
2718
+ {get = function(self)
2719
+ local event = __TS__New(Event)
2720
+ Item.chargesChangedEvent:addListener(function(item)
2721
+ local unit = item.owner
2722
+ if unit ~= nil then
2723
+ invoke(event, unit, item)
2724
+ end
2725
+ end)
2726
+ rawset(self, "itemChargesChangedEvent", event)
2727
+ return event
2728
+ end}
2573
2729
  )
2574
2730
  __TS__ObjectDefineProperty(
2575
2731
  Unit,
@@ -2641,6 +2797,10 @@ __TS__ObjectDefineProperty(
2641
2797
  rawset(self, "destroyEvent", destroyEvent)
2642
2798
  return destroyEvent
2643
2799
  end}
2800
+ )
2801
+ Unit.synchronize = synchronizer(
2802
+ function(unit) return unit.syncId end,
2803
+ function(syncId) return unitBySyncId[syncId] end
2644
2804
  );
2645
2805
  (function(self)
2646
2806
  local leaveAbilityIds = postcompile(function()