warscript 0.0.1-dev.4f7cd3b → 0.0.1-dev.524fae9

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