warscript 0.0.1-dev.363d29d → 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 (436) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/dummy.lua +4 -2
  6. package/core/types/effect.d.ts +12 -4
  7. package/core/types/effect.lua +67 -104
  8. package/core/types/frame.d.ts +16 -2
  9. package/core/types/frame.lua +141 -77
  10. package/core/types/handle.lua +9 -9
  11. package/core/types/item.d.ts +1 -0
  12. package/core/types/item.lua +1 -0
  13. package/core/types/player.d.ts +18 -1
  14. package/core/types/player.lua +76 -26
  15. package/core/types/playerCamera.d.ts +2 -0
  16. package/core/types/playerCamera.lua +123 -5
  17. package/core/types/playerColor.lua +4 -3
  18. package/core/types/sound.d.ts +18 -25
  19. package/core/types/sound.lua +113 -33
  20. package/core/types/tileCell.d.ts +18 -3
  21. package/core/types/tileCell.lua +108 -0
  22. package/core/types/timer.d.ts +9 -8
  23. package/core/types/timer.lua +45 -23
  24. package/core/types/unit.d.ts +5 -0
  25. package/core/types/unit.lua +5 -0
  26. package/core/util.d.ts +3 -1
  27. package/core/util.lua +115 -4
  28. package/decl/native.d.ts +1719 -964
  29. package/destroyable.d.ts +1 -0
  30. package/destroyable.lua +9 -0
  31. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  32. package/engine/ability-type-extended-tooltip.lua +44 -0
  33. package/engine/behavior.d.ts +14 -1
  34. package/engine/behavior.lua +230 -70
  35. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  36. package/engine/behaviour/ability/apply-buff.lua +36 -4
  37. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  38. package/engine/behaviour/ability/damage.d.ts +13 -3
  39. package/engine/behaviour/ability/damage.lua +41 -49
  40. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  41. package/engine/behaviour/ability/emulate-impact.lua +96 -7
  42. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  43. package/engine/behaviour/ability/instant-impact.lua +17 -2
  44. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  45. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  46. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  47. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  48. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  49. package/engine/behaviour/ability/restore-mana.lua +6 -6
  50. package/engine/behaviour/ability.d.ts +23 -5
  51. package/engine/behaviour/ability.lua +156 -27
  52. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  53. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  54. package/engine/behaviour/unit.d.ts +41 -2
  55. package/engine/behaviour/unit.lua +270 -6
  56. package/engine/buff.d.ts +130 -59
  57. package/engine/buff.lua +638 -307
  58. package/engine/index.d.ts +2 -1
  59. package/engine/internal/ability.d.ts +14 -1
  60. package/engine/internal/ability.lua +113 -44
  61. package/engine/internal/item/ability.lua +63 -11
  62. package/engine/internal/item/fields.d.ts +12 -0
  63. package/engine/internal/item/fields.lua +33 -0
  64. package/engine/internal/item/owner-cache.d.ts +5 -0
  65. package/engine/internal/item/owner-cache.lua +4 -0
  66. package/engine/internal/item+owner.d.ts +2 -0
  67. package/engine/internal/item+owner.lua +37 -8
  68. package/engine/internal/item.d.ts +34 -18
  69. package/engine/internal/item.lua +308 -102
  70. package/engine/internal/mechanics/ability-duration.lua +1 -1
  71. package/engine/internal/mechanics/cast-ability.lua +6 -3
  72. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  73. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  74. package/engine/internal/misc/frame-coordinates.lua +21 -0
  75. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  76. package/engine/internal/misc/get-terrain-z.lua +11 -0
  77. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  78. package/engine/internal/misc/player-local-handle.lua +5 -0
  79. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  80. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  81. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  83. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  84. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  85. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  86. package/engine/internal/object-data/evasion-probability.lua +16 -0
  87. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  88. package/engine/internal/object-data/health-bonus.lua +16 -0
  89. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  90. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  91. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  92. package/engine/internal/object-data/mana-bonus.lua +16 -0
  93. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  94. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  95. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  96. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  97. package/engine/internal/unit/ability.d.ts +35 -0
  98. package/engine/internal/unit/ability.lua +114 -9
  99. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  100. package/engine/internal/unit/add-item-to-slot.lua +57 -14
  101. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  102. package/engine/internal/unit/allowed-targets.lua +9 -1
  103. package/engine/internal/unit/appearance.d.ts +15 -0
  104. package/engine/internal/unit/appearance.lua +85 -0
  105. package/engine/internal/unit/attributes.d.ts +17 -0
  106. package/engine/internal/unit/attributes.lua +46 -0
  107. package/engine/internal/unit/bonus.d.ts +19 -0
  108. package/engine/internal/unit/bonus.lua +130 -8
  109. package/engine/internal/unit/buff.d.ts +2 -2
  110. package/engine/internal/unit/buff.lua +34 -19
  111. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  112. package/engine/internal/unit/equipment-inventory.lua +233 -0
  113. package/engine/internal/unit/expiration-timer.lua +1 -1
  114. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  115. package/engine/internal/unit/extended-inventory.lua +99 -0
  116. package/engine/internal/unit/fly-height.d.ts +7 -0
  117. package/engine/internal/unit/fly-height.lua +20 -0
  118. package/engine/internal/unit/ignore-events-items.lua +10 -1
  119. package/engine/internal/unit/interrupts.d.ts +12 -0
  120. package/engine/internal/unit/interrupts.lua +28 -0
  121. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  122. package/engine/internal/unit/inventory.lua +87 -0
  123. package/engine/internal/unit/item-container.d.ts +25 -0
  124. package/engine/internal/unit/item-container.lua +11 -0
  125. package/engine/internal/unit/item-order-events.d.ts +17 -0
  126. package/engine/internal/unit/item-order-events.lua +67 -0
  127. package/engine/internal/unit/item-slot.d.ts +27 -0
  128. package/engine/internal/unit/item-slot.lua +92 -0
  129. package/engine/internal/unit/main-selected.lua +12 -27
  130. package/engine/internal/unit/order.d.ts +20 -0
  131. package/engine/internal/unit/order.lua +136 -0
  132. package/engine/internal/unit/range-event.d.ts +12 -0
  133. package/engine/internal/unit/range-event.lua +90 -0
  134. package/engine/internal/unit/scale.d.ts +7 -0
  135. package/engine/internal/unit/scale.lua +20 -0
  136. package/engine/internal/unit+ability.d.ts +2 -1
  137. package/engine/internal/unit+ability.lua +83 -3
  138. package/engine/internal/unit+bonus.lua +3 -3
  139. package/engine/internal/unit+damage.d.ts +11 -11
  140. package/engine/internal/unit+damage.lua +43 -14
  141. package/engine/internal/unit+rally.lua +9 -31
  142. package/engine/internal/unit+spellSteal.lua +1 -2
  143. package/engine/internal/unit-missile-data.lua +58 -32
  144. package/engine/internal/unit-missile-launch.lua +65 -27
  145. package/engine/internal/unit.d.ts +45 -34
  146. package/engine/internal/unit.lua +408 -322
  147. package/engine/lightning.d.ts +12 -5
  148. package/engine/lightning.lua +48 -14
  149. package/engine/local-client.d.ts +28 -0
  150. package/engine/local-client.lua +324 -54
  151. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  152. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  153. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  154. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  155. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  156. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  157. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  158. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  159. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  160. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  161. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  162. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  163. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  164. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  165. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  166. package/engine/object-data/auxiliary/item-class.lua +2 -0
  167. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  168. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  169. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  170. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  171. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  172. package/engine/object-data/auxiliary/order-type.lua +2 -0
  173. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  174. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  175. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  176. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  177. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  178. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  179. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  180. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  181. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  183. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  184. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  185. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  186. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  187. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  188. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  189. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  190. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  191. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  192. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  193. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  194. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  195. package/engine/object-data/entry/ability-type/blank-configurable.lua +14 -3
  196. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  197. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  198. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  199. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  200. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  201. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  202. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  203. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  204. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  205. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  206. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  207. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  208. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  209. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  210. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  211. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  212. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  213. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  214. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  215. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  216. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  217. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  218. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  219. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  220. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  221. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  222. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  223. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  224. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  225. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  226. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  227. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  228. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  229. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  230. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  231. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  232. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  233. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  234. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  235. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  236. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  237. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  238. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  239. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  240. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  241. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  242. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  243. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  244. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  245. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  246. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  247. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  248. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  249. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  250. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  251. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  252. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  253. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  254. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  255. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  256. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  257. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  258. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  259. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  260. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  261. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  262. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  263. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  264. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  265. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  266. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  267. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  268. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  269. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  270. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  271. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  272. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  273. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  274. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  275. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  276. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  277. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  278. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  279. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  280. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  281. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  282. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  283. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  284. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  285. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  286. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  287. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  288. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  289. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  290. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  291. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  292. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  293. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  294. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  295. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  296. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  297. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  298. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  299. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  300. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  301. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  302. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  303. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  304. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  305. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  306. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  307. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  308. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  309. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  310. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  311. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  312. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  313. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  314. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  315. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  316. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  317. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  318. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  319. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  320. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  321. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  322. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  323. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  324. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  325. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  326. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  327. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  328. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  329. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  330. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  331. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  332. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  333. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  334. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  335. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  336. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  337. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  338. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  339. package/engine/object-data/entry/ability-type/web.lua +52 -0
  340. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  341. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  342. package/engine/object-data/entry/ability-type.d.ts +48 -21
  343. package/engine/object-data/entry/ability-type.lua +371 -35
  344. package/engine/object-data/entry/buff-type/applicable.lua +131 -139
  345. package/engine/object-data/entry/buff-type.d.ts +10 -12
  346. package/engine/object-data/entry/buff-type.lua +39 -29
  347. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  348. package/engine/object-data/entry/destructible-type.lua +181 -0
  349. package/engine/object-data/entry/item-type.d.ts +18 -3
  350. package/engine/object-data/entry/item-type.lua +88 -4
  351. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  352. package/engine/object-data/entry/lightning-type.lua +1 -1
  353. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  354. package/engine/object-data/entry/sound-preset.lua +140 -0
  355. package/engine/object-data/entry/unit-type.d.ts +81 -6
  356. package/engine/object-data/entry/unit-type.lua +606 -93
  357. package/engine/object-data/entry/upgrade.d.ts +2 -2
  358. package/engine/object-data/entry/upgrade.lua +4 -4
  359. package/engine/object-data/entry.d.ts +21 -14
  360. package/engine/object-data/entry.lua +68 -32
  361. package/engine/object-field/ability.d.ts +4 -4
  362. package/engine/object-field/ability.lua +9 -8
  363. package/engine/object-field/item.d.ts +22 -0
  364. package/engine/object-field/item.lua +118 -0
  365. package/engine/object-field/unit.d.ts +72 -3
  366. package/engine/object-field/unit.lua +268 -7
  367. package/engine/object-field.d.ts +26 -7
  368. package/engine/object-field.lua +360 -119
  369. package/engine/random.d.ts +10 -0
  370. package/engine/random.lua +21 -0
  371. package/engine/standard/entries/ability-type.d.ts +3102 -7
  372. package/engine/standard/entries/ability-type.lua +0 -6
  373. package/engine/standard/entries/buff-type.d.ts +48 -0
  374. package/engine/standard/entries/buff-type.lua +46 -0
  375. package/engine/standard/entries/item-type.d.ts +1299 -0
  376. package/engine/standard/entries/item-type.lua +2 -0
  377. package/engine/standard/entries/lightning-type.d.ts +42 -15
  378. package/engine/standard/entries/lightning-type.lua +0 -14
  379. package/engine/standard/entries/sound-preset.d.ts +10 -0
  380. package/engine/standard/entries/sound-preset.lua +10 -0
  381. package/engine/standard/entries/unit-type.d.ts +5 -0
  382. package/engine/standard/entries/unit-type.lua +5 -0
  383. package/engine/standard/fields/ability.d.ts +4 -4
  384. package/engine/standard/fields/ability.lua +4 -4
  385. package/engine/standard/fields/item.d.ts +4 -0
  386. package/engine/standard/fields/item.lua +6 -0
  387. package/engine/standard/fields/unit.d.ts +12 -0
  388. package/engine/standard/fields/unit.lua +20 -0
  389. package/engine/synchronization.d.ts +11 -0
  390. package/engine/synchronization.lua +77 -0
  391. package/engine/text-tag.d.ts +36 -2
  392. package/engine/text-tag.lua +250 -10
  393. package/engine/unit.d.ts +11 -1
  394. package/engine/unit.lua +11 -1
  395. package/event.d.ts +1 -1
  396. package/lualib_bundle.lua +1 -1
  397. package/math.d.ts +2 -0
  398. package/math.lua +14 -0
  399. package/net/socket.lua +1 -1
  400. package/network.lua +25 -1
  401. package/objutil/buff.lua +12 -11
  402. package/objutil/object.lua +1 -1
  403. package/objutil/unit.lua +8 -0
  404. package/operation.d.ts +8 -1
  405. package/operation.lua +38 -18
  406. package/package.json +3 -23
  407. package/patch-lua.lua +15 -0
  408. package/patch-lualib.lua +1 -1
  409. package/utility/arrays.d.ts +9 -1
  410. package/utility/arrays.lua +28 -0
  411. package/utility/callback-array.d.ts +17 -0
  412. package/utility/callback-array.lua +61 -0
  413. package/utility/functions.d.ts +8 -0
  414. package/utility/functions.lua +13 -0
  415. package/utility/linked-map.d.ts +35 -0
  416. package/utility/linked-map.lua +107 -0
  417. package/utility/linked-set.d.ts +5 -1
  418. package/utility/linked-set.lua +49 -1
  419. package/utility/lua-maps.d.ts +15 -2
  420. package/utility/lua-maps.lua +53 -2
  421. package/utility/lua-sets.d.ts +2 -0
  422. package/utility/lua-sets.lua +7 -0
  423. package/utility/random.d.ts +102 -0
  424. package/utility/random.lua +273 -0
  425. package/utility/records.lua +20 -1
  426. package/utility/reflection.lua +11 -7
  427. package/utility/types.d.ts +3 -0
  428. package/utility/unordered-map.d.ts +27 -0
  429. package/utility/unordered-map.lua +99 -0
  430. package/core/types/order.d.ts +0 -25
  431. package/core/types/order.lua +0 -55
  432. package/engine/internal/unit/item.lua +0 -78
  433. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  434. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  435. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  436. /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,39 +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
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
80
86
  local createUnit = CreateUnit
81
87
  local killUnit = KillUnit
82
- local setUnitExploded = SetUnitExploded
83
88
  local removeUnit = RemoveUnit
84
89
  local getUnitTypeId = GetUnitTypeId
85
90
  local isHeroUnitId = IsHeroUnitId
@@ -95,15 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
95
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
96
101
  local isUnitInRangeXY = IsUnitInRangeXY
97
102
  local isUnitInRange = IsUnitInRange
98
- local setResourceAmount = SetResourceAmount
99
- local getResourceAmount = GetResourceAmount
100
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
101
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
102
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
103
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
104
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
105
108
  local unitDisableAbility = BlzUnitDisableAbility
106
- local unitInterruptAttack = BlzUnitInterruptAttack
107
109
  local isUnitInvisible = IsUnitInvisible
108
110
  local isUnitVisible = IsUnitVisible
109
111
  local getUnitX = GetUnitX
@@ -120,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
120
122
  local getIssuedOrderId = GetIssuedOrderId
121
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
122
124
  local unitAlive = UnitAlive
123
- local unitAddType = UnitAddType
124
- local unitRemoveType = UnitRemoveType
125
- local isUnitIllusion = IsUnitIllusion
126
- local isUnitType = IsUnitType
127
125
  local isUnitAlly = IsUnitAlly
128
126
  local isUnitEnemy = IsUnitEnemy
129
127
  local getOwningPlayer = GetOwningPlayer
130
- local setUnitColor = SetUnitColor
131
- local showUnitTeamGlow = BlzShowUnitTeamGlow
132
128
  ____exports.UnitClassification = {}
133
129
  local UnitClassification = ____exports.UnitClassification
134
130
  do
@@ -138,6 +134,7 @@ do
138
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
139
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
140
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
141
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
142
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
143
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -345,6 +342,9 @@ local function dispatchAbility(event)
345
342
  }
346
343
  )
347
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
348
348
  local function damageEventPreventDeath(self, callback, ...)
349
349
  if self[0] ~= nil then
350
350
  return
@@ -356,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
356
356
  rawset(self, 1 + i, (select(i, ...)))
357
357
  end
358
358
  end
359
- 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
+ }
360
367
  local jlimitopByOperator = {
361
368
  [0] = LESS_THAN_OR_EQUAL,
362
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -374,15 +381,27 @@ local modifiers = {
374
381
  end,
375
382
  armor = function(unit, value)
376
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
377
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
378
389
  end
379
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
380
- assert(BlzSetAbilityRealLevelField(
381
- ability,
382
- armorBonusField,
383
- 0,
384
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
385
- ))
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
+ )
386
405
  end
387
406
  }
388
407
  local getters = {
@@ -400,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
400
419
  self.unit = unit
401
420
  self.index = index
402
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
+ )
403
435
  __TS__SetDescriptor(
404
436
  UnitWeapon.prototype,
405
437
  "cooldown",
@@ -434,6 +466,19 @@ __TS__SetDescriptor(
434
466
  },
435
467
  true
436
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
+ )
437
482
  __TS__SetDescriptor(
438
483
  UnitWeapon.prototype,
439
484
  "damageBase",
@@ -545,8 +590,6 @@ __TS__SetDescriptor(
545
590
  },
546
591
  true
547
592
  )
548
- local unitInventorySize = UnitInventorySize
549
- local unitItemInSlot = UnitItemInSlot
550
593
  local getItemAbility = BlzGetItemAbility
551
594
  local getUnitAbility = BlzGetUnitAbility
552
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -564,8 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
564
607
  ____exports.Unit:of(unit)
565
608
  )
566
609
  end
567
- for i = 0, unitInventorySize(unit) - 1 do
568
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
569
612
  if getItemAbility(item, abilityId) == ability then
570
613
  return ItemAbility:of(
571
614
  ability,
@@ -610,26 +653,30 @@ local fieldSetters = {
610
653
  }
611
654
  local dummies = {}
612
655
  for ____, player in ipairs(Player.all) do
613
- local dummy = assert(createUnit(
614
- player.handle,
615
- dummyUnitId,
616
- 0,
617
- 0,
618
- 270
619
- ))
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
+ )
620
667
  ShowUnit(dummy, false)
621
668
  dummies[player] = dummy
622
669
  end
623
670
  local function delayHealthChecksCallback(unit)
624
- local counter = (unit[103] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
625
672
  if counter ~= 0 then
626
- unit[103] = counter
673
+ unit[104] = counter
627
674
  return
628
675
  end
629
- unit[103] = nil
630
- local healthBonus = unit[104]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
631
678
  if healthBonus ~= nil then
632
- unit[104] = nil
679
+ unit[105] = nil
633
680
  local handle = unit.handle
634
681
  BlzSetUnitMaxHP(
635
682
  handle,
@@ -638,50 +685,78 @@ local function delayHealthChecksCallback(unit)
638
685
  end
639
686
  end
640
687
  local nextSyncId = 1
641
- 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
642
699
  ____exports.Unit = __TS__Class()
643
700
  local Unit = ____exports.Unit
644
701
  Unit.name = "Unit"
645
702
  __TS__ClassExtends(Unit, Handle)
646
703
  function Unit.prototype.____constructor(self, handle)
647
704
  Handle.prototype.____constructor(self, handle)
648
- local ____nextSyncId_0 = nextSyncId
649
- nextSyncId = ____nextSyncId_0 + 1
650
- self.syncId = ____nextSyncId_0
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
651
708
  self._owner = Player:of(getOwningPlayer(handle))
652
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
653
- 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
+ )
654
719
  if unitAddAbility(
655
720
  handle,
656
721
  fourCC("Amrf")
657
722
  ) then
658
- assert(unitRemoveAbility(
659
- handle,
660
- fourCC("Amrf")
661
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
662
731
  end
663
732
  unitBySyncId[self.syncId] = self
664
733
  local ____ = self.abilities
665
734
  end
666
- function Unit.prototype.getEvent(self, event, collector)
667
- self.events = self.events or ({})
668
- local eventId = GetHandleId(event)
669
- if not self.events[eventId] then
670
- 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(
671
741
  TriggerEvent,
672
742
  function(trigger)
673
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
674
744
  end,
675
745
  collector or (function() return {} end)
676
746
  )
747
+ self.events:put(eventId, event)
677
748
  end
678
- 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))
679
756
  end
680
757
  function Unit.prototype.onDestroy(self)
681
758
  local handle = self.handle
682
- if not self._owner then
683
- self._owner = Player:of(getOwningPlayer(handle))
684
- end
759
+ self:saveData()
685
760
  local abilities = self.abilities
686
761
  for ____, ability in ipairs(abilities) do
687
762
  ability:destroy()
@@ -699,7 +774,9 @@ function Unit.prototype.onDestroy(self)
699
774
  end
700
775
  local eventsToDestroy = self._eventsToDestroy
701
776
  if eventsToDestroy ~= nil then
702
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
703
780
  end
704
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
705
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -717,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
717
794
  self._attackHandlers = handlers
718
795
  if #handlers == 1 then
719
796
  local handle = self.handle
720
- 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
+ )
721
802
  end
722
803
  return handler
723
804
  end
@@ -746,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
746
827
  end}
747
828
  end
748
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
749
- local ____combatClassification_1 = combatClassification
750
- 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
751
832
  end
752
833
  function Unit.prototype.addClassification(self, classification)
753
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
754
835
  end
755
836
  function Unit.prototype.removeClassification(self, classification)
756
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
757
838
  end
758
839
  function Unit.prototype.hasClassification(self, classification)
759
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
760
841
  end
761
842
  function Unit.prototype.isVisibleTo(self, player)
762
843
  return isUnitVisible(self.handle, player.handle)
@@ -765,13 +846,19 @@ function Unit.prototype.isInvisibleTo(self, player)
765
846
  return isUnitInvisible(self.handle, player.handle)
766
847
  end
767
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
768
- local ____temp_2
849
+ local ____temp_4
769
850
  if type(x) == "number" then
770
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
771
852
  else
772
- ____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
773
860
  end
774
- return ____temp_2
861
+ return ____temp_4
775
862
  end
776
863
  function Unit.prototype.isAllyOf(self, unit)
777
864
  return isUnitAlly(
@@ -789,16 +876,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
789
876
  if type(animation) == "number" then
790
877
  setUnitAnimationByIndex(self.handle, animation)
791
878
  elseif rarity then
792
- setUnitAnimationWithRarity(self.handle, animation, rarity)
879
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
793
880
  else
794
881
  setUnitAnimation(self.handle, animation)
795
882
  end
796
883
  end
884
+ function Unit.prototype.resetAnimation(self)
885
+ ResetUnitAnimation(self.handle)
886
+ end
797
887
  function Unit.prototype.queueAnimation(self, animation)
798
- 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
799
900
  end
800
901
  function Unit.prototype.delayHealthChecks(self)
801
- self[103] = (self[103] or 0) + 1
902
+ self[104] = (self[104] or 0) + 1
802
903
  Timer:run(delayHealthChecksCallback, self)
803
904
  end
804
905
  function Unit.prototype.setPosition(self, x, y)
@@ -808,21 +909,21 @@ function Unit.prototype.isSelected(self, player)
808
909
  return IsUnitSelected(self.handle, player.handle)
809
910
  end
810
911
  function Unit.prototype.explode(self)
811
- setUnitExploded(self.handle, true)
912
+ SetUnitExploded(self.handle, true)
812
913
  killUnit(self.handle)
813
914
  end
814
915
  function Unit.prototype.kill(self)
815
916
  killUnit(self.handle)
816
917
  end
817
918
  function Unit.prototype.revive(self, x, y, doEffect)
818
- local ____ReviveHero_5 = ReviveHero
819
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
820
- local ____doEffect_3 = doEffect
821
- if ____doEffect_3 == nil then
822
- ____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
823
924
  end
824
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
825
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
925
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
926
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
826
927
  end
827
928
  function Unit.prototype.healTarget(self, target, amount)
828
929
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -862,20 +963,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
862
963
  return UnitDropItemSlot(self.handle, item.handle, slot)
863
964
  end
864
965
  function Unit.prototype.itemInSlot(self, slot)
865
- return Item:of(unitItemInSlot(self.handle, slot))
966
+ return Item:of(UnitItemInSlot(self.handle, slot))
866
967
  end
867
968
  function Unit.prototype.addAbility(self, abilityId)
868
- if unitAddAbility(self.handle, abilityId) then
869
- local ability = UnitAbility:of(
870
- checkNotNull(getUnitAbility(self.handle, abilityId)),
871
- abilityId,
872
- self
873
- )
969
+ local ability = UnitAbility:of(
970
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
971
+ abilityId,
972
+ self
973
+ )
974
+ if ability ~= nil then
874
975
  local abilities = self.abilities
875
976
  abilities[#abilities + 1] = ability
876
- return ability
877
977
  end
878
- return nil
978
+ return ability
879
979
  end
880
980
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
881
981
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -889,31 +989,24 @@ end
889
989
  function Unit.prototype.hasAbility(self, abilityId)
890
990
  return getUnitAbilityLevel(self.handle, abilityId) > 0
891
991
  end
892
- function Unit.prototype.getAbilityById(self, abilityId)
893
- local handle = self.handle
894
- if unitAddAbility(handle, abilityId) then
895
- assert(unitRemoveAbility(handle, abilityId))
896
- return nil
897
- end
898
- return UnitAbility:of(
899
- getUnitAbility(self.handle, abilityId),
900
- abilityId,
901
- self
902
- )
992
+ function Unit.prototype.getAbility(self, abilityId)
993
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
994
+ return UnitAbility:of(ability, abilityId, self)
903
995
  end
904
- function Unit.prototype.removeAbility(self, abilityId)
905
- if unitRemoveAbility(self.handle, abilityId) then
906
- local abilities = self.abilities
907
- for i = 1, #abilities do
908
- if abilities[i].typeId == abilityId then
909
- abilities[i]:destroy()
910
- tremove(abilities, i)
911
- 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
912
1004
  end
1005
+ ability:destroy()
1006
+ return true
913
1007
  end
914
- return true
915
1008
  end
916
- return false
1009
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
917
1010
  end
918
1011
  function Unit.prototype.hideAbility(self, abilityId, flag)
919
1012
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -927,9 +1020,6 @@ end
927
1020
  function Unit.prototype.endAbilityCooldown(self, abilityId)
928
1021
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
929
1022
  end
930
- function Unit.prototype.interruptAttack(self)
931
- unitInterruptAttack(self.handle)
932
- end
933
1023
  function Unit.prototype.interruptCast(self, abilityId)
934
1024
  local handle = self.handle
935
1025
  unitDisableAbility(handle, abilityId, true, false)
@@ -1000,18 +1090,44 @@ function Unit.prototype.unpauseEx(self)
1000
1090
  end
1001
1091
  function Unit.prototype.incrementStunCounter(self)
1002
1092
  local stunCounter = self[102] or 0
1003
- if not self[101] or stunCounter >= 0 then
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1004
1094
  BlzPauseUnitEx(self.handle, true)
1005
1095
  end
1006
1096
  self[102] = stunCounter + 1
1007
1097
  end
1008
1098
  function Unit.prototype.decrementStunCounter(self)
1009
1099
  local stunCounter = self[102] or 0
1010
- if not self[101] or stunCounter >= 1 then
1100
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1011
1101
  BlzPauseUnitEx(self.handle, false)
1012
1102
  end
1013
1103
  self[102] = stunCounter - 1
1014
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
1015
1131
  function Unit.create(self, owner, id, x, y, facing, skinId)
1016
1132
  local handle = skinId and BlzCreateUnitWithSkin(
1017
1133
  owner.handle,
@@ -1200,7 +1316,15 @@ __TS__SetDescriptor(
1200
1316
  Unit.prototype,
1201
1317
  "isIllusion",
1202
1318
  {get = function(self)
1203
- return isUnitIllusion(self.handle)
1319
+ return IsUnitIllusion(self.handle)
1320
+ end},
1321
+ true
1322
+ )
1323
+ __TS__SetDescriptor(
1324
+ Unit.prototype,
1325
+ "isStunned",
1326
+ {get = function(self)
1327
+ return getUnitCurrentOrder(self.handle) == 851973
1204
1328
  end},
1205
1329
  true
1206
1330
  )
@@ -1279,13 +1403,13 @@ __TS__SetDescriptor(
1279
1403
  )
1280
1404
  __TS__SetDescriptor(
1281
1405
  Unit.prototype,
1282
- "strengthBase",
1406
+ "primaryAttribute",
1283
1407
  {
1284
1408
  get = function(self)
1285
- return getHeroStr(self.handle, false)
1409
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1286
1410
  end,
1287
- set = function(self, strengthBase)
1288
- setHeroStr(self.handle, strengthBase, true)
1411
+ set = function(self, primaryAttribute)
1412
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1289
1413
  end
1290
1414
  },
1291
1415
  true
@@ -1307,19 +1431,6 @@ __TS__SetDescriptor(
1307
1431
  end},
1308
1432
  true
1309
1433
  )
1310
- __TS__SetDescriptor(
1311
- Unit.prototype,
1312
- "agilityBase",
1313
- {
1314
- get = function(self)
1315
- return getHeroAgi(self.handle, false)
1316
- end,
1317
- set = function(self, agilityBase)
1318
- setHeroAgi(self.handle, agilityBase, true)
1319
- end
1320
- },
1321
- true
1322
- )
1323
1434
  __TS__SetDescriptor(
1324
1435
  Unit.prototype,
1325
1436
  "agilityBonus",
@@ -1337,19 +1448,6 @@ __TS__SetDescriptor(
1337
1448
  end},
1338
1449
  true
1339
1450
  )
1340
- __TS__SetDescriptor(
1341
- Unit.prototype,
1342
- "intelligenceBase",
1343
- {
1344
- get = function(self)
1345
- return getHeroInt(self.handle, false)
1346
- end,
1347
- set = function(self, intelligenceBase)
1348
- setHeroInt(self.handle, intelligenceBase, true)
1349
- end
1350
- },
1351
- true
1352
- )
1353
1451
  __TS__SetDescriptor(
1354
1452
  Unit.prototype,
1355
1453
  "intelligenceBonus",
@@ -1398,17 +1496,17 @@ __TS__SetDescriptor(
1398
1496
  "isTeamGlowVisible",
1399
1497
  {
1400
1498
  get = function(self)
1401
- return not self[106]
1499
+ return not self[107]
1402
1500
  end,
1403
1501
  set = function(self, isTeamGlowVisible)
1404
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1405
- local ____temp_6
1502
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1503
+ local ____temp_8
1406
1504
  if not isTeamGlowVisible then
1407
- ____temp_6 = true
1505
+ ____temp_8 = true
1408
1506
  else
1409
- ____temp_6 = nil
1507
+ ____temp_8 = nil
1410
1508
  end
1411
- self[106] = ____temp_6
1509
+ self[107] = ____temp_8
1412
1510
  end
1413
1511
  },
1414
1512
  true
@@ -1417,9 +1515,9 @@ __TS__SetDescriptor(
1417
1515
  Unit.prototype,
1418
1516
  "color",
1419
1517
  {set = function(self, color)
1420
- setUnitColor(self.handle, color.handle)
1421
- if self[106] then
1422
- showUnitTeamGlow(self.handle, false)
1518
+ SetUnitColor(self.handle, color.handle)
1519
+ if self[107] then
1520
+ BlzShowUnitTeamGlow(self.handle, false)
1423
1521
  end
1424
1522
  end},
1425
1523
  true
@@ -1442,14 +1540,14 @@ __TS__SetDescriptor(
1442
1540
  "maxHealth",
1443
1541
  {
1444
1542
  get = function(self)
1445
- 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)
1446
1544
  end,
1447
1545
  set = function(self, maxHealth)
1448
- if maxHealth < 1 and self[103] ~= nil then
1449
- 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)
1450
1548
  maxHealth = 1
1451
1549
  end
1452
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1550
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1453
1551
  end
1454
1552
  },
1455
1553
  true
@@ -1491,10 +1589,10 @@ __TS__SetDescriptor(
1491
1589
  "health",
1492
1590
  {
1493
1591
  get = function(self)
1494
- return GetWidgetLife(self.handle) - (self[105] or 0)
1592
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1495
1593
  end,
1496
1594
  set = function(self, health)
1497
- SetWidgetLife(self.handle, health + (self[105] or 0))
1595
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1498
1596
  end
1499
1597
  },
1500
1598
  true
@@ -1570,25 +1668,12 @@ __TS__SetDescriptor(
1570
1668
  },
1571
1669
  true
1572
1670
  )
1573
- __TS__SetDescriptor(
1574
- Unit.prototype,
1575
- "flyHeight",
1576
- {
1577
- get = function(self)
1578
- return getUnitFlyHeight(self.handle)
1579
- end,
1580
- set = function(self, v)
1581
- SetUnitFlyHeight(self.handle, v, 100000)
1582
- end
1583
- },
1584
- true
1585
- )
1586
1671
  __TS__SetDescriptor(
1587
1672
  Unit.prototype,
1588
1673
  "x",
1589
1674
  {
1590
1675
  get = function(self)
1591
- return getUnitX(self.handle)
1676
+ return self[108] or getUnitX(self.handle)
1592
1677
  end,
1593
1678
  set = function(self, v)
1594
1679
  SetUnitX(self.handle, v)
@@ -1601,7 +1686,7 @@ __TS__SetDescriptor(
1601
1686
  "y",
1602
1687
  {
1603
1688
  get = function(self)
1604
- return getUnitY(self.handle)
1689
+ return self[109] or getUnitY(self.handle)
1605
1690
  end,
1606
1691
  set = function(self, v)
1607
1692
  SetUnitY(self.handle, v)
@@ -1687,10 +1772,10 @@ __TS__SetDescriptor(
1687
1772
  "gold",
1688
1773
  {
1689
1774
  get = function(self)
1690
- return getResourceAmount(self.handle)
1775
+ return GetResourceAmount(self.handle)
1691
1776
  end,
1692
1777
  set = function(self, gold)
1693
- setResourceAmount(self.handle, gold)
1778
+ SetResourceAmount(self.handle, gold)
1694
1779
  end
1695
1780
  },
1696
1781
  true
@@ -1706,14 +1791,18 @@ __TS__SetDescriptor(
1706
1791
  local handle = self.handle
1707
1792
  if isPaused and not IsUnitPaused(handle) then
1708
1793
  self[101] = true
1709
- for _ = self[102] or 0, -1 do
1710
- 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
1711
1798
  end
1712
1799
  PauseUnit(handle, true)
1713
1800
  elseif not isPaused and IsUnitPaused(handle) then
1714
1801
  PauseUnit(handle, false)
1715
- for _ = self[102] or 0, -1 do
1716
- 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
1717
1806
  end
1718
1807
  self[101] = nil
1719
1808
  end
@@ -1771,20 +1860,6 @@ __TS__SetDescriptor(
1771
1860
  },
1772
1861
  true
1773
1862
  )
1774
- __TS__SetDescriptor(
1775
- Unit.prototype,
1776
- "scale",
1777
- {
1778
- get = function(self)
1779
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1780
- end,
1781
- set = function(self, v)
1782
- setUnitScale(self.handle, v, v, v)
1783
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1784
- end
1785
- },
1786
- true
1787
- )
1788
1863
  __TS__SetDescriptor(
1789
1864
  Unit.prototype,
1790
1865
  "timeScale",
@@ -1811,13 +1886,26 @@ __TS__SetDescriptor(
1811
1886
  Unit.prototype,
1812
1887
  "pathingCollisionRange",
1813
1888
  {get = function(self)
1814
- return 16 * (min(
1889
+ return 16 * (math.min(
1815
1890
  getUnitCollisionSize(self.handle) // 16,
1816
1891
  3
1817
1892
  ) + 1)
1818
1893
  end},
1819
1894
  true
1820
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
+ )
1821
1909
  __TS__SetDescriptor(
1822
1910
  Unit.prototype,
1823
1911
  "pathing",
@@ -1908,30 +1996,6 @@ __TS__SetDescriptor(
1908
1996
  end},
1909
1997
  true
1910
1998
  )
1911
- __TS__SetDescriptor(
1912
- Unit.prototype,
1913
- "onUnitInRange",
1914
- {get = function(self)
1915
- local handle = self.handle
1916
- local onUnitInRange = setmetatable(
1917
- {},
1918
- {__index = function(self, value)
1919
- local event = __TS__New(
1920
- TriggerEvent,
1921
- function(trigger)
1922
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1923
- end,
1924
- function() return ____exports.Unit:of(handle) end
1925
- )
1926
- rawset(self, value, event)
1927
- return event
1928
- end}
1929
- )
1930
- rawset(self, "onUnitInRange", onUnitInRange)
1931
- return onUnitInRange
1932
- end},
1933
- true
1934
- )
1935
1999
  __TS__SetDescriptor(
1936
2000
  Unit.prototype,
1937
2001
  "onManaEqual",
@@ -1999,6 +2063,14 @@ __TS__SetDescriptor(
1999
2063
  end},
2000
2064
  true
2001
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
+ )
2002
2074
  __TS__SetDescriptor(
2003
2075
  Unit.prototype,
2004
2076
  "onSelect",
@@ -2059,6 +2131,11 @@ __TS__SetDescriptor(
2059
2131
  end},
2060
2132
  true
2061
2133
  )
2134
+ Unit.levelChangedEvent = __TS__New(
2135
+ ____exports.UnitTriggerEvent,
2136
+ EVENT_PLAYER_HERO_LEVEL,
2137
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2138
+ )
2062
2139
  Unit.deathEvent = __TS__New(
2063
2140
  ____exports.UnitTriggerEvent,
2064
2141
  EVENT_PLAYER_UNIT_DEATH,
@@ -2076,7 +2153,7 @@ Unit.onResurrect = __TS__New(
2076
2153
  ____exports.Unit.deathEvent:addListener(function(unit)
2077
2154
  dead[unit] = true
2078
2155
  end)
2079
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2156
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2080
2157
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2081
2158
  dead[unit] = false
2082
2159
  invoke(event, unit)
@@ -2093,7 +2170,7 @@ Unit.morphEvent = __TS__New(
2093
2170
  invoke(event, unit)
2094
2171
  end
2095
2172
  end
2096
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2173
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2097
2174
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2098
2175
  Timer:run(ifNotLeft, unit)
2099
2176
  end
@@ -2134,25 +2211,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2134
2211
  InitializingEvent,
2135
2212
  function(event)
2136
2213
  local function listener(unit, id)
2137
- local ____GetSpellTargetUnit_result_9
2214
+ local ____GetSpellTargetUnit_result_11
2138
2215
  if GetSpellTargetUnit() then
2139
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2216
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2140
2217
  else
2141
- local ____GetSpellTargetItem_result_8
2218
+ local ____GetSpellTargetItem_result_10
2142
2219
  if GetSpellTargetItem() then
2143
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2220
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2144
2221
  else
2145
- local ____GetSpellTargetDestructable_result_7
2222
+ local ____GetSpellTargetDestructable_result_9
2146
2223
  if GetSpellTargetDestructable() then
2147
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2224
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2148
2225
  else
2149
- ____GetSpellTargetDestructable_result_7 = nil
2226
+ ____GetSpellTargetDestructable_result_9 = nil
2150
2227
  end
2151
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2228
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2152
2229
  end
2153
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2230
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2154
2231
  end
2155
- local target = ____GetSpellTargetUnit_result_9
2232
+ local target = ____GetSpellTargetUnit_result_11
2156
2233
  if target then
2157
2234
  invoke(event, unit, id, target)
2158
2235
  end
@@ -2360,38 +2437,57 @@ Unit.onDamaging = (function()
2360
2437
  if source and source.typeId == dummyUnitId then
2361
2438
  source = nil
2362
2439
  end
2363
- local target = BlzGetEventDamageTarget()
2440
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2441
+ local metadata = damageMetadataByTarget[target]
2442
+ damageMetadataByTarget[target] = nil
2364
2443
  local data = {
2365
2444
  amount = GetEventDamage(),
2366
- attackType = BlzGetEventAttackType(),
2445
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2367
2446
  damageType = BlzGetEventDamageType(),
2368
2447
  weaponType = BlzGetEventWeaponType(),
2369
- isAttack = BlzGetEventIsAttack()
2448
+ metadata = metadata,
2449
+ isAttack = BlzGetEventIsAttack(),
2450
+ originalAmount = GetEventDamage(),
2451
+ originalMetadata = metadata,
2452
+ preventRetaliation = damagingEventPreventRetaliation
2370
2453
  }
2371
2454
  if data.isAttack and source then
2372
- 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
2373
- if weapon == -1 then
2374
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2375
- weapon = 0
2376
- end
2377
- data.weapon = assert(source.weapons[weapon + 1])
2455
+ data.weapon = source:chooseWeapon(target)
2378
2456
  end
2379
2457
  if not data.isAttack or not source or not source._attackHandlers then
2380
2458
  invoke(
2381
2459
  event,
2382
2460
  source,
2383
- ____exports.Unit:of(target),
2461
+ target,
2384
2462
  setmetatable(
2385
2463
  {},
2386
2464
  {
2387
2465
  __index = data,
2388
2466
  __newindex = function(self, key, value)
2389
- damageSetters[key](value)
2467
+ local damageSetter = damageSetters[key]
2468
+ if damageSetter ~= nil then
2469
+ damageSetter(value)
2470
+ end
2390
2471
  data[key] = value
2391
2472
  end
2392
2473
  }
2393
2474
  )
2394
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
2395
2491
  return
2396
2492
  end
2397
2493
  BlzSetEventDamage(0)
@@ -2399,7 +2495,7 @@ Unit.onDamaging = (function()
2399
2495
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2400
2496
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2401
2497
  local sourceOwner = source.owner.handle
2402
- local targetOwner = GetOwningPlayer(target)
2498
+ local targetOwner = target.owner.handle
2403
2499
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2404
2500
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2405
2501
  Timer:run(function()
@@ -2415,23 +2511,19 @@ Unit.onDamaging = (function()
2415
2511
  for ____, ____value in ipairs(source._attackHandlers) do
2416
2512
  local condition = ____value[1]
2417
2513
  local action = ____value[2]
2418
- if condition(
2419
- source,
2420
- ____exports.Unit:of(target),
2421
- data
2422
- ) then
2514
+ if condition(source, target, data) then
2423
2515
  action(
2424
2516
  source,
2425
- ____exports.Unit:of(target),
2517
+ target,
2426
2518
  setmetatable(
2427
2519
  {fire = function()
2428
2520
  UnitDamageTarget(
2429
2521
  source.handle,
2430
- target,
2522
+ target.handle,
2431
2523
  data.amount,
2432
2524
  true,
2433
2525
  true,
2434
- data.attackType,
2526
+ attackTypeToNative(data.attackType),
2435
2527
  data.damageType,
2436
2528
  data.weaponType
2437
2529
  )
@@ -2458,30 +2550,54 @@ Unit.onDamage = __TS__New(
2458
2550
  if source and source.typeId == dummyUnitId then
2459
2551
  source = nil
2460
2552
  end
2553
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2554
+ local damagingEvent = damagingEventByTarget[target]
2555
+ damagingEventByTarget[target] = nil
2461
2556
  local data = {
2462
2557
  amount = GetEventDamage(),
2463
- attackType = BlzGetEventAttackType(),
2558
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2464
2559
  damageType = BlzGetEventDamageType(),
2465
2560
  weaponType = BlzGetEventWeaponType(),
2561
+ metadata = damagingEvent and damagingEvent.metadata,
2466
2562
  isAttack = BlzGetEventIsAttack(),
2467
- originalAmount = GetEventDamage(),
2563
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2564
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2468
2565
  preventDeath = damageEventPreventDeath
2469
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
2470
2584
  local evData = setmetatable(
2471
2585
  {},
2472
2586
  {
2473
2587
  __index = data,
2474
2588
  __newindex = function(self, key, value)
2475
- damageSetters[key](value)
2589
+ local damageSetter = damageSetters[key]
2590
+ if damageSetter ~= nil then
2591
+ damageSetter(value)
2592
+ end
2476
2593
  data[key] = value
2477
2594
  end
2478
2595
  }
2479
2596
  )
2480
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2481
2597
  invoke(event, source, target, evData)
2482
2598
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2483
2599
  local bonusHealth = math.ceil(evData.amount)
2484
- target[105] = (target[105] or 0) + bonusHealth
2600
+ target[106] = (target[106] or 0) + bonusHealth
2485
2601
  BlzSetUnitMaxHP(
2486
2602
  target.handle,
2487
2603
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2495,7 +2611,7 @@ Unit.onDamage = __TS__New(
2495
2611
  evData[0],
2496
2612
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2497
2613
  )
2498
- target[105] = (target[105] or 0) - bonusHealth
2614
+ target[106] = (target[106] or 0) - bonusHealth
2499
2615
  SetWidgetLife(
2500
2616
  target.handle,
2501
2617
  GetWidgetLife(target.handle) - bonusHealth
@@ -2521,7 +2637,7 @@ Unit.itemDroppedEvent = __TS__New(
2521
2637
  function()
2522
2638
  local unit = getTriggerUnit()
2523
2639
  local item = getManipulatedItem()
2524
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2640
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2525
2641
  return ____exports.Unit:of(unit), Item:of(item)
2526
2642
  end
2527
2643
  return IgnoreEvent
@@ -2531,10 +2647,14 @@ Unit.itemPickedUpEvent = __TS__New(
2531
2647
  ____exports.UnitTriggerEvent,
2532
2648
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2533
2649
  function()
2534
- local unit = getTriggerUnit()
2535
- local item = getManipulatedItem()
2536
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2537
- 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
2538
2658
  end
2539
2659
  return IgnoreEvent
2540
2660
  end
@@ -2545,59 +2665,24 @@ Unit.itemUsedEvent = __TS__New(
2545
2665
  function()
2546
2666
  local unit = getTriggerUnit()
2547
2667
  local item = getManipulatedItem()
2548
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2668
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2549
2669
  return ____exports.Unit:of(unit), Item:of(item)
2550
2670
  end
2551
2671
  return IgnoreEvent
2552
2672
  end
2553
2673
  )
2554
- Unit.itemStackedEvent = __TS__New(
2555
- ____exports.UnitTriggerEvent,
2556
- EVENT_PLAYER_UNIT_STACK_ITEM,
2557
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2558
- )
2559
2674
  __TS__ObjectDefineProperty(
2560
2675
  Unit,
2561
- "itemUseOrderEvent",
2676
+ "itemChargesChangedEvent",
2562
2677
  {get = function(self)
2563
2678
  local event = __TS__New(Event)
2564
- for order = orderId("useslot0"), orderId("useslot5") do
2565
- local slot = order - orderId("useslot0")
2566
- local function listener(unit)
2567
- local item = unit.items[slot + 1]
2568
- if item ~= nil then
2569
- invoke(event, unit, item)
2570
- end
2679
+ Item.chargesChangedEvent:addListener(function(item)
2680
+ local unit = item.owner
2681
+ if unit ~= nil then
2682
+ invoke(event, unit, item)
2571
2683
  end
2572
- self.onImmediateOrder[order]:addListener(listener)
2573
- self.onTargetOrder[order]:addListener(listener)
2574
- self.onPointOrder[order]:addListener(listener)
2575
- end
2576
- rawset(self, "itemUseOrderEvent", event)
2577
- return event
2578
- end}
2579
- )
2580
- __TS__ObjectDefineProperty(
2581
- Unit,
2582
- "itemMoveOrderEvent",
2583
- {get = function(self)
2584
- local event = __TS__New(Event)
2585
- for order = orderId("moveslot0"), orderId("moveslot5") do
2586
- local slotTo = order - orderId("moveslot0")
2587
- self.onTargetOrder[order]:addListener(function(unit, item)
2588
- local slotFrom = unit.items:findSlot(item)
2589
- if slotFrom ~= nil then
2590
- invoke(
2591
- event,
2592
- unit,
2593
- item,
2594
- slotFrom,
2595
- slotTo
2596
- )
2597
- end
2598
- end)
2599
- end
2600
- rawset(self, "itemMoveOrderEvent", event)
2684
+ end)
2685
+ rawset(self, "itemChargesChangedEvent", event)
2601
2686
  return event
2602
2687
  end}
2603
2688
  )
@@ -2626,6 +2711,10 @@ __TS__ObjectDefineProperty(
2626
2711
  rawset(self, "destroyEvent", destroyEvent)
2627
2712
  return destroyEvent
2628
2713
  end}
2714
+ )
2715
+ Unit.synchronize = synchronizer(
2716
+ function(unit) return unit.syncId end,
2717
+ function(syncId) return unitBySyncId[syncId] end
2629
2718
  );
2630
2719
  (function(self)
2631
2720
  local leaveAbilityIds = postcompile(function()
@@ -2643,11 +2732,7 @@ __TS__ObjectDefineProperty(
2643
2732
  function(____, id) return fourCC(id) end
2644
2733
  )
2645
2734
  end)
2646
- for ____, leaveOrderId in ipairs({
2647
- orderId("undefend"),
2648
- orderId("magicundefense"),
2649
- orderId("unimmolation")
2650
- }) do
2735
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2651
2736
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2652
2737
  local handle = unit.handle
2653
2738
  for i = 1, #leaveAbilityIds do
@@ -2655,7 +2740,8 @@ __TS__ObjectDefineProperty(
2655
2740
  return
2656
2741
  end
2657
2742
  end
2658
- unit:destroy()
2743
+ unit:saveData()
2744
+ Timer:run(unit, "destroy")
2659
2745
  end)
2660
2746
  end
2661
2747
  end)(Unit)