warscript 0.0.1-dev.bb34489 → 0.0.1-dev.bc4cd10

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 (455) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/dummy.lua +4 -2
  8. package/core/types/effect.d.ts +24 -6
  9. package/core/types/effect.lua +169 -107
  10. package/core/types/frame.d.ts +9 -0
  11. package/core/types/frame.lua +193 -23
  12. package/core/types/handle.lua +11 -9
  13. package/core/types/item.d.ts +1 -0
  14. package/core/types/item.lua +1 -0
  15. package/core/types/player.d.ts +18 -1
  16. package/core/types/player.lua +76 -26
  17. package/core/types/playerCamera.d.ts +2 -0
  18. package/core/types/playerCamera.lua +123 -5
  19. package/core/types/playerColor.lua +4 -3
  20. package/core/types/sound.d.ts +18 -25
  21. package/core/types/sound.lua +113 -33
  22. package/core/types/tileCell.d.ts +11 -1
  23. package/core/types/tileCell.lua +97 -0
  24. package/core/types/timer.d.ts +9 -8
  25. package/core/types/timer.lua +45 -23
  26. package/core/types/unit.d.ts +5 -0
  27. package/core/types/unit.lua +5 -0
  28. package/core/util.d.ts +3 -1
  29. package/core/util.lua +127 -4
  30. package/decl/native.d.ts +1718 -964
  31. package/destroyable.d.ts +1 -0
  32. package/destroyable.lua +9 -0
  33. package/engine/behavior.d.ts +16 -3
  34. package/engine/behavior.lua +233 -73
  35. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  36. package/engine/behaviour/ability/always-enabled.lua +31 -0
  37. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  38. package/engine/behaviour/ability/apply-buff.lua +36 -4
  39. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  40. package/engine/behaviour/ability/damage.d.ts +43 -11
  41. package/engine/behaviour/ability/damage.lua +89 -39
  42. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  43. package/engine/behaviour/ability/emulate-impact.lua +44 -0
  44. package/engine/behaviour/ability/heal.d.ts +33 -6
  45. package/engine/behaviour/ability/heal.lua +89 -10
  46. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  47. package/engine/behaviour/ability/instant-impact.lua +4 -19
  48. package/engine/behaviour/ability/on-command-impact.d.ts +9 -0
  49. package/engine/behaviour/ability/on-command-impact.lua +26 -0
  50. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  51. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  52. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  53. package/engine/behaviour/ability/restore-mana.lua +29 -0
  54. package/engine/behaviour/ability.d.ts +30 -7
  55. package/engine/behaviour/ability.lua +162 -43
  56. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  57. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  58. package/engine/behaviour/unit.d.ts +46 -2
  59. package/engine/behaviour/unit.lua +290 -6
  60. package/engine/buff.d.ts +166 -57
  61. package/engine/buff.lua +766 -274
  62. package/engine/game-map.d.ts +7 -0
  63. package/engine/game-map.lua +32 -0
  64. package/engine/index.d.ts +2 -1
  65. package/engine/internal/ability.d.ts +27 -14
  66. package/engine/internal/ability.lua +168 -104
  67. package/engine/internal/item/ability.lua +162 -4
  68. package/engine/internal/item/fields.d.ts +12 -0
  69. package/engine/internal/item/fields.lua +33 -0
  70. package/engine/internal/item/owner-cache.d.ts +5 -0
  71. package/engine/internal/item/owner-cache.lua +4 -0
  72. package/engine/internal/item+owner.d.ts +2 -0
  73. package/engine/internal/item+owner.lua +37 -8
  74. package/engine/internal/item.d.ts +34 -18
  75. package/engine/internal/item.lua +308 -102
  76. package/engine/internal/mechanics/ability-duration.lua +1 -1
  77. package/engine/internal/mechanics/cast-ability.lua +6 -3
  78. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  79. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  80. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  81. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  82. package/engine/internal/misc/frame-coordinates.lua +21 -0
  83. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  84. package/engine/internal/misc/get-terrain-z.lua +11 -0
  85. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  86. package/engine/internal/misc/player-local-handle.lua +5 -0
  87. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  88. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  89. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  90. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  91. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  92. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  93. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  94. package/engine/internal/object-data/evasion-probability.lua +16 -0
  95. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  96. package/engine/internal/object-data/health-bonus.lua +16 -0
  97. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  98. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  99. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  100. package/engine/internal/object-data/mana-bonus.lua +16 -0
  101. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  102. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  103. package/engine/internal/unit/ability.d.ts +45 -1
  104. package/engine/internal/unit/ability.lua +142 -19
  105. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  106. package/engine/internal/unit/add-item-to-slot-init.lua +12 -0
  107. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  108. package/engine/internal/unit/add-item-to-slot.lua +93 -0
  109. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  110. package/engine/internal/unit/allowed-targets.lua +9 -1
  111. package/engine/internal/unit/appearance.d.ts +15 -0
  112. package/engine/internal/unit/appearance.lua +85 -0
  113. package/engine/internal/unit/attributes.d.ts +17 -0
  114. package/engine/internal/unit/attributes.lua +46 -0
  115. package/engine/internal/unit/bonus.d.ts +20 -2
  116. package/engine/internal/unit/bonus.lua +125 -9
  117. package/engine/internal/unit/buff.d.ts +2 -2
  118. package/engine/internal/unit/buff.lua +34 -19
  119. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  120. package/engine/internal/unit/equipment-inventory.lua +233 -0
  121. package/engine/internal/unit/expiration-timer.lua +1 -1
  122. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  123. package/engine/internal/unit/extended-inventory.lua +99 -0
  124. package/engine/internal/unit/fly-height.d.ts +7 -0
  125. package/engine/internal/unit/fly-height.lua +20 -0
  126. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  127. package/engine/internal/unit/ignore-events-items.lua +14 -0
  128. package/engine/internal/unit/interrupts.d.ts +12 -0
  129. package/engine/internal/unit/interrupts.lua +28 -0
  130. package/engine/internal/unit/inventory.d.ts +28 -0
  131. package/engine/internal/unit/inventory.lua +87 -0
  132. package/engine/internal/unit/item-container.d.ts +25 -0
  133. package/engine/internal/unit/item-container.lua +11 -0
  134. package/engine/internal/unit/item-order-events.d.ts +17 -0
  135. package/engine/internal/unit/item-order-events.lua +67 -0
  136. package/engine/internal/unit/item-slot.d.ts +27 -0
  137. package/engine/internal/unit/item-slot.lua +92 -0
  138. package/engine/internal/unit/main-selected.d.ts +13 -0
  139. package/engine/internal/unit/main-selected.lua +36 -0
  140. package/engine/internal/unit/order.d.ts +20 -0
  141. package/engine/internal/unit/order.lua +136 -0
  142. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  143. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  144. package/engine/internal/unit/range-event.d.ts +12 -0
  145. package/engine/internal/unit/range-event.lua +90 -0
  146. package/engine/internal/unit/scale.d.ts +7 -0
  147. package/engine/internal/unit/scale.lua +20 -0
  148. package/engine/internal/unit+ability.d.ts +2 -1
  149. package/engine/internal/unit+ability.lua +75 -5
  150. package/engine/internal/unit+bonus.lua +3 -3
  151. package/engine/internal/unit+damage.d.ts +11 -11
  152. package/engine/internal/unit+damage.lua +43 -14
  153. package/engine/internal/unit+rally.lua +9 -31
  154. package/engine/internal/unit+spellSteal.lua +1 -2
  155. package/engine/internal/unit+transport.lua +4 -10
  156. package/engine/internal/unit-missile-data.lua +58 -32
  157. package/engine/internal/unit-missile-launch.lua +70 -13
  158. package/engine/internal/unit.d.ts +57 -31
  159. package/engine/internal/unit.lua +466 -308
  160. package/engine/internal/utility.lua +12 -0
  161. package/engine/lightning.d.ts +12 -5
  162. package/engine/lightning.lua +48 -14
  163. package/engine/local-client.d.ts +35 -2
  164. package/engine/local-client.lua +367 -15
  165. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  166. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  167. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  168. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  169. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  170. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  171. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  172. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  173. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  174. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  175. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  176. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  177. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  178. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  179. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  180. package/engine/object-data/auxiliary/item-class.lua +2 -0
  181. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  182. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  183. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  184. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  185. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  186. package/engine/object-data/auxiliary/order-type.lua +2 -0
  187. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  188. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  189. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  190. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  191. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  192. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  193. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  194. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  195. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  196. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  197. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  198. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  199. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  200. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  201. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  202. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  203. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  204. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  205. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  206. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  207. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  208. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  209. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  210. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  211. package/engine/object-data/entry/ability-type/blank-configurable.lua +42 -1
  212. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  213. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  214. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  215. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  216. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  217. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  218. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  219. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  220. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  221. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  222. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  223. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  224. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  225. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  226. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  227. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  228. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  229. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  230. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  231. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  232. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  233. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  234. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  235. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  236. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  237. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  238. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  239. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  240. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  241. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  242. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  243. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  244. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  245. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  246. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  247. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  248. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  249. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  250. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  251. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  252. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  253. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  254. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  255. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  256. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  257. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  258. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  259. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  260. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  261. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  262. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  263. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  264. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  265. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  266. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  267. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  268. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  269. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  270. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  271. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  272. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  273. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  274. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  275. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  276. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  277. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  278. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  279. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  280. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  281. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  282. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  283. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  284. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  285. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  286. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  287. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  288. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  289. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  290. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  291. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  292. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  293. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  294. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  295. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  296. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  297. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  298. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  299. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  300. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  301. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  302. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  303. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  304. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  305. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  306. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  307. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  308. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  309. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  310. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  311. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  312. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  313. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  314. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  315. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  316. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  317. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  318. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  319. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  320. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  321. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  322. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  323. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  324. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  325. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  326. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  327. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  328. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  329. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  330. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  331. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  332. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  333. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  334. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  335. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  336. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  337. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  338. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  339. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  340. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  341. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  342. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  343. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  344. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  345. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  346. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  347. package/engine/object-data/entry/ability-type/web.lua +52 -0
  348. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  349. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  350. package/engine/object-data/entry/ability-type.d.ts +41 -20
  351. package/engine/object-data/entry/ability-type.lua +337 -44
  352. package/engine/object-data/entry/buff-type/applicable.lua +122 -137
  353. package/engine/object-data/entry/buff-type.d.ts +10 -12
  354. package/engine/object-data/entry/buff-type.lua +39 -29
  355. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  356. package/engine/object-data/entry/destructible-type.lua +181 -0
  357. package/engine/object-data/entry/item-type.d.ts +32 -3
  358. package/engine/object-data/entry/item-type.lua +177 -2
  359. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  360. package/engine/object-data/entry/lightning-type.lua +1 -1
  361. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  362. package/engine/object-data/entry/sound-preset.lua +140 -0
  363. package/engine/object-data/entry/unit-type.d.ts +71 -6
  364. package/engine/object-data/entry/unit-type.lua +592 -93
  365. package/engine/object-data/entry/upgrade.d.ts +2 -2
  366. package/engine/object-data/entry/upgrade.lua +4 -4
  367. package/engine/object-data/entry.d.ts +21 -14
  368. package/engine/object-data/entry.lua +68 -32
  369. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  370. package/engine/object-field/ability.d.ts +28 -5
  371. package/engine/object-field/ability.lua +61 -7
  372. package/engine/object-field/item.d.ts +22 -0
  373. package/engine/object-field/item.lua +118 -0
  374. package/engine/object-field/unit.d.ts +72 -3
  375. package/engine/object-field/unit.lua +268 -7
  376. package/engine/object-field.d.ts +26 -7
  377. package/engine/object-field.lua +362 -117
  378. package/engine/random.d.ts +10 -0
  379. package/engine/random.lua +21 -0
  380. package/engine/standard/entries/ability-type.d.ts +3102 -7
  381. package/engine/standard/entries/ability-type.lua +0 -6
  382. package/engine/standard/entries/buff-type.d.ts +48 -0
  383. package/engine/standard/entries/buff-type.lua +46 -0
  384. package/engine/standard/entries/item-type.d.ts +1299 -0
  385. package/engine/standard/entries/item-type.lua +2 -0
  386. package/engine/standard/entries/lightning-type.d.ts +42 -15
  387. package/engine/standard/entries/lightning-type.lua +0 -14
  388. package/engine/standard/entries/sound-preset.d.ts +10 -0
  389. package/engine/standard/entries/sound-preset.lua +10 -0
  390. package/engine/standard/entries/unit-type.d.ts +5 -0
  391. package/engine/standard/entries/unit-type.lua +5 -0
  392. package/engine/standard/fields/ability.d.ts +4 -2
  393. package/engine/standard/fields/ability.lua +4 -2
  394. package/engine/standard/fields/item.d.ts +4 -0
  395. package/engine/standard/fields/item.lua +6 -0
  396. package/engine/standard/fields/unit.d.ts +12 -0
  397. package/engine/standard/fields/unit.lua +20 -0
  398. package/engine/synchronization.d.ts +11 -0
  399. package/engine/synchronization.lua +77 -0
  400. package/engine/text-tag.d.ts +36 -2
  401. package/engine/text-tag.lua +250 -10
  402. package/engine/unit.d.ts +13 -0
  403. package/engine/unit.lua +13 -0
  404. package/event.d.ts +1 -1
  405. package/index.d.ts +1 -0
  406. package/index.lua +1 -0
  407. package/lualib_bundle.lua +8 -3
  408. package/math.d.ts +2 -0
  409. package/math.lua +14 -0
  410. package/net/socket.d.ts +7 -1
  411. package/net/socket.lua +45 -4
  412. package/network.d.ts +1 -0
  413. package/network.lua +28 -3
  414. package/objutil/buff.lua +13 -12
  415. package/objutil/object.lua +1 -1
  416. package/objutil/unit.lua +8 -0
  417. package/operation.d.ts +8 -1
  418. package/operation.lua +38 -18
  419. package/package.json +3 -23
  420. package/patch-lua.d.ts +0 -0
  421. package/patch-lua.lua +25 -0
  422. package/patch-lualib.lua +1 -1
  423. package/property.d.ts +55 -0
  424. package/property.lua +374 -0
  425. package/utility/arrays.d.ts +11 -1
  426. package/utility/arrays.lua +57 -3
  427. package/utility/callback-array.d.ts +17 -0
  428. package/utility/callback-array.lua +61 -0
  429. package/utility/functions.d.ts +8 -0
  430. package/utility/functions.lua +13 -0
  431. package/utility/lazy.d.ts +2 -0
  432. package/utility/lazy.lua +14 -0
  433. package/utility/linked-map.d.ts +35 -0
  434. package/utility/linked-map.lua +107 -0
  435. package/utility/linked-set.d.ts +16 -3
  436. package/utility/linked-set.lua +54 -3
  437. package/utility/lua-maps.d.ts +15 -2
  438. package/utility/lua-maps.lua +53 -2
  439. package/utility/lua-sets.d.ts +2 -0
  440. package/utility/lua-sets.lua +7 -0
  441. package/utility/random.d.ts +102 -0
  442. package/utility/random.lua +273 -0
  443. package/utility/records.lua +20 -1
  444. package/utility/reflection.lua +11 -7
  445. package/utility/types.d.ts +4 -0
  446. package/utility/unordered-map.d.ts +27 -0
  447. package/utility/unordered-map.lua +99 -0
  448. package/core/mapbounds.d.ts +0 -8
  449. package/core/mapbounds.lua +0 -12
  450. package/core/types/order.d.ts +0 -25
  451. package/core/types/order.lua +0 -55
  452. /package/engine/internal/{object-data/armor-increase.d.ts → misc/ability-disable-counter.d.ts} +0 -0
  453. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  454. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  455. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -6,6 +6,7 @@ local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
+ local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
9
10
  local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
10
11
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
11
12
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
@@ -46,37 +47,44 @@ local checkNotNull = ____preconditions.checkNotNull
46
47
  local ____constants = require("engine.constants")
47
48
  local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
48
49
  local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
49
- local ____arrays = require("utility.arrays")
50
- local forEach = ____arrays.forEach
51
- local ____math = require("math")
52
- 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
53
67
  local match = string.match
54
68
  local ____tostring = _G.tostring
55
69
  local setUnitAnimation = SetUnitAnimation
56
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
57
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
58
- local queueUnitAnimation = QueueUnitAnimation
59
71
  local getUnitIntegerField = BlzGetUnitIntegerField
60
72
  local getUnitRealField = BlzGetUnitRealField
61
73
  local getHeroStr = GetHeroStr
62
74
  local getHeroAgi = GetHeroAgi
63
75
  local getHeroInt = GetHeroInt
64
- local setHeroStr = SetHeroStr
65
- local setHeroAgi = SetHeroAgi
66
- local setHeroInt = SetHeroInt
67
76
  local getUnitBooleanField = BlzGetUnitBooleanField
68
77
  local getUnitStringField = BlzGetUnitStringField
69
78
  local setUnitIntegerField = BlzSetUnitIntegerField
70
79
  local setUnitRealField = BlzSetUnitRealField
71
80
  local setUnitBooleanField = BlzSetUnitBooleanField
72
81
  local setUnitStringField = BlzSetUnitStringField
73
- local setUnitScale = SetUnitScale
74
82
  local setUnitPosition = SetUnitPosition
75
83
  local setUnitTimeScale = SetUnitTimeScale
76
84
  local getHandleId = GetHandleId
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
77
86
  local createUnit = CreateUnit
78
87
  local killUnit = KillUnit
79
- local setUnitExploded = SetUnitExploded
80
88
  local removeUnit = RemoveUnit
81
89
  local getUnitTypeId = GetUnitTypeId
82
90
  local isHeroUnitId = IsHeroUnitId
@@ -92,15 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
92
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
93
101
  local isUnitInRangeXY = IsUnitInRangeXY
94
102
  local isUnitInRange = IsUnitInRange
95
- local setResourceAmount = SetResourceAmount
96
- local getResourceAmount = GetResourceAmount
97
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
98
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
99
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
100
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
101
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
102
108
  local unitDisableAbility = BlzUnitDisableAbility
103
- local unitInterruptAttack = BlzUnitInterruptAttack
104
109
  local isUnitInvisible = IsUnitInvisible
105
110
  local isUnitVisible = IsUnitVisible
106
111
  local getUnitX = GetUnitX
@@ -117,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
117
122
  local getIssuedOrderId = GetIssuedOrderId
118
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
119
124
  local unitAlive = UnitAlive
120
- local unitAddType = UnitAddType
121
- local unitRemoveType = UnitRemoveType
122
- local isUnitIllusion = IsUnitIllusion
123
- local isUnitType = IsUnitType
124
125
  local isUnitAlly = IsUnitAlly
125
126
  local isUnitEnemy = IsUnitEnemy
126
127
  local getOwningPlayer = GetOwningPlayer
127
- local setUnitColor = SetUnitColor
128
- local showUnitTeamGlow = BlzShowUnitTeamGlow
129
128
  ____exports.UnitClassification = {}
130
129
  local UnitClassification = ____exports.UnitClassification
131
130
  do
@@ -135,6 +134,7 @@ do
135
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
136
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
137
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
138
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
139
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
140
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -289,7 +289,6 @@ local function dispatch(event, idGetter, argsGetter)
289
289
  return event[id]
290
290
  end
291
291
  if not initialized then
292
- local invoke = Event.invoke
293
292
  event:addListener(function(...)
294
293
  local id = idGetter(...)
295
294
  local dispatched = rawget(self, id)
@@ -327,7 +326,6 @@ local function dispatchAbility(event)
327
326
  return event[id]
328
327
  end
329
328
  if not initialized then
330
- local invoke = Event.invoke
331
329
  event:addListener(function(unit, ability, ...)
332
330
  local dispatched = rawget(self, ability.typeId)
333
331
  if dispatched ~= nil then
@@ -344,6 +342,9 @@ local function dispatchAbility(event)
344
342
  }
345
343
  )
346
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
347
348
  local function damageEventPreventDeath(self, callback, ...)
348
349
  if self[0] ~= nil then
349
350
  return
@@ -355,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
355
356
  rawset(self, 1 + i, (select(i, ...)))
356
357
  end
357
358
  end
358
- 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
+ }
359
367
  local jlimitopByOperator = {
360
368
  [0] = LESS_THAN_OR_EQUAL,
361
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -373,15 +381,27 @@ local modifiers = {
373
381
  end,
374
382
  armor = function(unit, value)
375
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
376
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
377
389
  end
378
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
379
- assert(BlzSetAbilityRealLevelField(
380
- ability,
381
- armorBonusField,
382
- 0,
383
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
384
- ))
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
+ )
385
405
  end
386
406
  }
387
407
  local getters = {
@@ -399,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
399
419
  self.unit = unit
400
420
  self.index = index
401
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
+ )
402
435
  __TS__SetDescriptor(
403
436
  UnitWeapon.prototype,
404
437
  "cooldown",
@@ -433,6 +466,19 @@ __TS__SetDescriptor(
433
466
  },
434
467
  true
435
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
+ )
436
482
  __TS__SetDescriptor(
437
483
  UnitWeapon.prototype,
438
484
  "damageBase",
@@ -544,8 +590,6 @@ __TS__SetDescriptor(
544
590
  },
545
591
  true
546
592
  )
547
- local unitInventorySize = UnitInventorySize
548
- local unitItemInSlot = UnitItemInSlot
549
593
  local getItemAbility = BlzGetItemAbility
550
594
  local getUnitAbility = BlzGetUnitAbility
551
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -563,19 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
563
607
  ____exports.Unit:of(unit)
564
608
  )
565
609
  end
566
- if not unitAddAbility(unit, abilityId) then
567
- if getUnitAbility(unit, abilityId) == ability then
568
- return UnitAbility:of(
569
- ability,
570
- abilityId,
571
- ____exports.Unit:of(unit)
572
- )
573
- end
574
- else
575
- unitRemoveAbility(unit, abilityId)
576
- end
577
- for i = 0, unitInventorySize(unit) - 1 do
578
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
579
612
  if getItemAbility(item, abilityId) == ability then
580
613
  return ItemAbility:of(
581
614
  ability,
@@ -620,26 +653,30 @@ local fieldSetters = {
620
653
  }
621
654
  local dummies = {}
622
655
  for ____, player in ipairs(Player.all) do
623
- local dummy = assert(createUnit(
624
- player.handle,
625
- dummyUnitId,
626
- 0,
627
- 0,
628
- 270
629
- ))
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
+ )
630
667
  ShowUnit(dummy, false)
631
668
  dummies[player] = dummy
632
669
  end
633
670
  local function delayHealthChecksCallback(unit)
634
- local counter = (unit[102] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
635
672
  if counter ~= 0 then
636
- unit[102] = counter
673
+ unit[104] = counter
637
674
  return
638
675
  end
639
- unit[102] = nil
640
- local healthBonus = unit[103]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
641
678
  if healthBonus ~= nil then
642
- unit[103] = nil
679
+ unit[105] = nil
643
680
  local handle = unit.handle
644
681
  BlzSetUnitMaxHP(
645
682
  handle,
@@ -647,45 +684,84 @@ local function delayHealthChecksCallback(unit)
647
684
  )
648
685
  end
649
686
  end
687
+ local nextSyncId = 1
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
650
699
  ____exports.Unit = __TS__Class()
651
700
  local Unit = ____exports.Unit
652
701
  Unit.name = "Unit"
653
702
  __TS__ClassExtends(Unit, Handle)
654
703
  function Unit.prototype.____constructor(self, handle)
655
704
  Handle.prototype.____constructor(self, handle)
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
656
708
  self._owner = Player:of(getOwningPlayer(handle))
657
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
658
- 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
+ )
659
719
  if unitAddAbility(
660
720
  handle,
661
721
  fourCC("Amrf")
662
722
  ) then
663
- assert(unitRemoveAbility(
664
- handle,
665
- fourCC("Amrf")
666
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
667
731
  end
732
+ unitBySyncId[self.syncId] = self
668
733
  local ____ = self.abilities
669
734
  end
670
- function Unit.prototype.getEvent(self, event, collector)
671
- self.events = self.events or ({})
672
- local eventId = GetHandleId(event)
673
- if not self.events[eventId] then
674
- 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(
675
741
  TriggerEvent,
676
742
  function(trigger)
677
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
678
744
  end,
679
745
  collector or (function() return {} end)
680
746
  )
747
+ self.events:put(eventId, event)
681
748
  end
682
- 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))
683
756
  end
684
757
  function Unit.prototype.onDestroy(self)
685
758
  local handle = self.handle
686
- if not self._owner then
687
- self._owner = Player:of(getOwningPlayer(handle))
759
+ self:saveData()
760
+ local abilities = self.abilities
761
+ for ____, ability in ipairs(abilities) do
762
+ ability:destroy()
688
763
  end
764
+ __TS__ArraySetLength(abilities, 0)
689
765
  for ____, player in ipairs(Player.all) do
690
766
  if self:isSelected(player) then
691
767
  Event.invoke(____exports.Unit.onDeselect, self, player)
@@ -698,7 +774,13 @@ function Unit.prototype.onDestroy(self)
698
774
  end
699
775
  local eventsToDestroy = self._eventsToDestroy
700
776
  if eventsToDestroy ~= nil then
701
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
780
+ end
781
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
782
+ unitRemoveAbility(handle, leaveDetectAbilityId)
783
+ removeUnit(handle)
702
784
  end
703
785
  return Handle.prototype.onDestroy(self)
704
786
  end
@@ -712,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
712
794
  self._attackHandlers = handlers
713
795
  if #handlers == 1 then
714
796
  local handle = self.handle
715
- 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
+ )
716
802
  end
717
803
  return handler
718
804
  end
@@ -741,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
741
827
  end}
742
828
  end
743
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
744
- local ____combatClassification_0 = combatClassification
745
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
746
832
  end
747
833
  function Unit.prototype.addClassification(self, classification)
748
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
749
835
  end
750
836
  function Unit.prototype.removeClassification(self, classification)
751
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
752
838
  end
753
839
  function Unit.prototype.hasClassification(self, classification)
754
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
755
841
  end
756
842
  function Unit.prototype.isVisibleTo(self, player)
757
843
  return isUnitVisible(self.handle, player.handle)
@@ -760,13 +846,13 @@ function Unit.prototype.isInvisibleTo(self, player)
760
846
  return isUnitInvisible(self.handle, player.handle)
761
847
  end
762
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
763
- local ____temp_1
849
+ local ____temp_3
764
850
  if type(x) == "number" then
765
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
766
852
  else
767
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
853
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
768
854
  end
769
- return ____temp_1
855
+ return ____temp_3
770
856
  end
771
857
  function Unit.prototype.isAllyOf(self, unit)
772
858
  return isUnitAlly(
@@ -784,16 +870,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
784
870
  if type(animation) == "number" then
785
871
  setUnitAnimationByIndex(self.handle, animation)
786
872
  elseif rarity then
787
- setUnitAnimationWithRarity(self.handle, animation, rarity)
873
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
788
874
  else
789
875
  setUnitAnimation(self.handle, animation)
790
876
  end
791
877
  end
878
+ function Unit.prototype.resetAnimation(self)
879
+ ResetUnitAnimation(self.handle)
880
+ end
792
881
  function Unit.prototype.queueAnimation(self, animation)
793
- queueUnitAnimation(self.handle, animation)
882
+ QueueUnitAnimation(self.handle, animation)
883
+ end
884
+ function Unit.prototype.chooseWeapon(self, target)
885
+ local firstWeapon = self.firstWeapon
886
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
887
+ return firstWeapon
888
+ end
889
+ local secondWeapon = self.secondWeapon
890
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
891
+ return secondWeapon
892
+ end
893
+ return nil
794
894
  end
795
895
  function Unit.prototype.delayHealthChecks(self)
796
- self[102] = (self[102] or 0) + 1
896
+ self[104] = (self[104] or 0) + 1
797
897
  Timer:run(delayHealthChecksCallback, self)
798
898
  end
799
899
  function Unit.prototype.setPosition(self, x, y)
@@ -803,21 +903,21 @@ function Unit.prototype.isSelected(self, player)
803
903
  return IsUnitSelected(self.handle, player.handle)
804
904
  end
805
905
  function Unit.prototype.explode(self)
806
- setUnitExploded(self.handle, true)
906
+ SetUnitExploded(self.handle, true)
807
907
  killUnit(self.handle)
808
908
  end
809
909
  function Unit.prototype.kill(self)
810
910
  killUnit(self.handle)
811
911
  end
812
912
  function Unit.prototype.revive(self, x, y, doEffect)
813
- local ____ReviveHero_4 = ReviveHero
814
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
815
- local ____doEffect_2 = doEffect
816
- if ____doEffect_2 == nil then
817
- ____doEffect_2 = false
913
+ local ____ReviveHero_6 = ReviveHero
914
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
915
+ local ____doEffect_4 = doEffect
916
+ if ____doEffect_4 == nil then
917
+ ____doEffect_4 = false
818
918
  end
819
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
820
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
919
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
920
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
821
921
  end
822
922
  function Unit.prototype.healTarget(self, target, amount)
823
923
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -860,17 +960,16 @@ function Unit.prototype.itemInSlot(self, slot)
860
960
  return Item:of(UnitItemInSlot(self.handle, slot))
861
961
  end
862
962
  function Unit.prototype.addAbility(self, abilityId)
863
- if unitAddAbility(self.handle, abilityId) then
864
- local ability = UnitAbility:of(
865
- checkNotNull(getUnitAbility(self.handle, abilityId)),
866
- abilityId,
867
- self
868
- )
963
+ local ability = UnitAbility:of(
964
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
965
+ abilityId,
966
+ self
967
+ )
968
+ if ability ~= nil then
869
969
  local abilities = self.abilities
870
970
  abilities[#abilities + 1] = ability
871
- return ability
872
971
  end
873
- return nil
972
+ return ability
874
973
  end
875
974
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
876
975
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -884,31 +983,21 @@ end
884
983
  function Unit.prototype.hasAbility(self, abilityId)
885
984
  return getUnitAbilityLevel(self.handle, abilityId) > 0
886
985
  end
887
- function Unit.prototype.getAbilityById(self, abilityId)
888
- local handle = self.handle
889
- if unitAddAbility(handle, abilityId) then
890
- assert(unitRemoveAbility(handle, abilityId))
891
- return nil
892
- end
893
- return UnitAbility:of(
894
- getUnitAbility(self.handle, abilityId),
895
- abilityId,
896
- self
897
- )
986
+ function Unit.prototype.getAbility(self, abilityId)
987
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
988
+ return UnitAbility:of(ability, abilityId, self)
898
989
  end
899
- function Unit.prototype.removeAbility(self, abilityId)
900
- if unitRemoveAbility(self.handle, abilityId) then
901
- local abilities = self.abilities
902
- for i = 1, #abilities do
903
- if abilities[i].typeId == abilityId then
904
- abilities[i]:destroy()
905
- tremove(abilities, i)
906
- return true
907
- end
990
+ function Unit.prototype.removeAbility(self, abilityTypeId)
991
+ local abilities = self.abilities
992
+ for i = 1, #abilities do
993
+ if abilities[i].typeId == abilityTypeId then
994
+ local ability = abilities[i]
995
+ tremove(abilities, i)
996
+ ability:destroy()
997
+ return true
908
998
  end
909
- return true
910
999
  end
911
- return false
1000
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
912
1001
  end
913
1002
  function Unit.prototype.hideAbility(self, abilityId, flag)
914
1003
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -922,12 +1011,16 @@ end
922
1011
  function Unit.prototype.endAbilityCooldown(self, abilityId)
923
1012
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
924
1013
  end
925
- function Unit.prototype.interruptAttack(self)
926
- unitInterruptAttack(self.handle)
927
- end
928
1014
  function Unit.prototype.interruptCast(self, abilityId)
929
- unitDisableAbility(self.handle, abilityId, true, false)
930
- unitDisableAbility(self.handle, abilityId, false, false)
1015
+ local handle = self.handle
1016
+ unitDisableAbility(handle, abilityId, true, false)
1017
+ Timer:run(
1018
+ unitDisableAbility,
1019
+ handle,
1020
+ abilityId,
1021
+ false,
1022
+ false
1023
+ )
931
1024
  end
932
1025
  function Unit.prototype.getDistanceTo(self, target)
933
1026
  local handle = self.handle
@@ -987,18 +1080,44 @@ function Unit.prototype.unpauseEx(self)
987
1080
  self:decrementStunCounter()
988
1081
  end
989
1082
  function Unit.prototype.incrementStunCounter(self)
990
- local stunCounter = self[101] or 0
991
- if not self[100] or stunCounter >= 0 then
1083
+ local stunCounter = self[102] or 0
1084
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
992
1085
  BlzPauseUnitEx(self.handle, true)
993
1086
  end
994
- self[101] = stunCounter + 1
1087
+ self[102] = stunCounter + 1
995
1088
  end
996
1089
  function Unit.prototype.decrementStunCounter(self)
997
- local stunCounter = self[101] or 0
998
- if not self[100] or stunCounter >= 1 then
1090
+ local stunCounter = self[102] or 0
1091
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
999
1092
  BlzPauseUnitEx(self.handle, false)
1000
1093
  end
1001
- self[101] = stunCounter - 1
1094
+ self[102] = stunCounter - 1
1095
+ end
1096
+ function Unit.prototype.incrementForceStunCounter(self)
1097
+ local forceStunCounter = self[103] or 0
1098
+ if forceStunCounter == 0 then
1099
+ local handle = self.handle
1100
+ if not self[101] then
1101
+ for _ = self[102] or 0, -1 do
1102
+ BlzPauseUnitEx(handle, true)
1103
+ end
1104
+ end
1105
+ BlzPauseUnitEx(handle, true)
1106
+ end
1107
+ self[103] = forceStunCounter + 1
1108
+ end
1109
+ function Unit.prototype.decrementForceStunCounter(self)
1110
+ local forceStunCounter = self[103] or 0
1111
+ if forceStunCounter == 1 then
1112
+ local handle = self.handle
1113
+ if not self[101] then
1114
+ for _ = self[102] or 0, -1 do
1115
+ BlzPauseUnitEx(handle, false)
1116
+ end
1117
+ end
1118
+ BlzPauseUnitEx(handle, false)
1119
+ end
1120
+ self[103] = forceStunCounter - 1
1002
1121
  end
1003
1122
  function Unit.create(self, owner, id, x, y, facing, skinId)
1004
1123
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1100,8 +1219,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1100
1219
  )
1101
1220
  return targetCollection
1102
1221
  end
1103
- function Unit.getSelectionOf(self, player)
1104
- targetCollection = {}
1222
+ function Unit.getSelectionOf(self, player, target)
1223
+ if target == nil then
1224
+ target = {}
1225
+ end
1226
+ targetCollection = target
1105
1227
  targetCollectionNextIndex = 1
1106
1228
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1107
1229
  return targetCollection
@@ -1123,6 +1245,9 @@ end
1123
1245
  function Unit.prototype.__tostring(self)
1124
1246
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1125
1247
  end
1248
+ function Unit.getBySyncId(self, syncId)
1249
+ return unitBySyncId[syncId]
1250
+ end
1126
1251
  __TS__SetDescriptor(
1127
1252
  Unit.prototype,
1128
1253
  "_deltas",
@@ -1182,7 +1307,15 @@ __TS__SetDescriptor(
1182
1307
  Unit.prototype,
1183
1308
  "isIllusion",
1184
1309
  {get = function(self)
1185
- return isUnitIllusion(self.handle)
1310
+ return IsUnitIllusion(self.handle)
1311
+ end},
1312
+ true
1313
+ )
1314
+ __TS__SetDescriptor(
1315
+ Unit.prototype,
1316
+ "isStunned",
1317
+ {get = function(self)
1318
+ return getUnitCurrentOrder(self.handle) == 851973
1186
1319
  end},
1187
1320
  true
1188
1321
  )
@@ -1261,13 +1394,13 @@ __TS__SetDescriptor(
1261
1394
  )
1262
1395
  __TS__SetDescriptor(
1263
1396
  Unit.prototype,
1264
- "strengthBase",
1397
+ "primaryAttribute",
1265
1398
  {
1266
1399
  get = function(self)
1267
- return getHeroStr(self.handle, false)
1400
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1268
1401
  end,
1269
- set = function(self, strengthBase)
1270
- setHeroStr(self.handle, strengthBase, true)
1402
+ set = function(self, primaryAttribute)
1403
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1271
1404
  end
1272
1405
  },
1273
1406
  true
@@ -1289,19 +1422,6 @@ __TS__SetDescriptor(
1289
1422
  end},
1290
1423
  true
1291
1424
  )
1292
- __TS__SetDescriptor(
1293
- Unit.prototype,
1294
- "agilityBase",
1295
- {
1296
- get = function(self)
1297
- return getHeroAgi(self.handle, false)
1298
- end,
1299
- set = function(self, agilityBase)
1300
- setHeroAgi(self.handle, agilityBase, true)
1301
- end
1302
- },
1303
- true
1304
- )
1305
1425
  __TS__SetDescriptor(
1306
1426
  Unit.prototype,
1307
1427
  "agilityBonus",
@@ -1319,19 +1439,6 @@ __TS__SetDescriptor(
1319
1439
  end},
1320
1440
  true
1321
1441
  )
1322
- __TS__SetDescriptor(
1323
- Unit.prototype,
1324
- "intelligenceBase",
1325
- {
1326
- get = function(self)
1327
- return getHeroInt(self.handle, false)
1328
- end,
1329
- set = function(self, intelligenceBase)
1330
- setHeroInt(self.handle, intelligenceBase, true)
1331
- end
1332
- },
1333
- true
1334
- )
1335
1442
  __TS__SetDescriptor(
1336
1443
  Unit.prototype,
1337
1444
  "intelligenceBonus",
@@ -1380,17 +1487,17 @@ __TS__SetDescriptor(
1380
1487
  "isTeamGlowVisible",
1381
1488
  {
1382
1489
  get = function(self)
1383
- return not self[105]
1490
+ return not self[107]
1384
1491
  end,
1385
1492
  set = function(self, isTeamGlowVisible)
1386
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1387
- local ____temp_5
1493
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1494
+ local ____temp_7
1388
1495
  if not isTeamGlowVisible then
1389
- ____temp_5 = true
1496
+ ____temp_7 = true
1390
1497
  else
1391
- ____temp_5 = nil
1498
+ ____temp_7 = nil
1392
1499
  end
1393
- self[105] = ____temp_5
1500
+ self[107] = ____temp_7
1394
1501
  end
1395
1502
  },
1396
1503
  true
@@ -1399,9 +1506,9 @@ __TS__SetDescriptor(
1399
1506
  Unit.prototype,
1400
1507
  "color",
1401
1508
  {set = function(self, color)
1402
- setUnitColor(self.handle, color.handle)
1403
- if self[105] then
1404
- showUnitTeamGlow(self.handle, false)
1509
+ SetUnitColor(self.handle, color.handle)
1510
+ if self[107] then
1511
+ BlzShowUnitTeamGlow(self.handle, false)
1405
1512
  end
1406
1513
  end},
1407
1514
  true
@@ -1424,14 +1531,14 @@ __TS__SetDescriptor(
1424
1531
  "maxHealth",
1425
1532
  {
1426
1533
  get = function(self)
1427
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1534
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1428
1535
  end,
1429
1536
  set = function(self, maxHealth)
1430
- if maxHealth < 1 and self[102] ~= nil then
1431
- self[103] = (self[103] or 0) + (1 - maxHealth)
1537
+ if maxHealth < 1 and self[104] ~= nil then
1538
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1432
1539
  maxHealth = 1
1433
1540
  end
1434
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1541
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1435
1542
  end
1436
1543
  },
1437
1544
  true
@@ -1473,10 +1580,10 @@ __TS__SetDescriptor(
1473
1580
  "health",
1474
1581
  {
1475
1582
  get = function(self)
1476
- return GetWidgetLife(self.handle) - (self[104] or 0)
1583
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1477
1584
  end,
1478
1585
  set = function(self, health)
1479
- SetWidgetLife(self.handle, health + (self[104] or 0))
1586
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1480
1587
  end
1481
1588
  },
1482
1589
  true
@@ -1552,25 +1659,12 @@ __TS__SetDescriptor(
1552
1659
  },
1553
1660
  true
1554
1661
  )
1555
- __TS__SetDescriptor(
1556
- Unit.prototype,
1557
- "flyHeight",
1558
- {
1559
- get = function(self)
1560
- return getUnitFlyHeight(self.handle)
1561
- end,
1562
- set = function(self, v)
1563
- SetUnitFlyHeight(self.handle, v, 100000)
1564
- end
1565
- },
1566
- true
1567
- )
1568
1662
  __TS__SetDescriptor(
1569
1663
  Unit.prototype,
1570
1664
  "x",
1571
1665
  {
1572
1666
  get = function(self)
1573
- return getUnitX(self.handle)
1667
+ return self[108] or getUnitX(self.handle)
1574
1668
  end,
1575
1669
  set = function(self, v)
1576
1670
  SetUnitX(self.handle, v)
@@ -1583,7 +1677,7 @@ __TS__SetDescriptor(
1583
1677
  "y",
1584
1678
  {
1585
1679
  get = function(self)
1586
- return getUnitY(self.handle)
1680
+ return self[109] or getUnitY(self.handle)
1587
1681
  end,
1588
1682
  set = function(self, v)
1589
1683
  SetUnitY(self.handle, v)
@@ -1669,10 +1763,10 @@ __TS__SetDescriptor(
1669
1763
  "gold",
1670
1764
  {
1671
1765
  get = function(self)
1672
- return getResourceAmount(self.handle)
1766
+ return GetResourceAmount(self.handle)
1673
1767
  end,
1674
1768
  set = function(self, gold)
1675
- setResourceAmount(self.handle, gold)
1769
+ SetResourceAmount(self.handle, gold)
1676
1770
  end
1677
1771
  },
1678
1772
  true
@@ -1687,17 +1781,21 @@ __TS__SetDescriptor(
1687
1781
  set = function(self, isPaused)
1688
1782
  local handle = self.handle
1689
1783
  if isPaused and not IsUnitPaused(handle) then
1690
- self[100] = true
1691
- for _ = self[101] or 0, -1 do
1692
- BlzPauseUnitEx(handle, true)
1784
+ self[101] = true
1785
+ if (self[103] or 0) <= 0 then
1786
+ for _ = self[102] or 0, -1 do
1787
+ BlzPauseUnitEx(handle, true)
1788
+ end
1693
1789
  end
1694
1790
  PauseUnit(handle, true)
1695
1791
  elseif not isPaused and IsUnitPaused(handle) then
1696
1792
  PauseUnit(handle, false)
1697
- for _ = self[101] or 0, -1 do
1698
- BlzPauseUnitEx(handle, false)
1793
+ if (self[103] or 0) <= 0 then
1794
+ for _ = self[102] or 0, -1 do
1795
+ BlzPauseUnitEx(handle, false)
1796
+ end
1699
1797
  end
1700
- self[100] = nil
1798
+ self[101] = nil
1701
1799
  end
1702
1800
  end
1703
1801
  },
@@ -1753,20 +1851,6 @@ __TS__SetDescriptor(
1753
1851
  },
1754
1852
  true
1755
1853
  )
1756
- __TS__SetDescriptor(
1757
- Unit.prototype,
1758
- "scale",
1759
- {
1760
- get = function(self)
1761
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1762
- end,
1763
- set = function(self, v)
1764
- setUnitScale(self.handle, v, v, v)
1765
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1766
- end
1767
- },
1768
- true
1769
- )
1770
1854
  __TS__SetDescriptor(
1771
1855
  Unit.prototype,
1772
1856
  "timeScale",
@@ -1793,13 +1877,26 @@ __TS__SetDescriptor(
1793
1877
  Unit.prototype,
1794
1878
  "pathingCollisionRange",
1795
1879
  {get = function(self)
1796
- return 16 * (min(
1880
+ return 16 * (math.min(
1797
1881
  getUnitCollisionSize(self.handle) // 16,
1798
1882
  3
1799
1883
  ) + 1)
1800
1884
  end},
1801
1885
  true
1802
1886
  )
1887
+ __TS__SetDescriptor(
1888
+ Unit.prototype,
1889
+ "movementType",
1890
+ {
1891
+ get = function(self)
1892
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1893
+ end,
1894
+ set = function(self, movementType)
1895
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1896
+ end
1897
+ },
1898
+ true
1899
+ )
1803
1900
  __TS__SetDescriptor(
1804
1901
  Unit.prototype,
1805
1902
  "pathing",
@@ -1890,30 +1987,6 @@ __TS__SetDescriptor(
1890
1987
  end},
1891
1988
  true
1892
1989
  )
1893
- __TS__SetDescriptor(
1894
- Unit.prototype,
1895
- "onUnitInRange",
1896
- {get = function(self)
1897
- local handle = self.handle
1898
- local onUnitInRange = setmetatable(
1899
- {},
1900
- {__index = function(self, value)
1901
- local event = __TS__New(
1902
- TriggerEvent,
1903
- function(trigger)
1904
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1905
- end,
1906
- function() return ____exports.Unit:of(handle) end
1907
- )
1908
- rawset(self, value, event)
1909
- return event
1910
- end}
1911
- )
1912
- rawset(self, "onUnitInRange", onUnitInRange)
1913
- return onUnitInRange
1914
- end},
1915
- true
1916
- )
1917
1990
  __TS__SetDescriptor(
1918
1991
  Unit.prototype,
1919
1992
  "onManaEqual",
@@ -1981,6 +2054,14 @@ __TS__SetDescriptor(
1981
2054
  end},
1982
2055
  true
1983
2056
  )
2057
+ __TS__SetDescriptor(
2058
+ Unit.prototype,
2059
+ "targetAcquiredEvent",
2060
+ {get = function(self)
2061
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2062
+ end},
2063
+ true
2064
+ )
1984
2065
  __TS__SetDescriptor(
1985
2066
  Unit.prototype,
1986
2067
  "onSelect",
@@ -2041,6 +2122,11 @@ __TS__SetDescriptor(
2041
2122
  end},
2042
2123
  true
2043
2124
  )
2125
+ Unit.levelChangedEvent = __TS__New(
2126
+ ____exports.UnitTriggerEvent,
2127
+ EVENT_PLAYER_HERO_LEVEL,
2128
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2129
+ )
2044
2130
  Unit.deathEvent = __TS__New(
2045
2131
  ____exports.UnitTriggerEvent,
2046
2132
  EVENT_PLAYER_UNIT_DEATH,
@@ -2054,12 +2140,11 @@ Unit.onDecay = __TS__New(
2054
2140
  Unit.onResurrect = __TS__New(
2055
2141
  InitializingEvent,
2056
2142
  function(event)
2057
- local invoke = Event.invoke
2058
2143
  local dead = setmetatable({}, {__mode = "k"})
2059
2144
  ____exports.Unit.deathEvent:addListener(function(unit)
2060
2145
  dead[unit] = true
2061
2146
  end)
2062
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2147
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2063
2148
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2064
2149
  dead[unit] = false
2065
2150
  invoke(event, unit)
@@ -2070,10 +2155,15 @@ Unit.onResurrect = __TS__New(
2070
2155
  Unit.morphEvent = __TS__New(
2071
2156
  InitializingEvent,
2072
2157
  function(event)
2073
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2158
+ local function ifNotLeft(unit)
2159
+ local handle = unit.handle
2160
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2161
+ invoke(event, unit)
2162
+ end
2163
+ end
2164
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2074
2165
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2075
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2076
- Timer:run(Event.invoke, event, unit)
2166
+ Timer:run(ifNotLeft, unit)
2077
2167
  end
2078
2168
  end)
2079
2169
  end
@@ -2111,27 +2201,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2111
2201
  Unit.onTargetCast = dispatchId(__TS__New(
2112
2202
  InitializingEvent,
2113
2203
  function(event)
2114
- local invoke = Event.invoke
2115
2204
  local function listener(unit, id)
2116
- local ____GetSpellTargetUnit_result_8
2205
+ local ____GetSpellTargetUnit_result_10
2117
2206
  if GetSpellTargetUnit() then
2118
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2207
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2119
2208
  else
2120
- local ____GetSpellTargetItem_result_7
2209
+ local ____GetSpellTargetItem_result_9
2121
2210
  if GetSpellTargetItem() then
2122
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2211
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2123
2212
  else
2124
- local ____GetSpellTargetDestructable_result_6
2213
+ local ____GetSpellTargetDestructable_result_8
2125
2214
  if GetSpellTargetDestructable() then
2126
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2215
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2127
2216
  else
2128
- ____GetSpellTargetDestructable_result_6 = nil
2217
+ ____GetSpellTargetDestructable_result_8 = nil
2129
2218
  end
2130
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2219
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2131
2220
  end
2132
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2221
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2133
2222
  end
2134
- local target = ____GetSpellTargetUnit_result_8
2223
+ local target = ____GetSpellTargetUnit_result_10
2135
2224
  if target then
2136
2225
  invoke(event, unit, id, target)
2137
2226
  end
@@ -2303,10 +2392,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2303
2392
  ____exports.UnitTriggerEvent,
2304
2393
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2305
2394
  function()
2306
- local unit = ____exports.Unit:of(getOrderedUnit())
2307
- local issuedOrderId = getIssuedOrderId()
2308
- if unit ~= nil and unit.state == 1 then
2309
- return unit, issuedOrderId
2395
+ local handle = getOrderedUnit()
2396
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2397
+ local unit = ____exports.Unit:of(handle)
2398
+ if unit.state == 1 then
2399
+ return unit, getIssuedOrderId()
2400
+ end
2310
2401
  end
2311
2402
  return IgnoreEvent
2312
2403
  end
@@ -2328,7 +2419,6 @@ Unit.autoAttackStartEvent = __TS__New(
2328
2419
  )
2329
2420
  Unit.onDamaging = (function()
2330
2421
  local event = __TS__New(Event)
2331
- local invoke = Event.invoke
2332
2422
  local trigger = CreateTrigger()
2333
2423
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2334
2424
  TriggerAddCondition(
@@ -2338,38 +2428,57 @@ Unit.onDamaging = (function()
2338
2428
  if source and source.typeId == dummyUnitId then
2339
2429
  source = nil
2340
2430
  end
2341
- local target = BlzGetEventDamageTarget()
2431
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2432
+ local metadata = damageMetadataByTarget[target]
2433
+ damageMetadataByTarget[target] = nil
2342
2434
  local data = {
2343
2435
  amount = GetEventDamage(),
2344
- attackType = BlzGetEventAttackType(),
2436
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2345
2437
  damageType = BlzGetEventDamageType(),
2346
2438
  weaponType = BlzGetEventWeaponType(),
2347
- isAttack = BlzGetEventIsAttack()
2439
+ metadata = metadata,
2440
+ isAttack = BlzGetEventIsAttack(),
2441
+ originalAmount = GetEventDamage(),
2442
+ originalMetadata = metadata,
2443
+ preventRetaliation = damagingEventPreventRetaliation
2348
2444
  }
2349
2445
  if data.isAttack and source then
2350
- 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
2351
- if weapon == -1 then
2352
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2353
- weapon = 0
2354
- end
2355
- data.weapon = assert(source.weapons[weapon + 1])
2446
+ data.weapon = source:chooseWeapon(target)
2356
2447
  end
2357
2448
  if not data.isAttack or not source or not source._attackHandlers then
2358
2449
  invoke(
2359
2450
  event,
2360
2451
  source,
2361
- ____exports.Unit:of(target),
2452
+ target,
2362
2453
  setmetatable(
2363
2454
  {},
2364
2455
  {
2365
2456
  __index = data,
2366
2457
  __newindex = function(self, key, value)
2367
- damageSetters[key](value)
2458
+ local damageSetter = damageSetters[key]
2459
+ if damageSetter ~= nil then
2460
+ damageSetter(value)
2461
+ end
2368
2462
  data[key] = value
2369
2463
  end
2370
2464
  }
2371
2465
  )
2372
2466
  )
2467
+ if data[0] and source then
2468
+ local sourceOwner = source.owner.handle
2469
+ data[1] = sourceOwner
2470
+ local targetOwner = target.owner.handle
2471
+ data[2] = targetOwner
2472
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2473
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2474
+ data[3] = true
2475
+ end
2476
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2477
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2478
+ data[4] = true
2479
+ end
2480
+ end
2481
+ damagingEventByTarget[target] = data
2373
2482
  return
2374
2483
  end
2375
2484
  BlzSetEventDamage(0)
@@ -2377,7 +2486,7 @@ Unit.onDamaging = (function()
2377
2486
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2378
2487
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2379
2488
  local sourceOwner = source.owner.handle
2380
- local targetOwner = GetOwningPlayer(target)
2489
+ local targetOwner = target.owner.handle
2381
2490
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2382
2491
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2383
2492
  Timer:run(function()
@@ -2393,23 +2502,19 @@ Unit.onDamaging = (function()
2393
2502
  for ____, ____value in ipairs(source._attackHandlers) do
2394
2503
  local condition = ____value[1]
2395
2504
  local action = ____value[2]
2396
- if condition(
2397
- source,
2398
- ____exports.Unit:of(target),
2399
- data
2400
- ) then
2505
+ if condition(source, target, data) then
2401
2506
  action(
2402
2507
  source,
2403
- ____exports.Unit:of(target),
2508
+ target,
2404
2509
  setmetatable(
2405
2510
  {fire = function()
2406
2511
  UnitDamageTarget(
2407
2512
  source.handle,
2408
- target,
2513
+ target.handle,
2409
2514
  data.amount,
2410
2515
  true,
2411
2516
  true,
2412
- data.attackType,
2517
+ attackTypeToNative(data.attackType),
2413
2518
  data.damageType,
2414
2519
  data.weaponType
2415
2520
  )
@@ -2427,7 +2532,6 @@ end)()
2427
2532
  Unit.onDamage = __TS__New(
2428
2533
  InitializingEvent,
2429
2534
  function(event)
2430
- local invoke = Event.invoke
2431
2535
  local trigger = CreateTrigger()
2432
2536
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2433
2537
  TriggerAddCondition(
@@ -2437,29 +2541,54 @@ Unit.onDamage = __TS__New(
2437
2541
  if source and source.typeId == dummyUnitId then
2438
2542
  source = nil
2439
2543
  end
2544
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2545
+ local damagingEvent = damagingEventByTarget[target]
2546
+ damagingEventByTarget[target] = nil
2440
2547
  local data = {
2441
2548
  amount = GetEventDamage(),
2442
- attackType = BlzGetEventAttackType(),
2549
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2443
2550
  damageType = BlzGetEventDamageType(),
2444
2551
  weaponType = BlzGetEventWeaponType(),
2552
+ metadata = damagingEvent and damagingEvent.metadata,
2445
2553
  isAttack = BlzGetEventIsAttack(),
2554
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2555
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2446
2556
  preventDeath = damageEventPreventDeath
2447
2557
  }
2558
+ if damagingEvent then
2559
+ for key, value in pairs(damagingEvent) do
2560
+ if isAttribute(key) then
2561
+ data[key] = value
2562
+ end
2563
+ end
2564
+ local sourceOwner = damagingEvent[1]
2565
+ if sourceOwner then
2566
+ local targetOwner = damagingEvent[2]
2567
+ if damagingEvent[3] then
2568
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2569
+ end
2570
+ if damagingEvent[4] then
2571
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2572
+ end
2573
+ end
2574
+ end
2448
2575
  local evData = setmetatable(
2449
2576
  {},
2450
2577
  {
2451
2578
  __index = data,
2452
2579
  __newindex = function(self, key, value)
2453
- damageSetters[key](value)
2580
+ local damageSetter = damageSetters[key]
2581
+ if damageSetter ~= nil then
2582
+ damageSetter(value)
2583
+ end
2454
2584
  data[key] = value
2455
2585
  end
2456
2586
  }
2457
2587
  )
2458
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2459
2588
  invoke(event, source, target, evData)
2460
2589
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2461
2590
  local bonusHealth = math.ceil(evData.amount)
2462
- target[104] = (target[104] or 0) + bonusHealth
2591
+ target[106] = (target[106] or 0) + bonusHealth
2463
2592
  BlzSetUnitMaxHP(
2464
2593
  target.handle,
2465
2594
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2473,7 +2602,7 @@ Unit.onDamage = __TS__New(
2473
2602
  evData[0],
2474
2603
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2475
2604
  )
2476
- target[104] = (target[104] or 0) - bonusHealth
2605
+ target[106] = (target[106] or 0) - bonusHealth
2477
2606
  SetWidgetLife(
2478
2607
  target.handle,
2479
2608
  GetWidgetLife(target.handle) - bonusHealth
@@ -2493,32 +2622,60 @@ Unit.onDamage = __TS__New(
2493
2622
  DestroyTrigger(trigger)
2494
2623
  end
2495
2624
  )
2496
- Unit.onItemDrop = __TS__New(
2625
+ Unit.itemDroppedEvent = __TS__New(
2497
2626
  ____exports.UnitTriggerEvent,
2498
2627
  EVENT_PLAYER_UNIT_DROP_ITEM,
2499
2628
  function()
2500
2629
  local unit = getTriggerUnit()
2501
- if getUnitTypeId(unit) ~= dummyUnitId then
2502
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2630
+ local item = getManipulatedItem()
2631
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2632
+ return ____exports.Unit:of(unit), Item:of(item)
2503
2633
  end
2504
2634
  return IgnoreEvent
2505
2635
  end
2506
2636
  )
2507
- Unit.onItemPickup = __TS__New(
2637
+ Unit.itemPickedUpEvent = __TS__New(
2508
2638
  ____exports.UnitTriggerEvent,
2509
2639
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2510
2640
  function()
2511
- local unit = getTriggerUnit()
2512
- if getUnitTypeId(unit) ~= dummyUnitId then
2513
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2641
+ local unitHandle = getTriggerUnit()
2642
+ local itemHandle = getManipulatedItem()
2643
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2644
+ local unit = ____exports.Unit:of(unitHandle)
2645
+ local item = Item:of(itemHandle)
2646
+ if ownerByItem[item] ~= unit then
2647
+ return unit, item
2648
+ end
2514
2649
  end
2515
2650
  return IgnoreEvent
2516
2651
  end
2517
2652
  )
2518
- Unit.onItemUse = __TS__New(
2653
+ Unit.itemUsedEvent = __TS__New(
2519
2654
  ____exports.UnitTriggerEvent,
2520
2655
  EVENT_PLAYER_UNIT_USE_ITEM,
2521
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2656
+ function()
2657
+ local unit = getTriggerUnit()
2658
+ local item = getManipulatedItem()
2659
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2660
+ return ____exports.Unit:of(unit), Item:of(item)
2661
+ end
2662
+ return IgnoreEvent
2663
+ end
2664
+ )
2665
+ __TS__ObjectDefineProperty(
2666
+ Unit,
2667
+ "itemChargesChangedEvent",
2668
+ {get = function(self)
2669
+ local event = __TS__New(Event)
2670
+ Item.chargesChangedEvent:addListener(function(item)
2671
+ local unit = item.owner
2672
+ if unit ~= nil then
2673
+ invoke(event, unit, item)
2674
+ end
2675
+ end)
2676
+ rawset(self, "itemChargesChangedEvent", event)
2677
+ return event
2678
+ end}
2522
2679
  )
2523
2680
  __TS__ObjectDefineProperty(
2524
2681
  Unit,
@@ -2545,6 +2702,10 @@ __TS__ObjectDefineProperty(
2545
2702
  rawset(self, "destroyEvent", destroyEvent)
2546
2703
  return destroyEvent
2547
2704
  end}
2705
+ )
2706
+ Unit.synchronize = synchronizer(
2707
+ function(unit) return unit.syncId end,
2708
+ function(syncId) return unitBySyncId[syncId] end
2548
2709
  );
2549
2710
  (function(self)
2550
2711
  local leaveAbilityIds = postcompile(function()
@@ -2562,11 +2723,7 @@ __TS__ObjectDefineProperty(
2562
2723
  function(____, id) return fourCC(id) end
2563
2724
  )
2564
2725
  end)
2565
- for ____, leaveOrderId in ipairs({
2566
- orderId("undefend"),
2567
- orderId("magicundefense"),
2568
- orderId("unimmolation")
2569
- }) do
2726
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2570
2727
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2571
2728
  local handle = unit.handle
2572
2729
  for i = 1, #leaveAbilityIds do
@@ -2574,7 +2731,8 @@ __TS__ObjectDefineProperty(
2574
2731
  return
2575
2732
  end
2576
2733
  end
2577
- unit:destroy()
2734
+ unit:saveData()
2735
+ Timer:run(unit, "destroy")
2578
2736
  end)
2579
2737
  end
2580
2738
  end)(Unit)