warscript 0.0.1-dev.ba37a78 → 0.0.1-dev.bcab4e5

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 (230) 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/order.d.ts +1 -0
  18. package/core/types/order.lua +11 -1
  19. package/core/types/sound.d.ts +17 -24
  20. package/core/types/sound.lua +99 -24
  21. package/core/types/timer.d.ts +6 -7
  22. package/core/types/timer.lua +18 -21
  23. package/core/types/unit.lua +8 -0
  24. package/core/util.d.ts +1 -1
  25. package/core/util.lua +18 -1
  26. package/decl/index.d.ts +1 -0
  27. package/decl/native.d.ts +840 -786
  28. package/engine/ability.d.ts +1 -1
  29. package/engine/behavior.d.ts +10 -10
  30. package/engine/behavior.lua +6 -6
  31. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  32. package/engine/behaviour/ability/always-enabled.lua +31 -0
  33. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  34. package/engine/behaviour/ability/apply-buff.lua +32 -0
  35. package/engine/behaviour/ability/apply-unit-behavior.d.ts +5 -1
  36. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  37. package/engine/behaviour/ability/damage.d.ts +39 -11
  38. package/engine/behaviour/ability/damage.lua +83 -37
  39. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  40. package/engine/behaviour/ability/emulate-impact.lua +35 -0
  41. package/engine/behaviour/ability/heal.d.ts +33 -6
  42. package/engine/behaviour/ability/heal.lua +89 -10
  43. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  44. package/engine/behaviour/ability/instant-impact.lua +4 -15
  45. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  46. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  47. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  48. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  49. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  50. package/engine/behaviour/ability/restore-mana.lua +29 -0
  51. package/engine/behaviour/ability.d.ts +27 -4
  52. package/engine/behaviour/ability.lua +152 -17
  53. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  54. package/engine/behaviour/unit.d.ts +16 -2
  55. package/engine/behaviour/unit.lua +91 -0
  56. package/engine/buff.d.ts +103 -41
  57. package/engine/buff.lua +465 -212
  58. package/engine/game-map.d.ts +7 -0
  59. package/engine/game-map.lua +32 -0
  60. package/engine/internal/ability.d.ts +18 -13
  61. package/engine/internal/ability.lua +87 -76
  62. package/engine/internal/item/ability.lua +106 -0
  63. package/engine/internal/item+owner.lua +2 -2
  64. package/engine/internal/item.d.ts +4 -3
  65. package/engine/internal/item.lua +56 -25
  66. package/engine/internal/mechanics/ability-duration.lua +1 -1
  67. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  68. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  69. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  70. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  71. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  72. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  73. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  74. package/engine/internal/object-data/evasion-probability.lua +16 -0
  75. package/engine/internal/unit/ability.d.ts +10 -1
  76. package/engine/internal/unit/ability.lua +36 -14
  77. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  78. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  79. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  80. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  81. package/engine/internal/unit/bonus.d.ts +11 -8
  82. package/engine/internal/unit/bonus.lua +23 -1
  83. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  84. package/engine/internal/unit/ignore-events-items.lua +5 -0
  85. package/engine/internal/unit/item.d.ts +24 -0
  86. package/engine/internal/unit/item.lua +78 -0
  87. package/engine/internal/unit/main-selected.d.ts +13 -0
  88. package/engine/internal/unit/main-selected.lua +51 -0
  89. package/engine/internal/unit+ability.lua +2 -2
  90. package/engine/internal/unit+damage.d.ts +2 -11
  91. package/engine/internal/unit+damage.lua +10 -14
  92. package/engine/internal/unit+spellSteal.lua +1 -2
  93. package/engine/internal/unit+transport.lua +4 -10
  94. package/engine/internal/unit-missile-launch.lua +25 -6
  95. package/engine/internal/unit.d.ts +83 -19
  96. package/engine/internal/unit.lua +525 -167
  97. package/engine/internal/utility.lua +12 -0
  98. package/engine/lightning.d.ts +12 -5
  99. package/engine/lightning.lua +48 -14
  100. package/engine/local-client.d.ts +7 -2
  101. package/engine/local-client.lua +82 -0
  102. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  103. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  104. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  105. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  106. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  107. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  108. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  109. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  110. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  111. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  112. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  113. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  114. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  115. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  116. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  117. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  118. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  119. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  120. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  121. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  122. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  123. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  124. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  125. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  126. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  127. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  128. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  129. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  130. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  131. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  132. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  133. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  134. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  135. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  136. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  137. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  138. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  139. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  140. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  141. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  142. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  143. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  144. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  145. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  146. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  147. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  148. package/engine/object-data/entry/ability-type/web.lua +52 -0
  149. package/engine/object-data/entry/ability-type.d.ts +19 -18
  150. package/engine/object-data/entry/ability-type.lua +89 -33
  151. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  152. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  153. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  154. package/engine/object-data/entry/buff-type.d.ts +6 -13
  155. package/engine/object-data/entry/buff-type.lua +13 -29
  156. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  157. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  158. package/engine/object-data/entry/item-type.d.ts +15 -2
  159. package/engine/object-data/entry/item-type.lua +93 -2
  160. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  161. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  162. package/engine/object-data/entry/sound-preset.lua +140 -0
  163. package/engine/object-data/entry/unit-type.d.ts +50 -3
  164. package/engine/object-data/entry/unit-type.lua +452 -61
  165. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  166. package/engine/object-data/entry/upgrade.d.ts +1 -2
  167. package/engine/object-data/entry/upgrade.lua +4 -4
  168. package/engine/object-data/entry.d.ts +18 -17
  169. package/engine/object-data/entry.lua +60 -32
  170. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  171. package/engine/object-field/ability.d.ts +26 -3
  172. package/engine/object-field/ability.lua +54 -1
  173. package/engine/object-field/unit.d.ts +46 -3
  174. package/engine/object-field/unit.lua +173 -7
  175. package/engine/object-field.d.ts +11 -4
  176. package/engine/object-field.lua +162 -76
  177. package/engine/random.d.ts +1 -0
  178. package/engine/random.lua +9 -0
  179. package/engine/standard/entries/buff-type.d.ts +3 -0
  180. package/engine/standard/entries/buff-type.lua +3 -0
  181. package/engine/standard/entries/sound-preset.d.ts +10 -0
  182. package/engine/standard/entries/sound-preset.lua +10 -0
  183. package/engine/standard/entries/unit-type.d.ts +42 -1
  184. package/engine/standard/entries/unit-type.lua +42 -1
  185. package/engine/standard/fields/ability.d.ts +3 -1
  186. package/engine/standard/fields/ability.lua +3 -1
  187. package/engine/unit.d.ts +3 -0
  188. package/engine/unit.lua +12 -2
  189. package/event.d.ts +2 -3
  190. package/event.lua +9 -5
  191. package/index.d.ts +1 -0
  192. package/index.lua +1 -0
  193. package/lualib_bundle.lua +146 -42
  194. package/math/vec2.d.ts +2 -9
  195. package/math.d.ts +0 -2
  196. package/net/socket.d.ts +7 -1
  197. package/net/socket.lua +45 -4
  198. package/network.d.ts +1 -0
  199. package/network.lua +3 -2
  200. package/objutil/ability.d.ts +0 -1
  201. package/objutil/buff.d.ts +0 -1
  202. package/objutil/buff.lua +2 -3
  203. package/objutil/object.d.ts +0 -1
  204. package/objutil/unit.d.ts +0 -1
  205. package/objutil/unit.lua +8 -0
  206. package/package.json +13 -14
  207. package/patch-lua.d.ts +0 -0
  208. package/patch-lua.lua +10 -0
  209. package/property.d.ts +55 -0
  210. package/property.lua +374 -0
  211. package/string.d.ts +30 -0
  212. package/string.lua +14 -0
  213. package/util/stream.d.ts +0 -1
  214. package/utility/arrays.d.ts +12 -5
  215. package/utility/arrays.lua +37 -3
  216. package/utility/bit-set.d.ts +0 -2
  217. package/utility/functions.d.ts +1 -0
  218. package/utility/functions.lua +1 -0
  219. package/utility/lazy.d.ts +2 -0
  220. package/utility/lazy.lua +14 -0
  221. package/utility/linked-set.d.ts +12 -3
  222. package/utility/linked-set.lua +8 -2
  223. package/utility/lua-maps.d.ts +4 -2
  224. package/utility/lua-maps.lua +16 -0
  225. package/utility/lua-sets.d.ts +2 -2
  226. package/utility/lua-sets.lua +3 -0
  227. package/utility/reflection.lua +11 -7
  228. package/utility/types.d.ts +3 -2
  229. package/core/mapbounds.d.ts +0 -8
  230. 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
@@ -129,6 +139,7 @@ do
129
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
130
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
131
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
132
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
133
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
134
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -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
@@ -339,6 +347,9 @@ local function dispatchAbility(event)
339
347
  }
340
348
  )
341
349
  end
350
+ local function damagingEventPreventRetaliation(self)
351
+ self[0] = true
352
+ end
342
353
  local function damageEventPreventDeath(self, callback, ...)
343
354
  if self[0] ~= nil then
344
355
  return
@@ -350,7 +361,14 @@ local function damageEventPreventDeath(self, callback, ...)
350
361
  rawset(self, 1 + i, (select(i, ...)))
351
362
  end
352
363
  end
353
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
364
+ local damageSetters = {
365
+ amount = BlzSetEventDamage,
366
+ attackType = function(attackType)
367
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
368
+ end,
369
+ damageType = BlzSetEventDamageType,
370
+ weaponType = BlzSetEventWeaponType
371
+ }
354
372
  local jlimitopByOperator = {
355
373
  [0] = LESS_THAN_OR_EQUAL,
356
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -387,51 +405,171 @@ local getters = {
387
405
  return BlzGetUnitArmor(unit)
388
406
  end
389
407
  }
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
- }
408
+ ____exports.UnitWeapon = __TS__Class()
409
+ local UnitWeapon = ____exports.UnitWeapon
410
+ UnitWeapon.name = "UnitWeapon"
411
+ function UnitWeapon.prototype.____constructor(self, unit, index)
412
+ self.unit = unit
413
+ self.index = index
414
+ end
415
+ __TS__SetDescriptor(
416
+ UnitWeapon.prototype,
417
+ "cooldown",
418
+ {
419
+ get = function(self)
420
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
421
+ end,
422
+ set = function(self, cooldown)
423
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
424
+ end
425
+ },
426
+ true
427
+ )
428
+ __TS__SetDescriptor(
429
+ UnitWeapon.prototype,
430
+ "damage",
431
+ {
432
+ get = function(self)
433
+ local minimumDamage = self.damageBase + self.damageDiceCount
434
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
435
+ return {minimumDamage, maximumDamage}
436
+ end,
437
+ set = function(self, ____bindingPattern0)
438
+ local maximumDamage
439
+ local minimumDamage
440
+ minimumDamage = ____bindingPattern0[1]
441
+ maximumDamage = ____bindingPattern0[2]
442
+ self.damageBase = minimumDamage - 1
443
+ self.damageDiceCount = 1
444
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
445
+ end
446
+ },
447
+ true
448
+ )
449
+ __TS__SetDescriptor(
450
+ UnitWeapon.prototype,
451
+ "allowedTargetCombatClassifications",
452
+ {
453
+ get = function(self)
454
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
455
+ end,
456
+ set = function(self, allowedTargetCombatClassifications)
457
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
458
+ end
459
+ },
460
+ true
461
+ )
462
+ __TS__SetDescriptor(
463
+ UnitWeapon.prototype,
464
+ "damageBase",
465
+ {
466
+ get = function(self)
467
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
468
+ end,
469
+ set = function(self, damageBase)
470
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
471
+ end
472
+ },
473
+ true
474
+ )
475
+ __TS__SetDescriptor(
476
+ UnitWeapon.prototype,
477
+ "damageDiceCount",
478
+ {
479
+ get = function(self)
480
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
481
+ end,
482
+ set = function(self, damageDiceCount)
483
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
484
+ end
485
+ },
486
+ true
487
+ )
488
+ __TS__SetDescriptor(
489
+ UnitWeapon.prototype,
490
+ "damageDiceSideCount",
491
+ {
492
+ get = function(self)
493
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
494
+ end,
495
+ set = function(self, damageDiceSideCount)
496
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
497
+ end
498
+ },
499
+ true
500
+ )
501
+ __TS__SetDescriptor(
502
+ UnitWeapon.prototype,
503
+ "range",
504
+ {
505
+ get = function(self)
506
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
507
+ end,
508
+ set = function(self, range)
509
+ local handle = self.unit.handle
510
+ local index = self.index
511
+ setUnitWeaponRealField(
512
+ handle,
513
+ UNIT_WEAPON_RF_ATTACK_RANGE,
514
+ index + 1,
515
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
516
+ )
517
+ end
518
+ },
519
+ true
520
+ )
521
+ __TS__SetDescriptor(
522
+ UnitWeapon.prototype,
523
+ "impactDelay",
524
+ {
525
+ get = function(self)
526
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
527
+ end,
528
+ set = function(self, impactDelay)
529
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
530
+ end
531
+ },
532
+ true
533
+ )
534
+ __TS__SetDescriptor(
535
+ UnitWeapon.prototype,
536
+ "missileArc",
537
+ {
538
+ get = function(self)
539
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
540
+ end,
541
+ set = function(self, missileArc)
542
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
543
+ end
544
+ },
545
+ true
546
+ )
547
+ __TS__SetDescriptor(
548
+ UnitWeapon.prototype,
549
+ "missileModelPath",
550
+ {
551
+ get = function(self)
552
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
553
+ end,
554
+ set = function(self, missileModelPath)
555
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
556
+ end
557
+ },
558
+ true
559
+ )
560
+ __TS__SetDescriptor(
561
+ UnitWeapon.prototype,
562
+ "missileSpeed",
563
+ {
564
+ get = function(self)
565
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
566
+ end,
567
+ set = function(self, missileSpeed)
568
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
569
+ end
570
+ },
571
+ true
572
+ )
435
573
  local unitInventorySize = UnitInventorySize
436
574
  local unitItemInSlot = UnitItemInSlot
437
575
  local getItemAbility = BlzGetItemAbility
@@ -442,8 +580,6 @@ local getAbilityName = GetAbilityName
442
580
  local unitAddAbility = UnitAddAbility
443
581
  local getUnitGoldCost = GetUnitGoldCost
444
582
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
583
  local unitRemoveAbility = UnitRemoveAbility
448
584
  local function retrieveAbility(unit, ability, abilityId)
449
585
  if ability == nil then
@@ -453,17 +589,6 @@ local function retrieveAbility(unit, ability, abilityId)
453
589
  ____exports.Unit:of(unit)
454
590
  )
455
591
  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
592
  for i = 0, unitInventorySize(unit) - 1 do
468
593
  local item = unitItemInSlot(unit, i)
469
594
  if getItemAbility(item, abilityId) == ability then
@@ -520,12 +645,35 @@ for ____, player in ipairs(Player.all) do
520
645
  ShowUnit(dummy, false)
521
646
  dummies[player] = dummy
522
647
  end
648
+ local function delayHealthChecksCallback(unit)
649
+ local counter = (unit[103] or 0) - 1
650
+ if counter ~= 0 then
651
+ unit[103] = counter
652
+ return
653
+ end
654
+ unit[103] = nil
655
+ local healthBonus = unit[104]
656
+ if healthBonus ~= nil then
657
+ unit[104] = nil
658
+ local handle = unit.handle
659
+ BlzSetUnitMaxHP(
660
+ handle,
661
+ BlzGetUnitMaxHP(handle) - healthBonus
662
+ )
663
+ end
664
+ end
665
+ local nextSyncId = 1
666
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
667
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
523
668
  ____exports.Unit = __TS__Class()
524
669
  local Unit = ____exports.Unit
525
670
  Unit.name = "Unit"
526
671
  __TS__ClassExtends(Unit, Handle)
527
672
  function Unit.prototype.____constructor(self, handle)
528
673
  Handle.prototype.____constructor(self, handle)
674
+ local ____nextSyncId_0 = nextSyncId
675
+ nextSyncId = ____nextSyncId_0 + 1
676
+ self.syncId = ____nextSyncId_0
529
677
  self._owner = Player:of(getOwningPlayer(handle))
530
678
  assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
679
  assert(unitAddAbility(handle, morphDetectAbilityId))
@@ -538,6 +686,7 @@ function Unit.prototype.____constructor(self, handle)
538
686
  fourCC("Amrf")
539
687
  ))
540
688
  end
689
+ unitBySyncId[self.syncId] = self
541
690
  local ____ = self.abilities
542
691
  end
543
692
  function Unit.prototype.getEvent(self, event, collector)
@@ -556,6 +705,8 @@ function Unit.prototype.getEvent(self, event, collector)
556
705
  end
557
706
  function Unit.prototype.onDestroy(self)
558
707
  local handle = self.handle
708
+ self[107] = getUnitX(handle)
709
+ self[108] = getUnitY(handle)
559
710
  if not self._owner then
560
711
  self._owner = Player:of(getOwningPlayer(handle))
561
712
  end
@@ -623,8 +774,8 @@ function Unit.prototype.addModifier(self, property, modifier)
623
774
  end}
624
775
  end
625
776
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
777
+ local ____combatClassification_1 = combatClassification
778
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
628
779
  end
629
780
  function Unit.prototype.addClassification(self, classification)
630
781
  return unitAddType(self.handle, classification)
@@ -642,13 +793,13 @@ function Unit.prototype.isInvisibleTo(self, player)
642
793
  return isUnitInvisible(self.handle, player.handle)
643
794
  end
644
795
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
796
+ local ____temp_2
646
797
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
798
+ ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
648
799
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
800
+ ____temp_2 = isUnitInRange(self.handle, x.handle, y)
650
801
  end
651
- return ____temp_1
802
+ return ____temp_2
652
803
  end
653
804
  function Unit.prototype.isAllyOf(self, unit)
654
805
  return isUnitAlly(
@@ -666,13 +817,29 @@ function Unit.prototype.playAnimation(self, animation, rarity)
666
817
  if type(animation) == "number" then
667
818
  setUnitAnimationByIndex(self.handle, animation)
668
819
  elseif rarity then
669
- setUnitAnimationWithRarity(self.handle, animation, rarity)
820
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
670
821
  else
671
822
  setUnitAnimation(self.handle, animation)
672
823
  end
673
824
  end
825
+ function Unit.prototype.resetAnimation(self)
826
+ ResetUnitAnimation(self.handle)
827
+ end
674
828
  function Unit.prototype.queueAnimation(self, animation)
675
- queueUnitAnimation(self.handle, animation)
829
+ QueueUnitAnimation(self.handle, animation)
830
+ end
831
+ function Unit.prototype.chooseWeapon(self, target)
832
+ if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
833
+ return self.firstWeapon
834
+ end
835
+ if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
836
+ return self.secondWeapon
837
+ end
838
+ return nil
839
+ end
840
+ function Unit.prototype.delayHealthChecks(self)
841
+ self[103] = (self[103] or 0) + 1
842
+ Timer:run(delayHealthChecksCallback, self)
676
843
  end
677
844
  function Unit.prototype.setPosition(self, x, y)
678
845
  setUnitPosition(self.handle, x, y)
@@ -681,14 +848,21 @@ function Unit.prototype.isSelected(self, player)
681
848
  return IsUnitSelected(self.handle, player.handle)
682
849
  end
683
850
  function Unit.prototype.explode(self)
684
- setUnitExploded(self.handle, true)
851
+ SetUnitExploded(self.handle, true)
685
852
  killUnit(self.handle)
686
853
  end
687
854
  function Unit.prototype.kill(self)
688
855
  killUnit(self.handle)
689
856
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
857
+ function Unit.prototype.revive(self, x, y, doEffect)
858
+ local ____ReviveHero_5 = ReviveHero
859
+ local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
860
+ local ____doEffect_3 = doEffect
861
+ if ____doEffect_3 == nil then
862
+ ____doEffect_3 = false
863
+ end
864
+ __TS__SparseArrayPush(____array_4, ____doEffect_3)
865
+ ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
692
866
  end
693
867
  function Unit.prototype.healTarget(self, target, amount)
694
868
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -728,7 +902,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
728
902
  return UnitDropItemSlot(self.handle, item.handle, slot)
729
903
  end
730
904
  function Unit.prototype.itemInSlot(self, slot)
731
- return Item:of(UnitItemInSlot(self.handle, slot))
905
+ return Item:of(unitItemInSlot(self.handle, slot))
732
906
  end
733
907
  function Unit.prototype.addAbility(self, abilityId)
734
908
  if unitAddAbility(self.handle, abilityId) then
@@ -784,6 +958,9 @@ end
784
958
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
959
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
960
  end
961
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
962
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
963
+ end
787
964
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
965
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
966
  end
@@ -794,8 +971,15 @@ function Unit.prototype.interruptAttack(self)
794
971
  unitInterruptAttack(self.handle)
795
972
  end
796
973
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
974
+ local handle = self.handle
975
+ unitDisableAbility(handle, abilityId, true, false)
976
+ Timer:run(
977
+ unitDisableAbility,
978
+ handle,
979
+ abilityId,
980
+ false,
981
+ false
982
+ )
799
983
  end
800
984
  function Unit.prototype.getDistanceTo(self, target)
801
985
  local handle = self.handle
@@ -855,18 +1039,18 @@ function Unit.prototype.unpauseEx(self)
855
1039
  self:decrementStunCounter()
856
1040
  end
857
1041
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1042
+ local stunCounter = self[102] or 0
1043
+ if not self[101] or stunCounter >= 0 then
860
1044
  BlzPauseUnitEx(self.handle, true)
861
1045
  end
862
- self[101] = stunCounter + 1
1046
+ self[102] = stunCounter + 1
863
1047
  end
864
1048
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1049
+ local stunCounter = self[102] or 0
1050
+ if not self[101] or stunCounter >= 1 then
867
1051
  BlzPauseUnitEx(self.handle, false)
868
1052
  end
869
- self[101] = stunCounter - 1
1053
+ self[102] = stunCounter - 1
870
1054
  end
871
1055
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1056
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1152,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1152
  )
969
1153
  return targetCollection
970
1154
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1155
+ function Unit.getSelectionOf(self, player, target)
1156
+ if target == nil then
1157
+ target = {}
1158
+ end
1159
+ targetCollection = target
973
1160
  targetCollectionNextIndex = 1
974
1161
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1162
  return targetCollection
@@ -991,6 +1178,9 @@ end
991
1178
  function Unit.prototype.__tostring(self)
992
1179
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1180
  end
1181
+ function Unit.getBySyncId(self, syncId)
1182
+ return unitBySyncId[syncId]
1183
+ end
994
1184
  __TS__SetDescriptor(
995
1185
  Unit.prototype,
996
1186
  "_deltas",
@@ -1054,6 +1244,14 @@ __TS__SetDescriptor(
1054
1244
  end},
1055
1245
  true
1056
1246
  )
1247
+ __TS__SetDescriptor(
1248
+ Unit.prototype,
1249
+ "isStunned",
1250
+ {get = function(self)
1251
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1252
+ end},
1253
+ true
1254
+ )
1057
1255
  __TS__SetDescriptor(
1058
1256
  Unit.prototype,
1059
1257
  "combatClassifications",
@@ -1071,12 +1269,27 @@ __TS__SetDescriptor(
1071
1269
  Unit.prototype,
1072
1270
  "weapons",
1073
1271
  {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
1272
+ return {self.firstWeapon, self.secondWeapon}
1273
+ end},
1274
+ true
1275
+ )
1276
+ __TS__SetDescriptor(
1277
+ Unit.prototype,
1278
+ "firstWeapon",
1279
+ {get = function(self)
1280
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1281
+ rawset(self, "firstWeapon", weapon)
1282
+ return weapon
1283
+ end},
1284
+ true
1285
+ )
1286
+ __TS__SetDescriptor(
1287
+ Unit.prototype,
1288
+ "secondWeapon",
1289
+ {get = function(self)
1290
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1291
+ rawset(self, "secondWeapon", weapon)
1292
+ return weapon
1080
1293
  end},
1081
1294
  true
1082
1295
  )
@@ -1112,6 +1325,19 @@ __TS__SetDescriptor(
1112
1325
  },
1113
1326
  true
1114
1327
  )
1328
+ __TS__SetDescriptor(
1329
+ Unit.prototype,
1330
+ "primaryAttribute",
1331
+ {
1332
+ get = function(self)
1333
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1334
+ end,
1335
+ set = function(self, primaryAttribute)
1336
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1337
+ end
1338
+ },
1339
+ true
1340
+ )
1115
1341
  __TS__SetDescriptor(
1116
1342
  Unit.prototype,
1117
1343
  "strengthBase",
@@ -1233,17 +1459,17 @@ __TS__SetDescriptor(
1233
1459
  "isTeamGlowVisible",
1234
1460
  {
1235
1461
  get = function(self)
1236
- return not self[103]
1462
+ return not self[106]
1237
1463
  end,
1238
1464
  set = function(self, isTeamGlowVisible)
1239
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1465
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1466
+ local ____temp_6
1241
1467
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1468
+ ____temp_6 = true
1243
1469
  else
1244
- ____temp_2 = nil
1470
+ ____temp_6 = nil
1245
1471
  end
1246
- self[103] = ____temp_2
1472
+ self[106] = ____temp_6
1247
1473
  end
1248
1474
  },
1249
1475
  true
@@ -1252,9 +1478,9 @@ __TS__SetDescriptor(
1252
1478
  Unit.prototype,
1253
1479
  "color",
1254
1480
  {set = function(self, color)
1255
- setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1257
- showUnitTeamGlow(self.handle, false)
1481
+ SetUnitColor(self.handle, color.handle)
1482
+ if self[106] then
1483
+ BlzShowUnitTeamGlow(self.handle, false)
1258
1484
  end
1259
1485
  end},
1260
1486
  true
@@ -1277,10 +1503,14 @@ __TS__SetDescriptor(
1277
1503
  "maxHealth",
1278
1504
  {
1279
1505
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1506
+ return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1281
1507
  end,
1282
1508
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1509
+ if maxHealth < 1 and self[103] ~= nil then
1510
+ self[104] = (self[104] or 0) + (1 - maxHealth)
1511
+ maxHealth = 1
1512
+ end
1513
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1284
1514
  end
1285
1515
  },
1286
1516
  true
@@ -1322,10 +1552,10 @@ __TS__SetDescriptor(
1322
1552
  "health",
1323
1553
  {
1324
1554
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1555
+ return GetWidgetLife(self.handle) - (self[105] or 0)
1326
1556
  end,
1327
1557
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1558
+ SetWidgetLife(self.handle, health + (self[105] or 0))
1329
1559
  end
1330
1560
  },
1331
1561
  true
@@ -1419,7 +1649,7 @@ __TS__SetDescriptor(
1419
1649
  "x",
1420
1650
  {
1421
1651
  get = function(self)
1422
- return getUnitX(self.handle)
1652
+ return self[107] or getUnitX(self.handle)
1423
1653
  end,
1424
1654
  set = function(self, v)
1425
1655
  SetUnitX(self.handle, v)
@@ -1432,7 +1662,7 @@ __TS__SetDescriptor(
1432
1662
  "y",
1433
1663
  {
1434
1664
  get = function(self)
1435
- return getUnitY(self.handle)
1665
+ return self[108] or getUnitY(self.handle)
1436
1666
  end,
1437
1667
  set = function(self, v)
1438
1668
  SetUnitY(self.handle, v)
@@ -1518,10 +1748,10 @@ __TS__SetDescriptor(
1518
1748
  "gold",
1519
1749
  {
1520
1750
  get = function(self)
1521
- return getResourceAmount(self.handle)
1751
+ return GetResourceAmount(self.handle)
1522
1752
  end,
1523
1753
  set = function(self, gold)
1524
- setResourceAmount(self.handle, gold)
1754
+ SetResourceAmount(self.handle, gold)
1525
1755
  end
1526
1756
  },
1527
1757
  true
@@ -1536,17 +1766,17 @@ __TS__SetDescriptor(
1536
1766
  set = function(self, isPaused)
1537
1767
  local handle = self.handle
1538
1768
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1769
+ self[101] = true
1770
+ for _ = self[102] or 0, -1 do
1541
1771
  BlzPauseUnitEx(handle, true)
1542
1772
  end
1543
1773
  PauseUnit(handle, true)
1544
1774
  elseif not isPaused and IsUnitPaused(handle) then
1545
1775
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1776
+ for _ = self[102] or 0, -1 do
1547
1777
  BlzPauseUnitEx(handle, false)
1548
1778
  end
1549
- self[100] = nil
1779
+ self[101] = nil
1550
1780
  end
1551
1781
  end
1552
1782
  },
@@ -1649,6 +1879,19 @@ __TS__SetDescriptor(
1649
1879
  end},
1650
1880
  true
1651
1881
  )
1882
+ __TS__SetDescriptor(
1883
+ Unit.prototype,
1884
+ "movementType",
1885
+ {
1886
+ get = function(self)
1887
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1888
+ end,
1889
+ set = function(self, movementType)
1890
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1891
+ end
1892
+ },
1893
+ true
1894
+ )
1652
1895
  __TS__SetDescriptor(
1653
1896
  Unit.prototype,
1654
1897
  "pathing",
@@ -1830,6 +2073,14 @@ __TS__SetDescriptor(
1830
2073
  end},
1831
2074
  true
1832
2075
  )
2076
+ __TS__SetDescriptor(
2077
+ Unit.prototype,
2078
+ "targetAcquiredEvent",
2079
+ {get = function(self)
2080
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2081
+ end},
2082
+ true
2083
+ )
1833
2084
  __TS__SetDescriptor(
1834
2085
  Unit.prototype,
1835
2086
  "onSelect",
@@ -1903,7 +2154,6 @@ Unit.onDecay = __TS__New(
1903
2154
  Unit.onResurrect = __TS__New(
1904
2155
  InitializingEvent,
1905
2156
  function(event)
1906
- local invoke = Event.invoke
1907
2157
  local dead = setmetatable({}, {__mode = "k"})
1908
2158
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2159
  dead[unit] = true
@@ -1919,10 +2169,15 @@ Unit.onResurrect = __TS__New(
1919
2169
  Unit.morphEvent = __TS__New(
1920
2170
  InitializingEvent,
1921
2171
  function(event)
2172
+ local function ifNotLeft(unit)
2173
+ local handle = unit.handle
2174
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2175
+ invoke(event, unit)
2176
+ end
2177
+ end
1922
2178
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
2179
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2180
+ Timer:run(ifNotLeft, unit)
1926
2181
  end
1927
2182
  end)
1928
2183
  end
@@ -1960,27 +2215,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2215
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2216
  InitializingEvent,
1962
2217
  function(event)
1963
- local invoke = Event.invoke
1964
2218
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2219
+ local ____GetSpellTargetUnit_result_9
1966
2220
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2221
+ ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2222
  else
1969
- local ____GetSpellTargetItem_result_4
2223
+ local ____GetSpellTargetItem_result_8
1970
2224
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2225
+ ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
1972
2226
  else
1973
- local ____GetSpellTargetDestructable_result_3
2227
+ local ____GetSpellTargetDestructable_result_7
1974
2228
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2229
+ ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
1976
2230
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2231
+ ____GetSpellTargetDestructable_result_7 = nil
1978
2232
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2233
+ ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
1980
2234
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2235
+ ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
1982
2236
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2237
+ local target = ____GetSpellTargetUnit_result_9
1984
2238
  if target then
1985
2239
  invoke(event, unit, id, target)
1986
2240
  end
@@ -2152,10 +2406,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2406
  ____exports.UnitTriggerEvent,
2153
2407
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2408
  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
2409
+ local handle = getOrderedUnit()
2410
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2411
+ local unit = ____exports.Unit:of(handle)
2412
+ if unit.state == 1 then
2413
+ return unit, getIssuedOrderId()
2414
+ end
2159
2415
  end
2160
2416
  return IgnoreEvent
2161
2417
  end
@@ -2177,7 +2433,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2433
  )
2178
2434
  Unit.onDamaging = (function()
2179
2435
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2436
  local trigger = CreateTrigger()
2182
2437
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2438
  TriggerAddCondition(
@@ -2187,13 +2442,19 @@ Unit.onDamaging = (function()
2187
2442
  if source and source.typeId == dummyUnitId then
2188
2443
  source = nil
2189
2444
  end
2190
- local target = BlzGetEventDamageTarget()
2445
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2446
+ local metadata = damageMetadataByTarget[target]
2447
+ damageMetadataByTarget[target] = nil
2191
2448
  local data = {
2192
2449
  amount = GetEventDamage(),
2193
- attackType = BlzGetEventAttackType(),
2450
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2194
2451
  damageType = BlzGetEventDamageType(),
2195
2452
  weaponType = BlzGetEventWeaponType(),
2196
- isAttack = BlzGetEventIsAttack()
2453
+ metadata = metadata,
2454
+ isAttack = BlzGetEventIsAttack(),
2455
+ originalAmount = GetEventDamage(),
2456
+ originalMetadata = metadata,
2457
+ preventRetaliation = damagingEventPreventRetaliation
2197
2458
  }
2198
2459
  if data.isAttack and source then
2199
2460
  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 +2468,36 @@ Unit.onDamaging = (function()
2207
2468
  invoke(
2208
2469
  event,
2209
2470
  source,
2210
- ____exports.Unit:of(target),
2471
+ target,
2211
2472
  setmetatable(
2212
2473
  {},
2213
2474
  {
2214
2475
  __index = data,
2215
2476
  __newindex = function(self, key, value)
2216
- damageSetters[key](value)
2477
+ local damageSetter = damageSetters[key]
2478
+ if damageSetter ~= nil then
2479
+ damageSetter(value)
2480
+ end
2217
2481
  data[key] = value
2218
2482
  end
2219
2483
  }
2220
2484
  )
2221
2485
  )
2486
+ if data[0] and source then
2487
+ local sourceOwner = source.owner.handle
2488
+ data[1] = sourceOwner
2489
+ local targetOwner = target.owner.handle
2490
+ data[2] = targetOwner
2491
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2492
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2493
+ data[3] = true
2494
+ end
2495
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2496
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2497
+ data[4] = true
2498
+ end
2499
+ end
2500
+ damagingEventByTarget[target] = data
2222
2501
  return
2223
2502
  end
2224
2503
  BlzSetEventDamage(0)
@@ -2226,7 +2505,7 @@ Unit.onDamaging = (function()
2226
2505
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
2506
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
2507
  local sourceOwner = source.owner.handle
2229
- local targetOwner = GetOwningPlayer(target)
2508
+ local targetOwner = target.owner.handle
2230
2509
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
2510
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
2511
  Timer:run(function()
@@ -2242,23 +2521,19 @@ Unit.onDamaging = (function()
2242
2521
  for ____, ____value in ipairs(source._attackHandlers) do
2243
2522
  local condition = ____value[1]
2244
2523
  local action = ____value[2]
2245
- if condition(
2246
- source,
2247
- ____exports.Unit:of(target),
2248
- data
2249
- ) then
2524
+ if condition(source, target, data) then
2250
2525
  action(
2251
2526
  source,
2252
- ____exports.Unit:of(target),
2527
+ target,
2253
2528
  setmetatable(
2254
2529
  {fire = function()
2255
2530
  UnitDamageTarget(
2256
2531
  source.handle,
2257
- target,
2532
+ target.handle,
2258
2533
  data.amount,
2259
2534
  true,
2260
2535
  true,
2261
- data.attackType,
2536
+ attackTypeToNative(data.attackType),
2262
2537
  data.damageType,
2263
2538
  data.weaponType
2264
2539
  )
@@ -2276,7 +2551,6 @@ end)()
2276
2551
  Unit.onDamage = __TS__New(
2277
2552
  InitializingEvent,
2278
2553
  function(event)
2279
- local invoke = Event.invoke
2280
2554
  local trigger = CreateTrigger()
2281
2555
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2556
  TriggerAddCondition(
@@ -2286,29 +2560,54 @@ Unit.onDamage = __TS__New(
2286
2560
  if source and source.typeId == dummyUnitId then
2287
2561
  source = nil
2288
2562
  end
2563
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2564
+ local damagingEvent = damagingEventByTarget[target]
2565
+ damagingEventByTarget[target] = nil
2289
2566
  local data = {
2290
2567
  amount = GetEventDamage(),
2291
- attackType = BlzGetEventAttackType(),
2568
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2292
2569
  damageType = BlzGetEventDamageType(),
2293
2570
  weaponType = BlzGetEventWeaponType(),
2571
+ metadata = damagingEvent and damagingEvent.metadata,
2294
2572
  isAttack = BlzGetEventIsAttack(),
2573
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2574
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2295
2575
  preventDeath = damageEventPreventDeath
2296
2576
  }
2577
+ if damagingEvent then
2578
+ for key, value in pairs(damagingEvent) do
2579
+ if isAttribute(key) then
2580
+ data[key] = value
2581
+ end
2582
+ end
2583
+ local sourceOwner = damagingEvent[1]
2584
+ if sourceOwner then
2585
+ local targetOwner = damagingEvent[2]
2586
+ if damagingEvent[3] then
2587
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2588
+ end
2589
+ if damagingEvent[4] then
2590
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2591
+ end
2592
+ end
2593
+ end
2297
2594
  local evData = setmetatable(
2298
2595
  {},
2299
2596
  {
2300
2597
  __index = data,
2301
2598
  __newindex = function(self, key, value)
2302
- damageSetters[key](value)
2599
+ local damageSetter = damageSetters[key]
2600
+ if damageSetter ~= nil then
2601
+ damageSetter(value)
2602
+ end
2303
2603
  data[key] = value
2304
2604
  end
2305
2605
  }
2306
2606
  )
2307
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
2607
  invoke(event, source, target, evData)
2309
2608
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2609
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2610
+ target[105] = (target[105] or 0) + bonusHealth
2312
2611
  BlzSetUnitMaxHP(
2313
2612
  target.handle,
2314
2613
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2621,7 @@ Unit.onDamage = __TS__New(
2322
2621
  evData[0],
2323
2622
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2623
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2624
+ target[105] = (target[105] or 0) - bonusHealth
2326
2625
  SetWidgetLife(
2327
2626
  target.handle,
2328
2627
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2641,91 @@ Unit.onDamage = __TS__New(
2342
2641
  DestroyTrigger(trigger)
2343
2642
  end
2344
2643
  )
2345
- Unit.onItemDrop = __TS__New(
2644
+ Unit.itemDroppedEvent = __TS__New(
2346
2645
  ____exports.UnitTriggerEvent,
2347
2646
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2647
  function()
2349
2648
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2649
+ local item = getManipulatedItem()
2650
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2651
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2652
  end
2353
2653
  return IgnoreEvent
2354
2654
  end
2355
2655
  )
2356
- Unit.onItemPickup = __TS__New(
2656
+ Unit.itemPickedUpEvent = __TS__New(
2357
2657
  ____exports.UnitTriggerEvent,
2358
2658
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2659
  function()
2360
2660
  local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2661
+ local item = getManipulatedItem()
2662
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2663
+ return ____exports.Unit:of(unit), Item:of(item)
2363
2664
  end
2364
2665
  return IgnoreEvent
2365
2666
  end
2366
2667
  )
2367
- Unit.onItemUse = __TS__New(
2668
+ Unit.itemUsedEvent = __TS__New(
2368
2669
  ____exports.UnitTriggerEvent,
2369
2670
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2671
+ function()
2672
+ local unit = getTriggerUnit()
2673
+ local item = getManipulatedItem()
2674
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2675
+ return ____exports.Unit:of(unit), Item:of(item)
2676
+ end
2677
+ return IgnoreEvent
2678
+ end
2679
+ )
2680
+ Unit.itemStackedEvent = __TS__New(
2681
+ ____exports.UnitTriggerEvent,
2682
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2683
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2684
+ )
2685
+ __TS__ObjectDefineProperty(
2686
+ Unit,
2687
+ "itemUseOrderEvent",
2688
+ {get = function(self)
2689
+ local event = __TS__New(Event)
2690
+ for order = orderId("useslot0"), orderId("useslot5") do
2691
+ local slot = order - orderId("useslot0")
2692
+ local function listener(unit)
2693
+ local item = unit.items[slot + 1]
2694
+ if item ~= nil then
2695
+ invoke(event, unit, item)
2696
+ end
2697
+ end
2698
+ self.onImmediateOrder[order]:addListener(listener)
2699
+ self.onTargetOrder[order]:addListener(listener)
2700
+ self.onPointOrder[order]:addListener(listener)
2701
+ end
2702
+ rawset(self, "itemUseOrderEvent", event)
2703
+ return event
2704
+ end}
2705
+ )
2706
+ __TS__ObjectDefineProperty(
2707
+ Unit,
2708
+ "itemMoveOrderEvent",
2709
+ {get = function(self)
2710
+ local event = __TS__New(Event)
2711
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2712
+ local slotTo = order - orderId("moveslot0")
2713
+ self.onTargetOrder[order]:addListener(function(unit, item)
2714
+ local slotFrom = unit.items:findSlot(item)
2715
+ if slotFrom ~= nil then
2716
+ invoke(
2717
+ event,
2718
+ unit,
2719
+ item,
2720
+ slotFrom,
2721
+ slotTo
2722
+ )
2723
+ end
2724
+ end)
2725
+ end
2726
+ rawset(self, "itemMoveOrderEvent", event)
2727
+ return event
2728
+ end}
2371
2729
  )
2372
2730
  __TS__ObjectDefineProperty(
2373
2731
  Unit,