warscript 0.0.1-dev.c16baee → 0.0.1-dev.c1c578a

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 +5 -0
  2. package/attributes.lua +8 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -0
  10. package/core/types/frame.lua +93 -1
  11. package/core/types/handle.lua +2 -0
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/timer.d.ts +6 -7
  15. package/core/types/timer.lua +18 -21
  16. package/core/util.d.ts +1 -1
  17. package/core/util.lua +18 -1
  18. package/decl/native.d.ts +840 -786
  19. package/engine/behavior.d.ts +2 -2
  20. package/engine/behavior.lua +6 -6
  21. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  22. package/engine/behaviour/ability/always-enabled.lua +31 -0
  23. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  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 +39 -11
  27. package/engine/behaviour/ability/damage.lua +83 -37
  28. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  29. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  30. package/engine/behaviour/ability/heal.d.ts +33 -6
  31. package/engine/behaviour/ability/heal.lua +89 -10
  32. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  33. package/engine/behaviour/ability/instant-impact.lua +4 -19
  34. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  35. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  36. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  37. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  38. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  39. package/engine/behaviour/ability/restore-mana.lua +29 -0
  40. package/engine/behaviour/ability.d.ts +20 -4
  41. package/engine/behaviour/ability.lua +111 -38
  42. package/engine/behaviour/unit.d.ts +7 -0
  43. package/engine/behaviour/unit.lua +20 -0
  44. package/engine/buff.d.ts +101 -39
  45. package/engine/buff.lua +458 -203
  46. package/engine/game-map.d.ts +7 -0
  47. package/engine/game-map.lua +32 -0
  48. package/engine/internal/ability.d.ts +16 -13
  49. package/engine/internal/ability.lua +80 -76
  50. package/engine/internal/item/ability.lua +106 -0
  51. package/engine/internal/item+owner.lua +2 -2
  52. package/engine/internal/item.d.ts +4 -3
  53. package/engine/internal/item.lua +56 -25
  54. package/engine/internal/mechanics/ability-duration.lua +1 -1
  55. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  56. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  57. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  58. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  59. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  60. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  61. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  62. package/engine/internal/object-data/evasion-probability.lua +16 -0
  63. package/engine/internal/unit/ability.d.ts +10 -1
  64. package/engine/internal/unit/ability.lua +36 -14
  65. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  66. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  67. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  68. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  69. package/engine/internal/unit/bonus.d.ts +6 -2
  70. package/engine/internal/unit/bonus.lua +23 -1
  71. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  72. package/engine/internal/unit/ignore-events-items.lua +5 -0
  73. package/engine/internal/unit/item.d.ts +24 -0
  74. package/engine/internal/unit/item.lua +78 -0
  75. package/engine/internal/unit/main-selected.d.ts +13 -0
  76. package/engine/internal/unit/main-selected.lua +51 -0
  77. package/engine/internal/unit+ability.lua +2 -2
  78. package/engine/internal/unit+damage.d.ts +2 -11
  79. package/engine/internal/unit+damage.lua +10 -14
  80. package/engine/internal/unit+spellSteal.lua +1 -2
  81. package/engine/internal/unit+transport.lua +4 -10
  82. package/engine/internal/unit-missile-launch.lua +24 -5
  83. package/engine/internal/unit.d.ts +44 -12
  84. package/engine/internal/unit.lua +267 -124
  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 +7 -2
  89. package/engine/local-client.lua +82 -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/attachment-preset.d.ts +7 -2
  93. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  94. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  95. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  96. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  97. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  98. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  99. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  100. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  101. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  102. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  103. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  104. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  105. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  106. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  107. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  108. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  109. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  110. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  111. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  112. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  113. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  114. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  115. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  116. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  117. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  118. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  119. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  120. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  121. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  122. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  123. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  124. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  125. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  126. package/engine/object-data/entry/ability-type/web.lua +52 -0
  127. package/engine/object-data/entry/ability-type.d.ts +19 -17
  128. package/engine/object-data/entry/ability-type.lua +89 -33
  129. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  130. package/engine/object-data/entry/buff-type.d.ts +6 -12
  131. package/engine/object-data/entry/buff-type.lua +13 -29
  132. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  133. package/engine/object-data/entry/item-type.d.ts +15 -1
  134. package/engine/object-data/entry/item-type.lua +93 -2
  135. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  136. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  137. package/engine/object-data/entry/sound-preset.lua +140 -0
  138. package/engine/object-data/entry/unit-type.d.ts +10 -3
  139. package/engine/object-data/entry/unit-type.lua +155 -92
  140. package/engine/object-data/entry/upgrade.d.ts +1 -1
  141. package/engine/object-data/entry/upgrade.lua +4 -4
  142. package/engine/object-data/entry.d.ts +16 -14
  143. package/engine/object-data/entry.lua +60 -32
  144. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  145. package/engine/object-field/ability.d.ts +26 -3
  146. package/engine/object-field/ability.lua +54 -1
  147. package/engine/object-field/unit.d.ts +46 -3
  148. package/engine/object-field/unit.lua +173 -7
  149. package/engine/object-field.d.ts +11 -3
  150. package/engine/object-field.lua +162 -76
  151. package/engine/standard/entries/buff-type.d.ts +3 -0
  152. package/engine/standard/entries/buff-type.lua +3 -0
  153. package/engine/standard/entries/sound-preset.d.ts +10 -0
  154. package/engine/standard/entries/sound-preset.lua +10 -0
  155. package/engine/standard/fields/ability.d.ts +2 -0
  156. package/engine/standard/fields/ability.lua +2 -0
  157. package/engine/unit.d.ts +3 -0
  158. package/engine/unit.lua +3 -0
  159. package/index.d.ts +1 -0
  160. package/index.lua +1 -0
  161. package/lualib_bundle.lua +7 -2
  162. package/net/socket.d.ts +7 -1
  163. package/net/socket.lua +45 -4
  164. package/network.d.ts +1 -0
  165. package/network.lua +3 -2
  166. package/objutil/buff.lua +2 -3
  167. package/objutil/unit.lua +8 -0
  168. package/package.json +2 -2
  169. package/patch-lua.d.ts +0 -0
  170. package/patch-lua.lua +10 -0
  171. package/property.d.ts +55 -0
  172. package/property.lua +374 -0
  173. package/utility/arrays.d.ts +9 -1
  174. package/utility/arrays.lua +37 -3
  175. package/utility/functions.d.ts +1 -0
  176. package/utility/functions.lua +1 -0
  177. package/utility/lazy.d.ts +2 -0
  178. package/utility/lazy.lua +14 -0
  179. package/utility/linked-set.d.ts +12 -2
  180. package/utility/linked-set.lua +8 -2
  181. package/utility/lua-maps.d.ts +3 -0
  182. package/utility/lua-maps.lua +16 -0
  183. package/utility/lua-sets.d.ts +1 -0
  184. package/utility/lua-sets.lua +3 -0
  185. package/utility/reflection.lua +11 -7
  186. package/utility/types.d.ts +1 -0
  187. package/core/mapbounds.d.ts +0 -8
  188. package/core/mapbounds.lua +0 -12
@@ -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
@@ -290,7 +294,6 @@ local function dispatch(event, idGetter, argsGetter)
290
294
  return event[id]
291
295
  end
292
296
  if not initialized then
293
- local invoke = Event.invoke
294
297
  event:addListener(function(...)
295
298
  local id = idGetter(...)
296
299
  local dispatched = rawget(self, id)
@@ -328,7 +331,6 @@ local function dispatchAbility(event)
328
331
  return event[id]
329
332
  end
330
333
  if not initialized then
331
- local invoke = Event.invoke
332
334
  event:addListener(function(unit, ability, ...)
333
335
  local dispatched = rawget(self, ability.typeId)
334
336
  if dispatched ~= nil then
@@ -356,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
356
358
  rawset(self, 1 + i, (select(i, ...)))
357
359
  end
358
360
  end
359
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
361
+ local damageSetters = {
362
+ amount = BlzSetEventDamage,
363
+ attackType = function(attackType)
364
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
365
+ end,
366
+ damageType = BlzSetEventDamageType,
367
+ weaponType = BlzSetEventWeaponType
368
+ }
360
369
  local jlimitopByOperator = {
361
370
  [0] = LESS_THAN_OR_EQUAL,
362
371
  [1] = LESS_THAN_OR_EQUAL,
@@ -564,17 +573,6 @@ local function retrieveAbility(unit, ability, abilityId)
564
573
  ____exports.Unit:of(unit)
565
574
  )
566
575
  end
567
- if not unitAddAbility(unit, abilityId) then
568
- if getUnitAbility(unit, abilityId) == ability then
569
- return UnitAbility:of(
570
- ability,
571
- abilityId,
572
- ____exports.Unit:of(unit)
573
- )
574
- end
575
- else
576
- unitRemoveAbility(unit, abilityId)
577
- end
578
576
  for i = 0, unitInventorySize(unit) - 1 do
579
577
  local item = unitItemInSlot(unit, i)
580
578
  if getItemAbility(item, abilityId) == ability then
@@ -632,15 +630,15 @@ for ____, player in ipairs(Player.all) do
632
630
  dummies[player] = dummy
633
631
  end
634
632
  local function delayHealthChecksCallback(unit)
635
- local counter = (unit[102] or 0) - 1
633
+ local counter = (unit[103] or 0) - 1
636
634
  if counter ~= 0 then
637
- unit[102] = counter
635
+ unit[103] = counter
638
636
  return
639
637
  end
640
- unit[102] = nil
641
- local healthBonus = unit[103]
638
+ unit[103] = nil
639
+ local healthBonus = unit[104]
642
640
  if healthBonus ~= nil then
643
- unit[103] = nil
641
+ unit[104] = nil
644
642
  local handle = unit.handle
645
643
  BlzSetUnitMaxHP(
646
644
  handle,
@@ -648,12 +646,18 @@ local function delayHealthChecksCallback(unit)
648
646
  )
649
647
  end
650
648
  end
649
+ local nextSyncId = 1
650
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
651
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
651
652
  ____exports.Unit = __TS__Class()
652
653
  local Unit = ____exports.Unit
653
654
  Unit.name = "Unit"
654
655
  __TS__ClassExtends(Unit, Handle)
655
656
  function Unit.prototype.____constructor(self, handle)
656
657
  Handle.prototype.____constructor(self, handle)
658
+ local ____nextSyncId_0 = nextSyncId
659
+ nextSyncId = ____nextSyncId_0 + 1
660
+ self.syncId = ____nextSyncId_0
657
661
  self._owner = Player:of(getOwningPlayer(handle))
658
662
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
659
663
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -666,6 +670,7 @@ function Unit.prototype.____constructor(self, handle)
666
670
  fourCC("Amrf")
667
671
  ))
668
672
  end
673
+ unitBySyncId[self.syncId] = self
669
674
  local ____ = self.abilities
670
675
  end
671
676
  function Unit.prototype.getEvent(self, event, collector)
@@ -684,6 +689,8 @@ function Unit.prototype.getEvent(self, event, collector)
684
689
  end
685
690
  function Unit.prototype.onDestroy(self)
686
691
  local handle = self.handle
692
+ self[107] = getUnitX(handle)
693
+ self[108] = getUnitY(handle)
687
694
  if not self._owner then
688
695
  self._owner = Player:of(getOwningPlayer(handle))
689
696
  end
@@ -706,6 +713,10 @@ function Unit.prototype.onDestroy(self)
706
713
  if eventsToDestroy ~= nil then
707
714
  forEach(eventsToDestroy, "destroy")
708
715
  end
716
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
717
+ unitRemoveAbility(handle, leaveDetectAbilityId)
718
+ removeUnit(handle)
719
+ end
709
720
  return Handle.prototype.onDestroy(self)
710
721
  end
711
722
  function Unit.prototype.addAttackHandler(self, condition, action)
@@ -747,8 +758,8 @@ function Unit.prototype.addModifier(self, property, modifier)
747
758
  end}
748
759
  end
749
760
  function Unit.prototype.hasCombatClassification(self, combatClassification)
750
- local ____combatClassification_0 = combatClassification
751
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
761
+ local ____combatClassification_1 = combatClassification
762
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
752
763
  end
753
764
  function Unit.prototype.addClassification(self, classification)
754
765
  return unitAddType(self.handle, classification)
@@ -766,13 +777,13 @@ function Unit.prototype.isInvisibleTo(self, player)
766
777
  return isUnitInvisible(self.handle, player.handle)
767
778
  end
768
779
  function Unit.prototype.isInRangeOf(self, x, y, range)
769
- local ____temp_1
780
+ local ____temp_2
770
781
  if type(x) == "number" then
771
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
782
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
772
783
  else
773
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
784
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
774
785
  end
775
- return ____temp_1
786
+ return ____temp_2
776
787
  end
777
788
  function Unit.prototype.isAllyOf(self, unit)
778
789
  return isUnitAlly(
@@ -790,16 +801,19 @@ function Unit.prototype.playAnimation(self, animation, rarity)
790
801
  if type(animation) == "number" then
791
802
  setUnitAnimationByIndex(self.handle, animation)
792
803
  elseif rarity then
793
- setUnitAnimationWithRarity(self.handle, animation, rarity)
804
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
794
805
  else
795
806
  setUnitAnimation(self.handle, animation)
796
807
  end
797
808
  end
809
+ function Unit.prototype.resetAnimation(self)
810
+ ResetUnitAnimation(self.handle)
811
+ end
798
812
  function Unit.prototype.queueAnimation(self, animation)
799
- queueUnitAnimation(self.handle, animation)
813
+ QueueUnitAnimation(self.handle, animation)
800
814
  end
801
815
  function Unit.prototype.delayHealthChecks(self)
802
- self[102] = (self[102] or 0) + 1
816
+ self[103] = (self[103] or 0) + 1
803
817
  Timer:run(delayHealthChecksCallback, self)
804
818
  end
805
819
  function Unit.prototype.setPosition(self, x, y)
@@ -809,21 +823,21 @@ function Unit.prototype.isSelected(self, player)
809
823
  return IsUnitSelected(self.handle, player.handle)
810
824
  end
811
825
  function Unit.prototype.explode(self)
812
- setUnitExploded(self.handle, true)
826
+ SetUnitExploded(self.handle, true)
813
827
  killUnit(self.handle)
814
828
  end
815
829
  function Unit.prototype.kill(self)
816
830
  killUnit(self.handle)
817
831
  end
818
832
  function Unit.prototype.revive(self, x, y, doEffect)
819
- local ____ReviveHero_4 = ReviveHero
820
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
821
- local ____doEffect_2 = doEffect
822
- if ____doEffect_2 == nil then
823
- ____doEffect_2 = false
833
+ local ____ReviveHero_5 = ReviveHero
834
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
835
+ local ____doEffect_3 = doEffect
836
+ if ____doEffect_3 == nil then
837
+ ____doEffect_3 = false
824
838
  end
825
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
826
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
839
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
840
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
827
841
  end
828
842
  function Unit.prototype.healTarget(self, target, amount)
829
843
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,7 +877,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
863
877
  return UnitDropItemSlot(self.handle, item.handle, slot)
864
878
  end
865
879
  function Unit.prototype.itemInSlot(self, slot)
866
- return Item:of(UnitItemInSlot(self.handle, slot))
880
+ return Item:of(unitItemInSlot(self.handle, slot))
867
881
  end
868
882
  function Unit.prototype.addAbility(self, abilityId)
869
883
  if unitAddAbility(self.handle, abilityId) then
@@ -932,8 +946,15 @@ function Unit.prototype.interruptAttack(self)
932
946
  unitInterruptAttack(self.handle)
933
947
  end
934
948
  function Unit.prototype.interruptCast(self, abilityId)
935
- unitDisableAbility(self.handle, abilityId, true, false)
936
- unitDisableAbility(self.handle, abilityId, false, false)
949
+ local handle = self.handle
950
+ unitDisableAbility(handle, abilityId, true, false)
951
+ Timer:run(
952
+ unitDisableAbility,
953
+ handle,
954
+ abilityId,
955
+ false,
956
+ false
957
+ )
937
958
  end
938
959
  function Unit.prototype.getDistanceTo(self, target)
939
960
  local handle = self.handle
@@ -993,18 +1014,18 @@ function Unit.prototype.unpauseEx(self)
993
1014
  self:decrementStunCounter()
994
1015
  end
995
1016
  function Unit.prototype.incrementStunCounter(self)
996
- local stunCounter = self[101] or 0
997
- if not self[100] or stunCounter >= 0 then
1017
+ local stunCounter = self[102] or 0
1018
+ if not self[101] or stunCounter >= 0 then
998
1019
  BlzPauseUnitEx(self.handle, true)
999
1020
  end
1000
- self[101] = stunCounter + 1
1021
+ self[102] = stunCounter + 1
1001
1022
  end
1002
1023
  function Unit.prototype.decrementStunCounter(self)
1003
- local stunCounter = self[101] or 0
1004
- if not self[100] or stunCounter >= 1 then
1024
+ local stunCounter = self[102] or 0
1025
+ if not self[101] or stunCounter >= 1 then
1005
1026
  BlzPauseUnitEx(self.handle, false)
1006
1027
  end
1007
- self[101] = stunCounter - 1
1028
+ self[102] = stunCounter - 1
1008
1029
  end
1009
1030
  function Unit.create(self, owner, id, x, y, facing, skinId)
1010
1031
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1106,8 +1127,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1106
1127
  )
1107
1128
  return targetCollection
1108
1129
  end
1109
- function Unit.getSelectionOf(self, player)
1110
- targetCollection = {}
1130
+ function Unit.getSelectionOf(self, player, target)
1131
+ if target == nil then
1132
+ target = {}
1133
+ end
1134
+ targetCollection = target
1111
1135
  targetCollectionNextIndex = 1
1112
1136
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1113
1137
  return targetCollection
@@ -1129,6 +1153,9 @@ end
1129
1153
  function Unit.prototype.__tostring(self)
1130
1154
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1131
1155
  end
1156
+ function Unit.getBySyncId(self, syncId)
1157
+ return unitBySyncId[syncId]
1158
+ end
1132
1159
  __TS__SetDescriptor(
1133
1160
  Unit.prototype,
1134
1161
  "_deltas",
@@ -1192,6 +1219,14 @@ __TS__SetDescriptor(
1192
1219
  end},
1193
1220
  true
1194
1221
  )
1222
+ __TS__SetDescriptor(
1223
+ Unit.prototype,
1224
+ "isStunned",
1225
+ {get = function(self)
1226
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1227
+ end},
1228
+ true
1229
+ )
1195
1230
  __TS__SetDescriptor(
1196
1231
  Unit.prototype,
1197
1232
  "combatClassifications",
@@ -1265,6 +1300,19 @@ __TS__SetDescriptor(
1265
1300
  },
1266
1301
  true
1267
1302
  )
1303
+ __TS__SetDescriptor(
1304
+ Unit.prototype,
1305
+ "primaryAttribute",
1306
+ {
1307
+ get = function(self)
1308
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1309
+ end,
1310
+ set = function(self, primaryAttribute)
1311
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1312
+ end
1313
+ },
1314
+ true
1315
+ )
1268
1316
  __TS__SetDescriptor(
1269
1317
  Unit.prototype,
1270
1318
  "strengthBase",
@@ -1386,17 +1434,17 @@ __TS__SetDescriptor(
1386
1434
  "isTeamGlowVisible",
1387
1435
  {
1388
1436
  get = function(self)
1389
- return not self[105]
1437
+ return not self[106]
1390
1438
  end,
1391
1439
  set = function(self, isTeamGlowVisible)
1392
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1393
- local ____temp_5
1440
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1441
+ local ____temp_6
1394
1442
  if not isTeamGlowVisible then
1395
- ____temp_5 = true
1443
+ ____temp_6 = true
1396
1444
  else
1397
- ____temp_5 = nil
1445
+ ____temp_6 = nil
1398
1446
  end
1399
- self[105] = ____temp_5
1447
+ self[106] = ____temp_6
1400
1448
  end
1401
1449
  },
1402
1450
  true
@@ -1405,9 +1453,9 @@ __TS__SetDescriptor(
1405
1453
  Unit.prototype,
1406
1454
  "color",
1407
1455
  {set = function(self, color)
1408
- setUnitColor(self.handle, color.handle)
1409
- if self[105] then
1410
- showUnitTeamGlow(self.handle, false)
1456
+ SetUnitColor(self.handle, color.handle)
1457
+ if self[106] then
1458
+ BlzShowUnitTeamGlow(self.handle, false)
1411
1459
  end
1412
1460
  end},
1413
1461
  true
@@ -1430,14 +1478,14 @@ __TS__SetDescriptor(
1430
1478
  "maxHealth",
1431
1479
  {
1432
1480
  get = function(self)
1433
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1481
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1434
1482
  end,
1435
1483
  set = function(self, maxHealth)
1436
- if maxHealth < 1 and self[102] ~= nil then
1437
- self[103] = (self[103] or 0) + (1 - maxHealth)
1484
+ if maxHealth < 1 and self[103] ~= nil then
1485
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1438
1486
  maxHealth = 1
1439
1487
  end
1440
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1488
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1441
1489
  end
1442
1490
  },
1443
1491
  true
@@ -1479,10 +1527,10 @@ __TS__SetDescriptor(
1479
1527
  "health",
1480
1528
  {
1481
1529
  get = function(self)
1482
- return GetWidgetLife(self.handle) - (self[104] or 0)
1530
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1483
1531
  end,
1484
1532
  set = function(self, health)
1485
- SetWidgetLife(self.handle, health + (self[104] or 0))
1533
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1486
1534
  end
1487
1535
  },
1488
1536
  true
@@ -1576,7 +1624,7 @@ __TS__SetDescriptor(
1576
1624
  "x",
1577
1625
  {
1578
1626
  get = function(self)
1579
- return getUnitX(self.handle)
1627
+ return self[107] or getUnitX(self.handle)
1580
1628
  end,
1581
1629
  set = function(self, v)
1582
1630
  SetUnitX(self.handle, v)
@@ -1589,7 +1637,7 @@ __TS__SetDescriptor(
1589
1637
  "y",
1590
1638
  {
1591
1639
  get = function(self)
1592
- return getUnitY(self.handle)
1640
+ return self[108] or getUnitY(self.handle)
1593
1641
  end,
1594
1642
  set = function(self, v)
1595
1643
  SetUnitY(self.handle, v)
@@ -1675,10 +1723,10 @@ __TS__SetDescriptor(
1675
1723
  "gold",
1676
1724
  {
1677
1725
  get = function(self)
1678
- return getResourceAmount(self.handle)
1726
+ return GetResourceAmount(self.handle)
1679
1727
  end,
1680
1728
  set = function(self, gold)
1681
- setResourceAmount(self.handle, gold)
1729
+ SetResourceAmount(self.handle, gold)
1682
1730
  end
1683
1731
  },
1684
1732
  true
@@ -1693,17 +1741,17 @@ __TS__SetDescriptor(
1693
1741
  set = function(self, isPaused)
1694
1742
  local handle = self.handle
1695
1743
  if isPaused and not IsUnitPaused(handle) then
1696
- self[100] = true
1697
- for _ = self[101] or 0, -1 do
1744
+ self[101] = true
1745
+ for _ = self[102] or 0, -1 do
1698
1746
  BlzPauseUnitEx(handle, true)
1699
1747
  end
1700
1748
  PauseUnit(handle, true)
1701
1749
  elseif not isPaused and IsUnitPaused(handle) then
1702
1750
  PauseUnit(handle, false)
1703
- for _ = self[101] or 0, -1 do
1751
+ for _ = self[102] or 0, -1 do
1704
1752
  BlzPauseUnitEx(handle, false)
1705
1753
  end
1706
- self[100] = nil
1754
+ self[101] = nil
1707
1755
  end
1708
1756
  end
1709
1757
  },
@@ -1806,6 +1854,19 @@ __TS__SetDescriptor(
1806
1854
  end},
1807
1855
  true
1808
1856
  )
1857
+ __TS__SetDescriptor(
1858
+ Unit.prototype,
1859
+ "movementType",
1860
+ {
1861
+ get = function(self)
1862
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1863
+ end,
1864
+ set = function(self, movementType)
1865
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1866
+ end
1867
+ },
1868
+ true
1869
+ )
1809
1870
  __TS__SetDescriptor(
1810
1871
  Unit.prototype,
1811
1872
  "pathing",
@@ -2060,7 +2121,6 @@ Unit.onDecay = __TS__New(
2060
2121
  Unit.onResurrect = __TS__New(
2061
2122
  InitializingEvent,
2062
2123
  function(event)
2063
- local invoke = Event.invoke
2064
2124
  local dead = setmetatable({}, {__mode = "k"})
2065
2125
  ____exports.Unit.deathEvent:addListener(function(unit)
2066
2126
  dead[unit] = true
@@ -2076,10 +2136,15 @@ Unit.onResurrect = __TS__New(
2076
2136
  Unit.morphEvent = __TS__New(
2077
2137
  InitializingEvent,
2078
2138
  function(event)
2139
+ local function ifNotLeft(unit)
2140
+ local handle = unit.handle
2141
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2142
+ invoke(event, unit)
2143
+ end
2144
+ end
2079
2145
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2080
2146
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2081
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2082
- Timer:run(Event.invoke, event, unit)
2147
+ Timer:run(ifNotLeft, unit)
2083
2148
  end
2084
2149
  end)
2085
2150
  end
@@ -2117,27 +2182,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2117
2182
  Unit.onTargetCast = dispatchId(__TS__New(
2118
2183
  InitializingEvent,
2119
2184
  function(event)
2120
- local invoke = Event.invoke
2121
2185
  local function listener(unit, id)
2122
- local ____GetSpellTargetUnit_result_8
2186
+ local ____GetSpellTargetUnit_result_9
2123
2187
  if GetSpellTargetUnit() then
2124
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2188
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2125
2189
  else
2126
- local ____GetSpellTargetItem_result_7
2190
+ local ____GetSpellTargetItem_result_8
2127
2191
  if GetSpellTargetItem() then
2128
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2192
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2129
2193
  else
2130
- local ____GetSpellTargetDestructable_result_6
2194
+ local ____GetSpellTargetDestructable_result_7
2131
2195
  if GetSpellTargetDestructable() then
2132
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2196
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2133
2197
  else
2134
- ____GetSpellTargetDestructable_result_6 = nil
2198
+ ____GetSpellTargetDestructable_result_7 = nil
2135
2199
  end
2136
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2200
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2137
2201
  end
2138
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2202
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2139
2203
  end
2140
- local target = ____GetSpellTargetUnit_result_8
2204
+ local target = ____GetSpellTargetUnit_result_9
2141
2205
  if target then
2142
2206
  invoke(event, unit, id, target)
2143
2207
  end
@@ -2309,10 +2373,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2309
2373
  ____exports.UnitTriggerEvent,
2310
2374
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2311
2375
  function()
2312
- local unit = ____exports.Unit:of(getOrderedUnit())
2313
- local issuedOrderId = getIssuedOrderId()
2314
- if unit ~= nil and unit.state == 1 then
2315
- return unit, issuedOrderId
2376
+ local handle = getOrderedUnit()
2377
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2378
+ local unit = ____exports.Unit:of(handle)
2379
+ if unit.state == 1 then
2380
+ return unit, getIssuedOrderId()
2381
+ end
2316
2382
  end
2317
2383
  return IgnoreEvent
2318
2384
  end
@@ -2334,7 +2400,6 @@ Unit.autoAttackStartEvent = __TS__New(
2334
2400
  )
2335
2401
  Unit.onDamaging = (function()
2336
2402
  local event = __TS__New(Event)
2337
- local invoke = Event.invoke
2338
2403
  local trigger = CreateTrigger()
2339
2404
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2340
2405
  TriggerAddCondition(
@@ -2344,13 +2409,18 @@ Unit.onDamaging = (function()
2344
2409
  if source and source.typeId == dummyUnitId then
2345
2410
  source = nil
2346
2411
  end
2347
- local target = BlzGetEventDamageTarget()
2412
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2413
+ local metadata = damageMetadataByTarget[target]
2414
+ damageMetadataByTarget[target] = nil
2348
2415
  local data = {
2349
2416
  amount = GetEventDamage(),
2350
- attackType = BlzGetEventAttackType(),
2417
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2351
2418
  damageType = BlzGetEventDamageType(),
2352
2419
  weaponType = BlzGetEventWeaponType(),
2353
- isAttack = BlzGetEventIsAttack()
2420
+ metadata = metadata,
2421
+ isAttack = BlzGetEventIsAttack(),
2422
+ originalAmount = GetEventDamage(),
2423
+ originalMetadata = metadata
2354
2424
  }
2355
2425
  if data.isAttack and source then
2356
2426
  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
@@ -2364,18 +2434,22 @@ Unit.onDamaging = (function()
2364
2434
  invoke(
2365
2435
  event,
2366
2436
  source,
2367
- ____exports.Unit:of(target),
2437
+ target,
2368
2438
  setmetatable(
2369
2439
  {},
2370
2440
  {
2371
2441
  __index = data,
2372
2442
  __newindex = function(self, key, value)
2373
- damageSetters[key](value)
2443
+ local damageSetter = damageSetters[key]
2444
+ if damageSetter ~= nil then
2445
+ damageSetter(value)
2446
+ end
2374
2447
  data[key] = value
2375
2448
  end
2376
2449
  }
2377
2450
  )
2378
2451
  )
2452
+ damagingEventByTarget[target] = data
2379
2453
  return
2380
2454
  end
2381
2455
  BlzSetEventDamage(0)
@@ -2383,7 +2457,7 @@ Unit.onDamaging = (function()
2383
2457
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2384
2458
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2385
2459
  local sourceOwner = source.owner.handle
2386
- local targetOwner = GetOwningPlayer(target)
2460
+ local targetOwner = target.owner.handle
2387
2461
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2388
2462
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2389
2463
  Timer:run(function()
@@ -2399,23 +2473,19 @@ Unit.onDamaging = (function()
2399
2473
  for ____, ____value in ipairs(source._attackHandlers) do
2400
2474
  local condition = ____value[1]
2401
2475
  local action = ____value[2]
2402
- if condition(
2403
- source,
2404
- ____exports.Unit:of(target),
2405
- data
2406
- ) then
2476
+ if condition(source, target, data) then
2407
2477
  action(
2408
2478
  source,
2409
- ____exports.Unit:of(target),
2479
+ target,
2410
2480
  setmetatable(
2411
2481
  {fire = function()
2412
2482
  UnitDamageTarget(
2413
2483
  source.handle,
2414
- target,
2484
+ target.handle,
2415
2485
  data.amount,
2416
2486
  true,
2417
2487
  true,
2418
- data.attackType,
2488
+ attackTypeToNative(data.attackType),
2419
2489
  data.damageType,
2420
2490
  data.weaponType
2421
2491
  )
@@ -2433,7 +2503,6 @@ end)()
2433
2503
  Unit.onDamage = __TS__New(
2434
2504
  InitializingEvent,
2435
2505
  function(event)
2436
- local invoke = Event.invoke
2437
2506
  local trigger = CreateTrigger()
2438
2507
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2439
2508
  TriggerAddCondition(
@@ -2443,29 +2512,44 @@ Unit.onDamage = __TS__New(
2443
2512
  if source and source.typeId == dummyUnitId then
2444
2513
  source = nil
2445
2514
  end
2515
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2516
+ local damagingEvent = damagingEventByTarget[target]
2517
+ damagingEventByTarget[target] = nil
2446
2518
  local data = {
2447
2519
  amount = GetEventDamage(),
2448
- attackType = BlzGetEventAttackType(),
2520
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2449
2521
  damageType = BlzGetEventDamageType(),
2450
2522
  weaponType = BlzGetEventWeaponType(),
2523
+ metadata = damagingEvent and damagingEvent.metadata,
2451
2524
  isAttack = BlzGetEventIsAttack(),
2525
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2526
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2452
2527
  preventDeath = damageEventPreventDeath
2453
2528
  }
2529
+ if damagingEvent then
2530
+ for key, value in pairs(damagingEvent) do
2531
+ if isAttribute(key) then
2532
+ data[key] = value
2533
+ end
2534
+ end
2535
+ end
2454
2536
  local evData = setmetatable(
2455
2537
  {},
2456
2538
  {
2457
2539
  __index = data,
2458
2540
  __newindex = function(self, key, value)
2459
- damageSetters[key](value)
2541
+ local damageSetter = damageSetters[key]
2542
+ if damageSetter ~= nil then
2543
+ damageSetter(value)
2544
+ end
2460
2545
  data[key] = value
2461
2546
  end
2462
2547
  }
2463
2548
  )
2464
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2465
2549
  invoke(event, source, target, evData)
2466
2550
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2467
2551
  local bonusHealth = math.ceil(evData.amount)
2468
- target[104] = (target[104] or 0) + bonusHealth
2552
+ target[105] = (target[105] or 0) + bonusHealth
2469
2553
  BlzSetUnitMaxHP(
2470
2554
  target.handle,
2471
2555
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2479,7 +2563,7 @@ Unit.onDamage = __TS__New(
2479
2563
  evData[0],
2480
2564
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2481
2565
  )
2482
- target[104] = (target[104] or 0) - bonusHealth
2566
+ target[105] = (target[105] or 0) - bonusHealth
2483
2567
  SetWidgetLife(
2484
2568
  target.handle,
2485
2569
  GetWidgetLife(target.handle) - bonusHealth
@@ -2499,32 +2583,91 @@ Unit.onDamage = __TS__New(
2499
2583
  DestroyTrigger(trigger)
2500
2584
  end
2501
2585
  )
2502
- Unit.onItemDrop = __TS__New(
2586
+ Unit.itemDroppedEvent = __TS__New(
2503
2587
  ____exports.UnitTriggerEvent,
2504
2588
  EVENT_PLAYER_UNIT_DROP_ITEM,
2505
2589
  function()
2506
2590
  local unit = getTriggerUnit()
2507
- if getUnitTypeId(unit) ~= dummyUnitId then
2508
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2591
+ local item = getManipulatedItem()
2592
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2593
+ return ____exports.Unit:of(unit), Item:of(item)
2509
2594
  end
2510
2595
  return IgnoreEvent
2511
2596
  end
2512
2597
  )
2513
- Unit.onItemPickup = __TS__New(
2598
+ Unit.itemPickedUpEvent = __TS__New(
2514
2599
  ____exports.UnitTriggerEvent,
2515
2600
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2516
2601
  function()
2517
2602
  local unit = getTriggerUnit()
2518
- if getUnitTypeId(unit) ~= dummyUnitId then
2519
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2603
+ local item = getManipulatedItem()
2604
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2605
+ return ____exports.Unit:of(unit), Item:of(item)
2520
2606
  end
2521
2607
  return IgnoreEvent
2522
2608
  end
2523
2609
  )
2524
- Unit.onItemUse = __TS__New(
2610
+ Unit.itemUsedEvent = __TS__New(
2525
2611
  ____exports.UnitTriggerEvent,
2526
2612
  EVENT_PLAYER_UNIT_USE_ITEM,
2527
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2613
+ function()
2614
+ local unit = getTriggerUnit()
2615
+ local item = getManipulatedItem()
2616
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2617
+ return ____exports.Unit:of(unit), Item:of(item)
2618
+ end
2619
+ return IgnoreEvent
2620
+ end
2621
+ )
2622
+ Unit.itemStackedEvent = __TS__New(
2623
+ ____exports.UnitTriggerEvent,
2624
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2625
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2626
+ )
2627
+ __TS__ObjectDefineProperty(
2628
+ Unit,
2629
+ "itemUseOrderEvent",
2630
+ {get = function(self)
2631
+ local event = __TS__New(Event)
2632
+ for order = orderId("useslot0"), orderId("useslot5") do
2633
+ local slot = order - orderId("useslot0")
2634
+ local function listener(unit)
2635
+ local item = unit.items[slot + 1]
2636
+ if item ~= nil then
2637
+ invoke(event, unit, item)
2638
+ end
2639
+ end
2640
+ self.onImmediateOrder[order]:addListener(listener)
2641
+ self.onTargetOrder[order]:addListener(listener)
2642
+ self.onPointOrder[order]:addListener(listener)
2643
+ end
2644
+ rawset(self, "itemUseOrderEvent", event)
2645
+ return event
2646
+ end}
2647
+ )
2648
+ __TS__ObjectDefineProperty(
2649
+ Unit,
2650
+ "itemMoveOrderEvent",
2651
+ {get = function(self)
2652
+ local event = __TS__New(Event)
2653
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2654
+ local slotTo = order - orderId("moveslot0")
2655
+ self.onTargetOrder[order]:addListener(function(unit, item)
2656
+ local slotFrom = unit.items:findSlot(item)
2657
+ if slotFrom ~= nil then
2658
+ invoke(
2659
+ event,
2660
+ unit,
2661
+ item,
2662
+ slotFrom,
2663
+ slotTo
2664
+ )
2665
+ end
2666
+ end)
2667
+ end
2668
+ rawset(self, "itemMoveOrderEvent", event)
2669
+ return event
2670
+ end}
2528
2671
  )
2529
2672
  __TS__ObjectDefineProperty(
2530
2673
  Unit,