warscript 0.0.1-dev.9af2d1a → 0.0.1-dev.9c98c3a

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 (195) 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 +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.lua +3 -1
  9. package/core/types/playerCamera.d.ts +2 -0
  10. package/core/types/playerCamera.lua +123 -5
  11. package/core/types/sound.d.ts +17 -24
  12. package/core/types/sound.lua +99 -24
  13. package/core/types/tileCell.d.ts +9 -0
  14. package/core/types/tileCell.lua +92 -0
  15. package/core/types/timer.d.ts +9 -8
  16. package/core/types/timer.lua +45 -23
  17. package/core/util.d.ts +1 -1
  18. package/core/util.lua +12 -1
  19. package/decl/native.d.ts +846 -790
  20. package/engine/behavior.d.ts +5 -0
  21. package/engine/behavior.lua +106 -27
  22. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  23. package/engine/behaviour/ability/always-enabled.lua +31 -0
  24. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  25. package/engine/behaviour/ability/apply-buff.lua +32 -0
  26. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  27. package/engine/behaviour/ability/damage.d.ts +9 -3
  28. package/engine/behaviour/ability/damage.lua +26 -38
  29. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  30. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  31. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  32. package/engine/behaviour/ability/instant-impact.lua +4 -19
  33. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  34. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  35. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  36. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  37. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  38. package/engine/behaviour/ability/restore-mana.lua +6 -6
  39. package/engine/behaviour/ability.d.ts +20 -4
  40. package/engine/behaviour/ability.lua +111 -47
  41. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  42. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  43. package/engine/behaviour/unit.d.ts +34 -0
  44. package/engine/behaviour/unit.lua +190 -4
  45. package/engine/buff.d.ts +63 -45
  46. package/engine/buff.lua +300 -237
  47. package/engine/internal/ability.d.ts +20 -3
  48. package/engine/internal/ability.lua +126 -13
  49. package/engine/internal/item/ability.lua +162 -4
  50. package/engine/internal/item+owner.lua +12 -6
  51. package/engine/internal/item.d.ts +20 -19
  52. package/engine/internal/item.lua +191 -74
  53. package/engine/internal/mechanics/ability-duration.lua +1 -1
  54. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  55. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  56. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  57. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  58. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  59. package/engine/internal/misc/frame-coordinates.lua +21 -0
  60. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  61. package/engine/internal/misc/get-terrain-z.lua +11 -0
  62. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  63. package/engine/internal/misc/player-local-handle.lua +5 -0
  64. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  65. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  66. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  67. package/engine/internal/object-data/evasion-probability.lua +16 -0
  68. package/engine/internal/unit/ability.d.ts +45 -1
  69. package/engine/internal/unit/ability.lua +128 -3
  70. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  71. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  72. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  73. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  74. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  75. package/engine/internal/unit/allowed-targets.lua +9 -1
  76. package/engine/internal/unit/bonus.d.ts +2 -0
  77. package/engine/internal/unit/bonus.lua +17 -0
  78. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  79. package/engine/internal/unit/ignore-events-items.lua +5 -0
  80. package/engine/internal/unit/item.lua +6 -12
  81. package/engine/internal/unit/main-selected.d.ts +6 -0
  82. package/engine/internal/unit/main-selected.lua +12 -1
  83. package/engine/internal/unit/order.d.ts +20 -0
  84. package/engine/internal/unit/order.lua +136 -0
  85. package/engine/internal/unit+ability.lua +10 -1
  86. package/engine/internal/unit+damage.d.ts +2 -11
  87. package/engine/internal/unit+damage.lua +10 -14
  88. package/engine/internal/unit+spellSteal.lua +1 -2
  89. package/engine/internal/unit-missile-launch.lua +42 -14
  90. package/engine/internal/unit.d.ts +37 -11
  91. package/engine/internal/unit.lua +333 -126
  92. package/engine/internal/utility.lua +12 -0
  93. package/engine/lightning.d.ts +12 -5
  94. package/engine/lightning.lua +48 -14
  95. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  96. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  97. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  98. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  99. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  100. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  101. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  102. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  103. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  104. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  105. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  106. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  107. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  108. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  109. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  110. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  111. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  112. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  113. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  114. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  115. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  116. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  117. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  118. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  119. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  120. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  121. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  122. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  123. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  124. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  125. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  126. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  127. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  128. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  129. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  130. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  131. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  132. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  133. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  134. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  135. package/engine/object-data/entry/ability-type/web.lua +52 -0
  136. package/engine/object-data/entry/ability-type.d.ts +19 -17
  137. package/engine/object-data/entry/ability-type.lua +93 -36
  138. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  139. package/engine/object-data/entry/buff-type.d.ts +6 -12
  140. package/engine/object-data/entry/buff-type.lua +13 -29
  141. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  142. package/engine/object-data/entry/item-type.d.ts +3 -1
  143. package/engine/object-data/entry/item-type.lua +15 -2
  144. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  145. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  146. package/engine/object-data/entry/sound-preset.lua +140 -0
  147. package/engine/object-data/entry/unit-type.d.ts +21 -5
  148. package/engine/object-data/entry/unit-type.lua +214 -93
  149. package/engine/object-data/entry/upgrade.d.ts +1 -1
  150. package/engine/object-data/entry/upgrade.lua +4 -4
  151. package/engine/object-data/entry.d.ts +16 -14
  152. package/engine/object-data/entry.lua +60 -32
  153. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  154. package/engine/object-field/ability.d.ts +12 -6
  155. package/engine/object-field/ability.lua +8 -4
  156. package/engine/object-field/unit.d.ts +57 -3
  157. package/engine/object-field/unit.lua +207 -7
  158. package/engine/object-field.d.ts +17 -6
  159. package/engine/object-field.lua +190 -90
  160. package/engine/random.d.ts +9 -0
  161. package/engine/random.lua +13 -0
  162. package/engine/standard/entries/buff-type.d.ts +3 -0
  163. package/engine/standard/entries/buff-type.lua +3 -0
  164. package/engine/standard/entries/sound-preset.d.ts +10 -0
  165. package/engine/standard/entries/sound-preset.lua +10 -0
  166. package/engine/standard/fields/ability.d.ts +2 -0
  167. package/engine/standard/fields/ability.lua +2 -0
  168. package/engine/standard/fields/unit.d.ts +4 -0
  169. package/engine/standard/fields/unit.lua +7 -0
  170. package/engine/text-tag.d.ts +36 -2
  171. package/engine/text-tag.lua +249 -10
  172. package/engine/unit.d.ts +2 -0
  173. package/engine/unit.lua +2 -0
  174. package/objutil/buff.lua +2 -3
  175. package/objutil/unit.lua +8 -0
  176. package/package.json +2 -2
  177. package/patch-lualib.lua +1 -1
  178. package/utility/arrays.d.ts +10 -1
  179. package/utility/arrays.lua +45 -3
  180. package/utility/callback-array.d.ts +17 -0
  181. package/utility/callback-array.lua +61 -0
  182. package/utility/functions.d.ts +8 -0
  183. package/utility/functions.lua +13 -0
  184. package/utility/lazy.d.ts +2 -0
  185. package/utility/lazy.lua +14 -0
  186. package/utility/linked-set.d.ts +2 -0
  187. package/utility/linked-set.lua +22 -1
  188. package/utility/lua-maps.d.ts +15 -2
  189. package/utility/lua-maps.lua +53 -2
  190. package/utility/lua-sets.d.ts +2 -0
  191. package/utility/lua-sets.lua +7 -0
  192. package/utility/reflection.lua +11 -7
  193. package/utility/types.d.ts +3 -0
  194. package/core/types/order.d.ts +0 -25
  195. package/core/types/order.lua +0 -55
@@ -51,12 +51,21 @@ 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
54
65
  local match = string.match
55
66
  local ____tostring = _G.tostring
56
67
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
68
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
69
  local getUnitIntegerField = BlzGetUnitIntegerField
61
70
  local getUnitRealField = BlzGetUnitRealField
62
71
  local getHeroStr = GetHeroStr
@@ -75,9 +84,9 @@ local setUnitScale = SetUnitScale
75
84
  local setUnitPosition = SetUnitPosition
76
85
  local setUnitTimeScale = SetUnitTimeScale
77
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
88
  local createUnit = CreateUnit
79
89
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
90
  local removeUnit = RemoveUnit
82
91
  local getUnitTypeId = GetUnitTypeId
83
92
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
103
  local isUnitInRangeXY = IsUnitInRangeXY
95
104
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -118,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
118
125
  local getIssuedOrderId = GetIssuedOrderId
119
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
120
127
  local unitAlive = UnitAlive
121
- local unitAddType = UnitAddType
122
- local unitRemoveType = UnitRemoveType
123
- local isUnitIllusion = IsUnitIllusion
124
- local isUnitType = IsUnitType
125
128
  local isUnitAlly = IsUnitAlly
126
129
  local isUnitEnemy = IsUnitEnemy
127
130
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
131
  ____exports.UnitClassification = {}
131
132
  local UnitClassification = ____exports.UnitClassification
132
133
  do
@@ -136,6 +137,7 @@ do
136
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -343,6 +345,9 @@ local function dispatchAbility(event)
343
345
  }
344
346
  )
345
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
346
351
  local function damageEventPreventDeath(self, callback, ...)
347
352
  if self[0] ~= nil then
348
353
  return
@@ -354,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
359
  rawset(self, 1 + i, (select(i, ...)))
355
360
  end
356
361
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponType = BlzSetEventWeaponType
369
+ }
358
370
  local jlimitopByOperator = {
359
371
  [0] = LESS_THAN_OR_EQUAL,
360
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -398,6 +410,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
398
410
  self.unit = unit
399
411
  self.index = index
400
412
  end
413
+ __TS__SetDescriptor(
414
+ UnitWeapon.prototype,
415
+ "isEnabled",
416
+ {
417
+ get = function(self)
418
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
419
+ end,
420
+ set = function(self, isEnabled)
421
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
422
+ end
423
+ },
424
+ true
425
+ )
401
426
  __TS__SetDescriptor(
402
427
  UnitWeapon.prototype,
403
428
  "cooldown",
@@ -432,6 +457,19 @@ __TS__SetDescriptor(
432
457
  },
433
458
  true
434
459
  )
460
+ __TS__SetDescriptor(
461
+ UnitWeapon.prototype,
462
+ "allowedTargetCombatClassifications",
463
+ {
464
+ get = function(self)
465
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
466
+ end,
467
+ set = function(self, allowedTargetCombatClassifications)
468
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
469
+ end
470
+ },
471
+ true
472
+ )
435
473
  __TS__SetDescriptor(
436
474
  UnitWeapon.prototype,
437
475
  "damageBase",
@@ -636,16 +674,26 @@ local function delayHealthChecksCallback(unit)
636
674
  end
637
675
  end
638
676
  local nextSyncId = 1
639
- local unitBySyncId = setmetatable({}, {__mode = "k"})
677
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
678
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
679
+ local function addAbility(unit, abilityTypeId)
680
+ local ____unitAddAbility_result_0
681
+ if unitAddAbility(unit, abilityTypeId) then
682
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
683
+ else
684
+ ____unitAddAbility_result_0 = nil
685
+ end
686
+ return ____unitAddAbility_result_0
687
+ end
640
688
  ____exports.Unit = __TS__Class()
641
689
  local Unit = ____exports.Unit
642
690
  Unit.name = "Unit"
643
691
  __TS__ClassExtends(Unit, Handle)
644
692
  function Unit.prototype.____constructor(self, handle)
645
693
  Handle.prototype.____constructor(self, handle)
646
- local ____nextSyncId_0 = nextSyncId
647
- nextSyncId = ____nextSyncId_0 + 1
648
- self.syncId = ____nextSyncId_0
694
+ local ____nextSyncId_1 = nextSyncId
695
+ nextSyncId = ____nextSyncId_1 + 1
696
+ self.syncId = ____nextSyncId_1
649
697
  self._owner = Player:of(getOwningPlayer(handle))
650
698
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
651
699
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -677,6 +725,8 @@ function Unit.prototype.getEvent(self, event, collector)
677
725
  end
678
726
  function Unit.prototype.onDestroy(self)
679
727
  local handle = self.handle
728
+ self[107] = getUnitX(handle)
729
+ self[108] = getUnitY(handle)
680
730
  if not self._owner then
681
731
  self._owner = Player:of(getOwningPlayer(handle))
682
732
  end
@@ -744,17 +794,17 @@ function Unit.prototype.addModifier(self, property, modifier)
744
794
  end}
745
795
  end
746
796
  function Unit.prototype.hasCombatClassification(self, combatClassification)
747
- local ____combatClassification_1 = combatClassification
748
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
797
+ local ____combatClassification_2 = combatClassification
798
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
749
799
  end
750
800
  function Unit.prototype.addClassification(self, classification)
751
- return unitAddType(self.handle, classification)
801
+ return UnitAddType(self.handle, classification)
752
802
  end
753
803
  function Unit.prototype.removeClassification(self, classification)
754
- return unitRemoveType(self.handle, classification)
804
+ return UnitRemoveType(self.handle, classification)
755
805
  end
756
806
  function Unit.prototype.hasClassification(self, classification)
757
- return isUnitType(self.handle, classification)
807
+ return IsUnitType(self.handle, classification)
758
808
  end
759
809
  function Unit.prototype.isVisibleTo(self, player)
760
810
  return isUnitVisible(self.handle, player.handle)
@@ -763,13 +813,13 @@ function Unit.prototype.isInvisibleTo(self, player)
763
813
  return isUnitInvisible(self.handle, player.handle)
764
814
  end
765
815
  function Unit.prototype.isInRangeOf(self, x, y, range)
766
- local ____temp_2
816
+ local ____temp_3
767
817
  if type(x) == "number" then
768
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
818
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
769
819
  else
770
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
820
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
771
821
  end
772
- return ____temp_2
822
+ return ____temp_3
773
823
  end
774
824
  function Unit.prototype.isAllyOf(self, unit)
775
825
  return isUnitAlly(
@@ -787,13 +837,27 @@ function Unit.prototype.playAnimation(self, animation, rarity)
787
837
  if type(animation) == "number" then
788
838
  setUnitAnimationByIndex(self.handle, animation)
789
839
  elseif rarity then
790
- setUnitAnimationWithRarity(self.handle, animation, rarity)
840
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
791
841
  else
792
842
  setUnitAnimation(self.handle, animation)
793
843
  end
794
844
  end
845
+ function Unit.prototype.resetAnimation(self)
846
+ ResetUnitAnimation(self.handle)
847
+ end
795
848
  function Unit.prototype.queueAnimation(self, animation)
796
- queueUnitAnimation(self.handle, animation)
849
+ QueueUnitAnimation(self.handle, animation)
850
+ end
851
+ function Unit.prototype.chooseWeapon(self, target)
852
+ local firstWeapon = self.firstWeapon
853
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
854
+ return firstWeapon
855
+ end
856
+ local secondWeapon = self.secondWeapon
857
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
858
+ return secondWeapon
859
+ end
860
+ return nil
797
861
  end
798
862
  function Unit.prototype.delayHealthChecks(self)
799
863
  self[103] = (self[103] or 0) + 1
@@ -806,21 +870,21 @@ function Unit.prototype.isSelected(self, player)
806
870
  return IsUnitSelected(self.handle, player.handle)
807
871
  end
808
872
  function Unit.prototype.explode(self)
809
- setUnitExploded(self.handle, true)
873
+ SetUnitExploded(self.handle, true)
810
874
  killUnit(self.handle)
811
875
  end
812
876
  function Unit.prototype.kill(self)
813
877
  killUnit(self.handle)
814
878
  end
815
879
  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
880
+ local ____ReviveHero_6 = ReviveHero
881
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
882
+ local ____doEffect_4 = doEffect
883
+ if ____doEffect_4 == nil then
884
+ ____doEffect_4 = false
821
885
  end
822
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
886
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
887
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
824
888
  end
825
889
  function Unit.prototype.healTarget(self, target, amount)
826
890
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,17 +927,16 @@ function Unit.prototype.itemInSlot(self, slot)
863
927
  return Item:of(unitItemInSlot(self.handle, slot))
864
928
  end
865
929
  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
- )
930
+ local ability = UnitAbility:of(
931
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
932
+ abilityId,
933
+ self
934
+ )
935
+ if ability ~= nil then
872
936
  local abilities = self.abilities
873
937
  abilities[#abilities + 1] = ability
874
- return ability
875
938
  end
876
- return nil
939
+ return ability
877
940
  end
878
941
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
879
942
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -887,31 +950,21 @@ end
887
950
  function Unit.prototype.hasAbility(self, abilityId)
888
951
  return getUnitAbilityLevel(self.handle, abilityId) > 0
889
952
  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
- )
953
+ function Unit.prototype.getAbility(self, abilityId)
954
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
955
+ return UnitAbility:of(ability, abilityId, self)
901
956
  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
957
+ function Unit.prototype.removeAbility(self, abilityTypeId)
958
+ local abilities = self.abilities
959
+ for i = 1, #abilities do
960
+ if abilities[i].typeId == abilityTypeId then
961
+ local ability = abilities[i]
962
+ tremove(abilities, i)
963
+ ability:destroy()
964
+ return true
911
965
  end
912
- return true
913
966
  end
914
- return false
967
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
915
968
  end
916
969
  function Unit.prototype.hideAbility(self, abilityId, flag)
917
970
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -925,12 +978,34 @@ end
925
978
  function Unit.prototype.endAbilityCooldown(self, abilityId)
926
979
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
927
980
  end
981
+ function Unit.prototype.interruptMovement(self)
982
+ local handle = self.handle
983
+ unitDisableAbility(
984
+ handle,
985
+ fourCC("Amov"),
986
+ true,
987
+ false
988
+ )
989
+ unitDisableAbility(
990
+ handle,
991
+ fourCC("Amov"),
992
+ false,
993
+ false
994
+ )
995
+ end
928
996
  function Unit.prototype.interruptAttack(self)
929
997
  unitInterruptAttack(self.handle)
930
998
  end
931
999
  function Unit.prototype.interruptCast(self, abilityId)
932
- unitDisableAbility(self.handle, abilityId, true, false)
933
- unitDisableAbility(self.handle, abilityId, false, false)
1000
+ local handle = self.handle
1001
+ unitDisableAbility(handle, abilityId, true, false)
1002
+ Timer:run(
1003
+ unitDisableAbility,
1004
+ handle,
1005
+ abilityId,
1006
+ false,
1007
+ false
1008
+ )
934
1009
  end
935
1010
  function Unit.prototype.getDistanceTo(self, target)
936
1011
  local handle = self.handle
@@ -1191,7 +1266,15 @@ __TS__SetDescriptor(
1191
1266
  Unit.prototype,
1192
1267
  "isIllusion",
1193
1268
  {get = function(self)
1194
- return isUnitIllusion(self.handle)
1269
+ return IsUnitIllusion(self.handle)
1270
+ end},
1271
+ true
1272
+ )
1273
+ __TS__SetDescriptor(
1274
+ Unit.prototype,
1275
+ "isStunned",
1276
+ {get = function(self)
1277
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1195
1278
  end},
1196
1279
  true
1197
1280
  )
@@ -1268,6 +1351,19 @@ __TS__SetDescriptor(
1268
1351
  },
1269
1352
  true
1270
1353
  )
1354
+ __TS__SetDescriptor(
1355
+ Unit.prototype,
1356
+ "primaryAttribute",
1357
+ {
1358
+ get = function(self)
1359
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1360
+ end,
1361
+ set = function(self, primaryAttribute)
1362
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1363
+ end
1364
+ },
1365
+ true
1366
+ )
1271
1367
  __TS__SetDescriptor(
1272
1368
  Unit.prototype,
1273
1369
  "strengthBase",
@@ -1392,14 +1488,14 @@ __TS__SetDescriptor(
1392
1488
  return not self[106]
1393
1489
  end,
1394
1490
  set = function(self, isTeamGlowVisible)
1395
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1396
- local ____temp_6
1491
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1492
+ local ____temp_7
1397
1493
  if not isTeamGlowVisible then
1398
- ____temp_6 = true
1494
+ ____temp_7 = true
1399
1495
  else
1400
- ____temp_6 = nil
1496
+ ____temp_7 = nil
1401
1497
  end
1402
- self[106] = ____temp_6
1498
+ self[106] = ____temp_7
1403
1499
  end
1404
1500
  },
1405
1501
  true
@@ -1408,9 +1504,9 @@ __TS__SetDescriptor(
1408
1504
  Unit.prototype,
1409
1505
  "color",
1410
1506
  {set = function(self, color)
1411
- setUnitColor(self.handle, color.handle)
1507
+ SetUnitColor(self.handle, color.handle)
1412
1508
  if self[106] then
1413
- showUnitTeamGlow(self.handle, false)
1509
+ BlzShowUnitTeamGlow(self.handle, false)
1414
1510
  end
1415
1511
  end},
1416
1512
  true
@@ -1579,7 +1675,7 @@ __TS__SetDescriptor(
1579
1675
  "x",
1580
1676
  {
1581
1677
  get = function(self)
1582
- return getUnitX(self.handle)
1678
+ return self[107] or getUnitX(self.handle)
1583
1679
  end,
1584
1680
  set = function(self, v)
1585
1681
  SetUnitX(self.handle, v)
@@ -1592,7 +1688,7 @@ __TS__SetDescriptor(
1592
1688
  "y",
1593
1689
  {
1594
1690
  get = function(self)
1595
- return getUnitY(self.handle)
1691
+ return self[108] or getUnitY(self.handle)
1596
1692
  end,
1597
1693
  set = function(self, v)
1598
1694
  SetUnitY(self.handle, v)
@@ -1678,10 +1774,10 @@ __TS__SetDescriptor(
1678
1774
  "gold",
1679
1775
  {
1680
1776
  get = function(self)
1681
- return getResourceAmount(self.handle)
1777
+ return GetResourceAmount(self.handle)
1682
1778
  end,
1683
1779
  set = function(self, gold)
1684
- setResourceAmount(self.handle, gold)
1780
+ SetResourceAmount(self.handle, gold)
1685
1781
  end
1686
1782
  },
1687
1783
  true
@@ -1809,6 +1905,19 @@ __TS__SetDescriptor(
1809
1905
  end},
1810
1906
  true
1811
1907
  )
1908
+ __TS__SetDescriptor(
1909
+ Unit.prototype,
1910
+ "movementType",
1911
+ {
1912
+ get = function(self)
1913
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1914
+ end,
1915
+ set = function(self, movementType)
1916
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1917
+ end
1918
+ },
1919
+ true
1920
+ )
1812
1921
  __TS__SetDescriptor(
1813
1922
  Unit.prototype,
1814
1923
  "pathing",
@@ -1990,6 +2099,14 @@ __TS__SetDescriptor(
1990
2099
  end},
1991
2100
  true
1992
2101
  )
2102
+ __TS__SetDescriptor(
2103
+ Unit.prototype,
2104
+ "targetAcquiredEvent",
2105
+ {get = function(self)
2106
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2107
+ end},
2108
+ true
2109
+ )
1993
2110
  __TS__SetDescriptor(
1994
2111
  Unit.prototype,
1995
2112
  "onSelect",
@@ -2125,25 +2242,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2125
2242
  InitializingEvent,
2126
2243
  function(event)
2127
2244
  local function listener(unit, id)
2128
- local ____GetSpellTargetUnit_result_9
2245
+ local ____GetSpellTargetUnit_result_10
2129
2246
  if GetSpellTargetUnit() then
2130
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2247
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2131
2248
  else
2132
- local ____GetSpellTargetItem_result_8
2249
+ local ____GetSpellTargetItem_result_9
2133
2250
  if GetSpellTargetItem() then
2134
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2251
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2135
2252
  else
2136
- local ____GetSpellTargetDestructable_result_7
2253
+ local ____GetSpellTargetDestructable_result_8
2137
2254
  if GetSpellTargetDestructable() then
2138
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2255
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2139
2256
  else
2140
- ____GetSpellTargetDestructable_result_7 = nil
2257
+ ____GetSpellTargetDestructable_result_8 = nil
2141
2258
  end
2142
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2259
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2143
2260
  end
2144
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2261
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2145
2262
  end
2146
- local target = ____GetSpellTargetUnit_result_9
2263
+ local target = ____GetSpellTargetUnit_result_10
2147
2264
  if target then
2148
2265
  invoke(event, unit, id, target)
2149
2266
  end
@@ -2315,10 +2432,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2315
2432
  ____exports.UnitTriggerEvent,
2316
2433
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2317
2434
  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
2435
+ local handle = getOrderedUnit()
2436
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2437
+ local unit = ____exports.Unit:of(handle)
2438
+ if unit.state == 1 then
2439
+ return unit, getIssuedOrderId()
2440
+ end
2322
2441
  end
2323
2442
  return IgnoreEvent
2324
2443
  end
@@ -2349,38 +2468,57 @@ Unit.onDamaging = (function()
2349
2468
  if source and source.typeId == dummyUnitId then
2350
2469
  source = nil
2351
2470
  end
2352
- local target = BlzGetEventDamageTarget()
2471
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2472
+ local metadata = damageMetadataByTarget[target]
2473
+ damageMetadataByTarget[target] = nil
2353
2474
  local data = {
2354
2475
  amount = GetEventDamage(),
2355
- attackType = BlzGetEventAttackType(),
2476
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2356
2477
  damageType = BlzGetEventDamageType(),
2357
2478
  weaponType = BlzGetEventWeaponType(),
2358
- isAttack = BlzGetEventIsAttack()
2479
+ metadata = metadata,
2480
+ isAttack = BlzGetEventIsAttack(),
2481
+ originalAmount = GetEventDamage(),
2482
+ originalMetadata = metadata,
2483
+ preventRetaliation = damagingEventPreventRetaliation
2359
2484
  }
2360
2485
  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])
2486
+ data.weapon = source:chooseWeapon(target)
2367
2487
  end
2368
2488
  if not data.isAttack or not source or not source._attackHandlers then
2369
2489
  invoke(
2370
2490
  event,
2371
2491
  source,
2372
- ____exports.Unit:of(target),
2492
+ target,
2373
2493
  setmetatable(
2374
2494
  {},
2375
2495
  {
2376
2496
  __index = data,
2377
2497
  __newindex = function(self, key, value)
2378
- damageSetters[key](value)
2498
+ local damageSetter = damageSetters[key]
2499
+ if damageSetter ~= nil then
2500
+ damageSetter(value)
2501
+ end
2379
2502
  data[key] = value
2380
2503
  end
2381
2504
  }
2382
2505
  )
2383
2506
  )
2507
+ if data[0] and source then
2508
+ local sourceOwner = source.owner.handle
2509
+ data[1] = sourceOwner
2510
+ local targetOwner = target.owner.handle
2511
+ data[2] = targetOwner
2512
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2513
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2514
+ data[3] = true
2515
+ end
2516
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2517
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2518
+ data[4] = true
2519
+ end
2520
+ end
2521
+ damagingEventByTarget[target] = data
2384
2522
  return
2385
2523
  end
2386
2524
  BlzSetEventDamage(0)
@@ -2388,7 +2526,7 @@ Unit.onDamaging = (function()
2388
2526
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2389
2527
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2390
2528
  local sourceOwner = source.owner.handle
2391
- local targetOwner = GetOwningPlayer(target)
2529
+ local targetOwner = target.owner.handle
2392
2530
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2393
2531
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2394
2532
  Timer:run(function()
@@ -2404,23 +2542,19 @@ Unit.onDamaging = (function()
2404
2542
  for ____, ____value in ipairs(source._attackHandlers) do
2405
2543
  local condition = ____value[1]
2406
2544
  local action = ____value[2]
2407
- if condition(
2408
- source,
2409
- ____exports.Unit:of(target),
2410
- data
2411
- ) then
2545
+ if condition(source, target, data) then
2412
2546
  action(
2413
2547
  source,
2414
- ____exports.Unit:of(target),
2548
+ target,
2415
2549
  setmetatable(
2416
2550
  {fire = function()
2417
2551
  UnitDamageTarget(
2418
2552
  source.handle,
2419
- target,
2553
+ target.handle,
2420
2554
  data.amount,
2421
2555
  true,
2422
2556
  true,
2423
- data.attackType,
2557
+ attackTypeToNative(data.attackType),
2424
2558
  data.damageType,
2425
2559
  data.weaponType
2426
2560
  )
@@ -2447,26 +2581,50 @@ Unit.onDamage = __TS__New(
2447
2581
  if source and source.typeId == dummyUnitId then
2448
2582
  source = nil
2449
2583
  end
2584
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2585
+ local damagingEvent = damagingEventByTarget[target]
2586
+ damagingEventByTarget[target] = nil
2450
2587
  local data = {
2451
2588
  amount = GetEventDamage(),
2452
- attackType = BlzGetEventAttackType(),
2589
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2453
2590
  damageType = BlzGetEventDamageType(),
2454
2591
  weaponType = BlzGetEventWeaponType(),
2592
+ metadata = damagingEvent and damagingEvent.metadata,
2455
2593
  isAttack = BlzGetEventIsAttack(),
2456
- originalAmount = GetEventDamage(),
2594
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2595
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2457
2596
  preventDeath = damageEventPreventDeath
2458
2597
  }
2598
+ if damagingEvent then
2599
+ for key, value in pairs(damagingEvent) do
2600
+ if isAttribute(key) then
2601
+ data[key] = value
2602
+ end
2603
+ end
2604
+ local sourceOwner = damagingEvent[1]
2605
+ if sourceOwner then
2606
+ local targetOwner = damagingEvent[2]
2607
+ if damagingEvent[3] then
2608
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2609
+ end
2610
+ if damagingEvent[4] then
2611
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2612
+ end
2613
+ end
2614
+ end
2459
2615
  local evData = setmetatable(
2460
2616
  {},
2461
2617
  {
2462
2618
  __index = data,
2463
2619
  __newindex = function(self, key, value)
2464
- damageSetters[key](value)
2620
+ local damageSetter = damageSetters[key]
2621
+ if damageSetter ~= nil then
2622
+ damageSetter(value)
2623
+ end
2465
2624
  data[key] = value
2466
2625
  end
2467
2626
  }
2468
2627
  )
2469
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2470
2628
  invoke(event, source, target, evData)
2471
2629
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2472
2630
  local bonusHealth = math.ceil(evData.amount)
@@ -2509,8 +2667,9 @@ Unit.itemDroppedEvent = __TS__New(
2509
2667
  EVENT_PLAYER_UNIT_DROP_ITEM,
2510
2668
  function()
2511
2669
  local unit = getTriggerUnit()
2512
- if getUnitTypeId(unit) ~= dummyUnitId then
2513
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2670
+ local item = getManipulatedItem()
2671
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2672
+ return ____exports.Unit:of(unit), Item:of(item)
2514
2673
  end
2515
2674
  return IgnoreEvent
2516
2675
  end
@@ -2519,9 +2678,14 @@ Unit.itemPickedUpEvent = __TS__New(
2519
2678
  ____exports.UnitTriggerEvent,
2520
2679
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2521
2680
  function()
2522
- local unit = getTriggerUnit()
2523
- if getUnitTypeId(unit) ~= dummyUnitId then
2524
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2681
+ local unitHandle = getTriggerUnit()
2682
+ local itemHandle = getManipulatedItem()
2683
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2684
+ local unit = ____exports.Unit:of(unitHandle)
2685
+ local item = Item:of(itemHandle)
2686
+ if item.owner ~= unit then
2687
+ return unit, item
2688
+ end
2525
2689
  end
2526
2690
  return IgnoreEvent
2527
2691
  end
@@ -2529,16 +2693,59 @@ Unit.itemPickedUpEvent = __TS__New(
2529
2693
  Unit.itemUsedEvent = __TS__New(
2530
2694
  ____exports.UnitTriggerEvent,
2531
2695
  EVENT_PLAYER_UNIT_USE_ITEM,
2532
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2696
+ function()
2697
+ local unit = getTriggerUnit()
2698
+ local item = getManipulatedItem()
2699
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2700
+ return ____exports.Unit:of(unit), Item:of(item)
2701
+ end
2702
+ return IgnoreEvent
2703
+ end
2533
2704
  )
2534
2705
  Unit.itemStackedEvent = __TS__New(
2535
2706
  ____exports.UnitTriggerEvent,
2536
2707
  EVENT_PLAYER_UNIT_STACK_ITEM,
2537
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2708
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2709
+ )
2710
+ __TS__ObjectDefineProperty(
2711
+ Unit,
2712
+ "itemChargesChangedEvent",
2713
+ {get = function(self)
2714
+ local event = __TS__New(Event)
2715
+ Item.chargesChangedEvent:addListener(function(item)
2716
+ local unit = item.owner
2717
+ if unit ~= nil then
2718
+ invoke(event, unit, item)
2719
+ end
2720
+ end)
2721
+ rawset(self, "itemChargesChangedEvent", event)
2722
+ return event
2723
+ end}
2724
+ )
2725
+ __TS__ObjectDefineProperty(
2726
+ Unit,
2727
+ "itemUseOrderEvent",
2728
+ {get = function(self)
2729
+ local event = __TS__New(Event)
2730
+ for order = orderId("useslot0"), orderId("useslot5") do
2731
+ local slot = order - orderId("useslot0")
2732
+ local function listener(unit)
2733
+ local item = unit.items[slot + 1]
2734
+ if item ~= nil then
2735
+ invoke(event, unit, item)
2736
+ end
2737
+ end
2738
+ self.onImmediateOrder[order]:addListener(listener)
2739
+ self.onTargetOrder[order]:addListener(listener)
2740
+ self.onPointOrder[order]:addListener(listener)
2741
+ end
2742
+ rawset(self, "itemUseOrderEvent", event)
2743
+ return event
2744
+ end}
2538
2745
  )
2539
2746
  __TS__ObjectDefineProperty(
2540
2747
  Unit,
2541
- "itemMovedEvent",
2748
+ "itemMoveOrderEvent",
2542
2749
  {get = function(self)
2543
2750
  local event = __TS__New(Event)
2544
2751
  for order = orderId("moveslot0"), orderId("moveslot5") do
@@ -2556,7 +2763,7 @@ __TS__ObjectDefineProperty(
2556
2763
  end
2557
2764
  end)
2558
2765
  end
2559
- rawset(self, "itemMovedEvent", event)
2766
+ rawset(self, "itemMoveOrderEvent", event)
2560
2767
  return event
2561
2768
  end}
2562
2769
  )