warscript 0.0.1-dev.38157d0 → 0.0.1-dev.3860fce

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 (195) 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 +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +4 -0
  8. package/core/types/frame.lua +81 -12
  9. package/core/types/player.lua +3 -1
  10. package/core/types/playerCamera.d.ts +2 -0
  11. package/core/types/playerCamera.lua +79 -5
  12. package/core/types/sound.d.ts +17 -24
  13. package/core/types/sound.lua +99 -24
  14. package/core/types/timer.d.ts +8 -8
  15. package/core/types/timer.lua +25 -23
  16. package/core/util.d.ts +1 -1
  17. package/core/util.lua +18 -1
  18. package/decl/native.d.ts +844 -788
  19. package/engine/behavior.d.ts +4 -2
  20. package/engine/behavior.lua +59 -33
  21. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  22. package/engine/behaviour/ability/always-enabled.lua +31 -0
  23. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  24. package/engine/behaviour/ability/apply-buff.lua +32 -0
  25. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  26. package/engine/behaviour/ability/damage.d.ts +9 -3
  27. package/engine/behaviour/ability/damage.lua +26 -38
  28. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  29. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  30. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  31. package/engine/behaviour/ability/instant-impact.lua +4 -19
  32. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  33. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  34. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  35. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  36. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  37. package/engine/behaviour/ability/restore-mana.lua +6 -6
  38. package/engine/behaviour/ability.d.ts +20 -4
  39. package/engine/behaviour/ability.lua +111 -47
  40. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  41. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  42. package/engine/behaviour/unit.d.ts +32 -0
  43. package/engine/behaviour/unit.lua +185 -4
  44. package/engine/buff.d.ts +63 -45
  45. package/engine/buff.lua +300 -237
  46. package/engine/internal/ability.d.ts +23 -14
  47. package/engine/internal/ability.lua +128 -85
  48. package/engine/internal/item/ability.lua +162 -4
  49. package/engine/internal/item+owner.lua +12 -6
  50. package/engine/internal/item.d.ts +7 -4
  51. package/engine/internal/item.lua +141 -35
  52. package/engine/internal/mechanics/ability-duration.lua +1 -1
  53. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  54. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  55. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  56. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  57. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  58. package/engine/internal/misc/frame-coordinates.lua +21 -0
  59. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  60. package/engine/internal/misc/get-terrain-z.lua +11 -0
  61. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  62. package/engine/internal/misc/player-local-handle.lua +5 -0
  63. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  64. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  65. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  66. package/engine/internal/object-data/evasion-probability.lua +16 -0
  67. package/engine/internal/unit/ability.d.ts +45 -1
  68. package/engine/internal/unit/ability.lua +98 -14
  69. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  70. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  71. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  72. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  73. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  74. package/engine/internal/unit/allowed-targets.lua +9 -1
  75. package/engine/internal/unit/bonus.d.ts +2 -0
  76. package/engine/internal/unit/bonus.lua +17 -0
  77. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  78. package/engine/internal/unit/ignore-events-items.lua +5 -0
  79. package/engine/internal/unit/item.d.ts +24 -0
  80. package/engine/internal/unit/item.lua +78 -0
  81. package/engine/internal/unit/main-selected.d.ts +13 -0
  82. package/engine/internal/unit/main-selected.lua +51 -0
  83. package/engine/internal/unit/order.d.ts +20 -0
  84. package/engine/internal/unit/order.lua +136 -0
  85. package/engine/internal/unit+ability.lua +10 -1
  86. package/engine/internal/unit+damage.d.ts +2 -11
  87. package/engine/internal/unit+damage.lua +10 -14
  88. package/engine/internal/unit+spellSteal.lua +1 -2
  89. package/engine/internal/unit-missile-launch.lua +33 -7
  90. package/engine/internal/unit.d.ts +50 -25
  91. package/engine/internal/unit.lua +372 -198
  92. package/engine/internal/utility.lua +12 -0
  93. package/engine/lightning.d.ts +12 -5
  94. package/engine/lightning.lua +48 -14
  95. package/engine/local-client.d.ts +7 -2
  96. package/engine/local-client.lua +82 -0
  97. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  98. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  99. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  100. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  101. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  102. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  103. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  104. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  105. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  106. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  107. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  108. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  109. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  110. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  111. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  112. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  113. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  114. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  115. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  116. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  117. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  118. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  119. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  120. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  121. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  122. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  123. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  124. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  125. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  126. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  127. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  128. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  129. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  130. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  131. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  132. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  133. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  134. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  135. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  136. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  137. package/engine/object-data/entry/ability-type/web.lua +52 -0
  138. package/engine/object-data/entry/ability-type.d.ts +19 -17
  139. package/engine/object-data/entry/ability-type.lua +90 -36
  140. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  141. package/engine/object-data/entry/buff-type.d.ts +6 -12
  142. package/engine/object-data/entry/buff-type.lua +13 -29
  143. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  144. package/engine/object-data/entry/item-type.d.ts +15 -1
  145. package/engine/object-data/entry/item-type.lua +93 -2
  146. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  147. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  148. package/engine/object-data/entry/sound-preset.lua +140 -0
  149. package/engine/object-data/entry/unit-type.d.ts +21 -5
  150. package/engine/object-data/entry/unit-type.lua +214 -93
  151. package/engine/object-data/entry/upgrade.d.ts +1 -1
  152. package/engine/object-data/entry/upgrade.lua +4 -4
  153. package/engine/object-data/entry.d.ts +16 -14
  154. package/engine/object-data/entry.lua +60 -32
  155. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  156. package/engine/object-field/ability.d.ts +12 -6
  157. package/engine/object-field/ability.lua +9 -5
  158. package/engine/object-field/unit.d.ts +57 -3
  159. package/engine/object-field/unit.lua +207 -7
  160. package/engine/object-field.d.ts +17 -6
  161. package/engine/object-field.lua +190 -90
  162. package/engine/standard/entries/buff-type.d.ts +3 -0
  163. package/engine/standard/entries/buff-type.lua +3 -0
  164. package/engine/standard/entries/sound-preset.d.ts +10 -0
  165. package/engine/standard/entries/sound-preset.lua +10 -0
  166. package/engine/standard/fields/ability.d.ts +2 -0
  167. package/engine/standard/fields/ability.lua +2 -0
  168. package/engine/standard/fields/unit.d.ts +4 -0
  169. package/engine/standard/fields/unit.lua +7 -0
  170. package/engine/text-tag.d.ts +36 -2
  171. package/engine/text-tag.lua +249 -10
  172. package/engine/unit.d.ts +4 -0
  173. package/engine/unit.lua +4 -0
  174. package/index.d.ts +1 -0
  175. package/index.lua +1 -0
  176. package/objutil/buff.lua +1 -2
  177. package/objutil/unit.lua +8 -0
  178. package/package.json +2 -2
  179. package/patch-lua.d.ts +0 -0
  180. package/patch-lua.lua +10 -0
  181. package/utility/arrays.d.ts +9 -1
  182. package/utility/arrays.lua +37 -3
  183. package/utility/functions.d.ts +8 -0
  184. package/utility/functions.lua +13 -0
  185. package/utility/lazy.d.ts +2 -0
  186. package/utility/lazy.lua +14 -0
  187. package/utility/linked-set.d.ts +1 -0
  188. package/utility/linked-set.lua +3 -0
  189. package/utility/lua-maps.d.ts +4 -0
  190. package/utility/lua-maps.lua +20 -0
  191. package/utility/lua-sets.d.ts +2 -0
  192. package/utility/lua-sets.lua +7 -0
  193. package/utility/reflection.lua +11 -7
  194. package/core/types/order.d.ts +0 -25
  195. package/core/types/order.lua +0 -55
@@ -15,7 +15,6 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
15
15
  local Set = ____lualib.Set
16
16
  local __TS__Spread = ____lualib.__TS__Spread
17
17
  local ____exports = {}
18
- local unitInventorySize, unitItemInSlot, unitDropItemSlot, unitRemoveItemFromSlot, unitAddItem, isItemPowerup, setItemBooleanField
19
18
  local ____handle = require("core.types.handle")
20
19
  local Handle = ____handle.Handle
21
20
  local ____player = require("core.types.player")
@@ -52,12 +51,21 @@ local ____arrays = require("utility.arrays")
52
51
  local forEach = ____arrays.forEach
53
52
  local ____math = require("math")
54
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
55
65
  local match = string.match
56
66
  local ____tostring = _G.tostring
57
67
  local setUnitAnimation = SetUnitAnimation
58
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
59
68
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
60
- local queueUnitAnimation = QueueUnitAnimation
61
69
  local getUnitIntegerField = BlzGetUnitIntegerField
62
70
  local getUnitRealField = BlzGetUnitRealField
63
71
  local getHeroStr = GetHeroStr
@@ -76,9 +84,9 @@ local setUnitScale = SetUnitScale
76
84
  local setUnitPosition = SetUnitPosition
77
85
  local setUnitTimeScale = SetUnitTimeScale
78
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
79
88
  local createUnit = CreateUnit
80
89
  local killUnit = KillUnit
81
- local setUnitExploded = SetUnitExploded
82
90
  local removeUnit = RemoveUnit
83
91
  local getUnitTypeId = GetUnitTypeId
84
92
  local isHeroUnitId = IsHeroUnitId
@@ -94,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
94
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
95
103
  local isUnitInRangeXY = IsUnitInRangeXY
96
104
  local isUnitInRange = IsUnitInRange
97
- local setResourceAmount = SetResourceAmount
98
- local getResourceAmount = GetResourceAmount
99
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
100
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
101
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -119,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
119
125
  local getIssuedOrderId = GetIssuedOrderId
120
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
121
127
  local unitAlive = UnitAlive
122
- local unitAddType = UnitAddType
123
- local unitRemoveType = UnitRemoveType
124
- local isUnitIllusion = IsUnitIllusion
125
- local isUnitType = IsUnitType
126
128
  local isUnitAlly = IsUnitAlly
127
129
  local isUnitEnemy = IsUnitEnemy
128
130
  local getOwningPlayer = GetOwningPlayer
129
- local setUnitColor = SetUnitColor
130
- local showUnitTeamGlow = BlzShowUnitTeamGlow
131
131
  ____exports.UnitClassification = {}
132
132
  local UnitClassification = ____exports.UnitClassification
133
133
  do
@@ -137,6 +137,7 @@ do
137
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
138
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
139
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
140
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
141
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
142
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -344,6 +345,9 @@ local function dispatchAbility(event)
344
345
  }
345
346
  )
346
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
347
351
  local function damageEventPreventDeath(self, callback, ...)
348
352
  if self[0] ~= nil then
349
353
  return
@@ -355,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
355
359
  rawset(self, 1 + i, (select(i, ...)))
356
360
  end
357
361
  end
358
- 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
+ }
359
370
  local jlimitopByOperator = {
360
371
  [0] = LESS_THAN_OR_EQUAL,
361
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -392,37 +403,6 @@ local getters = {
392
403
  return BlzGetUnitArmor(unit)
393
404
  end
394
405
  }
395
- ____exports.UnitItems = __TS__Class()
396
- local UnitItems = ____exports.UnitItems
397
- UnitItems.name = "UnitItems"
398
- function UnitItems.prototype.____constructor(self, handle)
399
- self.handle = handle
400
- end
401
- function UnitItems.prototype.__newindex(self, slot, item)
402
- local handle = self.handle
403
- if slot < 0 or slot >= unitInventorySize(handle) then
404
- return
405
- end
406
- unitRemoveItemFromSlot(handle, slot)
407
- if item ~= nil then
408
- local itemHandle = item.handle
409
- local isPowerup = isItemPowerup(itemHandle)
410
- if isPowerup then
411
- setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
412
- end
413
- unitAddItem(handle, itemHandle)
414
- unitDropItemSlot(handle, itemHandle, slot)
415
- if isPowerup then
416
- setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
417
- end
418
- end
419
- end
420
- function UnitItems.prototype.__index(self, slot)
421
- return Item:of(unitItemInSlot(self.handle, slot))
422
- end
423
- function UnitItems.prototype.__len(self)
424
- return unitInventorySize(self.handle)
425
- end
426
406
  ____exports.UnitWeapon = __TS__Class()
427
407
  local UnitWeapon = ____exports.UnitWeapon
428
408
  UnitWeapon.name = "UnitWeapon"
@@ -464,6 +444,19 @@ __TS__SetDescriptor(
464
444
  },
465
445
  true
466
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
+ )
467
460
  __TS__SetDescriptor(
468
461
  UnitWeapon.prototype,
469
462
  "damageBase",
@@ -575,13 +568,8 @@ __TS__SetDescriptor(
575
568
  },
576
569
  true
577
570
  )
578
- unitInventorySize = UnitInventorySize
579
- unitItemInSlot = UnitItemInSlot
580
- unitDropItemSlot = UnitDropItemSlot
581
- unitRemoveItemFromSlot = UnitRemoveItemFromSlot
582
- unitAddItem = UnitAddItem
583
- isItemPowerup = IsItemPowerup
584
- setItemBooleanField = BlzSetItemBooleanField
571
+ local unitInventorySize = UnitInventorySize
572
+ local unitItemInSlot = UnitItemInSlot
585
573
  local getItemAbility = BlzGetItemAbility
586
574
  local getUnitAbility = BlzGetUnitAbility
587
575
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -599,17 +587,6 @@ local function retrieveAbility(unit, ability, abilityId)
599
587
  ____exports.Unit:of(unit)
600
588
  )
601
589
  end
602
- if not unitAddAbility(unit, abilityId) then
603
- if getUnitAbility(unit, abilityId) == ability then
604
- return UnitAbility:of(
605
- ability,
606
- abilityId,
607
- ____exports.Unit:of(unit)
608
- )
609
- end
610
- else
611
- unitRemoveAbility(unit, abilityId)
612
- end
613
590
  for i = 0, unitInventorySize(unit) - 1 do
614
591
  local item = unitItemInSlot(unit, i)
615
592
  if getItemAbility(item, abilityId) == ability then
@@ -667,15 +644,15 @@ for ____, player in ipairs(Player.all) do
667
644
  dummies[player] = dummy
668
645
  end
669
646
  local function delayHealthChecksCallback(unit)
670
- local counter = (unit[102] or 0) - 1
647
+ local counter = (unit[103] or 0) - 1
671
648
  if counter ~= 0 then
672
- unit[102] = counter
649
+ unit[103] = counter
673
650
  return
674
651
  end
675
- unit[102] = nil
676
- local healthBonus = unit[103]
652
+ unit[103] = nil
653
+ local healthBonus = unit[104]
677
654
  if healthBonus ~= nil then
678
- unit[103] = nil
655
+ unit[104] = nil
679
656
  local handle = unit.handle
680
657
  BlzSetUnitMaxHP(
681
658
  handle,
@@ -683,12 +660,27 @@ local function delayHealthChecksCallback(unit)
683
660
  )
684
661
  end
685
662
  end
663
+ local nextSyncId = 1
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
686
675
  ____exports.Unit = __TS__Class()
687
676
  local Unit = ____exports.Unit
688
677
  Unit.name = "Unit"
689
678
  __TS__ClassExtends(Unit, Handle)
690
679
  function Unit.prototype.____constructor(self, handle)
691
680
  Handle.prototype.____constructor(self, handle)
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
692
684
  self._owner = Player:of(getOwningPlayer(handle))
693
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
694
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -701,6 +693,7 @@ function Unit.prototype.____constructor(self, handle)
701
693
  fourCC("Amrf")
702
694
  ))
703
695
  end
696
+ unitBySyncId[self.syncId] = self
704
697
  local ____ = self.abilities
705
698
  end
706
699
  function Unit.prototype.getEvent(self, event, collector)
@@ -719,6 +712,8 @@ function Unit.prototype.getEvent(self, event, collector)
719
712
  end
720
713
  function Unit.prototype.onDestroy(self)
721
714
  local handle = self.handle
715
+ self[107] = getUnitX(handle)
716
+ self[108] = getUnitY(handle)
722
717
  if not self._owner then
723
718
  self._owner = Player:of(getOwningPlayer(handle))
724
719
  end
@@ -786,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
786
781
  end}
787
782
  end
788
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
789
- local ____combatClassification_0 = combatClassification
790
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
784
+ local ____combatClassification_2 = combatClassification
785
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
791
786
  end
792
787
  function Unit.prototype.addClassification(self, classification)
793
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
794
789
  end
795
790
  function Unit.prototype.removeClassification(self, classification)
796
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
797
792
  end
798
793
  function Unit.prototype.hasClassification(self, classification)
799
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
800
795
  end
801
796
  function Unit.prototype.isVisibleTo(self, player)
802
797
  return isUnitVisible(self.handle, player.handle)
@@ -805,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
805
800
  return isUnitInvisible(self.handle, player.handle)
806
801
  end
807
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
808
- local ____temp_1
803
+ local ____temp_3
809
804
  if type(x) == "number" then
810
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
811
806
  else
812
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
813
808
  end
814
- return ____temp_1
809
+ return ____temp_3
815
810
  end
816
811
  function Unit.prototype.isAllyOf(self, unit)
817
812
  return isUnitAlly(
@@ -829,16 +824,28 @@ function Unit.prototype.playAnimation(self, animation, rarity)
829
824
  if type(animation) == "number" then
830
825
  setUnitAnimationByIndex(self.handle, animation)
831
826
  elseif rarity then
832
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
833
828
  else
834
829
  setUnitAnimation(self.handle, animation)
835
830
  end
836
831
  end
832
+ function Unit.prototype.resetAnimation(self)
833
+ ResetUnitAnimation(self.handle)
834
+ end
837
835
  function Unit.prototype.queueAnimation(self, animation)
838
- 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
839
846
  end
840
847
  function Unit.prototype.delayHealthChecks(self)
841
- self[102] = (self[102] or 0) + 1
848
+ self[103] = (self[103] or 0) + 1
842
849
  Timer:run(delayHealthChecksCallback, self)
843
850
  end
844
851
  function Unit.prototype.setPosition(self, x, y)
@@ -848,21 +855,21 @@ function Unit.prototype.isSelected(self, player)
848
855
  return IsUnitSelected(self.handle, player.handle)
849
856
  end
850
857
  function Unit.prototype.explode(self)
851
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
852
859
  killUnit(self.handle)
853
860
  end
854
861
  function Unit.prototype.kill(self)
855
862
  killUnit(self.handle)
856
863
  end
857
864
  function Unit.prototype.revive(self, x, y, doEffect)
858
- local ____ReviveHero_4 = ReviveHero
859
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
860
- local ____doEffect_2 = doEffect
861
- if ____doEffect_2 == nil then
862
- ____doEffect_2 = 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
863
870
  end
864
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
865
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
866
873
  end
867
874
  function Unit.prototype.healTarget(self, target, amount)
868
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -905,17 +912,16 @@ function Unit.prototype.itemInSlot(self, slot)
905
912
  return Item:of(unitItemInSlot(self.handle, slot))
906
913
  end
907
914
  function Unit.prototype.addAbility(self, abilityId)
908
- if unitAddAbility(self.handle, abilityId) then
909
- local ability = UnitAbility:of(
910
- checkNotNull(getUnitAbility(self.handle, abilityId)),
911
- abilityId,
912
- self
913
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
914
921
  local abilities = self.abilities
915
922
  abilities[#abilities + 1] = ability
916
- return ability
917
923
  end
918
- return nil
924
+ return ability
919
925
  end
920
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
921
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -930,28 +936,17 @@ function Unit.prototype.hasAbility(self, abilityId)
930
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
931
937
  end
932
938
  function Unit.prototype.getAbilityById(self, abilityId)
933
- local handle = self.handle
934
- if unitAddAbility(handle, abilityId) then
935
- assert(unitRemoveAbility(handle, abilityId))
936
- return nil
937
- end
938
- return UnitAbility:of(
939
- getUnitAbility(self.handle, abilityId),
940
- abilityId,
941
- self
942
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
943
941
  end
944
942
  function Unit.prototype.removeAbility(self, abilityId)
945
- if unitRemoveAbility(self.handle, abilityId) then
946
- local abilities = self.abilities
947
- for i = 1, #abilities do
948
- if abilities[i].typeId == abilityId then
949
- abilities[i]:destroy()
950
- tremove(abilities, i)
951
- return true
952
- 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
953
949
  end
954
- return true
955
950
  end
956
951
  return false
957
952
  end
@@ -967,12 +962,34 @@ end
967
962
  function Unit.prototype.endAbilityCooldown(self, abilityId)
968
963
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
969
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
970
980
  function Unit.prototype.interruptAttack(self)
971
981
  unitInterruptAttack(self.handle)
972
982
  end
973
983
  function Unit.prototype.interruptCast(self, abilityId)
974
- unitDisableAbility(self.handle, abilityId, true, false)
975
- unitDisableAbility(self.handle, abilityId, false, false)
984
+ local handle = self.handle
985
+ unitDisableAbility(handle, abilityId, true, false)
986
+ Timer:run(
987
+ unitDisableAbility,
988
+ handle,
989
+ abilityId,
990
+ false,
991
+ false
992
+ )
976
993
  end
977
994
  function Unit.prototype.getDistanceTo(self, target)
978
995
  local handle = self.handle
@@ -1032,18 +1049,18 @@ function Unit.prototype.unpauseEx(self)
1032
1049
  self:decrementStunCounter()
1033
1050
  end
1034
1051
  function Unit.prototype.incrementStunCounter(self)
1035
- local stunCounter = self[101] or 0
1036
- if not self[100] or stunCounter >= 0 then
1052
+ local stunCounter = self[102] or 0
1053
+ if not self[101] or stunCounter >= 0 then
1037
1054
  BlzPauseUnitEx(self.handle, true)
1038
1055
  end
1039
- self[101] = stunCounter + 1
1056
+ self[102] = stunCounter + 1
1040
1057
  end
1041
1058
  function Unit.prototype.decrementStunCounter(self)
1042
- local stunCounter = self[101] or 0
1043
- if not self[100] or stunCounter >= 1 then
1059
+ local stunCounter = self[102] or 0
1060
+ if not self[101] or stunCounter >= 1 then
1044
1061
  BlzPauseUnitEx(self.handle, false)
1045
1062
  end
1046
- self[101] = stunCounter - 1
1063
+ self[102] = stunCounter - 1
1047
1064
  end
1048
1065
  function Unit.create(self, owner, id, x, y, facing, skinId)
1049
1066
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1145,8 +1162,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1145
1162
  )
1146
1163
  return targetCollection
1147
1164
  end
1148
- function Unit.getSelectionOf(self, player)
1149
- targetCollection = {}
1165
+ function Unit.getSelectionOf(self, player, target)
1166
+ if target == nil then
1167
+ target = {}
1168
+ end
1169
+ targetCollection = target
1150
1170
  targetCollectionNextIndex = 1
1151
1171
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1152
1172
  return targetCollection
@@ -1168,6 +1188,9 @@ end
1168
1188
  function Unit.prototype.__tostring(self)
1169
1189
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1170
1190
  end
1191
+ function Unit.getBySyncId(self, syncId)
1192
+ return unitBySyncId[syncId]
1193
+ end
1171
1194
  __TS__SetDescriptor(
1172
1195
  Unit.prototype,
1173
1196
  "_deltas",
@@ -1227,7 +1250,15 @@ __TS__SetDescriptor(
1227
1250
  Unit.prototype,
1228
1251
  "isIllusion",
1229
1252
  {get = function(self)
1230
- return isUnitIllusion(self.handle)
1253
+ return IsUnitIllusion(self.handle)
1254
+ end},
1255
+ true
1256
+ )
1257
+ __TS__SetDescriptor(
1258
+ Unit.prototype,
1259
+ "isStunned",
1260
+ {get = function(self)
1261
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1231
1262
  end},
1232
1263
  true
1233
1264
  )
@@ -1304,6 +1335,19 @@ __TS__SetDescriptor(
1304
1335
  },
1305
1336
  true
1306
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
+ )
1307
1351
  __TS__SetDescriptor(
1308
1352
  Unit.prototype,
1309
1353
  "strengthBase",
@@ -1425,17 +1469,17 @@ __TS__SetDescriptor(
1425
1469
  "isTeamGlowVisible",
1426
1470
  {
1427
1471
  get = function(self)
1428
- return not self[105]
1472
+ return not self[106]
1429
1473
  end,
1430
1474
  set = function(self, isTeamGlowVisible)
1431
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1432
- local ____temp_5
1475
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1476
+ local ____temp_7
1433
1477
  if not isTeamGlowVisible then
1434
- ____temp_5 = true
1478
+ ____temp_7 = true
1435
1479
  else
1436
- ____temp_5 = nil
1480
+ ____temp_7 = nil
1437
1481
  end
1438
- self[105] = ____temp_5
1482
+ self[106] = ____temp_7
1439
1483
  end
1440
1484
  },
1441
1485
  true
@@ -1444,9 +1488,9 @@ __TS__SetDescriptor(
1444
1488
  Unit.prototype,
1445
1489
  "color",
1446
1490
  {set = function(self, color)
1447
- setUnitColor(self.handle, color.handle)
1448
- if self[105] then
1449
- showUnitTeamGlow(self.handle, false)
1491
+ SetUnitColor(self.handle, color.handle)
1492
+ if self[106] then
1493
+ BlzShowUnitTeamGlow(self.handle, false)
1450
1494
  end
1451
1495
  end},
1452
1496
  true
@@ -1469,14 +1513,14 @@ __TS__SetDescriptor(
1469
1513
  "maxHealth",
1470
1514
  {
1471
1515
  get = function(self)
1472
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1516
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1473
1517
  end,
1474
1518
  set = function(self, maxHealth)
1475
- if maxHealth < 1 and self[102] ~= nil then
1476
- self[103] = (self[103] or 0) + (1 - maxHealth)
1519
+ if maxHealth < 1 and self[103] ~= nil then
1520
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1477
1521
  maxHealth = 1
1478
1522
  end
1479
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1523
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1480
1524
  end
1481
1525
  },
1482
1526
  true
@@ -1518,10 +1562,10 @@ __TS__SetDescriptor(
1518
1562
  "health",
1519
1563
  {
1520
1564
  get = function(self)
1521
- return GetWidgetLife(self.handle) - (self[104] or 0)
1565
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1522
1566
  end,
1523
1567
  set = function(self, health)
1524
- SetWidgetLife(self.handle, health + (self[104] or 0))
1568
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1525
1569
  end
1526
1570
  },
1527
1571
  true
@@ -1615,7 +1659,7 @@ __TS__SetDescriptor(
1615
1659
  "x",
1616
1660
  {
1617
1661
  get = function(self)
1618
- return getUnitX(self.handle)
1662
+ return self[107] or getUnitX(self.handle)
1619
1663
  end,
1620
1664
  set = function(self, v)
1621
1665
  SetUnitX(self.handle, v)
@@ -1628,7 +1672,7 @@ __TS__SetDescriptor(
1628
1672
  "y",
1629
1673
  {
1630
1674
  get = function(self)
1631
- return getUnitY(self.handle)
1675
+ return self[108] or getUnitY(self.handle)
1632
1676
  end,
1633
1677
  set = function(self, v)
1634
1678
  SetUnitY(self.handle, v)
@@ -1714,10 +1758,10 @@ __TS__SetDescriptor(
1714
1758
  "gold",
1715
1759
  {
1716
1760
  get = function(self)
1717
- return getResourceAmount(self.handle)
1761
+ return GetResourceAmount(self.handle)
1718
1762
  end,
1719
1763
  set = function(self, gold)
1720
- setResourceAmount(self.handle, gold)
1764
+ SetResourceAmount(self.handle, gold)
1721
1765
  end
1722
1766
  },
1723
1767
  true
@@ -1732,17 +1776,17 @@ __TS__SetDescriptor(
1732
1776
  set = function(self, isPaused)
1733
1777
  local handle = self.handle
1734
1778
  if isPaused and not IsUnitPaused(handle) then
1735
- self[100] = true
1736
- for _ = self[101] or 0, -1 do
1779
+ self[101] = true
1780
+ for _ = self[102] or 0, -1 do
1737
1781
  BlzPauseUnitEx(handle, true)
1738
1782
  end
1739
1783
  PauseUnit(handle, true)
1740
1784
  elseif not isPaused and IsUnitPaused(handle) then
1741
1785
  PauseUnit(handle, false)
1742
- for _ = self[101] or 0, -1 do
1786
+ for _ = self[102] or 0, -1 do
1743
1787
  BlzPauseUnitEx(handle, false)
1744
1788
  end
1745
- self[100] = nil
1789
+ self[101] = nil
1746
1790
  end
1747
1791
  end
1748
1792
  },
@@ -1847,19 +1891,22 @@ __TS__SetDescriptor(
1847
1891
  )
1848
1892
  __TS__SetDescriptor(
1849
1893
  Unit.prototype,
1850
- "pathing",
1851
- {set = function(self, v)
1852
- SetUnitPathing(self.handle, v)
1853
- end},
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
+ },
1854
1903
  true
1855
1904
  )
1856
1905
  __TS__SetDescriptor(
1857
1906
  Unit.prototype,
1858
- "items",
1859
- {get = function(self)
1860
- local items = __TS__New(____exports.UnitItems, self.handle)
1861
- rawset(self, "items", items)
1862
- return items
1907
+ "pathing",
1908
+ {set = function(self, v)
1909
+ SetUnitPathing(self.handle, v)
1863
1910
  end},
1864
1911
  true
1865
1912
  )
@@ -2036,6 +2083,14 @@ __TS__SetDescriptor(
2036
2083
  end},
2037
2084
  true
2038
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
+ )
2039
2094
  __TS__SetDescriptor(
2040
2095
  Unit.prototype,
2041
2096
  "onSelect",
@@ -2171,25 +2226,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2171
2226
  InitializingEvent,
2172
2227
  function(event)
2173
2228
  local function listener(unit, id)
2174
- local ____GetSpellTargetUnit_result_8
2229
+ local ____GetSpellTargetUnit_result_10
2175
2230
  if GetSpellTargetUnit() then
2176
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2231
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2177
2232
  else
2178
- local ____GetSpellTargetItem_result_7
2233
+ local ____GetSpellTargetItem_result_9
2179
2234
  if GetSpellTargetItem() then
2180
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2235
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2181
2236
  else
2182
- local ____GetSpellTargetDestructable_result_6
2237
+ local ____GetSpellTargetDestructable_result_8
2183
2238
  if GetSpellTargetDestructable() then
2184
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2239
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2185
2240
  else
2186
- ____GetSpellTargetDestructable_result_6 = nil
2241
+ ____GetSpellTargetDestructable_result_8 = nil
2187
2242
  end
2188
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2243
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2189
2244
  end
2190
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2245
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2191
2246
  end
2192
- local target = ____GetSpellTargetUnit_result_8
2247
+ local target = ____GetSpellTargetUnit_result_10
2193
2248
  if target then
2194
2249
  invoke(event, unit, id, target)
2195
2250
  end
@@ -2361,10 +2416,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2361
2416
  ____exports.UnitTriggerEvent,
2362
2417
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2363
2418
  function()
2364
- local unit = ____exports.Unit:of(getOrderedUnit())
2365
- local issuedOrderId = getIssuedOrderId()
2366
- if unit ~= nil and unit.state == 1 then
2367
- return unit, issuedOrderId
2419
+ local handle = getOrderedUnit()
2420
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2421
+ local unit = ____exports.Unit:of(handle)
2422
+ if unit.state == 1 then
2423
+ return unit, getIssuedOrderId()
2424
+ end
2368
2425
  end
2369
2426
  return IgnoreEvent
2370
2427
  end
@@ -2395,13 +2452,19 @@ Unit.onDamaging = (function()
2395
2452
  if source and source.typeId == dummyUnitId then
2396
2453
  source = nil
2397
2454
  end
2398
- local target = BlzGetEventDamageTarget()
2455
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2456
+ local metadata = damageMetadataByTarget[target]
2457
+ damageMetadataByTarget[target] = nil
2399
2458
  local data = {
2400
2459
  amount = GetEventDamage(),
2401
- attackType = BlzGetEventAttackType(),
2460
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2402
2461
  damageType = BlzGetEventDamageType(),
2403
2462
  weaponType = BlzGetEventWeaponType(),
2404
- isAttack = BlzGetEventIsAttack()
2463
+ metadata = metadata,
2464
+ isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2466
+ originalMetadata = metadata,
2467
+ preventRetaliation = damagingEventPreventRetaliation
2405
2468
  }
2406
2469
  if data.isAttack and source then
2407
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
@@ -2415,18 +2478,36 @@ Unit.onDamaging = (function()
2415
2478
  invoke(
2416
2479
  event,
2417
2480
  source,
2418
- ____exports.Unit:of(target),
2481
+ target,
2419
2482
  setmetatable(
2420
2483
  {},
2421
2484
  {
2422
2485
  __index = data,
2423
2486
  __newindex = function(self, key, value)
2424
- damageSetters[key](value)
2487
+ local damageSetter = damageSetters[key]
2488
+ if damageSetter ~= nil then
2489
+ damageSetter(value)
2490
+ end
2425
2491
  data[key] = value
2426
2492
  end
2427
2493
  }
2428
2494
  )
2429
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
2430
2511
  return
2431
2512
  end
2432
2513
  BlzSetEventDamage(0)
@@ -2434,7 +2515,7 @@ Unit.onDamaging = (function()
2434
2515
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2435
2516
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2436
2517
  local sourceOwner = source.owner.handle
2437
- local targetOwner = GetOwningPlayer(target)
2518
+ local targetOwner = target.owner.handle
2438
2519
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2439
2520
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2440
2521
  Timer:run(function()
@@ -2450,23 +2531,19 @@ Unit.onDamaging = (function()
2450
2531
  for ____, ____value in ipairs(source._attackHandlers) do
2451
2532
  local condition = ____value[1]
2452
2533
  local action = ____value[2]
2453
- if condition(
2454
- source,
2455
- ____exports.Unit:of(target),
2456
- data
2457
- ) then
2534
+ if condition(source, target, data) then
2458
2535
  action(
2459
2536
  source,
2460
- ____exports.Unit:of(target),
2537
+ target,
2461
2538
  setmetatable(
2462
2539
  {fire = function()
2463
2540
  UnitDamageTarget(
2464
2541
  source.handle,
2465
- target,
2542
+ target.handle,
2466
2543
  data.amount,
2467
2544
  true,
2468
2545
  true,
2469
- data.attackType,
2546
+ attackTypeToNative(data.attackType),
2470
2547
  data.damageType,
2471
2548
  data.weaponType
2472
2549
  )
@@ -2493,30 +2570,54 @@ Unit.onDamage = __TS__New(
2493
2570
  if source and source.typeId == dummyUnitId then
2494
2571
  source = nil
2495
2572
  end
2573
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2574
+ local damagingEvent = damagingEventByTarget[target]
2575
+ damagingEventByTarget[target] = nil
2496
2576
  local data = {
2497
2577
  amount = GetEventDamage(),
2498
- attackType = BlzGetEventAttackType(),
2578
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2499
2579
  damageType = BlzGetEventDamageType(),
2500
2580
  weaponType = BlzGetEventWeaponType(),
2581
+ metadata = damagingEvent and damagingEvent.metadata,
2501
2582
  isAttack = BlzGetEventIsAttack(),
2502
- originalAmount = GetEventDamage(),
2583
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2584
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2503
2585
  preventDeath = damageEventPreventDeath
2504
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
2505
2604
  local evData = setmetatable(
2506
2605
  {},
2507
2606
  {
2508
2607
  __index = data,
2509
2608
  __newindex = function(self, key, value)
2510
- damageSetters[key](value)
2609
+ local damageSetter = damageSetters[key]
2610
+ if damageSetter ~= nil then
2611
+ damageSetter(value)
2612
+ end
2511
2613
  data[key] = value
2512
2614
  end
2513
2615
  }
2514
2616
  )
2515
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2516
2617
  invoke(event, source, target, evData)
2517
2618
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2518
2619
  local bonusHealth = math.ceil(evData.amount)
2519
- target[104] = (target[104] or 0) + bonusHealth
2620
+ target[105] = (target[105] or 0) + bonusHealth
2520
2621
  BlzSetUnitMaxHP(
2521
2622
  target.handle,
2522
2623
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2530,7 +2631,7 @@ Unit.onDamage = __TS__New(
2530
2631
  evData[0],
2531
2632
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2532
2633
  )
2533
- target[104] = (target[104] or 0) - bonusHealth
2634
+ target[105] = (target[105] or 0) - bonusHealth
2534
2635
  SetWidgetLife(
2535
2636
  target.handle,
2536
2637
  GetWidgetLife(target.handle) - bonusHealth
@@ -2555,8 +2656,9 @@ Unit.itemDroppedEvent = __TS__New(
2555
2656
  EVENT_PLAYER_UNIT_DROP_ITEM,
2556
2657
  function()
2557
2658
  local unit = getTriggerUnit()
2558
- if getUnitTypeId(unit) ~= dummyUnitId then
2559
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2659
+ local item = getManipulatedItem()
2660
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2661
+ return ____exports.Unit:of(unit), Item:of(item)
2560
2662
  end
2561
2663
  return IgnoreEvent
2562
2664
  end
@@ -2565,9 +2667,14 @@ Unit.itemPickedUpEvent = __TS__New(
2565
2667
  ____exports.UnitTriggerEvent,
2566
2668
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2567
2669
  function()
2568
- local unit = getTriggerUnit()
2569
- if getUnitTypeId(unit) ~= dummyUnitId then
2570
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
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
2571
2678
  end
2572
2679
  return IgnoreEvent
2573
2680
  end
@@ -2575,12 +2682,79 @@ Unit.itemPickedUpEvent = __TS__New(
2575
2682
  Unit.itemUsedEvent = __TS__New(
2576
2683
  ____exports.UnitTriggerEvent,
2577
2684
  EVENT_PLAYER_UNIT_USE_ITEM,
2578
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2685
+ function()
2686
+ local unit = getTriggerUnit()
2687
+ local item = getManipulatedItem()
2688
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2689
+ return ____exports.Unit:of(unit), Item:of(item)
2690
+ end
2691
+ return IgnoreEvent
2692
+ end
2579
2693
  )
2580
2694
  Unit.itemStackedEvent = __TS__New(
2581
2695
  ____exports.UnitTriggerEvent,
2582
2696
  EVENT_PLAYER_UNIT_STACK_ITEM,
2583
- 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}
2713
+ )
2714
+ __TS__ObjectDefineProperty(
2715
+ Unit,
2716
+ "itemUseOrderEvent",
2717
+ {get = function(self)
2718
+ local event = __TS__New(Event)
2719
+ for order = orderId("useslot0"), orderId("useslot5") do
2720
+ local slot = order - orderId("useslot0")
2721
+ local function listener(unit)
2722
+ local item = unit.items[slot + 1]
2723
+ if item ~= nil then
2724
+ invoke(event, unit, item)
2725
+ end
2726
+ end
2727
+ self.onImmediateOrder[order]:addListener(listener)
2728
+ self.onTargetOrder[order]:addListener(listener)
2729
+ self.onPointOrder[order]:addListener(listener)
2730
+ end
2731
+ rawset(self, "itemUseOrderEvent", event)
2732
+ return event
2733
+ end}
2734
+ )
2735
+ __TS__ObjectDefineProperty(
2736
+ Unit,
2737
+ "itemMoveOrderEvent",
2738
+ {get = function(self)
2739
+ local event = __TS__New(Event)
2740
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2741
+ local slotTo = order - orderId("moveslot0")
2742
+ self.onTargetOrder[order]:addListener(function(unit, item)
2743
+ local slotFrom = unit.items:findSlot(item)
2744
+ if slotFrom ~= nil then
2745
+ invoke(
2746
+ event,
2747
+ unit,
2748
+ item,
2749
+ slotFrom,
2750
+ slotTo
2751
+ )
2752
+ end
2753
+ end)
2754
+ end
2755
+ rawset(self, "itemMoveOrderEvent", event)
2756
+ return event
2757
+ end}
2584
2758
  )
2585
2759
  __TS__ObjectDefineProperty(
2586
2760
  Unit,