warscript 0.0.1-dev.29630c5 → 0.0.1-dev.29e90d8

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 (442) 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 +21 -2
  9. package/core/types/frame.lua +165 -87
  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 +6 -11
  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 +115 -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/apply-buff.d.ts +5 -0
  37. package/engine/behaviour/ability/apply-buff.lua +36 -4
  38. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  39. package/engine/behaviour/ability/damage.d.ts +15 -4
  40. package/engine/behaviour/ability/damage.lua +41 -49
  41. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  42. package/engine/behaviour/ability/emulate-impact.lua +96 -7
  43. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  44. package/engine/behaviour/ability/instant-impact.lua +17 -2
  45. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  46. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  47. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  48. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  49. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  50. package/engine/behaviour/ability/restore-mana.lua +6 -6
  51. package/engine/behaviour/ability.d.ts +23 -6
  52. package/engine/behaviour/ability.lua +151 -32
  53. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  54. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  55. package/engine/behaviour/unit.d.ts +41 -2
  56. package/engine/behaviour/unit.lua +270 -6
  57. package/engine/buff.d.ts +139 -59
  58. package/engine/buff.lua +678 -308
  59. package/engine/index.d.ts +2 -1
  60. package/engine/internal/ability.d.ts +14 -1
  61. package/engine/internal/ability.lua +113 -44
  62. package/engine/internal/item/ability.lua +63 -11
  63. package/engine/internal/item/fields.d.ts +12 -0
  64. package/engine/internal/item/fields.lua +33 -0
  65. package/engine/internal/item/owner-cache.d.ts +5 -0
  66. package/engine/internal/item/owner-cache.lua +4 -0
  67. package/engine/internal/item+owner.d.ts +2 -0
  68. package/engine/internal/item+owner.lua +37 -8
  69. package/engine/internal/item.d.ts +34 -18
  70. package/engine/internal/item.lua +308 -102
  71. package/engine/internal/mechanics/ability-duration.lua +1 -1
  72. package/engine/internal/mechanics/cast-ability.lua +6 -3
  73. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  74. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  75. package/engine/internal/misc/frame-coordinates.lua +21 -0
  76. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  77. package/engine/internal/misc/get-terrain-z.lua +11 -0
  78. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  79. package/engine/internal/misc/player-local-handle.lua +5 -0
  80. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  81. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  82. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  83. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  84. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  85. package/engine/internal/object-data/health-bonus.lua +16 -0
  86. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  87. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  88. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  89. package/engine/internal/object-data/mana-bonus.lua +16 -0
  90. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  91. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  92. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  93. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  94. package/engine/internal/unit/ability.d.ts +35 -0
  95. package/engine/internal/unit/ability.lua +114 -9
  96. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  97. package/engine/internal/unit/add-item-to-slot.lua +57 -14
  98. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  99. package/engine/internal/unit/allowed-targets.lua +9 -1
  100. package/engine/internal/unit/appearance.d.ts +15 -0
  101. package/engine/internal/unit/appearance.lua +85 -0
  102. package/engine/internal/unit/attributes.d.ts +17 -0
  103. package/engine/internal/unit/attributes.lua +46 -0
  104. package/engine/internal/unit/bonus.d.ts +17 -0
  105. package/engine/internal/unit/bonus.lua +113 -8
  106. package/engine/internal/unit/buff.d.ts +2 -2
  107. package/engine/internal/unit/buff.lua +34 -19
  108. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  109. package/engine/internal/unit/equipment-inventory.lua +233 -0
  110. package/engine/internal/unit/expiration-timer.lua +1 -1
  111. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  112. package/engine/internal/unit/extended-inventory.lua +99 -0
  113. package/engine/internal/unit/fly-height.d.ts +7 -0
  114. package/engine/internal/unit/fly-height.lua +20 -0
  115. package/engine/internal/unit/ignore-events-items.lua +10 -1
  116. package/engine/internal/unit/interrupts.d.ts +12 -0
  117. package/engine/internal/unit/interrupts.lua +28 -0
  118. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  119. package/engine/internal/unit/inventory.lua +87 -0
  120. package/engine/internal/unit/item-container.d.ts +25 -0
  121. package/engine/internal/unit/item-container.lua +11 -0
  122. package/engine/internal/unit/item-order-events.d.ts +17 -0
  123. package/engine/internal/unit/item-order-events.lua +67 -0
  124. package/engine/internal/unit/item-slot.d.ts +27 -0
  125. package/engine/internal/unit/item-slot.lua +92 -0
  126. package/engine/internal/unit/main-selected.lua +12 -27
  127. package/engine/internal/unit/order.d.ts +20 -0
  128. package/engine/internal/unit/order.lua +136 -0
  129. package/engine/internal/unit/range-event.d.ts +12 -0
  130. package/engine/internal/unit/range-event.lua +90 -0
  131. package/engine/internal/unit/scale.d.ts +7 -0
  132. package/engine/internal/unit/scale.lua +20 -0
  133. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  134. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  135. package/engine/internal/unit+ability.d.ts +2 -1
  136. package/engine/internal/unit+ability.lua +83 -3
  137. package/engine/internal/unit+bonus.lua +3 -3
  138. package/engine/internal/unit+damage.d.ts +12 -38
  139. package/engine/internal/unit+damage.lua +48 -45
  140. package/engine/internal/unit+rally.lua +9 -31
  141. package/engine/internal/unit+spellSteal.lua +1 -2
  142. package/engine/internal/unit-missile-data.lua +96 -68
  143. package/engine/internal/unit-missile-launch.lua +69 -27
  144. package/engine/internal/unit.d.ts +51 -35
  145. package/engine/internal/unit.lua +434 -326
  146. package/engine/lightning.d.ts +4 -3
  147. package/engine/lightning.lua +25 -16
  148. package/engine/local-client.d.ts +28 -0
  149. package/engine/local-client.lua +324 -54
  150. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  151. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  152. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  153. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  154. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  155. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  156. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  157. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  158. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  159. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  160. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  161. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  162. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  163. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  164. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  165. package/engine/object-data/auxiliary/item-class.lua +2 -0
  166. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  167. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  168. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  169. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  170. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  171. package/engine/object-data/auxiliary/order-type.lua +2 -0
  172. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  173. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  174. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  175. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  176. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  177. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  178. package/engine/object-data/auxiliary/weapon-sound-type.d.ts +20 -14
  179. package/engine/object-data/auxiliary/weapon-sound-type.lua +58 -0
  180. package/engine/object-data/auxiliary/weapon-type.d.ts +25 -0
  181. package/engine/object-data/auxiliary/weapon-type.lua +2 -0
  182. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  183. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  184. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  185. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  186. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  187. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  188. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  189. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  190. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  191. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  192. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  193. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  194. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  195. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  196. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  197. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  198. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  199. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  200. package/engine/object-data/entry/ability-type/blank-configurable.lua +14 -3
  201. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  202. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  203. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  204. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  205. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  206. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  207. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  208. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  209. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  210. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  211. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  212. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  213. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  214. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  215. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  216. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  217. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  218. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  219. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  220. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  221. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  222. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  223. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  224. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  225. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  226. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  227. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  228. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  229. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  230. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  231. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  232. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  233. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  234. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  235. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  236. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  237. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  238. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  239. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  240. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  241. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  242. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  243. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  244. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  245. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  246. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  247. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  248. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  249. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  250. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  251. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  252. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  253. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  254. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  255. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  256. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  257. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  258. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  259. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  260. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  261. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  262. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  263. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  264. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  265. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  266. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  267. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  268. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  269. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  270. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  271. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  272. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  273. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  274. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  275. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  276. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  277. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  278. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  279. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  280. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  281. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  282. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  283. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  284. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  285. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  286. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  287. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  288. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  289. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  290. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  291. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  292. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  293. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  294. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  295. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  296. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  297. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  298. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  299. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  300. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  301. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  302. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  303. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  304. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  305. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  306. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  307. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  308. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  309. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  310. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  311. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  312. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  313. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  314. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  315. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  316. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  317. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  318. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  319. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  320. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  321. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  322. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  323. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  324. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  325. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  326. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  327. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  328. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  329. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  330. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  331. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  332. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  333. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  334. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  335. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  336. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  337. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  338. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  339. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  340. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  341. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  342. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  343. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  344. package/engine/object-data/entry/ability-type/web.lua +52 -0
  345. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  346. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  347. package/engine/object-data/entry/ability-type.d.ts +50 -21
  348. package/engine/object-data/entry/ability-type.lua +384 -35
  349. package/engine/object-data/entry/buff-type/applicable.lua +131 -139
  350. package/engine/object-data/entry/buff-type.d.ts +10 -12
  351. package/engine/object-data/entry/buff-type.lua +39 -29
  352. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  353. package/engine/object-data/entry/destructible-type.lua +181 -0
  354. package/engine/object-data/entry/item-type.d.ts +18 -3
  355. package/engine/object-data/entry/item-type.lua +88 -4
  356. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  357. package/engine/object-data/entry/lightning-type.lua +1 -1
  358. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  359. package/engine/object-data/entry/sound-preset.lua +140 -0
  360. package/engine/object-data/entry/unit-type.d.ts +81 -6
  361. package/engine/object-data/entry/unit-type.lua +619 -99
  362. package/engine/object-data/entry/upgrade.d.ts +2 -2
  363. package/engine/object-data/entry/upgrade.lua +4 -4
  364. package/engine/object-data/entry.d.ts +21 -14
  365. package/engine/object-data/entry.lua +68 -32
  366. package/engine/object-field/ability.d.ts +4 -4
  367. package/engine/object-field/ability.lua +9 -8
  368. package/engine/object-field/item.d.ts +22 -0
  369. package/engine/object-field/item.lua +118 -0
  370. package/engine/object-field/unit.d.ts +72 -3
  371. package/engine/object-field/unit.lua +268 -7
  372. package/engine/object-field.d.ts +26 -7
  373. package/engine/object-field.lua +360 -119
  374. package/engine/random.d.ts +10 -0
  375. package/engine/random.lua +21 -0
  376. package/engine/standard/entries/ability-type.d.ts +3102 -7
  377. package/engine/standard/entries/ability-type.lua +0 -6
  378. package/engine/standard/entries/buff-type.d.ts +48 -0
  379. package/engine/standard/entries/buff-type.lua +46 -0
  380. package/engine/standard/entries/item-type.d.ts +1299 -0
  381. package/engine/standard/entries/item-type.lua +2 -0
  382. package/engine/standard/entries/lightning-type.d.ts +42 -15
  383. package/engine/standard/entries/lightning-type.lua +0 -14
  384. package/engine/standard/entries/sound-preset.d.ts +10 -0
  385. package/engine/standard/entries/sound-preset.lua +10 -0
  386. package/engine/standard/entries/unit-type.d.ts +5 -0
  387. package/engine/standard/entries/unit-type.lua +5 -0
  388. package/engine/standard/fields/ability.d.ts +4 -4
  389. package/engine/standard/fields/ability.lua +4 -4
  390. package/engine/standard/fields/item.d.ts +4 -0
  391. package/engine/standard/fields/item.lua +6 -0
  392. package/engine/standard/fields/unit.d.ts +12 -0
  393. package/engine/standard/fields/unit.lua +20 -0
  394. package/engine/synchronization.d.ts +11 -0
  395. package/engine/synchronization.lua +77 -0
  396. package/engine/text-tag.d.ts +48 -2
  397. package/engine/text-tag.lua +287 -10
  398. package/engine/unit.d.ts +12 -1
  399. package/engine/unit.lua +12 -1
  400. package/event.d.ts +1 -1
  401. package/lualib_bundle.lua +1 -1
  402. package/math.d.ts +2 -0
  403. package/math.lua +14 -0
  404. package/net/socket.lua +1 -1
  405. package/network.lua +25 -1
  406. package/objutil/buff.lua +12 -11
  407. package/objutil/object.lua +1 -1
  408. package/objutil/unit.lua +8 -0
  409. package/operation.d.ts +8 -1
  410. package/operation.lua +38 -18
  411. package/package.json +3 -23
  412. package/patch-lua.lua +15 -0
  413. package/patch-lualib.lua +1 -1
  414. package/patch-natives.lua +3 -0
  415. package/utility/arrays.d.ts +9 -1
  416. package/utility/arrays.lua +28 -0
  417. package/utility/callback-array.d.ts +17 -0
  418. package/utility/callback-array.lua +61 -0
  419. package/utility/functions.d.ts +8 -0
  420. package/utility/functions.lua +13 -0
  421. package/utility/linked-map.d.ts +35 -0
  422. package/utility/linked-map.lua +107 -0
  423. package/utility/linked-set.d.ts +5 -1
  424. package/utility/linked-set.lua +49 -1
  425. package/utility/lua-maps.d.ts +15 -2
  426. package/utility/lua-maps.lua +53 -2
  427. package/utility/lua-sets.d.ts +2 -0
  428. package/utility/lua-sets.lua +7 -0
  429. package/utility/random.d.ts +102 -0
  430. package/utility/random.lua +273 -0
  431. package/utility/records.lua +20 -1
  432. package/utility/reflection.lua +11 -7
  433. package/utility/types.d.ts +3 -0
  434. package/utility/unordered-map.d.ts +27 -0
  435. package/utility/unordered-map.lua +99 -0
  436. package/core/types/order.d.ts +0 -25
  437. package/core/types/order.lua +0 -55
  438. package/engine/internal/unit/item.lua +0 -78
  439. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  440. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  441. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  442. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -7,10 +7,10 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
11
  local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
12
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
13
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
13
- local __TS__InstanceOf = ____lualib.__TS__InstanceOf
14
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
15
15
  local Set = ____lualib.Set
16
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -47,40 +47,47 @@ 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 ____weapon_2Dsound_2Dtype = require("engine.object-data.auxiliary.weapon-sound-type")
55
+ local nativeToWeaponSoundType = ____weapon_2Dsound_2Dtype.nativeToWeaponSoundType
56
+ local weaponSoundTypeToNative = ____weapon_2Dsound_2Dtype.weaponSoundTypeToNative
57
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
58
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
59
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
60
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
61
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
62
+ local ____attributes = require("attributes")
63
+ local isAttribute = ____attributes.isAttribute
64
+ local ____ability = require("engine.internal.item.ability")
65
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
66
+ local ____synchronization = require("engine.synchronization")
67
+ local synchronizer = ____synchronization.synchronizer
68
+ local ____linked_2Dmap = require("utility.linked-map")
69
+ local LinkedMap = ____linked_2Dmap.LinkedMap
56
70
  local match = string.match
57
71
  local ____tostring = _G.tostring
58
72
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
73
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local queueUnitAnimation = QueueUnitAnimation
62
74
  local getUnitIntegerField = BlzGetUnitIntegerField
63
75
  local getUnitRealField = BlzGetUnitRealField
64
76
  local getHeroStr = GetHeroStr
65
77
  local getHeroAgi = GetHeroAgi
66
78
  local getHeroInt = GetHeroInt
67
- local setHeroStr = SetHeroStr
68
- local setHeroAgi = SetHeroAgi
69
- local setHeroInt = SetHeroInt
70
79
  local getUnitBooleanField = BlzGetUnitBooleanField
71
80
  local getUnitStringField = BlzGetUnitStringField
72
81
  local setUnitIntegerField = BlzSetUnitIntegerField
73
82
  local setUnitRealField = BlzSetUnitRealField
74
83
  local setUnitBooleanField = BlzSetUnitBooleanField
75
84
  local setUnitStringField = BlzSetUnitStringField
76
- local setUnitScale = SetUnitScale
77
85
  local setUnitPosition = SetUnitPosition
78
86
  local setUnitTimeScale = SetUnitTimeScale
79
87
  local getHandleId = GetHandleId
80
88
  local getUnitCurrentOrder = GetUnitCurrentOrder
81
89
  local createUnit = CreateUnit
82
90
  local killUnit = KillUnit
83
- local setUnitExploded = SetUnitExploded
84
91
  local removeUnit = RemoveUnit
85
92
  local getUnitTypeId = GetUnitTypeId
86
93
  local isHeroUnitId = IsHeroUnitId
@@ -96,15 +103,12 @@ local getSpellTargetItem = GetSpellTargetItem
96
103
  local getSpellTargetDestructable = GetSpellTargetDestructable
97
104
  local isUnitInRangeXY = IsUnitInRangeXY
98
105
  local isUnitInRange = IsUnitInRange
99
- local setResourceAmount = SetResourceAmount
100
- local getResourceAmount = GetResourceAmount
101
106
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
102
107
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
103
108
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
104
109
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
105
110
  local getUnitAbilityLevel = GetUnitAbilityLevel
106
111
  local unitDisableAbility = BlzUnitDisableAbility
107
- local unitInterruptAttack = BlzUnitInterruptAttack
108
112
  local isUnitInvisible = IsUnitInvisible
109
113
  local isUnitVisible = IsUnitVisible
110
114
  local getUnitX = GetUnitX
@@ -121,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
121
125
  local getIssuedOrderId = GetIssuedOrderId
122
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
123
127
  local unitAlive = UnitAlive
124
- local unitAddType = UnitAddType
125
- local unitRemoveType = UnitRemoveType
126
- local isUnitIllusion = IsUnitIllusion
127
- local isUnitType = IsUnitType
128
128
  local isUnitAlly = IsUnitAlly
129
129
  local isUnitEnemy = IsUnitEnemy
130
130
  local getOwningPlayer = GetOwningPlayer
131
- local setUnitColor = SetUnitColor
132
- local showUnitTeamGlow = BlzShowUnitTeamGlow
133
131
  ____exports.UnitClassification = {}
134
132
  local UnitClassification = ____exports.UnitClassification
135
133
  do
@@ -139,6 +137,7 @@ do
139
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
140
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
141
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
142
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
143
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
144
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -346,6 +345,9 @@ local function dispatchAbility(event)
346
345
  }
347
346
  )
348
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
349
351
  local function damageEventPreventDeath(self, callback, ...)
350
352
  if self[0] ~= nil then
351
353
  return
@@ -357,7 +359,16 @@ local function damageEventPreventDeath(self, callback, ...)
357
359
  rawset(self, 1 + i, (select(i, ...)))
358
360
  end
359
361
  end
360
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponSoundType = function(weaponSoundType)
369
+ return BlzSetEventWeaponType(weaponSoundTypeToNative(weaponSoundType))
370
+ end
371
+ }
361
372
  local jlimitopByOperator = {
362
373
  [0] = LESS_THAN_OR_EQUAL,
363
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -375,15 +386,27 @@ local modifiers = {
375
386
  end,
376
387
  armor = function(unit, value)
377
388
  if UnitAddAbility(unit, armorBonusAbilityId) then
378
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
389
+ assert(
390
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
391
+ "armor bonus ability must be made permanent",
392
+ unit
393
+ )
379
394
  end
380
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
381
- assert(BlzSetAbilityRealLevelField(
382
- ability,
383
- armorBonusField,
384
- 0,
385
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
386
- ))
395
+ local ability = assert(
396
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
397
+ "armor bonus ability must be existing",
398
+ unit
399
+ )
400
+ assert(
401
+ BlzSetAbilityRealLevelField(
402
+ ability,
403
+ armorBonusField,
404
+ 0,
405
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
406
+ ),
407
+ "armor bonus ability field must be set",
408
+ unit
409
+ )
387
410
  end
388
411
  }
389
412
  local getters = {
@@ -401,6 +424,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
401
424
  self.unit = unit
402
425
  self.index = index
403
426
  end
427
+ __TS__SetDescriptor(
428
+ UnitWeapon.prototype,
429
+ "isEnabled",
430
+ {
431
+ get = function(self)
432
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
433
+ end,
434
+ set = function(self, isEnabled)
435
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
436
+ end
437
+ },
438
+ true
439
+ )
404
440
  __TS__SetDescriptor(
405
441
  UnitWeapon.prototype,
406
442
  "cooldown",
@@ -435,6 +471,45 @@ __TS__SetDescriptor(
435
471
  },
436
472
  true
437
473
  )
474
+ __TS__SetDescriptor(
475
+ UnitWeapon.prototype,
476
+ "allowedTargetCombatClassifications",
477
+ {
478
+ get = function(self)
479
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
480
+ end,
481
+ set = function(self, allowedTargetCombatClassifications)
482
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
483
+ end
484
+ },
485
+ true
486
+ )
487
+ __TS__SetDescriptor(
488
+ UnitWeapon.prototype,
489
+ "type",
490
+ {
491
+ get = function(self)
492
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE, self.index)
493
+ end,
494
+ set = function(self, ____type)
495
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE, self.index, ____type)
496
+ end
497
+ },
498
+ true
499
+ )
500
+ __TS__SetDescriptor(
501
+ UnitWeapon.prototype,
502
+ "soundType",
503
+ {
504
+ get = function(self)
505
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_SOUND, self.index)
506
+ end,
507
+ set = function(self, soundType)
508
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_SOUND, self.index, soundType)
509
+ end
510
+ },
511
+ true
512
+ )
438
513
  __TS__SetDescriptor(
439
514
  UnitWeapon.prototype,
440
515
  "damageBase",
@@ -546,8 +621,6 @@ __TS__SetDescriptor(
546
621
  },
547
622
  true
548
623
  )
549
- local unitInventorySize = UnitInventorySize
550
- local unitItemInSlot = UnitItemInSlot
551
624
  local getItemAbility = BlzGetItemAbility
552
625
  local getUnitAbility = BlzGetUnitAbility
553
626
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -565,8 +638,8 @@ local function retrieveAbility(unit, ability, abilityId)
565
638
  ____exports.Unit:of(unit)
566
639
  )
567
640
  end
568
- for i = 0, unitInventorySize(unit) - 1 do
569
- local item = unitItemInSlot(unit, i)
641
+ for i = 0, UnitInventorySize(unit) - 1 do
642
+ local item = UnitItemInSlot(unit, i)
570
643
  if getItemAbility(item, abilityId) == ability then
571
644
  return ItemAbility:of(
572
645
  ability,
@@ -611,26 +684,30 @@ local fieldSetters = {
611
684
  }
612
685
  local dummies = {}
613
686
  for ____, player in ipairs(Player.all) do
614
- local dummy = assert(createUnit(
615
- player.handle,
616
- dummyUnitId,
617
- 0,
618
- 0,
619
- 270
620
- ))
687
+ local dummy = assert(
688
+ createUnit(
689
+ player.handle,
690
+ dummyUnitId,
691
+ 0,
692
+ 0,
693
+ 270
694
+ ),
695
+ "dummy must be created",
696
+ player
697
+ )
621
698
  ShowUnit(dummy, false)
622
699
  dummies[player] = dummy
623
700
  end
624
701
  local function delayHealthChecksCallback(unit)
625
- local counter = (unit[103] or 0) - 1
702
+ local counter = (unit[104] or 0) - 1
626
703
  if counter ~= 0 then
627
- unit[103] = counter
704
+ unit[104] = counter
628
705
  return
629
706
  end
630
- unit[103] = nil
631
- local healthBonus = unit[104]
707
+ unit[104] = nil
708
+ local healthBonus = unit[105]
632
709
  if healthBonus ~= nil then
633
- unit[104] = nil
710
+ unit[105] = nil
634
711
  local handle = unit.handle
635
712
  BlzSetUnitMaxHP(
636
713
  handle,
@@ -639,50 +716,78 @@ local function delayHealthChecksCallback(unit)
639
716
  end
640
717
  end
641
718
  local nextSyncId = 1
642
- local unitBySyncId = setmetatable({}, {__mode = "k"})
719
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
720
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
721
+ local function addAbility(unit, abilityTypeId)
722
+ local ____unitAddAbility_result_0
723
+ if unitAddAbility(unit, abilityTypeId) then
724
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
725
+ else
726
+ ____unitAddAbility_result_0 = nil
727
+ end
728
+ return ____unitAddAbility_result_0
729
+ end
643
730
  ____exports.Unit = __TS__Class()
644
731
  local Unit = ____exports.Unit
645
732
  Unit.name = "Unit"
646
733
  __TS__ClassExtends(Unit, Handle)
647
734
  function Unit.prototype.____constructor(self, handle)
648
735
  Handle.prototype.____constructor(self, handle)
649
- local ____nextSyncId_0 = nextSyncId
650
- nextSyncId = ____nextSyncId_0 + 1
651
- self.syncId = ____nextSyncId_0
736
+ local ____nextSyncId_1 = nextSyncId
737
+ nextSyncId = ____nextSyncId_1 + 1
738
+ self.syncId = ____nextSyncId_1
652
739
  self._owner = Player:of(getOwningPlayer(handle))
653
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
654
- assert(unitAddAbility(handle, morphDetectAbilityId))
740
+ assert(
741
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
742
+ "leave detection ability must be added",
743
+ self
744
+ )
745
+ assert(
746
+ unitAddAbility(handle, morphDetectAbilityId),
747
+ "morph detection ability must be added",
748
+ self
749
+ )
655
750
  if unitAddAbility(
656
751
  handle,
657
752
  fourCC("Amrf")
658
753
  ) then
659
- assert(unitRemoveAbility(
660
- handle,
661
- fourCC("Amrf")
662
- ))
754
+ assert(
755
+ unitRemoveAbility(
756
+ handle,
757
+ fourCC("Amrf")
758
+ ),
759
+ "fly ability must be removed after addition",
760
+ self
761
+ )
663
762
  end
664
763
  unitBySyncId[self.syncId] = self
665
764
  local ____ = self.abilities
666
765
  end
667
- function Unit.prototype.getEvent(self, event, collector)
668
- self.events = self.events or ({})
669
- local eventId = GetHandleId(event)
670
- if not self.events[eventId] then
671
- self.events[eventId] = __TS__New(
766
+ function Unit.prototype.getEvent(self, jevent, collector)
767
+ self.events = self.events or __TS__New(LinkedMap)
768
+ local eventId = GetHandleId(jevent)
769
+ local event = self.events:get(eventId)
770
+ if event == nil then
771
+ event = __TS__New(
672
772
  TriggerEvent,
673
773
  function(trigger)
674
- TriggerRegisterUnitEvent(trigger, self.handle, event)
774
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
675
775
  end,
676
776
  collector or (function() return {} end)
677
777
  )
778
+ self.events:put(eventId, event)
678
779
  end
679
- return self.events[eventId]
780
+ return event
781
+ end
782
+ function Unit.prototype.saveData(self)
783
+ local handle = self.handle
784
+ self[108] = self[108] or getUnitX(handle)
785
+ self[109] = self[109] or getUnitY(handle)
786
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
680
787
  end
681
788
  function Unit.prototype.onDestroy(self)
682
789
  local handle = self.handle
683
- if not self._owner then
684
- self._owner = Player:of(getOwningPlayer(handle))
685
- end
790
+ self:saveData()
686
791
  local abilities = self.abilities
687
792
  for ____, ability in ipairs(abilities) do
688
793
  ability:destroy()
@@ -700,7 +805,9 @@ function Unit.prototype.onDestroy(self)
700
805
  end
701
806
  local eventsToDestroy = self._eventsToDestroy
702
807
  if eventsToDestroy ~= nil then
703
- forEach(eventsToDestroy, "destroy")
808
+ for ____, event in ipairs(eventsToDestroy) do
809
+ event:destroy()
810
+ end
704
811
  end
705
812
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
706
813
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -718,7 +825,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
718
825
  self._attackHandlers = handlers
719
826
  if #handlers == 1 then
720
827
  local handle = self.handle
721
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
828
+ assert(
829
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
830
+ "attack handler ability must be added",
831
+ self
832
+ )
722
833
  end
723
834
  return handler
724
835
  end
@@ -747,17 +858,17 @@ function Unit.prototype.addModifier(self, property, modifier)
747
858
  end}
748
859
  end
749
860
  function Unit.prototype.hasCombatClassification(self, combatClassification)
750
- local ____combatClassification_1 = combatClassification
751
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
861
+ local ____combatClassification_2 = combatClassification
862
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
752
863
  end
753
864
  function Unit.prototype.addClassification(self, classification)
754
- return unitAddType(self.handle, classification)
865
+ return UnitAddType(self.handle, classification)
755
866
  end
756
867
  function Unit.prototype.removeClassification(self, classification)
757
- return unitRemoveType(self.handle, classification)
868
+ return UnitRemoveType(self.handle, classification)
758
869
  end
759
870
  function Unit.prototype.hasClassification(self, classification)
760
- return isUnitType(self.handle, classification)
871
+ return IsUnitType(self.handle, classification)
761
872
  end
762
873
  function Unit.prototype.isVisibleTo(self, player)
763
874
  return isUnitVisible(self.handle, player.handle)
@@ -766,13 +877,19 @@ function Unit.prototype.isInvisibleTo(self, player)
766
877
  return isUnitInvisible(self.handle, player.handle)
767
878
  end
768
879
  function Unit.prototype.isInRangeOf(self, x, y, range)
769
- local ____temp_2
880
+ local ____temp_4
770
881
  if type(x) == "number" then
771
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
882
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
772
883
  else
773
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
884
+ local ____temp_3
885
+ if __TS__InstanceOf(x, ____exports.Unit) then
886
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
887
+ else
888
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
889
+ end
890
+ ____temp_4 = ____temp_3
774
891
  end
775
- return ____temp_2
892
+ return ____temp_4
776
893
  end
777
894
  function Unit.prototype.isAllyOf(self, unit)
778
895
  return isUnitAlly(
@@ -790,16 +907,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
790
907
  if type(animation) == "number" then
791
908
  setUnitAnimationByIndex(self.handle, animation)
792
909
  elseif rarity then
793
- setUnitAnimationWithRarity(self.handle, animation, rarity)
910
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
794
911
  else
795
912
  setUnitAnimation(self.handle, animation)
796
913
  end
797
914
  end
915
+ function Unit.prototype.resetAnimation(self)
916
+ ResetUnitAnimation(self.handle)
917
+ end
798
918
  function Unit.prototype.queueAnimation(self, animation)
799
- queueUnitAnimation(self.handle, animation)
919
+ QueueUnitAnimation(self.handle, animation)
920
+ end
921
+ function Unit.prototype.chooseWeapon(self, target)
922
+ local firstWeapon = self.firstWeapon
923
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
924
+ return firstWeapon
925
+ end
926
+ local secondWeapon = self.secondWeapon
927
+ if secondWeapon.isEnabled and target:isAllowedTarget(self, secondWeapon.allowedTargetCombatClassifications) then
928
+ return secondWeapon
929
+ end
930
+ return nil
800
931
  end
801
932
  function Unit.prototype.delayHealthChecks(self)
802
- self[103] = (self[103] or 0) + 1
933
+ self[104] = (self[104] or 0) + 1
803
934
  Timer:run(delayHealthChecksCallback, self)
804
935
  end
805
936
  function Unit.prototype.setPosition(self, x, y)
@@ -809,21 +940,21 @@ function Unit.prototype.isSelected(self, player)
809
940
  return IsUnitSelected(self.handle, player.handle)
810
941
  end
811
942
  function Unit.prototype.explode(self)
812
- setUnitExploded(self.handle, true)
943
+ SetUnitExploded(self.handle, true)
813
944
  killUnit(self.handle)
814
945
  end
815
946
  function Unit.prototype.kill(self)
816
947
  killUnit(self.handle)
817
948
  end
818
949
  function Unit.prototype.revive(self, x, y, doEffect)
819
- local ____ReviveHero_5 = ReviveHero
820
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
821
- local ____doEffect_3 = doEffect
822
- if ____doEffect_3 == nil then
823
- ____doEffect_3 = false
950
+ local ____ReviveHero_7 = ReviveHero
951
+ local ____array_6 = __TS__SparseArrayNew(self.handle, x, y)
952
+ local ____doEffect_5 = doEffect
953
+ if ____doEffect_5 == nil then
954
+ ____doEffect_5 = false
824
955
  end
825
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
826
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
956
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
957
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
827
958
  end
828
959
  function Unit.prototype.healTarget(self, target, amount)
829
960
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,20 +994,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
863
994
  return UnitDropItemSlot(self.handle, item.handle, slot)
864
995
  end
865
996
  function Unit.prototype.itemInSlot(self, slot)
866
- return Item:of(unitItemInSlot(self.handle, slot))
997
+ return Item:of(UnitItemInSlot(self.handle, slot))
867
998
  end
868
999
  function Unit.prototype.addAbility(self, abilityId)
869
- if unitAddAbility(self.handle, abilityId) then
870
- local ability = UnitAbility:of(
871
- checkNotNull(getUnitAbility(self.handle, abilityId)),
872
- abilityId,
873
- self
874
- )
1000
+ local ability = UnitAbility:of(
1001
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
1002
+ abilityId,
1003
+ self
1004
+ )
1005
+ if ability ~= nil then
875
1006
  local abilities = self.abilities
876
1007
  abilities[#abilities + 1] = ability
877
- return ability
878
1008
  end
879
- return nil
1009
+ return ability
880
1010
  end
881
1011
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
882
1012
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -890,31 +1020,24 @@ end
890
1020
  function Unit.prototype.hasAbility(self, abilityId)
891
1021
  return getUnitAbilityLevel(self.handle, abilityId) > 0
892
1022
  end
893
- function Unit.prototype.getAbilityById(self, abilityId)
894
- local handle = self.handle
895
- if unitAddAbility(handle, abilityId) then
896
- assert(unitRemoveAbility(handle, abilityId))
897
- return nil
898
- end
899
- return UnitAbility:of(
900
- getUnitAbility(self.handle, abilityId),
901
- abilityId,
902
- self
903
- )
1023
+ function Unit.prototype.getAbility(self, abilityId)
1024
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
1025
+ return UnitAbility:of(ability, abilityId, self)
904
1026
  end
905
- function Unit.prototype.removeAbility(self, abilityId)
906
- if unitRemoveAbility(self.handle, abilityId) then
907
- local abilities = self.abilities
908
- for i = 1, #abilities do
909
- if abilities[i].typeId == abilityId then
910
- abilities[i]:destroy()
911
- tremove(abilities, i)
912
- return true
1027
+ function Unit.prototype.removeAbility(self, abilityTypeId)
1028
+ local abilities = self.abilities
1029
+ for i = 1, #abilities do
1030
+ if abilities[i].typeId == abilityTypeId then
1031
+ local ability = abilities[i]
1032
+ tremove(abilities, i)
1033
+ if ability.state == 2 then
1034
+ break
913
1035
  end
1036
+ ability:destroy()
1037
+ return true
914
1038
  end
915
- return true
916
1039
  end
917
- return false
1040
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
918
1041
  end
919
1042
  function Unit.prototype.hideAbility(self, abilityId, flag)
920
1043
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -928,9 +1051,6 @@ end
928
1051
  function Unit.prototype.endAbilityCooldown(self, abilityId)
929
1052
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
930
1053
  end
931
- function Unit.prototype.interruptAttack(self)
932
- unitInterruptAttack(self.handle)
933
- end
934
1054
  function Unit.prototype.interruptCast(self, abilityId)
935
1055
  local handle = self.handle
936
1056
  unitDisableAbility(handle, abilityId, true, false)
@@ -1001,18 +1121,44 @@ function Unit.prototype.unpauseEx(self)
1001
1121
  end
1002
1122
  function Unit.prototype.incrementStunCounter(self)
1003
1123
  local stunCounter = self[102] or 0
1004
- if not self[101] or stunCounter >= 0 then
1124
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1005
1125
  BlzPauseUnitEx(self.handle, true)
1006
1126
  end
1007
1127
  self[102] = stunCounter + 1
1008
1128
  end
1009
1129
  function Unit.prototype.decrementStunCounter(self)
1010
1130
  local stunCounter = self[102] or 0
1011
- if not self[101] or stunCounter >= 1 then
1131
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1012
1132
  BlzPauseUnitEx(self.handle, false)
1013
1133
  end
1014
1134
  self[102] = stunCounter - 1
1015
1135
  end
1136
+ function Unit.prototype.incrementForceStunCounter(self)
1137
+ local forceStunCounter = self[103] or 0
1138
+ if forceStunCounter == 0 then
1139
+ local handle = self.handle
1140
+ if not self[101] then
1141
+ for _ = self[102] or 0, -1 do
1142
+ BlzPauseUnitEx(handle, true)
1143
+ end
1144
+ end
1145
+ BlzPauseUnitEx(handle, true)
1146
+ end
1147
+ self[103] = forceStunCounter + 1
1148
+ end
1149
+ function Unit.prototype.decrementForceStunCounter(self)
1150
+ local forceStunCounter = self[103] or 0
1151
+ if forceStunCounter == 1 then
1152
+ local handle = self.handle
1153
+ if not self[101] then
1154
+ for _ = self[102] or 0, -1 do
1155
+ BlzPauseUnitEx(handle, false)
1156
+ end
1157
+ end
1158
+ BlzPauseUnitEx(handle, false)
1159
+ end
1160
+ self[103] = forceStunCounter - 1
1161
+ end
1016
1162
  function Unit.create(self, owner, id, x, y, facing, skinId)
1017
1163
  local handle = skinId and BlzCreateUnitWithSkin(
1018
1164
  owner.handle,
@@ -1201,7 +1347,7 @@ __TS__SetDescriptor(
1201
1347
  Unit.prototype,
1202
1348
  "isIllusion",
1203
1349
  {get = function(self)
1204
- return isUnitIllusion(self.handle)
1350
+ return IsUnitIllusion(self.handle)
1205
1351
  end},
1206
1352
  true
1207
1353
  )
@@ -1209,7 +1355,7 @@ __TS__SetDescriptor(
1209
1355
  Unit.prototype,
1210
1356
  "isStunned",
1211
1357
  {get = function(self)
1212
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1358
+ return getUnitCurrentOrder(self.handle) == 851973
1213
1359
  end},
1214
1360
  true
1215
1361
  )
@@ -1288,13 +1434,13 @@ __TS__SetDescriptor(
1288
1434
  )
1289
1435
  __TS__SetDescriptor(
1290
1436
  Unit.prototype,
1291
- "strengthBase",
1437
+ "primaryAttribute",
1292
1438
  {
1293
1439
  get = function(self)
1294
- return getHeroStr(self.handle, false)
1440
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1295
1441
  end,
1296
- set = function(self, strengthBase)
1297
- setHeroStr(self.handle, strengthBase, true)
1442
+ set = function(self, primaryAttribute)
1443
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1298
1444
  end
1299
1445
  },
1300
1446
  true
@@ -1316,19 +1462,6 @@ __TS__SetDescriptor(
1316
1462
  end},
1317
1463
  true
1318
1464
  )
1319
- __TS__SetDescriptor(
1320
- Unit.prototype,
1321
- "agilityBase",
1322
- {
1323
- get = function(self)
1324
- return getHeroAgi(self.handle, false)
1325
- end,
1326
- set = function(self, agilityBase)
1327
- setHeroAgi(self.handle, agilityBase, true)
1328
- end
1329
- },
1330
- true
1331
- )
1332
1465
  __TS__SetDescriptor(
1333
1466
  Unit.prototype,
1334
1467
  "agilityBonus",
@@ -1346,19 +1479,6 @@ __TS__SetDescriptor(
1346
1479
  end},
1347
1480
  true
1348
1481
  )
1349
- __TS__SetDescriptor(
1350
- Unit.prototype,
1351
- "intelligenceBase",
1352
- {
1353
- get = function(self)
1354
- return getHeroInt(self.handle, false)
1355
- end,
1356
- set = function(self, intelligenceBase)
1357
- setHeroInt(self.handle, intelligenceBase, true)
1358
- end
1359
- },
1360
- true
1361
- )
1362
1482
  __TS__SetDescriptor(
1363
1483
  Unit.prototype,
1364
1484
  "intelligenceBonus",
@@ -1407,17 +1527,17 @@ __TS__SetDescriptor(
1407
1527
  "isTeamGlowVisible",
1408
1528
  {
1409
1529
  get = function(self)
1410
- return not self[106]
1530
+ return not self[107]
1411
1531
  end,
1412
1532
  set = function(self, isTeamGlowVisible)
1413
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1414
- local ____temp_6
1533
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1534
+ local ____temp_8
1415
1535
  if not isTeamGlowVisible then
1416
- ____temp_6 = true
1536
+ ____temp_8 = true
1417
1537
  else
1418
- ____temp_6 = nil
1538
+ ____temp_8 = nil
1419
1539
  end
1420
- self[106] = ____temp_6
1540
+ self[107] = ____temp_8
1421
1541
  end
1422
1542
  },
1423
1543
  true
@@ -1426,9 +1546,9 @@ __TS__SetDescriptor(
1426
1546
  Unit.prototype,
1427
1547
  "color",
1428
1548
  {set = function(self, color)
1429
- setUnitColor(self.handle, color.handle)
1430
- if self[106] then
1431
- showUnitTeamGlow(self.handle, false)
1549
+ SetUnitColor(self.handle, color.handle)
1550
+ if self[107] then
1551
+ BlzShowUnitTeamGlow(self.handle, false)
1432
1552
  end
1433
1553
  end},
1434
1554
  true
@@ -1451,14 +1571,14 @@ __TS__SetDescriptor(
1451
1571
  "maxHealth",
1452
1572
  {
1453
1573
  get = function(self)
1454
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1574
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1455
1575
  end,
1456
1576
  set = function(self, maxHealth)
1457
- if maxHealth < 1 and self[103] ~= nil then
1458
- self[104] = (self[104] or 0) + (1 - maxHealth)
1577
+ if maxHealth < 1 and self[104] ~= nil then
1578
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1459
1579
  maxHealth = 1
1460
1580
  end
1461
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1581
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1462
1582
  end
1463
1583
  },
1464
1584
  true
@@ -1500,10 +1620,10 @@ __TS__SetDescriptor(
1500
1620
  "health",
1501
1621
  {
1502
1622
  get = function(self)
1503
- return GetWidgetLife(self.handle) - (self[105] or 0)
1623
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1504
1624
  end,
1505
1625
  set = function(self, health)
1506
- SetWidgetLife(self.handle, health + (self[105] or 0))
1626
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1507
1627
  end
1508
1628
  },
1509
1629
  true
@@ -1579,25 +1699,12 @@ __TS__SetDescriptor(
1579
1699
  },
1580
1700
  true
1581
1701
  )
1582
- __TS__SetDescriptor(
1583
- Unit.prototype,
1584
- "flyHeight",
1585
- {
1586
- get = function(self)
1587
- return getUnitFlyHeight(self.handle)
1588
- end,
1589
- set = function(self, v)
1590
- SetUnitFlyHeight(self.handle, v, 100000)
1591
- end
1592
- },
1593
- true
1594
- )
1595
1702
  __TS__SetDescriptor(
1596
1703
  Unit.prototype,
1597
1704
  "x",
1598
1705
  {
1599
1706
  get = function(self)
1600
- return getUnitX(self.handle)
1707
+ return self[108] or getUnitX(self.handle)
1601
1708
  end,
1602
1709
  set = function(self, v)
1603
1710
  SetUnitX(self.handle, v)
@@ -1610,7 +1717,7 @@ __TS__SetDescriptor(
1610
1717
  "y",
1611
1718
  {
1612
1719
  get = function(self)
1613
- return getUnitY(self.handle)
1720
+ return self[109] or getUnitY(self.handle)
1614
1721
  end,
1615
1722
  set = function(self, v)
1616
1723
  SetUnitY(self.handle, v)
@@ -1696,10 +1803,10 @@ __TS__SetDescriptor(
1696
1803
  "gold",
1697
1804
  {
1698
1805
  get = function(self)
1699
- return getResourceAmount(self.handle)
1806
+ return GetResourceAmount(self.handle)
1700
1807
  end,
1701
1808
  set = function(self, gold)
1702
- setResourceAmount(self.handle, gold)
1809
+ SetResourceAmount(self.handle, gold)
1703
1810
  end
1704
1811
  },
1705
1812
  true
@@ -1715,14 +1822,18 @@ __TS__SetDescriptor(
1715
1822
  local handle = self.handle
1716
1823
  if isPaused and not IsUnitPaused(handle) then
1717
1824
  self[101] = true
1718
- for _ = self[102] or 0, -1 do
1719
- BlzPauseUnitEx(handle, true)
1825
+ if (self[103] or 0) <= 0 then
1826
+ for _ = self[102] or 0, -1 do
1827
+ BlzPauseUnitEx(handle, true)
1828
+ end
1720
1829
  end
1721
1830
  PauseUnit(handle, true)
1722
1831
  elseif not isPaused and IsUnitPaused(handle) then
1723
1832
  PauseUnit(handle, false)
1724
- for _ = self[102] or 0, -1 do
1725
- BlzPauseUnitEx(handle, false)
1833
+ if (self[103] or 0) <= 0 then
1834
+ for _ = self[102] or 0, -1 do
1835
+ BlzPauseUnitEx(handle, false)
1836
+ end
1726
1837
  end
1727
1838
  self[101] = nil
1728
1839
  end
@@ -1780,20 +1891,6 @@ __TS__SetDescriptor(
1780
1891
  },
1781
1892
  true
1782
1893
  )
1783
- __TS__SetDescriptor(
1784
- Unit.prototype,
1785
- "scale",
1786
- {
1787
- get = function(self)
1788
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1789
- end,
1790
- set = function(self, v)
1791
- setUnitScale(self.handle, v, v, v)
1792
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1793
- end
1794
- },
1795
- true
1796
- )
1797
1894
  __TS__SetDescriptor(
1798
1895
  Unit.prototype,
1799
1896
  "timeScale",
@@ -1820,13 +1917,26 @@ __TS__SetDescriptor(
1820
1917
  Unit.prototype,
1821
1918
  "pathingCollisionRange",
1822
1919
  {get = function(self)
1823
- return 16 * (min(
1920
+ return 16 * (math.min(
1824
1921
  getUnitCollisionSize(self.handle) // 16,
1825
1922
  3
1826
1923
  ) + 1)
1827
1924
  end},
1828
1925
  true
1829
1926
  )
1927
+ __TS__SetDescriptor(
1928
+ Unit.prototype,
1929
+ "movementType",
1930
+ {
1931
+ get = function(self)
1932
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1933
+ end,
1934
+ set = function(self, movementType)
1935
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1936
+ end
1937
+ },
1938
+ true
1939
+ )
1830
1940
  __TS__SetDescriptor(
1831
1941
  Unit.prototype,
1832
1942
  "pathing",
@@ -1917,30 +2027,6 @@ __TS__SetDescriptor(
1917
2027
  end},
1918
2028
  true
1919
2029
  )
1920
- __TS__SetDescriptor(
1921
- Unit.prototype,
1922
- "onUnitInRange",
1923
- {get = function(self)
1924
- local handle = self.handle
1925
- local onUnitInRange = setmetatable(
1926
- {},
1927
- {__index = function(self, value)
1928
- local event = __TS__New(
1929
- TriggerEvent,
1930
- function(trigger)
1931
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1932
- end,
1933
- function() return ____exports.Unit:of(handle) end
1934
- )
1935
- rawset(self, value, event)
1936
- return event
1937
- end}
1938
- )
1939
- rawset(self, "onUnitInRange", onUnitInRange)
1940
- return onUnitInRange
1941
- end},
1942
- true
1943
- )
1944
2030
  __TS__SetDescriptor(
1945
2031
  Unit.prototype,
1946
2032
  "onManaEqual",
@@ -2008,6 +2094,14 @@ __TS__SetDescriptor(
2008
2094
  end},
2009
2095
  true
2010
2096
  )
2097
+ __TS__SetDescriptor(
2098
+ Unit.prototype,
2099
+ "targetAcquiredEvent",
2100
+ {get = function(self)
2101
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2102
+ end},
2103
+ true
2104
+ )
2011
2105
  __TS__SetDescriptor(
2012
2106
  Unit.prototype,
2013
2107
  "onSelect",
@@ -2068,6 +2162,11 @@ __TS__SetDescriptor(
2068
2162
  end},
2069
2163
  true
2070
2164
  )
2165
+ Unit.levelChangedEvent = __TS__New(
2166
+ ____exports.UnitTriggerEvent,
2167
+ EVENT_PLAYER_HERO_LEVEL,
2168
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2169
+ )
2071
2170
  Unit.deathEvent = __TS__New(
2072
2171
  ____exports.UnitTriggerEvent,
2073
2172
  EVENT_PLAYER_UNIT_DEATH,
@@ -2085,7 +2184,7 @@ Unit.onResurrect = __TS__New(
2085
2184
  ____exports.Unit.deathEvent:addListener(function(unit)
2086
2185
  dead[unit] = true
2087
2186
  end)
2088
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2187
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2089
2188
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2090
2189
  dead[unit] = false
2091
2190
  invoke(event, unit)
@@ -2102,7 +2201,7 @@ Unit.morphEvent = __TS__New(
2102
2201
  invoke(event, unit)
2103
2202
  end
2104
2203
  end
2105
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2204
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2106
2205
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2107
2206
  Timer:run(ifNotLeft, unit)
2108
2207
  end
@@ -2143,25 +2242,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2143
2242
  InitializingEvent,
2144
2243
  function(event)
2145
2244
  local function listener(unit, id)
2146
- local ____GetSpellTargetUnit_result_9
2245
+ local ____GetSpellTargetUnit_result_11
2147
2246
  if GetSpellTargetUnit() then
2148
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2247
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2149
2248
  else
2150
- local ____GetSpellTargetItem_result_8
2249
+ local ____GetSpellTargetItem_result_10
2151
2250
  if GetSpellTargetItem() then
2152
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2251
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2153
2252
  else
2154
- local ____GetSpellTargetDestructable_result_7
2253
+ local ____GetSpellTargetDestructable_result_9
2155
2254
  if GetSpellTargetDestructable() then
2156
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2255
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2157
2256
  else
2158
- ____GetSpellTargetDestructable_result_7 = nil
2257
+ ____GetSpellTargetDestructable_result_9 = nil
2159
2258
  end
2160
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2259
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2161
2260
  end
2162
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2261
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2163
2262
  end
2164
- local target = ____GetSpellTargetUnit_result_9
2263
+ local target = ____GetSpellTargetUnit_result_11
2165
2264
  if target then
2166
2265
  invoke(event, unit, id, target)
2167
2266
  end
@@ -2369,38 +2468,57 @@ Unit.onDamaging = (function()
2369
2468
  if source and source.typeId == dummyUnitId then
2370
2469
  source = nil
2371
2470
  end
2372
- local target = BlzGetEventDamageTarget()
2471
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2472
+ local metadata = damageMetadataByTarget[target]
2473
+ damageMetadataByTarget[target] = nil
2373
2474
  local data = {
2374
2475
  amount = GetEventDamage(),
2375
- attackType = BlzGetEventAttackType(),
2476
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2376
2477
  damageType = BlzGetEventDamageType(),
2377
- weaponType = BlzGetEventWeaponType(),
2378
- isAttack = BlzGetEventIsAttack()
2478
+ weaponSoundType = nativeToWeaponSoundType(BlzGetEventWeaponType()),
2479
+ metadata = metadata,
2480
+ isAttack = BlzGetEventIsAttack(),
2481
+ originalAmount = GetEventDamage(),
2482
+ originalMetadata = metadata,
2483
+ preventRetaliation = damagingEventPreventRetaliation
2379
2484
  }
2380
2485
  if data.isAttack and source then
2381
- 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
2382
- if weapon == -1 then
2383
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2384
- weapon = 0
2385
- end
2386
- data.weapon = assert(source.weapons[weapon + 1])
2486
+ data.weapon = source:chooseWeapon(target)
2387
2487
  end
2388
2488
  if not data.isAttack or not source or not source._attackHandlers then
2389
2489
  invoke(
2390
2490
  event,
2391
2491
  source,
2392
- ____exports.Unit:of(target),
2492
+ target,
2393
2493
  setmetatable(
2394
2494
  {},
2395
2495
  {
2396
2496
  __index = data,
2397
2497
  __newindex = function(self, key, value)
2398
- damageSetters[key](value)
2498
+ local damageSetter = damageSetters[key]
2499
+ if damageSetter ~= nil then
2500
+ damageSetter(value)
2501
+ end
2399
2502
  data[key] = value
2400
2503
  end
2401
2504
  }
2402
2505
  )
2403
2506
  )
2507
+ if data[0] and source then
2508
+ local sourceOwner = source.owner.handle
2509
+ data[1] = sourceOwner
2510
+ local targetOwner = target.owner.handle
2511
+ data[2] = targetOwner
2512
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2513
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2514
+ data[3] = true
2515
+ end
2516
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2517
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2518
+ data[4] = true
2519
+ end
2520
+ end
2521
+ damagingEventByTarget[target] = data
2404
2522
  return
2405
2523
  end
2406
2524
  BlzSetEventDamage(0)
@@ -2408,7 +2526,7 @@ Unit.onDamaging = (function()
2408
2526
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2409
2527
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2410
2528
  local sourceOwner = source.owner.handle
2411
- local targetOwner = GetOwningPlayer(target)
2529
+ local targetOwner = target.owner.handle
2412
2530
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2413
2531
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2414
2532
  Timer:run(function()
@@ -2424,25 +2542,21 @@ Unit.onDamaging = (function()
2424
2542
  for ____, ____value in ipairs(source._attackHandlers) do
2425
2543
  local condition = ____value[1]
2426
2544
  local action = ____value[2]
2427
- if condition(
2428
- source,
2429
- ____exports.Unit:of(target),
2430
- data
2431
- ) then
2545
+ if condition(source, target, data) then
2432
2546
  action(
2433
2547
  source,
2434
- ____exports.Unit:of(target),
2548
+ target,
2435
2549
  setmetatable(
2436
2550
  {fire = function()
2437
2551
  UnitDamageTarget(
2438
2552
  source.handle,
2439
- target,
2553
+ target.handle,
2440
2554
  data.amount,
2441
2555
  true,
2442
2556
  true,
2443
- data.attackType,
2557
+ attackTypeToNative(data.attackType),
2444
2558
  data.damageType,
2445
- data.weaponType
2559
+ weaponSoundTypeToNative(data.weaponSoundType)
2446
2560
  )
2447
2561
  end},
2448
2562
  {__index = data, __newindex = data}
@@ -2467,30 +2581,54 @@ Unit.onDamage = __TS__New(
2467
2581
  if source and source.typeId == dummyUnitId then
2468
2582
  source = nil
2469
2583
  end
2584
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2585
+ local damagingEvent = damagingEventByTarget[target]
2586
+ damagingEventByTarget[target] = nil
2470
2587
  local data = {
2471
2588
  amount = GetEventDamage(),
2472
- attackType = BlzGetEventAttackType(),
2589
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2473
2590
  damageType = BlzGetEventDamageType(),
2474
- weaponType = BlzGetEventWeaponType(),
2591
+ weaponSoundType = nativeToWeaponSoundType(BlzGetEventWeaponType()),
2592
+ metadata = damagingEvent and damagingEvent.metadata,
2475
2593
  isAttack = BlzGetEventIsAttack(),
2476
- originalAmount = GetEventDamage(),
2594
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2595
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2477
2596
  preventDeath = damageEventPreventDeath
2478
2597
  }
2598
+ if damagingEvent then
2599
+ for key, value in pairs(damagingEvent) do
2600
+ if isAttribute(key) then
2601
+ data[key] = value
2602
+ end
2603
+ end
2604
+ local sourceOwner = damagingEvent[1]
2605
+ if sourceOwner then
2606
+ local targetOwner = damagingEvent[2]
2607
+ if damagingEvent[3] then
2608
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2609
+ end
2610
+ if damagingEvent[4] then
2611
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2612
+ end
2613
+ end
2614
+ end
2479
2615
  local evData = setmetatable(
2480
2616
  {},
2481
2617
  {
2482
2618
  __index = data,
2483
2619
  __newindex = function(self, key, value)
2484
- damageSetters[key](value)
2620
+ local damageSetter = damageSetters[key]
2621
+ if damageSetter ~= nil then
2622
+ damageSetter(value)
2623
+ end
2485
2624
  data[key] = value
2486
2625
  end
2487
2626
  }
2488
2627
  )
2489
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2490
2628
  invoke(event, source, target, evData)
2491
2629
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2492
2630
  local bonusHealth = math.ceil(evData.amount)
2493
- target[105] = (target[105] or 0) + bonusHealth
2631
+ target[106] = (target[106] or 0) + bonusHealth
2494
2632
  BlzSetUnitMaxHP(
2495
2633
  target.handle,
2496
2634
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2504,7 +2642,7 @@ Unit.onDamage = __TS__New(
2504
2642
  evData[0],
2505
2643
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2506
2644
  )
2507
- target[105] = (target[105] or 0) - bonusHealth
2645
+ target[106] = (target[106] or 0) - bonusHealth
2508
2646
  SetWidgetLife(
2509
2647
  target.handle,
2510
2648
  GetWidgetLife(target.handle) - bonusHealth
@@ -2530,7 +2668,7 @@ Unit.itemDroppedEvent = __TS__New(
2530
2668
  function()
2531
2669
  local unit = getTriggerUnit()
2532
2670
  local item = getManipulatedItem()
2533
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2671
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2534
2672
  return ____exports.Unit:of(unit), Item:of(item)
2535
2673
  end
2536
2674
  return IgnoreEvent
@@ -2540,10 +2678,14 @@ Unit.itemPickedUpEvent = __TS__New(
2540
2678
  ____exports.UnitTriggerEvent,
2541
2679
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2542
2680
  function()
2543
- local unit = getTriggerUnit()
2544
- local item = getManipulatedItem()
2545
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2546
- return ____exports.Unit:of(unit), Item:of(item)
2681
+ local unitHandle = getTriggerUnit()
2682
+ local itemHandle = getManipulatedItem()
2683
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2684
+ local unit = ____exports.Unit:of(unitHandle)
2685
+ local item = Item:of(itemHandle)
2686
+ if ownerByItem[item] ~= unit then
2687
+ return unit, item
2688
+ end
2547
2689
  end
2548
2690
  return IgnoreEvent
2549
2691
  end
@@ -2554,59 +2696,24 @@ Unit.itemUsedEvent = __TS__New(
2554
2696
  function()
2555
2697
  local unit = getTriggerUnit()
2556
2698
  local item = getManipulatedItem()
2557
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2699
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2558
2700
  return ____exports.Unit:of(unit), Item:of(item)
2559
2701
  end
2560
2702
  return IgnoreEvent
2561
2703
  end
2562
2704
  )
2563
- Unit.itemStackedEvent = __TS__New(
2564
- ____exports.UnitTriggerEvent,
2565
- EVENT_PLAYER_UNIT_STACK_ITEM,
2566
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2567
- )
2568
2705
  __TS__ObjectDefineProperty(
2569
2706
  Unit,
2570
- "itemUseOrderEvent",
2707
+ "itemChargesChangedEvent",
2571
2708
  {get = function(self)
2572
2709
  local event = __TS__New(Event)
2573
- for order = orderId("useslot0"), orderId("useslot5") do
2574
- local slot = order - orderId("useslot0")
2575
- local function listener(unit)
2576
- local item = unit.items[slot + 1]
2577
- if item ~= nil then
2578
- invoke(event, unit, item)
2579
- end
2710
+ Item.chargesChangedEvent:addListener(function(item)
2711
+ local unit = item.owner
2712
+ if unit ~= nil then
2713
+ invoke(event, unit, item)
2580
2714
  end
2581
- self.onImmediateOrder[order]:addListener(listener)
2582
- self.onTargetOrder[order]:addListener(listener)
2583
- self.onPointOrder[order]:addListener(listener)
2584
- end
2585
- rawset(self, "itemUseOrderEvent", event)
2586
- return event
2587
- end}
2588
- )
2589
- __TS__ObjectDefineProperty(
2590
- Unit,
2591
- "itemMoveOrderEvent",
2592
- {get = function(self)
2593
- local event = __TS__New(Event)
2594
- for order = orderId("moveslot0"), orderId("moveslot5") do
2595
- local slotTo = order - orderId("moveslot0")
2596
- self.onTargetOrder[order]:addListener(function(unit, item)
2597
- local slotFrom = unit.items:findSlot(item)
2598
- if slotFrom ~= nil then
2599
- invoke(
2600
- event,
2601
- unit,
2602
- item,
2603
- slotFrom,
2604
- slotTo
2605
- )
2606
- end
2607
- end)
2608
- end
2609
- rawset(self, "itemMoveOrderEvent", event)
2715
+ end)
2716
+ rawset(self, "itemChargesChangedEvent", event)
2610
2717
  return event
2611
2718
  end}
2612
2719
  )
@@ -2635,6 +2742,10 @@ __TS__ObjectDefineProperty(
2635
2742
  rawset(self, "destroyEvent", destroyEvent)
2636
2743
  return destroyEvent
2637
2744
  end}
2745
+ )
2746
+ Unit.synchronize = synchronizer(
2747
+ function(unit) return unit.syncId end,
2748
+ function(syncId) return unitBySyncId[syncId] end
2638
2749
  );
2639
2750
  (function(self)
2640
2751
  local leaveAbilityIds = postcompile(function()
@@ -2652,11 +2763,7 @@ __TS__ObjectDefineProperty(
2652
2763
  function(____, id) return fourCC(id) end
2653
2764
  )
2654
2765
  end)
2655
- for ____, leaveOrderId in ipairs({
2656
- orderId("undefend"),
2657
- orderId("magicundefense"),
2658
- orderId("unimmolation")
2659
- }) do
2766
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2660
2767
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2661
2768
  local handle = unit.handle
2662
2769
  for i = 1, #leaveAbilityIds do
@@ -2664,7 +2771,8 @@ __TS__ObjectDefineProperty(
2664
2771
  return
2665
2772
  end
2666
2773
  end
2667
- unit:destroy()
2774
+ unit:saveData()
2775
+ Timer:run(unit, "destroy")
2668
2776
  end)
2669
2777
  end
2670
2778
  end)(Unit)