warscript 0.0.1-dev.858ac09 → 0.0.1-dev.85b1c63

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 (125) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/core/types/effect.d.ts +1 -3
  4. package/core/types/effect.lua +26 -29
  5. package/core/types/frame.lua +10 -12
  6. package/core/types/player.lua +3 -1
  7. package/core/types/playerCamera.d.ts +2 -0
  8. package/core/types/playerCamera.lua +79 -5
  9. package/core/types/sound.d.ts +17 -25
  10. package/core/types/sound.lua +85 -44
  11. package/core/types/timer.d.ts +8 -8
  12. package/core/types/timer.lua +39 -23
  13. package/decl/native.d.ts +844 -788
  14. package/engine/behavior.d.ts +4 -0
  15. package/engine/behavior.lua +84 -27
  16. package/engine/behaviour/ability/apply-buff.lua +1 -1
  17. package/engine/behaviour/ability/damage.d.ts +6 -3
  18. package/engine/behaviour/ability/damage.lua +24 -36
  19. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  20. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  21. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  22. package/engine/behaviour/ability/restore-mana.lua +6 -6
  23. package/engine/behaviour/ability.d.ts +4 -1
  24. package/engine/behaviour/ability.lua +14 -21
  25. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  26. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  27. package/engine/behaviour/unit.d.ts +31 -1
  28. package/engine/behaviour/unit.lua +185 -4
  29. package/engine/buff.d.ts +14 -11
  30. package/engine/buff.lua +130 -114
  31. package/engine/internal/ability.d.ts +7 -1
  32. package/engine/internal/ability.lua +48 -9
  33. package/engine/internal/item/ability.lua +63 -11
  34. package/engine/internal/item+owner.lua +12 -6
  35. package/engine/internal/item.d.ts +5 -2
  36. package/engine/internal/item.lua +85 -10
  37. package/engine/internal/mechanics/ability-duration.lua +1 -1
  38. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  39. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  40. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  41. package/engine/internal/misc/frame-coordinates.lua +21 -0
  42. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  43. package/engine/internal/misc/get-terrain-z.lua +11 -0
  44. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  45. package/engine/internal/misc/player-local-handle.lua +5 -0
  46. package/engine/internal/unit/ability.d.ts +35 -0
  47. package/engine/internal/unit/ability.lua +62 -0
  48. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  49. package/engine/internal/unit/allowed-targets.lua +9 -1
  50. package/engine/internal/unit/order.d.ts +20 -0
  51. package/engine/internal/unit/order.lua +136 -0
  52. package/engine/internal/unit+ability.lua +10 -1
  53. package/engine/internal/unit+damage.d.ts +2 -11
  54. package/engine/internal/unit+damage.lua +10 -14
  55. package/engine/internal/unit+spellSteal.lua +1 -2
  56. package/engine/internal/unit-missile-launch.lua +9 -2
  57. package/engine/internal/unit.d.ts +24 -7
  58. package/engine/internal/unit.lua +247 -107
  59. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  60. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  61. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  62. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  63. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  64. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  65. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  66. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  67. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  68. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  69. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  70. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  71. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  72. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  73. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  74. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  75. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  76. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  77. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  78. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  79. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  80. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  81. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  82. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  83. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  84. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  85. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  86. package/engine/object-data/entry/ability-type/web.lua +52 -0
  87. package/engine/object-data/entry/ability-type.d.ts +11 -11
  88. package/engine/object-data/entry/ability-type.lua +32 -13
  89. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  90. package/engine/object-data/entry/buff-type.d.ts +5 -11
  91. package/engine/object-data/entry/buff-type.lua +11 -27
  92. package/engine/object-data/entry/sound-preset.d.ts +17 -0
  93. package/engine/object-data/entry/sound-preset.lua +104 -0
  94. package/engine/object-data/entry/unit-type.d.ts +13 -4
  95. package/engine/object-data/entry/unit-type.lua +153 -85
  96. package/engine/object-field/ability.d.ts +4 -4
  97. package/engine/object-field/ability.lua +7 -6
  98. package/engine/object-field/unit.d.ts +57 -3
  99. package/engine/object-field/unit.lua +207 -7
  100. package/engine/object-field.d.ts +17 -6
  101. package/engine/object-field.lua +188 -92
  102. package/engine/standard/entries/buff-type.d.ts +3 -0
  103. package/engine/standard/entries/buff-type.lua +3 -0
  104. package/engine/standard/fields/unit.d.ts +4 -0
  105. package/engine/standard/fields/unit.lua +7 -0
  106. package/engine/text-tag.d.ts +36 -2
  107. package/engine/text-tag.lua +249 -10
  108. package/engine/unit.d.ts +1 -0
  109. package/engine/unit.lua +1 -0
  110. package/objutil/buff.lua +1 -2
  111. package/package.json +2 -2
  112. package/utility/arrays.d.ts +1 -0
  113. package/utility/arrays.lua +3 -0
  114. package/utility/callback-array.d.ts +13 -0
  115. package/utility/callback-array.lua +46 -0
  116. package/utility/functions.d.ts +8 -0
  117. package/utility/functions.lua +13 -0
  118. package/utility/linked-set.d.ts +1 -0
  119. package/utility/linked-set.lua +3 -0
  120. package/utility/lua-maps.d.ts +4 -0
  121. package/utility/lua-maps.lua +20 -0
  122. package/utility/lua-sets.d.ts +2 -0
  123. package/utility/lua-sets.lua +7 -0
  124. package/core/types/order.d.ts +0 -25
  125. package/core/types/order.lua +0 -55
@@ -53,13 +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 resetUnitAnimation = ResetUnitAnimation
62
- local queueUnitAnimation = QueueUnitAnimation
63
69
  local getUnitIntegerField = BlzGetUnitIntegerField
64
70
  local getUnitRealField = BlzGetUnitRealField
65
71
  local getHeroStr = GetHeroStr
@@ -81,7 +87,6 @@ local getHandleId = GetHandleId
81
87
  local getUnitCurrentOrder = GetUnitCurrentOrder
82
88
  local createUnit = CreateUnit
83
89
  local killUnit = KillUnit
84
- local setUnitExploded = SetUnitExploded
85
90
  local removeUnit = RemoveUnit
86
91
  local getUnitTypeId = GetUnitTypeId
87
92
  local isHeroUnitId = IsHeroUnitId
@@ -97,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
97
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
98
103
  local isUnitInRangeXY = IsUnitInRangeXY
99
104
  local isUnitInRange = IsUnitInRange
100
- local setResourceAmount = SetResourceAmount
101
- local getResourceAmount = GetResourceAmount
102
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
103
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
104
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -122,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
122
125
  local getIssuedOrderId = GetIssuedOrderId
123
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
124
127
  local unitAlive = UnitAlive
125
- local unitAddType = UnitAddType
126
- local unitRemoveType = UnitRemoveType
127
- local isUnitIllusion = IsUnitIllusion
128
- local isUnitType = IsUnitType
129
128
  local isUnitAlly = IsUnitAlly
130
129
  local isUnitEnemy = IsUnitEnemy
131
130
  local getOwningPlayer = GetOwningPlayer
132
- local setUnitColor = SetUnitColor
133
- local showUnitTeamGlow = BlzShowUnitTeamGlow
134
131
  ____exports.UnitClassification = {}
135
132
  local UnitClassification = ____exports.UnitClassification
136
133
  do
@@ -140,6 +137,7 @@ do
140
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
141
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
142
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
143
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
144
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
145
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -347,6 +345,9 @@ local function dispatchAbility(event)
347
345
  }
348
346
  )
349
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
350
351
  local function damageEventPreventDeath(self, callback, ...)
351
352
  if self[0] ~= nil then
352
353
  return
@@ -358,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
358
359
  rawset(self, 1 + i, (select(i, ...)))
359
360
  end
360
361
  end
361
- 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
+ }
362
370
  local jlimitopByOperator = {
363
371
  [0] = LESS_THAN_OR_EQUAL,
364
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -436,6 +444,19 @@ __TS__SetDescriptor(
436
444
  },
437
445
  true
438
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
+ )
439
460
  __TS__SetDescriptor(
440
461
  UnitWeapon.prototype,
441
462
  "damageBase",
@@ -640,16 +661,26 @@ local function delayHealthChecksCallback(unit)
640
661
  end
641
662
  end
642
663
  local nextSyncId = 1
643
- 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
644
675
  ____exports.Unit = __TS__Class()
645
676
  local Unit = ____exports.Unit
646
677
  Unit.name = "Unit"
647
678
  __TS__ClassExtends(Unit, Handle)
648
679
  function Unit.prototype.____constructor(self, handle)
649
680
  Handle.prototype.____constructor(self, handle)
650
- local ____nextSyncId_0 = nextSyncId
651
- nextSyncId = ____nextSyncId_0 + 1
652
- self.syncId = ____nextSyncId_0
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
653
684
  self._owner = Player:of(getOwningPlayer(handle))
654
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
655
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -750,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
750
781
  end}
751
782
  end
752
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
753
- local ____combatClassification_1 = combatClassification
754
- 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
755
786
  end
756
787
  function Unit.prototype.addClassification(self, classification)
757
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
758
789
  end
759
790
  function Unit.prototype.removeClassification(self, classification)
760
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
761
792
  end
762
793
  function Unit.prototype.hasClassification(self, classification)
763
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
764
795
  end
765
796
  function Unit.prototype.isVisibleTo(self, player)
766
797
  return isUnitVisible(self.handle, player.handle)
@@ -769,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
769
800
  return isUnitInvisible(self.handle, player.handle)
770
801
  end
771
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
772
- local ____temp_2
803
+ local ____temp_3
773
804
  if type(x) == "number" then
774
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
775
806
  else
776
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
777
808
  end
778
- return ____temp_2
809
+ return ____temp_3
779
810
  end
780
811
  function Unit.prototype.isAllyOf(self, unit)
781
812
  return isUnitAlly(
@@ -793,16 +824,25 @@ function Unit.prototype.playAnimation(self, animation, rarity)
793
824
  if type(animation) == "number" then
794
825
  setUnitAnimationByIndex(self.handle, animation)
795
826
  elseif rarity then
796
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
797
828
  else
798
829
  setUnitAnimation(self.handle, animation)
799
830
  end
800
831
  end
801
832
  function Unit.prototype.resetAnimation(self)
802
- resetUnitAnimation(self.handle)
833
+ ResetUnitAnimation(self.handle)
803
834
  end
804
835
  function Unit.prototype.queueAnimation(self, animation)
805
- 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
806
846
  end
807
847
  function Unit.prototype.delayHealthChecks(self)
808
848
  self[103] = (self[103] or 0) + 1
@@ -815,21 +855,21 @@ function Unit.prototype.isSelected(self, player)
815
855
  return IsUnitSelected(self.handle, player.handle)
816
856
  end
817
857
  function Unit.prototype.explode(self)
818
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
819
859
  killUnit(self.handle)
820
860
  end
821
861
  function Unit.prototype.kill(self)
822
862
  killUnit(self.handle)
823
863
  end
824
864
  function Unit.prototype.revive(self, x, y, doEffect)
825
- local ____ReviveHero_5 = ReviveHero
826
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
827
- local ____doEffect_3 = doEffect
828
- if ____doEffect_3 == nil then
829
- ____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
830
870
  end
831
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
832
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
833
873
  end
834
874
  function Unit.prototype.healTarget(self, target, amount)
835
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -872,17 +912,16 @@ function Unit.prototype.itemInSlot(self, slot)
872
912
  return Item:of(unitItemInSlot(self.handle, slot))
873
913
  end
874
914
  function Unit.prototype.addAbility(self, abilityId)
875
- if unitAddAbility(self.handle, abilityId) then
876
- local ability = UnitAbility:of(
877
- checkNotNull(getUnitAbility(self.handle, abilityId)),
878
- abilityId,
879
- self
880
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
881
921
  local abilities = self.abilities
882
922
  abilities[#abilities + 1] = ability
883
- return ability
884
923
  end
885
- return nil
924
+ return ability
886
925
  end
887
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
888
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -897,28 +936,17 @@ function Unit.prototype.hasAbility(self, abilityId)
897
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
898
937
  end
899
938
  function Unit.prototype.getAbilityById(self, abilityId)
900
- local handle = self.handle
901
- if unitAddAbility(handle, abilityId) then
902
- assert(unitRemoveAbility(handle, abilityId))
903
- return nil
904
- end
905
- return UnitAbility:of(
906
- getUnitAbility(self.handle, abilityId),
907
- abilityId,
908
- self
909
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
910
941
  end
911
942
  function Unit.prototype.removeAbility(self, abilityId)
912
- if unitRemoveAbility(self.handle, abilityId) then
913
- local abilities = self.abilities
914
- for i = 1, #abilities do
915
- if abilities[i].typeId == abilityId then
916
- abilities[i]:destroy()
917
- tremove(abilities, i)
918
- return true
919
- 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
920
949
  end
921
- return true
922
950
  end
923
951
  return false
924
952
  end
@@ -934,6 +962,21 @@ end
934
962
  function Unit.prototype.endAbilityCooldown(self, abilityId)
935
963
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
936
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
937
980
  function Unit.prototype.interruptAttack(self)
938
981
  unitInterruptAttack(self.handle)
939
982
  end
@@ -1207,7 +1250,7 @@ __TS__SetDescriptor(
1207
1250
  Unit.prototype,
1208
1251
  "isIllusion",
1209
1252
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1253
+ return IsUnitIllusion(self.handle)
1211
1254
  end},
1212
1255
  true
1213
1256
  )
@@ -1292,6 +1335,19 @@ __TS__SetDescriptor(
1292
1335
  },
1293
1336
  true
1294
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
+ )
1295
1351
  __TS__SetDescriptor(
1296
1352
  Unit.prototype,
1297
1353
  "strengthBase",
@@ -1416,14 +1472,14 @@ __TS__SetDescriptor(
1416
1472
  return not self[106]
1417
1473
  end,
1418
1474
  set = function(self, isTeamGlowVisible)
1419
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1420
- local ____temp_6
1475
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1476
+ local ____temp_7
1421
1477
  if not isTeamGlowVisible then
1422
- ____temp_6 = true
1478
+ ____temp_7 = true
1423
1479
  else
1424
- ____temp_6 = nil
1480
+ ____temp_7 = nil
1425
1481
  end
1426
- self[106] = ____temp_6
1482
+ self[106] = ____temp_7
1427
1483
  end
1428
1484
  },
1429
1485
  true
@@ -1432,9 +1488,9 @@ __TS__SetDescriptor(
1432
1488
  Unit.prototype,
1433
1489
  "color",
1434
1490
  {set = function(self, color)
1435
- setUnitColor(self.handle, color.handle)
1491
+ SetUnitColor(self.handle, color.handle)
1436
1492
  if self[106] then
1437
- showUnitTeamGlow(self.handle, false)
1493
+ BlzShowUnitTeamGlow(self.handle, false)
1438
1494
  end
1439
1495
  end},
1440
1496
  true
@@ -1702,10 +1758,10 @@ __TS__SetDescriptor(
1702
1758
  "gold",
1703
1759
  {
1704
1760
  get = function(self)
1705
- return getResourceAmount(self.handle)
1761
+ return GetResourceAmount(self.handle)
1706
1762
  end,
1707
1763
  set = function(self, gold)
1708
- setResourceAmount(self.handle, gold)
1764
+ SetResourceAmount(self.handle, gold)
1709
1765
  end
1710
1766
  },
1711
1767
  true
@@ -1833,6 +1889,19 @@ __TS__SetDescriptor(
1833
1889
  end},
1834
1890
  true
1835
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
+ )
1836
1905
  __TS__SetDescriptor(
1837
1906
  Unit.prototype,
1838
1907
  "pathing",
@@ -2014,6 +2083,14 @@ __TS__SetDescriptor(
2014
2083
  end},
2015
2084
  true
2016
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
+ )
2017
2094
  __TS__SetDescriptor(
2018
2095
  Unit.prototype,
2019
2096
  "onSelect",
@@ -2149,25 +2226,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2149
2226
  InitializingEvent,
2150
2227
  function(event)
2151
2228
  local function listener(unit, id)
2152
- local ____GetSpellTargetUnit_result_9
2229
+ local ____GetSpellTargetUnit_result_10
2153
2230
  if GetSpellTargetUnit() then
2154
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2231
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2155
2232
  else
2156
- local ____GetSpellTargetItem_result_8
2233
+ local ____GetSpellTargetItem_result_9
2157
2234
  if GetSpellTargetItem() then
2158
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2235
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2159
2236
  else
2160
- local ____GetSpellTargetDestructable_result_7
2237
+ local ____GetSpellTargetDestructable_result_8
2161
2238
  if GetSpellTargetDestructable() then
2162
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2239
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2163
2240
  else
2164
- ____GetSpellTargetDestructable_result_7 = nil
2241
+ ____GetSpellTargetDestructable_result_8 = nil
2165
2242
  end
2166
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2243
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2167
2244
  end
2168
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2245
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2169
2246
  end
2170
- local target = ____GetSpellTargetUnit_result_9
2247
+ local target = ____GetSpellTargetUnit_result_10
2171
2248
  if target then
2172
2249
  invoke(event, unit, id, target)
2173
2250
  end
@@ -2375,13 +2452,19 @@ Unit.onDamaging = (function()
2375
2452
  if source and source.typeId == dummyUnitId then
2376
2453
  source = nil
2377
2454
  end
2378
- local target = BlzGetEventDamageTarget()
2455
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2456
+ local metadata = damageMetadataByTarget[target]
2457
+ damageMetadataByTarget[target] = nil
2379
2458
  local data = {
2380
2459
  amount = GetEventDamage(),
2381
- attackType = BlzGetEventAttackType(),
2460
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2382
2461
  damageType = BlzGetEventDamageType(),
2383
2462
  weaponType = BlzGetEventWeaponType(),
2384
- isAttack = BlzGetEventIsAttack()
2463
+ metadata = metadata,
2464
+ isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2466
+ originalMetadata = metadata,
2467
+ preventRetaliation = damagingEventPreventRetaliation
2385
2468
  }
2386
2469
  if data.isAttack and source then
2387
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
@@ -2395,18 +2478,36 @@ Unit.onDamaging = (function()
2395
2478
  invoke(
2396
2479
  event,
2397
2480
  source,
2398
- ____exports.Unit:of(target),
2481
+ target,
2399
2482
  setmetatable(
2400
2483
  {},
2401
2484
  {
2402
2485
  __index = data,
2403
2486
  __newindex = function(self, key, value)
2404
- damageSetters[key](value)
2487
+ local damageSetter = damageSetters[key]
2488
+ if damageSetter ~= nil then
2489
+ damageSetter(value)
2490
+ end
2405
2491
  data[key] = value
2406
2492
  end
2407
2493
  }
2408
2494
  )
2409
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
2410
2511
  return
2411
2512
  end
2412
2513
  BlzSetEventDamage(0)
@@ -2414,7 +2515,7 @@ Unit.onDamaging = (function()
2414
2515
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2415
2516
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2416
2517
  local sourceOwner = source.owner.handle
2417
- local targetOwner = GetOwningPlayer(target)
2518
+ local targetOwner = target.owner.handle
2418
2519
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2419
2520
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2420
2521
  Timer:run(function()
@@ -2430,23 +2531,19 @@ Unit.onDamaging = (function()
2430
2531
  for ____, ____value in ipairs(source._attackHandlers) do
2431
2532
  local condition = ____value[1]
2432
2533
  local action = ____value[2]
2433
- if condition(
2434
- source,
2435
- ____exports.Unit:of(target),
2436
- data
2437
- ) then
2534
+ if condition(source, target, data) then
2438
2535
  action(
2439
2536
  source,
2440
- ____exports.Unit:of(target),
2537
+ target,
2441
2538
  setmetatable(
2442
2539
  {fire = function()
2443
2540
  UnitDamageTarget(
2444
2541
  source.handle,
2445
- target,
2542
+ target.handle,
2446
2543
  data.amount,
2447
2544
  true,
2448
2545
  true,
2449
- data.attackType,
2546
+ attackTypeToNative(data.attackType),
2450
2547
  data.damageType,
2451
2548
  data.weaponType
2452
2549
  )
@@ -2473,26 +2570,50 @@ Unit.onDamage = __TS__New(
2473
2570
  if source and source.typeId == dummyUnitId then
2474
2571
  source = nil
2475
2572
  end
2573
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2574
+ local damagingEvent = damagingEventByTarget[target]
2575
+ damagingEventByTarget[target] = nil
2476
2576
  local data = {
2477
2577
  amount = GetEventDamage(),
2478
- attackType = BlzGetEventAttackType(),
2578
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2479
2579
  damageType = BlzGetEventDamageType(),
2480
2580
  weaponType = BlzGetEventWeaponType(),
2581
+ metadata = damagingEvent and damagingEvent.metadata,
2481
2582
  isAttack = BlzGetEventIsAttack(),
2482
- originalAmount = GetEventDamage(),
2583
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2584
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2483
2585
  preventDeath = damageEventPreventDeath
2484
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
2485
2604
  local evData = setmetatable(
2486
2605
  {},
2487
2606
  {
2488
2607
  __index = data,
2489
2608
  __newindex = function(self, key, value)
2490
- damageSetters[key](value)
2609
+ local damageSetter = damageSetters[key]
2610
+ if damageSetter ~= nil then
2611
+ damageSetter(value)
2612
+ end
2491
2613
  data[key] = value
2492
2614
  end
2493
2615
  }
2494
2616
  )
2495
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2496
2617
  invoke(event, source, target, evData)
2497
2618
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2498
2619
  local bonusHealth = math.ceil(evData.amount)
@@ -2546,10 +2667,14 @@ Unit.itemPickedUpEvent = __TS__New(
2546
2667
  ____exports.UnitTriggerEvent,
2547
2668
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2548
2669
  function()
2549
- local unit = getTriggerUnit()
2550
- local item = getManipulatedItem()
2551
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2552
- 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
2553
2678
  end
2554
2679
  return IgnoreEvent
2555
2680
  end
@@ -2569,7 +2694,22 @@ Unit.itemUsedEvent = __TS__New(
2569
2694
  Unit.itemStackedEvent = __TS__New(
2570
2695
  ____exports.UnitTriggerEvent,
2571
2696
  EVENT_PLAYER_UNIT_STACK_ITEM,
2572
- 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}
2573
2713
  )
2574
2714
  __TS__ObjectDefineProperty(
2575
2715
  Unit,
@@ -0,0 +1,11 @@
1
+ /** @noSelfInFile */
2
+ export declare const enum ArmorType {
3
+ LIGHT = 0,
4
+ MEDIUM = 1,
5
+ HEAVY = 2,
6
+ FORTIFIED = 3,
7
+ NORMAL = 4,
8
+ HERO = 5,
9
+ DIVINE = 6,
10
+ UNARMORED = 7
11
+ }