warscript 0.0.1-dev.3642572 → 0.0.1-dev.37ce2c3

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 (411) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +12 -4
  5. package/core/types/effect.lua +67 -104
  6. package/core/types/frame.d.ts +16 -2
  7. package/core/types/frame.lua +141 -77
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/player.d.ts +18 -1
  12. package/core/types/player.lua +76 -26
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/playerColor.lua +4 -3
  16. package/core/types/sound.d.ts +18 -26
  17. package/core/types/sound.lua +99 -53
  18. package/core/types/tileCell.d.ts +18 -3
  19. package/core/types/tileCell.lua +108 -0
  20. package/core/types/timer.d.ts +9 -8
  21. package/core/types/timer.lua +45 -23
  22. package/core/types/unit.d.ts +5 -0
  23. package/core/types/unit.lua +5 -0
  24. package/core/util.d.ts +3 -1
  25. package/core/util.lua +109 -3
  26. package/decl/native.d.ts +1719 -964
  27. package/destroyable.d.ts +1 -0
  28. package/destroyable.lua +9 -0
  29. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  30. package/engine/ability-type-extended-tooltip.lua +44 -0
  31. package/engine/behavior.d.ts +14 -1
  32. package/engine/behavior.lua +230 -70
  33. package/engine/behaviour/ability/apply-buff.lua +5 -5
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  35. package/engine/behaviour/ability/damage.d.ts +10 -3
  36. package/engine/behaviour/ability/damage.lua +41 -49
  37. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  38. package/engine/behaviour/ability/emulate-impact.lua +96 -7
  39. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  40. package/engine/behaviour/ability/instant-impact.lua +17 -2
  41. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  42. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  43. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  44. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  45. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  46. package/engine/behaviour/ability/restore-mana.lua +6 -6
  47. package/engine/behaviour/ability.d.ts +22 -6
  48. package/engine/behaviour/ability.lua +133 -29
  49. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  50. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  51. package/engine/behaviour/unit.d.ts +41 -2
  52. package/engine/behaviour/unit.lua +270 -6
  53. package/engine/buff.d.ts +118 -57
  54. package/engine/buff.lua +583 -288
  55. package/engine/index.d.ts +2 -1
  56. package/engine/internal/ability.d.ts +14 -1
  57. package/engine/internal/ability.lua +113 -44
  58. package/engine/internal/item/ability.lua +63 -11
  59. package/engine/internal/item/fields.d.ts +12 -0
  60. package/engine/internal/item/fields.lua +33 -0
  61. package/engine/internal/item/owner-cache.d.ts +5 -0
  62. package/engine/internal/item/owner-cache.lua +4 -0
  63. package/engine/internal/item+owner.d.ts +2 -0
  64. package/engine/internal/item+owner.lua +37 -8
  65. package/engine/internal/item.d.ts +32 -16
  66. package/engine/internal/item.lua +257 -82
  67. package/engine/internal/mechanics/ability-duration.lua +1 -1
  68. package/engine/internal/mechanics/cast-ability.lua +6 -3
  69. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  70. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  71. package/engine/internal/misc/frame-coordinates.lua +21 -0
  72. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  73. package/engine/internal/misc/get-terrain-z.lua +11 -0
  74. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  75. package/engine/internal/misc/player-local-handle.lua +5 -0
  76. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  77. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  78. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  79. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  80. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  81. package/engine/internal/object-data/health-bonus.lua +16 -0
  82. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  83. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  84. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  85. package/engine/internal/object-data/mana-bonus.lua +16 -0
  86. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  87. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  88. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  89. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  90. package/engine/internal/unit/ability.d.ts +35 -0
  91. package/engine/internal/unit/ability.lua +114 -9
  92. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  93. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  94. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  95. package/engine/internal/unit/allowed-targets.lua +9 -1
  96. package/engine/internal/unit/appearance.d.ts +15 -0
  97. package/engine/internal/unit/appearance.lua +85 -0
  98. package/engine/internal/unit/attributes.d.ts +17 -0
  99. package/engine/internal/unit/attributes.lua +46 -0
  100. package/engine/internal/unit/bonus.d.ts +17 -0
  101. package/engine/internal/unit/bonus.lua +113 -8
  102. package/engine/internal/unit/buff.d.ts +2 -2
  103. package/engine/internal/unit/buff.lua +34 -19
  104. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  105. package/engine/internal/unit/equipment-inventory.lua +233 -0
  106. package/engine/internal/unit/expiration-timer.lua +1 -1
  107. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  108. package/engine/internal/unit/extended-inventory.lua +99 -0
  109. package/engine/internal/unit/fly-height.d.ts +7 -0
  110. package/engine/internal/unit/fly-height.lua +20 -0
  111. package/engine/internal/unit/ignore-events-items.lua +10 -1
  112. package/engine/internal/unit/interrupts.d.ts +12 -0
  113. package/engine/internal/unit/interrupts.lua +28 -0
  114. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  115. package/engine/internal/unit/inventory.lua +87 -0
  116. package/engine/internal/unit/item-container.d.ts +25 -0
  117. package/engine/internal/unit/item-container.lua +11 -0
  118. package/engine/internal/unit/item-order-events.d.ts +17 -0
  119. package/engine/internal/unit/item-order-events.lua +67 -0
  120. package/engine/internal/unit/item-slot.d.ts +27 -0
  121. package/engine/internal/unit/item-slot.lua +92 -0
  122. package/engine/internal/unit/main-selected.lua +12 -27
  123. package/engine/internal/unit/order.d.ts +20 -0
  124. package/engine/internal/unit/order.lua +136 -0
  125. package/engine/internal/unit/range-event.d.ts +12 -0
  126. package/engine/internal/unit/range-event.lua +90 -0
  127. package/engine/internal/unit/scale.d.ts +7 -0
  128. package/engine/internal/unit/scale.lua +20 -0
  129. package/engine/internal/unit+ability.d.ts +2 -1
  130. package/engine/internal/unit+ability.lua +83 -3
  131. package/engine/internal/unit+bonus.lua +3 -3
  132. package/engine/internal/unit+damage.d.ts +11 -11
  133. package/engine/internal/unit+damage.lua +43 -14
  134. package/engine/internal/unit+rally.lua +9 -31
  135. package/engine/internal/unit+spellSteal.lua +1 -2
  136. package/engine/internal/unit-missile-data.lua +58 -32
  137. package/engine/internal/unit-missile-launch.lua +65 -27
  138. package/engine/internal/unit.d.ts +42 -36
  139. package/engine/internal/unit.lua +400 -325
  140. package/engine/local-client.d.ts +28 -0
  141. package/engine/local-client.lua +324 -54
  142. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  143. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  144. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  145. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  146. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  147. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  148. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  149. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  150. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  151. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  152. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  153. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  154. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  155. package/engine/object-data/auxiliary/item-class.lua +2 -0
  156. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  157. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  158. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  159. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  160. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  161. package/engine/object-data/auxiliary/order-type.lua +2 -0
  162. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  163. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  164. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  165. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  166. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  167. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  168. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  169. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  170. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  171. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  172. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  173. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  174. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  175. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  176. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  177. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  178. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  179. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  180. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  181. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  182. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  183. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  184. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  185. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  186. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  187. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  188. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  189. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  190. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  191. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  192. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  193. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  194. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  195. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  196. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  197. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  198. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  199. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  200. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  201. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  202. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  203. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  204. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  205. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  206. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  207. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  208. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  209. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  210. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  211. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  212. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  213. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  214. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  215. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  216. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  217. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  218. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  219. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  220. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  221. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  222. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  223. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  224. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  225. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  226. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  227. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  228. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  229. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  230. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  231. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  232. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  233. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  234. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  235. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  236. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  237. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  238. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  239. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  240. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  241. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  242. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  243. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  244. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  245. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  246. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  247. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  248. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  249. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  250. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  251. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  252. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  253. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  254. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  255. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  256. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  257. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  258. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  259. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  260. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  261. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  262. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  263. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  264. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  265. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  266. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  267. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  268. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  269. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  270. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  271. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  272. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  273. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  274. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  275. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  276. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  277. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  278. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  279. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  280. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  281. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  282. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  283. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  284. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  285. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  286. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  287. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  288. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  289. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  290. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  291. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  292. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  293. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  294. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  295. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  296. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  297. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  298. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  299. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  300. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  301. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  302. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  303. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  304. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  305. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  306. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  307. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  308. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  309. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  310. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  311. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  312. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  313. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  314. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  315. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  316. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  317. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  318. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  319. package/engine/object-data/entry/ability-type/web.lua +52 -0
  320. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  321. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  322. package/engine/object-data/entry/ability-type.d.ts +41 -16
  323. package/engine/object-data/entry/ability-type.lua +321 -24
  324. package/engine/object-data/entry/buff-type/applicable.lua +122 -106
  325. package/engine/object-data/entry/buff-type.d.ts +10 -12
  326. package/engine/object-data/entry/buff-type.lua +37 -27
  327. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  328. package/engine/object-data/entry/destructible-type.lua +181 -0
  329. package/engine/object-data/entry/item-type.d.ts +18 -3
  330. package/engine/object-data/entry/item-type.lua +84 -0
  331. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  332. package/engine/object-data/entry/lightning-type.lua +1 -1
  333. package/engine/object-data/entry/sound-preset.d.ts +19 -2
  334. package/engine/object-data/entry/sound-preset.lua +104 -0
  335. package/engine/object-data/entry/unit-type.d.ts +74 -6
  336. package/engine/object-data/entry/unit-type.lua +560 -100
  337. package/engine/object-data/entry/upgrade.d.ts +2 -2
  338. package/engine/object-data/entry.d.ts +6 -1
  339. package/engine/object-data/entry.lua +8 -0
  340. package/engine/object-field/ability.d.ts +4 -4
  341. package/engine/object-field/ability.lua +9 -8
  342. package/engine/object-field/item.d.ts +22 -0
  343. package/engine/object-field/item.lua +118 -0
  344. package/engine/object-field/unit.d.ts +72 -3
  345. package/engine/object-field/unit.lua +268 -7
  346. package/engine/object-field.d.ts +26 -7
  347. package/engine/object-field.lua +360 -119
  348. package/engine/random.d.ts +10 -0
  349. package/engine/random.lua +21 -0
  350. package/engine/standard/entries/ability-type.d.ts +3102 -7
  351. package/engine/standard/entries/ability-type.lua +0 -6
  352. package/engine/standard/entries/buff-type.d.ts +48 -0
  353. package/engine/standard/entries/buff-type.lua +46 -0
  354. package/engine/standard/entries/item-type.d.ts +1299 -0
  355. package/engine/standard/entries/item-type.lua +2 -0
  356. package/engine/standard/entries/lightning-type.d.ts +42 -15
  357. package/engine/standard/entries/lightning-type.lua +0 -14
  358. package/engine/standard/entries/unit-type.d.ts +5 -0
  359. package/engine/standard/entries/unit-type.lua +5 -0
  360. package/engine/standard/fields/ability.d.ts +4 -4
  361. package/engine/standard/fields/ability.lua +4 -4
  362. package/engine/standard/fields/item.d.ts +4 -0
  363. package/engine/standard/fields/item.lua +6 -0
  364. package/engine/standard/fields/unit.d.ts +12 -0
  365. package/engine/standard/fields/unit.lua +20 -0
  366. package/engine/synchronization.d.ts +11 -0
  367. package/engine/synchronization.lua +77 -0
  368. package/engine/text-tag.d.ts +36 -2
  369. package/engine/text-tag.lua +250 -10
  370. package/engine/unit.d.ts +11 -1
  371. package/engine/unit.lua +11 -1
  372. package/event.d.ts +1 -1
  373. package/lualib_bundle.lua +1 -1
  374. package/math.d.ts +2 -0
  375. package/math.lua +14 -0
  376. package/net/socket.lua +1 -1
  377. package/network.lua +25 -1
  378. package/objutil/buff.lua +12 -11
  379. package/objutil/object.lua +1 -1
  380. package/operation.d.ts +8 -1
  381. package/operation.lua +38 -18
  382. package/package.json +3 -23
  383. package/patch-lua.lua +15 -0
  384. package/patch-lualib.lua +1 -1
  385. package/utility/arrays.d.ts +9 -1
  386. package/utility/arrays.lua +28 -0
  387. package/utility/callback-array.d.ts +17 -0
  388. package/utility/callback-array.lua +61 -0
  389. package/utility/functions.d.ts +8 -0
  390. package/utility/functions.lua +13 -0
  391. package/utility/linked-map.d.ts +35 -0
  392. package/utility/linked-map.lua +107 -0
  393. package/utility/linked-set.d.ts +5 -1
  394. package/utility/linked-set.lua +49 -1
  395. package/utility/lua-maps.d.ts +15 -2
  396. package/utility/lua-maps.lua +53 -2
  397. package/utility/lua-sets.d.ts +2 -0
  398. package/utility/lua-sets.lua +7 -0
  399. package/utility/random.d.ts +102 -0
  400. package/utility/random.lua +273 -0
  401. package/utility/records.lua +20 -1
  402. package/utility/types.d.ts +3 -0
  403. package/utility/unordered-map.d.ts +27 -0
  404. package/utility/unordered-map.lua +99 -0
  405. package/core/types/order.d.ts +0 -25
  406. package/core/types/order.lua +0 -55
  407. package/engine/internal/unit/item.lua +0 -78
  408. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  409. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  410. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  411. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -7,10 +7,10 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
11
  local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
12
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
13
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
13
- local __TS__InstanceOf = ____lualib.__TS__InstanceOf
14
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
15
15
  local Set = ____lualib.Set
16
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -47,40 +47,44 @@ local checkNotNull = ____preconditions.checkNotNull
47
47
  local ____constants = require("engine.constants")
48
48
  local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
49
49
  local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
50
- local ____arrays = require("utility.arrays")
51
- local forEach = ____arrays.forEach
52
- local ____math = require("math")
53
- local min = ____math.min
54
50
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
- local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
51
+ local isItemIgnoredInEvents = ____ignore_2Devents_2Ditems.isItemIgnoredInEvents
52
+ local ____owner_2Dcache = require("engine.internal.item.owner-cache")
53
+ local ownerByItem = ____owner_2Dcache.ownerByItem
54
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
55
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
56
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
57
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
58
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
59
+ local ____attributes = require("attributes")
60
+ local isAttribute = ____attributes.isAttribute
61
+ local ____ability = require("engine.internal.item.ability")
62
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
63
+ local ____synchronization = require("engine.synchronization")
64
+ local synchronizer = ____synchronization.synchronizer
65
+ local ____linked_2Dmap = require("utility.linked-map")
66
+ local LinkedMap = ____linked_2Dmap.LinkedMap
56
67
  local match = string.match
57
68
  local ____tostring = _G.tostring
58
69
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local queueUnitAnimation = QueueUnitAnimation
62
71
  local getUnitIntegerField = BlzGetUnitIntegerField
63
72
  local getUnitRealField = BlzGetUnitRealField
64
73
  local getHeroStr = GetHeroStr
65
74
  local getHeroAgi = GetHeroAgi
66
75
  local getHeroInt = GetHeroInt
67
- local setHeroStr = SetHeroStr
68
- local setHeroAgi = SetHeroAgi
69
- local setHeroInt = SetHeroInt
70
76
  local getUnitBooleanField = BlzGetUnitBooleanField
71
77
  local getUnitStringField = BlzGetUnitStringField
72
78
  local setUnitIntegerField = BlzSetUnitIntegerField
73
79
  local setUnitRealField = BlzSetUnitRealField
74
80
  local setUnitBooleanField = BlzSetUnitBooleanField
75
81
  local setUnitStringField = BlzSetUnitStringField
76
- local setUnitScale = SetUnitScale
77
82
  local setUnitPosition = SetUnitPosition
78
83
  local setUnitTimeScale = SetUnitTimeScale
79
84
  local getHandleId = GetHandleId
80
85
  local getUnitCurrentOrder = GetUnitCurrentOrder
81
86
  local createUnit = CreateUnit
82
87
  local killUnit = KillUnit
83
- local setUnitExploded = SetUnitExploded
84
88
  local removeUnit = RemoveUnit
85
89
  local getUnitTypeId = GetUnitTypeId
86
90
  local isHeroUnitId = IsHeroUnitId
@@ -96,15 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
96
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
97
101
  local isUnitInRangeXY = IsUnitInRangeXY
98
102
  local isUnitInRange = IsUnitInRange
99
- local setResourceAmount = SetResourceAmount
100
- local getResourceAmount = GetResourceAmount
101
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
102
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
103
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
104
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
105
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
106
108
  local unitDisableAbility = BlzUnitDisableAbility
107
- local unitInterruptAttack = BlzUnitInterruptAttack
108
109
  local isUnitInvisible = IsUnitInvisible
109
110
  local isUnitVisible = IsUnitVisible
110
111
  local getUnitX = GetUnitX
@@ -121,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
121
122
  local getIssuedOrderId = GetIssuedOrderId
122
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
123
124
  local unitAlive = UnitAlive
124
- local unitAddType = UnitAddType
125
- local unitRemoveType = UnitRemoveType
126
- local isUnitIllusion = IsUnitIllusion
127
- local isUnitType = IsUnitType
128
125
  local isUnitAlly = IsUnitAlly
129
126
  local isUnitEnemy = IsUnitEnemy
130
127
  local getOwningPlayer = GetOwningPlayer
131
- local setUnitColor = SetUnitColor
132
- local showUnitTeamGlow = BlzShowUnitTeamGlow
133
128
  ____exports.UnitClassification = {}
134
129
  local UnitClassification = ____exports.UnitClassification
135
130
  do
@@ -139,6 +134,7 @@ do
139
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
140
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
141
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
142
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
143
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
144
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -346,6 +342,9 @@ local function dispatchAbility(event)
346
342
  }
347
343
  )
348
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
349
348
  local function damageEventPreventDeath(self, callback, ...)
350
349
  if self[0] ~= nil then
351
350
  return
@@ -357,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
357
356
  rawset(self, 1 + i, (select(i, ...)))
358
357
  end
359
358
  end
360
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
359
+ local damageSetters = {
360
+ amount = BlzSetEventDamage,
361
+ attackType = function(attackType)
362
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
363
+ end,
364
+ damageType = BlzSetEventDamageType,
365
+ weaponType = BlzSetEventWeaponType
366
+ }
361
367
  local jlimitopByOperator = {
362
368
  [0] = LESS_THAN_OR_EQUAL,
363
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -375,15 +381,27 @@ local modifiers = {
375
381
  end,
376
382
  armor = function(unit, value)
377
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
378
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
379
389
  end
380
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
381
- assert(BlzSetAbilityRealLevelField(
382
- ability,
383
- armorBonusField,
384
- 0,
385
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
386
- ))
390
+ local ability = assert(
391
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
392
+ "armor bonus ability must be existing",
393
+ unit
394
+ )
395
+ assert(
396
+ BlzSetAbilityRealLevelField(
397
+ ability,
398
+ armorBonusField,
399
+ 0,
400
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
401
+ ),
402
+ "armor bonus ability field must be set",
403
+ unit
404
+ )
387
405
  end
388
406
  }
389
407
  local getters = {
@@ -401,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
401
419
  self.unit = unit
402
420
  self.index = index
403
421
  end
422
+ __TS__SetDescriptor(
423
+ UnitWeapon.prototype,
424
+ "isEnabled",
425
+ {
426
+ get = function(self)
427
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
428
+ end,
429
+ set = function(self, isEnabled)
430
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
431
+ end
432
+ },
433
+ true
434
+ )
404
435
  __TS__SetDescriptor(
405
436
  UnitWeapon.prototype,
406
437
  "cooldown",
@@ -435,6 +466,19 @@ __TS__SetDescriptor(
435
466
  },
436
467
  true
437
468
  )
469
+ __TS__SetDescriptor(
470
+ UnitWeapon.prototype,
471
+ "allowedTargetCombatClassifications",
472
+ {
473
+ get = function(self)
474
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
475
+ end,
476
+ set = function(self, allowedTargetCombatClassifications)
477
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
478
+ end
479
+ },
480
+ true
481
+ )
438
482
  __TS__SetDescriptor(
439
483
  UnitWeapon.prototype,
440
484
  "damageBase",
@@ -546,8 +590,6 @@ __TS__SetDescriptor(
546
590
  },
547
591
  true
548
592
  )
549
- local unitInventorySize = UnitInventorySize
550
- local unitItemInSlot = UnitItemInSlot
551
593
  local getItemAbility = BlzGetItemAbility
552
594
  local getUnitAbility = BlzGetUnitAbility
553
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -565,8 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
565
607
  ____exports.Unit:of(unit)
566
608
  )
567
609
  end
568
- for i = 0, unitInventorySize(unit) - 1 do
569
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
570
612
  if getItemAbility(item, abilityId) == ability then
571
613
  return ItemAbility:of(
572
614
  ability,
@@ -611,26 +653,30 @@ local fieldSetters = {
611
653
  }
612
654
  local dummies = {}
613
655
  for ____, player in ipairs(Player.all) do
614
- local dummy = assert(createUnit(
615
- player.handle,
616
- dummyUnitId,
617
- 0,
618
- 0,
619
- 270
620
- ))
656
+ local dummy = assert(
657
+ createUnit(
658
+ player.handle,
659
+ dummyUnitId,
660
+ 0,
661
+ 0,
662
+ 270
663
+ ),
664
+ "dummy must be created",
665
+ player
666
+ )
621
667
  ShowUnit(dummy, false)
622
668
  dummies[player] = dummy
623
669
  end
624
670
  local function delayHealthChecksCallback(unit)
625
- local counter = (unit[103] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
626
672
  if counter ~= 0 then
627
- unit[103] = counter
673
+ unit[104] = counter
628
674
  return
629
675
  end
630
- unit[103] = nil
631
- local healthBonus = unit[104]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
632
678
  if healthBonus ~= nil then
633
- unit[104] = nil
679
+ unit[105] = nil
634
680
  local handle = unit.handle
635
681
  BlzSetUnitMaxHP(
636
682
  handle,
@@ -639,52 +685,78 @@ local function delayHealthChecksCallback(unit)
639
685
  end
640
686
  end
641
687
  local nextSyncId = 1
642
- local unitBySyncId = setmetatable({}, {__mode = "k"})
688
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
689
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
690
+ local function addAbility(unit, abilityTypeId)
691
+ local ____unitAddAbility_result_0
692
+ if unitAddAbility(unit, abilityTypeId) then
693
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
694
+ else
695
+ ____unitAddAbility_result_0 = nil
696
+ end
697
+ return ____unitAddAbility_result_0
698
+ end
643
699
  ____exports.Unit = __TS__Class()
644
700
  local Unit = ____exports.Unit
645
701
  Unit.name = "Unit"
646
702
  __TS__ClassExtends(Unit, Handle)
647
703
  function Unit.prototype.____constructor(self, handle)
648
704
  Handle.prototype.____constructor(self, handle)
649
- local ____nextSyncId_0 = nextSyncId
650
- nextSyncId = ____nextSyncId_0 + 1
651
- self.syncId = ____nextSyncId_0
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
652
708
  self._owner = Player:of(getOwningPlayer(handle))
653
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
654
- assert(unitAddAbility(handle, morphDetectAbilityId))
709
+ assert(
710
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
711
+ "leave detection ability must be added",
712
+ self
713
+ )
714
+ assert(
715
+ unitAddAbility(handle, morphDetectAbilityId),
716
+ "morph detection ability must be added",
717
+ self
718
+ )
655
719
  if unitAddAbility(
656
720
  handle,
657
721
  fourCC("Amrf")
658
722
  ) then
659
- assert(unitRemoveAbility(
660
- handle,
661
- fourCC("Amrf")
662
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
663
731
  end
664
732
  unitBySyncId[self.syncId] = self
665
733
  local ____ = self.abilities
666
734
  end
667
- function Unit.prototype.getEvent(self, event, collector)
668
- self.events = self.events or ({})
669
- local eventId = GetHandleId(event)
670
- if not self.events[eventId] then
671
- self.events[eventId] = __TS__New(
735
+ function Unit.prototype.getEvent(self, jevent, collector)
736
+ self.events = self.events or __TS__New(LinkedMap)
737
+ local eventId = GetHandleId(jevent)
738
+ local event = self.events:get(eventId)
739
+ if event == nil then
740
+ event = __TS__New(
672
741
  TriggerEvent,
673
742
  function(trigger)
674
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
675
744
  end,
676
745
  collector or (function() return {} end)
677
746
  )
747
+ self.events:put(eventId, event)
678
748
  end
679
- return self.events[eventId]
749
+ return event
750
+ end
751
+ function Unit.prototype.saveData(self)
752
+ local handle = self.handle
753
+ self[108] = self[108] or getUnitX(handle)
754
+ self[109] = self[109] or getUnitY(handle)
755
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
680
756
  end
681
757
  function Unit.prototype.onDestroy(self)
682
758
  local handle = self.handle
683
- self[107] = getUnitX(handle)
684
- self[108] = getUnitY(handle)
685
- if not self._owner then
686
- self._owner = Player:of(getOwningPlayer(handle))
687
- end
759
+ self:saveData()
688
760
  local abilities = self.abilities
689
761
  for ____, ability in ipairs(abilities) do
690
762
  ability:destroy()
@@ -702,7 +774,9 @@ function Unit.prototype.onDestroy(self)
702
774
  end
703
775
  local eventsToDestroy = self._eventsToDestroy
704
776
  if eventsToDestroy ~= nil then
705
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
706
780
  end
707
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
708
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -720,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
720
794
  self._attackHandlers = handlers
721
795
  if #handlers == 1 then
722
796
  local handle = self.handle
723
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
797
+ assert(
798
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
799
+ "attack handler ability must be added",
800
+ self
801
+ )
724
802
  end
725
803
  return handler
726
804
  end
@@ -749,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
827
  end}
750
828
  end
751
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_1 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
754
832
  end
755
833
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
757
835
  end
758
836
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
760
838
  end
761
839
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
763
841
  end
764
842
  function Unit.prototype.isVisibleTo(self, player)
765
843
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +846,19 @@ function Unit.prototype.isInvisibleTo(self, player)
768
846
  return isUnitInvisible(self.handle, player.handle)
769
847
  end
770
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_2
849
+ local ____temp_4
772
850
  if type(x) == "number" then
773
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
774
852
  else
775
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
853
+ local ____temp_3
854
+ if __TS__InstanceOf(x, ____exports.Unit) then
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
856
+ else
857
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
858
+ end
859
+ ____temp_4 = ____temp_3
776
860
  end
777
- return ____temp_2
861
+ return ____temp_4
778
862
  end
779
863
  function Unit.prototype.isAllyOf(self, unit)
780
864
  return isUnitAlly(
@@ -792,16 +876,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
876
  if type(animation) == "number" then
793
877
  setUnitAnimationByIndex(self.handle, animation)
794
878
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
879
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
880
  else
797
881
  setUnitAnimation(self.handle, animation)
798
882
  end
799
883
  end
884
+ function Unit.prototype.resetAnimation(self)
885
+ ResetUnitAnimation(self.handle)
886
+ end
800
887
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
888
+ QueueUnitAnimation(self.handle, animation)
889
+ end
890
+ function Unit.prototype.chooseWeapon(self, target)
891
+ local firstWeapon = self.firstWeapon
892
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
893
+ return firstWeapon
894
+ end
895
+ local secondWeapon = self.secondWeapon
896
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
897
+ return secondWeapon
898
+ end
899
+ return nil
802
900
  end
803
901
  function Unit.prototype.delayHealthChecks(self)
804
- self[103] = (self[103] or 0) + 1
902
+ self[104] = (self[104] or 0) + 1
805
903
  Timer:run(delayHealthChecksCallback, self)
806
904
  end
807
905
  function Unit.prototype.setPosition(self, x, y)
@@ -811,21 +909,21 @@ function Unit.prototype.isSelected(self, player)
811
909
  return IsUnitSelected(self.handle, player.handle)
812
910
  end
813
911
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
912
+ SetUnitExploded(self.handle, true)
815
913
  killUnit(self.handle)
816
914
  end
817
915
  function Unit.prototype.kill(self)
818
916
  killUnit(self.handle)
819
917
  end
820
918
  function Unit.prototype.revive(self, x, y, doEffect)
821
- local ____ReviveHero_5 = ReviveHero
822
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
823
- local ____doEffect_3 = doEffect
824
- if ____doEffect_3 == nil then
825
- ____doEffect_3 = false
919
+ local ____ReviveHero_7 = ReviveHero
920
+ local ____array_6 = __TS__SparseArrayNew(self.handle, x, y)
921
+ local ____doEffect_5 = doEffect
922
+ if ____doEffect_5 == nil then
923
+ ____doEffect_5 = false
826
924
  end
827
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
828
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
925
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
926
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
829
927
  end
830
928
  function Unit.prototype.healTarget(self, target, amount)
831
929
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,20 +963,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
963
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
964
  end
867
965
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(unitItemInSlot(self.handle, slot))
966
+ return Item:of(UnitItemInSlot(self.handle, slot))
869
967
  end
870
968
  function Unit.prototype.addAbility(self, abilityId)
871
- if unitAddAbility(self.handle, abilityId) then
872
- local ability = UnitAbility:of(
873
- checkNotNull(getUnitAbility(self.handle, abilityId)),
874
- abilityId,
875
- self
876
- )
969
+ local ability = UnitAbility:of(
970
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
971
+ abilityId,
972
+ self
973
+ )
974
+ if ability ~= nil then
877
975
  local abilities = self.abilities
878
976
  abilities[#abilities + 1] = ability
879
- return ability
880
977
  end
881
- return nil
978
+ return ability
882
979
  end
883
980
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
884
981
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -892,31 +989,24 @@ end
892
989
  function Unit.prototype.hasAbility(self, abilityId)
893
990
  return getUnitAbilityLevel(self.handle, abilityId) > 0
894
991
  end
895
- function Unit.prototype.getAbilityById(self, abilityId)
896
- local handle = self.handle
897
- if unitAddAbility(handle, abilityId) then
898
- assert(unitRemoveAbility(handle, abilityId))
899
- return nil
900
- end
901
- return UnitAbility:of(
902
- getUnitAbility(self.handle, abilityId),
903
- abilityId,
904
- self
905
- )
992
+ function Unit.prototype.getAbility(self, abilityId)
993
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
994
+ return UnitAbility:of(ability, abilityId, self)
906
995
  end
907
- function Unit.prototype.removeAbility(self, abilityId)
908
- if unitRemoveAbility(self.handle, abilityId) then
909
- local abilities = self.abilities
910
- for i = 1, #abilities do
911
- if abilities[i].typeId == abilityId then
912
- abilities[i]:destroy()
913
- tremove(abilities, i)
914
- return true
996
+ function Unit.prototype.removeAbility(self, abilityTypeId)
997
+ local abilities = self.abilities
998
+ for i = 1, #abilities do
999
+ if abilities[i].typeId == abilityTypeId then
1000
+ local ability = abilities[i]
1001
+ tremove(abilities, i)
1002
+ if ability.state == 2 then
1003
+ break
915
1004
  end
1005
+ ability:destroy()
1006
+ return true
916
1007
  end
917
- return true
918
1008
  end
919
- return false
1009
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
920
1010
  end
921
1011
  function Unit.prototype.hideAbility(self, abilityId, flag)
922
1012
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -930,9 +1020,6 @@ end
930
1020
  function Unit.prototype.endAbilityCooldown(self, abilityId)
931
1021
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
932
1022
  end
933
- function Unit.prototype.interruptAttack(self)
934
- unitInterruptAttack(self.handle)
935
- end
936
1023
  function Unit.prototype.interruptCast(self, abilityId)
937
1024
  local handle = self.handle
938
1025
  unitDisableAbility(handle, abilityId, true, false)
@@ -1003,18 +1090,44 @@ function Unit.prototype.unpauseEx(self)
1003
1090
  end
1004
1091
  function Unit.prototype.incrementStunCounter(self)
1005
1092
  local stunCounter = self[102] or 0
1006
- if not self[101] or stunCounter >= 0 then
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1007
1094
  BlzPauseUnitEx(self.handle, true)
1008
1095
  end
1009
1096
  self[102] = stunCounter + 1
1010
1097
  end
1011
1098
  function Unit.prototype.decrementStunCounter(self)
1012
1099
  local stunCounter = self[102] or 0
1013
- if not self[101] or stunCounter >= 1 then
1100
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1014
1101
  BlzPauseUnitEx(self.handle, false)
1015
1102
  end
1016
1103
  self[102] = stunCounter - 1
1017
1104
  end
1105
+ function Unit.prototype.incrementForceStunCounter(self)
1106
+ local forceStunCounter = self[103] or 0
1107
+ if forceStunCounter == 0 then
1108
+ local handle = self.handle
1109
+ if not self[101] then
1110
+ for _ = self[102] or 0, -1 do
1111
+ BlzPauseUnitEx(handle, true)
1112
+ end
1113
+ end
1114
+ BlzPauseUnitEx(handle, true)
1115
+ end
1116
+ self[103] = forceStunCounter + 1
1117
+ end
1118
+ function Unit.prototype.decrementForceStunCounter(self)
1119
+ local forceStunCounter = self[103] or 0
1120
+ if forceStunCounter == 1 then
1121
+ local handle = self.handle
1122
+ if not self[101] then
1123
+ for _ = self[102] or 0, -1 do
1124
+ BlzPauseUnitEx(handle, false)
1125
+ end
1126
+ end
1127
+ BlzPauseUnitEx(handle, false)
1128
+ end
1129
+ self[103] = forceStunCounter - 1
1130
+ end
1018
1131
  function Unit.create(self, owner, id, x, y, facing, skinId)
1019
1132
  local handle = skinId and BlzCreateUnitWithSkin(
1020
1133
  owner.handle,
@@ -1203,7 +1316,7 @@ __TS__SetDescriptor(
1203
1316
  Unit.prototype,
1204
1317
  "isIllusion",
1205
1318
  {get = function(self)
1206
- return isUnitIllusion(self.handle)
1319
+ return IsUnitIllusion(self.handle)
1207
1320
  end},
1208
1321
  true
1209
1322
  )
@@ -1211,7 +1324,7 @@ __TS__SetDescriptor(
1211
1324
  Unit.prototype,
1212
1325
  "isStunned",
1213
1326
  {get = function(self)
1214
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1327
+ return getUnitCurrentOrder(self.handle) == 851973
1215
1328
  end},
1216
1329
  true
1217
1330
  )
@@ -1290,13 +1403,13 @@ __TS__SetDescriptor(
1290
1403
  )
1291
1404
  __TS__SetDescriptor(
1292
1405
  Unit.prototype,
1293
- "strengthBase",
1406
+ "primaryAttribute",
1294
1407
  {
1295
1408
  get = function(self)
1296
- return getHeroStr(self.handle, false)
1409
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1297
1410
  end,
1298
- set = function(self, strengthBase)
1299
- setHeroStr(self.handle, strengthBase, true)
1411
+ set = function(self, primaryAttribute)
1412
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1300
1413
  end
1301
1414
  },
1302
1415
  true
@@ -1318,19 +1431,6 @@ __TS__SetDescriptor(
1318
1431
  end},
1319
1432
  true
1320
1433
  )
1321
- __TS__SetDescriptor(
1322
- Unit.prototype,
1323
- "agilityBase",
1324
- {
1325
- get = function(self)
1326
- return getHeroAgi(self.handle, false)
1327
- end,
1328
- set = function(self, agilityBase)
1329
- setHeroAgi(self.handle, agilityBase, true)
1330
- end
1331
- },
1332
- true
1333
- )
1334
1434
  __TS__SetDescriptor(
1335
1435
  Unit.prototype,
1336
1436
  "agilityBonus",
@@ -1348,19 +1448,6 @@ __TS__SetDescriptor(
1348
1448
  end},
1349
1449
  true
1350
1450
  )
1351
- __TS__SetDescriptor(
1352
- Unit.prototype,
1353
- "intelligenceBase",
1354
- {
1355
- get = function(self)
1356
- return getHeroInt(self.handle, false)
1357
- end,
1358
- set = function(self, intelligenceBase)
1359
- setHeroInt(self.handle, intelligenceBase, true)
1360
- end
1361
- },
1362
- true
1363
- )
1364
1451
  __TS__SetDescriptor(
1365
1452
  Unit.prototype,
1366
1453
  "intelligenceBonus",
@@ -1409,17 +1496,17 @@ __TS__SetDescriptor(
1409
1496
  "isTeamGlowVisible",
1410
1497
  {
1411
1498
  get = function(self)
1412
- return not self[106]
1499
+ return not self[107]
1413
1500
  end,
1414
1501
  set = function(self, isTeamGlowVisible)
1415
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1416
- local ____temp_6
1502
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1503
+ local ____temp_8
1417
1504
  if not isTeamGlowVisible then
1418
- ____temp_6 = true
1505
+ ____temp_8 = true
1419
1506
  else
1420
- ____temp_6 = nil
1507
+ ____temp_8 = nil
1421
1508
  end
1422
- self[106] = ____temp_6
1509
+ self[107] = ____temp_8
1423
1510
  end
1424
1511
  },
1425
1512
  true
@@ -1428,9 +1515,9 @@ __TS__SetDescriptor(
1428
1515
  Unit.prototype,
1429
1516
  "color",
1430
1517
  {set = function(self, color)
1431
- setUnitColor(self.handle, color.handle)
1432
- if self[106] then
1433
- showUnitTeamGlow(self.handle, false)
1518
+ SetUnitColor(self.handle, color.handle)
1519
+ if self[107] then
1520
+ BlzShowUnitTeamGlow(self.handle, false)
1434
1521
  end
1435
1522
  end},
1436
1523
  true
@@ -1453,14 +1540,14 @@ __TS__SetDescriptor(
1453
1540
  "maxHealth",
1454
1541
  {
1455
1542
  get = function(self)
1456
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1543
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1457
1544
  end,
1458
1545
  set = function(self, maxHealth)
1459
- if maxHealth < 1 and self[103] ~= nil then
1460
- self[104] = (self[104] or 0) + (1 - maxHealth)
1546
+ if maxHealth < 1 and self[104] ~= nil then
1547
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1461
1548
  maxHealth = 1
1462
1549
  end
1463
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1550
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1464
1551
  end
1465
1552
  },
1466
1553
  true
@@ -1502,10 +1589,10 @@ __TS__SetDescriptor(
1502
1589
  "health",
1503
1590
  {
1504
1591
  get = function(self)
1505
- return GetWidgetLife(self.handle) - (self[105] or 0)
1592
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1506
1593
  end,
1507
1594
  set = function(self, health)
1508
- SetWidgetLife(self.handle, health + (self[105] or 0))
1595
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1509
1596
  end
1510
1597
  },
1511
1598
  true
@@ -1581,25 +1668,12 @@ __TS__SetDescriptor(
1581
1668
  },
1582
1669
  true
1583
1670
  )
1584
- __TS__SetDescriptor(
1585
- Unit.prototype,
1586
- "flyHeight",
1587
- {
1588
- get = function(self)
1589
- return getUnitFlyHeight(self.handle)
1590
- end,
1591
- set = function(self, v)
1592
- SetUnitFlyHeight(self.handle, v, 100000)
1593
- end
1594
- },
1595
- true
1596
- )
1597
1671
  __TS__SetDescriptor(
1598
1672
  Unit.prototype,
1599
1673
  "x",
1600
1674
  {
1601
1675
  get = function(self)
1602
- return self[107] or getUnitX(self.handle)
1676
+ return self[108] or getUnitX(self.handle)
1603
1677
  end,
1604
1678
  set = function(self, v)
1605
1679
  SetUnitX(self.handle, v)
@@ -1612,7 +1686,7 @@ __TS__SetDescriptor(
1612
1686
  "y",
1613
1687
  {
1614
1688
  get = function(self)
1615
- return self[108] or getUnitY(self.handle)
1689
+ return self[109] or getUnitY(self.handle)
1616
1690
  end,
1617
1691
  set = function(self, v)
1618
1692
  SetUnitY(self.handle, v)
@@ -1698,10 +1772,10 @@ __TS__SetDescriptor(
1698
1772
  "gold",
1699
1773
  {
1700
1774
  get = function(self)
1701
- return getResourceAmount(self.handle)
1775
+ return GetResourceAmount(self.handle)
1702
1776
  end,
1703
1777
  set = function(self, gold)
1704
- setResourceAmount(self.handle, gold)
1778
+ SetResourceAmount(self.handle, gold)
1705
1779
  end
1706
1780
  },
1707
1781
  true
@@ -1717,14 +1791,18 @@ __TS__SetDescriptor(
1717
1791
  local handle = self.handle
1718
1792
  if isPaused and not IsUnitPaused(handle) then
1719
1793
  self[101] = true
1720
- for _ = self[102] or 0, -1 do
1721
- BlzPauseUnitEx(handle, true)
1794
+ if (self[103] or 0) <= 0 then
1795
+ for _ = self[102] or 0, -1 do
1796
+ BlzPauseUnitEx(handle, true)
1797
+ end
1722
1798
  end
1723
1799
  PauseUnit(handle, true)
1724
1800
  elseif not isPaused and IsUnitPaused(handle) then
1725
1801
  PauseUnit(handle, false)
1726
- for _ = self[102] or 0, -1 do
1727
- BlzPauseUnitEx(handle, false)
1802
+ if (self[103] or 0) <= 0 then
1803
+ for _ = self[102] or 0, -1 do
1804
+ BlzPauseUnitEx(handle, false)
1805
+ end
1728
1806
  end
1729
1807
  self[101] = nil
1730
1808
  end
@@ -1782,20 +1860,6 @@ __TS__SetDescriptor(
1782
1860
  },
1783
1861
  true
1784
1862
  )
1785
- __TS__SetDescriptor(
1786
- Unit.prototype,
1787
- "scale",
1788
- {
1789
- get = function(self)
1790
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1791
- end,
1792
- set = function(self, v)
1793
- setUnitScale(self.handle, v, v, v)
1794
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1795
- end
1796
- },
1797
- true
1798
- )
1799
1863
  __TS__SetDescriptor(
1800
1864
  Unit.prototype,
1801
1865
  "timeScale",
@@ -1822,13 +1886,26 @@ __TS__SetDescriptor(
1822
1886
  Unit.prototype,
1823
1887
  "pathingCollisionRange",
1824
1888
  {get = function(self)
1825
- return 16 * (min(
1889
+ return 16 * (math.min(
1826
1890
  getUnitCollisionSize(self.handle) // 16,
1827
1891
  3
1828
1892
  ) + 1)
1829
1893
  end},
1830
1894
  true
1831
1895
  )
1896
+ __TS__SetDescriptor(
1897
+ Unit.prototype,
1898
+ "movementType",
1899
+ {
1900
+ get = function(self)
1901
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1902
+ end,
1903
+ set = function(self, movementType)
1904
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1905
+ end
1906
+ },
1907
+ true
1908
+ )
1832
1909
  __TS__SetDescriptor(
1833
1910
  Unit.prototype,
1834
1911
  "pathing",
@@ -1919,30 +1996,6 @@ __TS__SetDescriptor(
1919
1996
  end},
1920
1997
  true
1921
1998
  )
1922
- __TS__SetDescriptor(
1923
- Unit.prototype,
1924
- "onUnitInRange",
1925
- {get = function(self)
1926
- local handle = self.handle
1927
- local onUnitInRange = setmetatable(
1928
- {},
1929
- {__index = function(self, value)
1930
- local event = __TS__New(
1931
- TriggerEvent,
1932
- function(trigger)
1933
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1934
- end,
1935
- function() return ____exports.Unit:of(handle) end
1936
- )
1937
- rawset(self, value, event)
1938
- return event
1939
- end}
1940
- )
1941
- rawset(self, "onUnitInRange", onUnitInRange)
1942
- return onUnitInRange
1943
- end},
1944
- true
1945
- )
1946
1999
  __TS__SetDescriptor(
1947
2000
  Unit.prototype,
1948
2001
  "onManaEqual",
@@ -2010,6 +2063,14 @@ __TS__SetDescriptor(
2010
2063
  end},
2011
2064
  true
2012
2065
  )
2066
+ __TS__SetDescriptor(
2067
+ Unit.prototype,
2068
+ "targetAcquiredEvent",
2069
+ {get = function(self)
2070
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2071
+ end},
2072
+ true
2073
+ )
2013
2074
  __TS__SetDescriptor(
2014
2075
  Unit.prototype,
2015
2076
  "onSelect",
@@ -2070,6 +2131,11 @@ __TS__SetDescriptor(
2070
2131
  end},
2071
2132
  true
2072
2133
  )
2134
+ Unit.levelChangedEvent = __TS__New(
2135
+ ____exports.UnitTriggerEvent,
2136
+ EVENT_PLAYER_HERO_LEVEL,
2137
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2138
+ )
2073
2139
  Unit.deathEvent = __TS__New(
2074
2140
  ____exports.UnitTriggerEvent,
2075
2141
  EVENT_PLAYER_UNIT_DEATH,
@@ -2087,7 +2153,7 @@ Unit.onResurrect = __TS__New(
2087
2153
  ____exports.Unit.deathEvent:addListener(function(unit)
2088
2154
  dead[unit] = true
2089
2155
  end)
2090
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2156
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2091
2157
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2092
2158
  dead[unit] = false
2093
2159
  invoke(event, unit)
@@ -2104,7 +2170,7 @@ Unit.morphEvent = __TS__New(
2104
2170
  invoke(event, unit)
2105
2171
  end
2106
2172
  end
2107
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2173
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2108
2174
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2109
2175
  Timer:run(ifNotLeft, unit)
2110
2176
  end
@@ -2145,25 +2211,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2145
2211
  InitializingEvent,
2146
2212
  function(event)
2147
2213
  local function listener(unit, id)
2148
- local ____GetSpellTargetUnit_result_9
2214
+ local ____GetSpellTargetUnit_result_11
2149
2215
  if GetSpellTargetUnit() then
2150
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2216
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2151
2217
  else
2152
- local ____GetSpellTargetItem_result_8
2218
+ local ____GetSpellTargetItem_result_10
2153
2219
  if GetSpellTargetItem() then
2154
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2220
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2155
2221
  else
2156
- local ____GetSpellTargetDestructable_result_7
2222
+ local ____GetSpellTargetDestructable_result_9
2157
2223
  if GetSpellTargetDestructable() then
2158
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2224
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2159
2225
  else
2160
- ____GetSpellTargetDestructable_result_7 = nil
2226
+ ____GetSpellTargetDestructable_result_9 = nil
2161
2227
  end
2162
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2228
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2163
2229
  end
2164
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2230
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2165
2231
  end
2166
- local target = ____GetSpellTargetUnit_result_9
2232
+ local target = ____GetSpellTargetUnit_result_11
2167
2233
  if target then
2168
2234
  invoke(event, unit, id, target)
2169
2235
  end
@@ -2371,38 +2437,57 @@ Unit.onDamaging = (function()
2371
2437
  if source and source.typeId == dummyUnitId then
2372
2438
  source = nil
2373
2439
  end
2374
- local target = BlzGetEventDamageTarget()
2440
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2441
+ local metadata = damageMetadataByTarget[target]
2442
+ damageMetadataByTarget[target] = nil
2375
2443
  local data = {
2376
2444
  amount = GetEventDamage(),
2377
- attackType = BlzGetEventAttackType(),
2445
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2378
2446
  damageType = BlzGetEventDamageType(),
2379
2447
  weaponType = BlzGetEventWeaponType(),
2380
- isAttack = BlzGetEventIsAttack()
2448
+ metadata = metadata,
2449
+ isAttack = BlzGetEventIsAttack(),
2450
+ originalAmount = GetEventDamage(),
2451
+ originalMetadata = metadata,
2452
+ preventRetaliation = damagingEventPreventRetaliation
2381
2453
  }
2382
2454
  if data.isAttack and source then
2383
- 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
2384
- if weapon == -1 then
2385
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2386
- weapon = 0
2387
- end
2388
- data.weapon = assert(source.weapons[weapon + 1])
2455
+ data.weapon = source:chooseWeapon(target)
2389
2456
  end
2390
2457
  if not data.isAttack or not source or not source._attackHandlers then
2391
2458
  invoke(
2392
2459
  event,
2393
2460
  source,
2394
- ____exports.Unit:of(target),
2461
+ target,
2395
2462
  setmetatable(
2396
2463
  {},
2397
2464
  {
2398
2465
  __index = data,
2399
2466
  __newindex = function(self, key, value)
2400
- damageSetters[key](value)
2467
+ local damageSetter = damageSetters[key]
2468
+ if damageSetter ~= nil then
2469
+ damageSetter(value)
2470
+ end
2401
2471
  data[key] = value
2402
2472
  end
2403
2473
  }
2404
2474
  )
2405
2475
  )
2476
+ if data[0] and source then
2477
+ local sourceOwner = source.owner.handle
2478
+ data[1] = sourceOwner
2479
+ local targetOwner = target.owner.handle
2480
+ data[2] = targetOwner
2481
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2482
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2483
+ data[3] = true
2484
+ end
2485
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2486
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2487
+ data[4] = true
2488
+ end
2489
+ end
2490
+ damagingEventByTarget[target] = data
2406
2491
  return
2407
2492
  end
2408
2493
  BlzSetEventDamage(0)
@@ -2410,7 +2495,7 @@ Unit.onDamaging = (function()
2410
2495
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2411
2496
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2412
2497
  local sourceOwner = source.owner.handle
2413
- local targetOwner = GetOwningPlayer(target)
2498
+ local targetOwner = target.owner.handle
2414
2499
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2415
2500
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2416
2501
  Timer:run(function()
@@ -2426,23 +2511,19 @@ Unit.onDamaging = (function()
2426
2511
  for ____, ____value in ipairs(source._attackHandlers) do
2427
2512
  local condition = ____value[1]
2428
2513
  local action = ____value[2]
2429
- if condition(
2430
- source,
2431
- ____exports.Unit:of(target),
2432
- data
2433
- ) then
2514
+ if condition(source, target, data) then
2434
2515
  action(
2435
2516
  source,
2436
- ____exports.Unit:of(target),
2517
+ target,
2437
2518
  setmetatable(
2438
2519
  {fire = function()
2439
2520
  UnitDamageTarget(
2440
2521
  source.handle,
2441
- target,
2522
+ target.handle,
2442
2523
  data.amount,
2443
2524
  true,
2444
2525
  true,
2445
- data.attackType,
2526
+ attackTypeToNative(data.attackType),
2446
2527
  data.damageType,
2447
2528
  data.weaponType
2448
2529
  )
@@ -2469,30 +2550,54 @@ Unit.onDamage = __TS__New(
2469
2550
  if source and source.typeId == dummyUnitId then
2470
2551
  source = nil
2471
2552
  end
2553
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2554
+ local damagingEvent = damagingEventByTarget[target]
2555
+ damagingEventByTarget[target] = nil
2472
2556
  local data = {
2473
2557
  amount = GetEventDamage(),
2474
- attackType = BlzGetEventAttackType(),
2558
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2475
2559
  damageType = BlzGetEventDamageType(),
2476
2560
  weaponType = BlzGetEventWeaponType(),
2561
+ metadata = damagingEvent and damagingEvent.metadata,
2477
2562
  isAttack = BlzGetEventIsAttack(),
2478
- originalAmount = GetEventDamage(),
2563
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2564
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2479
2565
  preventDeath = damageEventPreventDeath
2480
2566
  }
2567
+ if damagingEvent then
2568
+ for key, value in pairs(damagingEvent) do
2569
+ if isAttribute(key) then
2570
+ data[key] = value
2571
+ end
2572
+ end
2573
+ local sourceOwner = damagingEvent[1]
2574
+ if sourceOwner then
2575
+ local targetOwner = damagingEvent[2]
2576
+ if damagingEvent[3] then
2577
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2578
+ end
2579
+ if damagingEvent[4] then
2580
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2581
+ end
2582
+ end
2583
+ end
2481
2584
  local evData = setmetatable(
2482
2585
  {},
2483
2586
  {
2484
2587
  __index = data,
2485
2588
  __newindex = function(self, key, value)
2486
- damageSetters[key](value)
2589
+ local damageSetter = damageSetters[key]
2590
+ if damageSetter ~= nil then
2591
+ damageSetter(value)
2592
+ end
2487
2593
  data[key] = value
2488
2594
  end
2489
2595
  }
2490
2596
  )
2491
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2492
2597
  invoke(event, source, target, evData)
2493
2598
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2494
2599
  local bonusHealth = math.ceil(evData.amount)
2495
- target[105] = (target[105] or 0) + bonusHealth
2600
+ target[106] = (target[106] or 0) + bonusHealth
2496
2601
  BlzSetUnitMaxHP(
2497
2602
  target.handle,
2498
2603
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2506,7 +2611,7 @@ Unit.onDamage = __TS__New(
2506
2611
  evData[0],
2507
2612
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2508
2613
  )
2509
- target[105] = (target[105] or 0) - bonusHealth
2614
+ target[106] = (target[106] or 0) - bonusHealth
2510
2615
  SetWidgetLife(
2511
2616
  target.handle,
2512
2617
  GetWidgetLife(target.handle) - bonusHealth
@@ -2532,7 +2637,7 @@ Unit.itemDroppedEvent = __TS__New(
2532
2637
  function()
2533
2638
  local unit = getTriggerUnit()
2534
2639
  local item = getManipulatedItem()
2535
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2640
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2536
2641
  return ____exports.Unit:of(unit), Item:of(item)
2537
2642
  end
2538
2643
  return IgnoreEvent
@@ -2542,10 +2647,14 @@ Unit.itemPickedUpEvent = __TS__New(
2542
2647
  ____exports.UnitTriggerEvent,
2543
2648
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2544
2649
  function()
2545
- local unit = getTriggerUnit()
2546
- local item = getManipulatedItem()
2547
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2548
- return ____exports.Unit:of(unit), Item:of(item)
2650
+ local unitHandle = getTriggerUnit()
2651
+ local itemHandle = getManipulatedItem()
2652
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2653
+ local unit = ____exports.Unit:of(unitHandle)
2654
+ local item = Item:of(itemHandle)
2655
+ if ownerByItem[item] ~= unit then
2656
+ return unit, item
2657
+ end
2549
2658
  end
2550
2659
  return IgnoreEvent
2551
2660
  end
@@ -2556,59 +2665,24 @@ Unit.itemUsedEvent = __TS__New(
2556
2665
  function()
2557
2666
  local unit = getTriggerUnit()
2558
2667
  local item = getManipulatedItem()
2559
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2668
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2560
2669
  return ____exports.Unit:of(unit), Item:of(item)
2561
2670
  end
2562
2671
  return IgnoreEvent
2563
2672
  end
2564
2673
  )
2565
- Unit.itemStackedEvent = __TS__New(
2566
- ____exports.UnitTriggerEvent,
2567
- EVENT_PLAYER_UNIT_STACK_ITEM,
2568
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2569
- )
2570
2674
  __TS__ObjectDefineProperty(
2571
2675
  Unit,
2572
- "itemUseOrderEvent",
2676
+ "itemChargesChangedEvent",
2573
2677
  {get = function(self)
2574
2678
  local event = __TS__New(Event)
2575
- for order = orderId("useslot0"), orderId("useslot5") do
2576
- local slot = order - orderId("useslot0")
2577
- local function listener(unit)
2578
- local item = unit.items[slot + 1]
2579
- if item ~= nil then
2580
- invoke(event, unit, item)
2581
- end
2679
+ Item.chargesChangedEvent:addListener(function(item)
2680
+ local unit = item.owner
2681
+ if unit ~= nil then
2682
+ invoke(event, unit, item)
2582
2683
  end
2583
- self.onImmediateOrder[order]:addListener(listener)
2584
- self.onTargetOrder[order]:addListener(listener)
2585
- self.onPointOrder[order]:addListener(listener)
2586
- end
2587
- rawset(self, "itemUseOrderEvent", event)
2588
- return event
2589
- end}
2590
- )
2591
- __TS__ObjectDefineProperty(
2592
- Unit,
2593
- "itemMoveOrderEvent",
2594
- {get = function(self)
2595
- local event = __TS__New(Event)
2596
- for order = orderId("moveslot0"), orderId("moveslot5") do
2597
- local slotTo = order - orderId("moveslot0")
2598
- self.onTargetOrder[order]:addListener(function(unit, item)
2599
- local slotFrom = unit.items:findSlot(item)
2600
- if slotFrom ~= nil then
2601
- invoke(
2602
- event,
2603
- unit,
2604
- item,
2605
- slotFrom,
2606
- slotTo
2607
- )
2608
- end
2609
- end)
2610
- end
2611
- rawset(self, "itemMoveOrderEvent", event)
2684
+ end)
2685
+ rawset(self, "itemChargesChangedEvent", event)
2612
2686
  return event
2613
2687
  end}
2614
2688
  )
@@ -2637,6 +2711,10 @@ __TS__ObjectDefineProperty(
2637
2711
  rawset(self, "destroyEvent", destroyEvent)
2638
2712
  return destroyEvent
2639
2713
  end}
2714
+ )
2715
+ Unit.synchronize = synchronizer(
2716
+ function(unit) return unit.syncId end,
2717
+ function(syncId) return unitBySyncId[syncId] end
2640
2718
  );
2641
2719
  (function(self)
2642
2720
  local leaveAbilityIds = postcompile(function()
@@ -2654,11 +2732,7 @@ __TS__ObjectDefineProperty(
2654
2732
  function(____, id) return fourCC(id) end
2655
2733
  )
2656
2734
  end)
2657
- for ____, leaveOrderId in ipairs({
2658
- orderId("undefend"),
2659
- orderId("magicundefense"),
2660
- orderId("unimmolation")
2661
- }) do
2735
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2662
2736
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2663
2737
  local handle = unit.handle
2664
2738
  for i = 1, #leaveAbilityIds do
@@ -2666,7 +2740,8 @@ __TS__ObjectDefineProperty(
2666
2740
  return
2667
2741
  end
2668
2742
  end
2669
- unit:destroy()
2743
+ unit:saveData()
2744
+ Timer:run(unit, "destroy")
2670
2745
  end)
2671
2746
  end
2672
2747
  end)(Unit)