warscript 0.0.1-dev.a3723da → 0.0.1-dev.a3deff8

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 (216) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +6 -0
  10. package/core/types/frame.lua +115 -22
  11. package/core/types/player.d.ts +15 -0
  12. package/core/types/player.lua +56 -14
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/sound.d.ts +17 -24
  16. package/core/types/sound.lua +99 -24
  17. package/core/types/tileCell.d.ts +9 -0
  18. package/core/types/tileCell.lua +92 -0
  19. package/core/types/timer.d.ts +9 -8
  20. package/core/types/timer.lua +45 -23
  21. package/core/util.d.ts +1 -1
  22. package/core/util.lua +18 -1
  23. package/decl/native.d.ts +846 -790
  24. package/engine/behavior.d.ts +7 -2
  25. package/engine/behavior.lua +112 -33
  26. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  27. package/engine/behaviour/ability/always-enabled.lua +31 -0
  28. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  29. package/engine/behaviour/ability/apply-buff.lua +32 -0
  30. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  31. package/engine/behaviour/ability/damage.d.ts +12 -6
  32. package/engine/behaviour/ability/damage.lua +37 -51
  33. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  34. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  35. package/engine/behaviour/ability/heal.d.ts +33 -6
  36. package/engine/behaviour/ability/heal.lua +89 -10
  37. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  38. package/engine/behaviour/ability/instant-impact.lua +4 -19
  39. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  40. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  41. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  42. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  43. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  44. package/engine/behaviour/ability/restore-mana.lua +6 -6
  45. package/engine/behaviour/ability.d.ts +20 -4
  46. package/engine/behaviour/ability.lua +111 -47
  47. package/engine/behaviour/unit/stun-immunity.d.ts +7 -3
  48. package/engine/behaviour/unit/stun-immunity.lua +52 -27
  49. package/engine/behaviour/unit.d.ts +39 -0
  50. package/engine/behaviour/unit.lua +210 -4
  51. package/engine/buff.d.ts +110 -42
  52. package/engine/buff.lua +499 -208
  53. package/engine/internal/ability.d.ts +23 -14
  54. package/engine/internal/ability.lua +129 -85
  55. package/engine/internal/item/ability.lua +162 -4
  56. package/engine/internal/item+owner.lua +12 -6
  57. package/engine/internal/item.d.ts +20 -19
  58. package/engine/internal/item.lua +191 -74
  59. package/engine/internal/mechanics/ability-duration.lua +1 -1
  60. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  61. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  62. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  63. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  64. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  65. package/engine/internal/misc/frame-coordinates.lua +21 -0
  66. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  67. package/engine/internal/misc/get-terrain-z.lua +11 -0
  68. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  69. package/engine/internal/misc/player-local-handle.lua +5 -0
  70. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  71. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  72. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  73. package/engine/internal/object-data/evasion-probability.lua +16 -0
  74. package/engine/internal/unit/ability.d.ts +45 -1
  75. package/engine/internal/unit/ability.lua +128 -17
  76. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  77. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  78. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  79. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  80. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  81. package/engine/internal/unit/allowed-targets.lua +9 -1
  82. package/engine/internal/unit/bonus.d.ts +6 -2
  83. package/engine/internal/unit/bonus.lua +23 -1
  84. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  85. package/engine/internal/unit/ignore-events-items.lua +5 -0
  86. package/engine/internal/unit/item.d.ts +24 -0
  87. package/engine/internal/unit/item.lua +78 -0
  88. package/engine/internal/unit/main-selected.d.ts +13 -0
  89. package/engine/internal/unit/main-selected.lua +36 -0
  90. package/engine/internal/unit/order.d.ts +20 -0
  91. package/engine/internal/unit/order.lua +136 -0
  92. package/engine/internal/unit+ability.lua +12 -3
  93. package/engine/internal/unit+damage.d.ts +2 -11
  94. package/engine/internal/unit+damage.lua +10 -14
  95. package/engine/internal/unit+spellSteal.lua +1 -2
  96. package/engine/internal/unit-missile-launch.lua +63 -13
  97. package/engine/internal/unit.d.ts +63 -18
  98. package/engine/internal/unit.lua +437 -163
  99. package/engine/internal/utility.lua +12 -0
  100. package/engine/lightning.d.ts +12 -5
  101. package/engine/lightning.lua +48 -14
  102. package/engine/local-client.d.ts +9 -2
  103. package/engine/local-client.lua +112 -0
  104. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  105. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  106. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  107. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  108. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  109. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  110. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  111. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  112. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  113. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  114. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  115. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  117. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  118. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  119. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  120. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  121. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  122. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  123. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  124. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  125. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  126. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  127. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  128. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  129. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  130. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  131. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  132. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  133. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  134. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  135. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  136. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  137. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  138. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  139. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  140. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  141. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  142. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  143. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  144. package/engine/object-data/entry/ability-type/web.lua +52 -0
  145. package/engine/object-data/entry/ability-type.d.ts +19 -17
  146. package/engine/object-data/entry/ability-type.lua +93 -36
  147. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  148. package/engine/object-data/entry/buff-type.d.ts +6 -12
  149. package/engine/object-data/entry/buff-type.lua +13 -29
  150. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  151. package/engine/object-data/entry/item-type.d.ts +15 -1
  152. package/engine/object-data/entry/item-type.lua +93 -2
  153. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  154. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  155. package/engine/object-data/entry/sound-preset.lua +140 -0
  156. package/engine/object-data/entry/unit-type.d.ts +21 -5
  157. package/engine/object-data/entry/unit-type.lua +214 -93
  158. package/engine/object-data/entry/upgrade.d.ts +1 -1
  159. package/engine/object-data/entry/upgrade.lua +4 -4
  160. package/engine/object-data/entry.d.ts +16 -14
  161. package/engine/object-data/entry.lua +60 -32
  162. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  163. package/engine/object-field/ability.d.ts +28 -5
  164. package/engine/object-field/ability.lua +59 -5
  165. package/engine/object-field/unit.d.ts +57 -3
  166. package/engine/object-field/unit.lua +207 -7
  167. package/engine/object-field.d.ts +23 -6
  168. package/engine/object-field.lua +303 -114
  169. package/engine/random.d.ts +9 -0
  170. package/engine/random.lua +13 -0
  171. package/engine/standard/entries/buff-type.d.ts +3 -0
  172. package/engine/standard/entries/buff-type.lua +3 -0
  173. package/engine/standard/entries/sound-preset.d.ts +10 -0
  174. package/engine/standard/entries/sound-preset.lua +10 -0
  175. package/engine/standard/fields/ability.d.ts +2 -0
  176. package/engine/standard/fields/ability.lua +2 -0
  177. package/engine/standard/fields/unit.d.ts +4 -0
  178. package/engine/standard/fields/unit.lua +7 -0
  179. package/engine/synchronization.d.ts +11 -0
  180. package/engine/synchronization.lua +77 -0
  181. package/engine/text-tag.d.ts +36 -2
  182. package/engine/text-tag.lua +250 -10
  183. package/engine/unit.d.ts +4 -0
  184. package/engine/unit.lua +4 -0
  185. package/index.d.ts +1 -0
  186. package/index.lua +1 -0
  187. package/net/socket.d.ts +7 -1
  188. package/net/socket.lua +45 -4
  189. package/network.d.ts +1 -0
  190. package/network.lua +3 -2
  191. package/objutil/buff.lua +3 -4
  192. package/objutil/unit.lua +8 -0
  193. package/package.json +2 -2
  194. package/patch-lua.d.ts +0 -0
  195. package/patch-lua.lua +10 -0
  196. package/patch-lualib.lua +1 -1
  197. package/property.d.ts +55 -0
  198. package/property.lua +374 -0
  199. package/utility/arrays.d.ts +10 -1
  200. package/utility/arrays.lua +45 -3
  201. package/utility/callback-array.d.ts +17 -0
  202. package/utility/callback-array.lua +61 -0
  203. package/utility/functions.d.ts +8 -0
  204. package/utility/functions.lua +13 -0
  205. package/utility/lazy.d.ts +2 -0
  206. package/utility/lazy.lua +14 -0
  207. package/utility/linked-set.d.ts +13 -2
  208. package/utility/linked-set.lua +27 -3
  209. package/utility/lua-maps.d.ts +15 -2
  210. package/utility/lua-maps.lua +53 -2
  211. package/utility/lua-sets.d.ts +2 -0
  212. package/utility/lua-sets.lua +7 -0
  213. package/utility/reflection.lua +11 -7
  214. package/utility/types.d.ts +4 -0
  215. package/core/types/order.d.ts +0 -25
  216. package/core/types/order.lua +0 -55
@@ -51,12 +51,23 @@ local ____arrays = require("utility.arrays")
51
51
  local forEach = ____arrays.forEach
52
52
  local ____math = require("math")
53
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
63
+ local ____ability = require("engine.internal.item.ability")
64
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
65
+ local ____synchronization = require("engine.synchronization")
66
+ local synchronizer = ____synchronization.synchronizer
54
67
  local match = string.match
55
68
  local ____tostring = _G.tostring
56
69
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
71
  local getUnitIntegerField = BlzGetUnitIntegerField
61
72
  local getUnitRealField = BlzGetUnitRealField
62
73
  local getHeroStr = GetHeroStr
@@ -75,9 +86,9 @@ local setUnitScale = SetUnitScale
75
86
  local setUnitPosition = SetUnitPosition
76
87
  local setUnitTimeScale = SetUnitTimeScale
77
88
  local getHandleId = GetHandleId
89
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
90
  local createUnit = CreateUnit
79
91
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
92
  local removeUnit = RemoveUnit
82
93
  local getUnitTypeId = GetUnitTypeId
83
94
  local isHeroUnitId = IsHeroUnitId
@@ -93,8 +104,6 @@ local getSpellTargetItem = GetSpellTargetItem
93
104
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
105
  local isUnitInRangeXY = IsUnitInRangeXY
95
106
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
107
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
108
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
109
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -118,15 +127,9 @@ local getOrderedUnit = GetOrderedUnit
118
127
  local getIssuedOrderId = GetIssuedOrderId
119
128
  local isUnitInvulnerable = BlzIsUnitInvulnerable
120
129
  local unitAlive = UnitAlive
121
- local unitAddType = UnitAddType
122
- local unitRemoveType = UnitRemoveType
123
- local isUnitIllusion = IsUnitIllusion
124
- local isUnitType = IsUnitType
125
130
  local isUnitAlly = IsUnitAlly
126
131
  local isUnitEnemy = IsUnitEnemy
127
132
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
133
  ____exports.UnitClassification = {}
131
134
  local UnitClassification = ____exports.UnitClassification
132
135
  do
@@ -136,6 +139,7 @@ do
136
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -343,6 +347,9 @@ local function dispatchAbility(event)
343
347
  }
344
348
  )
345
349
  end
350
+ local function damagingEventPreventRetaliation(self)
351
+ self[0] = true
352
+ end
346
353
  local function damageEventPreventDeath(self, callback, ...)
347
354
  if self[0] ~= nil then
348
355
  return
@@ -354,7 +361,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
361
  rawset(self, 1 + i, (select(i, ...)))
355
362
  end
356
363
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
364
+ local damageSetters = {
365
+ amount = BlzSetEventDamage,
366
+ attackType = function(attackType)
367
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
368
+ end,
369
+ damageType = BlzSetEventDamageType,
370
+ weaponType = BlzSetEventWeaponType
371
+ }
358
372
  local jlimitopByOperator = {
359
373
  [0] = LESS_THAN_OR_EQUAL,
360
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -398,6 +412,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
398
412
  self.unit = unit
399
413
  self.index = index
400
414
  end
415
+ __TS__SetDescriptor(
416
+ UnitWeapon.prototype,
417
+ "isEnabled",
418
+ {
419
+ get = function(self)
420
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
421
+ end,
422
+ set = function(self, isEnabled)
423
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
424
+ end
425
+ },
426
+ true
427
+ )
401
428
  __TS__SetDescriptor(
402
429
  UnitWeapon.prototype,
403
430
  "cooldown",
@@ -432,6 +459,19 @@ __TS__SetDescriptor(
432
459
  },
433
460
  true
434
461
  )
462
+ __TS__SetDescriptor(
463
+ UnitWeapon.prototype,
464
+ "allowedTargetCombatClassifications",
465
+ {
466
+ get = function(self)
467
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
468
+ end,
469
+ set = function(self, allowedTargetCombatClassifications)
470
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
471
+ end
472
+ },
473
+ true
474
+ )
435
475
  __TS__SetDescriptor(
436
476
  UnitWeapon.prototype,
437
477
  "damageBase",
@@ -562,17 +602,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
602
  ____exports.Unit:of(unit)
563
603
  )
564
604
  end
565
- if not unitAddAbility(unit, abilityId) then
566
- if getUnitAbility(unit, abilityId) == ability then
567
- return UnitAbility:of(
568
- ability,
569
- abilityId,
570
- ____exports.Unit:of(unit)
571
- )
572
- end
573
- else
574
- unitRemoveAbility(unit, abilityId)
575
- end
576
605
  for i = 0, unitInventorySize(unit) - 1 do
577
606
  local item = unitItemInSlot(unit, i)
578
607
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +659,15 @@ for ____, player in ipairs(Player.all) do
630
659
  dummies[player] = dummy
631
660
  end
632
661
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
662
+ local counter = (unit[104] or 0) - 1
634
663
  if counter ~= 0 then
635
- unit[102] = counter
664
+ unit[104] = counter
636
665
  return
637
666
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
667
+ unit[104] = nil
668
+ local healthBonus = unit[105]
640
669
  if healthBonus ~= nil then
641
- unit[103] = nil
670
+ unit[105] = nil
642
671
  local handle = unit.handle
643
672
  BlzSetUnitMaxHP(
644
673
  handle,
@@ -646,12 +675,27 @@ local function delayHealthChecksCallback(unit)
646
675
  )
647
676
  end
648
677
  end
678
+ local nextSyncId = 1
679
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
680
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
681
+ local function addAbility(unit, abilityTypeId)
682
+ local ____unitAddAbility_result_0
683
+ if unitAddAbility(unit, abilityTypeId) then
684
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
685
+ else
686
+ ____unitAddAbility_result_0 = nil
687
+ end
688
+ return ____unitAddAbility_result_0
689
+ end
649
690
  ____exports.Unit = __TS__Class()
650
691
  local Unit = ____exports.Unit
651
692
  Unit.name = "Unit"
652
693
  __TS__ClassExtends(Unit, Handle)
653
694
  function Unit.prototype.____constructor(self, handle)
654
695
  Handle.prototype.____constructor(self, handle)
696
+ local ____nextSyncId_1 = nextSyncId
697
+ nextSyncId = ____nextSyncId_1 + 1
698
+ self.syncId = ____nextSyncId_1
655
699
  self._owner = Player:of(getOwningPlayer(handle))
656
700
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
701
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +708,7 @@ function Unit.prototype.____constructor(self, handle)
664
708
  fourCC("Amrf")
665
709
  ))
666
710
  end
711
+ unitBySyncId[self.syncId] = self
667
712
  local ____ = self.abilities
668
713
  end
669
714
  function Unit.prototype.getEvent(self, event, collector)
@@ -682,6 +727,8 @@ function Unit.prototype.getEvent(self, event, collector)
682
727
  end
683
728
  function Unit.prototype.onDestroy(self)
684
729
  local handle = self.handle
730
+ self[108] = getUnitX(handle)
731
+ self[109] = getUnitY(handle)
685
732
  if not self._owner then
686
733
  self._owner = Player:of(getOwningPlayer(handle))
687
734
  end
@@ -749,17 +796,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
796
  end}
750
797
  end
751
798
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
799
+ local ____combatClassification_2 = combatClassification
800
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
754
801
  end
755
802
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
803
+ return UnitAddType(self.handle, classification)
757
804
  end
758
805
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
806
+ return UnitRemoveType(self.handle, classification)
760
807
  end
761
808
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
809
+ return IsUnitType(self.handle, classification)
763
810
  end
764
811
  function Unit.prototype.isVisibleTo(self, player)
765
812
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +815,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
815
  return isUnitInvisible(self.handle, player.handle)
769
816
  end
770
817
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
818
+ local ____temp_3
772
819
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
820
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
774
821
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
822
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
776
823
  end
777
- return ____temp_1
824
+ return ____temp_3
778
825
  end
779
826
  function Unit.prototype.isAllyOf(self, unit)
780
827
  return isUnitAlly(
@@ -792,16 +839,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
839
  if type(animation) == "number" then
793
840
  setUnitAnimationByIndex(self.handle, animation)
794
841
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
842
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
843
  else
797
844
  setUnitAnimation(self.handle, animation)
798
845
  end
799
846
  end
847
+ function Unit.prototype.resetAnimation(self)
848
+ ResetUnitAnimation(self.handle)
849
+ end
800
850
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
851
+ QueueUnitAnimation(self.handle, animation)
852
+ end
853
+ function Unit.prototype.chooseWeapon(self, target)
854
+ local firstWeapon = self.firstWeapon
855
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
856
+ return firstWeapon
857
+ end
858
+ local secondWeapon = self.secondWeapon
859
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
860
+ return secondWeapon
861
+ end
862
+ return nil
802
863
  end
803
864
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
865
+ self[104] = (self[104] or 0) + 1
805
866
  Timer:run(delayHealthChecksCallback, self)
806
867
  end
807
868
  function Unit.prototype.setPosition(self, x, y)
@@ -811,21 +872,21 @@ function Unit.prototype.isSelected(self, player)
811
872
  return IsUnitSelected(self.handle, player.handle)
812
873
  end
813
874
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
875
+ SetUnitExploded(self.handle, true)
815
876
  killUnit(self.handle)
816
877
  end
817
878
  function Unit.prototype.kill(self)
818
879
  killUnit(self.handle)
819
880
  end
820
881
  function Unit.prototype.revive(self, x, y, doEffect)
821
- local ____ReviveHero_4 = ReviveHero
822
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
- local ____doEffect_2 = doEffect
824
- if ____doEffect_2 == nil then
825
- ____doEffect_2 = false
882
+ local ____ReviveHero_6 = ReviveHero
883
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
884
+ local ____doEffect_4 = doEffect
885
+ if ____doEffect_4 == nil then
886
+ ____doEffect_4 = false
826
887
  end
827
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
888
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
889
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
829
890
  end
830
891
  function Unit.prototype.healTarget(self, target, amount)
831
892
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,20 +926,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
926
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
927
  end
867
928
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(UnitItemInSlot(self.handle, slot))
929
+ return Item:of(unitItemInSlot(self.handle, slot))
869
930
  end
870
931
  function Unit.prototype.addAbility(self, abilityId)
871
- if unitAddAbility(self.handle, abilityId) then
872
- local ability = UnitAbility:of(
873
- checkNotNull(getUnitAbility(self.handle, abilityId)),
874
- abilityId,
875
- self
876
- )
932
+ local ability = UnitAbility:of(
933
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
934
+ abilityId,
935
+ self
936
+ )
937
+ if ability ~= nil then
877
938
  local abilities = self.abilities
878
939
  abilities[#abilities + 1] = ability
879
- return ability
880
940
  end
881
- return nil
941
+ return ability
882
942
  end
883
943
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
884
944
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -892,31 +952,21 @@ end
892
952
  function Unit.prototype.hasAbility(self, abilityId)
893
953
  return getUnitAbilityLevel(self.handle, abilityId) > 0
894
954
  end
895
- function Unit.prototype.getAbilityById(self, abilityId)
896
- local handle = self.handle
897
- if unitAddAbility(handle, abilityId) then
898
- assert(unitRemoveAbility(handle, abilityId))
899
- return nil
900
- end
901
- return UnitAbility:of(
902
- getUnitAbility(self.handle, abilityId),
903
- abilityId,
904
- self
905
- )
955
+ function Unit.prototype.getAbility(self, abilityId)
956
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
957
+ return UnitAbility:of(ability, abilityId, self)
906
958
  end
907
- function Unit.prototype.removeAbility(self, abilityId)
908
- if unitRemoveAbility(self.handle, abilityId) then
909
- local abilities = self.abilities
910
- for i = 1, #abilities do
911
- if abilities[i].typeId == abilityId then
912
- abilities[i]:destroy()
913
- tremove(abilities, i)
914
- return true
915
- end
959
+ function Unit.prototype.removeAbility(self, abilityTypeId)
960
+ local abilities = self.abilities
961
+ for i = 1, #abilities do
962
+ if abilities[i].typeId == abilityTypeId then
963
+ local ability = abilities[i]
964
+ tremove(abilities, i)
965
+ ability:destroy()
966
+ return true
916
967
  end
917
- return true
918
968
  end
919
- return false
969
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
920
970
  end
921
971
  function Unit.prototype.hideAbility(self, abilityId, flag)
922
972
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -930,12 +980,34 @@ end
930
980
  function Unit.prototype.endAbilityCooldown(self, abilityId)
931
981
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
932
982
  end
983
+ function Unit.prototype.interruptMovement(self)
984
+ local handle = self.handle
985
+ unitDisableAbility(
986
+ handle,
987
+ fourCC("Amov"),
988
+ true,
989
+ false
990
+ )
991
+ unitDisableAbility(
992
+ handle,
993
+ fourCC("Amov"),
994
+ false,
995
+ false
996
+ )
997
+ end
933
998
  function Unit.prototype.interruptAttack(self)
934
999
  unitInterruptAttack(self.handle)
935
1000
  end
936
1001
  function Unit.prototype.interruptCast(self, abilityId)
937
- unitDisableAbility(self.handle, abilityId, true, false)
938
- unitDisableAbility(self.handle, abilityId, false, false)
1002
+ local handle = self.handle
1003
+ unitDisableAbility(handle, abilityId, true, false)
1004
+ Timer:run(
1005
+ unitDisableAbility,
1006
+ handle,
1007
+ abilityId,
1008
+ false,
1009
+ false
1010
+ )
939
1011
  end
940
1012
  function Unit.prototype.getDistanceTo(self, target)
941
1013
  local handle = self.handle
@@ -995,18 +1067,44 @@ function Unit.prototype.unpauseEx(self)
995
1067
  self:decrementStunCounter()
996
1068
  end
997
1069
  function Unit.prototype.incrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 0 then
1070
+ local stunCounter = self[102] or 0
1071
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1000
1072
  BlzPauseUnitEx(self.handle, true)
1001
1073
  end
1002
- self[101] = stunCounter + 1
1074
+ self[102] = stunCounter + 1
1003
1075
  end
1004
1076
  function Unit.prototype.decrementStunCounter(self)
1005
- local stunCounter = self[101] or 0
1006
- if not self[100] or stunCounter >= 1 then
1077
+ local stunCounter = self[102] or 0
1078
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1007
1079
  BlzPauseUnitEx(self.handle, false)
1008
1080
  end
1009
- self[101] = stunCounter - 1
1081
+ self[102] = stunCounter - 1
1082
+ end
1083
+ function Unit.prototype.incrementForceStunCounter(self)
1084
+ local forceStunCounter = self[103] or 0
1085
+ if forceStunCounter == 0 then
1086
+ local handle = self.handle
1087
+ if not self[101] then
1088
+ for _ = self[102] or 0, -1 do
1089
+ BlzPauseUnitEx(handle, true)
1090
+ end
1091
+ end
1092
+ BlzPauseUnitEx(handle, true)
1093
+ end
1094
+ self[103] = forceStunCounter + 1
1095
+ end
1096
+ function Unit.prototype.decrementForceStunCounter(self)
1097
+ local forceStunCounter = self[103] or 0
1098
+ if forceStunCounter == 1 then
1099
+ local handle = self.handle
1100
+ if not self[101] then
1101
+ for _ = self[102] or 0, -1 do
1102
+ BlzPauseUnitEx(handle, false)
1103
+ end
1104
+ end
1105
+ BlzPauseUnitEx(handle, false)
1106
+ end
1107
+ self[103] = forceStunCounter - 1
1010
1108
  end
1011
1109
  function Unit.create(self, owner, id, x, y, facing, skinId)
1012
1110
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1108,8 +1206,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1108
1206
  )
1109
1207
  return targetCollection
1110
1208
  end
1111
- function Unit.getSelectionOf(self, player)
1112
- targetCollection = {}
1209
+ function Unit.getSelectionOf(self, player, target)
1210
+ if target == nil then
1211
+ target = {}
1212
+ end
1213
+ targetCollection = target
1113
1214
  targetCollectionNextIndex = 1
1114
1215
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1115
1216
  return targetCollection
@@ -1131,6 +1232,9 @@ end
1131
1232
  function Unit.prototype.__tostring(self)
1132
1233
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1133
1234
  end
1235
+ function Unit.getBySyncId(self, syncId)
1236
+ return unitBySyncId[syncId]
1237
+ end
1134
1238
  __TS__SetDescriptor(
1135
1239
  Unit.prototype,
1136
1240
  "_deltas",
@@ -1190,7 +1294,15 @@ __TS__SetDescriptor(
1190
1294
  Unit.prototype,
1191
1295
  "isIllusion",
1192
1296
  {get = function(self)
1193
- return isUnitIllusion(self.handle)
1297
+ return IsUnitIllusion(self.handle)
1298
+ end},
1299
+ true
1300
+ )
1301
+ __TS__SetDescriptor(
1302
+ Unit.prototype,
1303
+ "isStunned",
1304
+ {get = function(self)
1305
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1194
1306
  end},
1195
1307
  true
1196
1308
  )
@@ -1267,6 +1379,19 @@ __TS__SetDescriptor(
1267
1379
  },
1268
1380
  true
1269
1381
  )
1382
+ __TS__SetDescriptor(
1383
+ Unit.prototype,
1384
+ "primaryAttribute",
1385
+ {
1386
+ get = function(self)
1387
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1388
+ end,
1389
+ set = function(self, primaryAttribute)
1390
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1391
+ end
1392
+ },
1393
+ true
1394
+ )
1270
1395
  __TS__SetDescriptor(
1271
1396
  Unit.prototype,
1272
1397
  "strengthBase",
@@ -1388,17 +1513,17 @@ __TS__SetDescriptor(
1388
1513
  "isTeamGlowVisible",
1389
1514
  {
1390
1515
  get = function(self)
1391
- return not self[105]
1516
+ return not self[107]
1392
1517
  end,
1393
1518
  set = function(self, isTeamGlowVisible)
1394
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1395
- local ____temp_5
1519
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1520
+ local ____temp_7
1396
1521
  if not isTeamGlowVisible then
1397
- ____temp_5 = true
1522
+ ____temp_7 = true
1398
1523
  else
1399
- ____temp_5 = nil
1524
+ ____temp_7 = nil
1400
1525
  end
1401
- self[105] = ____temp_5
1526
+ self[107] = ____temp_7
1402
1527
  end
1403
1528
  },
1404
1529
  true
@@ -1407,9 +1532,9 @@ __TS__SetDescriptor(
1407
1532
  Unit.prototype,
1408
1533
  "color",
1409
1534
  {set = function(self, color)
1410
- setUnitColor(self.handle, color.handle)
1411
- if self[105] then
1412
- showUnitTeamGlow(self.handle, false)
1535
+ SetUnitColor(self.handle, color.handle)
1536
+ if self[107] then
1537
+ BlzShowUnitTeamGlow(self.handle, false)
1413
1538
  end
1414
1539
  end},
1415
1540
  true
@@ -1432,14 +1557,14 @@ __TS__SetDescriptor(
1432
1557
  "maxHealth",
1433
1558
  {
1434
1559
  get = function(self)
1435
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1560
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1436
1561
  end,
1437
1562
  set = function(self, maxHealth)
1438
- if maxHealth < 1 and self[102] ~= nil then
1439
- self[103] = (self[103] or 0) + (1 - maxHealth)
1563
+ if maxHealth < 1 and self[104] ~= nil then
1564
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1440
1565
  maxHealth = 1
1441
1566
  end
1442
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1567
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1443
1568
  end
1444
1569
  },
1445
1570
  true
@@ -1481,10 +1606,10 @@ __TS__SetDescriptor(
1481
1606
  "health",
1482
1607
  {
1483
1608
  get = function(self)
1484
- return GetWidgetLife(self.handle) - (self[104] or 0)
1609
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1485
1610
  end,
1486
1611
  set = function(self, health)
1487
- SetWidgetLife(self.handle, health + (self[104] or 0))
1612
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1488
1613
  end
1489
1614
  },
1490
1615
  true
@@ -1578,7 +1703,7 @@ __TS__SetDescriptor(
1578
1703
  "x",
1579
1704
  {
1580
1705
  get = function(self)
1581
- return getUnitX(self.handle)
1706
+ return self[108] or getUnitX(self.handle)
1582
1707
  end,
1583
1708
  set = function(self, v)
1584
1709
  SetUnitX(self.handle, v)
@@ -1591,7 +1716,7 @@ __TS__SetDescriptor(
1591
1716
  "y",
1592
1717
  {
1593
1718
  get = function(self)
1594
- return getUnitY(self.handle)
1719
+ return self[109] or getUnitY(self.handle)
1595
1720
  end,
1596
1721
  set = function(self, v)
1597
1722
  SetUnitY(self.handle, v)
@@ -1677,10 +1802,10 @@ __TS__SetDescriptor(
1677
1802
  "gold",
1678
1803
  {
1679
1804
  get = function(self)
1680
- return getResourceAmount(self.handle)
1805
+ return GetResourceAmount(self.handle)
1681
1806
  end,
1682
1807
  set = function(self, gold)
1683
- setResourceAmount(self.handle, gold)
1808
+ SetResourceAmount(self.handle, gold)
1684
1809
  end
1685
1810
  },
1686
1811
  true
@@ -1695,17 +1820,21 @@ __TS__SetDescriptor(
1695
1820
  set = function(self, isPaused)
1696
1821
  local handle = self.handle
1697
1822
  if isPaused and not IsUnitPaused(handle) then
1698
- self[100] = true
1699
- for _ = self[101] or 0, -1 do
1700
- BlzPauseUnitEx(handle, true)
1823
+ self[101] = true
1824
+ if (self[103] or 0) <= 0 then
1825
+ for _ = self[102] or 0, -1 do
1826
+ BlzPauseUnitEx(handle, true)
1827
+ end
1701
1828
  end
1702
1829
  PauseUnit(handle, true)
1703
1830
  elseif not isPaused and IsUnitPaused(handle) then
1704
1831
  PauseUnit(handle, false)
1705
- for _ = self[101] or 0, -1 do
1706
- BlzPauseUnitEx(handle, false)
1832
+ if (self[103] or 0) <= 0 then
1833
+ for _ = self[102] or 0, -1 do
1834
+ BlzPauseUnitEx(handle, false)
1835
+ end
1707
1836
  end
1708
- self[100] = nil
1837
+ self[101] = nil
1709
1838
  end
1710
1839
  end
1711
1840
  },
@@ -1808,6 +1937,19 @@ __TS__SetDescriptor(
1808
1937
  end},
1809
1938
  true
1810
1939
  )
1940
+ __TS__SetDescriptor(
1941
+ Unit.prototype,
1942
+ "movementType",
1943
+ {
1944
+ get = function(self)
1945
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1946
+ end,
1947
+ set = function(self, movementType)
1948
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1949
+ end
1950
+ },
1951
+ true
1952
+ )
1811
1953
  __TS__SetDescriptor(
1812
1954
  Unit.prototype,
1813
1955
  "pathing",
@@ -1989,6 +2131,14 @@ __TS__SetDescriptor(
1989
2131
  end},
1990
2132
  true
1991
2133
  )
2134
+ __TS__SetDescriptor(
2135
+ Unit.prototype,
2136
+ "targetAcquiredEvent",
2137
+ {get = function(self)
2138
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2139
+ end},
2140
+ true
2141
+ )
1992
2142
  __TS__SetDescriptor(
1993
2143
  Unit.prototype,
1994
2144
  "onSelect",
@@ -2124,25 +2274,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2124
2274
  InitializingEvent,
2125
2275
  function(event)
2126
2276
  local function listener(unit, id)
2127
- local ____GetSpellTargetUnit_result_8
2277
+ local ____GetSpellTargetUnit_result_10
2128
2278
  if GetSpellTargetUnit() then
2129
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2279
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2130
2280
  else
2131
- local ____GetSpellTargetItem_result_7
2281
+ local ____GetSpellTargetItem_result_9
2132
2282
  if GetSpellTargetItem() then
2133
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2283
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2134
2284
  else
2135
- local ____GetSpellTargetDestructable_result_6
2285
+ local ____GetSpellTargetDestructable_result_8
2136
2286
  if GetSpellTargetDestructable() then
2137
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2287
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2138
2288
  else
2139
- ____GetSpellTargetDestructable_result_6 = nil
2289
+ ____GetSpellTargetDestructable_result_8 = nil
2140
2290
  end
2141
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2291
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2142
2292
  end
2143
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2293
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2144
2294
  end
2145
- local target = ____GetSpellTargetUnit_result_8
2295
+ local target = ____GetSpellTargetUnit_result_10
2146
2296
  if target then
2147
2297
  invoke(event, unit, id, target)
2148
2298
  end
@@ -2314,10 +2464,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2314
2464
  ____exports.UnitTriggerEvent,
2315
2465
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2316
2466
  function()
2317
- local unit = ____exports.Unit:of(getOrderedUnit())
2318
- local issuedOrderId = getIssuedOrderId()
2319
- if unit ~= nil and unit.state == 1 then
2320
- return unit, issuedOrderId
2467
+ local handle = getOrderedUnit()
2468
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2469
+ local unit = ____exports.Unit:of(handle)
2470
+ if unit.state == 1 then
2471
+ return unit, getIssuedOrderId()
2472
+ end
2321
2473
  end
2322
2474
  return IgnoreEvent
2323
2475
  end
@@ -2348,38 +2500,57 @@ Unit.onDamaging = (function()
2348
2500
  if source and source.typeId == dummyUnitId then
2349
2501
  source = nil
2350
2502
  end
2351
- local target = BlzGetEventDamageTarget()
2503
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2504
+ local metadata = damageMetadataByTarget[target]
2505
+ damageMetadataByTarget[target] = nil
2352
2506
  local data = {
2353
2507
  amount = GetEventDamage(),
2354
- attackType = BlzGetEventAttackType(),
2508
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2355
2509
  damageType = BlzGetEventDamageType(),
2356
2510
  weaponType = BlzGetEventWeaponType(),
2357
- isAttack = BlzGetEventIsAttack()
2511
+ metadata = metadata,
2512
+ isAttack = BlzGetEventIsAttack(),
2513
+ originalAmount = GetEventDamage(),
2514
+ originalMetadata = metadata,
2515
+ preventRetaliation = damagingEventPreventRetaliation
2358
2516
  }
2359
2517
  if data.isAttack and source then
2360
- 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
2361
- if weapon == -1 then
2362
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2363
- weapon = 0
2364
- end
2365
- data.weapon = assert(source.weapons[weapon + 1])
2518
+ data.weapon = source:chooseWeapon(target)
2366
2519
  end
2367
2520
  if not data.isAttack or not source or not source._attackHandlers then
2368
2521
  invoke(
2369
2522
  event,
2370
2523
  source,
2371
- ____exports.Unit:of(target),
2524
+ target,
2372
2525
  setmetatable(
2373
2526
  {},
2374
2527
  {
2375
2528
  __index = data,
2376
2529
  __newindex = function(self, key, value)
2377
- damageSetters[key](value)
2530
+ local damageSetter = damageSetters[key]
2531
+ if damageSetter ~= nil then
2532
+ damageSetter(value)
2533
+ end
2378
2534
  data[key] = value
2379
2535
  end
2380
2536
  }
2381
2537
  )
2382
2538
  )
2539
+ if data[0] and source then
2540
+ local sourceOwner = source.owner.handle
2541
+ data[1] = sourceOwner
2542
+ local targetOwner = target.owner.handle
2543
+ data[2] = targetOwner
2544
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2545
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2546
+ data[3] = true
2547
+ end
2548
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2549
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2550
+ data[4] = true
2551
+ end
2552
+ end
2553
+ damagingEventByTarget[target] = data
2383
2554
  return
2384
2555
  end
2385
2556
  BlzSetEventDamage(0)
@@ -2387,7 +2558,7 @@ Unit.onDamaging = (function()
2387
2558
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2388
2559
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2389
2560
  local sourceOwner = source.owner.handle
2390
- local targetOwner = GetOwningPlayer(target)
2561
+ local targetOwner = target.owner.handle
2391
2562
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2392
2563
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2393
2564
  Timer:run(function()
@@ -2403,23 +2574,19 @@ Unit.onDamaging = (function()
2403
2574
  for ____, ____value in ipairs(source._attackHandlers) do
2404
2575
  local condition = ____value[1]
2405
2576
  local action = ____value[2]
2406
- if condition(
2407
- source,
2408
- ____exports.Unit:of(target),
2409
- data
2410
- ) then
2577
+ if condition(source, target, data) then
2411
2578
  action(
2412
2579
  source,
2413
- ____exports.Unit:of(target),
2580
+ target,
2414
2581
  setmetatable(
2415
2582
  {fire = function()
2416
2583
  UnitDamageTarget(
2417
2584
  source.handle,
2418
- target,
2585
+ target.handle,
2419
2586
  data.amount,
2420
2587
  true,
2421
2588
  true,
2422
- data.attackType,
2589
+ attackTypeToNative(data.attackType),
2423
2590
  data.damageType,
2424
2591
  data.weaponType
2425
2592
  )
@@ -2446,29 +2613,54 @@ Unit.onDamage = __TS__New(
2446
2613
  if source and source.typeId == dummyUnitId then
2447
2614
  source = nil
2448
2615
  end
2616
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2617
+ local damagingEvent = damagingEventByTarget[target]
2618
+ damagingEventByTarget[target] = nil
2449
2619
  local data = {
2450
2620
  amount = GetEventDamage(),
2451
- attackType = BlzGetEventAttackType(),
2621
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2452
2622
  damageType = BlzGetEventDamageType(),
2453
2623
  weaponType = BlzGetEventWeaponType(),
2624
+ metadata = damagingEvent and damagingEvent.metadata,
2454
2625
  isAttack = BlzGetEventIsAttack(),
2626
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2627
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2455
2628
  preventDeath = damageEventPreventDeath
2456
2629
  }
2630
+ if damagingEvent then
2631
+ for key, value in pairs(damagingEvent) do
2632
+ if isAttribute(key) then
2633
+ data[key] = value
2634
+ end
2635
+ end
2636
+ local sourceOwner = damagingEvent[1]
2637
+ if sourceOwner then
2638
+ local targetOwner = damagingEvent[2]
2639
+ if damagingEvent[3] then
2640
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2641
+ end
2642
+ if damagingEvent[4] then
2643
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2644
+ end
2645
+ end
2646
+ end
2457
2647
  local evData = setmetatable(
2458
2648
  {},
2459
2649
  {
2460
2650
  __index = data,
2461
2651
  __newindex = function(self, key, value)
2462
- damageSetters[key](value)
2652
+ local damageSetter = damageSetters[key]
2653
+ if damageSetter ~= nil then
2654
+ damageSetter(value)
2655
+ end
2463
2656
  data[key] = value
2464
2657
  end
2465
2658
  }
2466
2659
  )
2467
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2468
2660
  invoke(event, source, target, evData)
2469
2661
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2470
2662
  local bonusHealth = math.ceil(evData.amount)
2471
- target[104] = (target[104] or 0) + bonusHealth
2663
+ target[106] = (target[106] or 0) + bonusHealth
2472
2664
  BlzSetUnitMaxHP(
2473
2665
  target.handle,
2474
2666
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2482,7 +2674,7 @@ Unit.onDamage = __TS__New(
2482
2674
  evData[0],
2483
2675
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2484
2676
  )
2485
- target[104] = (target[104] or 0) - bonusHealth
2677
+ target[106] = (target[106] or 0) - bonusHealth
2486
2678
  SetWidgetLife(
2487
2679
  target.handle,
2488
2680
  GetWidgetLife(target.handle) - bonusHealth
@@ -2502,32 +2694,110 @@ Unit.onDamage = __TS__New(
2502
2694
  DestroyTrigger(trigger)
2503
2695
  end
2504
2696
  )
2505
- Unit.onItemDrop = __TS__New(
2697
+ Unit.itemDroppedEvent = __TS__New(
2506
2698
  ____exports.UnitTriggerEvent,
2507
2699
  EVENT_PLAYER_UNIT_DROP_ITEM,
2508
2700
  function()
2509
2701
  local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2702
+ local item = getManipulatedItem()
2703
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2704
+ return ____exports.Unit:of(unit), Item:of(item)
2512
2705
  end
2513
2706
  return IgnoreEvent
2514
2707
  end
2515
2708
  )
2516
- Unit.onItemPickup = __TS__New(
2709
+ Unit.itemPickedUpEvent = __TS__New(
2517
2710
  ____exports.UnitTriggerEvent,
2518
2711
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2519
2712
  function()
2520
- local unit = getTriggerUnit()
2521
- if getUnitTypeId(unit) ~= dummyUnitId then
2522
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2713
+ local unitHandle = getTriggerUnit()
2714
+ local itemHandle = getManipulatedItem()
2715
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2716
+ local unit = ____exports.Unit:of(unitHandle)
2717
+ local item = Item:of(itemHandle)
2718
+ if item.owner ~= unit then
2719
+ return unit, item
2720
+ end
2523
2721
  end
2524
2722
  return IgnoreEvent
2525
2723
  end
2526
2724
  )
2527
- Unit.onItemUse = __TS__New(
2725
+ Unit.itemUsedEvent = __TS__New(
2528
2726
  ____exports.UnitTriggerEvent,
2529
2727
  EVENT_PLAYER_UNIT_USE_ITEM,
2530
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2728
+ function()
2729
+ local unit = getTriggerUnit()
2730
+ local item = getManipulatedItem()
2731
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2732
+ return ____exports.Unit:of(unit), Item:of(item)
2733
+ end
2734
+ return IgnoreEvent
2735
+ end
2736
+ )
2737
+ Unit.itemStackedEvent = __TS__New(
2738
+ ____exports.UnitTriggerEvent,
2739
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2740
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2741
+ )
2742
+ __TS__ObjectDefineProperty(
2743
+ Unit,
2744
+ "itemChargesChangedEvent",
2745
+ {get = function(self)
2746
+ local event = __TS__New(Event)
2747
+ Item.chargesChangedEvent:addListener(function(item)
2748
+ local unit = item.owner
2749
+ if unit ~= nil then
2750
+ invoke(event, unit, item)
2751
+ end
2752
+ end)
2753
+ rawset(self, "itemChargesChangedEvent", event)
2754
+ return event
2755
+ end}
2756
+ )
2757
+ __TS__ObjectDefineProperty(
2758
+ Unit,
2759
+ "itemUseOrderEvent",
2760
+ {get = function(self)
2761
+ local event = __TS__New(Event)
2762
+ for order = orderId("useslot0"), orderId("useslot5") do
2763
+ local slot = order - orderId("useslot0")
2764
+ local function listener(unit)
2765
+ local item = unit.items[slot + 1]
2766
+ if item ~= nil then
2767
+ invoke(event, unit, item)
2768
+ end
2769
+ end
2770
+ self.onImmediateOrder[order]:addListener(listener)
2771
+ self.onTargetOrder[order]:addListener(listener)
2772
+ self.onPointOrder[order]:addListener(listener)
2773
+ end
2774
+ rawset(self, "itemUseOrderEvent", event)
2775
+ return event
2776
+ end}
2777
+ )
2778
+ __TS__ObjectDefineProperty(
2779
+ Unit,
2780
+ "itemMoveOrderEvent",
2781
+ {get = function(self)
2782
+ local event = __TS__New(Event)
2783
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2784
+ local slotTo = order - orderId("moveslot0")
2785
+ self.onTargetOrder[order]:addListener(function(unit, item)
2786
+ local slotFrom = unit.items:findSlot(item)
2787
+ if slotFrom ~= nil then
2788
+ invoke(
2789
+ event,
2790
+ unit,
2791
+ item,
2792
+ slotFrom,
2793
+ slotTo
2794
+ )
2795
+ end
2796
+ end)
2797
+ end
2798
+ rawset(self, "itemMoveOrderEvent", event)
2799
+ return event
2800
+ end}
2531
2801
  )
2532
2802
  __TS__ObjectDefineProperty(
2533
2803
  Unit,
@@ -2554,6 +2824,10 @@ __TS__ObjectDefineProperty(
2554
2824
  rawset(self, "destroyEvent", destroyEvent)
2555
2825
  return destroyEvent
2556
2826
  end}
2827
+ )
2828
+ Unit.synchronize = synchronizer(
2829
+ function(unit) return unit.syncId end,
2830
+ function(syncId) return unitBySyncId[syncId] end
2557
2831
  );
2558
2832
  (function(self)
2559
2833
  local leaveAbilityIds = postcompile(function()