warscript 0.0.1-dev.ee2345e → 0.0.1-dev.f1df135

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 (201) hide show
  1. package/attributes.d.ts +0 -1
  2. package/binaryreader.d.ts +1 -0
  3. package/binaryreader.lua +3 -0
  4. package/config.d.ts +5 -0
  5. package/config.lua +10 -0
  6. package/core/types/effect.d.ts +14 -6
  7. package/core/types/effect.lua +131 -35
  8. package/core/types/frame.d.ts +8 -1
  9. package/core/types/frame.lua +93 -1
  10. package/core/types/group.d.ts +0 -1
  11. package/core/types/image.d.ts +0 -1
  12. package/core/types/missile.d.ts +2 -2
  13. package/core/types/missile.lua +8 -2
  14. package/core/types/sound.d.ts +17 -24
  15. package/core/types/sound.lua +94 -24
  16. package/core/types/timer.d.ts +6 -7
  17. package/core/types/timer.lua +18 -21
  18. package/core/types/unit.lua +8 -0
  19. package/core/util.d.ts +1 -1
  20. package/core/util.lua +18 -1
  21. package/decl/index.d.ts +1 -0
  22. package/engine/ability.d.ts +1 -1
  23. package/engine/behavior.d.ts +10 -10
  24. package/engine/behavior.lua +6 -6
  25. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  26. package/engine/behaviour/ability/always-enabled.lua +31 -0
  27. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  28. package/engine/behaviour/ability/apply-buff.lua +32 -0
  29. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  30. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  31. package/engine/behaviour/ability/damage.d.ts +36 -11
  32. package/engine/behaviour/ability/damage.lua +90 -32
  33. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  34. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  35. package/engine/behaviour/ability/heal.d.ts +33 -6
  36. package/engine/behaviour/ability/heal.lua +89 -10
  37. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  38. package/engine/behaviour/ability/instant-impact.lua +4 -15
  39. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  40. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  41. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  42. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  43. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  44. package/engine/behaviour/ability/restore-mana.lua +29 -0
  45. package/engine/behaviour/ability.d.ts +27 -4
  46. package/engine/behaviour/ability.lua +152 -17
  47. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  48. package/engine/behaviour/unit.d.ts +10 -2
  49. package/engine/behaviour/unit.lua +27 -0
  50. package/engine/buff.d.ts +103 -41
  51. package/engine/buff.lua +465 -212
  52. package/engine/game-map.d.ts +7 -0
  53. package/engine/game-map.lua +32 -0
  54. package/engine/internal/ability.d.ts +16 -13
  55. package/engine/internal/ability.lua +80 -76
  56. package/engine/internal/item/ability.lua +106 -0
  57. package/engine/internal/item+owner.lua +2 -2
  58. package/engine/internal/item.d.ts +2 -2
  59. package/engine/internal/item.lua +56 -25
  60. package/engine/internal/mechanics/ability-duration.lua +1 -1
  61. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  62. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  63. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  64. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  65. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  66. package/engine/internal/object-data/evasion-probability.lua +16 -0
  67. package/engine/internal/unit/ability.d.ts +10 -1
  68. package/engine/internal/unit/ability.lua +36 -14
  69. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  70. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  71. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  72. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  73. package/engine/internal/unit/bonus.d.ts +11 -8
  74. package/engine/internal/unit/bonus.lua +23 -1
  75. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  76. package/engine/internal/unit/ignore-events-items.lua +5 -0
  77. package/engine/internal/unit/item.d.ts +24 -0
  78. package/engine/internal/unit/item.lua +78 -0
  79. package/engine/internal/unit/main-selected.d.ts +13 -0
  80. package/engine/internal/unit/main-selected.lua +51 -0
  81. package/engine/internal/unit+ability.lua +2 -2
  82. package/engine/internal/unit+transport.lua +4 -10
  83. package/engine/internal/unit-missile-launch.lua +25 -6
  84. package/engine/internal/unit.d.ts +64 -16
  85. package/engine/internal/unit.lua +381 -134
  86. package/engine/internal/utility.lua +12 -0
  87. package/engine/lightning.d.ts +12 -5
  88. package/engine/lightning.lua +48 -14
  89. package/engine/local-client.d.ts +7 -2
  90. package/engine/local-client.lua +82 -0
  91. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  92. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  93. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  94. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  95. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  96. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  97. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  98. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  99. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  100. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  101. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  102. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  103. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  104. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  105. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  106. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  107. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  108. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  109. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  110. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  111. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  112. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  113. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  114. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  115. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  116. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  117. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  118. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  119. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  120. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  121. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  122. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  123. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  124. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  125. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  126. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  127. package/engine/object-data/entry/ability-type/web.lua +52 -0
  128. package/engine/object-data/entry/ability-type.d.ts +19 -18
  129. package/engine/object-data/entry/ability-type.lua +82 -33
  130. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  131. package/engine/object-data/entry/buff-type/applicable.lua +13 -37
  132. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  133. package/engine/object-data/entry/buff-type.d.ts +1 -2
  134. package/engine/object-data/entry/buff-type.lua +2 -2
  135. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  136. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  137. package/engine/object-data/entry/item-type.d.ts +15 -2
  138. package/engine/object-data/entry/item-type.lua +93 -2
  139. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  140. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  141. package/engine/object-data/entry/sound-preset.lua +140 -0
  142. package/engine/object-data/entry/unit-type.d.ts +45 -3
  143. package/engine/object-data/entry/unit-type.lua +394 -57
  144. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  145. package/engine/object-data/entry/upgrade.d.ts +1 -2
  146. package/engine/object-data/entry/upgrade.lua +4 -4
  147. package/engine/object-data/entry.d.ts +18 -17
  148. package/engine/object-data/entry.lua +60 -32
  149. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  150. package/engine/object-field/ability.d.ts +26 -3
  151. package/engine/object-field/ability.lua +54 -1
  152. package/engine/object-field.d.ts +2 -3
  153. package/engine/object-field.lua +4 -0
  154. package/engine/random.d.ts +1 -0
  155. package/engine/random.lua +9 -0
  156. package/engine/standard/entries/sound-preset.d.ts +10 -0
  157. package/engine/standard/entries/sound-preset.lua +10 -0
  158. package/engine/standard/entries/unit-type.d.ts +39 -1
  159. package/engine/standard/entries/unit-type.lua +39 -1
  160. package/engine/standard/fields/ability.d.ts +3 -1
  161. package/engine/standard/fields/ability.lua +3 -1
  162. package/engine/unit.d.ts +3 -0
  163. package/engine/unit.lua +12 -2
  164. package/event.d.ts +2 -3
  165. package/event.lua +9 -5
  166. package/index.d.ts +1 -0
  167. package/index.lua +1 -0
  168. package/lualib_bundle.lua +146 -42
  169. package/math/vec2.d.ts +2 -9
  170. package/math.d.ts +0 -2
  171. package/net/socket.d.ts +7 -1
  172. package/net/socket.lua +45 -4
  173. package/network.d.ts +1 -0
  174. package/network.lua +3 -2
  175. package/objutil/ability.d.ts +0 -1
  176. package/objutil/buff.d.ts +0 -1
  177. package/objutil/buff.lua +1 -1
  178. package/objutil/object.d.ts +0 -1
  179. package/objutil/unit.d.ts +0 -1
  180. package/objutil/unit.lua +8 -0
  181. package/package.json +13 -14
  182. package/patch-lua.d.ts +0 -0
  183. package/patch-lua.lua +10 -0
  184. package/property.d.ts +55 -0
  185. package/property.lua +374 -0
  186. package/string.d.ts +30 -0
  187. package/string.lua +14 -0
  188. package/util/stream.d.ts +0 -1
  189. package/utility/arrays.d.ts +11 -5
  190. package/utility/arrays.lua +34 -3
  191. package/utility/bit-set.d.ts +0 -2
  192. package/utility/lazy.d.ts +2 -0
  193. package/utility/lazy.lua +14 -0
  194. package/utility/linked-set.d.ts +11 -3
  195. package/utility/linked-set.lua +5 -2
  196. package/utility/lua-maps.d.ts +1 -2
  197. package/utility/lua-sets.d.ts +1 -2
  198. package/utility/reflection.lua +11 -7
  199. package/utility/types.d.ts +1 -0
  200. package/core/mapbounds.d.ts +0 -8
  201. 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,11 +51,14 @@ 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
51
56
  local match = string.match
52
57
  local ____tostring = _G.tostring
53
58
  local setUnitAnimation = SetUnitAnimation
54
59
  local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
60
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
+ local resetUnitAnimation = ResetUnitAnimation
56
62
  local queueUnitAnimation = QueueUnitAnimation
57
63
  local getUnitIntegerField = BlzGetUnitIntegerField
58
64
  local getUnitRealField = BlzGetUnitRealField
@@ -72,6 +78,7 @@ local setUnitScale = SetUnitScale
72
78
  local setUnitPosition = SetUnitPosition
73
79
  local setUnitTimeScale = SetUnitTimeScale
74
80
  local getHandleId = GetHandleId
81
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
82
  local createUnit = CreateUnit
76
83
  local killUnit = KillUnit
77
84
  local setUnitExploded = SetUnitExploded
@@ -92,6 +99,10 @@ local isUnitInRangeXY = IsUnitInRangeXY
92
99
  local isUnitInRange = IsUnitInRange
93
100
  local setResourceAmount = SetResourceAmount
94
101
  local getResourceAmount = GetResourceAmount
102
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
103
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
104
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
105
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
106
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
107
  local unitDisableAbility = BlzUnitDisableAbility
97
108
  local unitInterruptAttack = BlzUnitInterruptAttack
@@ -275,16 +286,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
286
  end
276
287
  local function dispatch(event, idGetter, argsGetter)
277
288
  local initialized = false
278
- local x = {}
279
289
  return setmetatable(
280
- x,
290
+ {},
281
291
  {
282
292
  __index = function(self, id)
283
293
  if type(id) ~= "number" then
284
294
  return event[id]
285
295
  end
286
296
  if not initialized then
287
- local invoke = Event.invoke
288
297
  event:addListener(function(...)
289
298
  local id = idGetter(...)
290
299
  local dispatched = rawget(self, id)
@@ -322,7 +331,6 @@ local function dispatchAbility(event)
322
331
  return event[id]
323
332
  end
324
333
  if not initialized then
325
- local invoke = Event.invoke
326
334
  event:addListener(function(unit, ability, ...)
327
335
  local dispatched = rawget(self, ability.typeId)
328
336
  if dispatched ~= nil then
@@ -387,51 +395,158 @@ local getters = {
387
395
  return BlzGetUnitArmor(unit)
388
396
  end
389
397
  }
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
- }
398
+ ____exports.UnitWeapon = __TS__Class()
399
+ local UnitWeapon = ____exports.UnitWeapon
400
+ UnitWeapon.name = "UnitWeapon"
401
+ function UnitWeapon.prototype.____constructor(self, unit, index)
402
+ self.unit = unit
403
+ self.index = index
404
+ end
405
+ __TS__SetDescriptor(
406
+ UnitWeapon.prototype,
407
+ "cooldown",
408
+ {
409
+ get = function(self)
410
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
411
+ end,
412
+ set = function(self, cooldown)
413
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
414
+ end
415
+ },
416
+ true
417
+ )
418
+ __TS__SetDescriptor(
419
+ UnitWeapon.prototype,
420
+ "damage",
421
+ {
422
+ get = function(self)
423
+ local minimumDamage = self.damageBase + self.damageDiceCount
424
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
425
+ return {minimumDamage, maximumDamage}
426
+ end,
427
+ set = function(self, ____bindingPattern0)
428
+ local maximumDamage
429
+ local minimumDamage
430
+ minimumDamage = ____bindingPattern0[1]
431
+ maximumDamage = ____bindingPattern0[2]
432
+ self.damageBase = minimumDamage - 1
433
+ self.damageDiceCount = 1
434
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
435
+ end
436
+ },
437
+ true
438
+ )
439
+ __TS__SetDescriptor(
440
+ UnitWeapon.prototype,
441
+ "damageBase",
442
+ {
443
+ get = function(self)
444
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
445
+ end,
446
+ set = function(self, damageBase)
447
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
448
+ end
449
+ },
450
+ true
451
+ )
452
+ __TS__SetDescriptor(
453
+ UnitWeapon.prototype,
454
+ "damageDiceCount",
455
+ {
456
+ get = function(self)
457
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
458
+ end,
459
+ set = function(self, damageDiceCount)
460
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
461
+ end
462
+ },
463
+ true
464
+ )
465
+ __TS__SetDescriptor(
466
+ UnitWeapon.prototype,
467
+ "damageDiceSideCount",
468
+ {
469
+ get = function(self)
470
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
471
+ end,
472
+ set = function(self, damageDiceSideCount)
473
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
474
+ end
475
+ },
476
+ true
477
+ )
478
+ __TS__SetDescriptor(
479
+ UnitWeapon.prototype,
480
+ "range",
481
+ {
482
+ get = function(self)
483
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
484
+ end,
485
+ set = function(self, range)
486
+ local handle = self.unit.handle
487
+ local index = self.index
488
+ setUnitWeaponRealField(
489
+ handle,
490
+ UNIT_WEAPON_RF_ATTACK_RANGE,
491
+ index + 1,
492
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
493
+ )
494
+ end
495
+ },
496
+ true
497
+ )
498
+ __TS__SetDescriptor(
499
+ UnitWeapon.prototype,
500
+ "impactDelay",
501
+ {
502
+ get = function(self)
503
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
504
+ end,
505
+ set = function(self, impactDelay)
506
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
507
+ end
508
+ },
509
+ true
510
+ )
511
+ __TS__SetDescriptor(
512
+ UnitWeapon.prototype,
513
+ "missileArc",
514
+ {
515
+ get = function(self)
516
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
517
+ end,
518
+ set = function(self, missileArc)
519
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
520
+ end
521
+ },
522
+ true
523
+ )
524
+ __TS__SetDescriptor(
525
+ UnitWeapon.prototype,
526
+ "missileModelPath",
527
+ {
528
+ get = function(self)
529
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
530
+ end,
531
+ set = function(self, missileModelPath)
532
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
533
+ end
534
+ },
535
+ true
536
+ )
537
+ __TS__SetDescriptor(
538
+ UnitWeapon.prototype,
539
+ "missileSpeed",
540
+ {
541
+ get = function(self)
542
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
543
+ end,
544
+ set = function(self, missileSpeed)
545
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
546
+ end
547
+ },
548
+ true
549
+ )
435
550
  local unitInventorySize = UnitInventorySize
436
551
  local unitItemInSlot = UnitItemInSlot
437
552
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +557,6 @@ local getAbilityName = GetAbilityName
442
557
  local unitAddAbility = UnitAddAbility
443
558
  local getUnitGoldCost = GetUnitGoldCost
444
559
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
560
  local unitRemoveAbility = UnitRemoveAbility
448
561
  local function retrieveAbility(unit, ability, abilityId)
449
562
  if ability == nil then
@@ -453,17 +566,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
566
  ____exports.Unit:of(unit)
454
567
  )
455
568
  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
569
  for i = 0, unitInventorySize(unit) - 1 do
468
570
  local item = unitItemInSlot(unit, i)
469
571
  if getItemAbility(item, abilityId) == ability then
@@ -520,12 +622,34 @@ for ____, player in ipairs(Player.all) do
520
622
  ShowUnit(dummy, false)
521
623
  dummies[player] = dummy
522
624
  end
625
+ local function delayHealthChecksCallback(unit)
626
+ local counter = (unit[103] or 0) - 1
627
+ if counter ~= 0 then
628
+ unit[103] = counter
629
+ return
630
+ end
631
+ unit[103] = nil
632
+ local healthBonus = unit[104]
633
+ if healthBonus ~= nil then
634
+ unit[104] = nil
635
+ local handle = unit.handle
636
+ BlzSetUnitMaxHP(
637
+ handle,
638
+ BlzGetUnitMaxHP(handle) - healthBonus
639
+ )
640
+ end
641
+ end
642
+ local nextSyncId = 1
643
+ local unitBySyncId = setmetatable({}, {__mode = "k"})
523
644
  ____exports.Unit = __TS__Class()
524
645
  local Unit = ____exports.Unit
525
646
  Unit.name = "Unit"
526
647
  __TS__ClassExtends(Unit, Handle)
527
648
  function Unit.prototype.____constructor(self, handle)
528
649
  Handle.prototype.____constructor(self, handle)
650
+ local ____nextSyncId_0 = nextSyncId
651
+ nextSyncId = ____nextSyncId_0 + 1
652
+ self.syncId = ____nextSyncId_0
529
653
  self._owner = Player:of(getOwningPlayer(handle))
530
654
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
655
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +662,7 @@ function Unit.prototype.____constructor(self, handle)
538
662
  fourCC("Amrf")
539
663
  ))
540
664
  end
665
+ unitBySyncId[self.syncId] = self
541
666
  local ____ = self.abilities
542
667
  end
543
668
  function Unit.prototype.getEvent(self, event, collector)
@@ -556,6 +681,8 @@ function Unit.prototype.getEvent(self, event, collector)
556
681
  end
557
682
  function Unit.prototype.onDestroy(self)
558
683
  local handle = self.handle
684
+ self[107] = getUnitX(handle)
685
+ self[108] = getUnitY(handle)
559
686
  if not self._owner then
560
687
  self._owner = Player:of(getOwningPlayer(handle))
561
688
  end
@@ -623,8 +750,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
750
  end}
624
751
  end
625
752
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
753
+ local ____combatClassification_1 = combatClassification
754
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
755
  end
629
756
  function Unit.prototype.addClassification(self, classification)
630
757
  return unitAddType(self.handle, classification)
@@ -642,13 +769,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
769
  return isUnitInvisible(self.handle, player.handle)
643
770
  end
644
771
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
772
+ local ____temp_2
646
773
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
774
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
775
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
776
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
777
  end
651
- return ____temp_1
778
+ return ____temp_2
652
779
  end
653
780
  function Unit.prototype.isAllyOf(self, unit)
654
781
  return isUnitAlly(
@@ -671,9 +798,16 @@ function Unit.prototype.playAnimation(self, animation, rarity)
671
798
  setUnitAnimation(self.handle, animation)
672
799
  end
673
800
  end
801
+ function Unit.prototype.resetAnimation(self)
802
+ resetUnitAnimation(self.handle)
803
+ end
674
804
  function Unit.prototype.queueAnimation(self, animation)
675
805
  queueUnitAnimation(self.handle, animation)
676
806
  end
807
+ function Unit.prototype.delayHealthChecks(self)
808
+ self[103] = (self[103] or 0) + 1
809
+ Timer:run(delayHealthChecksCallback, self)
810
+ end
677
811
  function Unit.prototype.setPosition(self, x, y)
678
812
  setUnitPosition(self.handle, x, y)
679
813
  end
@@ -687,8 +821,15 @@ end
687
821
  function Unit.prototype.kill(self)
688
822
  killUnit(self.handle)
689
823
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
824
+ function Unit.prototype.revive(self, x, y, doEffect)
825
+ local ____ReviveHero_5 = ReviveHero
826
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
827
+ local ____doEffect_3 = doEffect
828
+ if ____doEffect_3 == nil then
829
+ ____doEffect_3 = false
830
+ end
831
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
832
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
833
  end
693
834
  function Unit.prototype.healTarget(self, target, amount)
694
835
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +869,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
869
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
870
  end
730
871
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
872
+ return Item:of(unitItemInSlot(self.handle, slot))
732
873
  end
733
874
  function Unit.prototype.addAbility(self, abilityId)
734
875
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +925,9 @@ end
784
925
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
926
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
927
  end
928
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
929
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
930
+ end
787
931
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
932
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
933
  end
@@ -794,8 +938,15 @@ function Unit.prototype.interruptAttack(self)
794
938
  unitInterruptAttack(self.handle)
795
939
  end
796
940
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
941
+ local handle = self.handle
942
+ unitDisableAbility(handle, abilityId, true, false)
943
+ Timer:run(
944
+ unitDisableAbility,
945
+ handle,
946
+ abilityId,
947
+ false,
948
+ false
949
+ )
799
950
  end
800
951
  function Unit.prototype.getDistanceTo(self, target)
801
952
  local handle = self.handle
@@ -855,18 +1006,18 @@ function Unit.prototype.unpauseEx(self)
855
1006
  self:decrementStunCounter()
856
1007
  end
857
1008
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1009
+ local stunCounter = self[102] or 0
1010
+ if not self[101] or stunCounter >= 0 then
860
1011
  BlzPauseUnitEx(self.handle, true)
861
1012
  end
862
- self[101] = stunCounter + 1
1013
+ self[102] = stunCounter + 1
863
1014
  end
864
1015
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1016
+ local stunCounter = self[102] or 0
1017
+ if not self[101] or stunCounter >= 1 then
867
1018
  BlzPauseUnitEx(self.handle, false)
868
1019
  end
869
- self[101] = stunCounter - 1
1020
+ self[102] = stunCounter - 1
870
1021
  end
871
1022
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1023
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1119,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1119
  )
969
1120
  return targetCollection
970
1121
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1122
+ function Unit.getSelectionOf(self, player, target)
1123
+ if target == nil then
1124
+ target = {}
1125
+ end
1126
+ targetCollection = target
973
1127
  targetCollectionNextIndex = 1
974
1128
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1129
  return targetCollection
@@ -991,6 +1145,9 @@ end
991
1145
  function Unit.prototype.__tostring(self)
992
1146
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1147
  end
1148
+ function Unit.getBySyncId(self, syncId)
1149
+ return unitBySyncId[syncId]
1150
+ end
994
1151
  __TS__SetDescriptor(
995
1152
  Unit.prototype,
996
1153
  "_deltas",
@@ -1054,6 +1211,14 @@ __TS__SetDescriptor(
1054
1211
  end},
1055
1212
  true
1056
1213
  )
1214
+ __TS__SetDescriptor(
1215
+ Unit.prototype,
1216
+ "isStunned",
1217
+ {get = function(self)
1218
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1219
+ end},
1220
+ true
1221
+ )
1057
1222
  __TS__SetDescriptor(
1058
1223
  Unit.prototype,
1059
1224
  "combatClassifications",
@@ -1071,12 +1236,27 @@ __TS__SetDescriptor(
1071
1236
  Unit.prototype,
1072
1237
  "weapons",
1073
1238
  {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
1239
+ return {self.firstWeapon, self.secondWeapon}
1240
+ end},
1241
+ true
1242
+ )
1243
+ __TS__SetDescriptor(
1244
+ Unit.prototype,
1245
+ "firstWeapon",
1246
+ {get = function(self)
1247
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1248
+ rawset(self, "firstWeapon", weapon)
1249
+ return weapon
1250
+ end},
1251
+ true
1252
+ )
1253
+ __TS__SetDescriptor(
1254
+ Unit.prototype,
1255
+ "secondWeapon",
1256
+ {get = function(self)
1257
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1258
+ rawset(self, "secondWeapon", weapon)
1259
+ return weapon
1080
1260
  end},
1081
1261
  true
1082
1262
  )
@@ -1233,17 +1413,17 @@ __TS__SetDescriptor(
1233
1413
  "isTeamGlowVisible",
1234
1414
  {
1235
1415
  get = function(self)
1236
- return not self[103]
1416
+ return not self[106]
1237
1417
  end,
1238
1418
  set = function(self, isTeamGlowVisible)
1239
1419
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1420
+ local ____temp_6
1241
1421
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1422
+ ____temp_6 = true
1243
1423
  else
1244
- ____temp_2 = nil
1424
+ ____temp_6 = nil
1245
1425
  end
1246
- self[103] = ____temp_2
1426
+ self[106] = ____temp_6
1247
1427
  end
1248
1428
  },
1249
1429
  true
@@ -1253,7 +1433,7 @@ __TS__SetDescriptor(
1253
1433
  "color",
1254
1434
  {set = function(self, color)
1255
1435
  setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1436
+ if self[106] then
1257
1437
  showUnitTeamGlow(self.handle, false)
1258
1438
  end
1259
1439
  end},
@@ -1277,10 +1457,14 @@ __TS__SetDescriptor(
1277
1457
  "maxHealth",
1278
1458
  {
1279
1459
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1460
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1461
  end,
1282
1462
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1463
+ if maxHealth < 1 and self[103] ~= nil then
1464
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1465
+ maxHealth = 1
1466
+ end
1467
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1468
  end
1285
1469
  },
1286
1470
  true
@@ -1322,10 +1506,10 @@ __TS__SetDescriptor(
1322
1506
  "health",
1323
1507
  {
1324
1508
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1509
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1510
  end,
1327
1511
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1512
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1513
  end
1330
1514
  },
1331
1515
  true
@@ -1419,7 +1603,7 @@ __TS__SetDescriptor(
1419
1603
  "x",
1420
1604
  {
1421
1605
  get = function(self)
1422
- return getUnitX(self.handle)
1606
+ return self[107] or getUnitX(self.handle)
1423
1607
  end,
1424
1608
  set = function(self, v)
1425
1609
  SetUnitX(self.handle, v)
@@ -1432,7 +1616,7 @@ __TS__SetDescriptor(
1432
1616
  "y",
1433
1617
  {
1434
1618
  get = function(self)
1435
- return getUnitY(self.handle)
1619
+ return self[108] or getUnitY(self.handle)
1436
1620
  end,
1437
1621
  set = function(self, v)
1438
1622
  SetUnitY(self.handle, v)
@@ -1536,17 +1720,17 @@ __TS__SetDescriptor(
1536
1720
  set = function(self, isPaused)
1537
1721
  local handle = self.handle
1538
1722
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1723
+ self[101] = true
1724
+ for _ = self[102] or 0, -1 do
1541
1725
  BlzPauseUnitEx(handle, true)
1542
1726
  end
1543
1727
  PauseUnit(handle, true)
1544
1728
  elseif not isPaused and IsUnitPaused(handle) then
1545
1729
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1730
+ for _ = self[102] or 0, -1 do
1547
1731
  BlzPauseUnitEx(handle, false)
1548
1732
  end
1549
- self[100] = nil
1733
+ self[101] = nil
1550
1734
  end
1551
1735
  end
1552
1736
  },
@@ -1903,7 +2087,6 @@ Unit.onDecay = __TS__New(
1903
2087
  Unit.onResurrect = __TS__New(
1904
2088
  InitializingEvent,
1905
2089
  function(event)
1906
- local invoke = Event.invoke
1907
2090
  local dead = setmetatable({}, {__mode = "k"})
1908
2091
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2092
  dead[unit] = true
@@ -1919,10 +2102,15 @@ Unit.onResurrect = __TS__New(
1919
2102
  Unit.morphEvent = __TS__New(
1920
2103
  InitializingEvent,
1921
2104
  function(event)
2105
+ local function ifNotLeft(unit)
2106
+ local handle = unit.handle
2107
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2108
+ invoke(event, unit)
2109
+ end
2110
+ end
1922
2111
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2112
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2113
+ Timer:run(ifNotLeft, unit)
1926
2114
  end
1927
2115
  end)
1928
2116
  end
@@ -1960,27 +2148,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2148
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2149
  InitializingEvent,
1962
2150
  function(event)
1963
- local invoke = Event.invoke
1964
2151
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2152
+ local ____GetSpellTargetUnit_result_9
1966
2153
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2154
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2155
  else
1969
- local ____GetSpellTargetItem_result_4
2156
+ local ____GetSpellTargetItem_result_8
1970
2157
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2158
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2159
  else
1973
- local ____GetSpellTargetDestructable_result_3
2160
+ local ____GetSpellTargetDestructable_result_7
1974
2161
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2162
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2163
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2164
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2165
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2166
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2167
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2168
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2169
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2170
+ local target = ____GetSpellTargetUnit_result_9
1984
2171
  if target then
1985
2172
  invoke(event, unit, id, target)
1986
2173
  end
@@ -2152,10 +2339,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2339
  ____exports.UnitTriggerEvent,
2153
2340
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2341
  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
2342
+ local handle = getOrderedUnit()
2343
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2344
+ local unit = ____exports.Unit:of(handle)
2345
+ if unit.state == 1 then
2346
+ return unit, getIssuedOrderId()
2347
+ end
2159
2348
  end
2160
2349
  return IgnoreEvent
2161
2350
  end
@@ -2177,7 +2366,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2366
  )
2178
2367
  Unit.onDamaging = (function()
2179
2368
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2369
  local trigger = CreateTrigger()
2182
2370
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2371
  TriggerAddCondition(
@@ -2276,7 +2464,6 @@ end)()
2276
2464
  Unit.onDamage = __TS__New(
2277
2465
  InitializingEvent,
2278
2466
  function(event)
2279
- local invoke = Event.invoke
2280
2467
  local trigger = CreateTrigger()
2281
2468
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2469
  TriggerAddCondition(
@@ -2292,6 +2479,7 @@ Unit.onDamage = __TS__New(
2292
2479
  damageType = BlzGetEventDamageType(),
2293
2480
  weaponType = BlzGetEventWeaponType(),
2294
2481
  isAttack = BlzGetEventIsAttack(),
2482
+ originalAmount = GetEventDamage(),
2295
2483
  preventDeath = damageEventPreventDeath
2296
2484
  }
2297
2485
  local evData = setmetatable(
@@ -2308,7 +2496,7 @@ Unit.onDamage = __TS__New(
2308
2496
  invoke(event, source, target, evData)
2309
2497
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2498
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2499
+ target[105] = (target[105] or 0) + bonusHealth
2312
2500
  BlzSetUnitMaxHP(
2313
2501
  target.handle,
2314
2502
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2510,7 @@ Unit.onDamage = __TS__New(
2322
2510
  evData[0],
2323
2511
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2512
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2513
+ target[105] = (target[105] or 0) - bonusHealth
2326
2514
  SetWidgetLife(
2327
2515
  target.handle,
2328
2516
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2530,91 @@ Unit.onDamage = __TS__New(
2342
2530
  DestroyTrigger(trigger)
2343
2531
  end
2344
2532
  )
2345
- Unit.onItemDrop = __TS__New(
2533
+ Unit.itemDroppedEvent = __TS__New(
2346
2534
  ____exports.UnitTriggerEvent,
2347
2535
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2536
  function()
2349
2537
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2538
+ local item = getManipulatedItem()
2539
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2540
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2541
  end
2353
2542
  return IgnoreEvent
2354
2543
  end
2355
2544
  )
2356
- Unit.onItemPickup = __TS__New(
2545
+ Unit.itemPickedUpEvent = __TS__New(
2357
2546
  ____exports.UnitTriggerEvent,
2358
2547
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2548
  function()
2360
2549
  local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2550
+ local item = getManipulatedItem()
2551
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2552
+ return ____exports.Unit:of(unit), Item:of(item)
2363
2553
  end
2364
2554
  return IgnoreEvent
2365
2555
  end
2366
2556
  )
2367
- Unit.onItemUse = __TS__New(
2557
+ Unit.itemUsedEvent = __TS__New(
2368
2558
  ____exports.UnitTriggerEvent,
2369
2559
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2560
+ function()
2561
+ local unit = getTriggerUnit()
2562
+ local item = getManipulatedItem()
2563
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2564
+ return ____exports.Unit:of(unit), Item:of(item)
2565
+ end
2566
+ return IgnoreEvent
2567
+ end
2568
+ )
2569
+ Unit.itemStackedEvent = __TS__New(
2570
+ ____exports.UnitTriggerEvent,
2571
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2572
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2573
+ )
2574
+ __TS__ObjectDefineProperty(
2575
+ Unit,
2576
+ "itemUseOrderEvent",
2577
+ {get = function(self)
2578
+ local event = __TS__New(Event)
2579
+ for order = orderId("useslot0"), orderId("useslot5") do
2580
+ local slot = order - orderId("useslot0")
2581
+ local function listener(unit)
2582
+ local item = unit.items[slot + 1]
2583
+ if item ~= nil then
2584
+ invoke(event, unit, item)
2585
+ end
2586
+ end
2587
+ self.onImmediateOrder[order]:addListener(listener)
2588
+ self.onTargetOrder[order]:addListener(listener)
2589
+ self.onPointOrder[order]:addListener(listener)
2590
+ end
2591
+ rawset(self, "itemUseOrderEvent", event)
2592
+ return event
2593
+ end}
2594
+ )
2595
+ __TS__ObjectDefineProperty(
2596
+ Unit,
2597
+ "itemMoveOrderEvent",
2598
+ {get = function(self)
2599
+ local event = __TS__New(Event)
2600
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2601
+ local slotTo = order - orderId("moveslot0")
2602
+ self.onTargetOrder[order]:addListener(function(unit, item)
2603
+ local slotFrom = unit.items:findSlot(item)
2604
+ if slotFrom ~= nil then
2605
+ invoke(
2606
+ event,
2607
+ unit,
2608
+ item,
2609
+ slotFrom,
2610
+ slotTo
2611
+ )
2612
+ end
2613
+ end)
2614
+ end
2615
+ rawset(self, "itemMoveOrderEvent", event)
2616
+ return event
2617
+ end}
2371
2618
  )
2372
2619
  __TS__ObjectDefineProperty(
2373
2620
  Unit,