warscript 0.0.1-dev.ee2345e → 0.0.1-dev.ee6f224

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 (253) 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 +117 -22
  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 +123 -5
  18. package/core/types/sound.d.ts +17 -24
  19. package/core/types/sound.lua +99 -24
  20. package/core/types/tileCell.d.ts +9 -0
  21. package/core/types/tileCell.lua +92 -0
  22. package/core/types/timer.d.ts +8 -8
  23. package/core/types/timer.lua +39 -23
  24. package/core/types/unit.lua +8 -0
  25. package/core/util.d.ts +1 -1
  26. package/core/util.lua +18 -1
  27. package/decl/index.d.ts +1 -0
  28. package/decl/native.d.ts +846 -790
  29. package/engine/ability.d.ts +1 -1
  30. package/engine/behavior.d.ts +15 -10
  31. package/engine/behavior.lua +112 -33
  32. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  33. package/engine/behaviour/ability/always-enabled.lua +31 -0
  34. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  35. package/engine/behaviour/ability/apply-buff.lua +32 -0
  36. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  37. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  38. package/engine/behaviour/ability/damage.d.ts +39 -11
  39. package/engine/behaviour/ability/damage.lua +83 -37
  40. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  41. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  42. package/engine/behaviour/ability/heal.d.ts +33 -6
  43. package/engine/behaviour/ability/heal.lua +89 -10
  44. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  45. package/engine/behaviour/ability/instant-impact.lua +4 -15
  46. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  47. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  48. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  49. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  50. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  51. package/engine/behaviour/ability/restore-mana.lua +29 -0
  52. package/engine/behaviour/ability.d.ts +27 -4
  53. package/engine/behaviour/ability.lua +152 -26
  54. package/engine/behaviour/unit/stun-immunity.d.ts +5 -4
  55. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  56. package/engine/behaviour/unit.d.ts +40 -2
  57. package/engine/behaviour/unit.lua +208 -0
  58. package/engine/buff.d.ts +104 -44
  59. package/engine/buff.lua +453 -215
  60. package/engine/game-map.d.ts +7 -0
  61. package/engine/game-map.lua +32 -0
  62. package/engine/internal/ability.d.ts +23 -14
  63. package/engine/internal/ability.lua +129 -85
  64. package/engine/internal/item/ability.lua +162 -4
  65. package/engine/internal/item+owner.lua +12 -6
  66. package/engine/internal/item.d.ts +8 -7
  67. package/engine/internal/item.lua +153 -51
  68. package/engine/internal/mechanics/ability-duration.lua +1 -1
  69. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  70. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  71. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  72. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  73. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  74. package/engine/internal/misc/frame-coordinates.lua +21 -0
  75. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  76. package/engine/internal/misc/get-terrain-z.lua +11 -0
  77. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  78. package/engine/internal/misc/player-local-handle.lua +5 -0
  79. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  80. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  81. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  82. package/engine/internal/object-data/evasion-probability.lua +16 -0
  83. package/engine/internal/unit/ability.d.ts +45 -1
  84. package/engine/internal/unit/ability.lua +98 -14
  85. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  86. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  87. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  88. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  89. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  90. package/engine/internal/unit/allowed-targets.lua +9 -1
  91. package/engine/internal/unit/bonus.d.ts +11 -8
  92. package/engine/internal/unit/bonus.lua +23 -1
  93. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  94. package/engine/internal/unit/ignore-events-items.lua +5 -0
  95. package/engine/internal/unit/item.d.ts +24 -0
  96. package/engine/internal/unit/item.lua +78 -0
  97. package/engine/internal/unit/main-selected.d.ts +13 -0
  98. package/engine/internal/unit/main-selected.lua +51 -0
  99. package/engine/internal/unit/order.d.ts +20 -0
  100. package/engine/internal/unit/order.lua +136 -0
  101. package/engine/internal/unit+ability.lua +12 -3
  102. package/engine/internal/unit+damage.d.ts +2 -11
  103. package/engine/internal/unit+damage.lua +10 -14
  104. package/engine/internal/unit+spellSteal.lua +1 -2
  105. package/engine/internal/unit+transport.lua +4 -10
  106. package/engine/internal/unit-missile-launch.lua +33 -7
  107. package/engine/internal/unit.d.ts +89 -24
  108. package/engine/internal/unit.lua +594 -206
  109. package/engine/internal/utility.lua +12 -0
  110. package/engine/lightning.d.ts +12 -5
  111. package/engine/lightning.lua +48 -14
  112. package/engine/local-client.d.ts +7 -2
  113. package/engine/local-client.lua +82 -0
  114. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  115. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  116. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  117. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  118. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  119. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  120. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  121. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  122. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  123. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  124. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  125. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  126. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  127. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  128. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  129. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  130. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  131. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  132. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  133. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  134. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  135. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  136. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  137. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  138. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  139. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  140. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  141. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  142. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  143. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  144. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  145. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  146. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  147. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  148. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  149. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  150. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  151. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  152. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  153. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  154. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  155. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  156. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  157. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  158. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  159. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  160. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  161. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  162. package/engine/object-data/entry/ability-type/web.lua +52 -0
  163. package/engine/object-data/entry/ability-type.d.ts +19 -18
  164. package/engine/object-data/entry/ability-type.lua +90 -36
  165. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  166. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  167. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  168. package/engine/object-data/entry/buff-type.d.ts +6 -13
  169. package/engine/object-data/entry/buff-type.lua +13 -29
  170. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  171. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  172. package/engine/object-data/entry/item-type.d.ts +15 -2
  173. package/engine/object-data/entry/item-type.lua +93 -2
  174. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  175. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  176. package/engine/object-data/entry/sound-preset.lua +140 -0
  177. package/engine/object-data/entry/unit-type.d.ts +58 -7
  178. package/engine/object-data/entry/unit-type.lua +480 -75
  179. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  180. package/engine/object-data/entry/upgrade.d.ts +1 -2
  181. package/engine/object-data/entry/upgrade.lua +4 -4
  182. package/engine/object-data/entry.d.ts +18 -17
  183. package/engine/object-data/entry.lua +60 -32
  184. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  185. package/engine/object-field/ability.d.ts +28 -5
  186. package/engine/object-field/ability.lua +59 -5
  187. package/engine/object-field/unit.d.ts +57 -3
  188. package/engine/object-field/unit.lua +207 -7
  189. package/engine/object-field.d.ts +17 -7
  190. package/engine/object-field.lua +190 -90
  191. package/engine/random.d.ts +10 -0
  192. package/engine/random.lua +22 -0
  193. package/engine/standard/entries/buff-type.d.ts +3 -0
  194. package/engine/standard/entries/buff-type.lua +3 -0
  195. package/engine/standard/entries/sound-preset.d.ts +10 -0
  196. package/engine/standard/entries/sound-preset.lua +10 -0
  197. package/engine/standard/entries/unit-type.d.ts +39 -1
  198. package/engine/standard/entries/unit-type.lua +39 -1
  199. package/engine/standard/fields/ability.d.ts +3 -1
  200. package/engine/standard/fields/ability.lua +3 -1
  201. package/engine/standard/fields/unit.d.ts +4 -0
  202. package/engine/standard/fields/unit.lua +7 -0
  203. package/engine/text-tag.d.ts +36 -2
  204. package/engine/text-tag.lua +249 -10
  205. package/engine/unit.d.ts +4 -0
  206. package/engine/unit.lua +13 -2
  207. package/event.d.ts +2 -3
  208. package/event.lua +9 -5
  209. package/index.d.ts +1 -0
  210. package/index.lua +1 -0
  211. package/lualib_bundle.lua +146 -42
  212. package/math/vec2.d.ts +2 -9
  213. package/math.d.ts +0 -2
  214. package/net/socket.d.ts +7 -1
  215. package/net/socket.lua +45 -4
  216. package/network.d.ts +1 -0
  217. package/network.lua +3 -2
  218. package/objutil/ability.d.ts +0 -1
  219. package/objutil/buff.d.ts +0 -1
  220. package/objutil/buff.lua +2 -3
  221. package/objutil/object.d.ts +0 -1
  222. package/objutil/unit.d.ts +0 -1
  223. package/objutil/unit.lua +8 -0
  224. package/package.json +13 -14
  225. package/patch-lua.d.ts +0 -0
  226. package/patch-lua.lua +10 -0
  227. package/patch-lualib.lua +1 -1
  228. package/property.d.ts +55 -0
  229. package/property.lua +374 -0
  230. package/string.d.ts +30 -0
  231. package/string.lua +14 -0
  232. package/util/stream.d.ts +0 -1
  233. package/utility/arrays.d.ts +12 -5
  234. package/utility/arrays.lua +37 -3
  235. package/utility/bit-set.d.ts +0 -2
  236. package/utility/callback-array.d.ts +13 -0
  237. package/utility/callback-array.lua +46 -0
  238. package/utility/functions.d.ts +8 -0
  239. package/utility/functions.lua +13 -0
  240. package/utility/lazy.d.ts +2 -0
  241. package/utility/lazy.lua +14 -0
  242. package/utility/linked-set.d.ts +12 -3
  243. package/utility/linked-set.lua +8 -2
  244. package/utility/lua-maps.d.ts +16 -4
  245. package/utility/lua-maps.lua +53 -2
  246. package/utility/lua-sets.d.ts +3 -2
  247. package/utility/lua-sets.lua +7 -0
  248. package/utility/reflection.lua +11 -7
  249. package/utility/types.d.ts +1 -0
  250. package/core/mapbounds.d.ts +0 -8
  251. package/core/mapbounds.lua +0 -12
  252. package/core/types/order.d.ts +0 -25
  253. 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)
@@ -755,47 +935,62 @@ end
755
935
  function Unit.prototype.hasAbility(self, abilityId)
756
936
  return getUnitAbilityLevel(self.handle, abilityId) > 0
757
937
  end
758
- 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
- )
938
+ function Unit.prototype.getAbility(self, abilityId)
939
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
+ return UnitAbility:of(ability, abilityId, self)
769
941
  end
770
- function Unit.prototype.removeAbility(self, abilityId)
771
- if unitRemoveAbility(self.handle, abilityId) then
772
- local abilities = self.abilities
773
- for i = 1, #abilities do
774
- if abilities[i].typeId == abilityId then
775
- abilities[i]:destroy()
776
- tremove(abilities, i)
777
- return true
778
- end
942
+ function Unit.prototype.removeAbility(self, abilityTypeId)
943
+ local abilities = self.abilities
944
+ for i = 1, #abilities do
945
+ if abilities[i].typeId == abilityTypeId then
946
+ local ability = abilities[i]
947
+ tremove(abilities, i)
948
+ ability:destroy()
949
+ return true
779
950
  end
780
- return true
781
951
  end
782
- return false
952
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
783
953
  end
784
954
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
955
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
956
  end
957
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
958
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
959
+ end
787
960
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
961
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
962
  end
790
963
  function Unit.prototype.endAbilityCooldown(self, abilityId)
791
964
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
792
965
  end
966
+ function Unit.prototype.interruptMovement(self)
967
+ local handle = self.handle
968
+ unitDisableAbility(
969
+ handle,
970
+ fourCC("Amov"),
971
+ true,
972
+ false
973
+ )
974
+ unitDisableAbility(
975
+ handle,
976
+ fourCC("Amov"),
977
+ false,
978
+ false
979
+ )
980
+ end
793
981
  function Unit.prototype.interruptAttack(self)
794
982
  unitInterruptAttack(self.handle)
795
983
  end
796
984
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
985
+ local handle = self.handle
986
+ unitDisableAbility(handle, abilityId, true, false)
987
+ Timer:run(
988
+ unitDisableAbility,
989
+ handle,
990
+ abilityId,
991
+ false,
992
+ false
993
+ )
799
994
  end
800
995
  function Unit.prototype.getDistanceTo(self, target)
801
996
  local handle = self.handle
@@ -855,18 +1050,18 @@ function Unit.prototype.unpauseEx(self)
855
1050
  self:decrementStunCounter()
856
1051
  end
857
1052
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1053
+ local stunCounter = self[102] or 0
1054
+ if not self[101] or stunCounter >= 0 then
860
1055
  BlzPauseUnitEx(self.handle, true)
861
1056
  end
862
- self[101] = stunCounter + 1
1057
+ self[102] = stunCounter + 1
863
1058
  end
864
1059
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1060
+ local stunCounter = self[102] or 0
1061
+ if not self[101] or stunCounter >= 1 then
867
1062
  BlzPauseUnitEx(self.handle, false)
868
1063
  end
869
- self[101] = stunCounter - 1
1064
+ self[102] = stunCounter - 1
870
1065
  end
871
1066
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1067
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1163,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1163
  )
969
1164
  return targetCollection
970
1165
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1166
+ function Unit.getSelectionOf(self, player, target)
1167
+ if target == nil then
1168
+ target = {}
1169
+ end
1170
+ targetCollection = target
973
1171
  targetCollectionNextIndex = 1
974
1172
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1173
  return targetCollection
@@ -991,6 +1189,9 @@ end
991
1189
  function Unit.prototype.__tostring(self)
992
1190
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1191
  end
1192
+ function Unit.getBySyncId(self, syncId)
1193
+ return unitBySyncId[syncId]
1194
+ end
994
1195
  __TS__SetDescriptor(
995
1196
  Unit.prototype,
996
1197
  "_deltas",
@@ -1050,7 +1251,15 @@ __TS__SetDescriptor(
1050
1251
  Unit.prototype,
1051
1252
  "isIllusion",
1052
1253
  {get = function(self)
1053
- return isUnitIllusion(self.handle)
1254
+ return IsUnitIllusion(self.handle)
1255
+ end},
1256
+ true
1257
+ )
1258
+ __TS__SetDescriptor(
1259
+ Unit.prototype,
1260
+ "isStunned",
1261
+ {get = function(self)
1262
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1054
1263
  end},
1055
1264
  true
1056
1265
  )
@@ -1071,12 +1280,27 @@ __TS__SetDescriptor(
1071
1280
  Unit.prototype,
1072
1281
  "weapons",
1073
1282
  {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
1283
+ return {self.firstWeapon, self.secondWeapon}
1284
+ end},
1285
+ true
1286
+ )
1287
+ __TS__SetDescriptor(
1288
+ Unit.prototype,
1289
+ "firstWeapon",
1290
+ {get = function(self)
1291
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1292
+ rawset(self, "firstWeapon", weapon)
1293
+ return weapon
1294
+ end},
1295
+ true
1296
+ )
1297
+ __TS__SetDescriptor(
1298
+ Unit.prototype,
1299
+ "secondWeapon",
1300
+ {get = function(self)
1301
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1302
+ rawset(self, "secondWeapon", weapon)
1303
+ return weapon
1080
1304
  end},
1081
1305
  true
1082
1306
  )
@@ -1112,6 +1336,19 @@ __TS__SetDescriptor(
1112
1336
  },
1113
1337
  true
1114
1338
  )
1339
+ __TS__SetDescriptor(
1340
+ Unit.prototype,
1341
+ "primaryAttribute",
1342
+ {
1343
+ get = function(self)
1344
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1345
+ end,
1346
+ set = function(self, primaryAttribute)
1347
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1348
+ end
1349
+ },
1350
+ true
1351
+ )
1115
1352
  __TS__SetDescriptor(
1116
1353
  Unit.prototype,
1117
1354
  "strengthBase",
@@ -1233,17 +1470,17 @@ __TS__SetDescriptor(
1233
1470
  "isTeamGlowVisible",
1234
1471
  {
1235
1472
  get = function(self)
1236
- return not self[103]
1473
+ return not self[106]
1237
1474
  end,
1238
1475
  set = function(self, isTeamGlowVisible)
1239
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1476
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1477
+ local ____temp_7
1241
1478
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1479
+ ____temp_7 = true
1243
1480
  else
1244
- ____temp_2 = nil
1481
+ ____temp_7 = nil
1245
1482
  end
1246
- self[103] = ____temp_2
1483
+ self[106] = ____temp_7
1247
1484
  end
1248
1485
  },
1249
1486
  true
@@ -1252,9 +1489,9 @@ __TS__SetDescriptor(
1252
1489
  Unit.prototype,
1253
1490
  "color",
1254
1491
  {set = function(self, color)
1255
- setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1257
- showUnitTeamGlow(self.handle, false)
1492
+ SetUnitColor(self.handle, color.handle)
1493
+ if self[106] then
1494
+ BlzShowUnitTeamGlow(self.handle, false)
1258
1495
  end
1259
1496
  end},
1260
1497
  true
@@ -1277,10 +1514,14 @@ __TS__SetDescriptor(
1277
1514
  "maxHealth",
1278
1515
  {
1279
1516
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1517
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1518
  end,
1282
1519
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1520
+ if maxHealth < 1 and self[103] ~= nil then
1521
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1522
+ maxHealth = 1
1523
+ end
1524
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1525
  end
1285
1526
  },
1286
1527
  true
@@ -1322,10 +1563,10 @@ __TS__SetDescriptor(
1322
1563
  "health",
1323
1564
  {
1324
1565
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1566
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1567
  end,
1327
1568
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1569
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1570
  end
1330
1571
  },
1331
1572
  true
@@ -1419,7 +1660,7 @@ __TS__SetDescriptor(
1419
1660
  "x",
1420
1661
  {
1421
1662
  get = function(self)
1422
- return getUnitX(self.handle)
1663
+ return self[107] or getUnitX(self.handle)
1423
1664
  end,
1424
1665
  set = function(self, v)
1425
1666
  SetUnitX(self.handle, v)
@@ -1432,7 +1673,7 @@ __TS__SetDescriptor(
1432
1673
  "y",
1433
1674
  {
1434
1675
  get = function(self)
1435
- return getUnitY(self.handle)
1676
+ return self[108] or getUnitY(self.handle)
1436
1677
  end,
1437
1678
  set = function(self, v)
1438
1679
  SetUnitY(self.handle, v)
@@ -1518,10 +1759,10 @@ __TS__SetDescriptor(
1518
1759
  "gold",
1519
1760
  {
1520
1761
  get = function(self)
1521
- return getResourceAmount(self.handle)
1762
+ return GetResourceAmount(self.handle)
1522
1763
  end,
1523
1764
  set = function(self, gold)
1524
- setResourceAmount(self.handle, gold)
1765
+ SetResourceAmount(self.handle, gold)
1525
1766
  end
1526
1767
  },
1527
1768
  true
@@ -1536,17 +1777,17 @@ __TS__SetDescriptor(
1536
1777
  set = function(self, isPaused)
1537
1778
  local handle = self.handle
1538
1779
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1780
+ self[101] = true
1781
+ for _ = self[102] or 0, -1 do
1541
1782
  BlzPauseUnitEx(handle, true)
1542
1783
  end
1543
1784
  PauseUnit(handle, true)
1544
1785
  elseif not isPaused and IsUnitPaused(handle) then
1545
1786
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1787
+ for _ = self[102] or 0, -1 do
1547
1788
  BlzPauseUnitEx(handle, false)
1548
1789
  end
1549
- self[100] = nil
1790
+ self[101] = nil
1550
1791
  end
1551
1792
  end
1552
1793
  },
@@ -1649,6 +1890,19 @@ __TS__SetDescriptor(
1649
1890
  end},
1650
1891
  true
1651
1892
  )
1893
+ __TS__SetDescriptor(
1894
+ Unit.prototype,
1895
+ "movementType",
1896
+ {
1897
+ get = function(self)
1898
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1899
+ end,
1900
+ set = function(self, movementType)
1901
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1902
+ end
1903
+ },
1904
+ true
1905
+ )
1652
1906
  __TS__SetDescriptor(
1653
1907
  Unit.prototype,
1654
1908
  "pathing",
@@ -1830,6 +2084,14 @@ __TS__SetDescriptor(
1830
2084
  end},
1831
2085
  true
1832
2086
  )
2087
+ __TS__SetDescriptor(
2088
+ Unit.prototype,
2089
+ "targetAcquiredEvent",
2090
+ {get = function(self)
2091
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2092
+ end},
2093
+ true
2094
+ )
1833
2095
  __TS__SetDescriptor(
1834
2096
  Unit.prototype,
1835
2097
  "onSelect",
@@ -1903,7 +2165,6 @@ Unit.onDecay = __TS__New(
1903
2165
  Unit.onResurrect = __TS__New(
1904
2166
  InitializingEvent,
1905
2167
  function(event)
1906
- local invoke = Event.invoke
1907
2168
  local dead = setmetatable({}, {__mode = "k"})
1908
2169
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2170
  dead[unit] = true
@@ -1919,10 +2180,15 @@ Unit.onResurrect = __TS__New(
1919
2180
  Unit.morphEvent = __TS__New(
1920
2181
  InitializingEvent,
1921
2182
  function(event)
2183
+ local function ifNotLeft(unit)
2184
+ local handle = unit.handle
2185
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2186
+ invoke(event, unit)
2187
+ end
2188
+ end
1922
2189
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2190
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2191
+ Timer:run(ifNotLeft, unit)
1926
2192
  end
1927
2193
  end)
1928
2194
  end
@@ -1960,27 +2226,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2226
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2227
  InitializingEvent,
1962
2228
  function(event)
1963
- local invoke = Event.invoke
1964
2229
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2230
+ local ____GetSpellTargetUnit_result_10
1966
2231
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2232
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2233
  else
1969
- local ____GetSpellTargetItem_result_4
2234
+ local ____GetSpellTargetItem_result_9
1970
2235
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2236
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
1972
2237
  else
1973
- local ____GetSpellTargetDestructable_result_3
2238
+ local ____GetSpellTargetDestructable_result_8
1974
2239
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2240
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
1976
2241
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2242
+ ____GetSpellTargetDestructable_result_8 = nil
1978
2243
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2244
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
1980
2245
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2246
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
1982
2247
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2248
+ local target = ____GetSpellTargetUnit_result_10
1984
2249
  if target then
1985
2250
  invoke(event, unit, id, target)
1986
2251
  end
@@ -2152,10 +2417,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2417
  ____exports.UnitTriggerEvent,
2153
2418
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2419
  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
2420
+ local handle = getOrderedUnit()
2421
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2422
+ local unit = ____exports.Unit:of(handle)
2423
+ if unit.state == 1 then
2424
+ return unit, getIssuedOrderId()
2425
+ end
2159
2426
  end
2160
2427
  return IgnoreEvent
2161
2428
  end
@@ -2177,7 +2444,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2444
  )
2178
2445
  Unit.onDamaging = (function()
2179
2446
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2447
  local trigger = CreateTrigger()
2182
2448
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2449
  TriggerAddCondition(
@@ -2187,13 +2453,19 @@ Unit.onDamaging = (function()
2187
2453
  if source and source.typeId == dummyUnitId then
2188
2454
  source = nil
2189
2455
  end
2190
- local target = BlzGetEventDamageTarget()
2456
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2457
+ local metadata = damageMetadataByTarget[target]
2458
+ damageMetadataByTarget[target] = nil
2191
2459
  local data = {
2192
2460
  amount = GetEventDamage(),
2193
- attackType = BlzGetEventAttackType(),
2461
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2194
2462
  damageType = BlzGetEventDamageType(),
2195
2463
  weaponType = BlzGetEventWeaponType(),
2196
- isAttack = BlzGetEventIsAttack()
2464
+ metadata = metadata,
2465
+ isAttack = BlzGetEventIsAttack(),
2466
+ originalAmount = GetEventDamage(),
2467
+ originalMetadata = metadata,
2468
+ preventRetaliation = damagingEventPreventRetaliation
2197
2469
  }
2198
2470
  if data.isAttack and source then
2199
2471
  local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
@@ -2207,18 +2479,36 @@ Unit.onDamaging = (function()
2207
2479
  invoke(
2208
2480
  event,
2209
2481
  source,
2210
- ____exports.Unit:of(target),
2482
+ target,
2211
2483
  setmetatable(
2212
2484
  {},
2213
2485
  {
2214
2486
  __index = data,
2215
2487
  __newindex = function(self, key, value)
2216
- damageSetters[key](value)
2488
+ local damageSetter = damageSetters[key]
2489
+ if damageSetter ~= nil then
2490
+ damageSetter(value)
2491
+ end
2217
2492
  data[key] = value
2218
2493
  end
2219
2494
  }
2220
2495
  )
2221
2496
  )
2497
+ if data[0] and source then
2498
+ local sourceOwner = source.owner.handle
2499
+ data[1] = sourceOwner
2500
+ local targetOwner = target.owner.handle
2501
+ data[2] = targetOwner
2502
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2503
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2504
+ data[3] = true
2505
+ end
2506
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2507
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2508
+ data[4] = true
2509
+ end
2510
+ end
2511
+ damagingEventByTarget[target] = data
2222
2512
  return
2223
2513
  end
2224
2514
  BlzSetEventDamage(0)
@@ -2226,7 +2516,7 @@ Unit.onDamaging = (function()
2226
2516
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
2517
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
2518
  local sourceOwner = source.owner.handle
2229
- local targetOwner = GetOwningPlayer(target)
2519
+ local targetOwner = target.owner.handle
2230
2520
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
2521
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
2522
  Timer:run(function()
@@ -2242,23 +2532,19 @@ Unit.onDamaging = (function()
2242
2532
  for ____, ____value in ipairs(source._attackHandlers) do
2243
2533
  local condition = ____value[1]
2244
2534
  local action = ____value[2]
2245
- if condition(
2246
- source,
2247
- ____exports.Unit:of(target),
2248
- data
2249
- ) then
2535
+ if condition(source, target, data) then
2250
2536
  action(
2251
2537
  source,
2252
- ____exports.Unit:of(target),
2538
+ target,
2253
2539
  setmetatable(
2254
2540
  {fire = function()
2255
2541
  UnitDamageTarget(
2256
2542
  source.handle,
2257
- target,
2543
+ target.handle,
2258
2544
  data.amount,
2259
2545
  true,
2260
2546
  true,
2261
- data.attackType,
2547
+ attackTypeToNative(data.attackType),
2262
2548
  data.damageType,
2263
2549
  data.weaponType
2264
2550
  )
@@ -2276,7 +2562,6 @@ end)()
2276
2562
  Unit.onDamage = __TS__New(
2277
2563
  InitializingEvent,
2278
2564
  function(event)
2279
- local invoke = Event.invoke
2280
2565
  local trigger = CreateTrigger()
2281
2566
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2567
  TriggerAddCondition(
@@ -2286,29 +2571,54 @@ Unit.onDamage = __TS__New(
2286
2571
  if source and source.typeId == dummyUnitId then
2287
2572
  source = nil
2288
2573
  end
2574
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2575
+ local damagingEvent = damagingEventByTarget[target]
2576
+ damagingEventByTarget[target] = nil
2289
2577
  local data = {
2290
2578
  amount = GetEventDamage(),
2291
- attackType = BlzGetEventAttackType(),
2579
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2292
2580
  damageType = BlzGetEventDamageType(),
2293
2581
  weaponType = BlzGetEventWeaponType(),
2582
+ metadata = damagingEvent and damagingEvent.metadata,
2294
2583
  isAttack = BlzGetEventIsAttack(),
2584
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2585
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2295
2586
  preventDeath = damageEventPreventDeath
2296
2587
  }
2588
+ if damagingEvent then
2589
+ for key, value in pairs(damagingEvent) do
2590
+ if isAttribute(key) then
2591
+ data[key] = value
2592
+ end
2593
+ end
2594
+ local sourceOwner = damagingEvent[1]
2595
+ if sourceOwner then
2596
+ local targetOwner = damagingEvent[2]
2597
+ if damagingEvent[3] then
2598
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2599
+ end
2600
+ if damagingEvent[4] then
2601
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2602
+ end
2603
+ end
2604
+ end
2297
2605
  local evData = setmetatable(
2298
2606
  {},
2299
2607
  {
2300
2608
  __index = data,
2301
2609
  __newindex = function(self, key, value)
2302
- damageSetters[key](value)
2610
+ local damageSetter = damageSetters[key]
2611
+ if damageSetter ~= nil then
2612
+ damageSetter(value)
2613
+ end
2303
2614
  data[key] = value
2304
2615
  end
2305
2616
  }
2306
2617
  )
2307
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
2618
  invoke(event, source, target, evData)
2309
2619
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2620
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2621
+ target[105] = (target[105] or 0) + bonusHealth
2312
2622
  BlzSetUnitMaxHP(
2313
2623
  target.handle,
2314
2624
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2632,7 @@ Unit.onDamage = __TS__New(
2322
2632
  evData[0],
2323
2633
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2634
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2635
+ target[105] = (target[105] or 0) - bonusHealth
2326
2636
  SetWidgetLife(
2327
2637
  target.handle,
2328
2638
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2652,110 @@ Unit.onDamage = __TS__New(
2342
2652
  DestroyTrigger(trigger)
2343
2653
  end
2344
2654
  )
2345
- Unit.onItemDrop = __TS__New(
2655
+ Unit.itemDroppedEvent = __TS__New(
2346
2656
  ____exports.UnitTriggerEvent,
2347
2657
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2658
  function()
2349
2659
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2660
+ local item = getManipulatedItem()
2661
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2662
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2663
  end
2353
2664
  return IgnoreEvent
2354
2665
  end
2355
2666
  )
2356
- Unit.onItemPickup = __TS__New(
2667
+ Unit.itemPickedUpEvent = __TS__New(
2357
2668
  ____exports.UnitTriggerEvent,
2358
2669
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2670
  function()
2360
- local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2671
+ local unitHandle = getTriggerUnit()
2672
+ local itemHandle = getManipulatedItem()
2673
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2674
+ local unit = ____exports.Unit:of(unitHandle)
2675
+ local item = Item:of(itemHandle)
2676
+ if item.owner ~= unit then
2677
+ return unit, item
2678
+ end
2363
2679
  end
2364
2680
  return IgnoreEvent
2365
2681
  end
2366
2682
  )
2367
- Unit.onItemUse = __TS__New(
2683
+ Unit.itemUsedEvent = __TS__New(
2368
2684
  ____exports.UnitTriggerEvent,
2369
2685
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2686
+ function()
2687
+ local unit = getTriggerUnit()
2688
+ local item = getManipulatedItem()
2689
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2690
+ return ____exports.Unit:of(unit), Item:of(item)
2691
+ end
2692
+ return IgnoreEvent
2693
+ end
2694
+ )
2695
+ Unit.itemStackedEvent = __TS__New(
2696
+ ____exports.UnitTriggerEvent,
2697
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2698
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2699
+ )
2700
+ __TS__ObjectDefineProperty(
2701
+ Unit,
2702
+ "itemChargesChangedEvent",
2703
+ {get = function(self)
2704
+ local event = __TS__New(Event)
2705
+ Item.chargesChangedEvent:addListener(function(item)
2706
+ local unit = item.owner
2707
+ if unit ~= nil then
2708
+ invoke(event, unit, item)
2709
+ end
2710
+ end)
2711
+ rawset(self, "itemChargesChangedEvent", event)
2712
+ return event
2713
+ end}
2714
+ )
2715
+ __TS__ObjectDefineProperty(
2716
+ Unit,
2717
+ "itemUseOrderEvent",
2718
+ {get = function(self)
2719
+ local event = __TS__New(Event)
2720
+ for order = orderId("useslot0"), orderId("useslot5") do
2721
+ local slot = order - orderId("useslot0")
2722
+ local function listener(unit)
2723
+ local item = unit.items[slot + 1]
2724
+ if item ~= nil then
2725
+ invoke(event, unit, item)
2726
+ end
2727
+ end
2728
+ self.onImmediateOrder[order]:addListener(listener)
2729
+ self.onTargetOrder[order]:addListener(listener)
2730
+ self.onPointOrder[order]:addListener(listener)
2731
+ end
2732
+ rawset(self, "itemUseOrderEvent", event)
2733
+ return event
2734
+ end}
2735
+ )
2736
+ __TS__ObjectDefineProperty(
2737
+ Unit,
2738
+ "itemMoveOrderEvent",
2739
+ {get = function(self)
2740
+ local event = __TS__New(Event)
2741
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2742
+ local slotTo = order - orderId("moveslot0")
2743
+ self.onTargetOrder[order]:addListener(function(unit, item)
2744
+ local slotFrom = unit.items:findSlot(item)
2745
+ if slotFrom ~= nil then
2746
+ invoke(
2747
+ event,
2748
+ unit,
2749
+ item,
2750
+ slotFrom,
2751
+ slotTo
2752
+ )
2753
+ end
2754
+ end)
2755
+ end
2756
+ rawset(self, "itemMoveOrderEvent", event)
2757
+ return event
2758
+ end}
2371
2759
  )
2372
2760
  __TS__ObjectDefineProperty(
2373
2761
  Unit,