warscript 0.0.1-dev.22f399b → 0.0.1-dev.26f0c5f

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 (191) 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 +6 -0
  10. package/core/types/frame.lua +91 -1
  11. package/core/types/sound.d.ts +17 -24
  12. package/core/types/sound.lua +99 -24
  13. package/core/types/timer.d.ts +7 -8
  14. package/core/types/timer.lua +18 -21
  15. package/core/util.d.ts +1 -1
  16. package/core/util.lua +18 -1
  17. package/decl/native.d.ts +840 -786
  18. package/engine/behavior.d.ts +2 -2
  19. package/engine/behavior.lua +6 -6
  20. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  21. package/engine/behaviour/ability/always-enabled.lua +31 -0
  22. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  23. package/engine/behaviour/ability/apply-buff.lua +32 -0
  24. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  25. package/engine/behaviour/ability/damage.d.ts +9 -3
  26. package/engine/behaviour/ability/damage.lua +26 -38
  27. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  28. package/engine/behaviour/ability/emulate-impact.lua +42 -0
  29. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  30. package/engine/behaviour/ability/instant-impact.lua +4 -19
  31. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  32. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  33. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  34. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  35. package/engine/behaviour/ability.d.ts +20 -4
  36. package/engine/behaviour/ability.lua +111 -47
  37. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  38. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  39. package/engine/behaviour/unit.d.ts +33 -0
  40. package/engine/behaviour/unit.lua +180 -4
  41. package/engine/buff.d.ts +102 -39
  42. package/engine/buff.lua +464 -203
  43. package/engine/internal/ability.d.ts +20 -13
  44. package/engine/internal/ability.lua +97 -76
  45. package/engine/internal/item/ability.lua +161 -4
  46. package/engine/internal/item+owner.lua +2 -2
  47. package/engine/internal/item.d.ts +7 -4
  48. package/engine/internal/item.lua +131 -28
  49. package/engine/internal/mechanics/ability-duration.lua +1 -1
  50. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  51. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  52. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  53. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  54. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  55. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  56. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  57. package/engine/internal/object-data/evasion-probability.lua +16 -0
  58. package/engine/internal/unit/ability.d.ts +45 -1
  59. package/engine/internal/unit/ability.lua +98 -14
  60. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  61. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  62. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  63. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  64. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  65. package/engine/internal/unit/allowed-targets.lua +9 -1
  66. package/engine/internal/unit/bonus.d.ts +6 -2
  67. package/engine/internal/unit/bonus.lua +23 -1
  68. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  69. package/engine/internal/unit/ignore-events-items.lua +5 -0
  70. package/engine/internal/unit/item.d.ts +24 -0
  71. package/engine/internal/unit/item.lua +78 -0
  72. package/engine/internal/unit/main-selected.d.ts +13 -0
  73. package/engine/internal/unit/main-selected.lua +51 -0
  74. package/engine/internal/unit/order.d.ts +20 -0
  75. package/engine/internal/unit/order.lua +136 -0
  76. package/engine/internal/unit+ability.lua +2 -2
  77. package/engine/internal/unit+damage.d.ts +2 -11
  78. package/engine/internal/unit+damage.lua +10 -14
  79. package/engine/internal/unit+spellSteal.lua +1 -2
  80. package/engine/internal/unit-missile-launch.lua +25 -6
  81. package/engine/internal/unit.d.ts +53 -14
  82. package/engine/internal/unit.lua +400 -147
  83. package/engine/internal/utility.lua +12 -0
  84. package/engine/lightning.d.ts +12 -5
  85. package/engine/lightning.lua +48 -14
  86. package/engine/local-client.d.ts +7 -2
  87. package/engine/local-client.lua +82 -0
  88. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  89. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  90. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  91. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  92. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  93. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  94. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  95. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  96. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  97. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  98. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  99. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  100. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  101. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  102. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  103. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  104. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  105. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  106. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  107. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  108. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  109. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  110. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  111. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  112. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  113. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  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 +50 -3
  148. package/engine/object-field/unit.lua +186 -7
  149. package/engine/object-field.d.ts +17 -6
  150. package/engine/object-field.lua +187 -89
  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/standard/fields/unit.d.ts +3 -0
  158. package/engine/standard/fields/unit.lua +5 -0
  159. package/engine/text-tag.d.ts +36 -2
  160. package/engine/text-tag.lua +175 -10
  161. package/engine/unit.d.ts +4 -0
  162. package/engine/unit.lua +4 -0
  163. package/index.d.ts +1 -0
  164. package/index.lua +1 -0
  165. package/net/socket.d.ts +7 -1
  166. package/net/socket.lua +45 -4
  167. package/network.d.ts +1 -0
  168. package/network.lua +3 -2
  169. package/objutil/buff.lua +2 -3
  170. package/objutil/unit.lua +8 -0
  171. package/package.json +2 -2
  172. package/patch-lua.d.ts +0 -0
  173. package/patch-lua.lua +10 -0
  174. package/property.d.ts +55 -0
  175. package/property.lua +374 -0
  176. package/utility/arrays.d.ts +9 -1
  177. package/utility/arrays.lua +37 -3
  178. package/utility/functions.d.ts +1 -0
  179. package/utility/functions.lua +1 -0
  180. package/utility/lazy.d.ts +2 -0
  181. package/utility/lazy.lua +14 -0
  182. package/utility/linked-set.d.ts +12 -2
  183. package/utility/linked-set.lua +8 -2
  184. package/utility/lua-maps.d.ts +4 -0
  185. package/utility/lua-maps.lua +20 -0
  186. package/utility/lua-sets.d.ts +1 -0
  187. package/utility/lua-sets.lua +3 -0
  188. package/utility/reflection.lua +11 -7
  189. package/utility/types.d.ts +1 -0
  190. package/core/types/order.d.ts +0 -25
  191. 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
@@ -125,8 +132,6 @@ local isUnitType = IsUnitType
125
132
  local isUnitAlly = IsUnitAlly
126
133
  local isUnitEnemy = IsUnitEnemy
127
134
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
135
  ____exports.UnitClassification = {}
131
136
  local UnitClassification = ____exports.UnitClassification
132
137
  do
@@ -136,6 +141,7 @@ do
136
141
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
142
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
143
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
144
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
145
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
146
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
147
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -343,6 +349,9 @@ local function dispatchAbility(event)
343
349
  }
344
350
  )
345
351
  end
352
+ local function damagingEventPreventRetaliation(self)
353
+ self[0] = true
354
+ end
346
355
  local function damageEventPreventDeath(self, callback, ...)
347
356
  if self[0] ~= nil then
348
357
  return
@@ -354,7 +363,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
363
  rawset(self, 1 + i, (select(i, ...)))
355
364
  end
356
365
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
366
+ local damageSetters = {
367
+ amount = BlzSetEventDamage,
368
+ attackType = function(attackType)
369
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
370
+ end,
371
+ damageType = BlzSetEventDamageType,
372
+ weaponType = BlzSetEventWeaponType
373
+ }
358
374
  local jlimitopByOperator = {
359
375
  [0] = LESS_THAN_OR_EQUAL,
360
376
  [1] = LESS_THAN_OR_EQUAL,
@@ -432,6 +448,19 @@ __TS__SetDescriptor(
432
448
  },
433
449
  true
434
450
  )
451
+ __TS__SetDescriptor(
452
+ UnitWeapon.prototype,
453
+ "allowedTargetCombatClassifications",
454
+ {
455
+ get = function(self)
456
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
457
+ end,
458
+ set = function(self, allowedTargetCombatClassifications)
459
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
460
+ end
461
+ },
462
+ true
463
+ )
435
464
  __TS__SetDescriptor(
436
465
  UnitWeapon.prototype,
437
466
  "damageBase",
@@ -562,17 +591,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
591
  ____exports.Unit:of(unit)
563
592
  )
564
593
  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
594
  for i = 0, unitInventorySize(unit) - 1 do
577
595
  local item = unitItemInSlot(unit, i)
578
596
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +648,15 @@ for ____, player in ipairs(Player.all) do
630
648
  dummies[player] = dummy
631
649
  end
632
650
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
651
+ local counter = (unit[103] or 0) - 1
634
652
  if counter ~= 0 then
635
- unit[102] = counter
653
+ unit[103] = counter
636
654
  return
637
655
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
656
+ unit[103] = nil
657
+ local healthBonus = unit[104]
640
658
  if healthBonus ~= nil then
641
- unit[103] = nil
659
+ unit[104] = nil
642
660
  local handle = unit.handle
643
661
  BlzSetUnitMaxHP(
644
662
  handle,
@@ -646,12 +664,53 @@ local function delayHealthChecksCallback(unit)
646
664
  )
647
665
  end
648
666
  end
667
+ local nextSyncId = 1
668
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
669
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
670
+ local function addAbility(unit, abilityTypeId)
671
+ local handle = unit.handle
672
+ if unitAddAbility(handle, abilityTypeId) then
673
+ local ability = UnitAbility:of(
674
+ checkNotNull(getUnitAbility(handle, abilityTypeId)),
675
+ abilityTypeId,
676
+ unit
677
+ )
678
+ local abilities = unit.abilities
679
+ abilities[#abilities + 1] = ability
680
+ return ability
681
+ end
682
+ return nil
683
+ end
684
+ local function getAbility(unit, abilityTypeId)
685
+ return UnitAbility:of(
686
+ getUnitAbility(unit.handle, abilityTypeId),
687
+ abilityTypeId,
688
+ unit
689
+ )
690
+ end
691
+ local function removeAbility(unit, abilityTypeId)
692
+ if unitRemoveAbility(unit.handle, abilityTypeId) then
693
+ local abilities = unit.abilities
694
+ for i = 1, #abilities do
695
+ if abilities[i].typeId == abilityTypeId then
696
+ abilities[i]:destroy()
697
+ tremove(abilities, i)
698
+ return true
699
+ end
700
+ end
701
+ return true
702
+ end
703
+ return false
704
+ end
649
705
  ____exports.Unit = __TS__Class()
650
706
  local Unit = ____exports.Unit
651
707
  Unit.name = "Unit"
652
708
  __TS__ClassExtends(Unit, Handle)
653
709
  function Unit.prototype.____constructor(self, handle)
654
710
  Handle.prototype.____constructor(self, handle)
711
+ local ____nextSyncId_0 = nextSyncId
712
+ nextSyncId = ____nextSyncId_0 + 1
713
+ self.syncId = ____nextSyncId_0
655
714
  self._owner = Player:of(getOwningPlayer(handle))
656
715
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
716
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +723,7 @@ function Unit.prototype.____constructor(self, handle)
664
723
  fourCC("Amrf")
665
724
  ))
666
725
  end
726
+ unitBySyncId[self.syncId] = self
667
727
  local ____ = self.abilities
668
728
  end
669
729
  function Unit.prototype.getEvent(self, event, collector)
@@ -682,6 +742,8 @@ function Unit.prototype.getEvent(self, event, collector)
682
742
  end
683
743
  function Unit.prototype.onDestroy(self)
684
744
  local handle = self.handle
745
+ self[107] = getUnitX(handle)
746
+ self[108] = getUnitY(handle)
685
747
  if not self._owner then
686
748
  self._owner = Player:of(getOwningPlayer(handle))
687
749
  end
@@ -749,8 +811,8 @@ function Unit.prototype.addModifier(self, property, modifier)
749
811
  end}
750
812
  end
751
813
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
814
+ local ____combatClassification_1 = combatClassification
815
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
754
816
  end
755
817
  function Unit.prototype.addClassification(self, classification)
756
818
  return unitAddType(self.handle, classification)
@@ -768,13 +830,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
830
  return isUnitInvisible(self.handle, player.handle)
769
831
  end
770
832
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
833
+ local ____temp_2
772
834
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
835
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
774
836
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
837
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
776
838
  end
777
- return ____temp_1
839
+ return ____temp_2
778
840
  end
779
841
  function Unit.prototype.isAllyOf(self, unit)
780
842
  return isUnitAlly(
@@ -792,16 +854,28 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
854
  if type(animation) == "number" then
793
855
  setUnitAnimationByIndex(self.handle, animation)
794
856
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
857
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
858
  else
797
859
  setUnitAnimation(self.handle, animation)
798
860
  end
799
861
  end
862
+ function Unit.prototype.resetAnimation(self)
863
+ ResetUnitAnimation(self.handle)
864
+ end
800
865
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
866
+ QueueUnitAnimation(self.handle, animation)
867
+ end
868
+ function Unit.prototype.chooseWeapon(self, target)
869
+ if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
870
+ return self.firstWeapon
871
+ end
872
+ if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
873
+ return self.secondWeapon
874
+ end
875
+ return nil
802
876
  end
803
877
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
878
+ self[103] = (self[103] or 0) + 1
805
879
  Timer:run(delayHealthChecksCallback, self)
806
880
  end
807
881
  function Unit.prototype.setPosition(self, x, y)
@@ -811,21 +885,21 @@ function Unit.prototype.isSelected(self, player)
811
885
  return IsUnitSelected(self.handle, player.handle)
812
886
  end
813
887
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
888
+ SetUnitExploded(self.handle, true)
815
889
  killUnit(self.handle)
816
890
  end
817
891
  function Unit.prototype.kill(self)
818
892
  killUnit(self.handle)
819
893
  end
820
894
  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
895
+ local ____ReviveHero_5 = ReviveHero
896
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
897
+ local ____doEffect_3 = doEffect
898
+ if ____doEffect_3 == nil then
899
+ ____doEffect_3 = false
826
900
  end
827
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
901
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
902
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
829
903
  end
830
904
  function Unit.prototype.healTarget(self, target, amount)
831
905
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,20 +939,16 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
939
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
940
  end
867
941
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(UnitItemInSlot(self.handle, slot))
942
+ return Item:of(unitItemInSlot(self.handle, slot))
869
943
  end
870
944
  function Unit.prototype.addAbility(self, abilityId)
871
- if unitAddAbility(self.handle, abilityId) then
872
- local ability = UnitAbility:of(
873
- checkNotNull(getUnitAbility(self.handle, abilityId)),
874
- abilityId,
875
- self
876
- )
877
- local abilities = self.abilities
878
- abilities[#abilities + 1] = ability
879
- return ability
880
- end
881
- return nil
945
+ return doUnitAbilityAction(
946
+ self.handle,
947
+ abilityId,
948
+ addAbility,
949
+ self,
950
+ abilityId
951
+ )
882
952
  end
883
953
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
884
954
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -893,30 +963,22 @@ function Unit.prototype.hasAbility(self, abilityId)
893
963
  return getUnitAbilityLevel(self.handle, abilityId) > 0
894
964
  end
895
965
  function Unit.prototype.getAbilityById(self, abilityId)
896
- local handle = self.handle
897
- if unitAddAbility(handle, abilityId) then
898
- assert(unitRemoveAbility(handle, abilityId))
899
- return nil
900
- end
901
- return UnitAbility:of(
902
- getUnitAbility(self.handle, abilityId),
966
+ return doUnitAbilityAction(
967
+ self.handle,
903
968
  abilityId,
904
- self
969
+ getAbility,
970
+ self,
971
+ abilityId
905
972
  )
906
973
  end
907
974
  function Unit.prototype.removeAbility(self, abilityId)
908
- if unitRemoveAbility(self.handle, abilityId) then
909
- local abilities = self.abilities
910
- for i = 1, #abilities do
911
- if abilities[i].typeId == abilityId then
912
- abilities[i]:destroy()
913
- tremove(abilities, i)
914
- return true
915
- end
916
- end
917
- return true
918
- end
919
- return false
975
+ return doUnitAbilityAction(
976
+ self.handle,
977
+ abilityId,
978
+ removeAbility,
979
+ self,
980
+ abilityId
981
+ )
920
982
  end
921
983
  function Unit.prototype.hideAbility(self, abilityId, flag)
922
984
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -930,12 +992,34 @@ end
930
992
  function Unit.prototype.endAbilityCooldown(self, abilityId)
931
993
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
932
994
  end
995
+ function Unit.prototype.interruptMovement(self)
996
+ local handle = self.handle
997
+ unitDisableAbility(
998
+ handle,
999
+ fourCC("Amov"),
1000
+ true,
1001
+ false
1002
+ )
1003
+ unitDisableAbility(
1004
+ handle,
1005
+ fourCC("Amov"),
1006
+ false,
1007
+ false
1008
+ )
1009
+ end
933
1010
  function Unit.prototype.interruptAttack(self)
934
1011
  unitInterruptAttack(self.handle)
935
1012
  end
936
1013
  function Unit.prototype.interruptCast(self, abilityId)
937
- unitDisableAbility(self.handle, abilityId, true, false)
938
- unitDisableAbility(self.handle, abilityId, false, false)
1014
+ local handle = self.handle
1015
+ unitDisableAbility(handle, abilityId, true, false)
1016
+ Timer:run(
1017
+ unitDisableAbility,
1018
+ handle,
1019
+ abilityId,
1020
+ false,
1021
+ false
1022
+ )
939
1023
  end
940
1024
  function Unit.prototype.getDistanceTo(self, target)
941
1025
  local handle = self.handle
@@ -995,18 +1079,18 @@ function Unit.prototype.unpauseEx(self)
995
1079
  self:decrementStunCounter()
996
1080
  end
997
1081
  function Unit.prototype.incrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 0 then
1082
+ local stunCounter = self[102] or 0
1083
+ if not self[101] or stunCounter >= 0 then
1000
1084
  BlzPauseUnitEx(self.handle, true)
1001
1085
  end
1002
- self[101] = stunCounter + 1
1086
+ self[102] = stunCounter + 1
1003
1087
  end
1004
1088
  function Unit.prototype.decrementStunCounter(self)
1005
- local stunCounter = self[101] or 0
1006
- if not self[100] or stunCounter >= 1 then
1089
+ local stunCounter = self[102] or 0
1090
+ if not self[101] or stunCounter >= 1 then
1007
1091
  BlzPauseUnitEx(self.handle, false)
1008
1092
  end
1009
- self[101] = stunCounter - 1
1093
+ self[102] = stunCounter - 1
1010
1094
  end
1011
1095
  function Unit.create(self, owner, id, x, y, facing, skinId)
1012
1096
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1108,8 +1192,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1108
1192
  )
1109
1193
  return targetCollection
1110
1194
  end
1111
- function Unit.getSelectionOf(self, player)
1112
- targetCollection = {}
1195
+ function Unit.getSelectionOf(self, player, target)
1196
+ if target == nil then
1197
+ target = {}
1198
+ end
1199
+ targetCollection = target
1113
1200
  targetCollectionNextIndex = 1
1114
1201
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1115
1202
  return targetCollection
@@ -1131,6 +1218,9 @@ end
1131
1218
  function Unit.prototype.__tostring(self)
1132
1219
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1133
1220
  end
1221
+ function Unit.getBySyncId(self, syncId)
1222
+ return unitBySyncId[syncId]
1223
+ end
1134
1224
  __TS__SetDescriptor(
1135
1225
  Unit.prototype,
1136
1226
  "_deltas",
@@ -1194,6 +1284,14 @@ __TS__SetDescriptor(
1194
1284
  end},
1195
1285
  true
1196
1286
  )
1287
+ __TS__SetDescriptor(
1288
+ Unit.prototype,
1289
+ "isStunned",
1290
+ {get = function(self)
1291
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1292
+ end},
1293
+ true
1294
+ )
1197
1295
  __TS__SetDescriptor(
1198
1296
  Unit.prototype,
1199
1297
  "combatClassifications",
@@ -1267,6 +1365,19 @@ __TS__SetDescriptor(
1267
1365
  },
1268
1366
  true
1269
1367
  )
1368
+ __TS__SetDescriptor(
1369
+ Unit.prototype,
1370
+ "primaryAttribute",
1371
+ {
1372
+ get = function(self)
1373
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1374
+ end,
1375
+ set = function(self, primaryAttribute)
1376
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1377
+ end
1378
+ },
1379
+ true
1380
+ )
1270
1381
  __TS__SetDescriptor(
1271
1382
  Unit.prototype,
1272
1383
  "strengthBase",
@@ -1388,17 +1499,17 @@ __TS__SetDescriptor(
1388
1499
  "isTeamGlowVisible",
1389
1500
  {
1390
1501
  get = function(self)
1391
- return not self[105]
1502
+ return not self[106]
1392
1503
  end,
1393
1504
  set = function(self, isTeamGlowVisible)
1394
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1395
- local ____temp_5
1505
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1506
+ local ____temp_6
1396
1507
  if not isTeamGlowVisible then
1397
- ____temp_5 = true
1508
+ ____temp_6 = true
1398
1509
  else
1399
- ____temp_5 = nil
1510
+ ____temp_6 = nil
1400
1511
  end
1401
- self[105] = ____temp_5
1512
+ self[106] = ____temp_6
1402
1513
  end
1403
1514
  },
1404
1515
  true
@@ -1407,9 +1518,9 @@ __TS__SetDescriptor(
1407
1518
  Unit.prototype,
1408
1519
  "color",
1409
1520
  {set = function(self, color)
1410
- setUnitColor(self.handle, color.handle)
1411
- if self[105] then
1412
- showUnitTeamGlow(self.handle, false)
1521
+ SetUnitColor(self.handle, color.handle)
1522
+ if self[106] then
1523
+ BlzShowUnitTeamGlow(self.handle, false)
1413
1524
  end
1414
1525
  end},
1415
1526
  true
@@ -1432,14 +1543,14 @@ __TS__SetDescriptor(
1432
1543
  "maxHealth",
1433
1544
  {
1434
1545
  get = function(self)
1435
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1546
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1436
1547
  end,
1437
1548
  set = function(self, maxHealth)
1438
- if maxHealth < 1 and self[102] ~= nil then
1439
- self[103] = (self[103] or 0) + (1 - maxHealth)
1549
+ if maxHealth < 1 and self[103] ~= nil then
1550
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1440
1551
  maxHealth = 1
1441
1552
  end
1442
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1553
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1443
1554
  end
1444
1555
  },
1445
1556
  true
@@ -1481,10 +1592,10 @@ __TS__SetDescriptor(
1481
1592
  "health",
1482
1593
  {
1483
1594
  get = function(self)
1484
- return GetWidgetLife(self.handle) - (self[104] or 0)
1595
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1485
1596
  end,
1486
1597
  set = function(self, health)
1487
- SetWidgetLife(self.handle, health + (self[104] or 0))
1598
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1488
1599
  end
1489
1600
  },
1490
1601
  true
@@ -1578,7 +1689,7 @@ __TS__SetDescriptor(
1578
1689
  "x",
1579
1690
  {
1580
1691
  get = function(self)
1581
- return getUnitX(self.handle)
1692
+ return self[107] or getUnitX(self.handle)
1582
1693
  end,
1583
1694
  set = function(self, v)
1584
1695
  SetUnitX(self.handle, v)
@@ -1591,7 +1702,7 @@ __TS__SetDescriptor(
1591
1702
  "y",
1592
1703
  {
1593
1704
  get = function(self)
1594
- return getUnitY(self.handle)
1705
+ return self[108] or getUnitY(self.handle)
1595
1706
  end,
1596
1707
  set = function(self, v)
1597
1708
  SetUnitY(self.handle, v)
@@ -1677,10 +1788,10 @@ __TS__SetDescriptor(
1677
1788
  "gold",
1678
1789
  {
1679
1790
  get = function(self)
1680
- return getResourceAmount(self.handle)
1791
+ return GetResourceAmount(self.handle)
1681
1792
  end,
1682
1793
  set = function(self, gold)
1683
- setResourceAmount(self.handle, gold)
1794
+ SetResourceAmount(self.handle, gold)
1684
1795
  end
1685
1796
  },
1686
1797
  true
@@ -1695,17 +1806,17 @@ __TS__SetDescriptor(
1695
1806
  set = function(self, isPaused)
1696
1807
  local handle = self.handle
1697
1808
  if isPaused and not IsUnitPaused(handle) then
1698
- self[100] = true
1699
- for _ = self[101] or 0, -1 do
1809
+ self[101] = true
1810
+ for _ = self[102] or 0, -1 do
1700
1811
  BlzPauseUnitEx(handle, true)
1701
1812
  end
1702
1813
  PauseUnit(handle, true)
1703
1814
  elseif not isPaused and IsUnitPaused(handle) then
1704
1815
  PauseUnit(handle, false)
1705
- for _ = self[101] or 0, -1 do
1816
+ for _ = self[102] or 0, -1 do
1706
1817
  BlzPauseUnitEx(handle, false)
1707
1818
  end
1708
- self[100] = nil
1819
+ self[101] = nil
1709
1820
  end
1710
1821
  end
1711
1822
  },
@@ -1808,6 +1919,19 @@ __TS__SetDescriptor(
1808
1919
  end},
1809
1920
  true
1810
1921
  )
1922
+ __TS__SetDescriptor(
1923
+ Unit.prototype,
1924
+ "movementType",
1925
+ {
1926
+ get = function(self)
1927
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1928
+ end,
1929
+ set = function(self, movementType)
1930
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1931
+ end
1932
+ },
1933
+ true
1934
+ )
1811
1935
  __TS__SetDescriptor(
1812
1936
  Unit.prototype,
1813
1937
  "pathing",
@@ -1989,6 +2113,14 @@ __TS__SetDescriptor(
1989
2113
  end},
1990
2114
  true
1991
2115
  )
2116
+ __TS__SetDescriptor(
2117
+ Unit.prototype,
2118
+ "targetAcquiredEvent",
2119
+ {get = function(self)
2120
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2121
+ end},
2122
+ true
2123
+ )
1992
2124
  __TS__SetDescriptor(
1993
2125
  Unit.prototype,
1994
2126
  "onSelect",
@@ -2124,25 +2256,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2124
2256
  InitializingEvent,
2125
2257
  function(event)
2126
2258
  local function listener(unit, id)
2127
- local ____GetSpellTargetUnit_result_8
2259
+ local ____GetSpellTargetUnit_result_9
2128
2260
  if GetSpellTargetUnit() then
2129
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2261
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2130
2262
  else
2131
- local ____GetSpellTargetItem_result_7
2263
+ local ____GetSpellTargetItem_result_8
2132
2264
  if GetSpellTargetItem() then
2133
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2265
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2134
2266
  else
2135
- local ____GetSpellTargetDestructable_result_6
2267
+ local ____GetSpellTargetDestructable_result_7
2136
2268
  if GetSpellTargetDestructable() then
2137
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2269
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2138
2270
  else
2139
- ____GetSpellTargetDestructable_result_6 = nil
2271
+ ____GetSpellTargetDestructable_result_7 = nil
2140
2272
  end
2141
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2273
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2142
2274
  end
2143
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2275
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2144
2276
  end
2145
- local target = ____GetSpellTargetUnit_result_8
2277
+ local target = ____GetSpellTargetUnit_result_9
2146
2278
  if target then
2147
2279
  invoke(event, unit, id, target)
2148
2280
  end
@@ -2314,10 +2446,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2314
2446
  ____exports.UnitTriggerEvent,
2315
2447
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2316
2448
  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
2449
+ local handle = getOrderedUnit()
2450
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2451
+ local unit = ____exports.Unit:of(handle)
2452
+ if unit.state == 1 then
2453
+ return unit, getIssuedOrderId()
2454
+ end
2321
2455
  end
2322
2456
  return IgnoreEvent
2323
2457
  end
@@ -2348,13 +2482,19 @@ Unit.onDamaging = (function()
2348
2482
  if source and source.typeId == dummyUnitId then
2349
2483
  source = nil
2350
2484
  end
2351
- local target = BlzGetEventDamageTarget()
2485
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2486
+ local metadata = damageMetadataByTarget[target]
2487
+ damageMetadataByTarget[target] = nil
2352
2488
  local data = {
2353
2489
  amount = GetEventDamage(),
2354
- attackType = BlzGetEventAttackType(),
2490
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2355
2491
  damageType = BlzGetEventDamageType(),
2356
2492
  weaponType = BlzGetEventWeaponType(),
2357
- isAttack = BlzGetEventIsAttack()
2493
+ metadata = metadata,
2494
+ isAttack = BlzGetEventIsAttack(),
2495
+ originalAmount = GetEventDamage(),
2496
+ originalMetadata = metadata,
2497
+ preventRetaliation = damagingEventPreventRetaliation
2358
2498
  }
2359
2499
  if data.isAttack and source then
2360
2500
  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 +2508,36 @@ Unit.onDamaging = (function()
2368
2508
  invoke(
2369
2509
  event,
2370
2510
  source,
2371
- ____exports.Unit:of(target),
2511
+ target,
2372
2512
  setmetatable(
2373
2513
  {},
2374
2514
  {
2375
2515
  __index = data,
2376
2516
  __newindex = function(self, key, value)
2377
- damageSetters[key](value)
2517
+ local damageSetter = damageSetters[key]
2518
+ if damageSetter ~= nil then
2519
+ damageSetter(value)
2520
+ end
2378
2521
  data[key] = value
2379
2522
  end
2380
2523
  }
2381
2524
  )
2382
2525
  )
2526
+ if data[0] and source then
2527
+ local sourceOwner = source.owner.handle
2528
+ data[1] = sourceOwner
2529
+ local targetOwner = target.owner.handle
2530
+ data[2] = targetOwner
2531
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2532
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2533
+ data[3] = true
2534
+ end
2535
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2536
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2537
+ data[4] = true
2538
+ end
2539
+ end
2540
+ damagingEventByTarget[target] = data
2383
2541
  return
2384
2542
  end
2385
2543
  BlzSetEventDamage(0)
@@ -2387,7 +2545,7 @@ Unit.onDamaging = (function()
2387
2545
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2388
2546
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2389
2547
  local sourceOwner = source.owner.handle
2390
- local targetOwner = GetOwningPlayer(target)
2548
+ local targetOwner = target.owner.handle
2391
2549
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2392
2550
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2393
2551
  Timer:run(function()
@@ -2403,23 +2561,19 @@ Unit.onDamaging = (function()
2403
2561
  for ____, ____value in ipairs(source._attackHandlers) do
2404
2562
  local condition = ____value[1]
2405
2563
  local action = ____value[2]
2406
- if condition(
2407
- source,
2408
- ____exports.Unit:of(target),
2409
- data
2410
- ) then
2564
+ if condition(source, target, data) then
2411
2565
  action(
2412
2566
  source,
2413
- ____exports.Unit:of(target),
2567
+ target,
2414
2568
  setmetatable(
2415
2569
  {fire = function()
2416
2570
  UnitDamageTarget(
2417
2571
  source.handle,
2418
- target,
2572
+ target.handle,
2419
2573
  data.amount,
2420
2574
  true,
2421
2575
  true,
2422
- data.attackType,
2576
+ attackTypeToNative(data.attackType),
2423
2577
  data.damageType,
2424
2578
  data.weaponType
2425
2579
  )
@@ -2446,29 +2600,54 @@ Unit.onDamage = __TS__New(
2446
2600
  if source and source.typeId == dummyUnitId then
2447
2601
  source = nil
2448
2602
  end
2603
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2604
+ local damagingEvent = damagingEventByTarget[target]
2605
+ damagingEventByTarget[target] = nil
2449
2606
  local data = {
2450
2607
  amount = GetEventDamage(),
2451
- attackType = BlzGetEventAttackType(),
2608
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2452
2609
  damageType = BlzGetEventDamageType(),
2453
2610
  weaponType = BlzGetEventWeaponType(),
2611
+ metadata = damagingEvent and damagingEvent.metadata,
2454
2612
  isAttack = BlzGetEventIsAttack(),
2613
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2614
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2455
2615
  preventDeath = damageEventPreventDeath
2456
2616
  }
2617
+ if damagingEvent then
2618
+ for key, value in pairs(damagingEvent) do
2619
+ if isAttribute(key) then
2620
+ data[key] = value
2621
+ end
2622
+ end
2623
+ local sourceOwner = damagingEvent[1]
2624
+ if sourceOwner then
2625
+ local targetOwner = damagingEvent[2]
2626
+ if damagingEvent[3] then
2627
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2628
+ end
2629
+ if damagingEvent[4] then
2630
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2631
+ end
2632
+ end
2633
+ end
2457
2634
  local evData = setmetatable(
2458
2635
  {},
2459
2636
  {
2460
2637
  __index = data,
2461
2638
  __newindex = function(self, key, value)
2462
- damageSetters[key](value)
2639
+ local damageSetter = damageSetters[key]
2640
+ if damageSetter ~= nil then
2641
+ damageSetter(value)
2642
+ end
2463
2643
  data[key] = value
2464
2644
  end
2465
2645
  }
2466
2646
  )
2467
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2468
2647
  invoke(event, source, target, evData)
2469
2648
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2470
2649
  local bonusHealth = math.ceil(evData.amount)
2471
- target[104] = (target[104] or 0) + bonusHealth
2650
+ target[105] = (target[105] or 0) + bonusHealth
2472
2651
  BlzSetUnitMaxHP(
2473
2652
  target.handle,
2474
2653
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2482,7 +2661,7 @@ Unit.onDamage = __TS__New(
2482
2661
  evData[0],
2483
2662
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2484
2663
  )
2485
- target[104] = (target[104] or 0) - bonusHealth
2664
+ target[105] = (target[105] or 0) - bonusHealth
2486
2665
  SetWidgetLife(
2487
2666
  target.handle,
2488
2667
  GetWidgetLife(target.handle) - bonusHealth
@@ -2502,32 +2681,106 @@ Unit.onDamage = __TS__New(
2502
2681
  DestroyTrigger(trigger)
2503
2682
  end
2504
2683
  )
2505
- Unit.onItemDrop = __TS__New(
2684
+ Unit.itemDroppedEvent = __TS__New(
2506
2685
  ____exports.UnitTriggerEvent,
2507
2686
  EVENT_PLAYER_UNIT_DROP_ITEM,
2508
2687
  function()
2509
2688
  local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2689
+ local item = getManipulatedItem()
2690
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2691
+ return ____exports.Unit:of(unit), Item:of(item)
2512
2692
  end
2513
2693
  return IgnoreEvent
2514
2694
  end
2515
2695
  )
2516
- Unit.onItemPickup = __TS__New(
2696
+ Unit.itemPickedUpEvent = __TS__New(
2517
2697
  ____exports.UnitTriggerEvent,
2518
2698
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2519
2699
  function()
2520
2700
  local unit = getTriggerUnit()
2521
- if getUnitTypeId(unit) ~= dummyUnitId then
2522
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2701
+ local item = getManipulatedItem()
2702
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2703
+ return ____exports.Unit:of(unit), Item:of(item)
2523
2704
  end
2524
2705
  return IgnoreEvent
2525
2706
  end
2526
2707
  )
2527
- Unit.onItemUse = __TS__New(
2708
+ Unit.itemUsedEvent = __TS__New(
2528
2709
  ____exports.UnitTriggerEvent,
2529
2710
  EVENT_PLAYER_UNIT_USE_ITEM,
2530
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2711
+ function()
2712
+ local unit = getTriggerUnit()
2713
+ local item = getManipulatedItem()
2714
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2715
+ return ____exports.Unit:of(unit), Item:of(item)
2716
+ end
2717
+ return IgnoreEvent
2718
+ end
2719
+ )
2720
+ Unit.itemStackedEvent = __TS__New(
2721
+ ____exports.UnitTriggerEvent,
2722
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2723
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2724
+ )
2725
+ __TS__ObjectDefineProperty(
2726
+ Unit,
2727
+ "itemChargesChangedEvent",
2728
+ {get = function(self)
2729
+ local event = __TS__New(Event)
2730
+ Item.chargesChangedEvent:addListener(function(item)
2731
+ local unit = item.owner
2732
+ if unit ~= nil then
2733
+ invoke(event, unit, item)
2734
+ end
2735
+ end)
2736
+ rawset(self, "itemChargesChangedEvent", event)
2737
+ return event
2738
+ end}
2739
+ )
2740
+ __TS__ObjectDefineProperty(
2741
+ Unit,
2742
+ "itemUseOrderEvent",
2743
+ {get = function(self)
2744
+ local event = __TS__New(Event)
2745
+ for order = orderId("useslot0"), orderId("useslot5") do
2746
+ local slot = order - orderId("useslot0")
2747
+ local function listener(unit)
2748
+ local item = unit.items[slot + 1]
2749
+ if item ~= nil then
2750
+ invoke(event, unit, item)
2751
+ end
2752
+ end
2753
+ self.onImmediateOrder[order]:addListener(listener)
2754
+ self.onTargetOrder[order]:addListener(listener)
2755
+ self.onPointOrder[order]:addListener(listener)
2756
+ end
2757
+ rawset(self, "itemUseOrderEvent", event)
2758
+ return event
2759
+ end}
2760
+ )
2761
+ __TS__ObjectDefineProperty(
2762
+ Unit,
2763
+ "itemMoveOrderEvent",
2764
+ {get = function(self)
2765
+ local event = __TS__New(Event)
2766
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2767
+ local slotTo = order - orderId("moveslot0")
2768
+ self.onTargetOrder[order]:addListener(function(unit, item)
2769
+ local slotFrom = unit.items:findSlot(item)
2770
+ if slotFrom ~= nil then
2771
+ invoke(
2772
+ event,
2773
+ unit,
2774
+ item,
2775
+ slotFrom,
2776
+ slotTo
2777
+ )
2778
+ end
2779
+ end)
2780
+ end
2781
+ rawset(self, "itemMoveOrderEvent", event)
2782
+ return event
2783
+ end}
2531
2784
  )
2532
2785
  __TS__ObjectDefineProperty(
2533
2786
  Unit,