warscript 0.0.1-dev.d30161d → 0.0.1-dev.d3265a5

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 (185) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -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.d.ts +6 -0
  8. package/core/types/frame.lua +91 -1
  9. package/core/types/sound.d.ts +17 -24
  10. package/core/types/sound.lua +99 -24
  11. package/core/types/timer.d.ts +6 -7
  12. package/core/types/timer.lua +18 -21
  13. package/core/util.d.ts +1 -1
  14. package/core/util.lua +18 -1
  15. package/decl/native.d.ts +840 -786
  16. package/engine/behavior.d.ts +2 -2
  17. package/engine/behavior.lua +6 -6
  18. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  19. package/engine/behaviour/ability/always-enabled.lua +31 -0
  20. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  21. package/engine/behaviour/ability/apply-buff.lua +32 -0
  22. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  23. package/engine/behaviour/ability/damage.d.ts +9 -3
  24. package/engine/behaviour/ability/damage.lua +26 -38
  25. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  26. package/engine/behaviour/ability/emulate-impact.lua +42 -0
  27. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  28. package/engine/behaviour/ability/instant-impact.lua +4 -19
  29. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  30. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  31. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  32. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  33. package/engine/behaviour/ability.d.ts +20 -4
  34. package/engine/behaviour/ability.lua +112 -39
  35. package/engine/behaviour/unit.d.ts +22 -0
  36. package/engine/behaviour/unit.lua +134 -4
  37. package/engine/buff.d.ts +84 -43
  38. package/engine/buff.lua +385 -226
  39. package/engine/internal/ability.d.ts +20 -13
  40. package/engine/internal/ability.lua +97 -76
  41. package/engine/internal/item/ability.lua +112 -4
  42. package/engine/internal/item+owner.lua +2 -2
  43. package/engine/internal/item.d.ts +7 -4
  44. package/engine/internal/item.lua +131 -28
  45. package/engine/internal/mechanics/ability-duration.lua +1 -1
  46. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  47. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  48. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  49. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  50. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  51. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  52. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  53. package/engine/internal/object-data/evasion-probability.lua +16 -0
  54. package/engine/internal/unit/ability.d.ts +15 -1
  55. package/engine/internal/unit/ability.lua +50 -14
  56. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  57. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  58. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  59. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  60. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  61. package/engine/internal/unit/allowed-targets.lua +9 -1
  62. package/engine/internal/unit/bonus.d.ts +6 -2
  63. package/engine/internal/unit/bonus.lua +23 -1
  64. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  65. package/engine/internal/unit/ignore-events-items.lua +5 -0
  66. package/engine/internal/unit/item.d.ts +24 -0
  67. package/engine/internal/unit/item.lua +78 -0
  68. package/engine/internal/unit/main-selected.d.ts +13 -0
  69. package/engine/internal/unit/main-selected.lua +51 -0
  70. package/engine/internal/unit/order.d.ts +20 -0
  71. package/engine/internal/unit/order.lua +136 -0
  72. package/engine/internal/unit+ability.lua +2 -2
  73. package/engine/internal/unit+damage.d.ts +2 -11
  74. package/engine/internal/unit+damage.lua +10 -14
  75. package/engine/internal/unit+spellSteal.lua +1 -2
  76. package/engine/internal/unit-missile-launch.lua +25 -6
  77. package/engine/internal/unit.d.ts +52 -13
  78. package/engine/internal/unit.lua +344 -116
  79. package/engine/internal/utility.lua +12 -0
  80. package/engine/lightning.d.ts +12 -5
  81. package/engine/lightning.lua +48 -14
  82. package/engine/local-client.d.ts +7 -2
  83. package/engine/local-client.lua +82 -0
  84. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  85. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  86. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  87. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  88. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  89. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  90. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  91. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  92. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  93. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  94. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  95. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  96. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  97. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  98. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  99. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  100. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  101. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  102. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  103. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  104. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  105. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  106. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  107. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  108. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  109. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  110. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  111. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  112. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  113. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  114. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  115. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  116. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  117. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  118. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  119. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  120. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  121. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  122. package/engine/object-data/entry/ability-type/web.lua +52 -0
  123. package/engine/object-data/entry/ability-type.d.ts +19 -17
  124. package/engine/object-data/entry/ability-type.lua +89 -33
  125. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  126. package/engine/object-data/entry/buff-type.d.ts +6 -12
  127. package/engine/object-data/entry/buff-type.lua +13 -29
  128. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  129. package/engine/object-data/entry/item-type.d.ts +15 -1
  130. package/engine/object-data/entry/item-type.lua +93 -2
  131. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  132. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  133. package/engine/object-data/entry/sound-preset.lua +140 -0
  134. package/engine/object-data/entry/unit-type.d.ts +10 -3
  135. package/engine/object-data/entry/unit-type.lua +155 -92
  136. package/engine/object-data/entry/upgrade.d.ts +1 -1
  137. package/engine/object-data/entry/upgrade.lua +4 -4
  138. package/engine/object-data/entry.d.ts +16 -14
  139. package/engine/object-data/entry.lua +60 -32
  140. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  141. package/engine/object-field/ability.d.ts +26 -3
  142. package/engine/object-field/ability.lua +54 -1
  143. package/engine/object-field/unit.d.ts +50 -3
  144. package/engine/object-field/unit.lua +186 -7
  145. package/engine/object-field.d.ts +17 -6
  146. package/engine/object-field.lua +187 -89
  147. package/engine/standard/entries/buff-type.d.ts +3 -0
  148. package/engine/standard/entries/buff-type.lua +3 -0
  149. package/engine/standard/entries/sound-preset.d.ts +10 -0
  150. package/engine/standard/entries/sound-preset.lua +10 -0
  151. package/engine/standard/fields/ability.d.ts +2 -0
  152. package/engine/standard/fields/ability.lua +2 -0
  153. package/engine/standard/fields/unit.d.ts +3 -0
  154. package/engine/standard/fields/unit.lua +5 -0
  155. package/engine/text-tag.d.ts +12 -1
  156. package/engine/text-tag.lua +44 -10
  157. package/engine/unit.d.ts +4 -0
  158. package/engine/unit.lua +4 -0
  159. package/index.d.ts +1 -0
  160. package/index.lua +1 -0
  161. package/net/socket.d.ts +7 -1
  162. package/net/socket.lua +45 -4
  163. package/network.d.ts +1 -0
  164. package/network.lua +3 -2
  165. package/objutil/buff.lua +2 -3
  166. package/objutil/unit.lua +8 -0
  167. package/package.json +2 -2
  168. package/patch-lua.d.ts +0 -0
  169. package/patch-lua.lua +10 -0
  170. package/utility/arrays.d.ts +9 -1
  171. package/utility/arrays.lua +37 -3
  172. package/utility/functions.d.ts +1 -0
  173. package/utility/functions.lua +1 -0
  174. package/utility/lazy.d.ts +2 -0
  175. package/utility/lazy.lua +14 -0
  176. package/utility/linked-set.d.ts +12 -2
  177. package/utility/linked-set.lua +8 -2
  178. package/utility/lua-maps.d.ts +4 -0
  179. package/utility/lua-maps.lua +20 -0
  180. package/utility/lua-sets.d.ts +1 -0
  181. package/utility/lua-sets.lua +3 -0
  182. package/utility/reflection.lua +11 -7
  183. package/utility/types.d.ts +1 -0
  184. package/core/types/order.d.ts +0 -25
  185. package/core/types/order.lua +0 -55
@@ -51,12 +51,19 @@ 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
54
63
  local match = string.match
55
64
  local ____tostring = _G.tostring
56
65
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
66
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
67
  local getUnitIntegerField = BlzGetUnitIntegerField
61
68
  local getUnitRealField = BlzGetUnitRealField
62
69
  local getHeroStr = GetHeroStr
@@ -75,9 +82,9 @@ local setUnitScale = SetUnitScale
75
82
  local setUnitPosition = SetUnitPosition
76
83
  local setUnitTimeScale = SetUnitTimeScale
77
84
  local getHandleId = GetHandleId
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
86
  local createUnit = CreateUnit
79
87
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
88
  local removeUnit = RemoveUnit
82
89
  local getUnitTypeId = GetUnitTypeId
83
90
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +100,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
101
  local isUnitInRangeXY = IsUnitInRangeXY
95
102
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -125,8 +130,6 @@ 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,
@@ -432,6 +446,19 @@ __TS__SetDescriptor(
432
446
  },
433
447
  true
434
448
  )
449
+ __TS__SetDescriptor(
450
+ UnitWeapon.prototype,
451
+ "allowedTargetCombatClassifications",
452
+ {
453
+ get = function(self)
454
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
455
+ end,
456
+ set = function(self, allowedTargetCombatClassifications)
457
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
458
+ end
459
+ },
460
+ true
461
+ )
435
462
  __TS__SetDescriptor(
436
463
  UnitWeapon.prototype,
437
464
  "damageBase",
@@ -562,17 +589,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
589
  ____exports.Unit:of(unit)
563
590
  )
564
591
  end
565
- if not unitAddAbility(unit, abilityId) then
566
- if getUnitAbility(unit, abilityId) == ability then
567
- return UnitAbility:of(
568
- ability,
569
- abilityId,
570
- ____exports.Unit:of(unit)
571
- )
572
- end
573
- else
574
- unitRemoveAbility(unit, abilityId)
575
- end
576
592
  for i = 0, unitInventorySize(unit) - 1 do
577
593
  local item = unitItemInSlot(unit, i)
578
594
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +646,15 @@ for ____, player in ipairs(Player.all) do
630
646
  dummies[player] = dummy
631
647
  end
632
648
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
649
+ local counter = (unit[103] or 0) - 1
634
650
  if counter ~= 0 then
635
- unit[102] = counter
651
+ unit[103] = counter
636
652
  return
637
653
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
654
+ unit[103] = nil
655
+ local healthBonus = unit[104]
640
656
  if healthBonus ~= nil then
641
- unit[103] = nil
657
+ unit[104] = nil
642
658
  local handle = unit.handle
643
659
  BlzSetUnitMaxHP(
644
660
  handle,
@@ -646,12 +662,18 @@ local function delayHealthChecksCallback(unit)
646
662
  )
647
663
  end
648
664
  end
665
+ local nextSyncId = 1
666
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
667
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
649
668
  ____exports.Unit = __TS__Class()
650
669
  local Unit = ____exports.Unit
651
670
  Unit.name = "Unit"
652
671
  __TS__ClassExtends(Unit, Handle)
653
672
  function Unit.prototype.____constructor(self, handle)
654
673
  Handle.prototype.____constructor(self, handle)
674
+ local ____nextSyncId_0 = nextSyncId
675
+ nextSyncId = ____nextSyncId_0 + 1
676
+ self.syncId = ____nextSyncId_0
655
677
  self._owner = Player:of(getOwningPlayer(handle))
656
678
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
679
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +686,7 @@ function Unit.prototype.____constructor(self, handle)
664
686
  fourCC("Amrf")
665
687
  ))
666
688
  end
689
+ unitBySyncId[self.syncId] = self
667
690
  local ____ = self.abilities
668
691
  end
669
692
  function Unit.prototype.getEvent(self, event, collector)
@@ -682,6 +705,8 @@ function Unit.prototype.getEvent(self, event, collector)
682
705
  end
683
706
  function Unit.prototype.onDestroy(self)
684
707
  local handle = self.handle
708
+ self[107] = getUnitX(handle)
709
+ self[108] = getUnitY(handle)
685
710
  if not self._owner then
686
711
  self._owner = Player:of(getOwningPlayer(handle))
687
712
  end
@@ -749,8 +774,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
774
  end}
750
775
  end
751
776
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
777
+ local ____combatClassification_1 = combatClassification
778
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
754
779
  end
755
780
  function Unit.prototype.addClassification(self, classification)
756
781
  return unitAddType(self.handle, classification)
@@ -768,13 +793,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
793
  return isUnitInvisible(self.handle, player.handle)
769
794
  end
770
795
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
796
+ local ____temp_2
772
797
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
798
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
799
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
800
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
801
  end
777
- return ____temp_1
802
+ return ____temp_2
778
803
  end
779
804
  function Unit.prototype.isAllyOf(self, unit)
780
805
  return isUnitAlly(
@@ -792,16 +817,28 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
817
  if type(animation) == "number" then
793
818
  setUnitAnimationByIndex(self.handle, animation)
794
819
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
820
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
821
  else
797
822
  setUnitAnimation(self.handle, animation)
798
823
  end
799
824
  end
825
+ function Unit.prototype.resetAnimation(self)
826
+ ResetUnitAnimation(self.handle)
827
+ end
800
828
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
829
+ QueueUnitAnimation(self.handle, animation)
830
+ end
831
+ function Unit.prototype.chooseWeapon(self, target)
832
+ if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
833
+ return self.firstWeapon
834
+ end
835
+ if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
836
+ return self.secondWeapon
837
+ end
838
+ return nil
802
839
  end
803
840
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
841
+ self[103] = (self[103] or 0) + 1
805
842
  Timer:run(delayHealthChecksCallback, self)
806
843
  end
807
844
  function Unit.prototype.setPosition(self, x, y)
@@ -811,21 +848,21 @@ function Unit.prototype.isSelected(self, player)
811
848
  return IsUnitSelected(self.handle, player.handle)
812
849
  end
813
850
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
851
+ SetUnitExploded(self.handle, true)
815
852
  killUnit(self.handle)
816
853
  end
817
854
  function Unit.prototype.kill(self)
818
855
  killUnit(self.handle)
819
856
  end
820
857
  function Unit.prototype.revive(self, x, y, doEffect)
821
- local ____ReviveHero_4 = ReviveHero
822
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
- local ____doEffect_2 = doEffect
824
- if ____doEffect_2 == nil then
825
- ____doEffect_2 = false
858
+ local ____ReviveHero_5 = ReviveHero
859
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
860
+ local ____doEffect_3 = doEffect
861
+ if ____doEffect_3 == nil then
862
+ ____doEffect_3 = false
826
863
  end
827
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
864
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
865
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
829
866
  end
830
867
  function Unit.prototype.healTarget(self, target, amount)
831
868
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,7 +902,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
902
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
903
  end
867
904
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(UnitItemInSlot(self.handle, slot))
905
+ return Item:of(unitItemInSlot(self.handle, slot))
869
906
  end
870
907
  function Unit.prototype.addAbility(self, abilityId)
871
908
  if unitAddAbility(self.handle, abilityId) then
@@ -930,12 +967,34 @@ end
930
967
  function Unit.prototype.endAbilityCooldown(self, abilityId)
931
968
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
932
969
  end
970
+ function Unit.prototype.interruptMovement(self)
971
+ local handle = self.handle
972
+ unitDisableAbility(
973
+ handle,
974
+ fourCC("Amov"),
975
+ true,
976
+ false
977
+ )
978
+ unitDisableAbility(
979
+ handle,
980
+ fourCC("Amov"),
981
+ false,
982
+ false
983
+ )
984
+ end
933
985
  function Unit.prototype.interruptAttack(self)
934
986
  unitInterruptAttack(self.handle)
935
987
  end
936
988
  function Unit.prototype.interruptCast(self, abilityId)
937
- unitDisableAbility(self.handle, abilityId, true, false)
938
- unitDisableAbility(self.handle, abilityId, false, false)
989
+ local handle = self.handle
990
+ unitDisableAbility(handle, abilityId, true, false)
991
+ Timer:run(
992
+ unitDisableAbility,
993
+ handle,
994
+ abilityId,
995
+ false,
996
+ false
997
+ )
939
998
  end
940
999
  function Unit.prototype.getDistanceTo(self, target)
941
1000
  local handle = self.handle
@@ -995,18 +1054,18 @@ function Unit.prototype.unpauseEx(self)
995
1054
  self:decrementStunCounter()
996
1055
  end
997
1056
  function Unit.prototype.incrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 0 then
1057
+ local stunCounter = self[102] or 0
1058
+ if not self[101] or stunCounter >= 0 then
1000
1059
  BlzPauseUnitEx(self.handle, true)
1001
1060
  end
1002
- self[101] = stunCounter + 1
1061
+ self[102] = stunCounter + 1
1003
1062
  end
1004
1063
  function Unit.prototype.decrementStunCounter(self)
1005
- local stunCounter = self[101] or 0
1006
- if not self[100] or stunCounter >= 1 then
1064
+ local stunCounter = self[102] or 0
1065
+ if not self[101] or stunCounter >= 1 then
1007
1066
  BlzPauseUnitEx(self.handle, false)
1008
1067
  end
1009
- self[101] = stunCounter - 1
1068
+ self[102] = stunCounter - 1
1010
1069
  end
1011
1070
  function Unit.create(self, owner, id, x, y, facing, skinId)
1012
1071
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1108,8 +1167,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1108
1167
  )
1109
1168
  return targetCollection
1110
1169
  end
1111
- function Unit.getSelectionOf(self, player)
1112
- targetCollection = {}
1170
+ function Unit.getSelectionOf(self, player, target)
1171
+ if target == nil then
1172
+ target = {}
1173
+ end
1174
+ targetCollection = target
1113
1175
  targetCollectionNextIndex = 1
1114
1176
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1115
1177
  return targetCollection
@@ -1131,6 +1193,9 @@ end
1131
1193
  function Unit.prototype.__tostring(self)
1132
1194
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1133
1195
  end
1196
+ function Unit.getBySyncId(self, syncId)
1197
+ return unitBySyncId[syncId]
1198
+ end
1134
1199
  __TS__SetDescriptor(
1135
1200
  Unit.prototype,
1136
1201
  "_deltas",
@@ -1194,6 +1259,14 @@ __TS__SetDescriptor(
1194
1259
  end},
1195
1260
  true
1196
1261
  )
1262
+ __TS__SetDescriptor(
1263
+ Unit.prototype,
1264
+ "isStunned",
1265
+ {get = function(self)
1266
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1267
+ end},
1268
+ true
1269
+ )
1197
1270
  __TS__SetDescriptor(
1198
1271
  Unit.prototype,
1199
1272
  "combatClassifications",
@@ -1267,6 +1340,19 @@ __TS__SetDescriptor(
1267
1340
  },
1268
1341
  true
1269
1342
  )
1343
+ __TS__SetDescriptor(
1344
+ Unit.prototype,
1345
+ "primaryAttribute",
1346
+ {
1347
+ get = function(self)
1348
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1349
+ end,
1350
+ set = function(self, primaryAttribute)
1351
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1352
+ end
1353
+ },
1354
+ true
1355
+ )
1270
1356
  __TS__SetDescriptor(
1271
1357
  Unit.prototype,
1272
1358
  "strengthBase",
@@ -1388,17 +1474,17 @@ __TS__SetDescriptor(
1388
1474
  "isTeamGlowVisible",
1389
1475
  {
1390
1476
  get = function(self)
1391
- return not self[105]
1477
+ return not self[106]
1392
1478
  end,
1393
1479
  set = function(self, isTeamGlowVisible)
1394
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1395
- local ____temp_5
1480
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1481
+ local ____temp_6
1396
1482
  if not isTeamGlowVisible then
1397
- ____temp_5 = true
1483
+ ____temp_6 = true
1398
1484
  else
1399
- ____temp_5 = nil
1485
+ ____temp_6 = nil
1400
1486
  end
1401
- self[105] = ____temp_5
1487
+ self[106] = ____temp_6
1402
1488
  end
1403
1489
  },
1404
1490
  true
@@ -1407,9 +1493,9 @@ __TS__SetDescriptor(
1407
1493
  Unit.prototype,
1408
1494
  "color",
1409
1495
  {set = function(self, color)
1410
- setUnitColor(self.handle, color.handle)
1411
- if self[105] then
1412
- showUnitTeamGlow(self.handle, false)
1496
+ SetUnitColor(self.handle, color.handle)
1497
+ if self[106] then
1498
+ BlzShowUnitTeamGlow(self.handle, false)
1413
1499
  end
1414
1500
  end},
1415
1501
  true
@@ -1432,14 +1518,14 @@ __TS__SetDescriptor(
1432
1518
  "maxHealth",
1433
1519
  {
1434
1520
  get = function(self)
1435
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1521
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1436
1522
  end,
1437
1523
  set = function(self, maxHealth)
1438
- if maxHealth < 1 and self[102] ~= nil then
1439
- self[103] = (self[103] or 0) + (1 - maxHealth)
1524
+ if maxHealth < 1 and self[103] ~= nil then
1525
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1440
1526
  maxHealth = 1
1441
1527
  end
1442
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1528
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1443
1529
  end
1444
1530
  },
1445
1531
  true
@@ -1481,10 +1567,10 @@ __TS__SetDescriptor(
1481
1567
  "health",
1482
1568
  {
1483
1569
  get = function(self)
1484
- return GetWidgetLife(self.handle) - (self[104] or 0)
1570
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1485
1571
  end,
1486
1572
  set = function(self, health)
1487
- SetWidgetLife(self.handle, health + (self[104] or 0))
1573
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1488
1574
  end
1489
1575
  },
1490
1576
  true
@@ -1578,7 +1664,7 @@ __TS__SetDescriptor(
1578
1664
  "x",
1579
1665
  {
1580
1666
  get = function(self)
1581
- return getUnitX(self.handle)
1667
+ return self[107] or getUnitX(self.handle)
1582
1668
  end,
1583
1669
  set = function(self, v)
1584
1670
  SetUnitX(self.handle, v)
@@ -1591,7 +1677,7 @@ __TS__SetDescriptor(
1591
1677
  "y",
1592
1678
  {
1593
1679
  get = function(self)
1594
- return getUnitY(self.handle)
1680
+ return self[108] or getUnitY(self.handle)
1595
1681
  end,
1596
1682
  set = function(self, v)
1597
1683
  SetUnitY(self.handle, v)
@@ -1677,10 +1763,10 @@ __TS__SetDescriptor(
1677
1763
  "gold",
1678
1764
  {
1679
1765
  get = function(self)
1680
- return getResourceAmount(self.handle)
1766
+ return GetResourceAmount(self.handle)
1681
1767
  end,
1682
1768
  set = function(self, gold)
1683
- setResourceAmount(self.handle, gold)
1769
+ SetResourceAmount(self.handle, gold)
1684
1770
  end
1685
1771
  },
1686
1772
  true
@@ -1695,17 +1781,17 @@ __TS__SetDescriptor(
1695
1781
  set = function(self, isPaused)
1696
1782
  local handle = self.handle
1697
1783
  if isPaused and not IsUnitPaused(handle) then
1698
- self[100] = true
1699
- for _ = self[101] or 0, -1 do
1784
+ self[101] = true
1785
+ for _ = self[102] or 0, -1 do
1700
1786
  BlzPauseUnitEx(handle, true)
1701
1787
  end
1702
1788
  PauseUnit(handle, true)
1703
1789
  elseif not isPaused and IsUnitPaused(handle) then
1704
1790
  PauseUnit(handle, false)
1705
- for _ = self[101] or 0, -1 do
1791
+ for _ = self[102] or 0, -1 do
1706
1792
  BlzPauseUnitEx(handle, false)
1707
1793
  end
1708
- self[100] = nil
1794
+ self[101] = nil
1709
1795
  end
1710
1796
  end
1711
1797
  },
@@ -1808,6 +1894,19 @@ __TS__SetDescriptor(
1808
1894
  end},
1809
1895
  true
1810
1896
  )
1897
+ __TS__SetDescriptor(
1898
+ Unit.prototype,
1899
+ "movementType",
1900
+ {
1901
+ get = function(self)
1902
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1903
+ end,
1904
+ set = function(self, movementType)
1905
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1906
+ end
1907
+ },
1908
+ true
1909
+ )
1811
1910
  __TS__SetDescriptor(
1812
1911
  Unit.prototype,
1813
1912
  "pathing",
@@ -1989,6 +2088,14 @@ __TS__SetDescriptor(
1989
2088
  end},
1990
2089
  true
1991
2090
  )
2091
+ __TS__SetDescriptor(
2092
+ Unit.prototype,
2093
+ "targetAcquiredEvent",
2094
+ {get = function(self)
2095
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2096
+ end},
2097
+ true
2098
+ )
1992
2099
  __TS__SetDescriptor(
1993
2100
  Unit.prototype,
1994
2101
  "onSelect",
@@ -2124,25 +2231,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2124
2231
  InitializingEvent,
2125
2232
  function(event)
2126
2233
  local function listener(unit, id)
2127
- local ____GetSpellTargetUnit_result_8
2234
+ local ____GetSpellTargetUnit_result_9
2128
2235
  if GetSpellTargetUnit() then
2129
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2236
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2130
2237
  else
2131
- local ____GetSpellTargetItem_result_7
2238
+ local ____GetSpellTargetItem_result_8
2132
2239
  if GetSpellTargetItem() then
2133
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2240
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2134
2241
  else
2135
- local ____GetSpellTargetDestructable_result_6
2242
+ local ____GetSpellTargetDestructable_result_7
2136
2243
  if GetSpellTargetDestructable() then
2137
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2244
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2138
2245
  else
2139
- ____GetSpellTargetDestructable_result_6 = nil
2246
+ ____GetSpellTargetDestructable_result_7 = nil
2140
2247
  end
2141
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2248
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2142
2249
  end
2143
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2250
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2144
2251
  end
2145
- local target = ____GetSpellTargetUnit_result_8
2252
+ local target = ____GetSpellTargetUnit_result_9
2146
2253
  if target then
2147
2254
  invoke(event, unit, id, target)
2148
2255
  end
@@ -2314,10 +2421,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2314
2421
  ____exports.UnitTriggerEvent,
2315
2422
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2316
2423
  function()
2317
- local unit = ____exports.Unit:of(getOrderedUnit())
2318
- local issuedOrderId = getIssuedOrderId()
2319
- if unit ~= nil and unit.state == 1 then
2320
- return unit, issuedOrderId
2424
+ local handle = getOrderedUnit()
2425
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2426
+ local unit = ____exports.Unit:of(handle)
2427
+ if unit.state == 1 then
2428
+ return unit, getIssuedOrderId()
2429
+ end
2321
2430
  end
2322
2431
  return IgnoreEvent
2323
2432
  end
@@ -2348,13 +2457,19 @@ Unit.onDamaging = (function()
2348
2457
  if source and source.typeId == dummyUnitId then
2349
2458
  source = nil
2350
2459
  end
2351
- local target = BlzGetEventDamageTarget()
2460
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2461
+ local metadata = damageMetadataByTarget[target]
2462
+ damageMetadataByTarget[target] = nil
2352
2463
  local data = {
2353
2464
  amount = GetEventDamage(),
2354
- attackType = BlzGetEventAttackType(),
2465
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2355
2466
  damageType = BlzGetEventDamageType(),
2356
2467
  weaponType = BlzGetEventWeaponType(),
2357
- isAttack = BlzGetEventIsAttack()
2468
+ metadata = metadata,
2469
+ isAttack = BlzGetEventIsAttack(),
2470
+ originalAmount = GetEventDamage(),
2471
+ originalMetadata = metadata,
2472
+ preventRetaliation = damagingEventPreventRetaliation
2358
2473
  }
2359
2474
  if data.isAttack and source then
2360
2475
  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
@@ -2368,18 +2483,36 @@ Unit.onDamaging = (function()
2368
2483
  invoke(
2369
2484
  event,
2370
2485
  source,
2371
- ____exports.Unit:of(target),
2486
+ target,
2372
2487
  setmetatable(
2373
2488
  {},
2374
2489
  {
2375
2490
  __index = data,
2376
2491
  __newindex = function(self, key, value)
2377
- damageSetters[key](value)
2492
+ local damageSetter = damageSetters[key]
2493
+ if damageSetter ~= nil then
2494
+ damageSetter(value)
2495
+ end
2378
2496
  data[key] = value
2379
2497
  end
2380
2498
  }
2381
2499
  )
2382
2500
  )
2501
+ if data[0] and source then
2502
+ local sourceOwner = source.owner.handle
2503
+ data[1] = sourceOwner
2504
+ local targetOwner = target.owner.handle
2505
+ data[2] = targetOwner
2506
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2507
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2508
+ data[3] = true
2509
+ end
2510
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2511
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2512
+ data[4] = true
2513
+ end
2514
+ end
2515
+ damagingEventByTarget[target] = data
2383
2516
  return
2384
2517
  end
2385
2518
  BlzSetEventDamage(0)
@@ -2387,7 +2520,7 @@ Unit.onDamaging = (function()
2387
2520
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2388
2521
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2389
2522
  local sourceOwner = source.owner.handle
2390
- local targetOwner = GetOwningPlayer(target)
2523
+ local targetOwner = target.owner.handle
2391
2524
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2392
2525
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2393
2526
  Timer:run(function()
@@ -2403,23 +2536,19 @@ Unit.onDamaging = (function()
2403
2536
  for ____, ____value in ipairs(source._attackHandlers) do
2404
2537
  local condition = ____value[1]
2405
2538
  local action = ____value[2]
2406
- if condition(
2407
- source,
2408
- ____exports.Unit:of(target),
2409
- data
2410
- ) then
2539
+ if condition(source, target, data) then
2411
2540
  action(
2412
2541
  source,
2413
- ____exports.Unit:of(target),
2542
+ target,
2414
2543
  setmetatable(
2415
2544
  {fire = function()
2416
2545
  UnitDamageTarget(
2417
2546
  source.handle,
2418
- target,
2547
+ target.handle,
2419
2548
  data.amount,
2420
2549
  true,
2421
2550
  true,
2422
- data.attackType,
2551
+ attackTypeToNative(data.attackType),
2423
2552
  data.damageType,
2424
2553
  data.weaponType
2425
2554
  )
@@ -2446,29 +2575,54 @@ Unit.onDamage = __TS__New(
2446
2575
  if source and source.typeId == dummyUnitId then
2447
2576
  source = nil
2448
2577
  end
2578
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2579
+ local damagingEvent = damagingEventByTarget[target]
2580
+ damagingEventByTarget[target] = nil
2449
2581
  local data = {
2450
2582
  amount = GetEventDamage(),
2451
- attackType = BlzGetEventAttackType(),
2583
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2452
2584
  damageType = BlzGetEventDamageType(),
2453
2585
  weaponType = BlzGetEventWeaponType(),
2586
+ metadata = damagingEvent and damagingEvent.metadata,
2454
2587
  isAttack = BlzGetEventIsAttack(),
2588
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2589
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2455
2590
  preventDeath = damageEventPreventDeath
2456
2591
  }
2592
+ if damagingEvent then
2593
+ for key, value in pairs(damagingEvent) do
2594
+ if isAttribute(key) then
2595
+ data[key] = value
2596
+ end
2597
+ end
2598
+ local sourceOwner = damagingEvent[1]
2599
+ if sourceOwner then
2600
+ local targetOwner = damagingEvent[2]
2601
+ if damagingEvent[3] then
2602
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2603
+ end
2604
+ if damagingEvent[4] then
2605
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2606
+ end
2607
+ end
2608
+ end
2457
2609
  local evData = setmetatable(
2458
2610
  {},
2459
2611
  {
2460
2612
  __index = data,
2461
2613
  __newindex = function(self, key, value)
2462
- damageSetters[key](value)
2614
+ local damageSetter = damageSetters[key]
2615
+ if damageSetter ~= nil then
2616
+ damageSetter(value)
2617
+ end
2463
2618
  data[key] = value
2464
2619
  end
2465
2620
  }
2466
2621
  )
2467
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2468
2622
  invoke(event, source, target, evData)
2469
2623
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2470
2624
  local bonusHealth = math.ceil(evData.amount)
2471
- target[104] = (target[104] or 0) + bonusHealth
2625
+ target[105] = (target[105] or 0) + bonusHealth
2472
2626
  BlzSetUnitMaxHP(
2473
2627
  target.handle,
2474
2628
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2482,7 +2636,7 @@ Unit.onDamage = __TS__New(
2482
2636
  evData[0],
2483
2637
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2484
2638
  )
2485
- target[104] = (target[104] or 0) - bonusHealth
2639
+ target[105] = (target[105] or 0) - bonusHealth
2486
2640
  SetWidgetLife(
2487
2641
  target.handle,
2488
2642
  GetWidgetLife(target.handle) - bonusHealth
@@ -2502,32 +2656,106 @@ Unit.onDamage = __TS__New(
2502
2656
  DestroyTrigger(trigger)
2503
2657
  end
2504
2658
  )
2505
- Unit.onItemDrop = __TS__New(
2659
+ Unit.itemDroppedEvent = __TS__New(
2506
2660
  ____exports.UnitTriggerEvent,
2507
2661
  EVENT_PLAYER_UNIT_DROP_ITEM,
2508
2662
  function()
2509
2663
  local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2664
+ local item = getManipulatedItem()
2665
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2666
+ return ____exports.Unit:of(unit), Item:of(item)
2512
2667
  end
2513
2668
  return IgnoreEvent
2514
2669
  end
2515
2670
  )
2516
- Unit.onItemPickup = __TS__New(
2671
+ Unit.itemPickedUpEvent = __TS__New(
2517
2672
  ____exports.UnitTriggerEvent,
2518
2673
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2519
2674
  function()
2520
2675
  local unit = getTriggerUnit()
2521
- if getUnitTypeId(unit) ~= dummyUnitId then
2522
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2676
+ local item = getManipulatedItem()
2677
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2678
+ return ____exports.Unit:of(unit), Item:of(item)
2523
2679
  end
2524
2680
  return IgnoreEvent
2525
2681
  end
2526
2682
  )
2527
- Unit.onItemUse = __TS__New(
2683
+ Unit.itemUsedEvent = __TS__New(
2528
2684
  ____exports.UnitTriggerEvent,
2529
2685
  EVENT_PLAYER_UNIT_USE_ITEM,
2530
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2686
+ function()
2687
+ local unit = getTriggerUnit()
2688
+ local item = getManipulatedItem()
2689
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2690
+ return ____exports.Unit:of(unit), Item:of(item)
2691
+ end
2692
+ return IgnoreEvent
2693
+ end
2694
+ )
2695
+ Unit.itemStackedEvent = __TS__New(
2696
+ ____exports.UnitTriggerEvent,
2697
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2698
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2699
+ )
2700
+ __TS__ObjectDefineProperty(
2701
+ Unit,
2702
+ "itemChargesChangedEvent",
2703
+ {get = function(self)
2704
+ local event = __TS__New(Event)
2705
+ Item.chargesChangedEvent:addListener(function(item)
2706
+ local unit = item.owner
2707
+ if unit ~= nil then
2708
+ invoke(event, unit, item)
2709
+ end
2710
+ end)
2711
+ rawset(self, "itemChargesChangedEvent", event)
2712
+ return event
2713
+ end}
2714
+ )
2715
+ __TS__ObjectDefineProperty(
2716
+ Unit,
2717
+ "itemUseOrderEvent",
2718
+ {get = function(self)
2719
+ local event = __TS__New(Event)
2720
+ for order = orderId("useslot0"), orderId("useslot5") do
2721
+ local slot = order - orderId("useslot0")
2722
+ local function listener(unit)
2723
+ local item = unit.items[slot + 1]
2724
+ if item ~= nil then
2725
+ invoke(event, unit, item)
2726
+ end
2727
+ end
2728
+ self.onImmediateOrder[order]:addListener(listener)
2729
+ self.onTargetOrder[order]:addListener(listener)
2730
+ self.onPointOrder[order]:addListener(listener)
2731
+ end
2732
+ rawset(self, "itemUseOrderEvent", event)
2733
+ return event
2734
+ end}
2735
+ )
2736
+ __TS__ObjectDefineProperty(
2737
+ Unit,
2738
+ "itemMoveOrderEvent",
2739
+ {get = function(self)
2740
+ local event = __TS__New(Event)
2741
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2742
+ local slotTo = order - orderId("moveslot0")
2743
+ self.onTargetOrder[order]:addListener(function(unit, item)
2744
+ local slotFrom = unit.items:findSlot(item)
2745
+ if slotFrom ~= nil then
2746
+ invoke(
2747
+ event,
2748
+ unit,
2749
+ item,
2750
+ slotFrom,
2751
+ slotTo
2752
+ )
2753
+ end
2754
+ end)
2755
+ end
2756
+ rawset(self, "itemMoveOrderEvent", event)
2757
+ return event
2758
+ end}
2531
2759
  )
2532
2760
  __TS__ObjectDefineProperty(
2533
2761
  Unit,