warscript 0.0.1-dev.42d21a8 → 0.0.1-dev.448dcfb

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 (162) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +10 -12
  8. package/core/types/player.lua +3 -1
  9. package/core/types/playerCamera.d.ts +2 -0
  10. package/core/types/playerCamera.lua +79 -5
  11. package/core/types/sound.d.ts +17 -24
  12. package/core/types/sound.lua +99 -24
  13. package/core/types/timer.d.ts +8 -8
  14. package/core/types/timer.lua +25 -23
  15. package/core/util.lua +6 -1
  16. package/decl/native.d.ts +844 -788
  17. package/engine/behavior.d.ts +2 -0
  18. package/engine/behavior.lua +53 -27
  19. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  20. package/engine/behaviour/ability/apply-buff.lua +32 -0
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  22. package/engine/behaviour/ability/damage.d.ts +9 -3
  23. package/engine/behaviour/ability/damage.lua +26 -38
  24. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  25. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  26. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  27. package/engine/behaviour/ability/restore-mana.lua +6 -6
  28. package/engine/behaviour/ability.d.ts +7 -2
  29. package/engine/behaviour/ability.lua +42 -24
  30. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  31. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  32. package/engine/behaviour/unit.d.ts +28 -0
  33. package/engine/behaviour/unit.lua +163 -4
  34. package/engine/buff.d.ts +57 -41
  35. package/engine/buff.lua +301 -228
  36. package/engine/internal/ability.d.ts +7 -1
  37. package/engine/internal/ability.lua +48 -9
  38. package/engine/internal/item/ability.lua +63 -11
  39. package/engine/internal/item+owner.lua +12 -6
  40. package/engine/internal/item.d.ts +7 -4
  41. package/engine/internal/item.lua +141 -35
  42. package/engine/internal/mechanics/ability-duration.lua +1 -1
  43. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  44. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  45. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  46. package/engine/internal/misc/frame-coordinates.lua +21 -0
  47. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  48. package/engine/internal/misc/get-terrain-z.lua +11 -0
  49. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  50. package/engine/internal/misc/player-local-handle.lua +5 -0
  51. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  52. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  53. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  54. package/engine/internal/object-data/evasion-probability.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +35 -0
  56. package/engine/internal/unit/ability.lua +62 -0
  57. package/engine/internal/unit/add-item-to-slot.lua +6 -4
  58. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  59. package/engine/internal/unit/allowed-targets.lua +9 -1
  60. package/engine/internal/unit/bonus.d.ts +2 -0
  61. package/engine/internal/unit/bonus.lua +17 -0
  62. package/engine/internal/unit/item.lua +1 -1
  63. package/engine/internal/unit/order.d.ts +20 -0
  64. package/engine/internal/unit/order.lua +136 -0
  65. package/engine/internal/unit+ability.lua +10 -1
  66. package/engine/internal/unit+damage.d.ts +2 -11
  67. package/engine/internal/unit+damage.lua +10 -14
  68. package/engine/internal/unit+spellSteal.lua +1 -2
  69. package/engine/internal/unit-missile-launch.lua +9 -2
  70. package/engine/internal/unit.d.ts +31 -8
  71. package/engine/internal/unit.lua +262 -107
  72. package/engine/lightning.d.ts +12 -5
  73. package/engine/lightning.lua +48 -14
  74. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  75. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  76. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  77. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  78. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  79. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  80. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  81. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  82. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  83. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  84. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  85. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  86. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  87. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  88. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  89. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  90. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  91. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  92. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  93. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  94. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  95. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  96. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  97. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  98. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  99. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  100. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  101. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  102. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  103. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  104. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  105. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  106. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  107. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  108. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  109. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  110. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  111. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  112. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  113. package/engine/object-data/entry/ability-type/web.lua +52 -0
  114. package/engine/object-data/entry/ability-type.d.ts +19 -17
  115. package/engine/object-data/entry/ability-type.lua +82 -24
  116. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  117. package/engine/object-data/entry/buff-type.d.ts +6 -12
  118. package/engine/object-data/entry/buff-type.lua +13 -29
  119. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  120. package/engine/object-data/entry/item-type.d.ts +1 -1
  121. package/engine/object-data/entry/item-type.lua +4 -4
  122. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  123. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  124. package/engine/object-data/entry/sound-preset.lua +140 -0
  125. package/engine/object-data/entry/unit-type.d.ts +21 -5
  126. package/engine/object-data/entry/unit-type.lua +214 -93
  127. package/engine/object-data/entry/upgrade.d.ts +1 -1
  128. package/engine/object-data/entry/upgrade.lua +4 -4
  129. package/engine/object-data/entry.d.ts +16 -14
  130. package/engine/object-data/entry.lua +60 -32
  131. package/engine/object-field/ability.d.ts +4 -4
  132. package/engine/object-field/ability.lua +7 -6
  133. package/engine/object-field/unit.d.ts +57 -3
  134. package/engine/object-field/unit.lua +207 -7
  135. package/engine/object-field.d.ts +17 -6
  136. package/engine/object-field.lua +188 -92
  137. package/engine/standard/entries/buff-type.d.ts +3 -0
  138. package/engine/standard/entries/buff-type.lua +3 -0
  139. package/engine/standard/entries/sound-preset.d.ts +10 -0
  140. package/engine/standard/entries/sound-preset.lua +10 -0
  141. package/engine/standard/fields/unit.d.ts +4 -0
  142. package/engine/standard/fields/unit.lua +7 -0
  143. package/engine/text-tag.d.ts +36 -2
  144. package/engine/text-tag.lua +249 -10
  145. package/engine/unit.d.ts +1 -0
  146. package/engine/unit.lua +1 -0
  147. package/objutil/buff.lua +1 -2
  148. package/objutil/unit.lua +8 -0
  149. package/package.json +2 -2
  150. package/utility/arrays.d.ts +1 -0
  151. package/utility/arrays.lua +3 -0
  152. package/utility/functions.d.ts +8 -0
  153. package/utility/functions.lua +13 -0
  154. package/utility/linked-set.d.ts +1 -0
  155. package/utility/linked-set.lua +3 -0
  156. package/utility/lua-maps.d.ts +4 -0
  157. package/utility/lua-maps.lua +20 -0
  158. package/utility/lua-sets.d.ts +2 -0
  159. package/utility/lua-sets.lua +7 -0
  160. package/utility/reflection.lua +11 -7
  161. package/core/types/order.d.ts +0 -25
  162. package/core/types/order.lua +0 -55
@@ -53,12 +53,19 @@ local ____math = require("math")
53
53
  local min = ____math.min
54
54
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
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
56
65
  local match = string.match
57
66
  local ____tostring = _G.tostring
58
67
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
68
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local queueUnitAnimation = QueueUnitAnimation
62
69
  local getUnitIntegerField = BlzGetUnitIntegerField
63
70
  local getUnitRealField = BlzGetUnitRealField
64
71
  local getHeroStr = GetHeroStr
@@ -77,9 +84,9 @@ local setUnitScale = SetUnitScale
77
84
  local setUnitPosition = SetUnitPosition
78
85
  local setUnitTimeScale = SetUnitTimeScale
79
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
80
88
  local createUnit = CreateUnit
81
89
  local killUnit = KillUnit
82
- local setUnitExploded = SetUnitExploded
83
90
  local removeUnit = RemoveUnit
84
91
  local getUnitTypeId = GetUnitTypeId
85
92
  local isHeroUnitId = IsHeroUnitId
@@ -95,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
95
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
96
103
  local isUnitInRangeXY = IsUnitInRangeXY
97
104
  local isUnitInRange = IsUnitInRange
98
- local setResourceAmount = SetResourceAmount
99
- local getResourceAmount = GetResourceAmount
100
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
101
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
102
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -120,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
120
125
  local getIssuedOrderId = GetIssuedOrderId
121
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
122
127
  local unitAlive = UnitAlive
123
- local unitAddType = UnitAddType
124
- local unitRemoveType = UnitRemoveType
125
- local isUnitIllusion = IsUnitIllusion
126
- local isUnitType = IsUnitType
127
128
  local isUnitAlly = IsUnitAlly
128
129
  local isUnitEnemy = IsUnitEnemy
129
130
  local getOwningPlayer = GetOwningPlayer
130
- local setUnitColor = SetUnitColor
131
- local showUnitTeamGlow = BlzShowUnitTeamGlow
132
131
  ____exports.UnitClassification = {}
133
132
  local UnitClassification = ____exports.UnitClassification
134
133
  do
@@ -138,6 +137,7 @@ do
138
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
139
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
140
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
141
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
142
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
143
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -345,6 +345,9 @@ local function dispatchAbility(event)
345
345
  }
346
346
  )
347
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
348
351
  local function damageEventPreventDeath(self, callback, ...)
349
352
  if self[0] ~= nil then
350
353
  return
@@ -356,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
356
359
  rawset(self, 1 + i, (select(i, ...)))
357
360
  end
358
361
  end
359
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponType = BlzSetEventWeaponType
369
+ }
360
370
  local jlimitopByOperator = {
361
371
  [0] = LESS_THAN_OR_EQUAL,
362
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -434,6 +444,19 @@ __TS__SetDescriptor(
434
444
  },
435
445
  true
436
446
  )
447
+ __TS__SetDescriptor(
448
+ UnitWeapon.prototype,
449
+ "allowedTargetCombatClassifications",
450
+ {
451
+ get = function(self)
452
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
453
+ end,
454
+ set = function(self, allowedTargetCombatClassifications)
455
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
456
+ end
457
+ },
458
+ true
459
+ )
437
460
  __TS__SetDescriptor(
438
461
  UnitWeapon.prototype,
439
462
  "damageBase",
@@ -638,16 +661,26 @@ local function delayHealthChecksCallback(unit)
638
661
  end
639
662
  end
640
663
  local nextSyncId = 1
641
- local unitBySyncId = setmetatable({}, {__mode = "k"})
664
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
665
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
666
+ local function addAbility(unit, abilityTypeId)
667
+ local ____unitAddAbility_result_0
668
+ if unitAddAbility(unit, abilityTypeId) then
669
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
670
+ else
671
+ ____unitAddAbility_result_0 = nil
672
+ end
673
+ return ____unitAddAbility_result_0
674
+ end
642
675
  ____exports.Unit = __TS__Class()
643
676
  local Unit = ____exports.Unit
644
677
  Unit.name = "Unit"
645
678
  __TS__ClassExtends(Unit, Handle)
646
679
  function Unit.prototype.____constructor(self, handle)
647
680
  Handle.prototype.____constructor(self, handle)
648
- local ____nextSyncId_0 = nextSyncId
649
- nextSyncId = ____nextSyncId_0 + 1
650
- self.syncId = ____nextSyncId_0
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
651
684
  self._owner = Player:of(getOwningPlayer(handle))
652
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
653
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -679,6 +712,8 @@ function Unit.prototype.getEvent(self, event, collector)
679
712
  end
680
713
  function Unit.prototype.onDestroy(self)
681
714
  local handle = self.handle
715
+ self[107] = getUnitX(handle)
716
+ self[108] = getUnitY(handle)
682
717
  if not self._owner then
683
718
  self._owner = Player:of(getOwningPlayer(handle))
684
719
  end
@@ -746,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
746
781
  end}
747
782
  end
748
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
749
- local ____combatClassification_1 = combatClassification
750
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
784
+ local ____combatClassification_2 = combatClassification
785
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
751
786
  end
752
787
  function Unit.prototype.addClassification(self, classification)
753
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
754
789
  end
755
790
  function Unit.prototype.removeClassification(self, classification)
756
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
757
792
  end
758
793
  function Unit.prototype.hasClassification(self, classification)
759
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
760
795
  end
761
796
  function Unit.prototype.isVisibleTo(self, player)
762
797
  return isUnitVisible(self.handle, player.handle)
@@ -765,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
765
800
  return isUnitInvisible(self.handle, player.handle)
766
801
  end
767
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
768
- local ____temp_2
803
+ local ____temp_3
769
804
  if type(x) == "number" then
770
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
771
806
  else
772
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
773
808
  end
774
- return ____temp_2
809
+ return ____temp_3
775
810
  end
776
811
  function Unit.prototype.isAllyOf(self, unit)
777
812
  return isUnitAlly(
@@ -789,13 +824,25 @@ function Unit.prototype.playAnimation(self, animation, rarity)
789
824
  if type(animation) == "number" then
790
825
  setUnitAnimationByIndex(self.handle, animation)
791
826
  elseif rarity then
792
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
793
828
  else
794
829
  setUnitAnimation(self.handle, animation)
795
830
  end
796
831
  end
832
+ function Unit.prototype.resetAnimation(self)
833
+ ResetUnitAnimation(self.handle)
834
+ end
797
835
  function Unit.prototype.queueAnimation(self, animation)
798
- queueUnitAnimation(self.handle, animation)
836
+ QueueUnitAnimation(self.handle, animation)
837
+ end
838
+ function Unit.prototype.chooseWeapon(self, target)
839
+ if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
840
+ return self.firstWeapon
841
+ end
842
+ if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
843
+ return self.secondWeapon
844
+ end
845
+ return nil
799
846
  end
800
847
  function Unit.prototype.delayHealthChecks(self)
801
848
  self[103] = (self[103] or 0) + 1
@@ -808,21 +855,21 @@ function Unit.prototype.isSelected(self, player)
808
855
  return IsUnitSelected(self.handle, player.handle)
809
856
  end
810
857
  function Unit.prototype.explode(self)
811
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
812
859
  killUnit(self.handle)
813
860
  end
814
861
  function Unit.prototype.kill(self)
815
862
  killUnit(self.handle)
816
863
  end
817
864
  function Unit.prototype.revive(self, x, y, doEffect)
818
- local ____ReviveHero_5 = ReviveHero
819
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
820
- local ____doEffect_3 = doEffect
821
- if ____doEffect_3 == nil then
822
- ____doEffect_3 = false
865
+ local ____ReviveHero_6 = ReviveHero
866
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
867
+ local ____doEffect_4 = doEffect
868
+ if ____doEffect_4 == nil then
869
+ ____doEffect_4 = false
823
870
  end
824
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
825
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
826
873
  end
827
874
  function Unit.prototype.healTarget(self, target, amount)
828
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,17 +912,16 @@ function Unit.prototype.itemInSlot(self, slot)
865
912
  return Item:of(unitItemInSlot(self.handle, slot))
866
913
  end
867
914
  function Unit.prototype.addAbility(self, abilityId)
868
- if unitAddAbility(self.handle, abilityId) then
869
- local ability = UnitAbility:of(
870
- checkNotNull(getUnitAbility(self.handle, abilityId)),
871
- abilityId,
872
- self
873
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
874
921
  local abilities = self.abilities
875
922
  abilities[#abilities + 1] = ability
876
- return ability
877
923
  end
878
- return nil
924
+ return ability
879
925
  end
880
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
881
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -890,28 +936,17 @@ function Unit.prototype.hasAbility(self, abilityId)
890
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
891
937
  end
892
938
  function Unit.prototype.getAbilityById(self, abilityId)
893
- local handle = self.handle
894
- if unitAddAbility(handle, abilityId) then
895
- assert(unitRemoveAbility(handle, abilityId))
896
- return nil
897
- end
898
- return UnitAbility:of(
899
- getUnitAbility(self.handle, abilityId),
900
- abilityId,
901
- self
902
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
903
941
  end
904
942
  function Unit.prototype.removeAbility(self, abilityId)
905
- if unitRemoveAbility(self.handle, abilityId) then
906
- local abilities = self.abilities
907
- for i = 1, #abilities do
908
- if abilities[i].typeId == abilityId then
909
- abilities[i]:destroy()
910
- tremove(abilities, i)
911
- return true
912
- end
943
+ local abilities = self.abilities
944
+ for i = 1, #abilities do
945
+ if abilities[i].typeId == abilityId then
946
+ abilities[i]:destroy()
947
+ tremove(abilities, i)
948
+ return true
913
949
  end
914
- return true
915
950
  end
916
951
  return false
917
952
  end
@@ -927,6 +962,21 @@ end
927
962
  function Unit.prototype.endAbilityCooldown(self, abilityId)
928
963
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
929
964
  end
965
+ function Unit.prototype.interruptMovement(self)
966
+ local handle = self.handle
967
+ unitDisableAbility(
968
+ handle,
969
+ fourCC("Amov"),
970
+ true,
971
+ false
972
+ )
973
+ unitDisableAbility(
974
+ handle,
975
+ fourCC("Amov"),
976
+ false,
977
+ false
978
+ )
979
+ end
930
980
  function Unit.prototype.interruptAttack(self)
931
981
  unitInterruptAttack(self.handle)
932
982
  end
@@ -1200,7 +1250,15 @@ __TS__SetDescriptor(
1200
1250
  Unit.prototype,
1201
1251
  "isIllusion",
1202
1252
  {get = function(self)
1203
- return isUnitIllusion(self.handle)
1253
+ return IsUnitIllusion(self.handle)
1254
+ end},
1255
+ true
1256
+ )
1257
+ __TS__SetDescriptor(
1258
+ Unit.prototype,
1259
+ "isStunned",
1260
+ {get = function(self)
1261
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1204
1262
  end},
1205
1263
  true
1206
1264
  )
@@ -1277,6 +1335,19 @@ __TS__SetDescriptor(
1277
1335
  },
1278
1336
  true
1279
1337
  )
1338
+ __TS__SetDescriptor(
1339
+ Unit.prototype,
1340
+ "primaryAttribute",
1341
+ {
1342
+ get = function(self)
1343
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1344
+ end,
1345
+ set = function(self, primaryAttribute)
1346
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1347
+ end
1348
+ },
1349
+ true
1350
+ )
1280
1351
  __TS__SetDescriptor(
1281
1352
  Unit.prototype,
1282
1353
  "strengthBase",
@@ -1401,14 +1472,14 @@ __TS__SetDescriptor(
1401
1472
  return not self[106]
1402
1473
  end,
1403
1474
  set = function(self, isTeamGlowVisible)
1404
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1405
- local ____temp_6
1475
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1476
+ local ____temp_7
1406
1477
  if not isTeamGlowVisible then
1407
- ____temp_6 = true
1478
+ ____temp_7 = true
1408
1479
  else
1409
- ____temp_6 = nil
1480
+ ____temp_7 = nil
1410
1481
  end
1411
- self[106] = ____temp_6
1482
+ self[106] = ____temp_7
1412
1483
  end
1413
1484
  },
1414
1485
  true
@@ -1417,9 +1488,9 @@ __TS__SetDescriptor(
1417
1488
  Unit.prototype,
1418
1489
  "color",
1419
1490
  {set = function(self, color)
1420
- setUnitColor(self.handle, color.handle)
1491
+ SetUnitColor(self.handle, color.handle)
1421
1492
  if self[106] then
1422
- showUnitTeamGlow(self.handle, false)
1493
+ BlzShowUnitTeamGlow(self.handle, false)
1423
1494
  end
1424
1495
  end},
1425
1496
  true
@@ -1588,7 +1659,7 @@ __TS__SetDescriptor(
1588
1659
  "x",
1589
1660
  {
1590
1661
  get = function(self)
1591
- return getUnitX(self.handle)
1662
+ return self[107] or getUnitX(self.handle)
1592
1663
  end,
1593
1664
  set = function(self, v)
1594
1665
  SetUnitX(self.handle, v)
@@ -1601,7 +1672,7 @@ __TS__SetDescriptor(
1601
1672
  "y",
1602
1673
  {
1603
1674
  get = function(self)
1604
- return getUnitY(self.handle)
1675
+ return self[108] or getUnitY(self.handle)
1605
1676
  end,
1606
1677
  set = function(self, v)
1607
1678
  SetUnitY(self.handle, v)
@@ -1687,10 +1758,10 @@ __TS__SetDescriptor(
1687
1758
  "gold",
1688
1759
  {
1689
1760
  get = function(self)
1690
- return getResourceAmount(self.handle)
1761
+ return GetResourceAmount(self.handle)
1691
1762
  end,
1692
1763
  set = function(self, gold)
1693
- setResourceAmount(self.handle, gold)
1764
+ SetResourceAmount(self.handle, gold)
1694
1765
  end
1695
1766
  },
1696
1767
  true
@@ -1818,6 +1889,19 @@ __TS__SetDescriptor(
1818
1889
  end},
1819
1890
  true
1820
1891
  )
1892
+ __TS__SetDescriptor(
1893
+ Unit.prototype,
1894
+ "movementType",
1895
+ {
1896
+ get = function(self)
1897
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1898
+ end,
1899
+ set = function(self, movementType)
1900
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1901
+ end
1902
+ },
1903
+ true
1904
+ )
1821
1905
  __TS__SetDescriptor(
1822
1906
  Unit.prototype,
1823
1907
  "pathing",
@@ -1999,6 +2083,14 @@ __TS__SetDescriptor(
1999
2083
  end},
2000
2084
  true
2001
2085
  )
2086
+ __TS__SetDescriptor(
2087
+ Unit.prototype,
2088
+ "targetAcquiredEvent",
2089
+ {get = function(self)
2090
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2091
+ end},
2092
+ true
2093
+ )
2002
2094
  __TS__SetDescriptor(
2003
2095
  Unit.prototype,
2004
2096
  "onSelect",
@@ -2134,25 +2226,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2134
2226
  InitializingEvent,
2135
2227
  function(event)
2136
2228
  local function listener(unit, id)
2137
- local ____GetSpellTargetUnit_result_9
2229
+ local ____GetSpellTargetUnit_result_10
2138
2230
  if GetSpellTargetUnit() then
2139
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2231
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2140
2232
  else
2141
- local ____GetSpellTargetItem_result_8
2233
+ local ____GetSpellTargetItem_result_9
2142
2234
  if GetSpellTargetItem() then
2143
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2235
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2144
2236
  else
2145
- local ____GetSpellTargetDestructable_result_7
2237
+ local ____GetSpellTargetDestructable_result_8
2146
2238
  if GetSpellTargetDestructable() then
2147
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2239
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2148
2240
  else
2149
- ____GetSpellTargetDestructable_result_7 = nil
2241
+ ____GetSpellTargetDestructable_result_8 = nil
2150
2242
  end
2151
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2243
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2152
2244
  end
2153
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2245
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2154
2246
  end
2155
- local target = ____GetSpellTargetUnit_result_9
2247
+ local target = ____GetSpellTargetUnit_result_10
2156
2248
  if target then
2157
2249
  invoke(event, unit, id, target)
2158
2250
  end
@@ -2360,13 +2452,19 @@ Unit.onDamaging = (function()
2360
2452
  if source and source.typeId == dummyUnitId then
2361
2453
  source = nil
2362
2454
  end
2363
- local target = BlzGetEventDamageTarget()
2455
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2456
+ local metadata = damageMetadataByTarget[target]
2457
+ damageMetadataByTarget[target] = nil
2364
2458
  local data = {
2365
2459
  amount = GetEventDamage(),
2366
- attackType = BlzGetEventAttackType(),
2460
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2367
2461
  damageType = BlzGetEventDamageType(),
2368
2462
  weaponType = BlzGetEventWeaponType(),
2369
- isAttack = BlzGetEventIsAttack()
2463
+ metadata = metadata,
2464
+ isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2466
+ originalMetadata = metadata,
2467
+ preventRetaliation = damagingEventPreventRetaliation
2370
2468
  }
2371
2469
  if data.isAttack and source then
2372
2470
  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
@@ -2380,18 +2478,36 @@ Unit.onDamaging = (function()
2380
2478
  invoke(
2381
2479
  event,
2382
2480
  source,
2383
- ____exports.Unit:of(target),
2481
+ target,
2384
2482
  setmetatable(
2385
2483
  {},
2386
2484
  {
2387
2485
  __index = data,
2388
2486
  __newindex = function(self, key, value)
2389
- damageSetters[key](value)
2487
+ local damageSetter = damageSetters[key]
2488
+ if damageSetter ~= nil then
2489
+ damageSetter(value)
2490
+ end
2390
2491
  data[key] = value
2391
2492
  end
2392
2493
  }
2393
2494
  )
2394
2495
  )
2496
+ if data[0] and source then
2497
+ local sourceOwner = source.owner.handle
2498
+ data[1] = sourceOwner
2499
+ local targetOwner = target.owner.handle
2500
+ data[2] = targetOwner
2501
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2502
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2503
+ data[3] = true
2504
+ end
2505
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2506
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2507
+ data[4] = true
2508
+ end
2509
+ end
2510
+ damagingEventByTarget[target] = data
2395
2511
  return
2396
2512
  end
2397
2513
  BlzSetEventDamage(0)
@@ -2399,7 +2515,7 @@ Unit.onDamaging = (function()
2399
2515
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2400
2516
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2401
2517
  local sourceOwner = source.owner.handle
2402
- local targetOwner = GetOwningPlayer(target)
2518
+ local targetOwner = target.owner.handle
2403
2519
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2404
2520
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2405
2521
  Timer:run(function()
@@ -2415,23 +2531,19 @@ Unit.onDamaging = (function()
2415
2531
  for ____, ____value in ipairs(source._attackHandlers) do
2416
2532
  local condition = ____value[1]
2417
2533
  local action = ____value[2]
2418
- if condition(
2419
- source,
2420
- ____exports.Unit:of(target),
2421
- data
2422
- ) then
2534
+ if condition(source, target, data) then
2423
2535
  action(
2424
2536
  source,
2425
- ____exports.Unit:of(target),
2537
+ target,
2426
2538
  setmetatable(
2427
2539
  {fire = function()
2428
2540
  UnitDamageTarget(
2429
2541
  source.handle,
2430
- target,
2542
+ target.handle,
2431
2543
  data.amount,
2432
2544
  true,
2433
2545
  true,
2434
- data.attackType,
2546
+ attackTypeToNative(data.attackType),
2435
2547
  data.damageType,
2436
2548
  data.weaponType
2437
2549
  )
@@ -2458,26 +2570,50 @@ Unit.onDamage = __TS__New(
2458
2570
  if source and source.typeId == dummyUnitId then
2459
2571
  source = nil
2460
2572
  end
2573
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2574
+ local damagingEvent = damagingEventByTarget[target]
2575
+ damagingEventByTarget[target] = nil
2461
2576
  local data = {
2462
2577
  amount = GetEventDamage(),
2463
- attackType = BlzGetEventAttackType(),
2578
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2464
2579
  damageType = BlzGetEventDamageType(),
2465
2580
  weaponType = BlzGetEventWeaponType(),
2581
+ metadata = damagingEvent and damagingEvent.metadata,
2466
2582
  isAttack = BlzGetEventIsAttack(),
2467
- originalAmount = GetEventDamage(),
2583
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2584
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2468
2585
  preventDeath = damageEventPreventDeath
2469
2586
  }
2587
+ if damagingEvent then
2588
+ for key, value in pairs(damagingEvent) do
2589
+ if isAttribute(key) then
2590
+ data[key] = value
2591
+ end
2592
+ end
2593
+ local sourceOwner = damagingEvent[1]
2594
+ if sourceOwner then
2595
+ local targetOwner = damagingEvent[2]
2596
+ if damagingEvent[3] then
2597
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2598
+ end
2599
+ if damagingEvent[4] then
2600
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2601
+ end
2602
+ end
2603
+ end
2470
2604
  local evData = setmetatable(
2471
2605
  {},
2472
2606
  {
2473
2607
  __index = data,
2474
2608
  __newindex = function(self, key, value)
2475
- damageSetters[key](value)
2609
+ local damageSetter = damageSetters[key]
2610
+ if damageSetter ~= nil then
2611
+ damageSetter(value)
2612
+ end
2476
2613
  data[key] = value
2477
2614
  end
2478
2615
  }
2479
2616
  )
2480
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2481
2617
  invoke(event, source, target, evData)
2482
2618
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2483
2619
  local bonusHealth = math.ceil(evData.amount)
@@ -2531,10 +2667,14 @@ Unit.itemPickedUpEvent = __TS__New(
2531
2667
  ____exports.UnitTriggerEvent,
2532
2668
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2533
2669
  function()
2534
- local unit = getTriggerUnit()
2535
- local item = getManipulatedItem()
2536
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2537
- return ____exports.Unit:of(unit), Item:of(item)
2670
+ local unitHandle = getTriggerUnit()
2671
+ local itemHandle = getManipulatedItem()
2672
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2673
+ local unit = ____exports.Unit:of(unitHandle)
2674
+ local item = Item:of(itemHandle)
2675
+ if item.owner ~= unit then
2676
+ return unit, item
2677
+ end
2538
2678
  end
2539
2679
  return IgnoreEvent
2540
2680
  end
@@ -2554,7 +2694,22 @@ Unit.itemUsedEvent = __TS__New(
2554
2694
  Unit.itemStackedEvent = __TS__New(
2555
2695
  ____exports.UnitTriggerEvent,
2556
2696
  EVENT_PLAYER_UNIT_STACK_ITEM,
2557
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2697
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2698
+ )
2699
+ __TS__ObjectDefineProperty(
2700
+ Unit,
2701
+ "itemChargesChangedEvent",
2702
+ {get = function(self)
2703
+ local event = __TS__New(Event)
2704
+ Item.chargesChangedEvent:addListener(function(item)
2705
+ local unit = item.owner
2706
+ if unit ~= nil then
2707
+ invoke(event, unit, item)
2708
+ end
2709
+ end)
2710
+ rawset(self, "itemChargesChangedEvent", event)
2711
+ return event
2712
+ end}
2558
2713
  )
2559
2714
  __TS__ObjectDefineProperty(
2560
2715
  Unit,