warscript 0.0.1-dev.ea69747 → 0.0.1-dev.eb24bc1

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 (236) hide show
  1. package/attributes.d.ts +17 -0
  2. package/attributes.lua +23 -0
  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 +93 -1
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/handle.d.ts +2 -1
  13. package/core/types/handle.lua +5 -0
  14. package/core/types/image.d.ts +0 -1
  15. package/core/types/missile.d.ts +2 -2
  16. package/core/types/missile.lua +8 -2
  17. package/core/types/sound.d.ts +17 -24
  18. package/core/types/sound.lua +99 -24
  19. package/core/types/timer.d.ts +6 -7
  20. package/core/types/timer.lua +18 -21
  21. package/core/types/unit.lua +8 -0
  22. package/core/util.d.ts +1 -1
  23. package/core/util.lua +18 -1
  24. package/decl/index.d.ts +1 -0
  25. package/decl/native.d.ts +840 -786
  26. package/engine/ability.d.ts +1 -1
  27. package/engine/behavior.d.ts +10 -10
  28. package/engine/behavior.lua +6 -6
  29. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  30. package/engine/behaviour/ability/always-enabled.lua +31 -0
  31. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  32. package/engine/behaviour/ability/apply-buff.lua +32 -0
  33. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +32 -9
  35. package/engine/behaviour/ability/damage.d.ts +39 -11
  36. package/engine/behaviour/ability/damage.lua +83 -37
  37. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  38. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  39. package/engine/behaviour/ability/heal.d.ts +33 -6
  40. package/engine/behaviour/ability/heal.lua +89 -10
  41. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  42. package/engine/behaviour/ability/instant-impact.lua +4 -15
  43. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  44. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  45. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  46. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  47. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  48. package/engine/behaviour/ability/restore-mana.lua +29 -0
  49. package/engine/behaviour/ability.d.ts +27 -4
  50. package/engine/behaviour/ability.lua +152 -17
  51. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  52. package/engine/behaviour/unit.d.ts +10 -2
  53. package/engine/behaviour/unit.lua +27 -0
  54. package/engine/buff.d.ts +103 -41
  55. package/engine/buff.lua +465 -212
  56. package/engine/game-map.d.ts +7 -0
  57. package/engine/game-map.lua +32 -0
  58. package/engine/internal/ability.d.ts +17 -14
  59. package/engine/internal/ability.lua +80 -76
  60. package/engine/internal/item/ability.lua +106 -0
  61. package/engine/internal/item+owner.lua +2 -2
  62. package/engine/internal/item.d.ts +4 -3
  63. package/engine/internal/item.lua +56 -25
  64. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  65. package/engine/internal/mechanics/ability-duration.lua +3 -1
  66. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  67. package/engine/internal/mechanics/cast-ability.lua +86 -0
  68. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  69. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  70. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  71. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  72. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  73. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  74. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  75. package/engine/internal/object-data/evasion-probability.lua +16 -0
  76. package/engine/internal/unit/ability.d.ts +10 -1
  77. package/engine/internal/unit/ability.lua +36 -14
  78. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  79. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  80. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  81. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  82. package/engine/internal/unit/bonus.d.ts +11 -8
  83. package/engine/internal/unit/bonus.lua +23 -1
  84. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  85. package/engine/internal/unit/detach-missiles.lua +30 -0
  86. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  87. package/engine/internal/unit/ignore-events-items.lua +5 -0
  88. package/engine/internal/unit/item.d.ts +24 -0
  89. package/engine/internal/unit/item.lua +78 -0
  90. package/engine/internal/unit/main-selected.d.ts +13 -0
  91. package/engine/internal/unit/main-selected.lua +51 -0
  92. package/engine/internal/unit+ability.lua +2 -2
  93. package/engine/internal/unit+damage.d.ts +2 -11
  94. package/engine/internal/unit+damage.lua +10 -14
  95. package/engine/internal/unit+spellSteal.lua +1 -2
  96. package/engine/internal/unit+transport.lua +4 -10
  97. package/engine/internal/unit-missile-launch.lua +25 -6
  98. package/engine/internal/unit.d.ts +76 -18
  99. package/engine/internal/unit.lua +466 -167
  100. package/engine/internal/utility.lua +12 -0
  101. package/engine/lightning.d.ts +12 -5
  102. package/engine/lightning.lua +48 -14
  103. package/engine/local-client.d.ts +7 -2
  104. package/engine/local-client.lua +82 -0
  105. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  106. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  107. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  108. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  109. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  110. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  111. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  112. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  113. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  114. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  115. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  117. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  118. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  119. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  120. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  121. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  122. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  123. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  124. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  125. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  126. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  127. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  128. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  129. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  130. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  131. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +4 -4
  132. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  133. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  134. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  135. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  136. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  137. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  138. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  139. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  140. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  141. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  142. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  143. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  144. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  145. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  146. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  147. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  148. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  149. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  150. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  151. package/engine/object-data/entry/ability-type/web.lua +52 -0
  152. package/engine/object-data/entry/ability-type.d.ts +20 -18
  153. package/engine/object-data/entry/ability-type.lua +90 -33
  154. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  155. package/engine/object-data/entry/buff-type/applicable.lua +39 -102
  156. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  157. package/engine/object-data/entry/buff-type.d.ts +6 -13
  158. package/engine/object-data/entry/buff-type.lua +13 -29
  159. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  160. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  161. package/engine/object-data/entry/item-type.d.ts +15 -2
  162. package/engine/object-data/entry/item-type.lua +93 -2
  163. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  164. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  165. package/engine/object-data/entry/sound-preset.lua +140 -0
  166. package/engine/object-data/entry/unit-type.d.ts +50 -3
  167. package/engine/object-data/entry/unit-type.lua +452 -61
  168. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  169. package/engine/object-data/entry/upgrade.d.ts +1 -2
  170. package/engine/object-data/entry/upgrade.lua +4 -4
  171. package/engine/object-data/entry.d.ts +18 -17
  172. package/engine/object-data/entry.lua +60 -32
  173. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  174. package/engine/object-field/ability.d.ts +33 -8
  175. package/engine/object-field/ability.lua +60 -1
  176. package/engine/object-field/unit.d.ts +46 -2
  177. package/engine/object-field/unit.lua +173 -4
  178. package/engine/object-field.d.ts +15 -5
  179. package/engine/object-field.lua +196 -84
  180. package/engine/random.d.ts +1 -0
  181. package/engine/random.lua +9 -0
  182. package/engine/standard/entries/buff-type.d.ts +3 -0
  183. package/engine/standard/entries/buff-type.lua +3 -0
  184. package/engine/standard/entries/sound-preset.d.ts +10 -0
  185. package/engine/standard/entries/sound-preset.lua +10 -0
  186. package/engine/standard/entries/unit-type.d.ts +42 -1
  187. package/engine/standard/entries/unit-type.lua +42 -1
  188. package/engine/standard/fields/ability.d.ts +3 -1
  189. package/engine/standard/fields/ability.lua +3 -1
  190. package/engine/unit.d.ts +4 -0
  191. package/engine/unit.lua +13 -2
  192. package/event.d.ts +2 -3
  193. package/event.lua +9 -5
  194. package/exception.d.ts +2 -0
  195. package/exception.lua +4 -0
  196. package/global/vec2.lua +1 -0
  197. package/index.d.ts +1 -0
  198. package/index.lua +1 -0
  199. package/lualib_bundle.lua +146 -42
  200. package/math/vec2.d.ts +2 -9
  201. package/math.d.ts +0 -2
  202. package/net/socket.d.ts +7 -1
  203. package/net/socket.lua +45 -4
  204. package/network.d.ts +1 -0
  205. package/network.lua +3 -2
  206. package/objutil/ability.d.ts +0 -1
  207. package/objutil/buff.d.ts +0 -1
  208. package/objutil/buff.lua +2 -3
  209. package/objutil/object.d.ts +0 -1
  210. package/objutil/unit.d.ts +0 -1
  211. package/objutil/unit.lua +8 -0
  212. package/package.json +13 -14
  213. package/patch-lua.d.ts +0 -0
  214. package/patch-lua.lua +10 -0
  215. package/property.d.ts +55 -0
  216. package/property.lua +374 -0
  217. package/string.d.ts +30 -0
  218. package/string.lua +14 -0
  219. package/util/stream.d.ts +0 -1
  220. package/utility/arrays.d.ts +13 -6
  221. package/utility/arrays.lua +41 -4
  222. package/utility/bit-set.d.ts +0 -2
  223. package/utility/functions.d.ts +1 -0
  224. package/utility/functions.lua +1 -0
  225. package/utility/lazy.d.ts +2 -0
  226. package/utility/lazy.lua +14 -0
  227. package/utility/linked-set.d.ts +32 -9
  228. package/utility/linked-set.lua +24 -2
  229. package/utility/lua-maps.d.ts +4 -2
  230. package/utility/lua-maps.lua +16 -0
  231. package/utility/lua-sets.d.ts +2 -2
  232. package/utility/lua-sets.lua +3 -0
  233. package/utility/reflection.lua +11 -7
  234. package/utility/types.d.ts +3 -2
  235. package/core/mapbounds.d.ts +0 -8
  236. package/core/mapbounds.lua +0 -12
@@ -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,19 @@ 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
51
63
  local match = string.match
52
64
  local ____tostring = _G.tostring
53
65
  local setUnitAnimation = SetUnitAnimation
54
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
66
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
- local queueUnitAnimation = QueueUnitAnimation
57
67
  local getUnitIntegerField = BlzGetUnitIntegerField
58
68
  local getUnitRealField = BlzGetUnitRealField
59
69
  local getHeroStr = GetHeroStr
@@ -72,9 +82,9 @@ local setUnitScale = SetUnitScale
72
82
  local setUnitPosition = SetUnitPosition
73
83
  local setUnitTimeScale = SetUnitTimeScale
74
84
  local getHandleId = GetHandleId
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
86
  local createUnit = CreateUnit
76
87
  local killUnit = KillUnit
77
- local setUnitExploded = SetUnitExploded
78
88
  local removeUnit = RemoveUnit
79
89
  local getUnitTypeId = GetUnitTypeId
80
90
  local isHeroUnitId = IsHeroUnitId
@@ -90,8 +100,10 @@ local getSpellTargetItem = GetSpellTargetItem
90
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
91
101
  local isUnitInRangeXY = IsUnitInRangeXY
92
102
  local isUnitInRange = IsUnitInRange
93
- local setResourceAmount = SetResourceAmount
94
- local getResourceAmount = GetResourceAmount
103
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
104
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
105
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
106
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
108
  local unitDisableAbility = BlzUnitDisableAbility
97
109
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -118,8 +130,6 @@ local isUnitType = IsUnitType
118
130
  local isUnitAlly = IsUnitAlly
119
131
  local isUnitEnemy = IsUnitEnemy
120
132
  local getOwningPlayer = GetOwningPlayer
121
- local setUnitColor = SetUnitColor
122
- local showUnitTeamGlow = BlzShowUnitTeamGlow
123
133
  ____exports.UnitClassification = {}
124
134
  local UnitClassification = ____exports.UnitClassification
125
135
  do
@@ -275,16 +285,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
285
  end
276
286
  local function dispatch(event, idGetter, argsGetter)
277
287
  local initialized = false
278
- local x = {}
279
288
  return setmetatable(
280
- x,
289
+ {},
281
290
  {
282
291
  __index = function(self, id)
283
292
  if type(id) ~= "number" then
284
293
  return event[id]
285
294
  end
286
295
  if not initialized then
287
- local invoke = Event.invoke
288
296
  event:addListener(function(...)
289
297
  local id = idGetter(...)
290
298
  local dispatched = rawget(self, id)
@@ -322,7 +330,6 @@ local function dispatchAbility(event)
322
330
  return event[id]
323
331
  end
324
332
  if not initialized then
325
- local invoke = Event.invoke
326
333
  event:addListener(function(unit, ability, ...)
327
334
  local dispatched = rawget(self, ability.typeId)
328
335
  if dispatched ~= nil then
@@ -350,7 +357,14 @@ local function damageEventPreventDeath(self, callback, ...)
350
357
  rawset(self, 1 + i, (select(i, ...)))
351
358
  end
352
359
  end
353
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
360
+ local damageSetters = {
361
+ amount = BlzSetEventDamage,
362
+ attackType = function(attackType)
363
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
364
+ end,
365
+ damageType = BlzSetEventDamageType,
366
+ weaponType = BlzSetEventWeaponType
367
+ }
354
368
  local jlimitopByOperator = {
355
369
  [0] = LESS_THAN_OR_EQUAL,
356
370
  [1] = LESS_THAN_OR_EQUAL,
@@ -387,51 +401,158 @@ local getters = {
387
401
  return BlzGetUnitArmor(unit)
388
402
  end
389
403
  }
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
- }
404
+ ____exports.UnitWeapon = __TS__Class()
405
+ local UnitWeapon = ____exports.UnitWeapon
406
+ UnitWeapon.name = "UnitWeapon"
407
+ function UnitWeapon.prototype.____constructor(self, unit, index)
408
+ self.unit = unit
409
+ self.index = index
410
+ end
411
+ __TS__SetDescriptor(
412
+ UnitWeapon.prototype,
413
+ "cooldown",
414
+ {
415
+ get = function(self)
416
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
417
+ end,
418
+ set = function(self, cooldown)
419
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
420
+ end
421
+ },
422
+ true
423
+ )
424
+ __TS__SetDescriptor(
425
+ UnitWeapon.prototype,
426
+ "damage",
427
+ {
428
+ get = function(self)
429
+ local minimumDamage = self.damageBase + self.damageDiceCount
430
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
431
+ return {minimumDamage, maximumDamage}
432
+ end,
433
+ set = function(self, ____bindingPattern0)
434
+ local maximumDamage
435
+ local minimumDamage
436
+ minimumDamage = ____bindingPattern0[1]
437
+ maximumDamage = ____bindingPattern0[2]
438
+ self.damageBase = minimumDamage - 1
439
+ self.damageDiceCount = 1
440
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
441
+ end
442
+ },
443
+ true
444
+ )
445
+ __TS__SetDescriptor(
446
+ UnitWeapon.prototype,
447
+ "damageBase",
448
+ {
449
+ get = function(self)
450
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
451
+ end,
452
+ set = function(self, damageBase)
453
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
454
+ end
455
+ },
456
+ true
457
+ )
458
+ __TS__SetDescriptor(
459
+ UnitWeapon.prototype,
460
+ "damageDiceCount",
461
+ {
462
+ get = function(self)
463
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
464
+ end,
465
+ set = function(self, damageDiceCount)
466
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
467
+ end
468
+ },
469
+ true
470
+ )
471
+ __TS__SetDescriptor(
472
+ UnitWeapon.prototype,
473
+ "damageDiceSideCount",
474
+ {
475
+ get = function(self)
476
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
477
+ end,
478
+ set = function(self, damageDiceSideCount)
479
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
480
+ end
481
+ },
482
+ true
483
+ )
484
+ __TS__SetDescriptor(
485
+ UnitWeapon.prototype,
486
+ "range",
487
+ {
488
+ get = function(self)
489
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
490
+ end,
491
+ set = function(self, range)
492
+ local handle = self.unit.handle
493
+ local index = self.index
494
+ setUnitWeaponRealField(
495
+ handle,
496
+ UNIT_WEAPON_RF_ATTACK_RANGE,
497
+ index + 1,
498
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
499
+ )
500
+ end
501
+ },
502
+ true
503
+ )
504
+ __TS__SetDescriptor(
505
+ UnitWeapon.prototype,
506
+ "impactDelay",
507
+ {
508
+ get = function(self)
509
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
510
+ end,
511
+ set = function(self, impactDelay)
512
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
513
+ end
514
+ },
515
+ true
516
+ )
517
+ __TS__SetDescriptor(
518
+ UnitWeapon.prototype,
519
+ "missileArc",
520
+ {
521
+ get = function(self)
522
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
523
+ end,
524
+ set = function(self, missileArc)
525
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
526
+ end
527
+ },
528
+ true
529
+ )
530
+ __TS__SetDescriptor(
531
+ UnitWeapon.prototype,
532
+ "missileModelPath",
533
+ {
534
+ get = function(self)
535
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
536
+ end,
537
+ set = function(self, missileModelPath)
538
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
539
+ end
540
+ },
541
+ true
542
+ )
543
+ __TS__SetDescriptor(
544
+ UnitWeapon.prototype,
545
+ "missileSpeed",
546
+ {
547
+ get = function(self)
548
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
549
+ end,
550
+ set = function(self, missileSpeed)
551
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
552
+ end
553
+ },
554
+ true
555
+ )
435
556
  local unitInventorySize = UnitInventorySize
436
557
  local unitItemInSlot = UnitItemInSlot
437
558
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +563,6 @@ local getAbilityName = GetAbilityName
442
563
  local unitAddAbility = UnitAddAbility
443
564
  local getUnitGoldCost = GetUnitGoldCost
444
565
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
566
  local unitRemoveAbility = UnitRemoveAbility
448
567
  local function retrieveAbility(unit, ability, abilityId)
449
568
  if ability == nil then
@@ -453,17 +572,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
572
  ____exports.Unit:of(unit)
454
573
  )
455
574
  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
575
  for i = 0, unitInventorySize(unit) - 1 do
468
576
  local item = unitItemInSlot(unit, i)
469
577
  if getItemAbility(item, abilityId) == ability then
@@ -520,12 +628,35 @@ for ____, player in ipairs(Player.all) do
520
628
  ShowUnit(dummy, false)
521
629
  dummies[player] = dummy
522
630
  end
631
+ local function delayHealthChecksCallback(unit)
632
+ local counter = (unit[103] or 0) - 1
633
+ if counter ~= 0 then
634
+ unit[103] = counter
635
+ return
636
+ end
637
+ unit[103] = nil
638
+ local healthBonus = unit[104]
639
+ if healthBonus ~= nil then
640
+ unit[104] = nil
641
+ local handle = unit.handle
642
+ BlzSetUnitMaxHP(
643
+ handle,
644
+ BlzGetUnitMaxHP(handle) - healthBonus
645
+ )
646
+ end
647
+ end
648
+ local nextSyncId = 1
649
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
650
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
523
651
  ____exports.Unit = __TS__Class()
524
652
  local Unit = ____exports.Unit
525
653
  Unit.name = "Unit"
526
654
  __TS__ClassExtends(Unit, Handle)
527
655
  function Unit.prototype.____constructor(self, handle)
528
656
  Handle.prototype.____constructor(self, handle)
657
+ local ____nextSyncId_0 = nextSyncId
658
+ nextSyncId = ____nextSyncId_0 + 1
659
+ self.syncId = ____nextSyncId_0
529
660
  self._owner = Player:of(getOwningPlayer(handle))
530
661
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
662
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +669,7 @@ function Unit.prototype.____constructor(self, handle)
538
669
  fourCC("Amrf")
539
670
  ))
540
671
  end
672
+ unitBySyncId[self.syncId] = self
541
673
  local ____ = self.abilities
542
674
  end
543
675
  function Unit.prototype.getEvent(self, event, collector)
@@ -556,6 +688,8 @@ function Unit.prototype.getEvent(self, event, collector)
556
688
  end
557
689
  function Unit.prototype.onDestroy(self)
558
690
  local handle = self.handle
691
+ self[107] = getUnitX(handle)
692
+ self[108] = getUnitY(handle)
559
693
  if not self._owner then
560
694
  self._owner = Player:of(getOwningPlayer(handle))
561
695
  end
@@ -623,8 +757,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
757
  end}
624
758
  end
625
759
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
760
+ local ____combatClassification_1 = combatClassification
761
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
762
  end
629
763
  function Unit.prototype.addClassification(self, classification)
630
764
  return unitAddType(self.handle, classification)
@@ -642,13 +776,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
776
  return isUnitInvisible(self.handle, player.handle)
643
777
  end
644
778
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
779
+ local ____temp_2
646
780
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
781
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
782
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
783
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
784
  end
651
- return ____temp_1
785
+ return ____temp_2
652
786
  end
653
787
  function Unit.prototype.isAllyOf(self, unit)
654
788
  return isUnitAlly(
@@ -666,13 +800,20 @@ function Unit.prototype.playAnimation(self, animation, rarity)
666
800
  if type(animation) == "number" then
667
801
  setUnitAnimationByIndex(self.handle, animation)
668
802
  elseif rarity then
669
- setUnitAnimationWithRarity(self.handle, animation, rarity)
803
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
670
804
  else
671
805
  setUnitAnimation(self.handle, animation)
672
806
  end
673
807
  end
808
+ function Unit.prototype.resetAnimation(self)
809
+ ResetUnitAnimation(self.handle)
810
+ end
674
811
  function Unit.prototype.queueAnimation(self, animation)
675
- queueUnitAnimation(self.handle, animation)
812
+ QueueUnitAnimation(self.handle, animation)
813
+ end
814
+ function Unit.prototype.delayHealthChecks(self)
815
+ self[103] = (self[103] or 0) + 1
816
+ Timer:run(delayHealthChecksCallback, self)
676
817
  end
677
818
  function Unit.prototype.setPosition(self, x, y)
678
819
  setUnitPosition(self.handle, x, y)
@@ -681,14 +822,21 @@ function Unit.prototype.isSelected(self, player)
681
822
  return IsUnitSelected(self.handle, player.handle)
682
823
  end
683
824
  function Unit.prototype.explode(self)
684
- setUnitExploded(self.handle, true)
825
+ SetUnitExploded(self.handle, true)
685
826
  killUnit(self.handle)
686
827
  end
687
828
  function Unit.prototype.kill(self)
688
829
  killUnit(self.handle)
689
830
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
831
+ function Unit.prototype.revive(self, x, y, doEffect)
832
+ local ____ReviveHero_5 = ReviveHero
833
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
834
+ local ____doEffect_3 = doEffect
835
+ if ____doEffect_3 == nil then
836
+ ____doEffect_3 = false
837
+ end
838
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
839
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
840
  end
693
841
  function Unit.prototype.healTarget(self, target, amount)
694
842
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +876,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
876
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
877
  end
730
878
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
879
+ return Item:of(unitItemInSlot(self.handle, slot))
732
880
  end
733
881
  function Unit.prototype.addAbility(self, abilityId)
734
882
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +932,9 @@ end
784
932
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
933
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
934
  end
935
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
936
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
937
+ end
787
938
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
939
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
940
  end
@@ -794,8 +945,15 @@ function Unit.prototype.interruptAttack(self)
794
945
  unitInterruptAttack(self.handle)
795
946
  end
796
947
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
948
+ local handle = self.handle
949
+ unitDisableAbility(handle, abilityId, true, false)
950
+ Timer:run(
951
+ unitDisableAbility,
952
+ handle,
953
+ abilityId,
954
+ false,
955
+ false
956
+ )
799
957
  end
800
958
  function Unit.prototype.getDistanceTo(self, target)
801
959
  local handle = self.handle
@@ -855,18 +1013,18 @@ function Unit.prototype.unpauseEx(self)
855
1013
  self:decrementStunCounter()
856
1014
  end
857
1015
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1016
+ local stunCounter = self[102] or 0
1017
+ if not self[101] or stunCounter >= 0 then
860
1018
  BlzPauseUnitEx(self.handle, true)
861
1019
  end
862
- self[101] = stunCounter + 1
1020
+ self[102] = stunCounter + 1
863
1021
  end
864
1022
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1023
+ local stunCounter = self[102] or 0
1024
+ if not self[101] or stunCounter >= 1 then
867
1025
  BlzPauseUnitEx(self.handle, false)
868
1026
  end
869
- self[101] = stunCounter - 1
1027
+ self[102] = stunCounter - 1
870
1028
  end
871
1029
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1030
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1126,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1126
  )
969
1127
  return targetCollection
970
1128
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1129
+ function Unit.getSelectionOf(self, player, target)
1130
+ if target == nil then
1131
+ target = {}
1132
+ end
1133
+ targetCollection = target
973
1134
  targetCollectionNextIndex = 1
974
1135
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1136
  return targetCollection
@@ -991,6 +1152,9 @@ end
991
1152
  function Unit.prototype.__tostring(self)
992
1153
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1154
  end
1155
+ function Unit.getBySyncId(self, syncId)
1156
+ return unitBySyncId[syncId]
1157
+ end
994
1158
  __TS__SetDescriptor(
995
1159
  Unit.prototype,
996
1160
  "_deltas",
@@ -1054,6 +1218,14 @@ __TS__SetDescriptor(
1054
1218
  end},
1055
1219
  true
1056
1220
  )
1221
+ __TS__SetDescriptor(
1222
+ Unit.prototype,
1223
+ "isStunned",
1224
+ {get = function(self)
1225
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1226
+ end},
1227
+ true
1228
+ )
1057
1229
  __TS__SetDescriptor(
1058
1230
  Unit.prototype,
1059
1231
  "combatClassifications",
@@ -1071,12 +1243,27 @@ __TS__SetDescriptor(
1071
1243
  Unit.prototype,
1072
1244
  "weapons",
1073
1245
  {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
1246
+ return {self.firstWeapon, self.secondWeapon}
1247
+ end},
1248
+ true
1249
+ )
1250
+ __TS__SetDescriptor(
1251
+ Unit.prototype,
1252
+ "firstWeapon",
1253
+ {get = function(self)
1254
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1255
+ rawset(self, "firstWeapon", weapon)
1256
+ return weapon
1257
+ end},
1258
+ true
1259
+ )
1260
+ __TS__SetDescriptor(
1261
+ Unit.prototype,
1262
+ "secondWeapon",
1263
+ {get = function(self)
1264
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1265
+ rawset(self, "secondWeapon", weapon)
1266
+ return weapon
1080
1267
  end},
1081
1268
  true
1082
1269
  )
@@ -1112,6 +1299,19 @@ __TS__SetDescriptor(
1112
1299
  },
1113
1300
  true
1114
1301
  )
1302
+ __TS__SetDescriptor(
1303
+ Unit.prototype,
1304
+ "primaryAttribute",
1305
+ {
1306
+ get = function(self)
1307
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1308
+ end,
1309
+ set = function(self, primaryAttribute)
1310
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1311
+ end
1312
+ },
1313
+ true
1314
+ )
1115
1315
  __TS__SetDescriptor(
1116
1316
  Unit.prototype,
1117
1317
  "strengthBase",
@@ -1233,17 +1433,17 @@ __TS__SetDescriptor(
1233
1433
  "isTeamGlowVisible",
1234
1434
  {
1235
1435
  get = function(self)
1236
- return not self[103]
1436
+ return not self[106]
1237
1437
  end,
1238
1438
  set = function(self, isTeamGlowVisible)
1239
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1439
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1440
+ local ____temp_6
1241
1441
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1442
+ ____temp_6 = true
1243
1443
  else
1244
- ____temp_2 = nil
1444
+ ____temp_6 = nil
1245
1445
  end
1246
- self[103] = ____temp_2
1446
+ self[106] = ____temp_6
1247
1447
  end
1248
1448
  },
1249
1449
  true
@@ -1252,9 +1452,9 @@ __TS__SetDescriptor(
1252
1452
  Unit.prototype,
1253
1453
  "color",
1254
1454
  {set = function(self, color)
1255
- setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1257
- showUnitTeamGlow(self.handle, false)
1455
+ SetUnitColor(self.handle, color.handle)
1456
+ if self[106] then
1457
+ BlzShowUnitTeamGlow(self.handle, false)
1258
1458
  end
1259
1459
  end},
1260
1460
  true
@@ -1277,10 +1477,14 @@ __TS__SetDescriptor(
1277
1477
  "maxHealth",
1278
1478
  {
1279
1479
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1480
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1481
  end,
1282
1482
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1483
+ if maxHealth < 1 and self[103] ~= nil then
1484
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1485
+ maxHealth = 1
1486
+ end
1487
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1488
  end
1285
1489
  },
1286
1490
  true
@@ -1322,10 +1526,10 @@ __TS__SetDescriptor(
1322
1526
  "health",
1323
1527
  {
1324
1528
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1529
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1530
  end,
1327
1531
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1532
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1533
  end
1330
1534
  },
1331
1535
  true
@@ -1419,7 +1623,7 @@ __TS__SetDescriptor(
1419
1623
  "x",
1420
1624
  {
1421
1625
  get = function(self)
1422
- return getUnitX(self.handle)
1626
+ return self[107] or getUnitX(self.handle)
1423
1627
  end,
1424
1628
  set = function(self, v)
1425
1629
  SetUnitX(self.handle, v)
@@ -1432,7 +1636,7 @@ __TS__SetDescriptor(
1432
1636
  "y",
1433
1637
  {
1434
1638
  get = function(self)
1435
- return getUnitY(self.handle)
1639
+ return self[108] or getUnitY(self.handle)
1436
1640
  end,
1437
1641
  set = function(self, v)
1438
1642
  SetUnitY(self.handle, v)
@@ -1518,10 +1722,10 @@ __TS__SetDescriptor(
1518
1722
  "gold",
1519
1723
  {
1520
1724
  get = function(self)
1521
- return getResourceAmount(self.handle)
1725
+ return GetResourceAmount(self.handle)
1522
1726
  end,
1523
1727
  set = function(self, gold)
1524
- setResourceAmount(self.handle, gold)
1728
+ SetResourceAmount(self.handle, gold)
1525
1729
  end
1526
1730
  },
1527
1731
  true
@@ -1536,17 +1740,17 @@ __TS__SetDescriptor(
1536
1740
  set = function(self, isPaused)
1537
1741
  local handle = self.handle
1538
1742
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1743
+ self[101] = true
1744
+ for _ = self[102] or 0, -1 do
1541
1745
  BlzPauseUnitEx(handle, true)
1542
1746
  end
1543
1747
  PauseUnit(handle, true)
1544
1748
  elseif not isPaused and IsUnitPaused(handle) then
1545
1749
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1750
+ for _ = self[102] or 0, -1 do
1547
1751
  BlzPauseUnitEx(handle, false)
1548
1752
  end
1549
- self[100] = nil
1753
+ self[101] = nil
1550
1754
  end
1551
1755
  end
1552
1756
  },
@@ -1649,6 +1853,19 @@ __TS__SetDescriptor(
1649
1853
  end},
1650
1854
  true
1651
1855
  )
1856
+ __TS__SetDescriptor(
1857
+ Unit.prototype,
1858
+ "movementType",
1859
+ {
1860
+ get = function(self)
1861
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1862
+ end,
1863
+ set = function(self, movementType)
1864
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1865
+ end
1866
+ },
1867
+ true
1868
+ )
1652
1869
  __TS__SetDescriptor(
1653
1870
  Unit.prototype,
1654
1871
  "pathing",
@@ -1903,7 +2120,6 @@ Unit.onDecay = __TS__New(
1903
2120
  Unit.onResurrect = __TS__New(
1904
2121
  InitializingEvent,
1905
2122
  function(event)
1906
- local invoke = Event.invoke
1907
2123
  local dead = setmetatable({}, {__mode = "k"})
1908
2124
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2125
  dead[unit] = true
@@ -1919,10 +2135,15 @@ Unit.onResurrect = __TS__New(
1919
2135
  Unit.morphEvent = __TS__New(
1920
2136
  InitializingEvent,
1921
2137
  function(event)
2138
+ local function ifNotLeft(unit)
2139
+ local handle = unit.handle
2140
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2141
+ invoke(event, unit)
2142
+ end
2143
+ end
1922
2144
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2145
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2146
+ Timer:run(ifNotLeft, unit)
1926
2147
  end
1927
2148
  end)
1928
2149
  end
@@ -1960,27 +2181,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2181
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2182
  InitializingEvent,
1962
2183
  function(event)
1963
- local invoke = Event.invoke
1964
2184
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2185
+ local ____GetSpellTargetUnit_result_9
1966
2186
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2187
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2188
  else
1969
- local ____GetSpellTargetItem_result_4
2189
+ local ____GetSpellTargetItem_result_8
1970
2190
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2191
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2192
  else
1973
- local ____GetSpellTargetDestructable_result_3
2193
+ local ____GetSpellTargetDestructable_result_7
1974
2194
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2195
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2196
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2197
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2198
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2199
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2200
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2201
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2202
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2203
+ local target = ____GetSpellTargetUnit_result_9
1984
2204
  if target then
1985
2205
  invoke(event, unit, id, target)
1986
2206
  end
@@ -2152,10 +2372,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2372
  ____exports.UnitTriggerEvent,
2153
2373
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2374
  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
2375
+ local handle = getOrderedUnit()
2376
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2377
+ local unit = ____exports.Unit:of(handle)
2378
+ if unit.state == 1 then
2379
+ return unit, getIssuedOrderId()
2380
+ end
2159
2381
  end
2160
2382
  return IgnoreEvent
2161
2383
  end
@@ -2177,7 +2399,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2399
  )
2178
2400
  Unit.onDamaging = (function()
2179
2401
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2402
  local trigger = CreateTrigger()
2182
2403
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2404
  TriggerAddCondition(
@@ -2187,13 +2408,18 @@ Unit.onDamaging = (function()
2187
2408
  if source and source.typeId == dummyUnitId then
2188
2409
  source = nil
2189
2410
  end
2190
- local target = BlzGetEventDamageTarget()
2411
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2412
+ local metadata = damageMetadataByTarget[target]
2413
+ damageMetadataByTarget[target] = nil
2191
2414
  local data = {
2192
2415
  amount = GetEventDamage(),
2193
- attackType = BlzGetEventAttackType(),
2416
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2194
2417
  damageType = BlzGetEventDamageType(),
2195
2418
  weaponType = BlzGetEventWeaponType(),
2196
- isAttack = BlzGetEventIsAttack()
2419
+ metadata = metadata,
2420
+ isAttack = BlzGetEventIsAttack(),
2421
+ originalAmount = GetEventDamage(),
2422
+ originalMetadata = metadata
2197
2423
  }
2198
2424
  if data.isAttack and source then
2199
2425
  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 +2433,22 @@ Unit.onDamaging = (function()
2207
2433
  invoke(
2208
2434
  event,
2209
2435
  source,
2210
- ____exports.Unit:of(target),
2436
+ target,
2211
2437
  setmetatable(
2212
2438
  {},
2213
2439
  {
2214
2440
  __index = data,
2215
2441
  __newindex = function(self, key, value)
2216
- damageSetters[key](value)
2442
+ local damageSetter = damageSetters[key]
2443
+ if damageSetter ~= nil then
2444
+ damageSetter(value)
2445
+ end
2217
2446
  data[key] = value
2218
2447
  end
2219
2448
  }
2220
2449
  )
2221
2450
  )
2451
+ damagingEventByTarget[target] = data
2222
2452
  return
2223
2453
  end
2224
2454
  BlzSetEventDamage(0)
@@ -2226,7 +2456,7 @@ Unit.onDamaging = (function()
2226
2456
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
2457
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
2458
  local sourceOwner = source.owner.handle
2229
- local targetOwner = GetOwningPlayer(target)
2459
+ local targetOwner = target.owner.handle
2230
2460
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
2461
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
2462
  Timer:run(function()
@@ -2242,23 +2472,19 @@ Unit.onDamaging = (function()
2242
2472
  for ____, ____value in ipairs(source._attackHandlers) do
2243
2473
  local condition = ____value[1]
2244
2474
  local action = ____value[2]
2245
- if condition(
2246
- source,
2247
- ____exports.Unit:of(target),
2248
- data
2249
- ) then
2475
+ if condition(source, target, data) then
2250
2476
  action(
2251
2477
  source,
2252
- ____exports.Unit:of(target),
2478
+ target,
2253
2479
  setmetatable(
2254
2480
  {fire = function()
2255
2481
  UnitDamageTarget(
2256
2482
  source.handle,
2257
- target,
2483
+ target.handle,
2258
2484
  data.amount,
2259
2485
  true,
2260
2486
  true,
2261
- data.attackType,
2487
+ attackTypeToNative(data.attackType),
2262
2488
  data.damageType,
2263
2489
  data.weaponType
2264
2490
  )
@@ -2276,7 +2502,6 @@ end)()
2276
2502
  Unit.onDamage = __TS__New(
2277
2503
  InitializingEvent,
2278
2504
  function(event)
2279
- local invoke = Event.invoke
2280
2505
  local trigger = CreateTrigger()
2281
2506
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2507
  TriggerAddCondition(
@@ -2286,29 +2511,44 @@ Unit.onDamage = __TS__New(
2286
2511
  if source and source.typeId == dummyUnitId then
2287
2512
  source = nil
2288
2513
  end
2514
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2515
+ local damagingEvent = damagingEventByTarget[target]
2516
+ damagingEventByTarget[target] = nil
2289
2517
  local data = {
2290
2518
  amount = GetEventDamage(),
2291
- attackType = BlzGetEventAttackType(),
2519
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2292
2520
  damageType = BlzGetEventDamageType(),
2293
2521
  weaponType = BlzGetEventWeaponType(),
2522
+ metadata = damagingEvent and damagingEvent.metadata,
2294
2523
  isAttack = BlzGetEventIsAttack(),
2524
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2525
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2295
2526
  preventDeath = damageEventPreventDeath
2296
2527
  }
2528
+ if damagingEvent then
2529
+ for key, value in pairs(damagingEvent) do
2530
+ if isAttribute(key) then
2531
+ data[key] = value
2532
+ end
2533
+ end
2534
+ end
2297
2535
  local evData = setmetatable(
2298
2536
  {},
2299
2537
  {
2300
2538
  __index = data,
2301
2539
  __newindex = function(self, key, value)
2302
- damageSetters[key](value)
2540
+ local damageSetter = damageSetters[key]
2541
+ if damageSetter ~= nil then
2542
+ damageSetter(value)
2543
+ end
2303
2544
  data[key] = value
2304
2545
  end
2305
2546
  }
2306
2547
  )
2307
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
2548
  invoke(event, source, target, evData)
2309
2549
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2550
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2551
+ target[105] = (target[105] or 0) + bonusHealth
2312
2552
  BlzSetUnitMaxHP(
2313
2553
  target.handle,
2314
2554
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2562,7 @@ Unit.onDamage = __TS__New(
2322
2562
  evData[0],
2323
2563
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2564
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2565
+ target[105] = (target[105] or 0) - bonusHealth
2326
2566
  SetWidgetLife(
2327
2567
  target.handle,
2328
2568
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2582,91 @@ Unit.onDamage = __TS__New(
2342
2582
  DestroyTrigger(trigger)
2343
2583
  end
2344
2584
  )
2345
- Unit.onItemDrop = __TS__New(
2585
+ Unit.itemDroppedEvent = __TS__New(
2346
2586
  ____exports.UnitTriggerEvent,
2347
2587
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2588
  function()
2349
2589
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2590
+ local item = getManipulatedItem()
2591
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2592
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2593
  end
2353
2594
  return IgnoreEvent
2354
2595
  end
2355
2596
  )
2356
- Unit.onItemPickup = __TS__New(
2597
+ Unit.itemPickedUpEvent = __TS__New(
2357
2598
  ____exports.UnitTriggerEvent,
2358
2599
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2600
  function()
2360
2601
  local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2602
+ local item = getManipulatedItem()
2603
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2604
+ return ____exports.Unit:of(unit), Item:of(item)
2363
2605
  end
2364
2606
  return IgnoreEvent
2365
2607
  end
2366
2608
  )
2367
- Unit.onItemUse = __TS__New(
2609
+ Unit.itemUsedEvent = __TS__New(
2368
2610
  ____exports.UnitTriggerEvent,
2369
2611
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2612
+ function()
2613
+ local unit = getTriggerUnit()
2614
+ local item = getManipulatedItem()
2615
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2616
+ return ____exports.Unit:of(unit), Item:of(item)
2617
+ end
2618
+ return IgnoreEvent
2619
+ end
2620
+ )
2621
+ Unit.itemStackedEvent = __TS__New(
2622
+ ____exports.UnitTriggerEvent,
2623
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2624
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2625
+ )
2626
+ __TS__ObjectDefineProperty(
2627
+ Unit,
2628
+ "itemUseOrderEvent",
2629
+ {get = function(self)
2630
+ local event = __TS__New(Event)
2631
+ for order = orderId("useslot0"), orderId("useslot5") do
2632
+ local slot = order - orderId("useslot0")
2633
+ local function listener(unit)
2634
+ local item = unit.items[slot + 1]
2635
+ if item ~= nil then
2636
+ invoke(event, unit, item)
2637
+ end
2638
+ end
2639
+ self.onImmediateOrder[order]:addListener(listener)
2640
+ self.onTargetOrder[order]:addListener(listener)
2641
+ self.onPointOrder[order]:addListener(listener)
2642
+ end
2643
+ rawset(self, "itemUseOrderEvent", event)
2644
+ return event
2645
+ end}
2646
+ )
2647
+ __TS__ObjectDefineProperty(
2648
+ Unit,
2649
+ "itemMoveOrderEvent",
2650
+ {get = function(self)
2651
+ local event = __TS__New(Event)
2652
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2653
+ local slotTo = order - orderId("moveslot0")
2654
+ self.onTargetOrder[order]:addListener(function(unit, item)
2655
+ local slotFrom = unit.items:findSlot(item)
2656
+ if slotFrom ~= nil then
2657
+ invoke(
2658
+ event,
2659
+ unit,
2660
+ item,
2661
+ slotFrom,
2662
+ slotTo
2663
+ )
2664
+ end
2665
+ end)
2666
+ end
2667
+ rawset(self, "itemMoveOrderEvent", event)
2668
+ return event
2669
+ end}
2371
2670
  )
2372
2671
  __TS__ObjectDefineProperty(
2373
2672
  Unit,