warscript 0.0.1-dev.0a43a35 → 0.0.1-dev.0aa6f08

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