warscript 0.0.1-dev.9af2d1a → 0.0.1-dev.9bcb501

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