warscript 0.0.1-dev.099f0af → 0.0.1-dev.09d09c4

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