warscript 0.0.1-dev.ee2345e → 0.0.1-dev.f024cc2

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 (248) 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/missile.d.ts +2 -2
  14. package/core/types/missile.lua +8 -2
  15. package/core/types/player.lua +3 -1
  16. package/core/types/playerCamera.d.ts +2 -0
  17. package/core/types/playerCamera.lua +79 -5
  18. package/core/types/sound.d.ts +17 -24
  19. package/core/types/sound.lua +99 -24
  20. package/core/types/timer.d.ts +8 -8
  21. package/core/types/timer.lua +25 -23
  22. package/core/types/unit.lua +8 -0
  23. package/core/util.d.ts +1 -1
  24. package/core/util.lua +18 -1
  25. package/decl/index.d.ts +1 -0
  26. package/decl/native.d.ts +844 -788
  27. package/engine/ability.d.ts +1 -1
  28. package/engine/behavior.d.ts +12 -10
  29. package/engine/behavior.lua +59 -33
  30. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  31. package/engine/behaviour/ability/always-enabled.lua +31 -0
  32. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  33. package/engine/behaviour/ability/apply-buff.lua +32 -0
  34. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  35. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  36. package/engine/behaviour/ability/damage.d.ts +39 -11
  37. package/engine/behaviour/ability/damage.lua +83 -37
  38. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  39. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  40. package/engine/behaviour/ability/heal.d.ts +33 -6
  41. package/engine/behaviour/ability/heal.lua +89 -10
  42. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  43. package/engine/behaviour/ability/instant-impact.lua +4 -15
  44. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  45. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  46. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  47. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  48. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  49. package/engine/behaviour/ability/restore-mana.lua +29 -0
  50. package/engine/behaviour/ability.d.ts +27 -4
  51. package/engine/behaviour/ability.lua +152 -26
  52. package/engine/behaviour/unit/stun-immunity.d.ts +5 -4
  53. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  54. package/engine/behaviour/unit.d.ts +36 -2
  55. package/engine/behaviour/unit.lua +186 -0
  56. package/engine/buff.d.ts +104 -41
  57. package/engine/buff.lua +471 -212
  58. package/engine/game-map.d.ts +7 -0
  59. package/engine/game-map.lua +32 -0
  60. package/engine/internal/ability.d.ts +20 -13
  61. package/engine/internal/ability.lua +103 -76
  62. package/engine/internal/item/ability.lua +162 -4
  63. package/engine/internal/item+owner.lua +12 -6
  64. package/engine/internal/item.d.ts +7 -4
  65. package/engine/internal/item.lua +131 -28
  66. package/engine/internal/mechanics/ability-duration.lua +1 -1
  67. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  68. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  69. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  70. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  71. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  72. package/engine/internal/misc/frame-coordinates.lua +21 -0
  73. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  74. package/engine/internal/misc/get-terrain-z.lua +11 -0
  75. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  76. package/engine/internal/misc/player-local-handle.lua +5 -0
  77. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  78. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  79. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  80. package/engine/internal/object-data/evasion-probability.lua +16 -0
  81. package/engine/internal/unit/ability.d.ts +45 -1
  82. package/engine/internal/unit/ability.lua +98 -14
  83. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  84. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  85. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  86. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  87. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  88. package/engine/internal/unit/allowed-targets.lua +9 -1
  89. package/engine/internal/unit/bonus.d.ts +11 -8
  90. package/engine/internal/unit/bonus.lua +23 -1
  91. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  92. package/engine/internal/unit/ignore-events-items.lua +5 -0
  93. package/engine/internal/unit/item.d.ts +24 -0
  94. package/engine/internal/unit/item.lua +78 -0
  95. package/engine/internal/unit/main-selected.d.ts +13 -0
  96. package/engine/internal/unit/main-selected.lua +51 -0
  97. package/engine/internal/unit/order.d.ts +20 -0
  98. package/engine/internal/unit/order.lua +136 -0
  99. package/engine/internal/unit+ability.lua +3 -3
  100. package/engine/internal/unit+damage.d.ts +2 -11
  101. package/engine/internal/unit+damage.lua +10 -14
  102. package/engine/internal/unit+spellSteal.lua +1 -2
  103. package/engine/internal/unit+transport.lua +4 -10
  104. package/engine/internal/unit-missile-launch.lua +33 -7
  105. package/engine/internal/unit.d.ts +87 -22
  106. package/engine/internal/unit.lua +585 -195
  107. package/engine/internal/utility.lua +12 -0
  108. package/engine/lightning.d.ts +12 -5
  109. package/engine/lightning.lua +48 -14
  110. package/engine/local-client.d.ts +7 -2
  111. package/engine/local-client.lua +82 -0
  112. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  113. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  114. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  115. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  116. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  117. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  118. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  119. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  120. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  121. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  122. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  123. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  124. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  125. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  126. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  127. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  128. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  129. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  130. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  131. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  132. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  133. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  134. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  135. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  136. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  137. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  138. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  139. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  140. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  141. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  142. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  143. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  144. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  145. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  146. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  147. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  148. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  149. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  150. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  151. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  152. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  153. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  154. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  155. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  156. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  157. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  158. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  159. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  160. package/engine/object-data/entry/ability-type/web.lua +52 -0
  161. package/engine/object-data/entry/ability-type.d.ts +19 -18
  162. package/engine/object-data/entry/ability-type.lua +90 -36
  163. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  164. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  165. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  166. package/engine/object-data/entry/buff-type.d.ts +6 -13
  167. package/engine/object-data/entry/buff-type.lua +13 -29
  168. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  169. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  170. package/engine/object-data/entry/item-type.d.ts +15 -2
  171. package/engine/object-data/entry/item-type.lua +93 -2
  172. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  173. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  174. package/engine/object-data/entry/sound-preset.lua +140 -0
  175. package/engine/object-data/entry/unit-type.d.ts +58 -7
  176. package/engine/object-data/entry/unit-type.lua +480 -75
  177. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  178. package/engine/object-data/entry/upgrade.d.ts +1 -2
  179. package/engine/object-data/entry/upgrade.lua +4 -4
  180. package/engine/object-data/entry.d.ts +18 -17
  181. package/engine/object-data/entry.lua +60 -32
  182. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  183. package/engine/object-field/ability.d.ts +26 -3
  184. package/engine/object-field/ability.lua +54 -1
  185. package/engine/object-field/unit.d.ts +57 -3
  186. package/engine/object-field/unit.lua +207 -7
  187. package/engine/object-field.d.ts +17 -7
  188. package/engine/object-field.lua +187 -89
  189. package/engine/random.d.ts +1 -0
  190. package/engine/random.lua +9 -0
  191. package/engine/standard/entries/buff-type.d.ts +3 -0
  192. package/engine/standard/entries/buff-type.lua +3 -0
  193. package/engine/standard/entries/sound-preset.d.ts +10 -0
  194. package/engine/standard/entries/sound-preset.lua +10 -0
  195. package/engine/standard/entries/unit-type.d.ts +39 -1
  196. package/engine/standard/entries/unit-type.lua +39 -1
  197. package/engine/standard/fields/ability.d.ts +3 -1
  198. package/engine/standard/fields/ability.lua +3 -1
  199. package/engine/standard/fields/unit.d.ts +4 -0
  200. package/engine/standard/fields/unit.lua +7 -0
  201. package/engine/text-tag.d.ts +36 -2
  202. package/engine/text-tag.lua +249 -10
  203. package/engine/unit.d.ts +4 -0
  204. package/engine/unit.lua +13 -2
  205. package/event.d.ts +2 -3
  206. package/event.lua +9 -5
  207. package/index.d.ts +1 -0
  208. package/index.lua +1 -0
  209. package/lualib_bundle.lua +146 -42
  210. package/math/vec2.d.ts +2 -9
  211. package/math.d.ts +0 -2
  212. package/net/socket.d.ts +7 -1
  213. package/net/socket.lua +45 -4
  214. package/network.d.ts +1 -0
  215. package/network.lua +3 -2
  216. package/objutil/ability.d.ts +0 -1
  217. package/objutil/buff.d.ts +0 -1
  218. package/objutil/buff.lua +2 -3
  219. package/objutil/object.d.ts +0 -1
  220. package/objutil/unit.d.ts +0 -1
  221. package/objutil/unit.lua +8 -0
  222. package/package.json +13 -14
  223. package/patch-lua.d.ts +0 -0
  224. package/patch-lua.lua +10 -0
  225. package/property.d.ts +55 -0
  226. package/property.lua +374 -0
  227. package/string.d.ts +30 -0
  228. package/string.lua +14 -0
  229. package/util/stream.d.ts +0 -1
  230. package/utility/arrays.d.ts +12 -5
  231. package/utility/arrays.lua +37 -3
  232. package/utility/bit-set.d.ts +0 -2
  233. package/utility/functions.d.ts +8 -0
  234. package/utility/functions.lua +13 -0
  235. package/utility/lazy.d.ts +2 -0
  236. package/utility/lazy.lua +14 -0
  237. package/utility/linked-set.d.ts +12 -3
  238. package/utility/linked-set.lua +8 -2
  239. package/utility/lua-maps.d.ts +5 -2
  240. package/utility/lua-maps.lua +20 -0
  241. package/utility/lua-sets.d.ts +3 -2
  242. package/utility/lua-sets.lua +7 -0
  243. package/utility/reflection.lua +11 -7
  244. package/utility/types.d.ts +1 -0
  245. package/core/mapbounds.d.ts +0 -8
  246. package/core/mapbounds.lua +0 -12
  247. package/core/types/order.d.ts +0 -25
  248. package/core/types/order.lua +0 -55
@@ -5,9 +5,12 @@ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
8
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
9
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
- local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
13
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -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,10 @@ 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
105
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
106
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
107
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
108
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
109
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
110
  local unitDisableAbility = BlzUnitDisableAbility
97
111
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -111,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
111
125
  local getIssuedOrderId = GetIssuedOrderId
112
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
113
127
  local unitAlive = UnitAlive
114
- local unitAddType = UnitAddType
115
- local unitRemoveType = UnitRemoveType
116
- local isUnitIllusion = IsUnitIllusion
117
- local isUnitType = IsUnitType
118
128
  local isUnitAlly = IsUnitAlly
119
129
  local isUnitEnemy = IsUnitEnemy
120
130
  local getOwningPlayer = GetOwningPlayer
121
- local setUnitColor = SetUnitColor
122
- local showUnitTeamGlow = BlzShowUnitTeamGlow
123
131
  ____exports.UnitClassification = {}
124
132
  local UnitClassification = ____exports.UnitClassification
125
133
  do
@@ -129,6 +137,7 @@ do
129
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
130
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
131
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
132
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
133
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
134
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -275,16 +284,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
284
  end
276
285
  local function dispatch(event, idGetter, argsGetter)
277
286
  local initialized = false
278
- local x = {}
279
287
  return setmetatable(
280
- x,
288
+ {},
281
289
  {
282
290
  __index = function(self, id)
283
291
  if type(id) ~= "number" then
284
292
  return event[id]
285
293
  end
286
294
  if not initialized then
287
- local invoke = Event.invoke
288
295
  event:addListener(function(...)
289
296
  local id = idGetter(...)
290
297
  local dispatched = rawget(self, id)
@@ -322,7 +329,6 @@ local function dispatchAbility(event)
322
329
  return event[id]
323
330
  end
324
331
  if not initialized then
325
- local invoke = Event.invoke
326
332
  event:addListener(function(unit, ability, ...)
327
333
  local dispatched = rawget(self, ability.typeId)
328
334
  if dispatched ~= nil then
@@ -339,6 +345,9 @@ local function dispatchAbility(event)
339
345
  }
340
346
  )
341
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
342
351
  local function damageEventPreventDeath(self, callback, ...)
343
352
  if self[0] ~= nil then
344
353
  return
@@ -350,7 +359,14 @@ local function damageEventPreventDeath(self, callback, ...)
350
359
  rawset(self, 1 + i, (select(i, ...)))
351
360
  end
352
361
  end
353
- 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
+ }
354
370
  local jlimitopByOperator = {
355
371
  [0] = LESS_THAN_OR_EQUAL,
356
372
  [1] = LESS_THAN_OR_EQUAL,
@@ -387,51 +403,171 @@ local getters = {
387
403
  return BlzGetUnitArmor(unit)
388
404
  end
389
405
  }
390
- local weaponGetters = {
391
- index = function(self, handle, index)
392
- return index
393
- end,
394
- cooldown = function(self, handle, index)
395
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index)
396
- end,
397
- projectileArc = function(self, handle, index)
398
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index)
399
- end,
400
- projectileArt = function(self, handle, index)
401
- return BlzGetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index)
402
- end,
403
- projectileSpeed = function(self, handle, index)
404
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index)
405
- end,
406
- attackPoint = function(self, handle, index)
407
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index)
408
- end
409
- }
410
- local weaponSetters = {
411
- cooldown = function(self, handle, index, value)
412
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index, value))
413
- end,
414
- projectileArc = function(self, handle, index, value)
415
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index, value))
416
- end,
417
- projectileArt = function(self, handle, index, value)
418
- assert(BlzSetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index, value))
419
- end,
420
- projectileSpeed = function(self, handle, index, value)
421
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index, value))
422
- end,
423
- attackPoint = function(self, handle, index, value)
424
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index, value))
425
- end
426
- }
427
- local weaponMetatable = {
428
- __index = function(self, key)
429
- return weaponGetters[key](weaponGetters, self.h, self.i)
430
- end,
431
- __newindex = function(self, key, value)
432
- weaponSetters[key](weaponSetters, self.h, self.i, value)
433
- end
434
- }
406
+ ____exports.UnitWeapon = __TS__Class()
407
+ local UnitWeapon = ____exports.UnitWeapon
408
+ UnitWeapon.name = "UnitWeapon"
409
+ function UnitWeapon.prototype.____constructor(self, unit, index)
410
+ self.unit = unit
411
+ self.index = index
412
+ end
413
+ __TS__SetDescriptor(
414
+ UnitWeapon.prototype,
415
+ "cooldown",
416
+ {
417
+ get = function(self)
418
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
419
+ end,
420
+ set = function(self, cooldown)
421
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
422
+ end
423
+ },
424
+ true
425
+ )
426
+ __TS__SetDescriptor(
427
+ UnitWeapon.prototype,
428
+ "damage",
429
+ {
430
+ get = function(self)
431
+ local minimumDamage = self.damageBase + self.damageDiceCount
432
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
433
+ return {minimumDamage, maximumDamage}
434
+ end,
435
+ set = function(self, ____bindingPattern0)
436
+ local maximumDamage
437
+ local minimumDamage
438
+ minimumDamage = ____bindingPattern0[1]
439
+ maximumDamage = ____bindingPattern0[2]
440
+ self.damageBase = minimumDamage - 1
441
+ self.damageDiceCount = 1
442
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
443
+ end
444
+ },
445
+ true
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
+ )
460
+ __TS__SetDescriptor(
461
+ UnitWeapon.prototype,
462
+ "damageBase",
463
+ {
464
+ get = function(self)
465
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
466
+ end,
467
+ set = function(self, damageBase)
468
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
469
+ end
470
+ },
471
+ true
472
+ )
473
+ __TS__SetDescriptor(
474
+ UnitWeapon.prototype,
475
+ "damageDiceCount",
476
+ {
477
+ get = function(self)
478
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
479
+ end,
480
+ set = function(self, damageDiceCount)
481
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
482
+ end
483
+ },
484
+ true
485
+ )
486
+ __TS__SetDescriptor(
487
+ UnitWeapon.prototype,
488
+ "damageDiceSideCount",
489
+ {
490
+ get = function(self)
491
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
492
+ end,
493
+ set = function(self, damageDiceSideCount)
494
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
495
+ end
496
+ },
497
+ true
498
+ )
499
+ __TS__SetDescriptor(
500
+ UnitWeapon.prototype,
501
+ "range",
502
+ {
503
+ get = function(self)
504
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
505
+ end,
506
+ set = function(self, range)
507
+ local handle = self.unit.handle
508
+ local index = self.index
509
+ setUnitWeaponRealField(
510
+ handle,
511
+ UNIT_WEAPON_RF_ATTACK_RANGE,
512
+ index + 1,
513
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
514
+ )
515
+ end
516
+ },
517
+ true
518
+ )
519
+ __TS__SetDescriptor(
520
+ UnitWeapon.prototype,
521
+ "impactDelay",
522
+ {
523
+ get = function(self)
524
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
525
+ end,
526
+ set = function(self, impactDelay)
527
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
528
+ end
529
+ },
530
+ true
531
+ )
532
+ __TS__SetDescriptor(
533
+ UnitWeapon.prototype,
534
+ "missileArc",
535
+ {
536
+ get = function(self)
537
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
538
+ end,
539
+ set = function(self, missileArc)
540
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
541
+ end
542
+ },
543
+ true
544
+ )
545
+ __TS__SetDescriptor(
546
+ UnitWeapon.prototype,
547
+ "missileModelPath",
548
+ {
549
+ get = function(self)
550
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
551
+ end,
552
+ set = function(self, missileModelPath)
553
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
554
+ end
555
+ },
556
+ true
557
+ )
558
+ __TS__SetDescriptor(
559
+ UnitWeapon.prototype,
560
+ "missileSpeed",
561
+ {
562
+ get = function(self)
563
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
564
+ end,
565
+ set = function(self, missileSpeed)
566
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
567
+ end
568
+ },
569
+ true
570
+ )
435
571
  local unitInventorySize = UnitInventorySize
436
572
  local unitItemInSlot = UnitItemInSlot
437
573
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +578,6 @@ local getAbilityName = GetAbilityName
442
578
  local unitAddAbility = UnitAddAbility
443
579
  local getUnitGoldCost = GetUnitGoldCost
444
580
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
581
  local unitRemoveAbility = UnitRemoveAbility
448
582
  local function retrieveAbility(unit, ability, abilityId)
449
583
  if ability == nil then
@@ -453,17 +587,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
587
  ____exports.Unit:of(unit)
454
588
  )
455
589
  end
456
- if not unitAddAbility(unit, abilityId) then
457
- if getUnitAbility(unit, abilityId) == ability then
458
- return UnitAbility:of(
459
- ability,
460
- abilityId,
461
- ____exports.Unit:of(unit)
462
- )
463
- end
464
- else
465
- unitRemoveAbility(unit, abilityId)
466
- end
467
590
  for i = 0, unitInventorySize(unit) - 1 do
468
591
  local item = unitItemInSlot(unit, i)
469
592
  if getItemAbility(item, abilityId) == ability then
@@ -520,12 +643,44 @@ for ____, player in ipairs(Player.all) do
520
643
  ShowUnit(dummy, false)
521
644
  dummies[player] = dummy
522
645
  end
646
+ local function delayHealthChecksCallback(unit)
647
+ local counter = (unit[103] or 0) - 1
648
+ if counter ~= 0 then
649
+ unit[103] = counter
650
+ return
651
+ end
652
+ unit[103] = nil
653
+ local healthBonus = unit[104]
654
+ if healthBonus ~= nil then
655
+ unit[104] = nil
656
+ local handle = unit.handle
657
+ BlzSetUnitMaxHP(
658
+ handle,
659
+ BlzGetUnitMaxHP(handle) - healthBonus
660
+ )
661
+ end
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
523
675
  ____exports.Unit = __TS__Class()
524
676
  local Unit = ____exports.Unit
525
677
  Unit.name = "Unit"
526
678
  __TS__ClassExtends(Unit, Handle)
527
679
  function Unit.prototype.____constructor(self, handle)
528
680
  Handle.prototype.____constructor(self, handle)
681
+ local ____nextSyncId_1 = nextSyncId
682
+ nextSyncId = ____nextSyncId_1 + 1
683
+ self.syncId = ____nextSyncId_1
529
684
  self._owner = Player:of(getOwningPlayer(handle))
530
685
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
686
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +693,7 @@ function Unit.prototype.____constructor(self, handle)
538
693
  fourCC("Amrf")
539
694
  ))
540
695
  end
696
+ unitBySyncId[self.syncId] = self
541
697
  local ____ = self.abilities
542
698
  end
543
699
  function Unit.prototype.getEvent(self, event, collector)
@@ -556,6 +712,8 @@ function Unit.prototype.getEvent(self, event, collector)
556
712
  end
557
713
  function Unit.prototype.onDestroy(self)
558
714
  local handle = self.handle
715
+ self[107] = getUnitX(handle)
716
+ self[108] = getUnitY(handle)
559
717
  if not self._owner then
560
718
  self._owner = Player:of(getOwningPlayer(handle))
561
719
  end
@@ -623,17 +781,17 @@ function Unit.prototype.addModifier(self, property, modifier)
623
781
  end}
624
782
  end
625
783
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- 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
628
786
  end
629
787
  function Unit.prototype.addClassification(self, classification)
630
- return unitAddType(self.handle, classification)
788
+ return UnitAddType(self.handle, classification)
631
789
  end
632
790
  function Unit.prototype.removeClassification(self, classification)
633
- return unitRemoveType(self.handle, classification)
791
+ return UnitRemoveType(self.handle, classification)
634
792
  end
635
793
  function Unit.prototype.hasClassification(self, classification)
636
- return isUnitType(self.handle, classification)
794
+ return IsUnitType(self.handle, classification)
637
795
  end
638
796
  function Unit.prototype.isVisibleTo(self, player)
639
797
  return isUnitVisible(self.handle, player.handle)
@@ -642,13 +800,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
800
  return isUnitInvisible(self.handle, player.handle)
643
801
  end
644
802
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
803
+ local ____temp_3
646
804
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
805
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
648
806
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
807
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
650
808
  end
651
- return ____temp_1
809
+ return ____temp_3
652
810
  end
653
811
  function Unit.prototype.isAllyOf(self, unit)
654
812
  return isUnitAlly(
@@ -666,13 +824,29 @@ function Unit.prototype.playAnimation(self, animation, rarity)
666
824
  if type(animation) == "number" then
667
825
  setUnitAnimationByIndex(self.handle, animation)
668
826
  elseif rarity then
669
- setUnitAnimationWithRarity(self.handle, animation, rarity)
827
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
670
828
  else
671
829
  setUnitAnimation(self.handle, animation)
672
830
  end
673
831
  end
832
+ function Unit.prototype.resetAnimation(self)
833
+ ResetUnitAnimation(self.handle)
834
+ end
674
835
  function Unit.prototype.queueAnimation(self, animation)
675
- 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
846
+ end
847
+ function Unit.prototype.delayHealthChecks(self)
848
+ self[103] = (self[103] or 0) + 1
849
+ Timer:run(delayHealthChecksCallback, self)
676
850
  end
677
851
  function Unit.prototype.setPosition(self, x, y)
678
852
  setUnitPosition(self.handle, x, y)
@@ -681,14 +855,21 @@ function Unit.prototype.isSelected(self, player)
681
855
  return IsUnitSelected(self.handle, player.handle)
682
856
  end
683
857
  function Unit.prototype.explode(self)
684
- setUnitExploded(self.handle, true)
858
+ SetUnitExploded(self.handle, true)
685
859
  killUnit(self.handle)
686
860
  end
687
861
  function Unit.prototype.kill(self)
688
862
  killUnit(self.handle)
689
863
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- 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))
692
873
  end
693
874
  function Unit.prototype.healTarget(self, target, amount)
694
875
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,20 +909,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
909
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
910
  end
730
911
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
912
+ return Item:of(unitItemInSlot(self.handle, slot))
732
913
  end
733
914
  function Unit.prototype.addAbility(self, abilityId)
734
- if unitAddAbility(self.handle, abilityId) then
735
- local ability = UnitAbility:of(
736
- checkNotNull(getUnitAbility(self.handle, abilityId)),
737
- abilityId,
738
- self
739
- )
915
+ local ability = UnitAbility:of(
916
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
917
+ abilityId,
918
+ self
919
+ )
920
+ if ability ~= nil then
740
921
  local abilities = self.abilities
741
922
  abilities[#abilities + 1] = ability
742
- return ability
743
923
  end
744
- return nil
924
+ return ability
745
925
  end
746
926
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
747
927
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -756,19 +936,11 @@ function Unit.prototype.hasAbility(self, abilityId)
756
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
757
937
  end
758
938
  function Unit.prototype.getAbilityById(self, abilityId)
759
- local handle = self.handle
760
- if unitAddAbility(handle, abilityId) then
761
- assert(unitRemoveAbility(handle, abilityId))
762
- return nil
763
- end
764
- return UnitAbility:of(
765
- getUnitAbility(self.handle, abilityId),
766
- abilityId,
767
- self
768
- )
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
769
941
  end
770
942
  function Unit.prototype.removeAbility(self, abilityId)
771
- if unitRemoveAbility(self.handle, abilityId) then
943
+ if doUnitAbilityAction(self.handle, abilityId, unitRemoveAbility, abilityId) then
772
944
  local abilities = self.abilities
773
945
  for i = 1, #abilities do
774
946
  if abilities[i].typeId == abilityId then
@@ -784,18 +956,43 @@ end
784
956
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
957
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
958
  end
959
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
960
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
961
+ end
787
962
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
963
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
964
  end
790
965
  function Unit.prototype.endAbilityCooldown(self, abilityId)
791
966
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
792
967
  end
968
+ function Unit.prototype.interruptMovement(self)
969
+ local handle = self.handle
970
+ unitDisableAbility(
971
+ handle,
972
+ fourCC("Amov"),
973
+ true,
974
+ false
975
+ )
976
+ unitDisableAbility(
977
+ handle,
978
+ fourCC("Amov"),
979
+ false,
980
+ false
981
+ )
982
+ end
793
983
  function Unit.prototype.interruptAttack(self)
794
984
  unitInterruptAttack(self.handle)
795
985
  end
796
986
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
987
+ local handle = self.handle
988
+ unitDisableAbility(handle, abilityId, true, false)
989
+ Timer:run(
990
+ unitDisableAbility,
991
+ handle,
992
+ abilityId,
993
+ false,
994
+ false
995
+ )
799
996
  end
800
997
  function Unit.prototype.getDistanceTo(self, target)
801
998
  local handle = self.handle
@@ -855,18 +1052,18 @@ function Unit.prototype.unpauseEx(self)
855
1052
  self:decrementStunCounter()
856
1053
  end
857
1054
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1055
+ local stunCounter = self[102] or 0
1056
+ if not self[101] or stunCounter >= 0 then
860
1057
  BlzPauseUnitEx(self.handle, true)
861
1058
  end
862
- self[101] = stunCounter + 1
1059
+ self[102] = stunCounter + 1
863
1060
  end
864
1061
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1062
+ local stunCounter = self[102] or 0
1063
+ if not self[101] or stunCounter >= 1 then
867
1064
  BlzPauseUnitEx(self.handle, false)
868
1065
  end
869
- self[101] = stunCounter - 1
1066
+ self[102] = stunCounter - 1
870
1067
  end
871
1068
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1069
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1165,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1165
  )
969
1166
  return targetCollection
970
1167
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1168
+ function Unit.getSelectionOf(self, player, target)
1169
+ if target == nil then
1170
+ target = {}
1171
+ end
1172
+ targetCollection = target
973
1173
  targetCollectionNextIndex = 1
974
1174
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1175
  return targetCollection
@@ -991,6 +1191,9 @@ end
991
1191
  function Unit.prototype.__tostring(self)
992
1192
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1193
  end
1194
+ function Unit.getBySyncId(self, syncId)
1195
+ return unitBySyncId[syncId]
1196
+ end
994
1197
  __TS__SetDescriptor(
995
1198
  Unit.prototype,
996
1199
  "_deltas",
@@ -1050,7 +1253,15 @@ __TS__SetDescriptor(
1050
1253
  Unit.prototype,
1051
1254
  "isIllusion",
1052
1255
  {get = function(self)
1053
- return isUnitIllusion(self.handle)
1256
+ return IsUnitIllusion(self.handle)
1257
+ end},
1258
+ true
1259
+ )
1260
+ __TS__SetDescriptor(
1261
+ Unit.prototype,
1262
+ "isStunned",
1263
+ {get = function(self)
1264
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1054
1265
  end},
1055
1266
  true
1056
1267
  )
@@ -1071,12 +1282,27 @@ __TS__SetDescriptor(
1071
1282
  Unit.prototype,
1072
1283
  "weapons",
1073
1284
  {get = function(self)
1074
- local weapons = {
1075
- setmetatable({h = self.handle, i = 0}, weaponMetatable),
1076
- setmetatable({h = self.handle, i = 1}, weaponMetatable)
1077
- }
1078
- rawset(self, "weapons", weapons)
1079
- return weapons
1285
+ return {self.firstWeapon, self.secondWeapon}
1286
+ end},
1287
+ true
1288
+ )
1289
+ __TS__SetDescriptor(
1290
+ Unit.prototype,
1291
+ "firstWeapon",
1292
+ {get = function(self)
1293
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1294
+ rawset(self, "firstWeapon", weapon)
1295
+ return weapon
1296
+ end},
1297
+ true
1298
+ )
1299
+ __TS__SetDescriptor(
1300
+ Unit.prototype,
1301
+ "secondWeapon",
1302
+ {get = function(self)
1303
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1304
+ rawset(self, "secondWeapon", weapon)
1305
+ return weapon
1080
1306
  end},
1081
1307
  true
1082
1308
  )
@@ -1112,6 +1338,19 @@ __TS__SetDescriptor(
1112
1338
  },
1113
1339
  true
1114
1340
  )
1341
+ __TS__SetDescriptor(
1342
+ Unit.prototype,
1343
+ "primaryAttribute",
1344
+ {
1345
+ get = function(self)
1346
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1347
+ end,
1348
+ set = function(self, primaryAttribute)
1349
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1350
+ end
1351
+ },
1352
+ true
1353
+ )
1115
1354
  __TS__SetDescriptor(
1116
1355
  Unit.prototype,
1117
1356
  "strengthBase",
@@ -1233,17 +1472,17 @@ __TS__SetDescriptor(
1233
1472
  "isTeamGlowVisible",
1234
1473
  {
1235
1474
  get = function(self)
1236
- return not self[103]
1475
+ return not self[106]
1237
1476
  end,
1238
1477
  set = function(self, isTeamGlowVisible)
1239
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1478
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1479
+ local ____temp_7
1241
1480
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1481
+ ____temp_7 = true
1243
1482
  else
1244
- ____temp_2 = nil
1483
+ ____temp_7 = nil
1245
1484
  end
1246
- self[103] = ____temp_2
1485
+ self[106] = ____temp_7
1247
1486
  end
1248
1487
  },
1249
1488
  true
@@ -1252,9 +1491,9 @@ __TS__SetDescriptor(
1252
1491
  Unit.prototype,
1253
1492
  "color",
1254
1493
  {set = function(self, color)
1255
- setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1257
- showUnitTeamGlow(self.handle, false)
1494
+ SetUnitColor(self.handle, color.handle)
1495
+ if self[106] then
1496
+ BlzShowUnitTeamGlow(self.handle, false)
1258
1497
  end
1259
1498
  end},
1260
1499
  true
@@ -1277,10 +1516,14 @@ __TS__SetDescriptor(
1277
1516
  "maxHealth",
1278
1517
  {
1279
1518
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1519
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1520
  end,
1282
1521
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1522
+ if maxHealth < 1 and self[103] ~= nil then
1523
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1524
+ maxHealth = 1
1525
+ end
1526
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1527
  end
1285
1528
  },
1286
1529
  true
@@ -1322,10 +1565,10 @@ __TS__SetDescriptor(
1322
1565
  "health",
1323
1566
  {
1324
1567
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1568
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1569
  end,
1327
1570
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1571
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1572
  end
1330
1573
  },
1331
1574
  true
@@ -1419,7 +1662,7 @@ __TS__SetDescriptor(
1419
1662
  "x",
1420
1663
  {
1421
1664
  get = function(self)
1422
- return getUnitX(self.handle)
1665
+ return self[107] or getUnitX(self.handle)
1423
1666
  end,
1424
1667
  set = function(self, v)
1425
1668
  SetUnitX(self.handle, v)
@@ -1432,7 +1675,7 @@ __TS__SetDescriptor(
1432
1675
  "y",
1433
1676
  {
1434
1677
  get = function(self)
1435
- return getUnitY(self.handle)
1678
+ return self[108] or getUnitY(self.handle)
1436
1679
  end,
1437
1680
  set = function(self, v)
1438
1681
  SetUnitY(self.handle, v)
@@ -1518,10 +1761,10 @@ __TS__SetDescriptor(
1518
1761
  "gold",
1519
1762
  {
1520
1763
  get = function(self)
1521
- return getResourceAmount(self.handle)
1764
+ return GetResourceAmount(self.handle)
1522
1765
  end,
1523
1766
  set = function(self, gold)
1524
- setResourceAmount(self.handle, gold)
1767
+ SetResourceAmount(self.handle, gold)
1525
1768
  end
1526
1769
  },
1527
1770
  true
@@ -1536,17 +1779,17 @@ __TS__SetDescriptor(
1536
1779
  set = function(self, isPaused)
1537
1780
  local handle = self.handle
1538
1781
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1782
+ self[101] = true
1783
+ for _ = self[102] or 0, -1 do
1541
1784
  BlzPauseUnitEx(handle, true)
1542
1785
  end
1543
1786
  PauseUnit(handle, true)
1544
1787
  elseif not isPaused and IsUnitPaused(handle) then
1545
1788
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1789
+ for _ = self[102] or 0, -1 do
1547
1790
  BlzPauseUnitEx(handle, false)
1548
1791
  end
1549
- self[100] = nil
1792
+ self[101] = nil
1550
1793
  end
1551
1794
  end
1552
1795
  },
@@ -1649,6 +1892,19 @@ __TS__SetDescriptor(
1649
1892
  end},
1650
1893
  true
1651
1894
  )
1895
+ __TS__SetDescriptor(
1896
+ Unit.prototype,
1897
+ "movementType",
1898
+ {
1899
+ get = function(self)
1900
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1901
+ end,
1902
+ set = function(self, movementType)
1903
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1904
+ end
1905
+ },
1906
+ true
1907
+ )
1652
1908
  __TS__SetDescriptor(
1653
1909
  Unit.prototype,
1654
1910
  "pathing",
@@ -1830,6 +2086,14 @@ __TS__SetDescriptor(
1830
2086
  end},
1831
2087
  true
1832
2088
  )
2089
+ __TS__SetDescriptor(
2090
+ Unit.prototype,
2091
+ "targetAcquiredEvent",
2092
+ {get = function(self)
2093
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2094
+ end},
2095
+ true
2096
+ )
1833
2097
  __TS__SetDescriptor(
1834
2098
  Unit.prototype,
1835
2099
  "onSelect",
@@ -1903,7 +2167,6 @@ Unit.onDecay = __TS__New(
1903
2167
  Unit.onResurrect = __TS__New(
1904
2168
  InitializingEvent,
1905
2169
  function(event)
1906
- local invoke = Event.invoke
1907
2170
  local dead = setmetatable({}, {__mode = "k"})
1908
2171
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2172
  dead[unit] = true
@@ -1919,10 +2182,15 @@ Unit.onResurrect = __TS__New(
1919
2182
  Unit.morphEvent = __TS__New(
1920
2183
  InitializingEvent,
1921
2184
  function(event)
2185
+ local function ifNotLeft(unit)
2186
+ local handle = unit.handle
2187
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2188
+ invoke(event, unit)
2189
+ end
2190
+ end
1922
2191
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2192
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2193
+ Timer:run(ifNotLeft, unit)
1926
2194
  end
1927
2195
  end)
1928
2196
  end
@@ -1960,27 +2228,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2228
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2229
  InitializingEvent,
1962
2230
  function(event)
1963
- local invoke = Event.invoke
1964
2231
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2232
+ local ____GetSpellTargetUnit_result_10
1966
2233
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2234
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2235
  else
1969
- local ____GetSpellTargetItem_result_4
2236
+ local ____GetSpellTargetItem_result_9
1970
2237
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2238
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
1972
2239
  else
1973
- local ____GetSpellTargetDestructable_result_3
2240
+ local ____GetSpellTargetDestructable_result_8
1974
2241
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2242
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
1976
2243
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2244
+ ____GetSpellTargetDestructable_result_8 = nil
1978
2245
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2246
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
1980
2247
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2248
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
1982
2249
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2250
+ local target = ____GetSpellTargetUnit_result_10
1984
2251
  if target then
1985
2252
  invoke(event, unit, id, target)
1986
2253
  end
@@ -2152,10 +2419,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2419
  ____exports.UnitTriggerEvent,
2153
2420
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2421
  function()
2155
- local unit = ____exports.Unit:of(getOrderedUnit())
2156
- local issuedOrderId = getIssuedOrderId()
2157
- if unit ~= nil and unit.state == 1 then
2158
- return unit, issuedOrderId
2422
+ local handle = getOrderedUnit()
2423
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2424
+ local unit = ____exports.Unit:of(handle)
2425
+ if unit.state == 1 then
2426
+ return unit, getIssuedOrderId()
2427
+ end
2159
2428
  end
2160
2429
  return IgnoreEvent
2161
2430
  end
@@ -2177,7 +2446,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2446
  )
2178
2447
  Unit.onDamaging = (function()
2179
2448
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2449
  local trigger = CreateTrigger()
2182
2450
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2451
  TriggerAddCondition(
@@ -2187,13 +2455,19 @@ Unit.onDamaging = (function()
2187
2455
  if source and source.typeId == dummyUnitId then
2188
2456
  source = nil
2189
2457
  end
2190
- local target = BlzGetEventDamageTarget()
2458
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2459
+ local metadata = damageMetadataByTarget[target]
2460
+ damageMetadataByTarget[target] = nil
2191
2461
  local data = {
2192
2462
  amount = GetEventDamage(),
2193
- attackType = BlzGetEventAttackType(),
2463
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2194
2464
  damageType = BlzGetEventDamageType(),
2195
2465
  weaponType = BlzGetEventWeaponType(),
2196
- isAttack = BlzGetEventIsAttack()
2466
+ metadata = metadata,
2467
+ isAttack = BlzGetEventIsAttack(),
2468
+ originalAmount = GetEventDamage(),
2469
+ originalMetadata = metadata,
2470
+ preventRetaliation = damagingEventPreventRetaliation
2197
2471
  }
2198
2472
  if data.isAttack and source then
2199
2473
  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
@@ -2207,18 +2481,36 @@ Unit.onDamaging = (function()
2207
2481
  invoke(
2208
2482
  event,
2209
2483
  source,
2210
- ____exports.Unit:of(target),
2484
+ target,
2211
2485
  setmetatable(
2212
2486
  {},
2213
2487
  {
2214
2488
  __index = data,
2215
2489
  __newindex = function(self, key, value)
2216
- damageSetters[key](value)
2490
+ local damageSetter = damageSetters[key]
2491
+ if damageSetter ~= nil then
2492
+ damageSetter(value)
2493
+ end
2217
2494
  data[key] = value
2218
2495
  end
2219
2496
  }
2220
2497
  )
2221
2498
  )
2499
+ if data[0] and source then
2500
+ local sourceOwner = source.owner.handle
2501
+ data[1] = sourceOwner
2502
+ local targetOwner = target.owner.handle
2503
+ data[2] = targetOwner
2504
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2505
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2506
+ data[3] = true
2507
+ end
2508
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2509
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2510
+ data[4] = true
2511
+ end
2512
+ end
2513
+ damagingEventByTarget[target] = data
2222
2514
  return
2223
2515
  end
2224
2516
  BlzSetEventDamage(0)
@@ -2226,7 +2518,7 @@ Unit.onDamaging = (function()
2226
2518
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
2519
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
2520
  local sourceOwner = source.owner.handle
2229
- local targetOwner = GetOwningPlayer(target)
2521
+ local targetOwner = target.owner.handle
2230
2522
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
2523
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
2524
  Timer:run(function()
@@ -2242,23 +2534,19 @@ Unit.onDamaging = (function()
2242
2534
  for ____, ____value in ipairs(source._attackHandlers) do
2243
2535
  local condition = ____value[1]
2244
2536
  local action = ____value[2]
2245
- if condition(
2246
- source,
2247
- ____exports.Unit:of(target),
2248
- data
2249
- ) then
2537
+ if condition(source, target, data) then
2250
2538
  action(
2251
2539
  source,
2252
- ____exports.Unit:of(target),
2540
+ target,
2253
2541
  setmetatable(
2254
2542
  {fire = function()
2255
2543
  UnitDamageTarget(
2256
2544
  source.handle,
2257
- target,
2545
+ target.handle,
2258
2546
  data.amount,
2259
2547
  true,
2260
2548
  true,
2261
- data.attackType,
2549
+ attackTypeToNative(data.attackType),
2262
2550
  data.damageType,
2263
2551
  data.weaponType
2264
2552
  )
@@ -2276,7 +2564,6 @@ end)()
2276
2564
  Unit.onDamage = __TS__New(
2277
2565
  InitializingEvent,
2278
2566
  function(event)
2279
- local invoke = Event.invoke
2280
2567
  local trigger = CreateTrigger()
2281
2568
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2569
  TriggerAddCondition(
@@ -2286,29 +2573,54 @@ Unit.onDamage = __TS__New(
2286
2573
  if source and source.typeId == dummyUnitId then
2287
2574
  source = nil
2288
2575
  end
2576
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2577
+ local damagingEvent = damagingEventByTarget[target]
2578
+ damagingEventByTarget[target] = nil
2289
2579
  local data = {
2290
2580
  amount = GetEventDamage(),
2291
- attackType = BlzGetEventAttackType(),
2581
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2292
2582
  damageType = BlzGetEventDamageType(),
2293
2583
  weaponType = BlzGetEventWeaponType(),
2584
+ metadata = damagingEvent and damagingEvent.metadata,
2294
2585
  isAttack = BlzGetEventIsAttack(),
2586
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2587
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2295
2588
  preventDeath = damageEventPreventDeath
2296
2589
  }
2590
+ if damagingEvent then
2591
+ for key, value in pairs(damagingEvent) do
2592
+ if isAttribute(key) then
2593
+ data[key] = value
2594
+ end
2595
+ end
2596
+ local sourceOwner = damagingEvent[1]
2597
+ if sourceOwner then
2598
+ local targetOwner = damagingEvent[2]
2599
+ if damagingEvent[3] then
2600
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2601
+ end
2602
+ if damagingEvent[4] then
2603
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2604
+ end
2605
+ end
2606
+ end
2297
2607
  local evData = setmetatable(
2298
2608
  {},
2299
2609
  {
2300
2610
  __index = data,
2301
2611
  __newindex = function(self, key, value)
2302
- damageSetters[key](value)
2612
+ local damageSetter = damageSetters[key]
2613
+ if damageSetter ~= nil then
2614
+ damageSetter(value)
2615
+ end
2303
2616
  data[key] = value
2304
2617
  end
2305
2618
  }
2306
2619
  )
2307
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
2620
  invoke(event, source, target, evData)
2309
2621
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2622
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2623
+ target[105] = (target[105] or 0) + bonusHealth
2312
2624
  BlzSetUnitMaxHP(
2313
2625
  target.handle,
2314
2626
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2634,7 @@ Unit.onDamage = __TS__New(
2322
2634
  evData[0],
2323
2635
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2636
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2637
+ target[105] = (target[105] or 0) - bonusHealth
2326
2638
  SetWidgetLife(
2327
2639
  target.handle,
2328
2640
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2654,110 @@ Unit.onDamage = __TS__New(
2342
2654
  DestroyTrigger(trigger)
2343
2655
  end
2344
2656
  )
2345
- Unit.onItemDrop = __TS__New(
2657
+ Unit.itemDroppedEvent = __TS__New(
2346
2658
  ____exports.UnitTriggerEvent,
2347
2659
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2660
  function()
2349
2661
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2662
+ local item = getManipulatedItem()
2663
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2664
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2665
  end
2353
2666
  return IgnoreEvent
2354
2667
  end
2355
2668
  )
2356
- Unit.onItemPickup = __TS__New(
2669
+ Unit.itemPickedUpEvent = __TS__New(
2357
2670
  ____exports.UnitTriggerEvent,
2358
2671
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2672
  function()
2360
- local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2673
+ local unitHandle = getTriggerUnit()
2674
+ local itemHandle = getManipulatedItem()
2675
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2676
+ local unit = ____exports.Unit:of(unitHandle)
2677
+ local item = Item:of(itemHandle)
2678
+ if item.owner ~= unit then
2679
+ return unit, item
2680
+ end
2363
2681
  end
2364
2682
  return IgnoreEvent
2365
2683
  end
2366
2684
  )
2367
- Unit.onItemUse = __TS__New(
2685
+ Unit.itemUsedEvent = __TS__New(
2368
2686
  ____exports.UnitTriggerEvent,
2369
2687
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2688
+ function()
2689
+ local unit = getTriggerUnit()
2690
+ local item = getManipulatedItem()
2691
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2692
+ return ____exports.Unit:of(unit), Item:of(item)
2693
+ end
2694
+ return IgnoreEvent
2695
+ end
2696
+ )
2697
+ Unit.itemStackedEvent = __TS__New(
2698
+ ____exports.UnitTriggerEvent,
2699
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2700
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2701
+ )
2702
+ __TS__ObjectDefineProperty(
2703
+ Unit,
2704
+ "itemChargesChangedEvent",
2705
+ {get = function(self)
2706
+ local event = __TS__New(Event)
2707
+ Item.chargesChangedEvent:addListener(function(item)
2708
+ local unit = item.owner
2709
+ if unit ~= nil then
2710
+ invoke(event, unit, item)
2711
+ end
2712
+ end)
2713
+ rawset(self, "itemChargesChangedEvent", event)
2714
+ return event
2715
+ end}
2716
+ )
2717
+ __TS__ObjectDefineProperty(
2718
+ Unit,
2719
+ "itemUseOrderEvent",
2720
+ {get = function(self)
2721
+ local event = __TS__New(Event)
2722
+ for order = orderId("useslot0"), orderId("useslot5") do
2723
+ local slot = order - orderId("useslot0")
2724
+ local function listener(unit)
2725
+ local item = unit.items[slot + 1]
2726
+ if item ~= nil then
2727
+ invoke(event, unit, item)
2728
+ end
2729
+ end
2730
+ self.onImmediateOrder[order]:addListener(listener)
2731
+ self.onTargetOrder[order]:addListener(listener)
2732
+ self.onPointOrder[order]:addListener(listener)
2733
+ end
2734
+ rawset(self, "itemUseOrderEvent", event)
2735
+ return event
2736
+ end}
2737
+ )
2738
+ __TS__ObjectDefineProperty(
2739
+ Unit,
2740
+ "itemMoveOrderEvent",
2741
+ {get = function(self)
2742
+ local event = __TS__New(Event)
2743
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2744
+ local slotTo = order - orderId("moveslot0")
2745
+ self.onTargetOrder[order]:addListener(function(unit, item)
2746
+ local slotFrom = unit.items:findSlot(item)
2747
+ if slotFrom ~= nil then
2748
+ invoke(
2749
+ event,
2750
+ unit,
2751
+ item,
2752
+ slotFrom,
2753
+ slotTo
2754
+ )
2755
+ end
2756
+ end)
2757
+ end
2758
+ rawset(self, "itemMoveOrderEvent", event)
2759
+ return event
2760
+ end}
2371
2761
  )
2372
2762
  __TS__ObjectDefineProperty(
2373
2763
  Unit,