warscript 0.0.1-dev.9ee7706 → 0.0.1-dev.9f30788

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 (117) 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 +24 -21
  6. package/core/types/player.lua +3 -1
  7. package/core/types/playerCamera.d.ts +2 -0
  8. package/core/types/playerCamera.lua +123 -5
  9. package/core/types/sound.lua +5 -0
  10. package/core/types/tileCell.d.ts +9 -0
  11. package/core/types/tileCell.lua +92 -0
  12. package/core/types/timer.d.ts +9 -8
  13. package/core/types/timer.lua +45 -23
  14. package/decl/native.d.ts +846 -790
  15. package/engine/behavior.d.ts +5 -0
  16. package/engine/behavior.lua +106 -27
  17. package/engine/behaviour/ability/apply-buff.lua +1 -1
  18. package/engine/behaviour/ability/damage.d.ts +6 -3
  19. package/engine/behaviour/ability/damage.lua +24 -36
  20. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  21. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  22. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  23. package/engine/behaviour/ability/restore-mana.lua +6 -6
  24. package/engine/behaviour/ability.d.ts +4 -1
  25. package/engine/behaviour/ability.lua +14 -21
  26. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  27. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  28. package/engine/behaviour/unit.d.ts +33 -1
  29. package/engine/behaviour/unit.lua +190 -4
  30. package/engine/buff.d.ts +2 -4
  31. package/engine/buff.lua +68 -83
  32. package/engine/internal/ability.d.ts +7 -1
  33. package/engine/internal/ability.lua +49 -9
  34. package/engine/internal/item/ability.lua +63 -11
  35. package/engine/internal/item+owner.lua +12 -6
  36. package/engine/internal/item.d.ts +18 -17
  37. package/engine/internal/item.lua +135 -49
  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 +98 -9
  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 +45 -8
  57. package/engine/internal/unit.d.ts +26 -9
  58. package/engine/internal/unit.lua +251 -110
  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/unit-attribute.d.ts +6 -0
  68. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  69. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  70. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  71. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  72. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  73. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  74. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  75. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  76. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  77. package/engine/object-data/entry/ability-type.d.ts +11 -11
  78. package/engine/object-data/entry/ability-type.lua +31 -9
  79. package/engine/object-data/entry/buff-type/applicable.lua +5 -0
  80. package/engine/object-data/entry/buff-type.d.ts +5 -11
  81. package/engine/object-data/entry/buff-type.lua +11 -27
  82. package/engine/object-data/entry/unit-type.d.ts +13 -4
  83. package/engine/object-data/entry/unit-type.lua +153 -85
  84. package/engine/object-field/ability.d.ts +4 -4
  85. package/engine/object-field/ability.lua +7 -6
  86. package/engine/object-field/unit.d.ts +57 -3
  87. package/engine/object-field/unit.lua +207 -7
  88. package/engine/object-field.d.ts +17 -6
  89. package/engine/object-field.lua +188 -92
  90. package/engine/random.d.ts +9 -0
  91. package/engine/random.lua +13 -0
  92. package/engine/standard/entries/buff-type.d.ts +3 -0
  93. package/engine/standard/entries/buff-type.lua +3 -0
  94. package/engine/standard/fields/unit.d.ts +4 -0
  95. package/engine/standard/fields/unit.lua +7 -0
  96. package/engine/text-tag.d.ts +36 -2
  97. package/engine/text-tag.lua +249 -10
  98. package/engine/unit.d.ts +1 -0
  99. package/engine/unit.lua +1 -0
  100. package/objutil/buff.lua +2 -3
  101. package/package.json +2 -2
  102. package/patch-lualib.lua +1 -1
  103. package/utility/arrays.d.ts +2 -0
  104. package/utility/arrays.lua +11 -0
  105. package/utility/callback-array.d.ts +17 -0
  106. package/utility/callback-array.lua +61 -0
  107. package/utility/functions.d.ts +8 -0
  108. package/utility/functions.lua +13 -0
  109. package/utility/linked-set.d.ts +1 -0
  110. package/utility/linked-set.lua +3 -0
  111. package/utility/lua-maps.d.ts +15 -2
  112. package/utility/lua-maps.lua +53 -2
  113. package/utility/lua-sets.d.ts +2 -0
  114. package/utility/lua-sets.lua +7 -0
  115. package/utility/types.d.ts +3 -0
  116. package/core/types/order.d.ts +0 -25
  117. 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)
@@ -896,31 +935,21 @@ end
896
935
  function Unit.prototype.hasAbility(self, abilityId)
897
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
898
937
  end
899
- 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
- )
938
+ function Unit.prototype.getAbility(self, abilityId)
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
910
941
  end
911
- 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
942
+ function Unit.prototype.removeAbility(self, abilityTypeId)
943
+ local abilities = self.abilities
944
+ for i = 1, #abilities do
945
+ if abilities[i].typeId == abilityTypeId then
946
+ local ability = abilities[i]
947
+ tremove(abilities, i)
948
+ ability:destroy()
949
+ return true
920
950
  end
921
- return true
922
951
  end
923
- return false
952
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
924
953
  end
925
954
  function Unit.prototype.hideAbility(self, abilityId, flag)
926
955
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -934,6 +963,21 @@ end
934
963
  function Unit.prototype.endAbilityCooldown(self, abilityId)
935
964
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
936
965
  end
966
+ function Unit.prototype.interruptMovement(self)
967
+ local handle = self.handle
968
+ unitDisableAbility(
969
+ handle,
970
+ fourCC("Amov"),
971
+ true,
972
+ false
973
+ )
974
+ unitDisableAbility(
975
+ handle,
976
+ fourCC("Amov"),
977
+ false,
978
+ false
979
+ )
980
+ end
937
981
  function Unit.prototype.interruptAttack(self)
938
982
  unitInterruptAttack(self.handle)
939
983
  end
@@ -1207,7 +1251,7 @@ __TS__SetDescriptor(
1207
1251
  Unit.prototype,
1208
1252
  "isIllusion",
1209
1253
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1254
+ return IsUnitIllusion(self.handle)
1211
1255
  end},
1212
1256
  true
1213
1257
  )
@@ -1292,6 +1336,19 @@ __TS__SetDescriptor(
1292
1336
  },
1293
1337
  true
1294
1338
  )
1339
+ __TS__SetDescriptor(
1340
+ Unit.prototype,
1341
+ "primaryAttribute",
1342
+ {
1343
+ get = function(self)
1344
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1345
+ end,
1346
+ set = function(self, primaryAttribute)
1347
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1348
+ end
1349
+ },
1350
+ true
1351
+ )
1295
1352
  __TS__SetDescriptor(
1296
1353
  Unit.prototype,
1297
1354
  "strengthBase",
@@ -1416,14 +1473,14 @@ __TS__SetDescriptor(
1416
1473
  return not self[106]
1417
1474
  end,
1418
1475
  set = function(self, isTeamGlowVisible)
1419
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1420
- local ____temp_6
1476
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1477
+ local ____temp_7
1421
1478
  if not isTeamGlowVisible then
1422
- ____temp_6 = true
1479
+ ____temp_7 = true
1423
1480
  else
1424
- ____temp_6 = nil
1481
+ ____temp_7 = nil
1425
1482
  end
1426
- self[106] = ____temp_6
1483
+ self[106] = ____temp_7
1427
1484
  end
1428
1485
  },
1429
1486
  true
@@ -1432,9 +1489,9 @@ __TS__SetDescriptor(
1432
1489
  Unit.prototype,
1433
1490
  "color",
1434
1491
  {set = function(self, color)
1435
- setUnitColor(self.handle, color.handle)
1492
+ SetUnitColor(self.handle, color.handle)
1436
1493
  if self[106] then
1437
- showUnitTeamGlow(self.handle, false)
1494
+ BlzShowUnitTeamGlow(self.handle, false)
1438
1495
  end
1439
1496
  end},
1440
1497
  true
@@ -1702,10 +1759,10 @@ __TS__SetDescriptor(
1702
1759
  "gold",
1703
1760
  {
1704
1761
  get = function(self)
1705
- return getResourceAmount(self.handle)
1762
+ return GetResourceAmount(self.handle)
1706
1763
  end,
1707
1764
  set = function(self, gold)
1708
- setResourceAmount(self.handle, gold)
1765
+ SetResourceAmount(self.handle, gold)
1709
1766
  end
1710
1767
  },
1711
1768
  true
@@ -1833,6 +1890,19 @@ __TS__SetDescriptor(
1833
1890
  end},
1834
1891
  true
1835
1892
  )
1893
+ __TS__SetDescriptor(
1894
+ Unit.prototype,
1895
+ "movementType",
1896
+ {
1897
+ get = function(self)
1898
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1899
+ end,
1900
+ set = function(self, movementType)
1901
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1902
+ end
1903
+ },
1904
+ true
1905
+ )
1836
1906
  __TS__SetDescriptor(
1837
1907
  Unit.prototype,
1838
1908
  "pathing",
@@ -2014,6 +2084,14 @@ __TS__SetDescriptor(
2014
2084
  end},
2015
2085
  true
2016
2086
  )
2087
+ __TS__SetDescriptor(
2088
+ Unit.prototype,
2089
+ "targetAcquiredEvent",
2090
+ {get = function(self)
2091
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2092
+ end},
2093
+ true
2094
+ )
2017
2095
  __TS__SetDescriptor(
2018
2096
  Unit.prototype,
2019
2097
  "onSelect",
@@ -2149,25 +2227,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2149
2227
  InitializingEvent,
2150
2228
  function(event)
2151
2229
  local function listener(unit, id)
2152
- local ____GetSpellTargetUnit_result_9
2230
+ local ____GetSpellTargetUnit_result_10
2153
2231
  if GetSpellTargetUnit() then
2154
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2232
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2155
2233
  else
2156
- local ____GetSpellTargetItem_result_8
2234
+ local ____GetSpellTargetItem_result_9
2157
2235
  if GetSpellTargetItem() then
2158
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2236
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2159
2237
  else
2160
- local ____GetSpellTargetDestructable_result_7
2238
+ local ____GetSpellTargetDestructable_result_8
2161
2239
  if GetSpellTargetDestructable() then
2162
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2240
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2163
2241
  else
2164
- ____GetSpellTargetDestructable_result_7 = nil
2242
+ ____GetSpellTargetDestructable_result_8 = nil
2165
2243
  end
2166
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2244
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2167
2245
  end
2168
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2246
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2169
2247
  end
2170
- local target = ____GetSpellTargetUnit_result_9
2248
+ local target = ____GetSpellTargetUnit_result_10
2171
2249
  if target then
2172
2250
  invoke(event, unit, id, target)
2173
2251
  end
@@ -2375,13 +2453,19 @@ Unit.onDamaging = (function()
2375
2453
  if source and source.typeId == dummyUnitId then
2376
2454
  source = nil
2377
2455
  end
2378
- local target = BlzGetEventDamageTarget()
2456
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2457
+ local metadata = damageMetadataByTarget[target]
2458
+ damageMetadataByTarget[target] = nil
2379
2459
  local data = {
2380
2460
  amount = GetEventDamage(),
2381
- attackType = BlzGetEventAttackType(),
2461
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2382
2462
  damageType = BlzGetEventDamageType(),
2383
2463
  weaponType = BlzGetEventWeaponType(),
2384
- isAttack = BlzGetEventIsAttack()
2464
+ metadata = metadata,
2465
+ isAttack = BlzGetEventIsAttack(),
2466
+ originalAmount = GetEventDamage(),
2467
+ originalMetadata = metadata,
2468
+ preventRetaliation = damagingEventPreventRetaliation
2385
2469
  }
2386
2470
  if data.isAttack and source then
2387
2471
  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 +2479,36 @@ Unit.onDamaging = (function()
2395
2479
  invoke(
2396
2480
  event,
2397
2481
  source,
2398
- ____exports.Unit:of(target),
2482
+ target,
2399
2483
  setmetatable(
2400
2484
  {},
2401
2485
  {
2402
2486
  __index = data,
2403
2487
  __newindex = function(self, key, value)
2404
- damageSetters[key](value)
2488
+ local damageSetter = damageSetters[key]
2489
+ if damageSetter ~= nil then
2490
+ damageSetter(value)
2491
+ end
2405
2492
  data[key] = value
2406
2493
  end
2407
2494
  }
2408
2495
  )
2409
2496
  )
2497
+ if data[0] and source then
2498
+ local sourceOwner = source.owner.handle
2499
+ data[1] = sourceOwner
2500
+ local targetOwner = target.owner.handle
2501
+ data[2] = targetOwner
2502
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2503
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2504
+ data[3] = true
2505
+ end
2506
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2507
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2508
+ data[4] = true
2509
+ end
2510
+ end
2511
+ damagingEventByTarget[target] = data
2410
2512
  return
2411
2513
  end
2412
2514
  BlzSetEventDamage(0)
@@ -2414,7 +2516,7 @@ Unit.onDamaging = (function()
2414
2516
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2415
2517
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2416
2518
  local sourceOwner = source.owner.handle
2417
- local targetOwner = GetOwningPlayer(target)
2519
+ local targetOwner = target.owner.handle
2418
2520
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2419
2521
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2420
2522
  Timer:run(function()
@@ -2430,23 +2532,19 @@ Unit.onDamaging = (function()
2430
2532
  for ____, ____value in ipairs(source._attackHandlers) do
2431
2533
  local condition = ____value[1]
2432
2534
  local action = ____value[2]
2433
- if condition(
2434
- source,
2435
- ____exports.Unit:of(target),
2436
- data
2437
- ) then
2535
+ if condition(source, target, data) then
2438
2536
  action(
2439
2537
  source,
2440
- ____exports.Unit:of(target),
2538
+ target,
2441
2539
  setmetatable(
2442
2540
  {fire = function()
2443
2541
  UnitDamageTarget(
2444
2542
  source.handle,
2445
- target,
2543
+ target.handle,
2446
2544
  data.amount,
2447
2545
  true,
2448
2546
  true,
2449
- data.attackType,
2547
+ attackTypeToNative(data.attackType),
2450
2548
  data.damageType,
2451
2549
  data.weaponType
2452
2550
  )
@@ -2473,26 +2571,50 @@ Unit.onDamage = __TS__New(
2473
2571
  if source and source.typeId == dummyUnitId then
2474
2572
  source = nil
2475
2573
  end
2574
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2575
+ local damagingEvent = damagingEventByTarget[target]
2576
+ damagingEventByTarget[target] = nil
2476
2577
  local data = {
2477
2578
  amount = GetEventDamage(),
2478
- attackType = BlzGetEventAttackType(),
2579
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2479
2580
  damageType = BlzGetEventDamageType(),
2480
2581
  weaponType = BlzGetEventWeaponType(),
2582
+ metadata = damagingEvent and damagingEvent.metadata,
2481
2583
  isAttack = BlzGetEventIsAttack(),
2482
- originalAmount = GetEventDamage(),
2584
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2585
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2483
2586
  preventDeath = damageEventPreventDeath
2484
2587
  }
2588
+ if damagingEvent then
2589
+ for key, value in pairs(damagingEvent) do
2590
+ if isAttribute(key) then
2591
+ data[key] = value
2592
+ end
2593
+ end
2594
+ local sourceOwner = damagingEvent[1]
2595
+ if sourceOwner then
2596
+ local targetOwner = damagingEvent[2]
2597
+ if damagingEvent[3] then
2598
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2599
+ end
2600
+ if damagingEvent[4] then
2601
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2602
+ end
2603
+ end
2604
+ end
2485
2605
  local evData = setmetatable(
2486
2606
  {},
2487
2607
  {
2488
2608
  __index = data,
2489
2609
  __newindex = function(self, key, value)
2490
- damageSetters[key](value)
2610
+ local damageSetter = damageSetters[key]
2611
+ if damageSetter ~= nil then
2612
+ damageSetter(value)
2613
+ end
2491
2614
  data[key] = value
2492
2615
  end
2493
2616
  }
2494
2617
  )
2495
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2496
2618
  invoke(event, source, target, evData)
2497
2619
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2498
2620
  local bonusHealth = math.ceil(evData.amount)
@@ -2546,10 +2668,14 @@ Unit.itemPickedUpEvent = __TS__New(
2546
2668
  ____exports.UnitTriggerEvent,
2547
2669
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2548
2670
  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)
2671
+ local unitHandle = getTriggerUnit()
2672
+ local itemHandle = getManipulatedItem()
2673
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2674
+ local unit = ____exports.Unit:of(unitHandle)
2675
+ local item = Item:of(itemHandle)
2676
+ if item.owner ~= unit then
2677
+ return unit, item
2678
+ end
2553
2679
  end
2554
2680
  return IgnoreEvent
2555
2681
  end
@@ -2569,7 +2695,22 @@ Unit.itemUsedEvent = __TS__New(
2569
2695
  Unit.itemStackedEvent = __TS__New(
2570
2696
  ____exports.UnitTriggerEvent,
2571
2697
  EVENT_PLAYER_UNIT_STACK_ITEM,
2572
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2698
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2699
+ )
2700
+ __TS__ObjectDefineProperty(
2701
+ Unit,
2702
+ "itemChargesChangedEvent",
2703
+ {get = function(self)
2704
+ local event = __TS__New(Event)
2705
+ Item.chargesChangedEvent:addListener(function(item)
2706
+ local unit = item.owner
2707
+ if unit ~= nil then
2708
+ invoke(event, unit, item)
2709
+ end
2710
+ end)
2711
+ rawset(self, "itemChargesChangedEvent", event)
2712
+ return event
2713
+ end}
2573
2714
  )
2574
2715
  __TS__ObjectDefineProperty(
2575
2716
  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
+ }