warscript 0.0.1-dev.8c7ee30 → 0.0.1-dev.8d8d605

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