warscript 0.0.1-dev.9cbb1ff → 0.0.1-dev.9d07b64

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 (388) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +11 -1
  5. package/core/types/effect.lua +43 -77
  6. package/core/types/frame.d.ts +16 -2
  7. package/core/types/frame.lua +141 -77
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/player.d.ts +18 -1
  12. package/core/types/player.lua +76 -26
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/playerColor.lua +4 -3
  16. package/core/types/sound.d.ts +1 -1
  17. package/core/types/sound.lua +14 -9
  18. package/core/types/tileCell.d.ts +18 -3
  19. package/core/types/tileCell.lua +108 -0
  20. package/core/types/timer.d.ts +3 -1
  21. package/core/types/timer.lua +27 -2
  22. package/core/types/unit.d.ts +5 -0
  23. package/core/types/unit.lua +5 -0
  24. package/core/util.d.ts +3 -1
  25. package/core/util.lua +109 -3
  26. package/decl/native.d.ts +1718 -964
  27. package/destroyable.d.ts +1 -0
  28. package/destroyable.lua +9 -0
  29. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  30. package/engine/ability-type-extended-tooltip.lua +44 -0
  31. package/engine/behavior.d.ts +14 -1
  32. package/engine/behavior.lua +230 -70
  33. package/engine/behaviour/ability/apply-buff.lua +5 -5
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  35. package/engine/behaviour/ability/damage.d.ts +10 -3
  36. package/engine/behaviour/ability/damage.lua +41 -49
  37. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  38. package/engine/behaviour/ability/emulate-impact.lua +16 -7
  39. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  40. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  41. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  42. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  43. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  44. package/engine/behaviour/ability/restore-mana.lua +6 -6
  45. package/engine/behaviour/ability.d.ts +13 -6
  46. package/engine/behaviour/ability.lua +109 -25
  47. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  48. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  49. package/engine/behaviour/unit.d.ts +40 -3
  50. package/engine/behaviour/unit.lua +270 -6
  51. package/engine/buff.d.ts +114 -58
  52. package/engine/buff.lua +567 -303
  53. package/engine/index.d.ts +2 -1
  54. package/engine/internal/ability.d.ts +14 -1
  55. package/engine/internal/ability.lua +113 -44
  56. package/engine/internal/item/ability.lua +63 -11
  57. package/engine/internal/item/fields.d.ts +12 -0
  58. package/engine/internal/item/fields.lua +33 -0
  59. package/engine/internal/item/owner-cache.d.ts +5 -0
  60. package/engine/internal/item/owner-cache.lua +4 -0
  61. package/engine/internal/item+owner.d.ts +2 -0
  62. package/engine/internal/item+owner.lua +37 -8
  63. package/engine/internal/item.d.ts +32 -16
  64. package/engine/internal/item.lua +257 -82
  65. package/engine/internal/mechanics/cast-ability.lua +6 -3
  66. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  67. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  68. package/engine/internal/misc/frame-coordinates.lua +21 -0
  69. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  70. package/engine/internal/misc/get-terrain-z.lua +11 -0
  71. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  72. package/engine/internal/misc/player-local-handle.lua +5 -0
  73. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  74. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  75. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  76. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  77. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  78. package/engine/internal/object-data/health-bonus.lua +16 -0
  79. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  80. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  81. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/mana-bonus.lua +16 -0
  83. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  84. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  85. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  86. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  87. package/engine/internal/unit/ability.d.ts +35 -0
  88. package/engine/internal/unit/ability.lua +98 -9
  89. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  90. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  91. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  92. package/engine/internal/unit/allowed-targets.lua +9 -1
  93. package/engine/internal/unit/appearance.d.ts +15 -0
  94. package/engine/internal/unit/appearance.lua +85 -0
  95. package/engine/internal/unit/attributes.d.ts +17 -0
  96. package/engine/internal/unit/attributes.lua +46 -0
  97. package/engine/internal/unit/bonus.d.ts +17 -0
  98. package/engine/internal/unit/bonus.lua +113 -8
  99. package/engine/internal/unit/buff.d.ts +2 -2
  100. package/engine/internal/unit/buff.lua +34 -19
  101. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  102. package/engine/internal/unit/equipment-inventory.lua +233 -0
  103. package/engine/internal/unit/expiration-timer.lua +1 -1
  104. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  105. package/engine/internal/unit/extended-inventory.lua +99 -0
  106. package/engine/internal/unit/fly-height.d.ts +7 -0
  107. package/engine/internal/unit/fly-height.lua +20 -0
  108. package/engine/internal/unit/ignore-events-items.lua +10 -1
  109. package/engine/internal/unit/interrupts.d.ts +12 -0
  110. package/engine/internal/unit/interrupts.lua +28 -0
  111. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  112. package/engine/internal/unit/inventory.lua +87 -0
  113. package/engine/internal/unit/item-container.d.ts +25 -0
  114. package/engine/internal/unit/item-container.lua +11 -0
  115. package/engine/internal/unit/item-order-events.d.ts +17 -0
  116. package/engine/internal/unit/item-order-events.lua +67 -0
  117. package/engine/internal/unit/item-slot.d.ts +27 -0
  118. package/engine/internal/unit/item-slot.lua +92 -0
  119. package/engine/internal/unit/main-selected.lua +12 -27
  120. package/engine/internal/unit/order.d.ts +20 -0
  121. package/engine/internal/unit/order.lua +136 -0
  122. package/engine/internal/unit/range-event.d.ts +12 -0
  123. package/engine/internal/unit/range-event.lua +90 -0
  124. package/engine/internal/unit/scale.d.ts +7 -0
  125. package/engine/internal/unit/scale.lua +20 -0
  126. package/engine/internal/unit+ability.d.ts +2 -1
  127. package/engine/internal/unit+ability.lua +73 -3
  128. package/engine/internal/unit+bonus.lua +3 -3
  129. package/engine/internal/unit+damage.d.ts +11 -11
  130. package/engine/internal/unit+damage.lua +43 -14
  131. package/engine/internal/unit+rally.lua +9 -31
  132. package/engine/internal/unit+spellSteal.lua +1 -2
  133. package/engine/internal/unit-missile-data.lua +58 -32
  134. package/engine/internal/unit-missile-launch.lua +65 -27
  135. package/engine/internal/unit.d.ts +35 -36
  136. package/engine/internal/unit.lua +381 -336
  137. package/engine/local-client.d.ts +28 -0
  138. package/engine/local-client.lua +324 -54
  139. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  140. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  141. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  142. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  143. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  144. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  145. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  146. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  147. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  148. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  149. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  150. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  151. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  152. package/engine/object-data/auxiliary/item-class.lua +2 -0
  153. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  154. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  155. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  156. package/engine/object-data/auxiliary/order-type.lua +2 -0
  157. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  158. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  159. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  160. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  161. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  162. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  163. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  164. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  165. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  166. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  167. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  168. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  169. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  170. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  171. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  172. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  173. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  174. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  175. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  176. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  177. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  178. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  179. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  180. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  181. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  182. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  183. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  184. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  185. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  186. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  187. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  188. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  189. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  190. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  191. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  192. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  193. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  194. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  195. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  196. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  197. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  198. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  199. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  200. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  201. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  202. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  203. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  204. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  205. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  206. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  207. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  208. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  209. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  210. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  211. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  212. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  213. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  214. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  215. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  216. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  217. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  218. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  219. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  220. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  221. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  222. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  223. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  224. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  225. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  226. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  227. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  228. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  229. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  230. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  231. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  232. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  233. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  234. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  235. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  236. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  237. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  238. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  239. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  240. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  241. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  242. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  243. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  244. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  245. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  246. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  247. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  248. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  249. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  250. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  251. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  252. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  253. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  254. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  255. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  256. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  257. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  258. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  259. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  260. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  261. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  262. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  263. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  264. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  265. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  266. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  267. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  268. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  269. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  270. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  271. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  272. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  273. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  274. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  275. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  276. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  277. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  278. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  279. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  280. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  281. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  282. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  283. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  284. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  285. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  286. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  287. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  288. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  289. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  290. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  291. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  292. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  293. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  294. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  295. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  296. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  297. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  298. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  299. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  300. package/engine/object-data/entry/ability-type.d.ts +33 -8
  301. package/engine/object-data/entry/ability-type.lua +291 -15
  302. package/engine/object-data/entry/buff-type/applicable.lua +122 -111
  303. package/engine/object-data/entry/buff-type.d.ts +6 -2
  304. package/engine/object-data/entry/buff-type.lua +26 -0
  305. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  306. package/engine/object-data/entry/destructible-type.lua +181 -0
  307. package/engine/object-data/entry/item-type.d.ts +18 -3
  308. package/engine/object-data/entry/item-type.lua +84 -0
  309. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  310. package/engine/object-data/entry/lightning-type.lua +1 -1
  311. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  312. package/engine/object-data/entry/unit-type.d.ts +74 -6
  313. package/engine/object-data/entry/unit-type.lua +552 -98
  314. package/engine/object-data/entry/upgrade.d.ts +2 -2
  315. package/engine/object-data/entry.d.ts +6 -1
  316. package/engine/object-data/entry.lua +8 -0
  317. package/engine/object-field/ability.d.ts +4 -4
  318. package/engine/object-field/ability.lua +9 -8
  319. package/engine/object-field/item.d.ts +22 -0
  320. package/engine/object-field/item.lua +118 -0
  321. package/engine/object-field/unit.d.ts +72 -3
  322. package/engine/object-field/unit.lua +268 -7
  323. package/engine/object-field.d.ts +18 -7
  324. package/engine/object-field.lua +294 -135
  325. package/engine/random.d.ts +10 -0
  326. package/engine/random.lua +21 -0
  327. package/engine/standard/entries/ability-type.d.ts +3102 -7
  328. package/engine/standard/entries/ability-type.lua +0 -6
  329. package/engine/standard/entries/buff-type.d.ts +45 -0
  330. package/engine/standard/entries/buff-type.lua +43 -0
  331. package/engine/standard/entries/item-type.d.ts +1299 -0
  332. package/engine/standard/entries/item-type.lua +2 -0
  333. package/engine/standard/entries/lightning-type.d.ts +42 -15
  334. package/engine/standard/entries/lightning-type.lua +0 -14
  335. package/engine/standard/entries/unit-type.d.ts +5 -0
  336. package/engine/standard/entries/unit-type.lua +5 -0
  337. package/engine/standard/fields/ability.d.ts +4 -4
  338. package/engine/standard/fields/ability.lua +4 -4
  339. package/engine/standard/fields/item.d.ts +4 -0
  340. package/engine/standard/fields/item.lua +6 -0
  341. package/engine/standard/fields/unit.d.ts +12 -0
  342. package/engine/standard/fields/unit.lua +20 -0
  343. package/engine/synchronization.d.ts +11 -0
  344. package/engine/synchronization.lua +77 -0
  345. package/engine/text-tag.d.ts +36 -2
  346. package/engine/text-tag.lua +250 -10
  347. package/engine/unit.d.ts +11 -1
  348. package/engine/unit.lua +11 -1
  349. package/event.d.ts +1 -1
  350. package/lualib_bundle.lua +1 -1
  351. package/math.d.ts +2 -0
  352. package/math.lua +14 -0
  353. package/net/socket.lua +1 -1
  354. package/network.lua +25 -1
  355. package/objutil/buff.lua +12 -11
  356. package/objutil/object.lua +1 -1
  357. package/operation.d.ts +8 -1
  358. package/operation.lua +38 -18
  359. package/package.json +3 -23
  360. package/patch-lua.lua +15 -0
  361. package/patch-lualib.lua +1 -1
  362. package/utility/arrays.d.ts +9 -1
  363. package/utility/arrays.lua +28 -0
  364. package/utility/callback-array.d.ts +17 -0
  365. package/utility/callback-array.lua +61 -0
  366. package/utility/functions.d.ts +8 -0
  367. package/utility/functions.lua +13 -0
  368. package/utility/linked-map.d.ts +35 -0
  369. package/utility/linked-map.lua +107 -0
  370. package/utility/linked-set.d.ts +4 -1
  371. package/utility/linked-set.lua +46 -1
  372. package/utility/lua-maps.d.ts +12 -2
  373. package/utility/lua-maps.lua +37 -2
  374. package/utility/lua-sets.d.ts +1 -0
  375. package/utility/lua-sets.lua +4 -0
  376. package/utility/random.d.ts +102 -0
  377. package/utility/random.lua +273 -0
  378. package/utility/records.lua +20 -1
  379. package/utility/types.d.ts +3 -0
  380. package/utility/unordered-map.d.ts +27 -0
  381. package/utility/unordered-map.lua +99 -0
  382. package/core/types/order.d.ts +0 -25
  383. package/core/types/order.lua +0 -55
  384. package/engine/internal/unit/item.lua +0 -78
  385. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  386. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  387. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  388. /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,41 +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
54
50
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
- local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
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
56
67
  local match = string.match
57
68
  local ____tostring = _G.tostring
58
69
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local resetUnitAnimation = ResetUnitAnimation
62
- local queueUnitAnimation = QueueUnitAnimation
63
71
  local getUnitIntegerField = BlzGetUnitIntegerField
64
72
  local getUnitRealField = BlzGetUnitRealField
65
73
  local getHeroStr = GetHeroStr
66
74
  local getHeroAgi = GetHeroAgi
67
75
  local getHeroInt = GetHeroInt
68
- local setHeroStr = SetHeroStr
69
- local setHeroAgi = SetHeroAgi
70
- local setHeroInt = SetHeroInt
71
76
  local getUnitBooleanField = BlzGetUnitBooleanField
72
77
  local getUnitStringField = BlzGetUnitStringField
73
78
  local setUnitIntegerField = BlzSetUnitIntegerField
74
79
  local setUnitRealField = BlzSetUnitRealField
75
80
  local setUnitBooleanField = BlzSetUnitBooleanField
76
81
  local setUnitStringField = BlzSetUnitStringField
77
- local setUnitScale = SetUnitScale
78
82
  local setUnitPosition = SetUnitPosition
79
83
  local setUnitTimeScale = SetUnitTimeScale
80
84
  local getHandleId = GetHandleId
81
85
  local getUnitCurrentOrder = GetUnitCurrentOrder
82
86
  local createUnit = CreateUnit
83
87
  local killUnit = KillUnit
84
- local setUnitExploded = SetUnitExploded
85
88
  local removeUnit = RemoveUnit
86
89
  local getUnitTypeId = GetUnitTypeId
87
90
  local isHeroUnitId = IsHeroUnitId
@@ -97,15 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
97
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
98
101
  local isUnitInRangeXY = IsUnitInRangeXY
99
102
  local isUnitInRange = IsUnitInRange
100
- local setResourceAmount = SetResourceAmount
101
- local getResourceAmount = GetResourceAmount
102
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
103
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
104
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
105
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
106
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
107
108
  local unitDisableAbility = BlzUnitDisableAbility
108
- local unitInterruptAttack = BlzUnitInterruptAttack
109
109
  local isUnitInvisible = IsUnitInvisible
110
110
  local isUnitVisible = IsUnitVisible
111
111
  local getUnitX = GetUnitX
@@ -122,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
122
122
  local getIssuedOrderId = GetIssuedOrderId
123
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
124
124
  local unitAlive = UnitAlive
125
- local unitAddType = UnitAddType
126
- local unitRemoveType = UnitRemoveType
127
- local isUnitIllusion = IsUnitIllusion
128
- local isUnitType = IsUnitType
129
125
  local isUnitAlly = IsUnitAlly
130
126
  local isUnitEnemy = IsUnitEnemy
131
127
  local getOwningPlayer = GetOwningPlayer
132
- local setUnitColor = SetUnitColor
133
- local showUnitTeamGlow = BlzShowUnitTeamGlow
134
128
  ____exports.UnitClassification = {}
135
129
  local UnitClassification = ____exports.UnitClassification
136
130
  do
@@ -140,6 +134,7 @@ do
140
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
141
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
142
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
143
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
144
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
145
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -347,6 +342,9 @@ local function dispatchAbility(event)
347
342
  }
348
343
  )
349
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
350
348
  local function damageEventPreventDeath(self, callback, ...)
351
349
  if self[0] ~= nil then
352
350
  return
@@ -358,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
358
356
  rawset(self, 1 + i, (select(i, ...)))
359
357
  end
360
358
  end
361
- 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
+ }
362
367
  local jlimitopByOperator = {
363
368
  [0] = LESS_THAN_OR_EQUAL,
364
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -376,15 +381,27 @@ local modifiers = {
376
381
  end,
377
382
  armor = function(unit, value)
378
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
379
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
380
389
  end
381
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
382
- assert(BlzSetAbilityRealLevelField(
383
- ability,
384
- armorBonusField,
385
- 0,
386
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
387
- ))
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
+ )
388
405
  end
389
406
  }
390
407
  local getters = {
@@ -402,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
402
419
  self.unit = unit
403
420
  self.index = index
404
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
+ )
405
435
  __TS__SetDescriptor(
406
436
  UnitWeapon.prototype,
407
437
  "cooldown",
@@ -436,6 +466,19 @@ __TS__SetDescriptor(
436
466
  },
437
467
  true
438
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
+ )
439
482
  __TS__SetDescriptor(
440
483
  UnitWeapon.prototype,
441
484
  "damageBase",
@@ -547,8 +590,6 @@ __TS__SetDescriptor(
547
590
  },
548
591
  true
549
592
  )
550
- local unitInventorySize = UnitInventorySize
551
- local unitItemInSlot = UnitItemInSlot
552
593
  local getItemAbility = BlzGetItemAbility
553
594
  local getUnitAbility = BlzGetUnitAbility
554
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -566,8 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
566
607
  ____exports.Unit:of(unit)
567
608
  )
568
609
  end
569
- for i = 0, unitInventorySize(unit) - 1 do
570
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
571
612
  if getItemAbility(item, abilityId) == ability then
572
613
  return ItemAbility:of(
573
614
  ability,
@@ -612,26 +653,30 @@ local fieldSetters = {
612
653
  }
613
654
  local dummies = {}
614
655
  for ____, player in ipairs(Player.all) do
615
- local dummy = assert(createUnit(
616
- player.handle,
617
- dummyUnitId,
618
- 0,
619
- 0,
620
- 270
621
- ))
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
+ )
622
667
  ShowUnit(dummy, false)
623
668
  dummies[player] = dummy
624
669
  end
625
670
  local function delayHealthChecksCallback(unit)
626
- local counter = (unit[103] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
627
672
  if counter ~= 0 then
628
- unit[103] = counter
673
+ unit[104] = counter
629
674
  return
630
675
  end
631
- unit[103] = nil
632
- local healthBonus = unit[104]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
633
678
  if healthBonus ~= nil then
634
- unit[104] = nil
679
+ unit[105] = nil
635
680
  local handle = unit.handle
636
681
  BlzSetUnitMaxHP(
637
682
  handle,
@@ -640,52 +685,78 @@ local function delayHealthChecksCallback(unit)
640
685
  end
641
686
  end
642
687
  local nextSyncId = 1
643
- local unitBySyncId = setmetatable({}, {__mode = "k"})
688
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
689
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
690
+ local function addAbility(unit, abilityTypeId)
691
+ local ____unitAddAbility_result_0
692
+ if unitAddAbility(unit, abilityTypeId) then
693
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
694
+ else
695
+ ____unitAddAbility_result_0 = nil
696
+ end
697
+ return ____unitAddAbility_result_0
698
+ end
644
699
  ____exports.Unit = __TS__Class()
645
700
  local Unit = ____exports.Unit
646
701
  Unit.name = "Unit"
647
702
  __TS__ClassExtends(Unit, Handle)
648
703
  function Unit.prototype.____constructor(self, handle)
649
704
  Handle.prototype.____constructor(self, handle)
650
- local ____nextSyncId_0 = nextSyncId
651
- nextSyncId = ____nextSyncId_0 + 1
652
- self.syncId = ____nextSyncId_0
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
653
708
  self._owner = Player:of(getOwningPlayer(handle))
654
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
655
- 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
+ )
656
719
  if unitAddAbility(
657
720
  handle,
658
721
  fourCC("Amrf")
659
722
  ) then
660
- assert(unitRemoveAbility(
661
- handle,
662
- fourCC("Amrf")
663
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
664
731
  end
665
732
  unitBySyncId[self.syncId] = self
666
733
  local ____ = self.abilities
667
734
  end
668
- function Unit.prototype.getEvent(self, event, collector)
669
- self.events = self.events or ({})
670
- local eventId = GetHandleId(event)
671
- if not self.events[eventId] then
672
- 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(
673
741
  TriggerEvent,
674
742
  function(trigger)
675
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
676
744
  end,
677
745
  collector or (function() return {} end)
678
746
  )
747
+ self.events:put(eventId, event)
679
748
  end
680
- 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))
681
756
  end
682
757
  function Unit.prototype.onDestroy(self)
683
758
  local handle = self.handle
684
- self[107] = getUnitX(handle)
685
- self[108] = getUnitY(handle)
686
- if not self._owner then
687
- self._owner = Player:of(getOwningPlayer(handle))
688
- end
759
+ self:saveData()
689
760
  local abilities = self.abilities
690
761
  for ____, ability in ipairs(abilities) do
691
762
  ability:destroy()
@@ -703,7 +774,9 @@ function Unit.prototype.onDestroy(self)
703
774
  end
704
775
  local eventsToDestroy = self._eventsToDestroy
705
776
  if eventsToDestroy ~= nil then
706
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
707
780
  end
708
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
709
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -721,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
721
794
  self._attackHandlers = handlers
722
795
  if #handlers == 1 then
723
796
  local handle = self.handle
724
- 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
+ )
725
802
  end
726
803
  return handler
727
804
  end
@@ -750,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
750
827
  end}
751
828
  end
752
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
753
- local ____combatClassification_1 = combatClassification
754
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
755
832
  end
756
833
  function Unit.prototype.addClassification(self, classification)
757
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
758
835
  end
759
836
  function Unit.prototype.removeClassification(self, classification)
760
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
761
838
  end
762
839
  function Unit.prototype.hasClassification(self, classification)
763
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
764
841
  end
765
842
  function Unit.prototype.isVisibleTo(self, player)
766
843
  return isUnitVisible(self.handle, player.handle)
@@ -769,13 +846,19 @@ function Unit.prototype.isInvisibleTo(self, player)
769
846
  return isUnitInvisible(self.handle, player.handle)
770
847
  end
771
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
772
- local ____temp_2
849
+ local ____temp_4
773
850
  if type(x) == "number" then
774
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
775
852
  else
776
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
853
+ local ____temp_3
854
+ if __TS__InstanceOf(x, ____exports.Unit) then
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
856
+ else
857
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
858
+ end
859
+ ____temp_4 = ____temp_3
777
860
  end
778
- return ____temp_2
861
+ return ____temp_4
779
862
  end
780
863
  function Unit.prototype.isAllyOf(self, unit)
781
864
  return isUnitAlly(
@@ -793,19 +876,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
793
876
  if type(animation) == "number" then
794
877
  setUnitAnimationByIndex(self.handle, animation)
795
878
  elseif rarity then
796
- setUnitAnimationWithRarity(self.handle, animation, rarity)
879
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
797
880
  else
798
881
  setUnitAnimation(self.handle, animation)
799
882
  end
800
883
  end
801
884
  function Unit.prototype.resetAnimation(self)
802
- resetUnitAnimation(self.handle)
885
+ ResetUnitAnimation(self.handle)
803
886
  end
804
887
  function Unit.prototype.queueAnimation(self, animation)
805
- 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
806
900
  end
807
901
  function Unit.prototype.delayHealthChecks(self)
808
- self[103] = (self[103] or 0) + 1
902
+ self[104] = (self[104] or 0) + 1
809
903
  Timer:run(delayHealthChecksCallback, self)
810
904
  end
811
905
  function Unit.prototype.setPosition(self, x, y)
@@ -815,21 +909,21 @@ function Unit.prototype.isSelected(self, player)
815
909
  return IsUnitSelected(self.handle, player.handle)
816
910
  end
817
911
  function Unit.prototype.explode(self)
818
- setUnitExploded(self.handle, true)
912
+ SetUnitExploded(self.handle, true)
819
913
  killUnit(self.handle)
820
914
  end
821
915
  function Unit.prototype.kill(self)
822
916
  killUnit(self.handle)
823
917
  end
824
918
  function Unit.prototype.revive(self, x, y, doEffect)
825
- local ____ReviveHero_5 = ReviveHero
826
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
827
- local ____doEffect_3 = doEffect
828
- if ____doEffect_3 == nil then
829
- ____doEffect_3 = false
919
+ local ____ReviveHero_7 = ReviveHero
920
+ local ____array_6 = __TS__SparseArrayNew(self.handle, x, y)
921
+ local ____doEffect_5 = doEffect
922
+ if ____doEffect_5 == nil then
923
+ ____doEffect_5 = false
830
924
  end
831
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
832
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
925
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
926
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
833
927
  end
834
928
  function Unit.prototype.healTarget(self, target, amount)
835
929
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -869,20 +963,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
869
963
  return UnitDropItemSlot(self.handle, item.handle, slot)
870
964
  end
871
965
  function Unit.prototype.itemInSlot(self, slot)
872
- return Item:of(unitItemInSlot(self.handle, slot))
966
+ return Item:of(UnitItemInSlot(self.handle, slot))
873
967
  end
874
968
  function Unit.prototype.addAbility(self, abilityId)
875
- if unitAddAbility(self.handle, abilityId) then
876
- local ability = UnitAbility:of(
877
- checkNotNull(getUnitAbility(self.handle, abilityId)),
878
- abilityId,
879
- self
880
- )
969
+ local ability = UnitAbility:of(
970
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
971
+ abilityId,
972
+ self
973
+ )
974
+ if ability ~= nil then
881
975
  local abilities = self.abilities
882
976
  abilities[#abilities + 1] = ability
883
- return ability
884
977
  end
885
- return nil
978
+ return ability
886
979
  end
887
980
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
888
981
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -896,31 +989,24 @@ end
896
989
  function Unit.prototype.hasAbility(self, abilityId)
897
990
  return getUnitAbilityLevel(self.handle, abilityId) > 0
898
991
  end
899
- function Unit.prototype.getAbilityById(self, abilityId)
900
- local handle = self.handle
901
- if unitAddAbility(handle, abilityId) then
902
- assert(unitRemoveAbility(handle, abilityId))
903
- return nil
904
- end
905
- return UnitAbility:of(
906
- getUnitAbility(self.handle, abilityId),
907
- abilityId,
908
- self
909
- )
992
+ function Unit.prototype.getAbility(self, abilityId)
993
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
994
+ return UnitAbility:of(ability, abilityId, self)
910
995
  end
911
- function Unit.prototype.removeAbility(self, abilityId)
912
- if unitRemoveAbility(self.handle, abilityId) then
913
- local abilities = self.abilities
914
- for i = 1, #abilities do
915
- if abilities[i].typeId == abilityId then
916
- abilities[i]:destroy()
917
- tremove(abilities, i)
918
- return true
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
+ if ability.state == 2 then
1003
+ break
919
1004
  end
1005
+ ability:destroy()
1006
+ return true
920
1007
  end
921
- return true
922
1008
  end
923
- return false
1009
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
924
1010
  end
925
1011
  function Unit.prototype.hideAbility(self, abilityId, flag)
926
1012
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -934,9 +1020,6 @@ end
934
1020
  function Unit.prototype.endAbilityCooldown(self, abilityId)
935
1021
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
936
1022
  end
937
- function Unit.prototype.interruptAttack(self)
938
- unitInterruptAttack(self.handle)
939
- end
940
1023
  function Unit.prototype.interruptCast(self, abilityId)
941
1024
  local handle = self.handle
942
1025
  unitDisableAbility(handle, abilityId, true, false)
@@ -1007,18 +1090,44 @@ function Unit.prototype.unpauseEx(self)
1007
1090
  end
1008
1091
  function Unit.prototype.incrementStunCounter(self)
1009
1092
  local stunCounter = self[102] or 0
1010
- if not self[101] or stunCounter >= 0 then
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1011
1094
  BlzPauseUnitEx(self.handle, true)
1012
1095
  end
1013
1096
  self[102] = stunCounter + 1
1014
1097
  end
1015
1098
  function Unit.prototype.decrementStunCounter(self)
1016
1099
  local stunCounter = self[102] or 0
1017
- if not self[101] or stunCounter >= 1 then
1100
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1018
1101
  BlzPauseUnitEx(self.handle, false)
1019
1102
  end
1020
1103
  self[102] = stunCounter - 1
1021
1104
  end
1105
+ function Unit.prototype.incrementForceStunCounter(self)
1106
+ local forceStunCounter = self[103] or 0
1107
+ if forceStunCounter == 0 then
1108
+ local handle = self.handle
1109
+ if not self[101] then
1110
+ for _ = self[102] or 0, -1 do
1111
+ BlzPauseUnitEx(handle, true)
1112
+ end
1113
+ end
1114
+ BlzPauseUnitEx(handle, true)
1115
+ end
1116
+ self[103] = forceStunCounter + 1
1117
+ end
1118
+ function Unit.prototype.decrementForceStunCounter(self)
1119
+ local forceStunCounter = self[103] or 0
1120
+ if forceStunCounter == 1 then
1121
+ local handle = self.handle
1122
+ if not self[101] then
1123
+ for _ = self[102] or 0, -1 do
1124
+ BlzPauseUnitEx(handle, false)
1125
+ end
1126
+ end
1127
+ BlzPauseUnitEx(handle, false)
1128
+ end
1129
+ self[103] = forceStunCounter - 1
1130
+ end
1022
1131
  function Unit.create(self, owner, id, x, y, facing, skinId)
1023
1132
  local handle = skinId and BlzCreateUnitWithSkin(
1024
1133
  owner.handle,
@@ -1207,7 +1316,7 @@ __TS__SetDescriptor(
1207
1316
  Unit.prototype,
1208
1317
  "isIllusion",
1209
1318
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1319
+ return IsUnitIllusion(self.handle)
1211
1320
  end},
1212
1321
  true
1213
1322
  )
@@ -1215,7 +1324,7 @@ __TS__SetDescriptor(
1215
1324
  Unit.prototype,
1216
1325
  "isStunned",
1217
1326
  {get = function(self)
1218
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1327
+ return getUnitCurrentOrder(self.handle) == 851973
1219
1328
  end},
1220
1329
  true
1221
1330
  )
@@ -1305,19 +1414,6 @@ __TS__SetDescriptor(
1305
1414
  },
1306
1415
  true
1307
1416
  )
1308
- __TS__SetDescriptor(
1309
- Unit.prototype,
1310
- "strengthBase",
1311
- {
1312
- get = function(self)
1313
- return getHeroStr(self.handle, false)
1314
- end,
1315
- set = function(self, strengthBase)
1316
- setHeroStr(self.handle, strengthBase, true)
1317
- end
1318
- },
1319
- true
1320
- )
1321
1417
  __TS__SetDescriptor(
1322
1418
  Unit.prototype,
1323
1419
  "strengthBonus",
@@ -1335,19 +1431,6 @@ __TS__SetDescriptor(
1335
1431
  end},
1336
1432
  true
1337
1433
  )
1338
- __TS__SetDescriptor(
1339
- Unit.prototype,
1340
- "agilityBase",
1341
- {
1342
- get = function(self)
1343
- return getHeroAgi(self.handle, false)
1344
- end,
1345
- set = function(self, agilityBase)
1346
- setHeroAgi(self.handle, agilityBase, true)
1347
- end
1348
- },
1349
- true
1350
- )
1351
1434
  __TS__SetDescriptor(
1352
1435
  Unit.prototype,
1353
1436
  "agilityBonus",
@@ -1365,19 +1448,6 @@ __TS__SetDescriptor(
1365
1448
  end},
1366
1449
  true
1367
1450
  )
1368
- __TS__SetDescriptor(
1369
- Unit.prototype,
1370
- "intelligenceBase",
1371
- {
1372
- get = function(self)
1373
- return getHeroInt(self.handle, false)
1374
- end,
1375
- set = function(self, intelligenceBase)
1376
- setHeroInt(self.handle, intelligenceBase, true)
1377
- end
1378
- },
1379
- true
1380
- )
1381
1451
  __TS__SetDescriptor(
1382
1452
  Unit.prototype,
1383
1453
  "intelligenceBonus",
@@ -1426,17 +1496,17 @@ __TS__SetDescriptor(
1426
1496
  "isTeamGlowVisible",
1427
1497
  {
1428
1498
  get = function(self)
1429
- return not self[106]
1499
+ return not self[107]
1430
1500
  end,
1431
1501
  set = function(self, isTeamGlowVisible)
1432
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1433
- local ____temp_6
1502
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1503
+ local ____temp_8
1434
1504
  if not isTeamGlowVisible then
1435
- ____temp_6 = true
1505
+ ____temp_8 = true
1436
1506
  else
1437
- ____temp_6 = nil
1507
+ ____temp_8 = nil
1438
1508
  end
1439
- self[106] = ____temp_6
1509
+ self[107] = ____temp_8
1440
1510
  end
1441
1511
  },
1442
1512
  true
@@ -1445,9 +1515,9 @@ __TS__SetDescriptor(
1445
1515
  Unit.prototype,
1446
1516
  "color",
1447
1517
  {set = function(self, color)
1448
- setUnitColor(self.handle, color.handle)
1449
- if self[106] then
1450
- showUnitTeamGlow(self.handle, false)
1518
+ SetUnitColor(self.handle, color.handle)
1519
+ if self[107] then
1520
+ BlzShowUnitTeamGlow(self.handle, false)
1451
1521
  end
1452
1522
  end},
1453
1523
  true
@@ -1470,14 +1540,14 @@ __TS__SetDescriptor(
1470
1540
  "maxHealth",
1471
1541
  {
1472
1542
  get = function(self)
1473
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1543
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1474
1544
  end,
1475
1545
  set = function(self, maxHealth)
1476
- if maxHealth < 1 and self[103] ~= nil then
1477
- self[104] = (self[104] or 0) + (1 - maxHealth)
1546
+ if maxHealth < 1 and self[104] ~= nil then
1547
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1478
1548
  maxHealth = 1
1479
1549
  end
1480
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1550
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1481
1551
  end
1482
1552
  },
1483
1553
  true
@@ -1519,10 +1589,10 @@ __TS__SetDescriptor(
1519
1589
  "health",
1520
1590
  {
1521
1591
  get = function(self)
1522
- return GetWidgetLife(self.handle) - (self[105] or 0)
1592
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1523
1593
  end,
1524
1594
  set = function(self, health)
1525
- SetWidgetLife(self.handle, health + (self[105] or 0))
1595
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1526
1596
  end
1527
1597
  },
1528
1598
  true
@@ -1598,25 +1668,12 @@ __TS__SetDescriptor(
1598
1668
  },
1599
1669
  true
1600
1670
  )
1601
- __TS__SetDescriptor(
1602
- Unit.prototype,
1603
- "flyHeight",
1604
- {
1605
- get = function(self)
1606
- return getUnitFlyHeight(self.handle)
1607
- end,
1608
- set = function(self, v)
1609
- SetUnitFlyHeight(self.handle, v, 100000)
1610
- end
1611
- },
1612
- true
1613
- )
1614
1671
  __TS__SetDescriptor(
1615
1672
  Unit.prototype,
1616
1673
  "x",
1617
1674
  {
1618
1675
  get = function(self)
1619
- return self[107] or getUnitX(self.handle)
1676
+ return self[108] or getUnitX(self.handle)
1620
1677
  end,
1621
1678
  set = function(self, v)
1622
1679
  SetUnitX(self.handle, v)
@@ -1629,7 +1686,7 @@ __TS__SetDescriptor(
1629
1686
  "y",
1630
1687
  {
1631
1688
  get = function(self)
1632
- return self[108] or getUnitY(self.handle)
1689
+ return self[109] or getUnitY(self.handle)
1633
1690
  end,
1634
1691
  set = function(self, v)
1635
1692
  SetUnitY(self.handle, v)
@@ -1715,10 +1772,10 @@ __TS__SetDescriptor(
1715
1772
  "gold",
1716
1773
  {
1717
1774
  get = function(self)
1718
- return getResourceAmount(self.handle)
1775
+ return GetResourceAmount(self.handle)
1719
1776
  end,
1720
1777
  set = function(self, gold)
1721
- setResourceAmount(self.handle, gold)
1778
+ SetResourceAmount(self.handle, gold)
1722
1779
  end
1723
1780
  },
1724
1781
  true
@@ -1734,14 +1791,18 @@ __TS__SetDescriptor(
1734
1791
  local handle = self.handle
1735
1792
  if isPaused and not IsUnitPaused(handle) then
1736
1793
  self[101] = true
1737
- for _ = self[102] or 0, -1 do
1738
- BlzPauseUnitEx(handle, true)
1794
+ if (self[103] or 0) <= 0 then
1795
+ for _ = self[102] or 0, -1 do
1796
+ BlzPauseUnitEx(handle, true)
1797
+ end
1739
1798
  end
1740
1799
  PauseUnit(handle, true)
1741
1800
  elseif not isPaused and IsUnitPaused(handle) then
1742
1801
  PauseUnit(handle, false)
1743
- for _ = self[102] or 0, -1 do
1744
- BlzPauseUnitEx(handle, false)
1802
+ if (self[103] or 0) <= 0 then
1803
+ for _ = self[102] or 0, -1 do
1804
+ BlzPauseUnitEx(handle, false)
1805
+ end
1745
1806
  end
1746
1807
  self[101] = nil
1747
1808
  end
@@ -1799,20 +1860,6 @@ __TS__SetDescriptor(
1799
1860
  },
1800
1861
  true
1801
1862
  )
1802
- __TS__SetDescriptor(
1803
- Unit.prototype,
1804
- "scale",
1805
- {
1806
- get = function(self)
1807
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1808
- end,
1809
- set = function(self, v)
1810
- setUnitScale(self.handle, v, v, v)
1811
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1812
- end
1813
- },
1814
- true
1815
- )
1816
1863
  __TS__SetDescriptor(
1817
1864
  Unit.prototype,
1818
1865
  "timeScale",
@@ -1839,7 +1886,7 @@ __TS__SetDescriptor(
1839
1886
  Unit.prototype,
1840
1887
  "pathingCollisionRange",
1841
1888
  {get = function(self)
1842
- return 16 * (min(
1889
+ return 16 * (math.min(
1843
1890
  getUnitCollisionSize(self.handle) // 16,
1844
1891
  3
1845
1892
  ) + 1)
@@ -1949,30 +1996,6 @@ __TS__SetDescriptor(
1949
1996
  end},
1950
1997
  true
1951
1998
  )
1952
- __TS__SetDescriptor(
1953
- Unit.prototype,
1954
- "onUnitInRange",
1955
- {get = function(self)
1956
- local handle = self.handle
1957
- local onUnitInRange = setmetatable(
1958
- {},
1959
- {__index = function(self, value)
1960
- local event = __TS__New(
1961
- TriggerEvent,
1962
- function(trigger)
1963
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1964
- end,
1965
- function() return ____exports.Unit:of(handle) end
1966
- )
1967
- rawset(self, value, event)
1968
- return event
1969
- end}
1970
- )
1971
- rawset(self, "onUnitInRange", onUnitInRange)
1972
- return onUnitInRange
1973
- end},
1974
- true
1975
- )
1976
1999
  __TS__SetDescriptor(
1977
2000
  Unit.prototype,
1978
2001
  "onManaEqual",
@@ -2040,6 +2063,14 @@ __TS__SetDescriptor(
2040
2063
  end},
2041
2064
  true
2042
2065
  )
2066
+ __TS__SetDescriptor(
2067
+ Unit.prototype,
2068
+ "targetAcquiredEvent",
2069
+ {get = function(self)
2070
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2071
+ end},
2072
+ true
2073
+ )
2043
2074
  __TS__SetDescriptor(
2044
2075
  Unit.prototype,
2045
2076
  "onSelect",
@@ -2100,6 +2131,11 @@ __TS__SetDescriptor(
2100
2131
  end},
2101
2132
  true
2102
2133
  )
2134
+ Unit.levelChangedEvent = __TS__New(
2135
+ ____exports.UnitTriggerEvent,
2136
+ EVENT_PLAYER_HERO_LEVEL,
2137
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2138
+ )
2103
2139
  Unit.deathEvent = __TS__New(
2104
2140
  ____exports.UnitTriggerEvent,
2105
2141
  EVENT_PLAYER_UNIT_DEATH,
@@ -2117,7 +2153,7 @@ Unit.onResurrect = __TS__New(
2117
2153
  ____exports.Unit.deathEvent:addListener(function(unit)
2118
2154
  dead[unit] = true
2119
2155
  end)
2120
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2156
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2121
2157
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2122
2158
  dead[unit] = false
2123
2159
  invoke(event, unit)
@@ -2134,7 +2170,7 @@ Unit.morphEvent = __TS__New(
2134
2170
  invoke(event, unit)
2135
2171
  end
2136
2172
  end
2137
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2173
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2138
2174
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2139
2175
  Timer:run(ifNotLeft, unit)
2140
2176
  end
@@ -2175,25 +2211,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2175
2211
  InitializingEvent,
2176
2212
  function(event)
2177
2213
  local function listener(unit, id)
2178
- local ____GetSpellTargetUnit_result_9
2214
+ local ____GetSpellTargetUnit_result_11
2179
2215
  if GetSpellTargetUnit() then
2180
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2216
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2181
2217
  else
2182
- local ____GetSpellTargetItem_result_8
2218
+ local ____GetSpellTargetItem_result_10
2183
2219
  if GetSpellTargetItem() then
2184
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2220
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2185
2221
  else
2186
- local ____GetSpellTargetDestructable_result_7
2222
+ local ____GetSpellTargetDestructable_result_9
2187
2223
  if GetSpellTargetDestructable() then
2188
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2224
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2189
2225
  else
2190
- ____GetSpellTargetDestructable_result_7 = nil
2226
+ ____GetSpellTargetDestructable_result_9 = nil
2191
2227
  end
2192
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2228
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2193
2229
  end
2194
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2230
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2195
2231
  end
2196
- local target = ____GetSpellTargetUnit_result_9
2232
+ local target = ____GetSpellTargetUnit_result_11
2197
2233
  if target then
2198
2234
  invoke(event, unit, id, target)
2199
2235
  end
@@ -2401,38 +2437,57 @@ Unit.onDamaging = (function()
2401
2437
  if source and source.typeId == dummyUnitId then
2402
2438
  source = nil
2403
2439
  end
2404
- local target = BlzGetEventDamageTarget()
2440
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2441
+ local metadata = damageMetadataByTarget[target]
2442
+ damageMetadataByTarget[target] = nil
2405
2443
  local data = {
2406
2444
  amount = GetEventDamage(),
2407
- attackType = BlzGetEventAttackType(),
2445
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2408
2446
  damageType = BlzGetEventDamageType(),
2409
2447
  weaponType = BlzGetEventWeaponType(),
2410
- isAttack = BlzGetEventIsAttack()
2448
+ metadata = metadata,
2449
+ isAttack = BlzGetEventIsAttack(),
2450
+ originalAmount = GetEventDamage(),
2451
+ originalMetadata = metadata,
2452
+ preventRetaliation = damagingEventPreventRetaliation
2411
2453
  }
2412
2454
  if data.isAttack and source then
2413
- 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
2414
- if weapon == -1 then
2415
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2416
- weapon = 0
2417
- end
2418
- data.weapon = assert(source.weapons[weapon + 1])
2455
+ data.weapon = source:chooseWeapon(target)
2419
2456
  end
2420
2457
  if not data.isAttack or not source or not source._attackHandlers then
2421
2458
  invoke(
2422
2459
  event,
2423
2460
  source,
2424
- ____exports.Unit:of(target),
2461
+ target,
2425
2462
  setmetatable(
2426
2463
  {},
2427
2464
  {
2428
2465
  __index = data,
2429
2466
  __newindex = function(self, key, value)
2430
- damageSetters[key](value)
2467
+ local damageSetter = damageSetters[key]
2468
+ if damageSetter ~= nil then
2469
+ damageSetter(value)
2470
+ end
2431
2471
  data[key] = value
2432
2472
  end
2433
2473
  }
2434
2474
  )
2435
2475
  )
2476
+ if data[0] and source then
2477
+ local sourceOwner = source.owner.handle
2478
+ data[1] = sourceOwner
2479
+ local targetOwner = target.owner.handle
2480
+ data[2] = targetOwner
2481
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2482
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2483
+ data[3] = true
2484
+ end
2485
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2486
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2487
+ data[4] = true
2488
+ end
2489
+ end
2490
+ damagingEventByTarget[target] = data
2436
2491
  return
2437
2492
  end
2438
2493
  BlzSetEventDamage(0)
@@ -2440,7 +2495,7 @@ Unit.onDamaging = (function()
2440
2495
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2441
2496
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2442
2497
  local sourceOwner = source.owner.handle
2443
- local targetOwner = GetOwningPlayer(target)
2498
+ local targetOwner = target.owner.handle
2444
2499
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2445
2500
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2446
2501
  Timer:run(function()
@@ -2456,23 +2511,19 @@ Unit.onDamaging = (function()
2456
2511
  for ____, ____value in ipairs(source._attackHandlers) do
2457
2512
  local condition = ____value[1]
2458
2513
  local action = ____value[2]
2459
- if condition(
2460
- source,
2461
- ____exports.Unit:of(target),
2462
- data
2463
- ) then
2514
+ if condition(source, target, data) then
2464
2515
  action(
2465
2516
  source,
2466
- ____exports.Unit:of(target),
2517
+ target,
2467
2518
  setmetatable(
2468
2519
  {fire = function()
2469
2520
  UnitDamageTarget(
2470
2521
  source.handle,
2471
- target,
2522
+ target.handle,
2472
2523
  data.amount,
2473
2524
  true,
2474
2525
  true,
2475
- data.attackType,
2526
+ attackTypeToNative(data.attackType),
2476
2527
  data.damageType,
2477
2528
  data.weaponType
2478
2529
  )
@@ -2499,30 +2550,54 @@ Unit.onDamage = __TS__New(
2499
2550
  if source and source.typeId == dummyUnitId then
2500
2551
  source = nil
2501
2552
  end
2553
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2554
+ local damagingEvent = damagingEventByTarget[target]
2555
+ damagingEventByTarget[target] = nil
2502
2556
  local data = {
2503
2557
  amount = GetEventDamage(),
2504
- attackType = BlzGetEventAttackType(),
2558
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2505
2559
  damageType = BlzGetEventDamageType(),
2506
2560
  weaponType = BlzGetEventWeaponType(),
2561
+ metadata = damagingEvent and damagingEvent.metadata,
2507
2562
  isAttack = BlzGetEventIsAttack(),
2508
- originalAmount = GetEventDamage(),
2563
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2564
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2509
2565
  preventDeath = damageEventPreventDeath
2510
2566
  }
2567
+ if damagingEvent then
2568
+ for key, value in pairs(damagingEvent) do
2569
+ if isAttribute(key) then
2570
+ data[key] = value
2571
+ end
2572
+ end
2573
+ local sourceOwner = damagingEvent[1]
2574
+ if sourceOwner then
2575
+ local targetOwner = damagingEvent[2]
2576
+ if damagingEvent[3] then
2577
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2578
+ end
2579
+ if damagingEvent[4] then
2580
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2581
+ end
2582
+ end
2583
+ end
2511
2584
  local evData = setmetatable(
2512
2585
  {},
2513
2586
  {
2514
2587
  __index = data,
2515
2588
  __newindex = function(self, key, value)
2516
- damageSetters[key](value)
2589
+ local damageSetter = damageSetters[key]
2590
+ if damageSetter ~= nil then
2591
+ damageSetter(value)
2592
+ end
2517
2593
  data[key] = value
2518
2594
  end
2519
2595
  }
2520
2596
  )
2521
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2522
2597
  invoke(event, source, target, evData)
2523
2598
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2524
2599
  local bonusHealth = math.ceil(evData.amount)
2525
- target[105] = (target[105] or 0) + bonusHealth
2600
+ target[106] = (target[106] or 0) + bonusHealth
2526
2601
  BlzSetUnitMaxHP(
2527
2602
  target.handle,
2528
2603
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2536,7 +2611,7 @@ Unit.onDamage = __TS__New(
2536
2611
  evData[0],
2537
2612
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2538
2613
  )
2539
- target[105] = (target[105] or 0) - bonusHealth
2614
+ target[106] = (target[106] or 0) - bonusHealth
2540
2615
  SetWidgetLife(
2541
2616
  target.handle,
2542
2617
  GetWidgetLife(target.handle) - bonusHealth
@@ -2562,7 +2637,7 @@ Unit.itemDroppedEvent = __TS__New(
2562
2637
  function()
2563
2638
  local unit = getTriggerUnit()
2564
2639
  local item = getManipulatedItem()
2565
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2640
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2566
2641
  return ____exports.Unit:of(unit), Item:of(item)
2567
2642
  end
2568
2643
  return IgnoreEvent
@@ -2572,10 +2647,14 @@ Unit.itemPickedUpEvent = __TS__New(
2572
2647
  ____exports.UnitTriggerEvent,
2573
2648
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2574
2649
  function()
2575
- local unit = getTriggerUnit()
2576
- local item = getManipulatedItem()
2577
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2578
- return ____exports.Unit:of(unit), Item:of(item)
2650
+ local unitHandle = getTriggerUnit()
2651
+ local itemHandle = getManipulatedItem()
2652
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2653
+ local unit = ____exports.Unit:of(unitHandle)
2654
+ local item = Item:of(itemHandle)
2655
+ if ownerByItem[item] ~= unit then
2656
+ return unit, item
2657
+ end
2579
2658
  end
2580
2659
  return IgnoreEvent
2581
2660
  end
@@ -2586,59 +2665,24 @@ Unit.itemUsedEvent = __TS__New(
2586
2665
  function()
2587
2666
  local unit = getTriggerUnit()
2588
2667
  local item = getManipulatedItem()
2589
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2668
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2590
2669
  return ____exports.Unit:of(unit), Item:of(item)
2591
2670
  end
2592
2671
  return IgnoreEvent
2593
2672
  end
2594
2673
  )
2595
- Unit.itemStackedEvent = __TS__New(
2596
- ____exports.UnitTriggerEvent,
2597
- EVENT_PLAYER_UNIT_STACK_ITEM,
2598
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2599
- )
2600
2674
  __TS__ObjectDefineProperty(
2601
2675
  Unit,
2602
- "itemUseOrderEvent",
2676
+ "itemChargesChangedEvent",
2603
2677
  {get = function(self)
2604
2678
  local event = __TS__New(Event)
2605
- for order = orderId("useslot0"), orderId("useslot5") do
2606
- local slot = order - orderId("useslot0")
2607
- local function listener(unit)
2608
- local item = unit.items[slot + 1]
2609
- if item ~= nil then
2610
- invoke(event, unit, item)
2611
- end
2679
+ Item.chargesChangedEvent:addListener(function(item)
2680
+ local unit = item.owner
2681
+ if unit ~= nil then
2682
+ invoke(event, unit, item)
2612
2683
  end
2613
- self.onImmediateOrder[order]:addListener(listener)
2614
- self.onTargetOrder[order]:addListener(listener)
2615
- self.onPointOrder[order]:addListener(listener)
2616
- end
2617
- rawset(self, "itemUseOrderEvent", event)
2618
- return event
2619
- end}
2620
- )
2621
- __TS__ObjectDefineProperty(
2622
- Unit,
2623
- "itemMoveOrderEvent",
2624
- {get = function(self)
2625
- local event = __TS__New(Event)
2626
- for order = orderId("moveslot0"), orderId("moveslot5") do
2627
- local slotTo = order - orderId("moveslot0")
2628
- self.onTargetOrder[order]:addListener(function(unit, item)
2629
- local slotFrom = unit.items:findSlot(item)
2630
- if slotFrom ~= nil then
2631
- invoke(
2632
- event,
2633
- unit,
2634
- item,
2635
- slotFrom,
2636
- slotTo
2637
- )
2638
- end
2639
- end)
2640
- end
2641
- rawset(self, "itemMoveOrderEvent", event)
2684
+ end)
2685
+ rawset(self, "itemChargesChangedEvent", event)
2642
2686
  return event
2643
2687
  end}
2644
2688
  )
@@ -2667,6 +2711,10 @@ __TS__ObjectDefineProperty(
2667
2711
  rawset(self, "destroyEvent", destroyEvent)
2668
2712
  return destroyEvent
2669
2713
  end}
2714
+ )
2715
+ Unit.synchronize = synchronizer(
2716
+ function(unit) return unit.syncId end,
2717
+ function(syncId) return unitBySyncId[syncId] end
2670
2718
  );
2671
2719
  (function(self)
2672
2720
  local leaveAbilityIds = postcompile(function()
@@ -2684,11 +2732,7 @@ __TS__ObjectDefineProperty(
2684
2732
  function(____, id) return fourCC(id) end
2685
2733
  )
2686
2734
  end)
2687
- for ____, leaveOrderId in ipairs({
2688
- orderId("undefend"),
2689
- orderId("magicundefense"),
2690
- orderId("unimmolation")
2691
- }) do
2735
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2692
2736
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2693
2737
  local handle = unit.handle
2694
2738
  for i = 1, #leaveAbilityIds do
@@ -2696,7 +2740,8 @@ __TS__ObjectDefineProperty(
2696
2740
  return
2697
2741
  end
2698
2742
  end
2699
- unit:destroy()
2743
+ unit:saveData()
2744
+ Timer:run(unit, "destroy")
2700
2745
  end)
2701
2746
  end
2702
2747
  end)(Unit)