warscript 0.0.1-dev.c59dd14 → 0.0.1-dev.c60b168

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 (241) hide show
  1. package/attributes.d.ts +5 -1
  2. package/attributes.lua +8 -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 +8 -1
  10. package/core/types/frame.lua +103 -13
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/image.d.ts +0 -1
  13. package/core/types/player.lua +3 -1
  14. package/core/types/playerCamera.d.ts +2 -0
  15. package/core/types/playerCamera.lua +79 -5
  16. package/core/types/sound.d.ts +17 -24
  17. package/core/types/sound.lua +99 -24
  18. package/core/types/timer.d.ts +8 -8
  19. package/core/types/timer.lua +39 -23
  20. package/core/types/unit.lua +8 -0
  21. package/core/util.d.ts +1 -1
  22. package/core/util.lua +18 -1
  23. package/decl/index.d.ts +1 -0
  24. package/decl/native.d.ts +844 -788
  25. package/engine/ability.d.ts +1 -1
  26. package/engine/behavior.d.ts +15 -10
  27. package/engine/behavior.lua +112 -33
  28. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  29. package/engine/behaviour/ability/always-enabled.lua +31 -0
  30. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  31. package/engine/behaviour/ability/apply-buff.lua +32 -0
  32. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  33. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  34. package/engine/behaviour/ability/damage.d.ts +39 -11
  35. package/engine/behaviour/ability/damage.lua +83 -37
  36. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  37. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  38. package/engine/behaviour/ability/heal.d.ts +33 -6
  39. package/engine/behaviour/ability/heal.lua +89 -10
  40. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  41. package/engine/behaviour/ability/instant-impact.lua +4 -19
  42. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  43. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  44. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  45. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  46. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  47. package/engine/behaviour/ability/restore-mana.lua +29 -0
  48. package/engine/behaviour/ability.d.ts +20 -4
  49. package/engine/behaviour/ability.lua +111 -47
  50. package/engine/behaviour/unit/stun-immunity.d.ts +5 -4
  51. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  52. package/engine/behaviour/unit.d.ts +40 -2
  53. package/engine/behaviour/unit.lua +208 -0
  54. package/engine/buff.d.ts +104 -44
  55. package/engine/buff.lua +453 -215
  56. package/engine/game-map.d.ts +7 -0
  57. package/engine/game-map.lua +32 -0
  58. package/engine/internal/ability.d.ts +23 -14
  59. package/engine/internal/ability.lua +128 -85
  60. package/engine/internal/item/ability.lua +162 -4
  61. package/engine/internal/item+owner.lua +12 -6
  62. package/engine/internal/item.d.ts +7 -4
  63. package/engine/internal/item.lua +141 -35
  64. package/engine/internal/mechanics/ability-duration.lua +1 -1
  65. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  66. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  67. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  68. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  69. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  70. package/engine/internal/misc/frame-coordinates.lua +21 -0
  71. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  72. package/engine/internal/misc/get-terrain-z.lua +11 -0
  73. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  74. package/engine/internal/misc/player-local-handle.lua +5 -0
  75. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  76. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  77. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  78. package/engine/internal/object-data/evasion-probability.lua +16 -0
  79. package/engine/internal/unit/ability.d.ts +45 -1
  80. package/engine/internal/unit/ability.lua +98 -14
  81. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  82. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  83. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  84. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  85. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  86. package/engine/internal/unit/allowed-targets.lua +9 -1
  87. package/engine/internal/unit/bonus.d.ts +11 -8
  88. package/engine/internal/unit/bonus.lua +23 -1
  89. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  90. package/engine/internal/unit/ignore-events-items.lua +5 -0
  91. package/engine/internal/unit/item.d.ts +24 -0
  92. package/engine/internal/unit/item.lua +78 -0
  93. package/engine/internal/unit/main-selected.d.ts +13 -0
  94. package/engine/internal/unit/main-selected.lua +51 -0
  95. package/engine/internal/unit/order.d.ts +20 -0
  96. package/engine/internal/unit/order.lua +136 -0
  97. package/engine/internal/unit+ability.lua +12 -3
  98. package/engine/internal/unit+damage.d.ts +2 -11
  99. package/engine/internal/unit+damage.lua +10 -14
  100. package/engine/internal/unit+spellSteal.lua +1 -2
  101. package/engine/internal/unit+transport.lua +4 -10
  102. package/engine/internal/unit-missile-launch.lua +33 -7
  103. package/engine/internal/unit.d.ts +55 -18
  104. package/engine/internal/unit.lua +392 -157
  105. package/engine/internal/utility.lua +12 -0
  106. package/engine/lightning.d.ts +12 -5
  107. package/engine/lightning.lua +48 -14
  108. package/engine/local-client.d.ts +7 -2
  109. package/engine/local-client.lua +82 -0
  110. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  111. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  112. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  113. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  114. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  115. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  116. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  117. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  118. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  119. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  120. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  121. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  122. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  123. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  124. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  125. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  126. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  127. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  128. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  129. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  130. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  131. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  132. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  133. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  134. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  135. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  136. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  137. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  138. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  139. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  140. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  141. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  142. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  143. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  144. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  145. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  146. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  147. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  148. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  149. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  150. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  151. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  152. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  153. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  154. package/engine/object-data/entry/ability-type/web.lua +52 -0
  155. package/engine/object-data/entry/ability-type.d.ts +19 -18
  156. package/engine/object-data/entry/ability-type.lua +90 -36
  157. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  158. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  159. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  160. package/engine/object-data/entry/buff-type.d.ts +6 -13
  161. package/engine/object-data/entry/buff-type.lua +13 -29
  162. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  163. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  164. package/engine/object-data/entry/item-type.d.ts +15 -2
  165. package/engine/object-data/entry/item-type.lua +93 -2
  166. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  167. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  168. package/engine/object-data/entry/sound-preset.lua +140 -0
  169. package/engine/object-data/entry/unit-type.d.ts +21 -6
  170. package/engine/object-data/entry/unit-type.lua +214 -93
  171. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  172. package/engine/object-data/entry/upgrade.d.ts +1 -2
  173. package/engine/object-data/entry/upgrade.lua +4 -4
  174. package/engine/object-data/entry.d.ts +18 -17
  175. package/engine/object-data/entry.lua +60 -32
  176. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  177. package/engine/object-field/ability.d.ts +28 -5
  178. package/engine/object-field/ability.lua +59 -5
  179. package/engine/object-field/unit.d.ts +57 -3
  180. package/engine/object-field/unit.lua +207 -7
  181. package/engine/object-field.d.ts +17 -7
  182. package/engine/object-field.lua +190 -90
  183. package/engine/random.d.ts +1 -5
  184. package/engine/standard/entries/buff-type.d.ts +3 -0
  185. package/engine/standard/entries/buff-type.lua +3 -0
  186. package/engine/standard/entries/sound-preset.d.ts +10 -0
  187. package/engine/standard/entries/sound-preset.lua +10 -0
  188. package/engine/standard/fields/ability.d.ts +2 -0
  189. package/engine/standard/fields/ability.lua +2 -0
  190. package/engine/standard/fields/unit.d.ts +4 -0
  191. package/engine/standard/fields/unit.lua +7 -0
  192. package/engine/text-tag.d.ts +36 -2
  193. package/engine/text-tag.lua +249 -10
  194. package/engine/unit.d.ts +4 -0
  195. package/engine/unit.lua +13 -2
  196. package/event.d.ts +2 -3
  197. package/event.lua +9 -5
  198. package/index.d.ts +1 -0
  199. package/index.lua +1 -0
  200. package/lualib_bundle.lua +146 -42
  201. package/math/vec2.d.ts +2 -9
  202. package/math.d.ts +0 -2
  203. package/net/socket.d.ts +7 -1
  204. package/net/socket.lua +45 -4
  205. package/network.d.ts +1 -0
  206. package/network.lua +3 -2
  207. package/objutil/ability.d.ts +0 -1
  208. package/objutil/buff.d.ts +0 -1
  209. package/objutil/buff.lua +2 -3
  210. package/objutil/object.d.ts +0 -1
  211. package/objutil/unit.d.ts +0 -1
  212. package/objutil/unit.lua +8 -0
  213. package/package.json +13 -13
  214. package/patch-lua.d.ts +0 -0
  215. package/patch-lua.lua +10 -0
  216. package/property.d.ts +55 -0
  217. package/property.lua +374 -0
  218. package/string.d.ts +16 -0
  219. package/string.lua +5 -0
  220. package/util/stream.d.ts +0 -1
  221. package/utility/arrays.d.ts +12 -5
  222. package/utility/arrays.lua +37 -3
  223. package/utility/bit-set.d.ts +0 -2
  224. package/utility/callback-array.d.ts +13 -0
  225. package/utility/callback-array.lua +46 -0
  226. package/utility/functions.d.ts +8 -0
  227. package/utility/functions.lua +13 -0
  228. package/utility/lazy.d.ts +2 -0
  229. package/utility/lazy.lua +14 -0
  230. package/utility/linked-set.d.ts +12 -3
  231. package/utility/linked-set.lua +8 -2
  232. package/utility/lua-maps.d.ts +5 -2
  233. package/utility/lua-maps.lua +20 -0
  234. package/utility/lua-sets.d.ts +3 -2
  235. package/utility/lua-sets.lua +7 -0
  236. package/utility/reflection.lua +11 -7
  237. package/utility/types.d.ts +1 -0
  238. package/core/mapbounds.d.ts +0 -8
  239. package/core/mapbounds.lua +0 -12
  240. package/core/types/order.d.ts +0 -25
  241. package/core/types/order.lua +0 -55
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
10
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
@@ -48,12 +51,21 @@ local ____arrays = require("utility.arrays")
48
51
  local forEach = ____arrays.forEach
49
52
  local ____math = require("math")
50
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
51
65
  local match = string.match
52
66
  local ____tostring = _G.tostring
53
67
  local setUnitAnimation = SetUnitAnimation
54
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
68
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
- local queueUnitAnimation = QueueUnitAnimation
57
69
  local getUnitIntegerField = BlzGetUnitIntegerField
58
70
  local getUnitRealField = BlzGetUnitRealField
59
71
  local getHeroStr = GetHeroStr
@@ -72,9 +84,9 @@ local setUnitScale = SetUnitScale
72
84
  local setUnitPosition = SetUnitPosition
73
85
  local setUnitTimeScale = SetUnitTimeScale
74
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
88
  local createUnit = CreateUnit
76
89
  local killUnit = KillUnit
77
- local setUnitExploded = SetUnitExploded
78
90
  local removeUnit = RemoveUnit
79
91
  local getUnitTypeId = GetUnitTypeId
80
92
  local isHeroUnitId = IsHeroUnitId
@@ -90,8 +102,6 @@ local getSpellTargetItem = GetSpellTargetItem
90
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
91
103
  local isUnitInRangeXY = IsUnitInRangeXY
92
104
  local isUnitInRange = IsUnitInRange
93
- local setResourceAmount = SetResourceAmount
94
- local getResourceAmount = GetResourceAmount
95
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
96
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
97
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -115,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
115
125
  local getIssuedOrderId = GetIssuedOrderId
116
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
117
127
  local unitAlive = UnitAlive
118
- local unitAddType = UnitAddType
119
- local unitRemoveType = UnitRemoveType
120
- local isUnitIllusion = IsUnitIllusion
121
- local isUnitType = IsUnitType
122
128
  local isUnitAlly = IsUnitAlly
123
129
  local isUnitEnemy = IsUnitEnemy
124
130
  local getOwningPlayer = GetOwningPlayer
125
- local setUnitColor = SetUnitColor
126
- local showUnitTeamGlow = BlzShowUnitTeamGlow
127
131
  ____exports.UnitClassification = {}
128
132
  local UnitClassification = ____exports.UnitClassification
129
133
  do
@@ -133,6 +137,7 @@ do
133
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
134
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
135
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
136
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
137
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
138
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -279,16 +284,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
284
  end
280
285
  local function dispatch(event, idGetter, argsGetter)
281
286
  local initialized = false
282
- local x = {}
283
287
  return setmetatable(
284
- x,
288
+ {},
285
289
  {
286
290
  __index = function(self, id)
287
291
  if type(id) ~= "number" then
288
292
  return event[id]
289
293
  end
290
294
  if not initialized then
291
- local invoke = Event.invoke
292
295
  event:addListener(function(...)
293
296
  local id = idGetter(...)
294
297
  local dispatched = rawget(self, id)
@@ -326,7 +329,6 @@ local function dispatchAbility(event)
326
329
  return event[id]
327
330
  end
328
331
  if not initialized then
329
- local invoke = Event.invoke
330
332
  event:addListener(function(unit, ability, ...)
331
333
  local dispatched = rawget(self, ability.typeId)
332
334
  if dispatched ~= nil then
@@ -343,6 +345,9 @@ local function dispatchAbility(event)
343
345
  }
344
346
  )
345
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
346
351
  local function damageEventPreventDeath(self, callback, ...)
347
352
  if self[0] ~= nil then
348
353
  return
@@ -354,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
359
  rawset(self, 1 + i, (select(i, ...)))
355
360
  end
356
361
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponType = BlzSetEventWeaponType
369
+ }
358
370
  local jlimitopByOperator = {
359
371
  [0] = LESS_THAN_OR_EQUAL,
360
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -432,6 +444,19 @@ __TS__SetDescriptor(
432
444
  },
433
445
  true
434
446
  )
447
+ __TS__SetDescriptor(
448
+ UnitWeapon.prototype,
449
+ "allowedTargetCombatClassifications",
450
+ {
451
+ get = function(self)
452
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
453
+ end,
454
+ set = function(self, allowedTargetCombatClassifications)
455
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
456
+ end
457
+ },
458
+ true
459
+ )
435
460
  __TS__SetDescriptor(
436
461
  UnitWeapon.prototype,
437
462
  "damageBase",
@@ -562,17 +587,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
587
  ____exports.Unit:of(unit)
563
588
  )
564
589
  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
590
  for i = 0, unitInventorySize(unit) - 1 do
577
591
  local item = unitItemInSlot(unit, i)
578
592
  if getItemAbility(item, abilityId) == ability then
@@ -630,15 +644,15 @@ for ____, player in ipairs(Player.all) do
630
644
  dummies[player] = dummy
631
645
  end
632
646
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
647
+ local counter = (unit[103] or 0) - 1
634
648
  if counter ~= 0 then
635
- unit[102] = counter
649
+ unit[103] = counter
636
650
  return
637
651
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
652
+ unit[103] = nil
653
+ local healthBonus = unit[104]
640
654
  if healthBonus ~= nil then
641
- unit[103] = nil
655
+ unit[104] = nil
642
656
  local handle = unit.handle
643
657
  BlzSetUnitMaxHP(
644
658
  handle,
@@ -646,12 +660,27 @@ local function delayHealthChecksCallback(unit)
646
660
  )
647
661
  end
648
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
649
675
  ____exports.Unit = __TS__Class()
650
676
  local Unit = ____exports.Unit
651
677
  Unit.name = "Unit"
652
678
  __TS__ClassExtends(Unit, Handle)
653
679
  function Unit.prototype.____constructor(self, handle)
654
680
  Handle.prototype.____constructor(self, handle)
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
655
684
  self._owner = Player:of(getOwningPlayer(handle))
656
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -664,6 +693,7 @@ function Unit.prototype.____constructor(self, handle)
664
693
  fourCC("Amrf")
665
694
  ))
666
695
  end
696
+ unitBySyncId[self.syncId] = self
667
697
  local ____ = self.abilities
668
698
  end
669
699
  function Unit.prototype.getEvent(self, event, collector)
@@ -682,6 +712,8 @@ function Unit.prototype.getEvent(self, event, collector)
682
712
  end
683
713
  function Unit.prototype.onDestroy(self)
684
714
  local handle = self.handle
715
+ self[107] = getUnitX(handle)
716
+ self[108] = getUnitY(handle)
685
717
  if not self._owner then
686
718
  self._owner = Player:of(getOwningPlayer(handle))
687
719
  end
@@ -749,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
781
  end}
750
782
  end
751
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- 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
754
786
  end
755
787
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
757
789
  end
758
790
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
760
792
  end
761
793
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
763
795
  end
764
796
  function Unit.prototype.isVisibleTo(self, player)
765
797
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
800
  return isUnitInvisible(self.handle, player.handle)
769
801
  end
770
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
803
+ local ____temp_3
772
804
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
774
806
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
776
808
  end
777
- return ____temp_1
809
+ return ____temp_3
778
810
  end
779
811
  function Unit.prototype.isAllyOf(self, unit)
780
812
  return isUnitAlly(
@@ -792,16 +824,28 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
824
  if type(animation) == "number" then
793
825
  setUnitAnimationByIndex(self.handle, animation)
794
826
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
828
  else
797
829
  setUnitAnimation(self.handle, animation)
798
830
  end
799
831
  end
832
+ function Unit.prototype.resetAnimation(self)
833
+ ResetUnitAnimation(self.handle)
834
+ end
800
835
  function Unit.prototype.queueAnimation(self, animation)
801
- 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
802
846
  end
803
847
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
848
+ self[103] = (self[103] or 0) + 1
805
849
  Timer:run(delayHealthChecksCallback, self)
806
850
  end
807
851
  function Unit.prototype.setPosition(self, x, y)
@@ -811,14 +855,21 @@ function Unit.prototype.isSelected(self, player)
811
855
  return IsUnitSelected(self.handle, player.handle)
812
856
  end
813
857
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
815
859
  killUnit(self.handle)
816
860
  end
817
861
  function Unit.prototype.kill(self)
818
862
  killUnit(self.handle)
819
863
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
864
+ function Unit.prototype.revive(self, x, y, doEffect)
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
870
+ end
871
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
872
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
822
873
  end
823
874
  function Unit.prototype.healTarget(self, target, amount)
824
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,20 +909,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
909
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
910
  end
860
911
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
912
+ return Item:of(unitItemInSlot(self.handle, slot))
862
913
  end
863
914
  function Unit.prototype.addAbility(self, abilityId)
864
- if unitAddAbility(self.handle, abilityId) then
865
- local ability = UnitAbility:of(
866
- checkNotNull(getUnitAbility(self.handle, abilityId)),
867
- abilityId,
868
- self
869
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
870
921
  local abilities = self.abilities
871
922
  abilities[#abilities + 1] = ability
872
- return ability
873
923
  end
874
- return nil
924
+ return ability
875
925
  end
876
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
877
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -886,28 +936,17 @@ function Unit.prototype.hasAbility(self, abilityId)
886
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
887
937
  end
888
938
  function Unit.prototype.getAbilityById(self, abilityId)
889
- local handle = self.handle
890
- if unitAddAbility(handle, abilityId) then
891
- assert(unitRemoveAbility(handle, abilityId))
892
- return nil
893
- end
894
- return UnitAbility:of(
895
- getUnitAbility(self.handle, abilityId),
896
- abilityId,
897
- self
898
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
899
941
  end
900
942
  function Unit.prototype.removeAbility(self, abilityId)
901
- if unitRemoveAbility(self.handle, abilityId) then
902
- local abilities = self.abilities
903
- for i = 1, #abilities do
904
- if abilities[i].typeId == abilityId then
905
- abilities[i]:destroy()
906
- tremove(abilities, i)
907
- return true
908
- 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
909
949
  end
910
- return true
911
950
  end
912
951
  return false
913
952
  end
@@ -923,12 +962,34 @@ end
923
962
  function Unit.prototype.endAbilityCooldown(self, abilityId)
924
963
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
925
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
926
980
  function Unit.prototype.interruptAttack(self)
927
981
  unitInterruptAttack(self.handle)
928
982
  end
929
983
  function Unit.prototype.interruptCast(self, abilityId)
930
- unitDisableAbility(self.handle, abilityId, true, false)
931
- 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
+ )
932
993
  end
933
994
  function Unit.prototype.getDistanceTo(self, target)
934
995
  local handle = self.handle
@@ -988,18 +1049,18 @@ function Unit.prototype.unpauseEx(self)
988
1049
  self:decrementStunCounter()
989
1050
  end
990
1051
  function Unit.prototype.incrementStunCounter(self)
991
- local stunCounter = self[101] or 0
992
- if not self[100] or stunCounter >= 0 then
1052
+ local stunCounter = self[102] or 0
1053
+ if not self[101] or stunCounter >= 0 then
993
1054
  BlzPauseUnitEx(self.handle, true)
994
1055
  end
995
- self[101] = stunCounter + 1
1056
+ self[102] = stunCounter + 1
996
1057
  end
997
1058
  function Unit.prototype.decrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 1 then
1059
+ local stunCounter = self[102] or 0
1060
+ if not self[101] or stunCounter >= 1 then
1000
1061
  BlzPauseUnitEx(self.handle, false)
1001
1062
  end
1002
- self[101] = stunCounter - 1
1063
+ self[102] = stunCounter - 1
1003
1064
  end
1004
1065
  function Unit.create(self, owner, id, x, y, facing, skinId)
1005
1066
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1101,8 +1162,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1101
1162
  )
1102
1163
  return targetCollection
1103
1164
  end
1104
- function Unit.getSelectionOf(self, player)
1105
- targetCollection = {}
1165
+ function Unit.getSelectionOf(self, player, target)
1166
+ if target == nil then
1167
+ target = {}
1168
+ end
1169
+ targetCollection = target
1106
1170
  targetCollectionNextIndex = 1
1107
1171
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1108
1172
  return targetCollection
@@ -1124,6 +1188,9 @@ end
1124
1188
  function Unit.prototype.__tostring(self)
1125
1189
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1126
1190
  end
1191
+ function Unit.getBySyncId(self, syncId)
1192
+ return unitBySyncId[syncId]
1193
+ end
1127
1194
  __TS__SetDescriptor(
1128
1195
  Unit.prototype,
1129
1196
  "_deltas",
@@ -1183,7 +1250,15 @@ __TS__SetDescriptor(
1183
1250
  Unit.prototype,
1184
1251
  "isIllusion",
1185
1252
  {get = function(self)
1186
- 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")
1187
1262
  end},
1188
1263
  true
1189
1264
  )
@@ -1260,6 +1335,19 @@ __TS__SetDescriptor(
1260
1335
  },
1261
1336
  true
1262
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
+ )
1263
1351
  __TS__SetDescriptor(
1264
1352
  Unit.prototype,
1265
1353
  "strengthBase",
@@ -1381,17 +1469,17 @@ __TS__SetDescriptor(
1381
1469
  "isTeamGlowVisible",
1382
1470
  {
1383
1471
  get = function(self)
1384
- return not self[105]
1472
+ return not self[106]
1385
1473
  end,
1386
1474
  set = function(self, isTeamGlowVisible)
1387
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1388
- local ____temp_2
1475
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1476
+ local ____temp_7
1389
1477
  if not isTeamGlowVisible then
1390
- ____temp_2 = true
1478
+ ____temp_7 = true
1391
1479
  else
1392
- ____temp_2 = nil
1480
+ ____temp_7 = nil
1393
1481
  end
1394
- self[105] = ____temp_2
1482
+ self[106] = ____temp_7
1395
1483
  end
1396
1484
  },
1397
1485
  true
@@ -1400,9 +1488,9 @@ __TS__SetDescriptor(
1400
1488
  Unit.prototype,
1401
1489
  "color",
1402
1490
  {set = function(self, color)
1403
- setUnitColor(self.handle, color.handle)
1404
- if self[105] then
1405
- showUnitTeamGlow(self.handle, false)
1491
+ SetUnitColor(self.handle, color.handle)
1492
+ if self[106] then
1493
+ BlzShowUnitTeamGlow(self.handle, false)
1406
1494
  end
1407
1495
  end},
1408
1496
  true
@@ -1425,14 +1513,14 @@ __TS__SetDescriptor(
1425
1513
  "maxHealth",
1426
1514
  {
1427
1515
  get = function(self)
1428
- 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)
1429
1517
  end,
1430
1518
  set = function(self, maxHealth)
1431
- if maxHealth < 1 and self[102] ~= nil then
1432
- 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)
1433
1521
  maxHealth = 1
1434
1522
  end
1435
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1523
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1436
1524
  end
1437
1525
  },
1438
1526
  true
@@ -1474,10 +1562,10 @@ __TS__SetDescriptor(
1474
1562
  "health",
1475
1563
  {
1476
1564
  get = function(self)
1477
- return GetWidgetLife(self.handle) - (self[104] or 0)
1565
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1478
1566
  end,
1479
1567
  set = function(self, health)
1480
- SetWidgetLife(self.handle, health + (self[104] or 0))
1568
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1481
1569
  end
1482
1570
  },
1483
1571
  true
@@ -1571,7 +1659,7 @@ __TS__SetDescriptor(
1571
1659
  "x",
1572
1660
  {
1573
1661
  get = function(self)
1574
- return getUnitX(self.handle)
1662
+ return self[107] or getUnitX(self.handle)
1575
1663
  end,
1576
1664
  set = function(self, v)
1577
1665
  SetUnitX(self.handle, v)
@@ -1584,7 +1672,7 @@ __TS__SetDescriptor(
1584
1672
  "y",
1585
1673
  {
1586
1674
  get = function(self)
1587
- return getUnitY(self.handle)
1675
+ return self[108] or getUnitY(self.handle)
1588
1676
  end,
1589
1677
  set = function(self, v)
1590
1678
  SetUnitY(self.handle, v)
@@ -1670,10 +1758,10 @@ __TS__SetDescriptor(
1670
1758
  "gold",
1671
1759
  {
1672
1760
  get = function(self)
1673
- return getResourceAmount(self.handle)
1761
+ return GetResourceAmount(self.handle)
1674
1762
  end,
1675
1763
  set = function(self, gold)
1676
- setResourceAmount(self.handle, gold)
1764
+ SetResourceAmount(self.handle, gold)
1677
1765
  end
1678
1766
  },
1679
1767
  true
@@ -1688,17 +1776,17 @@ __TS__SetDescriptor(
1688
1776
  set = function(self, isPaused)
1689
1777
  local handle = self.handle
1690
1778
  if isPaused and not IsUnitPaused(handle) then
1691
- self[100] = true
1692
- for _ = self[101] or 0, -1 do
1779
+ self[101] = true
1780
+ for _ = self[102] or 0, -1 do
1693
1781
  BlzPauseUnitEx(handle, true)
1694
1782
  end
1695
1783
  PauseUnit(handle, true)
1696
1784
  elseif not isPaused and IsUnitPaused(handle) then
1697
1785
  PauseUnit(handle, false)
1698
- for _ = self[101] or 0, -1 do
1786
+ for _ = self[102] or 0, -1 do
1699
1787
  BlzPauseUnitEx(handle, false)
1700
1788
  end
1701
- self[100] = nil
1789
+ self[101] = nil
1702
1790
  end
1703
1791
  end
1704
1792
  },
@@ -1801,6 +1889,19 @@ __TS__SetDescriptor(
1801
1889
  end},
1802
1890
  true
1803
1891
  )
1892
+ __TS__SetDescriptor(
1893
+ Unit.prototype,
1894
+ "movementType",
1895
+ {
1896
+ get = function(self)
1897
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1898
+ end,
1899
+ set = function(self, movementType)
1900
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1901
+ end
1902
+ },
1903
+ true
1904
+ )
1804
1905
  __TS__SetDescriptor(
1805
1906
  Unit.prototype,
1806
1907
  "pathing",
@@ -1982,6 +2083,14 @@ __TS__SetDescriptor(
1982
2083
  end},
1983
2084
  true
1984
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
+ )
1985
2094
  __TS__SetDescriptor(
1986
2095
  Unit.prototype,
1987
2096
  "onSelect",
@@ -2055,7 +2164,6 @@ Unit.onDecay = __TS__New(
2055
2164
  Unit.onResurrect = __TS__New(
2056
2165
  InitializingEvent,
2057
2166
  function(event)
2058
- local invoke = Event.invoke
2059
2167
  local dead = setmetatable({}, {__mode = "k"})
2060
2168
  ____exports.Unit.deathEvent:addListener(function(unit)
2061
2169
  dead[unit] = true
@@ -2071,10 +2179,15 @@ Unit.onResurrect = __TS__New(
2071
2179
  Unit.morphEvent = __TS__New(
2072
2180
  InitializingEvent,
2073
2181
  function(event)
2182
+ local function ifNotLeft(unit)
2183
+ local handle = unit.handle
2184
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2185
+ invoke(event, unit)
2186
+ end
2187
+ end
2074
2188
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2075
2189
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2076
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2077
- Timer:run(Event.invoke, event, unit)
2190
+ Timer:run(ifNotLeft, unit)
2078
2191
  end
2079
2192
  end)
2080
2193
  end
@@ -2112,27 +2225,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2112
2225
  Unit.onTargetCast = dispatchId(__TS__New(
2113
2226
  InitializingEvent,
2114
2227
  function(event)
2115
- local invoke = Event.invoke
2116
2228
  local function listener(unit, id)
2117
- local ____GetSpellTargetUnit_result_5
2229
+ local ____GetSpellTargetUnit_result_10
2118
2230
  if GetSpellTargetUnit() then
2119
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2231
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2120
2232
  else
2121
- local ____GetSpellTargetItem_result_4
2233
+ local ____GetSpellTargetItem_result_9
2122
2234
  if GetSpellTargetItem() then
2123
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2235
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2124
2236
  else
2125
- local ____GetSpellTargetDestructable_result_3
2237
+ local ____GetSpellTargetDestructable_result_8
2126
2238
  if GetSpellTargetDestructable() then
2127
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2239
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2128
2240
  else
2129
- ____GetSpellTargetDestructable_result_3 = nil
2241
+ ____GetSpellTargetDestructable_result_8 = nil
2130
2242
  end
2131
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2243
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2132
2244
  end
2133
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2245
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2134
2246
  end
2135
- local target = ____GetSpellTargetUnit_result_5
2247
+ local target = ____GetSpellTargetUnit_result_10
2136
2248
  if target then
2137
2249
  invoke(event, unit, id, target)
2138
2250
  end
@@ -2304,10 +2416,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2304
2416
  ____exports.UnitTriggerEvent,
2305
2417
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2306
2418
  function()
2307
- local unit = ____exports.Unit:of(getOrderedUnit())
2308
- local issuedOrderId = getIssuedOrderId()
2309
- if unit ~= nil and unit.state == 1 then
2310
- 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
2311
2425
  end
2312
2426
  return IgnoreEvent
2313
2427
  end
@@ -2329,7 +2443,6 @@ Unit.autoAttackStartEvent = __TS__New(
2329
2443
  )
2330
2444
  Unit.onDamaging = (function()
2331
2445
  local event = __TS__New(Event)
2332
- local invoke = Event.invoke
2333
2446
  local trigger = CreateTrigger()
2334
2447
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2335
2448
  TriggerAddCondition(
@@ -2339,13 +2452,19 @@ Unit.onDamaging = (function()
2339
2452
  if source and source.typeId == dummyUnitId then
2340
2453
  source = nil
2341
2454
  end
2342
- local target = BlzGetEventDamageTarget()
2455
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2456
+ local metadata = damageMetadataByTarget[target]
2457
+ damageMetadataByTarget[target] = nil
2343
2458
  local data = {
2344
2459
  amount = GetEventDamage(),
2345
- attackType = BlzGetEventAttackType(),
2460
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2346
2461
  damageType = BlzGetEventDamageType(),
2347
2462
  weaponType = BlzGetEventWeaponType(),
2348
- isAttack = BlzGetEventIsAttack()
2463
+ metadata = metadata,
2464
+ isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2466
+ originalMetadata = metadata,
2467
+ preventRetaliation = damagingEventPreventRetaliation
2349
2468
  }
2350
2469
  if data.isAttack and source then
2351
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
@@ -2359,18 +2478,36 @@ Unit.onDamaging = (function()
2359
2478
  invoke(
2360
2479
  event,
2361
2480
  source,
2362
- ____exports.Unit:of(target),
2481
+ target,
2363
2482
  setmetatable(
2364
2483
  {},
2365
2484
  {
2366
2485
  __index = data,
2367
2486
  __newindex = function(self, key, value)
2368
- damageSetters[key](value)
2487
+ local damageSetter = damageSetters[key]
2488
+ if damageSetter ~= nil then
2489
+ damageSetter(value)
2490
+ end
2369
2491
  data[key] = value
2370
2492
  end
2371
2493
  }
2372
2494
  )
2373
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
2374
2511
  return
2375
2512
  end
2376
2513
  BlzSetEventDamage(0)
@@ -2378,7 +2515,7 @@ Unit.onDamaging = (function()
2378
2515
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2379
2516
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2380
2517
  local sourceOwner = source.owner.handle
2381
- local targetOwner = GetOwningPlayer(target)
2518
+ local targetOwner = target.owner.handle
2382
2519
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2383
2520
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2384
2521
  Timer:run(function()
@@ -2394,23 +2531,19 @@ Unit.onDamaging = (function()
2394
2531
  for ____, ____value in ipairs(source._attackHandlers) do
2395
2532
  local condition = ____value[1]
2396
2533
  local action = ____value[2]
2397
- if condition(
2398
- source,
2399
- ____exports.Unit:of(target),
2400
- data
2401
- ) then
2534
+ if condition(source, target, data) then
2402
2535
  action(
2403
2536
  source,
2404
- ____exports.Unit:of(target),
2537
+ target,
2405
2538
  setmetatable(
2406
2539
  {fire = function()
2407
2540
  UnitDamageTarget(
2408
2541
  source.handle,
2409
- target,
2542
+ target.handle,
2410
2543
  data.amount,
2411
2544
  true,
2412
2545
  true,
2413
- data.attackType,
2546
+ attackTypeToNative(data.attackType),
2414
2547
  data.damageType,
2415
2548
  data.weaponType
2416
2549
  )
@@ -2428,7 +2561,6 @@ end)()
2428
2561
  Unit.onDamage = __TS__New(
2429
2562
  InitializingEvent,
2430
2563
  function(event)
2431
- local invoke = Event.invoke
2432
2564
  local trigger = CreateTrigger()
2433
2565
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2434
2566
  TriggerAddCondition(
@@ -2438,29 +2570,54 @@ Unit.onDamage = __TS__New(
2438
2570
  if source and source.typeId == dummyUnitId then
2439
2571
  source = nil
2440
2572
  end
2573
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2574
+ local damagingEvent = damagingEventByTarget[target]
2575
+ damagingEventByTarget[target] = nil
2441
2576
  local data = {
2442
2577
  amount = GetEventDamage(),
2443
- attackType = BlzGetEventAttackType(),
2578
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2444
2579
  damageType = BlzGetEventDamageType(),
2445
2580
  weaponType = BlzGetEventWeaponType(),
2581
+ metadata = damagingEvent and damagingEvent.metadata,
2446
2582
  isAttack = BlzGetEventIsAttack(),
2583
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2584
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2447
2585
  preventDeath = damageEventPreventDeath
2448
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
2449
2604
  local evData = setmetatable(
2450
2605
  {},
2451
2606
  {
2452
2607
  __index = data,
2453
2608
  __newindex = function(self, key, value)
2454
- damageSetters[key](value)
2609
+ local damageSetter = damageSetters[key]
2610
+ if damageSetter ~= nil then
2611
+ damageSetter(value)
2612
+ end
2455
2613
  data[key] = value
2456
2614
  end
2457
2615
  }
2458
2616
  )
2459
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2460
2617
  invoke(event, source, target, evData)
2461
2618
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2462
2619
  local bonusHealth = math.ceil(evData.amount)
2463
- target[104] = (target[104] or 0) + bonusHealth
2620
+ target[105] = (target[105] or 0) + bonusHealth
2464
2621
  BlzSetUnitMaxHP(
2465
2622
  target.handle,
2466
2623
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2474,7 +2631,7 @@ Unit.onDamage = __TS__New(
2474
2631
  evData[0],
2475
2632
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2476
2633
  )
2477
- target[104] = (target[104] or 0) - bonusHealth
2634
+ target[105] = (target[105] or 0) - bonusHealth
2478
2635
  SetWidgetLife(
2479
2636
  target.handle,
2480
2637
  GetWidgetLife(target.handle) - bonusHealth
@@ -2494,32 +2651,110 @@ Unit.onDamage = __TS__New(
2494
2651
  DestroyTrigger(trigger)
2495
2652
  end
2496
2653
  )
2497
- Unit.onItemDrop = __TS__New(
2654
+ Unit.itemDroppedEvent = __TS__New(
2498
2655
  ____exports.UnitTriggerEvent,
2499
2656
  EVENT_PLAYER_UNIT_DROP_ITEM,
2500
2657
  function()
2501
2658
  local unit = getTriggerUnit()
2502
- if getUnitTypeId(unit) ~= dummyUnitId then
2503
- 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)
2504
2662
  end
2505
2663
  return IgnoreEvent
2506
2664
  end
2507
2665
  )
2508
- Unit.onItemPickup = __TS__New(
2666
+ Unit.itemPickedUpEvent = __TS__New(
2509
2667
  ____exports.UnitTriggerEvent,
2510
2668
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2511
2669
  function()
2512
- local unit = getTriggerUnit()
2513
- if getUnitTypeId(unit) ~= dummyUnitId then
2514
- 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
2515
2678
  end
2516
2679
  return IgnoreEvent
2517
2680
  end
2518
2681
  )
2519
- Unit.onItemUse = __TS__New(
2682
+ Unit.itemUsedEvent = __TS__New(
2520
2683
  ____exports.UnitTriggerEvent,
2521
2684
  EVENT_PLAYER_UNIT_USE_ITEM,
2522
- 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
2693
+ )
2694
+ Unit.itemStackedEvent = __TS__New(
2695
+ ____exports.UnitTriggerEvent,
2696
+ EVENT_PLAYER_UNIT_STACK_ITEM,
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}
2523
2758
  )
2524
2759
  __TS__ObjectDefineProperty(
2525
2760
  Unit,