warscript 0.0.1-dev.e4a5fce → 0.0.1-dev.e5e97e8

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 (188) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +2 -3
  6. package/core/types/effect.lua +95 -48
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.d.ts +15 -0
  9. package/core/types/player.lua +56 -14
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +123 -5
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/tileCell.d.ts +9 -0
  15. package/core/types/tileCell.lua +92 -0
  16. package/core/types/timer.d.ts +9 -8
  17. package/core/types/timer.lua +45 -23
  18. package/core/util.d.ts +1 -1
  19. package/core/util.lua +12 -1
  20. package/decl/native.d.ts +846 -790
  21. package/engine/behavior.d.ts +5 -0
  22. package/engine/behavior.lua +106 -27
  23. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  24. package/engine/behaviour/ability/apply-buff.lua +32 -0
  25. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  26. package/engine/behaviour/ability/damage.d.ts +9 -3
  27. package/engine/behaviour/ability/damage.lua +26 -38
  28. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  29. package/engine/behaviour/ability/emulate-impact.lua +22 -9
  30. package/engine/behaviour/ability/on-command-impact.lua +7 -0
  31. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  32. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  33. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  34. package/engine/behaviour/ability/restore-mana.lua +6 -6
  35. package/engine/behaviour/ability.d.ts +12 -3
  36. package/engine/behaviour/ability.lua +74 -24
  37. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  38. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  39. package/engine/behaviour/unit.d.ts +34 -0
  40. package/engine/behaviour/unit.lua +190 -4
  41. package/engine/buff.d.ts +57 -44
  42. package/engine/buff.lua +278 -226
  43. package/engine/internal/ability.d.ts +18 -2
  44. package/engine/internal/ability.lua +116 -11
  45. package/engine/internal/item/ability.lua +162 -4
  46. package/engine/internal/item+owner.lua +12 -6
  47. package/engine/internal/item.d.ts +20 -19
  48. package/engine/internal/item.lua +191 -74
  49. package/engine/internal/mechanics/ability-duration.lua +1 -1
  50. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  51. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  52. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  53. package/engine/internal/misc/frame-coordinates.lua +21 -0
  54. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  55. package/engine/internal/misc/get-terrain-z.lua +11 -0
  56. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  57. package/engine/internal/misc/player-local-handle.lua +5 -0
  58. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  59. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  60. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  61. package/engine/internal/object-data/evasion-probability.lua +16 -0
  62. package/engine/internal/unit/ability.d.ts +35 -0
  63. package/engine/internal/unit/ability.lua +98 -9
  64. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  65. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  66. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  67. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  68. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  69. package/engine/internal/unit/allowed-targets.lua +9 -1
  70. package/engine/internal/unit/bonus.d.ts +2 -0
  71. package/engine/internal/unit/bonus.lua +17 -0
  72. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  73. package/engine/internal/unit/ignore-events-items.lua +5 -0
  74. package/engine/internal/unit/item.lua +6 -12
  75. package/engine/internal/unit/main-selected.lua +12 -27
  76. package/engine/internal/unit/order.d.ts +20 -0
  77. package/engine/internal/unit/order.lua +136 -0
  78. package/engine/internal/unit+ability.lua +10 -1
  79. package/engine/internal/unit+damage.d.ts +2 -11
  80. package/engine/internal/unit+damage.lua +10 -14
  81. package/engine/internal/unit+spellSteal.lua +1 -2
  82. package/engine/internal/unit-missile-launch.lua +45 -14
  83. package/engine/internal/unit.d.ts +45 -14
  84. package/engine/internal/unit.lua +391 -148
  85. package/engine/internal/utility.lua +12 -0
  86. package/engine/lightning.d.ts +12 -5
  87. package/engine/lightning.lua +48 -14
  88. package/engine/local-client.d.ts +2 -0
  89. package/engine/local-client.lua +30 -0
  90. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  91. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  92. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  93. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  94. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  95. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  96. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  97. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  98. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  99. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  100. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  101. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  102. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  103. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  104. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  105. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  106. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  107. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  108. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  109. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  110. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  111. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  112. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  113. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  114. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  115. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  116. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  117. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  118. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  119. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  120. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  121. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  122. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  123. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  124. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  125. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  126. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  127. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  128. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  129. package/engine/object-data/entry/ability-type/web.lua +52 -0
  130. package/engine/object-data/entry/ability-type.d.ts +19 -17
  131. package/engine/object-data/entry/ability-type.lua +93 -36
  132. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  133. package/engine/object-data/entry/buff-type.d.ts +6 -12
  134. package/engine/object-data/entry/buff-type.lua +13 -29
  135. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  136. package/engine/object-data/entry/item-type.d.ts +3 -1
  137. package/engine/object-data/entry/item-type.lua +15 -2
  138. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  139. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  140. package/engine/object-data/entry/sound-preset.lua +140 -0
  141. package/engine/object-data/entry/unit-type.d.ts +21 -5
  142. package/engine/object-data/entry/unit-type.lua +214 -93
  143. package/engine/object-data/entry/upgrade.d.ts +1 -1
  144. package/engine/object-data/entry/upgrade.lua +4 -4
  145. package/engine/object-data/entry.d.ts +16 -14
  146. package/engine/object-data/entry.lua +60 -32
  147. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  148. package/engine/object-field/ability.d.ts +8 -5
  149. package/engine/object-field/ability.lua +8 -4
  150. package/engine/object-field/unit.d.ts +57 -3
  151. package/engine/object-field/unit.lua +207 -7
  152. package/engine/object-field.d.ts +23 -6
  153. package/engine/object-field.lua +303 -114
  154. package/engine/random.d.ts +9 -0
  155. package/engine/random.lua +13 -0
  156. package/engine/standard/entries/buff-type.d.ts +3 -0
  157. package/engine/standard/entries/buff-type.lua +3 -0
  158. package/engine/standard/entries/sound-preset.d.ts +10 -0
  159. package/engine/standard/entries/sound-preset.lua +10 -0
  160. package/engine/standard/fields/unit.d.ts +4 -0
  161. package/engine/standard/fields/unit.lua +7 -0
  162. package/engine/synchronization.d.ts +11 -0
  163. package/engine/synchronization.lua +77 -0
  164. package/engine/text-tag.d.ts +36 -2
  165. package/engine/text-tag.lua +250 -10
  166. package/engine/unit.d.ts +2 -0
  167. package/engine/unit.lua +2 -0
  168. package/net/socket.lua +1 -1
  169. package/objutil/buff.lua +2 -3
  170. package/objutil/unit.lua +8 -0
  171. package/package.json +2 -2
  172. package/patch-lualib.lua +1 -1
  173. package/utility/arrays.d.ts +2 -0
  174. package/utility/arrays.lua +11 -0
  175. package/utility/callback-array.d.ts +17 -0
  176. package/utility/callback-array.lua +61 -0
  177. package/utility/functions.d.ts +8 -0
  178. package/utility/functions.lua +13 -0
  179. package/utility/linked-set.d.ts +2 -0
  180. package/utility/linked-set.lua +22 -1
  181. package/utility/lua-maps.d.ts +15 -2
  182. package/utility/lua-maps.lua +53 -2
  183. package/utility/lua-sets.d.ts +2 -0
  184. package/utility/lua-sets.lua +7 -0
  185. package/utility/reflection.lua +11 -7
  186. package/utility/types.d.ts +3 -0
  187. package/core/types/order.d.ts +0 -25
  188. package/core/types/order.lua +0 -55
@@ -51,12 +51,23 @@ local ____arrays = require("utility.arrays")
51
51
  local forEach = ____arrays.forEach
52
52
  local ____math = require("math")
53
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
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
54
67
  local match = string.match
55
68
  local ____tostring = _G.tostring
56
69
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
71
  local getUnitIntegerField = BlzGetUnitIntegerField
61
72
  local getUnitRealField = BlzGetUnitRealField
62
73
  local getHeroStr = GetHeroStr
@@ -75,9 +86,9 @@ local setUnitScale = SetUnitScale
75
86
  local setUnitPosition = SetUnitPosition
76
87
  local setUnitTimeScale = SetUnitTimeScale
77
88
  local getHandleId = GetHandleId
89
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
90
  local createUnit = CreateUnit
79
91
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
92
  local removeUnit = RemoveUnit
82
93
  local getUnitTypeId = GetUnitTypeId
83
94
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +104,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
104
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
105
  local isUnitInRangeXY = IsUnitInRangeXY
95
106
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
107
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
108
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
109
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -118,15 +127,9 @@ local getOrderedUnit = GetOrderedUnit
118
127
  local getIssuedOrderId = GetIssuedOrderId
119
128
  local isUnitInvulnerable = BlzIsUnitInvulnerable
120
129
  local unitAlive = UnitAlive
121
- local unitAddType = UnitAddType
122
- local unitRemoveType = UnitRemoveType
123
- local isUnitIllusion = IsUnitIllusion
124
- local isUnitType = IsUnitType
125
130
  local isUnitAlly = IsUnitAlly
126
131
  local isUnitEnemy = IsUnitEnemy
127
132
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
133
  ____exports.UnitClassification = {}
131
134
  local UnitClassification = ____exports.UnitClassification
132
135
  do
@@ -136,6 +139,7 @@ do
136
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -343,6 +347,9 @@ local function dispatchAbility(event)
343
347
  }
344
348
  )
345
349
  end
350
+ local function damagingEventPreventRetaliation(self)
351
+ self[0] = true
352
+ end
346
353
  local function damageEventPreventDeath(self, callback, ...)
347
354
  if self[0] ~= nil then
348
355
  return
@@ -354,7 +361,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
361
  rawset(self, 1 + i, (select(i, ...)))
355
362
  end
356
363
  end
357
- 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
+ }
358
372
  local jlimitopByOperator = {
359
373
  [0] = LESS_THAN_OR_EQUAL,
360
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -398,6 +412,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
398
412
  self.unit = unit
399
413
  self.index = index
400
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
+ )
401
428
  __TS__SetDescriptor(
402
429
  UnitWeapon.prototype,
403
430
  "cooldown",
@@ -432,6 +459,19 @@ __TS__SetDescriptor(
432
459
  },
433
460
  true
434
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
+ )
435
475
  __TS__SetDescriptor(
436
476
  UnitWeapon.prototype,
437
477
  "damageBase",
@@ -619,15 +659,15 @@ for ____, player in ipairs(Player.all) do
619
659
  dummies[player] = dummy
620
660
  end
621
661
  local function delayHealthChecksCallback(unit)
622
- local counter = (unit[103] or 0) - 1
662
+ local counter = (unit[104] or 0) - 1
623
663
  if counter ~= 0 then
624
- unit[103] = counter
664
+ unit[104] = counter
625
665
  return
626
666
  end
627
- unit[103] = nil
628
- local healthBonus = unit[104]
667
+ unit[104] = nil
668
+ local healthBonus = unit[105]
629
669
  if healthBonus ~= nil then
630
- unit[104] = nil
670
+ unit[105] = nil
631
671
  local handle = unit.handle
632
672
  BlzSetUnitMaxHP(
633
673
  handle,
@@ -636,16 +676,26 @@ local function delayHealthChecksCallback(unit)
636
676
  end
637
677
  end
638
678
  local nextSyncId = 1
639
- 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
640
690
  ____exports.Unit = __TS__Class()
641
691
  local Unit = ____exports.Unit
642
692
  Unit.name = "Unit"
643
693
  __TS__ClassExtends(Unit, Handle)
644
694
  function Unit.prototype.____constructor(self, handle)
645
695
  Handle.prototype.____constructor(self, handle)
646
- local ____nextSyncId_0 = nextSyncId
647
- nextSyncId = ____nextSyncId_0 + 1
648
- self.syncId = ____nextSyncId_0
696
+ local ____nextSyncId_1 = nextSyncId
697
+ nextSyncId = ____nextSyncId_1 + 1
698
+ self.syncId = ____nextSyncId_1
649
699
  self._owner = Player:of(getOwningPlayer(handle))
650
700
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
651
701
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -677,6 +727,8 @@ function Unit.prototype.getEvent(self, event, collector)
677
727
  end
678
728
  function Unit.prototype.onDestroy(self)
679
729
  local handle = self.handle
730
+ self[108] = getUnitX(handle)
731
+ self[109] = getUnitY(handle)
680
732
  if not self._owner then
681
733
  self._owner = Player:of(getOwningPlayer(handle))
682
734
  end
@@ -744,17 +796,17 @@ function Unit.prototype.addModifier(self, property, modifier)
744
796
  end}
745
797
  end
746
798
  function Unit.prototype.hasCombatClassification(self, combatClassification)
747
- local ____combatClassification_1 = combatClassification
748
- 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
749
801
  end
750
802
  function Unit.prototype.addClassification(self, classification)
751
- return unitAddType(self.handle, classification)
803
+ return UnitAddType(self.handle, classification)
752
804
  end
753
805
  function Unit.prototype.removeClassification(self, classification)
754
- return unitRemoveType(self.handle, classification)
806
+ return UnitRemoveType(self.handle, classification)
755
807
  end
756
808
  function Unit.prototype.hasClassification(self, classification)
757
- return isUnitType(self.handle, classification)
809
+ return IsUnitType(self.handle, classification)
758
810
  end
759
811
  function Unit.prototype.isVisibleTo(self, player)
760
812
  return isUnitVisible(self.handle, player.handle)
@@ -763,13 +815,13 @@ function Unit.prototype.isInvisibleTo(self, player)
763
815
  return isUnitInvisible(self.handle, player.handle)
764
816
  end
765
817
  function Unit.prototype.isInRangeOf(self, x, y, range)
766
- local ____temp_2
818
+ local ____temp_3
767
819
  if type(x) == "number" then
768
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
820
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
769
821
  else
770
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
822
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
771
823
  end
772
- return ____temp_2
824
+ return ____temp_3
773
825
  end
774
826
  function Unit.prototype.isAllyOf(self, unit)
775
827
  return isUnitAlly(
@@ -787,16 +839,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
787
839
  if type(animation) == "number" then
788
840
  setUnitAnimationByIndex(self.handle, animation)
789
841
  elseif rarity then
790
- setUnitAnimationWithRarity(self.handle, animation, rarity)
842
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
791
843
  else
792
844
  setUnitAnimation(self.handle, animation)
793
845
  end
794
846
  end
847
+ function Unit.prototype.resetAnimation(self)
848
+ ResetUnitAnimation(self.handle)
849
+ end
795
850
  function Unit.prototype.queueAnimation(self, animation)
796
- 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
797
863
  end
798
864
  function Unit.prototype.delayHealthChecks(self)
799
- self[103] = (self[103] or 0) + 1
865
+ self[104] = (self[104] or 0) + 1
800
866
  Timer:run(delayHealthChecksCallback, self)
801
867
  end
802
868
  function Unit.prototype.setPosition(self, x, y)
@@ -806,21 +872,21 @@ function Unit.prototype.isSelected(self, player)
806
872
  return IsUnitSelected(self.handle, player.handle)
807
873
  end
808
874
  function Unit.prototype.explode(self)
809
- setUnitExploded(self.handle, true)
875
+ SetUnitExploded(self.handle, true)
810
876
  killUnit(self.handle)
811
877
  end
812
878
  function Unit.prototype.kill(self)
813
879
  killUnit(self.handle)
814
880
  end
815
881
  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
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
821
887
  end
822
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
888
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
889
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
824
890
  end
825
891
  function Unit.prototype.healTarget(self, target, amount)
826
892
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,17 +929,16 @@ function Unit.prototype.itemInSlot(self, slot)
863
929
  return Item:of(unitItemInSlot(self.handle, slot))
864
930
  end
865
931
  function Unit.prototype.addAbility(self, abilityId)
866
- if unitAddAbility(self.handle, abilityId) then
867
- local ability = UnitAbility:of(
868
- checkNotNull(getUnitAbility(self.handle, abilityId)),
869
- abilityId,
870
- self
871
- )
932
+ local ability = UnitAbility:of(
933
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
934
+ abilityId,
935
+ self
936
+ )
937
+ if ability ~= nil then
872
938
  local abilities = self.abilities
873
939
  abilities[#abilities + 1] = ability
874
- return ability
875
940
  end
876
- return nil
941
+ return ability
877
942
  end
878
943
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
879
944
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -887,31 +952,21 @@ end
887
952
  function Unit.prototype.hasAbility(self, abilityId)
888
953
  return getUnitAbilityLevel(self.handle, abilityId) > 0
889
954
  end
890
- function Unit.prototype.getAbilityById(self, abilityId)
891
- local handle = self.handle
892
- if unitAddAbility(handle, abilityId) then
893
- assert(unitRemoveAbility(handle, abilityId))
894
- return nil
895
- end
896
- return UnitAbility:of(
897
- getUnitAbility(self.handle, abilityId),
898
- abilityId,
899
- self
900
- )
955
+ function Unit.prototype.getAbility(self, abilityId)
956
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
957
+ return UnitAbility:of(ability, abilityId, self)
901
958
  end
902
- function Unit.prototype.removeAbility(self, abilityId)
903
- if unitRemoveAbility(self.handle, abilityId) then
904
- local abilities = self.abilities
905
- for i = 1, #abilities do
906
- if abilities[i].typeId == abilityId then
907
- abilities[i]:destroy()
908
- tremove(abilities, i)
909
- return true
910
- 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
911
967
  end
912
- return true
913
968
  end
914
- return false
969
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
915
970
  end
916
971
  function Unit.prototype.hideAbility(self, abilityId, flag)
917
972
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -925,12 +980,34 @@ end
925
980
  function Unit.prototype.endAbilityCooldown(self, abilityId)
926
981
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
927
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
928
998
  function Unit.prototype.interruptAttack(self)
929
999
  unitInterruptAttack(self.handle)
930
1000
  end
931
1001
  function Unit.prototype.interruptCast(self, abilityId)
932
- unitDisableAbility(self.handle, abilityId, true, false)
933
- unitDisableAbility(self.handle, abilityId, false, false)
1002
+ local handle = self.handle
1003
+ unitDisableAbility(handle, abilityId, true, false)
1004
+ Timer:run(
1005
+ unitDisableAbility,
1006
+ handle,
1007
+ abilityId,
1008
+ false,
1009
+ false
1010
+ )
934
1011
  end
935
1012
  function Unit.prototype.getDistanceTo(self, target)
936
1013
  local handle = self.handle
@@ -991,18 +1068,44 @@ function Unit.prototype.unpauseEx(self)
991
1068
  end
992
1069
  function Unit.prototype.incrementStunCounter(self)
993
1070
  local stunCounter = self[102] or 0
994
- if not self[101] or stunCounter >= 0 then
1071
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
995
1072
  BlzPauseUnitEx(self.handle, true)
996
1073
  end
997
1074
  self[102] = stunCounter + 1
998
1075
  end
999
1076
  function Unit.prototype.decrementStunCounter(self)
1000
1077
  local stunCounter = self[102] or 0
1001
- if not self[101] or stunCounter >= 1 then
1078
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1002
1079
  BlzPauseUnitEx(self.handle, false)
1003
1080
  end
1004
1081
  self[102] = stunCounter - 1
1005
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
1006
1109
  function Unit.create(self, owner, id, x, y, facing, skinId)
1007
1110
  local handle = skinId and BlzCreateUnitWithSkin(
1008
1111
  owner.handle,
@@ -1191,7 +1294,15 @@ __TS__SetDescriptor(
1191
1294
  Unit.prototype,
1192
1295
  "isIllusion",
1193
1296
  {get = function(self)
1194
- return isUnitIllusion(self.handle)
1297
+ return IsUnitIllusion(self.handle)
1298
+ end},
1299
+ true
1300
+ )
1301
+ __TS__SetDescriptor(
1302
+ Unit.prototype,
1303
+ "isStunned",
1304
+ {get = function(self)
1305
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1195
1306
  end},
1196
1307
  true
1197
1308
  )
@@ -1268,6 +1379,19 @@ __TS__SetDescriptor(
1268
1379
  },
1269
1380
  true
1270
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
+ )
1271
1395
  __TS__SetDescriptor(
1272
1396
  Unit.prototype,
1273
1397
  "strengthBase",
@@ -1389,17 +1513,17 @@ __TS__SetDescriptor(
1389
1513
  "isTeamGlowVisible",
1390
1514
  {
1391
1515
  get = function(self)
1392
- return not self[106]
1516
+ return not self[107]
1393
1517
  end,
1394
1518
  set = function(self, isTeamGlowVisible)
1395
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1396
- local ____temp_6
1519
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1520
+ local ____temp_7
1397
1521
  if not isTeamGlowVisible then
1398
- ____temp_6 = true
1522
+ ____temp_7 = true
1399
1523
  else
1400
- ____temp_6 = nil
1524
+ ____temp_7 = nil
1401
1525
  end
1402
- self[106] = ____temp_6
1526
+ self[107] = ____temp_7
1403
1527
  end
1404
1528
  },
1405
1529
  true
@@ -1408,9 +1532,9 @@ __TS__SetDescriptor(
1408
1532
  Unit.prototype,
1409
1533
  "color",
1410
1534
  {set = function(self, color)
1411
- setUnitColor(self.handle, color.handle)
1412
- if self[106] then
1413
- showUnitTeamGlow(self.handle, false)
1535
+ SetUnitColor(self.handle, color.handle)
1536
+ if self[107] then
1537
+ BlzShowUnitTeamGlow(self.handle, false)
1414
1538
  end
1415
1539
  end},
1416
1540
  true
@@ -1433,14 +1557,14 @@ __TS__SetDescriptor(
1433
1557
  "maxHealth",
1434
1558
  {
1435
1559
  get = function(self)
1436
- 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)
1437
1561
  end,
1438
1562
  set = function(self, maxHealth)
1439
- if maxHealth < 1 and self[103] ~= nil then
1440
- 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)
1441
1565
  maxHealth = 1
1442
1566
  end
1443
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1567
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1444
1568
  end
1445
1569
  },
1446
1570
  true
@@ -1482,10 +1606,10 @@ __TS__SetDescriptor(
1482
1606
  "health",
1483
1607
  {
1484
1608
  get = function(self)
1485
- return GetWidgetLife(self.handle) - (self[105] or 0)
1609
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1486
1610
  end,
1487
1611
  set = function(self, health)
1488
- SetWidgetLife(self.handle, health + (self[105] or 0))
1612
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1489
1613
  end
1490
1614
  },
1491
1615
  true
@@ -1579,7 +1703,7 @@ __TS__SetDescriptor(
1579
1703
  "x",
1580
1704
  {
1581
1705
  get = function(self)
1582
- return getUnitX(self.handle)
1706
+ return self[108] or getUnitX(self.handle)
1583
1707
  end,
1584
1708
  set = function(self, v)
1585
1709
  SetUnitX(self.handle, v)
@@ -1592,7 +1716,7 @@ __TS__SetDescriptor(
1592
1716
  "y",
1593
1717
  {
1594
1718
  get = function(self)
1595
- return getUnitY(self.handle)
1719
+ return self[109] or getUnitY(self.handle)
1596
1720
  end,
1597
1721
  set = function(self, v)
1598
1722
  SetUnitY(self.handle, v)
@@ -1678,10 +1802,10 @@ __TS__SetDescriptor(
1678
1802
  "gold",
1679
1803
  {
1680
1804
  get = function(self)
1681
- return getResourceAmount(self.handle)
1805
+ return GetResourceAmount(self.handle)
1682
1806
  end,
1683
1807
  set = function(self, gold)
1684
- setResourceAmount(self.handle, gold)
1808
+ SetResourceAmount(self.handle, gold)
1685
1809
  end
1686
1810
  },
1687
1811
  true
@@ -1697,14 +1821,18 @@ __TS__SetDescriptor(
1697
1821
  local handle = self.handle
1698
1822
  if isPaused and not IsUnitPaused(handle) then
1699
1823
  self[101] = true
1700
- for _ = self[102] or 0, -1 do
1701
- BlzPauseUnitEx(handle, true)
1824
+ if (self[103] or 0) <= 0 then
1825
+ for _ = self[102] or 0, -1 do
1826
+ BlzPauseUnitEx(handle, true)
1827
+ end
1702
1828
  end
1703
1829
  PauseUnit(handle, true)
1704
1830
  elseif not isPaused and IsUnitPaused(handle) then
1705
1831
  PauseUnit(handle, false)
1706
- for _ = self[102] or 0, -1 do
1707
- BlzPauseUnitEx(handle, false)
1832
+ if (self[103] or 0) <= 0 then
1833
+ for _ = self[102] or 0, -1 do
1834
+ BlzPauseUnitEx(handle, false)
1835
+ end
1708
1836
  end
1709
1837
  self[101] = nil
1710
1838
  end
@@ -1809,6 +1937,19 @@ __TS__SetDescriptor(
1809
1937
  end},
1810
1938
  true
1811
1939
  )
1940
+ __TS__SetDescriptor(
1941
+ Unit.prototype,
1942
+ "movementType",
1943
+ {
1944
+ get = function(self)
1945
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1946
+ end,
1947
+ set = function(self, movementType)
1948
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1949
+ end
1950
+ },
1951
+ true
1952
+ )
1812
1953
  __TS__SetDescriptor(
1813
1954
  Unit.prototype,
1814
1955
  "pathing",
@@ -1990,6 +2131,14 @@ __TS__SetDescriptor(
1990
2131
  end},
1991
2132
  true
1992
2133
  )
2134
+ __TS__SetDescriptor(
2135
+ Unit.prototype,
2136
+ "targetAcquiredEvent",
2137
+ {get = function(self)
2138
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2139
+ end},
2140
+ true
2141
+ )
1993
2142
  __TS__SetDescriptor(
1994
2143
  Unit.prototype,
1995
2144
  "onSelect",
@@ -2125,25 +2274,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2125
2274
  InitializingEvent,
2126
2275
  function(event)
2127
2276
  local function listener(unit, id)
2128
- local ____GetSpellTargetUnit_result_9
2277
+ local ____GetSpellTargetUnit_result_10
2129
2278
  if GetSpellTargetUnit() then
2130
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2279
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2131
2280
  else
2132
- local ____GetSpellTargetItem_result_8
2281
+ local ____GetSpellTargetItem_result_9
2133
2282
  if GetSpellTargetItem() then
2134
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2283
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2135
2284
  else
2136
- local ____GetSpellTargetDestructable_result_7
2285
+ local ____GetSpellTargetDestructable_result_8
2137
2286
  if GetSpellTargetDestructable() then
2138
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2287
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2139
2288
  else
2140
- ____GetSpellTargetDestructable_result_7 = nil
2289
+ ____GetSpellTargetDestructable_result_8 = nil
2141
2290
  end
2142
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2291
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2143
2292
  end
2144
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2293
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2145
2294
  end
2146
- local target = ____GetSpellTargetUnit_result_9
2295
+ local target = ____GetSpellTargetUnit_result_10
2147
2296
  if target then
2148
2297
  invoke(event, unit, id, target)
2149
2298
  end
@@ -2315,10 +2464,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2315
2464
  ____exports.UnitTriggerEvent,
2316
2465
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2317
2466
  function()
2318
- local unit = ____exports.Unit:of(getOrderedUnit())
2319
- local issuedOrderId = getIssuedOrderId()
2320
- if unit ~= nil and unit.state == 1 then
2321
- return unit, issuedOrderId
2467
+ local handle = getOrderedUnit()
2468
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2469
+ local unit = ____exports.Unit:of(handle)
2470
+ if unit.state == 1 then
2471
+ return unit, getIssuedOrderId()
2472
+ end
2322
2473
  end
2323
2474
  return IgnoreEvent
2324
2475
  end
@@ -2349,38 +2500,57 @@ Unit.onDamaging = (function()
2349
2500
  if source and source.typeId == dummyUnitId then
2350
2501
  source = nil
2351
2502
  end
2352
- local target = BlzGetEventDamageTarget()
2503
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2504
+ local metadata = damageMetadataByTarget[target]
2505
+ damageMetadataByTarget[target] = nil
2353
2506
  local data = {
2354
2507
  amount = GetEventDamage(),
2355
- attackType = BlzGetEventAttackType(),
2508
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2356
2509
  damageType = BlzGetEventDamageType(),
2357
2510
  weaponType = BlzGetEventWeaponType(),
2358
- isAttack = BlzGetEventIsAttack()
2511
+ metadata = metadata,
2512
+ isAttack = BlzGetEventIsAttack(),
2513
+ originalAmount = GetEventDamage(),
2514
+ originalMetadata = metadata,
2515
+ preventRetaliation = damagingEventPreventRetaliation
2359
2516
  }
2360
2517
  if data.isAttack and source then
2361
- 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
2362
- if weapon == -1 then
2363
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2364
- weapon = 0
2365
- end
2366
- data.weapon = assert(source.weapons[weapon + 1])
2518
+ data.weapon = source:chooseWeapon(target)
2367
2519
  end
2368
2520
  if not data.isAttack or not source or not source._attackHandlers then
2369
2521
  invoke(
2370
2522
  event,
2371
2523
  source,
2372
- ____exports.Unit:of(target),
2524
+ target,
2373
2525
  setmetatable(
2374
2526
  {},
2375
2527
  {
2376
2528
  __index = data,
2377
2529
  __newindex = function(self, key, value)
2378
- damageSetters[key](value)
2530
+ local damageSetter = damageSetters[key]
2531
+ if damageSetter ~= nil then
2532
+ damageSetter(value)
2533
+ end
2379
2534
  data[key] = value
2380
2535
  end
2381
2536
  }
2382
2537
  )
2383
2538
  )
2539
+ if data[0] and source then
2540
+ local sourceOwner = source.owner.handle
2541
+ data[1] = sourceOwner
2542
+ local targetOwner = target.owner.handle
2543
+ data[2] = targetOwner
2544
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2545
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2546
+ data[3] = true
2547
+ end
2548
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2549
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2550
+ data[4] = true
2551
+ end
2552
+ end
2553
+ damagingEventByTarget[target] = data
2384
2554
  return
2385
2555
  end
2386
2556
  BlzSetEventDamage(0)
@@ -2388,7 +2558,7 @@ Unit.onDamaging = (function()
2388
2558
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2389
2559
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2390
2560
  local sourceOwner = source.owner.handle
2391
- local targetOwner = GetOwningPlayer(target)
2561
+ local targetOwner = target.owner.handle
2392
2562
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2393
2563
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2394
2564
  Timer:run(function()
@@ -2404,23 +2574,19 @@ Unit.onDamaging = (function()
2404
2574
  for ____, ____value in ipairs(source._attackHandlers) do
2405
2575
  local condition = ____value[1]
2406
2576
  local action = ____value[2]
2407
- if condition(
2408
- source,
2409
- ____exports.Unit:of(target),
2410
- data
2411
- ) then
2577
+ if condition(source, target, data) then
2412
2578
  action(
2413
2579
  source,
2414
- ____exports.Unit:of(target),
2580
+ target,
2415
2581
  setmetatable(
2416
2582
  {fire = function()
2417
2583
  UnitDamageTarget(
2418
2584
  source.handle,
2419
- target,
2585
+ target.handle,
2420
2586
  data.amount,
2421
2587
  true,
2422
2588
  true,
2423
- data.attackType,
2589
+ attackTypeToNative(data.attackType),
2424
2590
  data.damageType,
2425
2591
  data.weaponType
2426
2592
  )
@@ -2447,30 +2613,54 @@ Unit.onDamage = __TS__New(
2447
2613
  if source and source.typeId == dummyUnitId then
2448
2614
  source = nil
2449
2615
  end
2616
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2617
+ local damagingEvent = damagingEventByTarget[target]
2618
+ damagingEventByTarget[target] = nil
2450
2619
  local data = {
2451
2620
  amount = GetEventDamage(),
2452
- attackType = BlzGetEventAttackType(),
2621
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2453
2622
  damageType = BlzGetEventDamageType(),
2454
2623
  weaponType = BlzGetEventWeaponType(),
2624
+ metadata = damagingEvent and damagingEvent.metadata,
2455
2625
  isAttack = BlzGetEventIsAttack(),
2456
- originalAmount = GetEventDamage(),
2626
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2627
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2457
2628
  preventDeath = damageEventPreventDeath
2458
2629
  }
2630
+ if damagingEvent then
2631
+ for key, value in pairs(damagingEvent) do
2632
+ if isAttribute(key) then
2633
+ data[key] = value
2634
+ end
2635
+ end
2636
+ local sourceOwner = damagingEvent[1]
2637
+ if sourceOwner then
2638
+ local targetOwner = damagingEvent[2]
2639
+ if damagingEvent[3] then
2640
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2641
+ end
2642
+ if damagingEvent[4] then
2643
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2644
+ end
2645
+ end
2646
+ end
2459
2647
  local evData = setmetatable(
2460
2648
  {},
2461
2649
  {
2462
2650
  __index = data,
2463
2651
  __newindex = function(self, key, value)
2464
- damageSetters[key](value)
2652
+ local damageSetter = damageSetters[key]
2653
+ if damageSetter ~= nil then
2654
+ damageSetter(value)
2655
+ end
2465
2656
  data[key] = value
2466
2657
  end
2467
2658
  }
2468
2659
  )
2469
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2470
2660
  invoke(event, source, target, evData)
2471
2661
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2472
2662
  local bonusHealth = math.ceil(evData.amount)
2473
- target[105] = (target[105] or 0) + bonusHealth
2663
+ target[106] = (target[106] or 0) + bonusHealth
2474
2664
  BlzSetUnitMaxHP(
2475
2665
  target.handle,
2476
2666
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2484,7 +2674,7 @@ Unit.onDamage = __TS__New(
2484
2674
  evData[0],
2485
2675
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2486
2676
  )
2487
- target[105] = (target[105] or 0) - bonusHealth
2677
+ target[106] = (target[106] or 0) - bonusHealth
2488
2678
  SetWidgetLife(
2489
2679
  target.handle,
2490
2680
  GetWidgetLife(target.handle) - bonusHealth
@@ -2509,8 +2699,9 @@ Unit.itemDroppedEvent = __TS__New(
2509
2699
  EVENT_PLAYER_UNIT_DROP_ITEM,
2510
2700
  function()
2511
2701
  local unit = getTriggerUnit()
2512
- if getUnitTypeId(unit) ~= dummyUnitId then
2513
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2702
+ local item = getManipulatedItem()
2703
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2704
+ return ____exports.Unit:of(unit), Item:of(item)
2514
2705
  end
2515
2706
  return IgnoreEvent
2516
2707
  end
@@ -2519,9 +2710,14 @@ Unit.itemPickedUpEvent = __TS__New(
2519
2710
  ____exports.UnitTriggerEvent,
2520
2711
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2521
2712
  function()
2522
- local unit = getTriggerUnit()
2523
- if getUnitTypeId(unit) ~= dummyUnitId then
2524
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2713
+ local unitHandle = getTriggerUnit()
2714
+ local itemHandle = getManipulatedItem()
2715
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2716
+ local unit = ____exports.Unit:of(unitHandle)
2717
+ local item = Item:of(itemHandle)
2718
+ if item.owner ~= unit then
2719
+ return unit, item
2720
+ end
2525
2721
  end
2526
2722
  return IgnoreEvent
2527
2723
  end
@@ -2529,16 +2725,59 @@ Unit.itemPickedUpEvent = __TS__New(
2529
2725
  Unit.itemUsedEvent = __TS__New(
2530
2726
  ____exports.UnitTriggerEvent,
2531
2727
  EVENT_PLAYER_UNIT_USE_ITEM,
2532
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2728
+ function()
2729
+ local unit = getTriggerUnit()
2730
+ local item = getManipulatedItem()
2731
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2732
+ return ____exports.Unit:of(unit), Item:of(item)
2733
+ end
2734
+ return IgnoreEvent
2735
+ end
2533
2736
  )
2534
2737
  Unit.itemStackedEvent = __TS__New(
2535
2738
  ____exports.UnitTriggerEvent,
2536
2739
  EVENT_PLAYER_UNIT_STACK_ITEM,
2537
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2740
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2538
2741
  )
2539
2742
  __TS__ObjectDefineProperty(
2540
2743
  Unit,
2541
- "itemMovedEvent",
2744
+ "itemChargesChangedEvent",
2745
+ {get = function(self)
2746
+ local event = __TS__New(Event)
2747
+ Item.chargesChangedEvent:addListener(function(item)
2748
+ local unit = item.owner
2749
+ if unit ~= nil then
2750
+ invoke(event, unit, item)
2751
+ end
2752
+ end)
2753
+ rawset(self, "itemChargesChangedEvent", event)
2754
+ return event
2755
+ end}
2756
+ )
2757
+ __TS__ObjectDefineProperty(
2758
+ Unit,
2759
+ "itemUseOrderEvent",
2760
+ {get = function(self)
2761
+ local event = __TS__New(Event)
2762
+ for order = orderId("useslot0"), orderId("useslot5") do
2763
+ local slot = order - orderId("useslot0")
2764
+ local function listener(unit)
2765
+ local item = unit.items[slot + 1]
2766
+ if item ~= nil then
2767
+ invoke(event, unit, item)
2768
+ end
2769
+ end
2770
+ self.onImmediateOrder[order]:addListener(listener)
2771
+ self.onTargetOrder[order]:addListener(listener)
2772
+ self.onPointOrder[order]:addListener(listener)
2773
+ end
2774
+ rawset(self, "itemUseOrderEvent", event)
2775
+ return event
2776
+ end}
2777
+ )
2778
+ __TS__ObjectDefineProperty(
2779
+ Unit,
2780
+ "itemMoveOrderEvent",
2542
2781
  {get = function(self)
2543
2782
  local event = __TS__New(Event)
2544
2783
  for order = orderId("moveslot0"), orderId("moveslot5") do
@@ -2556,7 +2795,7 @@ __TS__ObjectDefineProperty(
2556
2795
  end
2557
2796
  end)
2558
2797
  end
2559
- rawset(self, "itemMovedEvent", event)
2798
+ rawset(self, "itemMoveOrderEvent", event)
2560
2799
  return event
2561
2800
  end}
2562
2801
  )
@@ -2585,6 +2824,10 @@ __TS__ObjectDefineProperty(
2585
2824
  rawset(self, "destroyEvent", destroyEvent)
2586
2825
  return destroyEvent
2587
2826
  end}
2827
+ )
2828
+ Unit.synchronize = synchronizer(
2829
+ function(unit) return unit.syncId end,
2830
+ function(syncId) return unitBySyncId[syncId] end
2588
2831
  );
2589
2832
  (function(self)
2590
2833
  local leaveAbilityIds = postcompile(function()