warscript 0.0.1-dev.e4a5fce → 0.0.1-dev.e6c3dde

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 (152) 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 +2 -3
  6. package/core/types/effect.lua +95 -48
  7. package/core/types/sound.d.ts +17 -24
  8. package/core/types/sound.lua +99 -24
  9. package/core/types/timer.d.ts +7 -8
  10. package/core/types/timer.lua +18 -21
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +12 -1
  13. package/decl/native.d.ts +840 -786
  14. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  15. package/engine/behaviour/ability/apply-buff.lua +32 -0
  16. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  17. package/engine/behaviour/ability/damage.d.ts +9 -3
  18. package/engine/behaviour/ability/damage.lua +26 -38
  19. package/engine/behaviour/ability/emulate-impact.lua +20 -8
  20. package/engine/behaviour/ability/on-command-impact.lua +7 -0
  21. package/engine/behaviour/ability.d.ts +12 -3
  22. package/engine/behaviour/ability.lua +74 -24
  23. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  24. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  25. package/engine/behaviour/unit.d.ts +28 -0
  26. package/engine/behaviour/unit.lua +160 -4
  27. package/engine/buff.d.ts +57 -41
  28. package/engine/buff.lua +301 -228
  29. package/engine/internal/ability.d.ts +15 -1
  30. package/engine/internal/ability.lua +84 -2
  31. package/engine/internal/item/ability.lua +162 -4
  32. package/engine/internal/item.d.ts +7 -4
  33. package/engine/internal/item.lua +131 -28
  34. package/engine/internal/mechanics/ability-duration.lua +1 -1
  35. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  36. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  37. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  38. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  39. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  40. package/engine/internal/object-data/evasion-probability.lua +16 -0
  41. package/engine/internal/unit/ability.d.ts +35 -0
  42. package/engine/internal/unit/ability.lua +62 -0
  43. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  44. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  45. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  46. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  47. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  48. package/engine/internal/unit/allowed-targets.lua +9 -1
  49. package/engine/internal/unit/bonus.d.ts +2 -0
  50. package/engine/internal/unit/bonus.lua +17 -0
  51. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  52. package/engine/internal/unit/ignore-events-items.lua +5 -0
  53. package/engine/internal/unit/item.lua +6 -12
  54. package/engine/internal/unit/order.d.ts +20 -0
  55. package/engine/internal/unit/order.lua +136 -0
  56. package/engine/internal/unit+damage.d.ts +2 -11
  57. package/engine/internal/unit+damage.lua +10 -14
  58. package/engine/internal/unit+spellSteal.lua +1 -2
  59. package/engine/internal/unit-missile-launch.lua +1 -1
  60. package/engine/internal/unit.d.ts +31 -6
  61. package/engine/internal/unit.lua +302 -107
  62. package/engine/internal/utility.lua +12 -0
  63. package/engine/lightning.d.ts +12 -5
  64. package/engine/lightning.lua +48 -14
  65. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  66. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  67. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  68. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  69. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  70. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  71. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  72. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  73. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  74. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  75. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  76. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  77. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  78. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  79. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  80. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  81. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  82. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  83. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  84. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  85. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  86. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  87. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  88. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  89. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  90. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  91. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  92. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  93. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  94. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  95. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  96. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  97. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  98. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  99. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  100. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  101. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  102. package/engine/object-data/entry/ability-type/web.lua +52 -0
  103. package/engine/object-data/entry/ability-type.d.ts +19 -17
  104. package/engine/object-data/entry/ability-type.lua +89 -33
  105. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  106. package/engine/object-data/entry/buff-type.d.ts +6 -12
  107. package/engine/object-data/entry/buff-type.lua +13 -29
  108. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  109. package/engine/object-data/entry/item-type.d.ts +3 -1
  110. package/engine/object-data/entry/item-type.lua +15 -2
  111. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  112. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  113. package/engine/object-data/entry/sound-preset.lua +140 -0
  114. package/engine/object-data/entry/unit-type.d.ts +10 -3
  115. package/engine/object-data/entry/unit-type.lua +155 -92
  116. package/engine/object-data/entry/upgrade.d.ts +1 -1
  117. package/engine/object-data/entry/upgrade.lua +4 -4
  118. package/engine/object-data/entry.d.ts +16 -14
  119. package/engine/object-data/entry.lua +60 -32
  120. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  121. package/engine/object-field/ability.d.ts +6 -3
  122. package/engine/object-field/ability.lua +3 -0
  123. package/engine/object-field/unit.d.ts +50 -3
  124. package/engine/object-field/unit.lua +186 -7
  125. package/engine/object-field.d.ts +17 -6
  126. package/engine/object-field.lua +187 -89
  127. package/engine/standard/entries/buff-type.d.ts +3 -0
  128. package/engine/standard/entries/buff-type.lua +3 -0
  129. package/engine/standard/entries/sound-preset.d.ts +10 -0
  130. package/engine/standard/entries/sound-preset.lua +10 -0
  131. package/engine/standard/fields/unit.d.ts +3 -0
  132. package/engine/standard/fields/unit.lua +5 -0
  133. package/engine/text-tag.d.ts +36 -2
  134. package/engine/text-tag.lua +175 -10
  135. package/engine/unit.d.ts +2 -0
  136. package/engine/unit.lua +2 -0
  137. package/objutil/buff.lua +1 -2
  138. package/objutil/unit.lua +8 -0
  139. package/package.json +2 -2
  140. package/utility/arrays.d.ts +1 -0
  141. package/utility/arrays.lua +3 -0
  142. package/utility/functions.d.ts +1 -0
  143. package/utility/functions.lua +1 -0
  144. package/utility/linked-set.d.ts +1 -0
  145. package/utility/linked-set.lua +3 -0
  146. package/utility/lua-maps.d.ts +4 -0
  147. package/utility/lua-maps.lua +20 -0
  148. package/utility/lua-sets.d.ts +1 -0
  149. package/utility/lua-sets.lua +3 -0
  150. package/utility/reflection.lua +11 -7
  151. package/core/types/order.d.ts +0 -25
  152. package/core/types/order.lua +0 -55
@@ -51,12 +51,21 @@ local ____arrays = require("utility.arrays")
51
51
  local forEach = ____arrays.forEach
52
52
  local ____math = require("math")
53
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
63
+ local ____ability = require("engine.internal.item.ability")
64
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
54
65
  local match = string.match
55
66
  local ____tostring = _G.tostring
56
67
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
68
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
69
  local getUnitIntegerField = BlzGetUnitIntegerField
61
70
  local getUnitRealField = BlzGetUnitRealField
62
71
  local getHeroStr = GetHeroStr
@@ -75,9 +84,9 @@ local setUnitScale = SetUnitScale
75
84
  local setUnitPosition = SetUnitPosition
76
85
  local setUnitTimeScale = SetUnitTimeScale
77
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
88
  local createUnit = CreateUnit
79
89
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
90
  local removeUnit = RemoveUnit
82
91
  local getUnitTypeId = GetUnitTypeId
83
92
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
103
  local isUnitInRangeXY = IsUnitInRangeXY
95
104
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -118,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
118
125
  local getIssuedOrderId = GetIssuedOrderId
119
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
120
127
  local unitAlive = UnitAlive
121
- local unitAddType = UnitAddType
122
- local unitRemoveType = UnitRemoveType
123
- local isUnitIllusion = IsUnitIllusion
124
- local isUnitType = IsUnitType
125
128
  local isUnitAlly = IsUnitAlly
126
129
  local isUnitEnemy = IsUnitEnemy
127
130
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
131
  ____exports.UnitClassification = {}
131
132
  local UnitClassification = ____exports.UnitClassification
132
133
  do
@@ -136,6 +137,7 @@ do
136
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -343,6 +345,9 @@ local function dispatchAbility(event)
343
345
  }
344
346
  )
345
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
346
351
  local function damageEventPreventDeath(self, callback, ...)
347
352
  if self[0] ~= nil then
348
353
  return
@@ -354,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
359
  rawset(self, 1 + i, (select(i, ...)))
355
360
  end
356
361
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponType = BlzSetEventWeaponType
369
+ }
358
370
  local jlimitopByOperator = {
359
371
  [0] = LESS_THAN_OR_EQUAL,
360
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -432,6 +444,19 @@ __TS__SetDescriptor(
432
444
  },
433
445
  true
434
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
+ )
435
460
  __TS__SetDescriptor(
436
461
  UnitWeapon.prototype,
437
462
  "damageBase",
@@ -636,16 +661,26 @@ local function delayHealthChecksCallback(unit)
636
661
  end
637
662
  end
638
663
  local nextSyncId = 1
639
- 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
640
675
  ____exports.Unit = __TS__Class()
641
676
  local Unit = ____exports.Unit
642
677
  Unit.name = "Unit"
643
678
  __TS__ClassExtends(Unit, Handle)
644
679
  function Unit.prototype.____constructor(self, handle)
645
680
  Handle.prototype.____constructor(self, handle)
646
- local ____nextSyncId_0 = nextSyncId
647
- nextSyncId = ____nextSyncId_0 + 1
648
- self.syncId = ____nextSyncId_0
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
649
684
  self._owner = Player:of(getOwningPlayer(handle))
650
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
651
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -677,6 +712,8 @@ function Unit.prototype.getEvent(self, event, collector)
677
712
  end
678
713
  function Unit.prototype.onDestroy(self)
679
714
  local handle = self.handle
715
+ self[107] = getUnitX(handle)
716
+ self[108] = getUnitY(handle)
680
717
  if not self._owner then
681
718
  self._owner = Player:of(getOwningPlayer(handle))
682
719
  end
@@ -744,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
744
781
  end}
745
782
  end
746
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
747
- local ____combatClassification_1 = combatClassification
748
- 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
749
786
  end
750
787
  function Unit.prototype.addClassification(self, classification)
751
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
752
789
  end
753
790
  function Unit.prototype.removeClassification(self, classification)
754
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
755
792
  end
756
793
  function Unit.prototype.hasClassification(self, classification)
757
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
758
795
  end
759
796
  function Unit.prototype.isVisibleTo(self, player)
760
797
  return isUnitVisible(self.handle, player.handle)
@@ -763,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
763
800
  return isUnitInvisible(self.handle, player.handle)
764
801
  end
765
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
766
- local ____temp_2
803
+ local ____temp_3
767
804
  if type(x) == "number" then
768
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
769
806
  else
770
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
771
808
  end
772
- return ____temp_2
809
+ return ____temp_3
773
810
  end
774
811
  function Unit.prototype.isAllyOf(self, unit)
775
812
  return isUnitAlly(
@@ -787,13 +824,25 @@ function Unit.prototype.playAnimation(self, animation, rarity)
787
824
  if type(animation) == "number" then
788
825
  setUnitAnimationByIndex(self.handle, animation)
789
826
  elseif rarity then
790
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
791
828
  else
792
829
  setUnitAnimation(self.handle, animation)
793
830
  end
794
831
  end
832
+ function Unit.prototype.resetAnimation(self)
833
+ ResetUnitAnimation(self.handle)
834
+ end
795
835
  function Unit.prototype.queueAnimation(self, animation)
796
- 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
797
846
  end
798
847
  function Unit.prototype.delayHealthChecks(self)
799
848
  self[103] = (self[103] or 0) + 1
@@ -806,21 +855,21 @@ function Unit.prototype.isSelected(self, player)
806
855
  return IsUnitSelected(self.handle, player.handle)
807
856
  end
808
857
  function Unit.prototype.explode(self)
809
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
810
859
  killUnit(self.handle)
811
860
  end
812
861
  function Unit.prototype.kill(self)
813
862
  killUnit(self.handle)
814
863
  end
815
864
  function Unit.prototype.revive(self, x, y, doEffect)
816
- local ____ReviveHero_5 = ReviveHero
817
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
818
- local ____doEffect_3 = doEffect
819
- if ____doEffect_3 == nil then
820
- ____doEffect_3 = false
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
821
870
  end
822
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
823
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
824
873
  end
825
874
  function Unit.prototype.healTarget(self, target, amount)
826
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,17 +912,16 @@ function Unit.prototype.itemInSlot(self, slot)
863
912
  return Item:of(unitItemInSlot(self.handle, slot))
864
913
  end
865
914
  function Unit.prototype.addAbility(self, abilityId)
866
- if unitAddAbility(self.handle, abilityId) then
867
- local ability = UnitAbility:of(
868
- checkNotNull(getUnitAbility(self.handle, abilityId)),
869
- abilityId,
870
- self
871
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
872
921
  local abilities = self.abilities
873
922
  abilities[#abilities + 1] = ability
874
- return ability
875
923
  end
876
- return nil
924
+ return ability
877
925
  end
878
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
879
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -888,19 +936,11 @@ function Unit.prototype.hasAbility(self, abilityId)
888
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
889
937
  end
890
938
  function Unit.prototype.getAbilityById(self, abilityId)
891
- local handle = self.handle
892
- if unitAddAbility(handle, abilityId) then
893
- assert(unitRemoveAbility(handle, abilityId))
894
- return nil
895
- end
896
- return UnitAbility:of(
897
- getUnitAbility(self.handle, abilityId),
898
- abilityId,
899
- self
900
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
901
941
  end
902
942
  function Unit.prototype.removeAbility(self, abilityId)
903
- if unitRemoveAbility(self.handle, abilityId) then
943
+ if doUnitAbilityAction(self.handle, abilityId, unitRemoveAbility, abilityId) then
904
944
  local abilities = self.abilities
905
945
  for i = 1, #abilities do
906
946
  if abilities[i].typeId == abilityId then
@@ -925,12 +965,34 @@ end
925
965
  function Unit.prototype.endAbilityCooldown(self, abilityId)
926
966
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
927
967
  end
968
+ function Unit.prototype.interruptMovement(self)
969
+ local handle = self.handle
970
+ unitDisableAbility(
971
+ handle,
972
+ fourCC("Amov"),
973
+ true,
974
+ false
975
+ )
976
+ unitDisableAbility(
977
+ handle,
978
+ fourCC("Amov"),
979
+ false,
980
+ false
981
+ )
982
+ end
928
983
  function Unit.prototype.interruptAttack(self)
929
984
  unitInterruptAttack(self.handle)
930
985
  end
931
986
  function Unit.prototype.interruptCast(self, abilityId)
932
- unitDisableAbility(self.handle, abilityId, true, false)
933
- unitDisableAbility(self.handle, abilityId, false, false)
987
+ local handle = self.handle
988
+ unitDisableAbility(handle, abilityId, true, false)
989
+ Timer:run(
990
+ unitDisableAbility,
991
+ handle,
992
+ abilityId,
993
+ false,
994
+ false
995
+ )
934
996
  end
935
997
  function Unit.prototype.getDistanceTo(self, target)
936
998
  local handle = self.handle
@@ -1191,7 +1253,15 @@ __TS__SetDescriptor(
1191
1253
  Unit.prototype,
1192
1254
  "isIllusion",
1193
1255
  {get = function(self)
1194
- return isUnitIllusion(self.handle)
1256
+ return IsUnitIllusion(self.handle)
1257
+ end},
1258
+ true
1259
+ )
1260
+ __TS__SetDescriptor(
1261
+ Unit.prototype,
1262
+ "isStunned",
1263
+ {get = function(self)
1264
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1195
1265
  end},
1196
1266
  true
1197
1267
  )
@@ -1268,6 +1338,19 @@ __TS__SetDescriptor(
1268
1338
  },
1269
1339
  true
1270
1340
  )
1341
+ __TS__SetDescriptor(
1342
+ Unit.prototype,
1343
+ "primaryAttribute",
1344
+ {
1345
+ get = function(self)
1346
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1347
+ end,
1348
+ set = function(self, primaryAttribute)
1349
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1350
+ end
1351
+ },
1352
+ true
1353
+ )
1271
1354
  __TS__SetDescriptor(
1272
1355
  Unit.prototype,
1273
1356
  "strengthBase",
@@ -1392,14 +1475,14 @@ __TS__SetDescriptor(
1392
1475
  return not self[106]
1393
1476
  end,
1394
1477
  set = function(self, isTeamGlowVisible)
1395
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1396
- local ____temp_6
1478
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1479
+ local ____temp_7
1397
1480
  if not isTeamGlowVisible then
1398
- ____temp_6 = true
1481
+ ____temp_7 = true
1399
1482
  else
1400
- ____temp_6 = nil
1483
+ ____temp_7 = nil
1401
1484
  end
1402
- self[106] = ____temp_6
1485
+ self[106] = ____temp_7
1403
1486
  end
1404
1487
  },
1405
1488
  true
@@ -1408,9 +1491,9 @@ __TS__SetDescriptor(
1408
1491
  Unit.prototype,
1409
1492
  "color",
1410
1493
  {set = function(self, color)
1411
- setUnitColor(self.handle, color.handle)
1494
+ SetUnitColor(self.handle, color.handle)
1412
1495
  if self[106] then
1413
- showUnitTeamGlow(self.handle, false)
1496
+ BlzShowUnitTeamGlow(self.handle, false)
1414
1497
  end
1415
1498
  end},
1416
1499
  true
@@ -1579,7 +1662,7 @@ __TS__SetDescriptor(
1579
1662
  "x",
1580
1663
  {
1581
1664
  get = function(self)
1582
- return getUnitX(self.handle)
1665
+ return self[107] or getUnitX(self.handle)
1583
1666
  end,
1584
1667
  set = function(self, v)
1585
1668
  SetUnitX(self.handle, v)
@@ -1592,7 +1675,7 @@ __TS__SetDescriptor(
1592
1675
  "y",
1593
1676
  {
1594
1677
  get = function(self)
1595
- return getUnitY(self.handle)
1678
+ return self[108] or getUnitY(self.handle)
1596
1679
  end,
1597
1680
  set = function(self, v)
1598
1681
  SetUnitY(self.handle, v)
@@ -1678,10 +1761,10 @@ __TS__SetDescriptor(
1678
1761
  "gold",
1679
1762
  {
1680
1763
  get = function(self)
1681
- return getResourceAmount(self.handle)
1764
+ return GetResourceAmount(self.handle)
1682
1765
  end,
1683
1766
  set = function(self, gold)
1684
- setResourceAmount(self.handle, gold)
1767
+ SetResourceAmount(self.handle, gold)
1685
1768
  end
1686
1769
  },
1687
1770
  true
@@ -1809,6 +1892,19 @@ __TS__SetDescriptor(
1809
1892
  end},
1810
1893
  true
1811
1894
  )
1895
+ __TS__SetDescriptor(
1896
+ Unit.prototype,
1897
+ "movementType",
1898
+ {
1899
+ get = function(self)
1900
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1901
+ end,
1902
+ set = function(self, movementType)
1903
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1904
+ end
1905
+ },
1906
+ true
1907
+ )
1812
1908
  __TS__SetDescriptor(
1813
1909
  Unit.prototype,
1814
1910
  "pathing",
@@ -1990,6 +2086,14 @@ __TS__SetDescriptor(
1990
2086
  end},
1991
2087
  true
1992
2088
  )
2089
+ __TS__SetDescriptor(
2090
+ Unit.prototype,
2091
+ "targetAcquiredEvent",
2092
+ {get = function(self)
2093
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2094
+ end},
2095
+ true
2096
+ )
1993
2097
  __TS__SetDescriptor(
1994
2098
  Unit.prototype,
1995
2099
  "onSelect",
@@ -2125,25 +2229,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2125
2229
  InitializingEvent,
2126
2230
  function(event)
2127
2231
  local function listener(unit, id)
2128
- local ____GetSpellTargetUnit_result_9
2232
+ local ____GetSpellTargetUnit_result_10
2129
2233
  if GetSpellTargetUnit() then
2130
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2234
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2131
2235
  else
2132
- local ____GetSpellTargetItem_result_8
2236
+ local ____GetSpellTargetItem_result_9
2133
2237
  if GetSpellTargetItem() then
2134
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2238
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2135
2239
  else
2136
- local ____GetSpellTargetDestructable_result_7
2240
+ local ____GetSpellTargetDestructable_result_8
2137
2241
  if GetSpellTargetDestructable() then
2138
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2242
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2139
2243
  else
2140
- ____GetSpellTargetDestructable_result_7 = nil
2244
+ ____GetSpellTargetDestructable_result_8 = nil
2141
2245
  end
2142
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2246
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2143
2247
  end
2144
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2248
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2145
2249
  end
2146
- local target = ____GetSpellTargetUnit_result_9
2250
+ local target = ____GetSpellTargetUnit_result_10
2147
2251
  if target then
2148
2252
  invoke(event, unit, id, target)
2149
2253
  end
@@ -2315,10 +2419,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2315
2419
  ____exports.UnitTriggerEvent,
2316
2420
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2317
2421
  function()
2318
- local unit = ____exports.Unit:of(getOrderedUnit())
2319
- local issuedOrderId = getIssuedOrderId()
2320
- if unit ~= nil and unit.state == 1 then
2321
- return unit, issuedOrderId
2422
+ local handle = getOrderedUnit()
2423
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2424
+ local unit = ____exports.Unit:of(handle)
2425
+ if unit.state == 1 then
2426
+ return unit, getIssuedOrderId()
2427
+ end
2322
2428
  end
2323
2429
  return IgnoreEvent
2324
2430
  end
@@ -2349,13 +2455,19 @@ Unit.onDamaging = (function()
2349
2455
  if source and source.typeId == dummyUnitId then
2350
2456
  source = nil
2351
2457
  end
2352
- local target = BlzGetEventDamageTarget()
2458
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2459
+ local metadata = damageMetadataByTarget[target]
2460
+ damageMetadataByTarget[target] = nil
2353
2461
  local data = {
2354
2462
  amount = GetEventDamage(),
2355
- attackType = BlzGetEventAttackType(),
2463
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2356
2464
  damageType = BlzGetEventDamageType(),
2357
2465
  weaponType = BlzGetEventWeaponType(),
2358
- isAttack = BlzGetEventIsAttack()
2466
+ metadata = metadata,
2467
+ isAttack = BlzGetEventIsAttack(),
2468
+ originalAmount = GetEventDamage(),
2469
+ originalMetadata = metadata,
2470
+ preventRetaliation = damagingEventPreventRetaliation
2359
2471
  }
2360
2472
  if data.isAttack and source then
2361
2473
  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
@@ -2369,18 +2481,36 @@ Unit.onDamaging = (function()
2369
2481
  invoke(
2370
2482
  event,
2371
2483
  source,
2372
- ____exports.Unit:of(target),
2484
+ target,
2373
2485
  setmetatable(
2374
2486
  {},
2375
2487
  {
2376
2488
  __index = data,
2377
2489
  __newindex = function(self, key, value)
2378
- damageSetters[key](value)
2490
+ local damageSetter = damageSetters[key]
2491
+ if damageSetter ~= nil then
2492
+ damageSetter(value)
2493
+ end
2379
2494
  data[key] = value
2380
2495
  end
2381
2496
  }
2382
2497
  )
2383
2498
  )
2499
+ if data[0] and source then
2500
+ local sourceOwner = source.owner.handle
2501
+ data[1] = sourceOwner
2502
+ local targetOwner = target.owner.handle
2503
+ data[2] = targetOwner
2504
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2505
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2506
+ data[3] = true
2507
+ end
2508
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2509
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2510
+ data[4] = true
2511
+ end
2512
+ end
2513
+ damagingEventByTarget[target] = data
2384
2514
  return
2385
2515
  end
2386
2516
  BlzSetEventDamage(0)
@@ -2388,7 +2518,7 @@ Unit.onDamaging = (function()
2388
2518
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2389
2519
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2390
2520
  local sourceOwner = source.owner.handle
2391
- local targetOwner = GetOwningPlayer(target)
2521
+ local targetOwner = target.owner.handle
2392
2522
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2393
2523
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2394
2524
  Timer:run(function()
@@ -2404,23 +2534,19 @@ Unit.onDamaging = (function()
2404
2534
  for ____, ____value in ipairs(source._attackHandlers) do
2405
2535
  local condition = ____value[1]
2406
2536
  local action = ____value[2]
2407
- if condition(
2408
- source,
2409
- ____exports.Unit:of(target),
2410
- data
2411
- ) then
2537
+ if condition(source, target, data) then
2412
2538
  action(
2413
2539
  source,
2414
- ____exports.Unit:of(target),
2540
+ target,
2415
2541
  setmetatable(
2416
2542
  {fire = function()
2417
2543
  UnitDamageTarget(
2418
2544
  source.handle,
2419
- target,
2545
+ target.handle,
2420
2546
  data.amount,
2421
2547
  true,
2422
2548
  true,
2423
- data.attackType,
2549
+ attackTypeToNative(data.attackType),
2424
2550
  data.damageType,
2425
2551
  data.weaponType
2426
2552
  )
@@ -2447,26 +2573,50 @@ Unit.onDamage = __TS__New(
2447
2573
  if source and source.typeId == dummyUnitId then
2448
2574
  source = nil
2449
2575
  end
2576
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2577
+ local damagingEvent = damagingEventByTarget[target]
2578
+ damagingEventByTarget[target] = nil
2450
2579
  local data = {
2451
2580
  amount = GetEventDamage(),
2452
- attackType = BlzGetEventAttackType(),
2581
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2453
2582
  damageType = BlzGetEventDamageType(),
2454
2583
  weaponType = BlzGetEventWeaponType(),
2584
+ metadata = damagingEvent and damagingEvent.metadata,
2455
2585
  isAttack = BlzGetEventIsAttack(),
2456
- originalAmount = GetEventDamage(),
2586
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2587
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2457
2588
  preventDeath = damageEventPreventDeath
2458
2589
  }
2590
+ if damagingEvent then
2591
+ for key, value in pairs(damagingEvent) do
2592
+ if isAttribute(key) then
2593
+ data[key] = value
2594
+ end
2595
+ end
2596
+ local sourceOwner = damagingEvent[1]
2597
+ if sourceOwner then
2598
+ local targetOwner = damagingEvent[2]
2599
+ if damagingEvent[3] then
2600
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2601
+ end
2602
+ if damagingEvent[4] then
2603
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2604
+ end
2605
+ end
2606
+ end
2459
2607
  local evData = setmetatable(
2460
2608
  {},
2461
2609
  {
2462
2610
  __index = data,
2463
2611
  __newindex = function(self, key, value)
2464
- damageSetters[key](value)
2612
+ local damageSetter = damageSetters[key]
2613
+ if damageSetter ~= nil then
2614
+ damageSetter(value)
2615
+ end
2465
2616
  data[key] = value
2466
2617
  end
2467
2618
  }
2468
2619
  )
2469
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2470
2620
  invoke(event, source, target, evData)
2471
2621
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2472
2622
  local bonusHealth = math.ceil(evData.amount)
@@ -2509,8 +2659,9 @@ Unit.itemDroppedEvent = __TS__New(
2509
2659
  EVENT_PLAYER_UNIT_DROP_ITEM,
2510
2660
  function()
2511
2661
  local unit = getTriggerUnit()
2512
- if getUnitTypeId(unit) ~= dummyUnitId then
2513
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2662
+ local item = getManipulatedItem()
2663
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2664
+ return ____exports.Unit:of(unit), Item:of(item)
2514
2665
  end
2515
2666
  return IgnoreEvent
2516
2667
  end
@@ -2520,8 +2671,9 @@ Unit.itemPickedUpEvent = __TS__New(
2520
2671
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2521
2672
  function()
2522
2673
  local unit = getTriggerUnit()
2523
- if getUnitTypeId(unit) ~= dummyUnitId then
2524
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2674
+ local item = getManipulatedItem()
2675
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2676
+ return ____exports.Unit:of(unit), Item:of(item)
2525
2677
  end
2526
2678
  return IgnoreEvent
2527
2679
  end
@@ -2529,7 +2681,14 @@ Unit.itemPickedUpEvent = __TS__New(
2529
2681
  Unit.itemUsedEvent = __TS__New(
2530
2682
  ____exports.UnitTriggerEvent,
2531
2683
  EVENT_PLAYER_UNIT_USE_ITEM,
2532
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2684
+ function()
2685
+ local unit = getTriggerUnit()
2686
+ local item = getManipulatedItem()
2687
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2688
+ return ____exports.Unit:of(unit), Item:of(item)
2689
+ end
2690
+ return IgnoreEvent
2691
+ end
2533
2692
  )
2534
2693
  Unit.itemStackedEvent = __TS__New(
2535
2694
  ____exports.UnitTriggerEvent,
@@ -2538,7 +2697,43 @@ Unit.itemStackedEvent = __TS__New(
2538
2697
  )
2539
2698
  __TS__ObjectDefineProperty(
2540
2699
  Unit,
2541
- "itemMovedEvent",
2700
+ "itemChargesChangedEvent",
2701
+ {get = function(self)
2702
+ local event = __TS__New(Event)
2703
+ Item.chargesChangedEvent:addListener(function(item)
2704
+ local unit = item.owner
2705
+ if unit ~= nil then
2706
+ invoke(event, unit, item)
2707
+ end
2708
+ end)
2709
+ rawset(self, "itemChargesChangedEvent", event)
2710
+ return event
2711
+ end}
2712
+ )
2713
+ __TS__ObjectDefineProperty(
2714
+ Unit,
2715
+ "itemUseOrderEvent",
2716
+ {get = function(self)
2717
+ local event = __TS__New(Event)
2718
+ for order = orderId("useslot0"), orderId("useslot5") do
2719
+ local slot = order - orderId("useslot0")
2720
+ local function listener(unit)
2721
+ local item = unit.items[slot + 1]
2722
+ if item ~= nil then
2723
+ invoke(event, unit, item)
2724
+ end
2725
+ end
2726
+ self.onImmediateOrder[order]:addListener(listener)
2727
+ self.onTargetOrder[order]:addListener(listener)
2728
+ self.onPointOrder[order]:addListener(listener)
2729
+ end
2730
+ rawset(self, "itemUseOrderEvent", event)
2731
+ return event
2732
+ end}
2733
+ )
2734
+ __TS__ObjectDefineProperty(
2735
+ Unit,
2736
+ "itemMoveOrderEvent",
2542
2737
  {get = function(self)
2543
2738
  local event = __TS__New(Event)
2544
2739
  for order = orderId("moveslot0"), orderId("moveslot5") do
@@ -2556,7 +2751,7 @@ __TS__ObjectDefineProperty(
2556
2751
  end
2557
2752
  end)
2558
2753
  end
2559
- rawset(self, "itemMovedEvent", event)
2754
+ rawset(self, "itemMoveOrderEvent", event)
2560
2755
  return event
2561
2756
  end}
2562
2757
  )