warscript 0.0.1-dev.29b3feb → 0.0.1-dev.29e90d8

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