warscript 0.0.1-dev.88cffdd → 0.0.1-dev.89bc33b

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 +19 -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 +23 -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 +63 -17
  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 +75 -28
  52. package/engine/buff.lua +433 -196
  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/unit/ability.d.ts +35 -0
  86. package/engine/internal/unit/ability.lua +98 -9
  87. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  88. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  89. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  90. package/engine/internal/unit/allowed-targets.lua +9 -1
  91. package/engine/internal/unit/appearance.d.ts +15 -0
  92. package/engine/internal/unit/appearance.lua +85 -0
  93. package/engine/internal/unit/attributes.d.ts +17 -0
  94. package/engine/internal/unit/attributes.lua +46 -0
  95. package/engine/internal/unit/bonus.d.ts +14 -0
  96. package/engine/internal/unit/bonus.lua +102 -8
  97. package/engine/internal/unit/buff.d.ts +2 -2
  98. package/engine/internal/unit/buff.lua +34 -19
  99. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  100. package/engine/internal/unit/equipment-inventory.lua +233 -0
  101. package/engine/internal/unit/expiration-timer.lua +1 -1
  102. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  103. package/engine/internal/unit/extended-inventory.lua +99 -0
  104. package/engine/internal/unit/fly-height.d.ts +7 -0
  105. package/engine/internal/unit/fly-height.lua +20 -0
  106. package/engine/internal/unit/ignore-events-items.lua +10 -1
  107. package/engine/internal/unit/interrupts.d.ts +12 -0
  108. package/engine/internal/unit/interrupts.lua +28 -0
  109. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  110. package/engine/internal/unit/inventory.lua +87 -0
  111. package/engine/internal/unit/item-container.d.ts +25 -0
  112. package/engine/internal/unit/item-container.lua +11 -0
  113. package/engine/internal/unit/item-order-events.d.ts +17 -0
  114. package/engine/internal/unit/item-order-events.lua +67 -0
  115. package/engine/internal/unit/item-slot.d.ts +27 -0
  116. package/engine/internal/unit/item-slot.lua +92 -0
  117. package/engine/internal/unit/main-selected.lua +12 -27
  118. package/engine/internal/unit/order.d.ts +20 -0
  119. package/engine/internal/unit/order.lua +136 -0
  120. package/engine/internal/unit/range-event.d.ts +12 -0
  121. package/engine/internal/unit/range-event.lua +90 -0
  122. package/engine/internal/unit/scale.d.ts +7 -0
  123. package/engine/internal/unit/scale.lua +20 -0
  124. package/engine/internal/unit+ability.d.ts +2 -1
  125. package/engine/internal/unit+ability.lua +73 -3
  126. package/engine/internal/unit+bonus.lua +3 -3
  127. package/engine/internal/unit+damage.d.ts +11 -11
  128. package/engine/internal/unit+damage.lua +43 -14
  129. package/engine/internal/unit+rally.lua +9 -31
  130. package/engine/internal/unit+spellSteal.lua +1 -2
  131. package/engine/internal/unit-missile-data.lua +58 -32
  132. package/engine/internal/unit-missile-launch.lua +65 -27
  133. package/engine/internal/unit.d.ts +41 -36
  134. package/engine/internal/unit.lua +396 -328
  135. package/engine/local-client.d.ts +28 -0
  136. package/engine/local-client.lua +324 -54
  137. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  138. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  139. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  140. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  141. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  142. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  143. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  144. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  145. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  146. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  147. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  148. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  149. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  150. package/engine/object-data/auxiliary/item-class.lua +2 -0
  151. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  152. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  153. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  154. package/engine/object-data/auxiliary/movement-type.lua +22 -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.d.ts +6 -0
  159. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  160. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  161. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  162. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  163. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  164. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  165. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  166. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  167. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  168. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  169. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  170. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  171. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  172. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  173. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  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/cleansing-fire.d.ts +27 -0
  181. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  182. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  183. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  184. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  185. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  186. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  187. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  188. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  189. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  190. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  191. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  192. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  193. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  194. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  195. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  196. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  197. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  198. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  199. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  200. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  201. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  202. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  203. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  204. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  205. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  206. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  207. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  208. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  209. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  210. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  211. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  212. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  213. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  214. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  215. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  216. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  218. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  219. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  220. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  221. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  222. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  223. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  224. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  225. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  226. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  227. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  228. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  229. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  230. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  231. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  232. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  233. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  234. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  235. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  236. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  237. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  238. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  239. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  240. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  241. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  242. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  243. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  244. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  245. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  246. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  247. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  248. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  250. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  251. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  252. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  253. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  254. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  256. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  257. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  258. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  259. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  260. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  261. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  262. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  263. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -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 +25 -6
  301. package/engine/object-data/entry/ability-type.lua +255 -11
  302. package/engine/object-data/entry/buff-type/applicable.lua +113 -105
  303. package/engine/object-data/entry/buff-type.d.ts +10 -12
  304. package/engine/object-data/entry/buff-type.lua +37 -27
  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 +64 -6
  313. package/engine/object-data/entry/unit-type.lua +531 -85
  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 +26 -7
  324. package/engine/object-field.lua +360 -119
  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 +48 -0
  330. package/engine/standard/entries/buff-type.lua +46 -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 +2 -2
  338. package/engine/standard/fields/ability.lua +2 -2
  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 +5 -1
  371. package/utility/linked-set.lua +49 -1
  372. package/utility/lua-maps.d.ts +15 -2
  373. package/utility/lua-maps.lua +53 -2
  374. package/utility/lua-sets.d.ts +2 -0
  375. package/utility/lua-sets.lua +7 -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,21 @@ 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
919
- end
996
+ function Unit.prototype.removeAbility(self, abilityTypeId)
997
+ local abilities = self.abilities
998
+ for i = 1, #abilities do
999
+ if abilities[i].typeId == abilityTypeId then
1000
+ local ability = abilities[i]
1001
+ tremove(abilities, i)
1002
+ ability:destroy()
1003
+ return true
920
1004
  end
921
- return true
922
1005
  end
923
- return false
1006
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
924
1007
  end
925
1008
  function Unit.prototype.hideAbility(self, abilityId, flag)
926
1009
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -934,9 +1017,6 @@ end
934
1017
  function Unit.prototype.endAbilityCooldown(self, abilityId)
935
1018
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
936
1019
  end
937
- function Unit.prototype.interruptAttack(self)
938
- unitInterruptAttack(self.handle)
939
- end
940
1020
  function Unit.prototype.interruptCast(self, abilityId)
941
1021
  local handle = self.handle
942
1022
  unitDisableAbility(handle, abilityId, true, false)
@@ -1007,18 +1087,44 @@ function Unit.prototype.unpauseEx(self)
1007
1087
  end
1008
1088
  function Unit.prototype.incrementStunCounter(self)
1009
1089
  local stunCounter = self[102] or 0
1010
- if not self[101] or stunCounter >= 0 then
1090
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1011
1091
  BlzPauseUnitEx(self.handle, true)
1012
1092
  end
1013
1093
  self[102] = stunCounter + 1
1014
1094
  end
1015
1095
  function Unit.prototype.decrementStunCounter(self)
1016
1096
  local stunCounter = self[102] or 0
1017
- if not self[101] or stunCounter >= 1 then
1097
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1018
1098
  BlzPauseUnitEx(self.handle, false)
1019
1099
  end
1020
1100
  self[102] = stunCounter - 1
1021
1101
  end
1102
+ function Unit.prototype.incrementForceStunCounter(self)
1103
+ local forceStunCounter = self[103] or 0
1104
+ if forceStunCounter == 0 then
1105
+ local handle = self.handle
1106
+ if not self[101] then
1107
+ for _ = self[102] or 0, -1 do
1108
+ BlzPauseUnitEx(handle, true)
1109
+ end
1110
+ end
1111
+ BlzPauseUnitEx(handle, true)
1112
+ end
1113
+ self[103] = forceStunCounter + 1
1114
+ end
1115
+ function Unit.prototype.decrementForceStunCounter(self)
1116
+ local forceStunCounter = self[103] or 0
1117
+ if forceStunCounter == 1 then
1118
+ local handle = self.handle
1119
+ if not self[101] then
1120
+ for _ = self[102] or 0, -1 do
1121
+ BlzPauseUnitEx(handle, false)
1122
+ end
1123
+ end
1124
+ BlzPauseUnitEx(handle, false)
1125
+ end
1126
+ self[103] = forceStunCounter - 1
1127
+ end
1022
1128
  function Unit.create(self, owner, id, x, y, facing, skinId)
1023
1129
  local handle = skinId and BlzCreateUnitWithSkin(
1024
1130
  owner.handle,
@@ -1207,7 +1313,7 @@ __TS__SetDescriptor(
1207
1313
  Unit.prototype,
1208
1314
  "isIllusion",
1209
1315
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1316
+ return IsUnitIllusion(self.handle)
1211
1317
  end},
1212
1318
  true
1213
1319
  )
@@ -1215,7 +1321,7 @@ __TS__SetDescriptor(
1215
1321
  Unit.prototype,
1216
1322
  "isStunned",
1217
1323
  {get = function(self)
1218
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1324
+ return getUnitCurrentOrder(self.handle) == 851973
1219
1325
  end},
1220
1326
  true
1221
1327
  )
@@ -1294,13 +1400,13 @@ __TS__SetDescriptor(
1294
1400
  )
1295
1401
  __TS__SetDescriptor(
1296
1402
  Unit.prototype,
1297
- "strengthBase",
1403
+ "primaryAttribute",
1298
1404
  {
1299
1405
  get = function(self)
1300
- return getHeroStr(self.handle, false)
1406
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1301
1407
  end,
1302
- set = function(self, strengthBase)
1303
- setHeroStr(self.handle, strengthBase, true)
1408
+ set = function(self, primaryAttribute)
1409
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1304
1410
  end
1305
1411
  },
1306
1412
  true
@@ -1322,19 +1428,6 @@ __TS__SetDescriptor(
1322
1428
  end},
1323
1429
  true
1324
1430
  )
1325
- __TS__SetDescriptor(
1326
- Unit.prototype,
1327
- "agilityBase",
1328
- {
1329
- get = function(self)
1330
- return getHeroAgi(self.handle, false)
1331
- end,
1332
- set = function(self, agilityBase)
1333
- setHeroAgi(self.handle, agilityBase, true)
1334
- end
1335
- },
1336
- true
1337
- )
1338
1431
  __TS__SetDescriptor(
1339
1432
  Unit.prototype,
1340
1433
  "agilityBonus",
@@ -1352,19 +1445,6 @@ __TS__SetDescriptor(
1352
1445
  end},
1353
1446
  true
1354
1447
  )
1355
- __TS__SetDescriptor(
1356
- Unit.prototype,
1357
- "intelligenceBase",
1358
- {
1359
- get = function(self)
1360
- return getHeroInt(self.handle, false)
1361
- end,
1362
- set = function(self, intelligenceBase)
1363
- setHeroInt(self.handle, intelligenceBase, true)
1364
- end
1365
- },
1366
- true
1367
- )
1368
1448
  __TS__SetDescriptor(
1369
1449
  Unit.prototype,
1370
1450
  "intelligenceBonus",
@@ -1413,17 +1493,17 @@ __TS__SetDescriptor(
1413
1493
  "isTeamGlowVisible",
1414
1494
  {
1415
1495
  get = function(self)
1416
- return not self[106]
1496
+ return not self[107]
1417
1497
  end,
1418
1498
  set = function(self, isTeamGlowVisible)
1419
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1420
- local ____temp_6
1499
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1500
+ local ____temp_8
1421
1501
  if not isTeamGlowVisible then
1422
- ____temp_6 = true
1502
+ ____temp_8 = true
1423
1503
  else
1424
- ____temp_6 = nil
1504
+ ____temp_8 = nil
1425
1505
  end
1426
- self[106] = ____temp_6
1506
+ self[107] = ____temp_8
1427
1507
  end
1428
1508
  },
1429
1509
  true
@@ -1432,9 +1512,9 @@ __TS__SetDescriptor(
1432
1512
  Unit.prototype,
1433
1513
  "color",
1434
1514
  {set = function(self, color)
1435
- setUnitColor(self.handle, color.handle)
1436
- if self[106] then
1437
- showUnitTeamGlow(self.handle, false)
1515
+ SetUnitColor(self.handle, color.handle)
1516
+ if self[107] then
1517
+ BlzShowUnitTeamGlow(self.handle, false)
1438
1518
  end
1439
1519
  end},
1440
1520
  true
@@ -1457,14 +1537,14 @@ __TS__SetDescriptor(
1457
1537
  "maxHealth",
1458
1538
  {
1459
1539
  get = function(self)
1460
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1540
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1461
1541
  end,
1462
1542
  set = function(self, maxHealth)
1463
- if maxHealth < 1 and self[103] ~= nil then
1464
- self[104] = (self[104] or 0) + (1 - maxHealth)
1543
+ if maxHealth < 1 and self[104] ~= nil then
1544
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1465
1545
  maxHealth = 1
1466
1546
  end
1467
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1547
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1468
1548
  end
1469
1549
  },
1470
1550
  true
@@ -1506,10 +1586,10 @@ __TS__SetDescriptor(
1506
1586
  "health",
1507
1587
  {
1508
1588
  get = function(self)
1509
- return GetWidgetLife(self.handle) - (self[105] or 0)
1589
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1510
1590
  end,
1511
1591
  set = function(self, health)
1512
- SetWidgetLife(self.handle, health + (self[105] or 0))
1592
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1513
1593
  end
1514
1594
  },
1515
1595
  true
@@ -1585,25 +1665,12 @@ __TS__SetDescriptor(
1585
1665
  },
1586
1666
  true
1587
1667
  )
1588
- __TS__SetDescriptor(
1589
- Unit.prototype,
1590
- "flyHeight",
1591
- {
1592
- get = function(self)
1593
- return getUnitFlyHeight(self.handle)
1594
- end,
1595
- set = function(self, v)
1596
- SetUnitFlyHeight(self.handle, v, 100000)
1597
- end
1598
- },
1599
- true
1600
- )
1601
1668
  __TS__SetDescriptor(
1602
1669
  Unit.prototype,
1603
1670
  "x",
1604
1671
  {
1605
1672
  get = function(self)
1606
- return self[107] or getUnitX(self.handle)
1673
+ return self[108] or getUnitX(self.handle)
1607
1674
  end,
1608
1675
  set = function(self, v)
1609
1676
  SetUnitX(self.handle, v)
@@ -1616,7 +1683,7 @@ __TS__SetDescriptor(
1616
1683
  "y",
1617
1684
  {
1618
1685
  get = function(self)
1619
- return self[108] or getUnitY(self.handle)
1686
+ return self[109] or getUnitY(self.handle)
1620
1687
  end,
1621
1688
  set = function(self, v)
1622
1689
  SetUnitY(self.handle, v)
@@ -1702,10 +1769,10 @@ __TS__SetDescriptor(
1702
1769
  "gold",
1703
1770
  {
1704
1771
  get = function(self)
1705
- return getResourceAmount(self.handle)
1772
+ return GetResourceAmount(self.handle)
1706
1773
  end,
1707
1774
  set = function(self, gold)
1708
- setResourceAmount(self.handle, gold)
1775
+ SetResourceAmount(self.handle, gold)
1709
1776
  end
1710
1777
  },
1711
1778
  true
@@ -1721,14 +1788,18 @@ __TS__SetDescriptor(
1721
1788
  local handle = self.handle
1722
1789
  if isPaused and not IsUnitPaused(handle) then
1723
1790
  self[101] = true
1724
- for _ = self[102] or 0, -1 do
1725
- BlzPauseUnitEx(handle, true)
1791
+ if (self[103] or 0) <= 0 then
1792
+ for _ = self[102] or 0, -1 do
1793
+ BlzPauseUnitEx(handle, true)
1794
+ end
1726
1795
  end
1727
1796
  PauseUnit(handle, true)
1728
1797
  elseif not isPaused and IsUnitPaused(handle) then
1729
1798
  PauseUnit(handle, false)
1730
- for _ = self[102] or 0, -1 do
1731
- BlzPauseUnitEx(handle, false)
1799
+ if (self[103] or 0) <= 0 then
1800
+ for _ = self[102] or 0, -1 do
1801
+ BlzPauseUnitEx(handle, false)
1802
+ end
1732
1803
  end
1733
1804
  self[101] = nil
1734
1805
  end
@@ -1786,20 +1857,6 @@ __TS__SetDescriptor(
1786
1857
  },
1787
1858
  true
1788
1859
  )
1789
- __TS__SetDescriptor(
1790
- Unit.prototype,
1791
- "scale",
1792
- {
1793
- get = function(self)
1794
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1795
- end,
1796
- set = function(self, v)
1797
- setUnitScale(self.handle, v, v, v)
1798
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1799
- end
1800
- },
1801
- true
1802
- )
1803
1860
  __TS__SetDescriptor(
1804
1861
  Unit.prototype,
1805
1862
  "timeScale",
@@ -1826,13 +1883,26 @@ __TS__SetDescriptor(
1826
1883
  Unit.prototype,
1827
1884
  "pathingCollisionRange",
1828
1885
  {get = function(self)
1829
- return 16 * (min(
1886
+ return 16 * (math.min(
1830
1887
  getUnitCollisionSize(self.handle) // 16,
1831
1888
  3
1832
1889
  ) + 1)
1833
1890
  end},
1834
1891
  true
1835
1892
  )
1893
+ __TS__SetDescriptor(
1894
+ Unit.prototype,
1895
+ "movementType",
1896
+ {
1897
+ get = function(self)
1898
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1899
+ end,
1900
+ set = function(self, movementType)
1901
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1902
+ end
1903
+ },
1904
+ true
1905
+ )
1836
1906
  __TS__SetDescriptor(
1837
1907
  Unit.prototype,
1838
1908
  "pathing",
@@ -1923,30 +1993,6 @@ __TS__SetDescriptor(
1923
1993
  end},
1924
1994
  true
1925
1995
  )
1926
- __TS__SetDescriptor(
1927
- Unit.prototype,
1928
- "onUnitInRange",
1929
- {get = function(self)
1930
- local handle = self.handle
1931
- local onUnitInRange = setmetatable(
1932
- {},
1933
- {__index = function(self, value)
1934
- local event = __TS__New(
1935
- TriggerEvent,
1936
- function(trigger)
1937
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1938
- end,
1939
- function() return ____exports.Unit:of(handle) end
1940
- )
1941
- rawset(self, value, event)
1942
- return event
1943
- end}
1944
- )
1945
- rawset(self, "onUnitInRange", onUnitInRange)
1946
- return onUnitInRange
1947
- end},
1948
- true
1949
- )
1950
1996
  __TS__SetDescriptor(
1951
1997
  Unit.prototype,
1952
1998
  "onManaEqual",
@@ -2014,6 +2060,14 @@ __TS__SetDescriptor(
2014
2060
  end},
2015
2061
  true
2016
2062
  )
2063
+ __TS__SetDescriptor(
2064
+ Unit.prototype,
2065
+ "targetAcquiredEvent",
2066
+ {get = function(self)
2067
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2068
+ end},
2069
+ true
2070
+ )
2017
2071
  __TS__SetDescriptor(
2018
2072
  Unit.prototype,
2019
2073
  "onSelect",
@@ -2074,6 +2128,11 @@ __TS__SetDescriptor(
2074
2128
  end},
2075
2129
  true
2076
2130
  )
2131
+ Unit.levelChangedEvent = __TS__New(
2132
+ ____exports.UnitTriggerEvent,
2133
+ EVENT_PLAYER_HERO_LEVEL,
2134
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2135
+ )
2077
2136
  Unit.deathEvent = __TS__New(
2078
2137
  ____exports.UnitTriggerEvent,
2079
2138
  EVENT_PLAYER_UNIT_DEATH,
@@ -2091,7 +2150,7 @@ Unit.onResurrect = __TS__New(
2091
2150
  ____exports.Unit.deathEvent:addListener(function(unit)
2092
2151
  dead[unit] = true
2093
2152
  end)
2094
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2153
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2095
2154
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2096
2155
  dead[unit] = false
2097
2156
  invoke(event, unit)
@@ -2108,7 +2167,7 @@ Unit.morphEvent = __TS__New(
2108
2167
  invoke(event, unit)
2109
2168
  end
2110
2169
  end
2111
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2170
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2112
2171
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2113
2172
  Timer:run(ifNotLeft, unit)
2114
2173
  end
@@ -2149,25 +2208,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2149
2208
  InitializingEvent,
2150
2209
  function(event)
2151
2210
  local function listener(unit, id)
2152
- local ____GetSpellTargetUnit_result_9
2211
+ local ____GetSpellTargetUnit_result_11
2153
2212
  if GetSpellTargetUnit() then
2154
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2213
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2155
2214
  else
2156
- local ____GetSpellTargetItem_result_8
2215
+ local ____GetSpellTargetItem_result_10
2157
2216
  if GetSpellTargetItem() then
2158
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2217
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2159
2218
  else
2160
- local ____GetSpellTargetDestructable_result_7
2219
+ local ____GetSpellTargetDestructable_result_9
2161
2220
  if GetSpellTargetDestructable() then
2162
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2221
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2163
2222
  else
2164
- ____GetSpellTargetDestructable_result_7 = nil
2223
+ ____GetSpellTargetDestructable_result_9 = nil
2165
2224
  end
2166
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2225
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2167
2226
  end
2168
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2227
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2169
2228
  end
2170
- local target = ____GetSpellTargetUnit_result_9
2229
+ local target = ____GetSpellTargetUnit_result_11
2171
2230
  if target then
2172
2231
  invoke(event, unit, id, target)
2173
2232
  end
@@ -2375,38 +2434,57 @@ Unit.onDamaging = (function()
2375
2434
  if source and source.typeId == dummyUnitId then
2376
2435
  source = nil
2377
2436
  end
2378
- local target = BlzGetEventDamageTarget()
2437
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2438
+ local metadata = damageMetadataByTarget[target]
2439
+ damageMetadataByTarget[target] = nil
2379
2440
  local data = {
2380
2441
  amount = GetEventDamage(),
2381
- attackType = BlzGetEventAttackType(),
2442
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2382
2443
  damageType = BlzGetEventDamageType(),
2383
2444
  weaponType = BlzGetEventWeaponType(),
2384
- isAttack = BlzGetEventIsAttack()
2445
+ metadata = metadata,
2446
+ isAttack = BlzGetEventIsAttack(),
2447
+ originalAmount = GetEventDamage(),
2448
+ originalMetadata = metadata,
2449
+ preventRetaliation = damagingEventPreventRetaliation
2385
2450
  }
2386
2451
  if data.isAttack and source then
2387
- 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
2388
- if weapon == -1 then
2389
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2390
- weapon = 0
2391
- end
2392
- data.weapon = assert(source.weapons[weapon + 1])
2452
+ data.weapon = source:chooseWeapon(target)
2393
2453
  end
2394
2454
  if not data.isAttack or not source or not source._attackHandlers then
2395
2455
  invoke(
2396
2456
  event,
2397
2457
  source,
2398
- ____exports.Unit:of(target),
2458
+ target,
2399
2459
  setmetatable(
2400
2460
  {},
2401
2461
  {
2402
2462
  __index = data,
2403
2463
  __newindex = function(self, key, value)
2404
- damageSetters[key](value)
2464
+ local damageSetter = damageSetters[key]
2465
+ if damageSetter ~= nil then
2466
+ damageSetter(value)
2467
+ end
2405
2468
  data[key] = value
2406
2469
  end
2407
2470
  }
2408
2471
  )
2409
2472
  )
2473
+ if data[0] and source then
2474
+ local sourceOwner = source.owner.handle
2475
+ data[1] = sourceOwner
2476
+ local targetOwner = target.owner.handle
2477
+ data[2] = targetOwner
2478
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2479
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2480
+ data[3] = true
2481
+ end
2482
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2483
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2484
+ data[4] = true
2485
+ end
2486
+ end
2487
+ damagingEventByTarget[target] = data
2410
2488
  return
2411
2489
  end
2412
2490
  BlzSetEventDamage(0)
@@ -2414,7 +2492,7 @@ Unit.onDamaging = (function()
2414
2492
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2415
2493
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2416
2494
  local sourceOwner = source.owner.handle
2417
- local targetOwner = GetOwningPlayer(target)
2495
+ local targetOwner = target.owner.handle
2418
2496
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2419
2497
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2420
2498
  Timer:run(function()
@@ -2430,23 +2508,19 @@ Unit.onDamaging = (function()
2430
2508
  for ____, ____value in ipairs(source._attackHandlers) do
2431
2509
  local condition = ____value[1]
2432
2510
  local action = ____value[2]
2433
- if condition(
2434
- source,
2435
- ____exports.Unit:of(target),
2436
- data
2437
- ) then
2511
+ if condition(source, target, data) then
2438
2512
  action(
2439
2513
  source,
2440
- ____exports.Unit:of(target),
2514
+ target,
2441
2515
  setmetatable(
2442
2516
  {fire = function()
2443
2517
  UnitDamageTarget(
2444
2518
  source.handle,
2445
- target,
2519
+ target.handle,
2446
2520
  data.amount,
2447
2521
  true,
2448
2522
  true,
2449
- data.attackType,
2523
+ attackTypeToNative(data.attackType),
2450
2524
  data.damageType,
2451
2525
  data.weaponType
2452
2526
  )
@@ -2473,30 +2547,54 @@ Unit.onDamage = __TS__New(
2473
2547
  if source and source.typeId == dummyUnitId then
2474
2548
  source = nil
2475
2549
  end
2550
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2551
+ local damagingEvent = damagingEventByTarget[target]
2552
+ damagingEventByTarget[target] = nil
2476
2553
  local data = {
2477
2554
  amount = GetEventDamage(),
2478
- attackType = BlzGetEventAttackType(),
2555
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2479
2556
  damageType = BlzGetEventDamageType(),
2480
2557
  weaponType = BlzGetEventWeaponType(),
2558
+ metadata = damagingEvent and damagingEvent.metadata,
2481
2559
  isAttack = BlzGetEventIsAttack(),
2482
- originalAmount = GetEventDamage(),
2560
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2561
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2483
2562
  preventDeath = damageEventPreventDeath
2484
2563
  }
2564
+ if damagingEvent then
2565
+ for key, value in pairs(damagingEvent) do
2566
+ if isAttribute(key) then
2567
+ data[key] = value
2568
+ end
2569
+ end
2570
+ local sourceOwner = damagingEvent[1]
2571
+ if sourceOwner then
2572
+ local targetOwner = damagingEvent[2]
2573
+ if damagingEvent[3] then
2574
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2575
+ end
2576
+ if damagingEvent[4] then
2577
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2578
+ end
2579
+ end
2580
+ end
2485
2581
  local evData = setmetatable(
2486
2582
  {},
2487
2583
  {
2488
2584
  __index = data,
2489
2585
  __newindex = function(self, key, value)
2490
- damageSetters[key](value)
2586
+ local damageSetter = damageSetters[key]
2587
+ if damageSetter ~= nil then
2588
+ damageSetter(value)
2589
+ end
2491
2590
  data[key] = value
2492
2591
  end
2493
2592
  }
2494
2593
  )
2495
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2496
2594
  invoke(event, source, target, evData)
2497
2595
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2498
2596
  local bonusHealth = math.ceil(evData.amount)
2499
- target[105] = (target[105] or 0) + bonusHealth
2597
+ target[106] = (target[106] or 0) + bonusHealth
2500
2598
  BlzSetUnitMaxHP(
2501
2599
  target.handle,
2502
2600
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2510,7 +2608,7 @@ Unit.onDamage = __TS__New(
2510
2608
  evData[0],
2511
2609
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2512
2610
  )
2513
- target[105] = (target[105] or 0) - bonusHealth
2611
+ target[106] = (target[106] or 0) - bonusHealth
2514
2612
  SetWidgetLife(
2515
2613
  target.handle,
2516
2614
  GetWidgetLife(target.handle) - bonusHealth
@@ -2536,7 +2634,7 @@ Unit.itemDroppedEvent = __TS__New(
2536
2634
  function()
2537
2635
  local unit = getTriggerUnit()
2538
2636
  local item = getManipulatedItem()
2539
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2637
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2540
2638
  return ____exports.Unit:of(unit), Item:of(item)
2541
2639
  end
2542
2640
  return IgnoreEvent
@@ -2546,10 +2644,14 @@ Unit.itemPickedUpEvent = __TS__New(
2546
2644
  ____exports.UnitTriggerEvent,
2547
2645
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2548
2646
  function()
2549
- local unit = getTriggerUnit()
2550
- local item = getManipulatedItem()
2551
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2552
- return ____exports.Unit:of(unit), Item:of(item)
2647
+ local unitHandle = getTriggerUnit()
2648
+ local itemHandle = getManipulatedItem()
2649
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2650
+ local unit = ____exports.Unit:of(unitHandle)
2651
+ local item = Item:of(itemHandle)
2652
+ if ownerByItem[item] ~= unit then
2653
+ return unit, item
2654
+ end
2553
2655
  end
2554
2656
  return IgnoreEvent
2555
2657
  end
@@ -2560,59 +2662,24 @@ Unit.itemUsedEvent = __TS__New(
2560
2662
  function()
2561
2663
  local unit = getTriggerUnit()
2562
2664
  local item = getManipulatedItem()
2563
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2665
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2564
2666
  return ____exports.Unit:of(unit), Item:of(item)
2565
2667
  end
2566
2668
  return IgnoreEvent
2567
2669
  end
2568
2670
  )
2569
- Unit.itemStackedEvent = __TS__New(
2570
- ____exports.UnitTriggerEvent,
2571
- EVENT_PLAYER_UNIT_STACK_ITEM,
2572
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2573
- )
2574
2671
  __TS__ObjectDefineProperty(
2575
2672
  Unit,
2576
- "itemUseOrderEvent",
2673
+ "itemChargesChangedEvent",
2577
2674
  {get = function(self)
2578
2675
  local event = __TS__New(Event)
2579
- for order = orderId("useslot0"), orderId("useslot5") do
2580
- local slot = order - orderId("useslot0")
2581
- local function listener(unit)
2582
- local item = unit.items[slot + 1]
2583
- if item ~= nil then
2584
- invoke(event, unit, item)
2585
- end
2676
+ Item.chargesChangedEvent:addListener(function(item)
2677
+ local unit = item.owner
2678
+ if unit ~= nil then
2679
+ invoke(event, unit, item)
2586
2680
  end
2587
- self.onImmediateOrder[order]:addListener(listener)
2588
- self.onTargetOrder[order]:addListener(listener)
2589
- self.onPointOrder[order]:addListener(listener)
2590
- end
2591
- rawset(self, "itemUseOrderEvent", event)
2592
- return event
2593
- end}
2594
- )
2595
- __TS__ObjectDefineProperty(
2596
- Unit,
2597
- "itemMoveOrderEvent",
2598
- {get = function(self)
2599
- local event = __TS__New(Event)
2600
- for order = orderId("moveslot0"), orderId("moveslot5") do
2601
- local slotTo = order - orderId("moveslot0")
2602
- self.onTargetOrder[order]:addListener(function(unit, item)
2603
- local slotFrom = unit.items:findSlot(item)
2604
- if slotFrom ~= nil then
2605
- invoke(
2606
- event,
2607
- unit,
2608
- item,
2609
- slotFrom,
2610
- slotTo
2611
- )
2612
- end
2613
- end)
2614
- end
2615
- rawset(self, "itemMoveOrderEvent", event)
2681
+ end)
2682
+ rawset(self, "itemChargesChangedEvent", event)
2616
2683
  return event
2617
2684
  end}
2618
2685
  )
@@ -2641,6 +2708,10 @@ __TS__ObjectDefineProperty(
2641
2708
  rawset(self, "destroyEvent", destroyEvent)
2642
2709
  return destroyEvent
2643
2710
  end}
2711
+ )
2712
+ Unit.synchronize = synchronizer(
2713
+ function(unit) return unit.syncId end,
2714
+ function(syncId) return unitBySyncId[syncId] end
2644
2715
  );
2645
2716
  (function(self)
2646
2717
  local leaveAbilityIds = postcompile(function()
@@ -2658,11 +2729,7 @@ __TS__ObjectDefineProperty(
2658
2729
  function(____, id) return fourCC(id) end
2659
2730
  )
2660
2731
  end)
2661
- for ____, leaveOrderId in ipairs({
2662
- orderId("undefend"),
2663
- orderId("magicundefense"),
2664
- orderId("unimmolation")
2665
- }) do
2732
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2666
2733
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2667
2734
  local handle = unit.handle
2668
2735
  for i = 1, #leaveAbilityIds do
@@ -2670,7 +2737,8 @@ __TS__ObjectDefineProperty(
2670
2737
  return
2671
2738
  end
2672
2739
  end
2673
- unit:destroy()
2740
+ unit:saveData()
2741
+ Timer:run(unit, "destroy")
2674
2742
  end)
2675
2743
  end
2676
2744
  end)(Unit)