warscript 0.0.1-dev.c37d12c → 0.0.1-dev.c47d565

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 (498) hide show
  1. package/attributes.d.ts +18 -0
  2. package/attributes.lua +32 -0
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/dummy.lua +4 -2
  8. package/core/types/effect.d.ts +24 -6
  9. package/core/types/effect.lua +169 -107
  10. package/core/types/frame.d.ts +24 -3
  11. package/core/types/frame.lua +198 -42
  12. package/core/types/group.d.ts +0 -1
  13. package/core/types/handle.d.ts +2 -1
  14. package/core/types/handle.lua +14 -9
  15. package/core/types/image.d.ts +0 -1
  16. package/core/types/item.d.ts +1 -0
  17. package/core/types/item.lua +1 -0
  18. package/core/types/missile.d.ts +2 -2
  19. package/core/types/missile.lua +8 -2
  20. package/core/types/player.d.ts +18 -1
  21. package/core/types/player.lua +76 -26
  22. package/core/types/playerCamera.d.ts +2 -0
  23. package/core/types/playerCamera.lua +123 -5
  24. package/core/types/playerColor.lua +4 -3
  25. package/core/types/sound.d.ts +18 -25
  26. package/core/types/sound.lua +113 -33
  27. package/core/types/tileCell.d.ts +18 -3
  28. package/core/types/tileCell.lua +108 -0
  29. package/core/types/timer.d.ts +9 -8
  30. package/core/types/timer.lua +45 -23
  31. package/core/types/unit.d.ts +5 -0
  32. package/core/types/unit.lua +13 -0
  33. package/core/util.d.ts +3 -1
  34. package/core/util.lua +127 -4
  35. package/decl/index.d.ts +1 -0
  36. package/decl/native.d.ts +1718 -964
  37. package/destroyable.d.ts +1 -0
  38. package/destroyable.lua +9 -0
  39. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  40. package/engine/ability-type-extended-tooltip.lua +44 -0
  41. package/engine/ability.d.ts +1 -1
  42. package/engine/behavior.d.ts +24 -11
  43. package/engine/behavior.lua +233 -73
  44. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  45. package/engine/behaviour/ability/always-enabled.lua +31 -0
  46. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  47. package/engine/behaviour/ability/apply-buff.lua +36 -4
  48. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  49. package/engine/behaviour/ability/apply-unit-behavior.lua +37 -9
  50. package/engine/behaviour/ability/damage.d.ts +43 -11
  51. package/engine/behaviour/ability/damage.lua +89 -39
  52. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  53. package/engine/behaviour/ability/emulate-impact.lua +44 -0
  54. package/engine/behaviour/ability/heal.d.ts +33 -6
  55. package/engine/behaviour/ability/heal.lua +89 -10
  56. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  57. package/engine/behaviour/ability/instant-impact.lua +4 -15
  58. package/engine/behaviour/ability/on-command-impact.d.ts +9 -0
  59. package/engine/behaviour/ability/on-command-impact.lua +26 -0
  60. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  61. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  62. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  63. package/engine/behaviour/ability/restore-mana.lua +29 -0
  64. package/engine/behaviour/ability.d.ts +37 -7
  65. package/engine/behaviour/ability.lua +208 -27
  66. package/engine/behaviour/unit/stun-immunity.d.ts +12 -7
  67. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  68. package/engine/behaviour/unit.d.ts +49 -4
  69. package/engine/behaviour/unit.lua +293 -2
  70. package/engine/buff.d.ts +177 -59
  71. package/engine/buff.lua +795 -281
  72. package/engine/game-map.d.ts +7 -0
  73. package/engine/game-map.lua +32 -0
  74. package/engine/index.d.ts +2 -1
  75. package/engine/internal/ability.d.ts +31 -15
  76. package/engine/internal/ability.lua +177 -104
  77. package/engine/internal/item/ability.lua +162 -4
  78. package/engine/internal/item/fields.d.ts +12 -0
  79. package/engine/internal/item/fields.lua +33 -0
  80. package/engine/internal/item/owner-cache.d.ts +5 -0
  81. package/engine/internal/item/owner-cache.lua +4 -0
  82. package/engine/internal/item+owner.d.ts +2 -0
  83. package/engine/internal/item+owner.lua +37 -8
  84. package/engine/internal/item.d.ts +34 -18
  85. package/engine/internal/item.lua +308 -102
  86. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  87. package/engine/internal/mechanics/ability-duration.lua +3 -1
  88. package/engine/internal/mechanics/cast-ability.lua +89 -0
  89. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  90. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  91. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  92. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  93. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  94. package/engine/internal/misc/frame-coordinates.lua +21 -0
  95. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  96. package/engine/internal/misc/get-terrain-z.lua +11 -0
  97. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  98. package/engine/internal/misc/player-local-handle.lua +5 -0
  99. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  100. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  101. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  102. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  103. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  104. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  105. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  106. package/engine/internal/object-data/evasion-probability.lua +16 -0
  107. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  108. package/engine/internal/object-data/health-bonus.lua +16 -0
  109. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  110. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  111. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  112. package/engine/internal/object-data/mana-bonus.lua +16 -0
  113. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  114. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  115. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  116. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  117. package/engine/internal/unit/ability.d.ts +45 -1
  118. package/engine/internal/unit/ability.lua +128 -17
  119. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  120. package/engine/internal/unit/add-item-to-slot-init.lua +12 -0
  121. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  122. package/engine/internal/unit/add-item-to-slot.lua +93 -0
  123. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  124. package/engine/internal/unit/allowed-targets.lua +9 -1
  125. package/engine/internal/unit/appearance.d.ts +15 -0
  126. package/engine/internal/unit/appearance.lua +85 -0
  127. package/engine/internal/unit/attributes.d.ts +17 -0
  128. package/engine/internal/unit/attributes.lua +46 -0
  129. package/engine/internal/unit/bonus.d.ts +28 -8
  130. package/engine/internal/unit/bonus.lua +136 -9
  131. package/engine/internal/unit/buff.d.ts +2 -2
  132. package/engine/internal/unit/buff.lua +34 -19
  133. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  134. package/engine/internal/unit/detach-missiles.lua +30 -0
  135. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  136. package/engine/internal/unit/equipment-inventory.lua +233 -0
  137. package/engine/internal/unit/expiration-timer.lua +1 -1
  138. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  139. package/engine/internal/unit/extended-inventory.lua +99 -0
  140. package/engine/internal/unit/fly-height.d.ts +7 -0
  141. package/engine/internal/unit/fly-height.lua +20 -0
  142. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  143. package/engine/internal/unit/ignore-events-items.lua +14 -0
  144. package/engine/internal/unit/interrupts.d.ts +12 -0
  145. package/engine/internal/unit/interrupts.lua +28 -0
  146. package/engine/internal/unit/inventory.d.ts +28 -0
  147. package/engine/internal/unit/inventory.lua +87 -0
  148. package/engine/internal/unit/item-container.d.ts +25 -0
  149. package/engine/internal/unit/item-container.lua +11 -0
  150. package/engine/internal/unit/item-order-events.d.ts +17 -0
  151. package/engine/internal/unit/item-order-events.lua +67 -0
  152. package/engine/internal/unit/item-slot.d.ts +27 -0
  153. package/engine/internal/unit/item-slot.lua +92 -0
  154. package/engine/internal/unit/main-selected.d.ts +13 -0
  155. package/engine/internal/unit/main-selected.lua +36 -0
  156. package/engine/internal/unit/order.d.ts +20 -0
  157. package/engine/internal/unit/order.lua +136 -0
  158. package/engine/internal/unit/range-event.d.ts +12 -0
  159. package/engine/internal/unit/range-event.lua +90 -0
  160. package/engine/internal/unit/scale.d.ts +7 -0
  161. package/engine/internal/unit/scale.lua +20 -0
  162. package/engine/internal/unit+ability.d.ts +2 -1
  163. package/engine/internal/unit+ability.lua +75 -5
  164. package/engine/internal/unit+bonus.lua +3 -3
  165. package/engine/internal/unit+damage.d.ts +11 -11
  166. package/engine/internal/unit+damage.lua +43 -14
  167. package/engine/internal/unit+rally.lua +9 -31
  168. package/engine/internal/unit+spellSteal.lua +1 -2
  169. package/engine/internal/unit+transport.lua +4 -10
  170. package/engine/internal/unit-missile-data.lua +58 -32
  171. package/engine/internal/unit-missile-launch.lua +70 -13
  172. package/engine/internal/unit.d.ts +91 -38
  173. package/engine/internal/unit.lua +669 -351
  174. package/engine/internal/utility.lua +12 -0
  175. package/engine/lightning.d.ts +12 -5
  176. package/engine/lightning.lua +48 -14
  177. package/engine/local-client.d.ts +35 -2
  178. package/engine/local-client.lua +367 -15
  179. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  180. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  181. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  182. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  183. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -3
  184. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  185. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  186. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  187. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  188. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  189. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  190. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  191. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  192. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  193. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  194. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  195. package/engine/object-data/auxiliary/item-class.lua +2 -0
  196. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  197. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  198. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  199. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  200. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  201. package/engine/object-data/auxiliary/order-type.lua +2 -0
  202. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  203. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  204. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  205. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  206. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  207. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  208. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  209. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  210. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  211. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  212. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  213. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  214. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  215. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  216. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  217. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  218. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  219. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  220. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  221. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  222. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  223. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  224. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  225. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  226. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  227. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  228. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  229. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -1
  230. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  231. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  232. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  233. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  234. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  235. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  236. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  237. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  238. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  239. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  240. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  241. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  242. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  243. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  244. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  245. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  246. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  247. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  248. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  249. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  250. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  251. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  252. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  253. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  254. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  255. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  256. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  257. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  258. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  259. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  260. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  261. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  262. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  263. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  264. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  265. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  266. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  267. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  268. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  269. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  270. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  271. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  272. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  273. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  274. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  275. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  276. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  277. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  278. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  279. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  280. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  281. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  282. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  283. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  284. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  285. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  286. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  287. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  288. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  289. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  290. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  291. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  292. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  293. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  294. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  295. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  296. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  297. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  298. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  299. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  300. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  301. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  302. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  303. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  304. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  305. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  306. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  307. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  308. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  309. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  310. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  311. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  312. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  313. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  314. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  315. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  316. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  317. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  318. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  319. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  320. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  321. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  322. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  323. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  324. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  325. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  326. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  327. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  328. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  329. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  330. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  331. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  332. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  333. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  334. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  335. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  336. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  337. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  338. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  339. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  340. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  341. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  342. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  343. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  344. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  345. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  346. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  347. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  348. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  349. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  350. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  351. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  352. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  353. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  354. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  355. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  356. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  357. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  358. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  359. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  360. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  361. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  362. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  363. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  364. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  365. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  366. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  367. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  368. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  369. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  370. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  371. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  372. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  373. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  374. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  375. package/engine/object-data/entry/ability-type/web.lua +52 -0
  376. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  377. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  378. package/engine/object-data/entry/ability-type.d.ts +48 -21
  379. package/engine/object-data/entry/ability-type.lua +377 -44
  380. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  381. package/engine/object-data/entry/buff-type/applicable.lua +143 -202
  382. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  383. package/engine/object-data/entry/buff-type.d.ts +10 -13
  384. package/engine/object-data/entry/buff-type.lua +39 -29
  385. package/engine/object-data/entry/destructible-type.d.ts +32 -3
  386. package/engine/object-data/entry/destructible-type.lua +181 -0
  387. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  388. package/engine/object-data/entry/item-type.d.ts +32 -4
  389. package/engine/object-data/entry/item-type.lua +177 -2
  390. package/engine/object-data/entry/lightning-type.d.ts +6 -9
  391. package/engine/object-data/entry/lightning-type.lua +1 -1
  392. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  393. package/engine/object-data/entry/sound-preset.lua +140 -0
  394. package/engine/object-data/entry/unit-type.d.ts +121 -6
  395. package/engine/object-data/entry/unit-type.lua +959 -118
  396. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  397. package/engine/object-data/entry/upgrade.d.ts +2 -3
  398. package/engine/object-data/entry/upgrade.lua +4 -4
  399. package/engine/object-data/entry.d.ts +23 -17
  400. package/engine/object-data/entry.lua +68 -32
  401. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  402. package/engine/object-field/ability.d.ts +33 -8
  403. package/engine/object-field/ability.lua +63 -3
  404. package/engine/object-field/item.d.ts +22 -0
  405. package/engine/object-field/item.lua +118 -0
  406. package/engine/object-field/unit.d.ts +72 -2
  407. package/engine/object-field/unit.lua +268 -4
  408. package/engine/object-field.d.ts +30 -11
  409. package/engine/object-field.lua +386 -122
  410. package/engine/random.d.ts +11 -0
  411. package/engine/random.lua +30 -0
  412. package/engine/standard/entries/ability-type.d.ts +3102 -7
  413. package/engine/standard/entries/ability-type.lua +0 -6
  414. package/engine/standard/entries/buff-type.d.ts +48 -0
  415. package/engine/standard/entries/buff-type.lua +46 -0
  416. package/engine/standard/entries/item-type.d.ts +1299 -0
  417. package/engine/standard/entries/item-type.lua +2 -0
  418. package/engine/standard/entries/lightning-type.d.ts +42 -15
  419. package/engine/standard/entries/lightning-type.lua +0 -14
  420. package/engine/standard/entries/sound-preset.d.ts +10 -0
  421. package/engine/standard/entries/sound-preset.lua +10 -0
  422. package/engine/standard/entries/unit-type.d.ts +47 -1
  423. package/engine/standard/entries/unit-type.lua +47 -1
  424. package/engine/standard/fields/ability.d.ts +5 -3
  425. package/engine/standard/fields/ability.lua +5 -3
  426. package/engine/standard/fields/item.d.ts +4 -0
  427. package/engine/standard/fields/item.lua +6 -0
  428. package/engine/standard/fields/unit.d.ts +12 -0
  429. package/engine/standard/fields/unit.lua +20 -0
  430. package/engine/synchronization.d.ts +11 -0
  431. package/engine/synchronization.lua +77 -0
  432. package/engine/text-tag.d.ts +36 -2
  433. package/engine/text-tag.lua +250 -10
  434. package/engine/unit.d.ts +14 -0
  435. package/engine/unit.lua +23 -2
  436. package/event.d.ts +3 -4
  437. package/event.lua +9 -5
  438. package/global/vec2.lua +1 -0
  439. package/index.d.ts +1 -0
  440. package/index.lua +1 -0
  441. package/lualib_bundle.lua +147 -43
  442. package/math/vec2.d.ts +2 -9
  443. package/math.d.ts +2 -2
  444. package/math.lua +14 -0
  445. package/net/socket.d.ts +7 -1
  446. package/net/socket.lua +45 -4
  447. package/network.d.ts +1 -0
  448. package/network.lua +28 -3
  449. package/objutil/ability.d.ts +0 -1
  450. package/objutil/buff.d.ts +0 -1
  451. package/objutil/buff.lua +13 -12
  452. package/objutil/object.d.ts +0 -1
  453. package/objutil/object.lua +1 -1
  454. package/objutil/unit.d.ts +0 -1
  455. package/objutil/unit.lua +8 -0
  456. package/operation.d.ts +8 -1
  457. package/operation.lua +38 -18
  458. package/package.json +3 -24
  459. package/patch-lua.d.ts +0 -0
  460. package/patch-lua.lua +25 -0
  461. package/patch-lualib.lua +1 -1
  462. package/property.d.ts +55 -0
  463. package/property.lua +374 -0
  464. package/string.d.ts +30 -0
  465. package/string.lua +14 -0
  466. package/util/stream.d.ts +0 -1
  467. package/utility/arrays.d.ts +20 -6
  468. package/utility/arrays.lua +62 -3
  469. package/utility/bit-set.d.ts +0 -2
  470. package/utility/callback-array.d.ts +17 -0
  471. package/utility/callback-array.lua +61 -0
  472. package/utility/functions.d.ts +8 -0
  473. package/utility/functions.lua +13 -0
  474. package/utility/lazy.d.ts +2 -0
  475. package/utility/lazy.lua +14 -0
  476. package/utility/linked-map.d.ts +35 -0
  477. package/utility/linked-map.lua +107 -0
  478. package/utility/linked-set.d.ts +17 -4
  479. package/utility/linked-set.lua +70 -3
  480. package/utility/lua-maps.d.ts +16 -4
  481. package/utility/lua-maps.lua +53 -2
  482. package/utility/lua-sets.d.ts +3 -2
  483. package/utility/lua-sets.lua +7 -0
  484. package/utility/random.d.ts +102 -0
  485. package/utility/random.lua +273 -0
  486. package/utility/records.lua +20 -1
  487. package/utility/reflection.lua +11 -7
  488. package/utility/types.d.ts +6 -2
  489. package/utility/unordered-map.d.ts +27 -0
  490. package/utility/unordered-map.lua +99 -0
  491. package/core/mapbounds.d.ts +0 -8
  492. package/core/mapbounds.lua +0 -12
  493. package/core/types/order.d.ts +0 -25
  494. package/core/types/order.lua +0 -55
  495. /package/engine/internal/{object-data/armor-increase.d.ts → mechanics/cast-ability.d.ts} +0 -0
  496. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  497. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  498. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -5,9 +5,12 @@ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
5
  local __TS__New = ____lualib.__TS__New
6
6
  local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
8
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
9
10
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
- local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
11
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
12
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
13
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
13
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -44,37 +47,44 @@ local checkNotNull = ____preconditions.checkNotNull
44
47
  local ____constants = require("engine.constants")
45
48
  local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
46
49
  local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
47
- local ____arrays = require("utility.arrays")
48
- local forEach = ____arrays.forEach
49
- local ____math = require("math")
50
- local min = ____math.min
50
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
51
+ local isItemIgnoredInEvents = ____ignore_2Devents_2Ditems.isItemIgnoredInEvents
52
+ local ____owner_2Dcache = require("engine.internal.item.owner-cache")
53
+ local ownerByItem = ____owner_2Dcache.ownerByItem
54
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
55
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
56
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
57
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
58
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
59
+ local ____attributes = require("attributes")
60
+ local isAttribute = ____attributes.isAttribute
61
+ local ____ability = require("engine.internal.item.ability")
62
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
63
+ local ____synchronization = require("engine.synchronization")
64
+ local synchronizer = ____synchronization.synchronizer
65
+ local ____linked_2Dmap = require("utility.linked-map")
66
+ local LinkedMap = ____linked_2Dmap.LinkedMap
51
67
  local match = string.match
52
68
  local ____tostring = _G.tostring
53
69
  local setUnitAnimation = SetUnitAnimation
54
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
- local queueUnitAnimation = QueueUnitAnimation
57
71
  local getUnitIntegerField = BlzGetUnitIntegerField
58
72
  local getUnitRealField = BlzGetUnitRealField
59
73
  local getHeroStr = GetHeroStr
60
74
  local getHeroAgi = GetHeroAgi
61
75
  local getHeroInt = GetHeroInt
62
- local setHeroStr = SetHeroStr
63
- local setHeroAgi = SetHeroAgi
64
- local setHeroInt = SetHeroInt
65
76
  local getUnitBooleanField = BlzGetUnitBooleanField
66
77
  local getUnitStringField = BlzGetUnitStringField
67
78
  local setUnitIntegerField = BlzSetUnitIntegerField
68
79
  local setUnitRealField = BlzSetUnitRealField
69
80
  local setUnitBooleanField = BlzSetUnitBooleanField
70
81
  local setUnitStringField = BlzSetUnitStringField
71
- local setUnitScale = SetUnitScale
72
82
  local setUnitPosition = SetUnitPosition
73
83
  local setUnitTimeScale = SetUnitTimeScale
74
84
  local getHandleId = GetHandleId
85
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
86
  local createUnit = CreateUnit
76
87
  local killUnit = KillUnit
77
- local setUnitExploded = SetUnitExploded
78
88
  local removeUnit = RemoveUnit
79
89
  local getUnitTypeId = GetUnitTypeId
80
90
  local isHeroUnitId = IsHeroUnitId
@@ -90,11 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
90
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
91
101
  local isUnitInRangeXY = IsUnitInRangeXY
92
102
  local isUnitInRange = IsUnitInRange
93
- local setResourceAmount = SetResourceAmount
94
- local getResourceAmount = GetResourceAmount
103
+ local getUnitWeaponRealField = BlzGetUnitWeaponRealField
104
+ local setUnitWeaponRealField = BlzSetUnitWeaponRealField
105
+ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
106
+ local setUnitWeaponStringField = BlzSetUnitWeaponStringField
95
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
96
108
  local unitDisableAbility = BlzUnitDisableAbility
97
- local unitInterruptAttack = BlzUnitInterruptAttack
98
109
  local isUnitInvisible = IsUnitInvisible
99
110
  local isUnitVisible = IsUnitVisible
100
111
  local getUnitX = GetUnitX
@@ -111,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
111
122
  local getIssuedOrderId = GetIssuedOrderId
112
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
113
124
  local unitAlive = UnitAlive
114
- local unitAddType = UnitAddType
115
- local unitRemoveType = UnitRemoveType
116
- local isUnitIllusion = IsUnitIllusion
117
- local isUnitType = IsUnitType
118
125
  local isUnitAlly = IsUnitAlly
119
126
  local isUnitEnemy = IsUnitEnemy
120
127
  local getOwningPlayer = GetOwningPlayer
121
- local setUnitColor = SetUnitColor
122
- local showUnitTeamGlow = BlzShowUnitTeamGlow
123
128
  ____exports.UnitClassification = {}
124
129
  local UnitClassification = ____exports.UnitClassification
125
130
  do
@@ -129,6 +134,7 @@ do
129
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
130
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
131
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
132
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
133
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
134
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -275,16 +281,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
275
281
  end
276
282
  local function dispatch(event, idGetter, argsGetter)
277
283
  local initialized = false
278
- local x = {}
279
284
  return setmetatable(
280
- x,
285
+ {},
281
286
  {
282
287
  __index = function(self, id)
283
288
  if type(id) ~= "number" then
284
289
  return event[id]
285
290
  end
286
291
  if not initialized then
287
- local invoke = Event.invoke
288
292
  event:addListener(function(...)
289
293
  local id = idGetter(...)
290
294
  local dispatched = rawget(self, id)
@@ -322,7 +326,6 @@ local function dispatchAbility(event)
322
326
  return event[id]
323
327
  end
324
328
  if not initialized then
325
- local invoke = Event.invoke
326
329
  event:addListener(function(unit, ability, ...)
327
330
  local dispatched = rawget(self, ability.typeId)
328
331
  if dispatched ~= nil then
@@ -339,6 +342,9 @@ local function dispatchAbility(event)
339
342
  }
340
343
  )
341
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
342
348
  local function damageEventPreventDeath(self, callback, ...)
343
349
  if self[0] ~= nil then
344
350
  return
@@ -350,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
350
356
  rawset(self, 1 + i, (select(i, ...)))
351
357
  end
352
358
  end
353
- 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
+ }
354
367
  local jlimitopByOperator = {
355
368
  [0] = LESS_THAN_OR_EQUAL,
356
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -368,15 +381,27 @@ local modifiers = {
368
381
  end,
369
382
  armor = function(unit, value)
370
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
371
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
372
389
  end
373
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
374
- assert(BlzSetAbilityRealLevelField(
375
- ability,
376
- armorBonusField,
377
- 0,
378
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
379
- ))
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
+ )
380
405
  end
381
406
  }
382
407
  local getters = {
@@ -387,53 +412,184 @@ local getters = {
387
412
  return BlzGetUnitArmor(unit)
388
413
  end
389
414
  }
390
- local weaponGetters = {
391
- index = function(self, handle, index)
392
- return index
393
- end,
394
- cooldown = function(self, handle, index)
395
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index)
396
- end,
397
- projectileArc = function(self, handle, index)
398
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index)
399
- end,
400
- projectileArt = function(self, handle, index)
401
- return BlzGetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index)
402
- end,
403
- projectileSpeed = function(self, handle, index)
404
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index)
405
- end,
406
- attackPoint = function(self, handle, index)
407
- return BlzGetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index)
408
- end
409
- }
410
- local weaponSetters = {
411
- cooldown = function(self, handle, index, value)
412
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, index, value))
413
- end,
414
- projectileArc = function(self, handle, index, value)
415
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, index, value))
416
- end,
417
- projectileArt = function(self, handle, index, value)
418
- assert(BlzSetUnitWeaponStringField(handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, index, value))
419
- end,
420
- projectileSpeed = function(self, handle, index, value)
421
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, index, value))
422
- end,
423
- attackPoint = function(self, handle, index, value)
424
- assert(BlzSetUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, index, value))
425
- end
426
- }
427
- local weaponMetatable = {
428
- __index = function(self, key)
429
- return weaponGetters[key](weaponGetters, self.h, self.i)
430
- end,
431
- __newindex = function(self, key, value)
432
- weaponSetters[key](weaponSetters, self.h, self.i, value)
433
- end
434
- }
435
- local unitInventorySize = UnitInventorySize
436
- local unitItemInSlot = UnitItemInSlot
415
+ ____exports.UnitWeapon = __TS__Class()
416
+ local UnitWeapon = ____exports.UnitWeapon
417
+ UnitWeapon.name = "UnitWeapon"
418
+ function UnitWeapon.prototype.____constructor(self, unit, index)
419
+ self.unit = unit
420
+ self.index = index
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
+ )
435
+ __TS__SetDescriptor(
436
+ UnitWeapon.prototype,
437
+ "cooldown",
438
+ {
439
+ get = function(self)
440
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index)
441
+ end,
442
+ set = function(self, cooldown)
443
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_BASE_COOLDOWN, self.index, cooldown)
444
+ end
445
+ },
446
+ true
447
+ )
448
+ __TS__SetDescriptor(
449
+ UnitWeapon.prototype,
450
+ "damage",
451
+ {
452
+ get = function(self)
453
+ local minimumDamage = self.damageBase + self.damageDiceCount
454
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
455
+ return {minimumDamage, maximumDamage}
456
+ end,
457
+ set = function(self, ____bindingPattern0)
458
+ local maximumDamage
459
+ local minimumDamage
460
+ minimumDamage = ____bindingPattern0[1]
461
+ maximumDamage = ____bindingPattern0[2]
462
+ self.damageBase = minimumDamage - 1
463
+ self.damageDiceCount = 1
464
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
465
+ end
466
+ },
467
+ true
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
+ )
482
+ __TS__SetDescriptor(
483
+ UnitWeapon.prototype,
484
+ "damageBase",
485
+ {
486
+ get = function(self)
487
+ return BlzGetUnitBaseDamage(self.unit.handle, self.index)
488
+ end,
489
+ set = function(self, damageBase)
490
+ BlzSetUnitBaseDamage(self.unit.handle, self.index, damageBase)
491
+ end
492
+ },
493
+ true
494
+ )
495
+ __TS__SetDescriptor(
496
+ UnitWeapon.prototype,
497
+ "damageDiceCount",
498
+ {
499
+ get = function(self)
500
+ return BlzGetUnitDiceNumber(self.unit.handle, self.index)
501
+ end,
502
+ set = function(self, damageDiceCount)
503
+ BlzSetUnitDiceNumber(self.unit.handle, self.index, damageDiceCount)
504
+ end
505
+ },
506
+ true
507
+ )
508
+ __TS__SetDescriptor(
509
+ UnitWeapon.prototype,
510
+ "damageDiceSideCount",
511
+ {
512
+ get = function(self)
513
+ return BlzGetUnitDiceSides(self.unit.handle, self.index)
514
+ end,
515
+ set = function(self, damageDiceSideCount)
516
+ BlzSetUnitDiceSides(self.unit.handle, self.index, damageDiceSideCount)
517
+ end
518
+ },
519
+ true
520
+ )
521
+ __TS__SetDescriptor(
522
+ UnitWeapon.prototype,
523
+ "range",
524
+ {
525
+ get = function(self)
526
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_RANGE, self.index)
527
+ end,
528
+ set = function(self, range)
529
+ local handle = self.unit.handle
530
+ local index = self.index
531
+ setUnitWeaponRealField(
532
+ handle,
533
+ UNIT_WEAPON_RF_ATTACK_RANGE,
534
+ index + 1,
535
+ getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index + 1) + (range - getUnitWeaponRealField(handle, UNIT_WEAPON_RF_ATTACK_RANGE, index))
536
+ )
537
+ end
538
+ },
539
+ true
540
+ )
541
+ __TS__SetDescriptor(
542
+ UnitWeapon.prototype,
543
+ "impactDelay",
544
+ {
545
+ get = function(self)
546
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index)
547
+ end,
548
+ set = function(self, impactDelay)
549
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_DAMAGE_POINT, self.index, impactDelay)
550
+ end
551
+ },
552
+ true
553
+ )
554
+ __TS__SetDescriptor(
555
+ UnitWeapon.prototype,
556
+ "missileArc",
557
+ {
558
+ get = function(self)
559
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index)
560
+ end,
561
+ set = function(self, missileArc)
562
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_ARC, self.index, missileArc)
563
+ end
564
+ },
565
+ true
566
+ )
567
+ __TS__SetDescriptor(
568
+ UnitWeapon.prototype,
569
+ "missileModelPath",
570
+ {
571
+ get = function(self)
572
+ return getUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index)
573
+ end,
574
+ set = function(self, missileModelPath)
575
+ setUnitWeaponStringField(self.unit.handle, UNIT_WEAPON_SF_ATTACK_PROJECTILE_ART, self.index, missileModelPath)
576
+ end
577
+ },
578
+ true
579
+ )
580
+ __TS__SetDescriptor(
581
+ UnitWeapon.prototype,
582
+ "missileSpeed",
583
+ {
584
+ get = function(self)
585
+ return getUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index)
586
+ end,
587
+ set = function(self, missileSpeed)
588
+ setUnitWeaponRealField(self.unit.handle, UNIT_WEAPON_RF_ATTACK_PROJECTILE_SPEED, self.index, missileSpeed)
589
+ end
590
+ },
591
+ true
592
+ )
437
593
  local getItemAbility = BlzGetItemAbility
438
594
  local getUnitAbility = BlzGetUnitAbility
439
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -442,8 +598,6 @@ local getAbilityName = GetAbilityName
442
598
  local unitAddAbility = UnitAddAbility
443
599
  local getUnitGoldCost = GetUnitGoldCost
444
600
  local getUnitLumberCost = GetUnitWoodCost
445
- local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
- local unitAddItem = UnitAddItem
447
601
  local unitRemoveAbility = UnitRemoveAbility
448
602
  local function retrieveAbility(unit, ability, abilityId)
449
603
  if ability == nil then
@@ -453,19 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
453
607
  ____exports.Unit:of(unit)
454
608
  )
455
609
  end
456
- if not unitAddAbility(unit, abilityId) then
457
- if getUnitAbility(unit, abilityId) == ability then
458
- return UnitAbility:of(
459
- ability,
460
- abilityId,
461
- ____exports.Unit:of(unit)
462
- )
463
- end
464
- else
465
- unitRemoveAbility(unit, abilityId)
466
- end
467
- for i = 0, unitInventorySize(unit) - 1 do
468
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
469
612
  if getItemAbility(item, abilityId) == ability then
470
613
  return ItemAbility:of(
471
614
  ability,
@@ -510,55 +653,110 @@ local fieldSetters = {
510
653
  }
511
654
  local dummies = {}
512
655
  for ____, player in ipairs(Player.all) do
513
- local dummy = assert(createUnit(
514
- player.handle,
515
- dummyUnitId,
516
- 0,
517
- 0,
518
- 270
519
- ))
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
+ )
520
667
  ShowUnit(dummy, false)
521
668
  dummies[player] = dummy
522
669
  end
670
+ local function delayHealthChecksCallback(unit)
671
+ local counter = (unit[104] or 0) - 1
672
+ if counter ~= 0 then
673
+ unit[104] = counter
674
+ return
675
+ end
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
678
+ if healthBonus ~= nil then
679
+ unit[105] = nil
680
+ local handle = unit.handle
681
+ BlzSetUnitMaxHP(
682
+ handle,
683
+ BlzGetUnitMaxHP(handle) - healthBonus
684
+ )
685
+ end
686
+ end
687
+ local nextSyncId = 1
688
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
689
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
690
+ local function addAbility(unit, abilityTypeId)
691
+ local ____unitAddAbility_result_0
692
+ if unitAddAbility(unit, abilityTypeId) then
693
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
694
+ else
695
+ ____unitAddAbility_result_0 = nil
696
+ end
697
+ return ____unitAddAbility_result_0
698
+ end
523
699
  ____exports.Unit = __TS__Class()
524
700
  local Unit = ____exports.Unit
525
701
  Unit.name = "Unit"
526
702
  __TS__ClassExtends(Unit, Handle)
527
703
  function Unit.prototype.____constructor(self, handle)
528
704
  Handle.prototype.____constructor(self, handle)
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
529
708
  self._owner = Player:of(getOwningPlayer(handle))
530
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
- 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
+ )
532
719
  if unitAddAbility(
533
720
  handle,
534
721
  fourCC("Amrf")
535
722
  ) then
536
- assert(unitRemoveAbility(
537
- handle,
538
- fourCC("Amrf")
539
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
540
731
  end
732
+ unitBySyncId[self.syncId] = self
541
733
  local ____ = self.abilities
542
734
  end
543
- function Unit.prototype.getEvent(self, event, collector)
544
- self.events = self.events or ({})
545
- local eventId = GetHandleId(event)
546
- if not self.events[eventId] then
547
- 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(
548
741
  TriggerEvent,
549
742
  function(trigger)
550
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
551
744
  end,
552
745
  collector or (function() return {} end)
553
746
  )
747
+ self.events:put(eventId, event)
554
748
  end
555
- 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))
556
756
  end
557
757
  function Unit.prototype.onDestroy(self)
558
758
  local handle = self.handle
559
- if not self._owner then
560
- self._owner = Player:of(getOwningPlayer(handle))
561
- end
759
+ self:saveData()
562
760
  local abilities = self.abilities
563
761
  for ____, ability in ipairs(abilities) do
564
762
  ability:destroy()
@@ -576,7 +774,9 @@ function Unit.prototype.onDestroy(self)
576
774
  end
577
775
  local eventsToDestroy = self._eventsToDestroy
578
776
  if eventsToDestroy ~= nil then
579
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
580
780
  end
581
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
582
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -594,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
594
794
  self._attackHandlers = handlers
595
795
  if #handlers == 1 then
596
796
  local handle = self.handle
597
- 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
+ )
598
802
  end
599
803
  return handler
600
804
  end
@@ -623,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
623
827
  end}
624
828
  end
625
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
626
- local ____combatClassification_0 = combatClassification
627
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
628
832
  end
629
833
  function Unit.prototype.addClassification(self, classification)
630
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
631
835
  end
632
836
  function Unit.prototype.removeClassification(self, classification)
633
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
634
838
  end
635
839
  function Unit.prototype.hasClassification(self, classification)
636
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
637
841
  end
638
842
  function Unit.prototype.isVisibleTo(self, player)
639
843
  return isUnitVisible(self.handle, player.handle)
@@ -642,13 +846,19 @@ function Unit.prototype.isInvisibleTo(self, player)
642
846
  return isUnitInvisible(self.handle, player.handle)
643
847
  end
644
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
645
- local ____temp_1
849
+ local ____temp_4
646
850
  if type(x) == "number" then
647
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
648
852
  else
649
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
853
+ local ____temp_3
854
+ if __TS__InstanceOf(x, ____exports.Unit) then
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
856
+ else
857
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
858
+ end
859
+ ____temp_4 = ____temp_3
650
860
  end
651
- return ____temp_1
861
+ return ____temp_4
652
862
  end
653
863
  function Unit.prototype.isAllyOf(self, unit)
654
864
  return isUnitAlly(
@@ -666,13 +876,31 @@ function Unit.prototype.playAnimation(self, animation, rarity)
666
876
  if type(animation) == "number" then
667
877
  setUnitAnimationByIndex(self.handle, animation)
668
878
  elseif rarity then
669
- setUnitAnimationWithRarity(self.handle, animation, rarity)
879
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
670
880
  else
671
881
  setUnitAnimation(self.handle, animation)
672
882
  end
673
883
  end
884
+ function Unit.prototype.resetAnimation(self)
885
+ ResetUnitAnimation(self.handle)
886
+ end
674
887
  function Unit.prototype.queueAnimation(self, animation)
675
- 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
900
+ end
901
+ function Unit.prototype.delayHealthChecks(self)
902
+ self[104] = (self[104] or 0) + 1
903
+ Timer:run(delayHealthChecksCallback, self)
676
904
  end
677
905
  function Unit.prototype.setPosition(self, x, y)
678
906
  setUnitPosition(self.handle, x, y)
@@ -681,14 +909,21 @@ function Unit.prototype.isSelected(self, player)
681
909
  return IsUnitSelected(self.handle, player.handle)
682
910
  end
683
911
  function Unit.prototype.explode(self)
684
- setUnitExploded(self.handle, true)
912
+ SetUnitExploded(self.handle, true)
685
913
  killUnit(self.handle)
686
914
  end
687
915
  function Unit.prototype.kill(self)
688
916
  killUnit(self.handle)
689
917
  end
690
- function Unit.prototype.revive(self, pos, doEffect)
691
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
918
+ function Unit.prototype.revive(self, x, y, doEffect)
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
924
+ end
925
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
926
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
692
927
  end
693
928
  function Unit.prototype.healTarget(self, target, amount)
694
929
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -731,17 +966,16 @@ function Unit.prototype.itemInSlot(self, slot)
731
966
  return Item:of(UnitItemInSlot(self.handle, slot))
732
967
  end
733
968
  function Unit.prototype.addAbility(self, abilityId)
734
- if unitAddAbility(self.handle, abilityId) then
735
- local ability = UnitAbility:of(
736
- checkNotNull(getUnitAbility(self.handle, abilityId)),
737
- abilityId,
738
- self
739
- )
969
+ local ability = UnitAbility:of(
970
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
971
+ abilityId,
972
+ self
973
+ )
974
+ if ability ~= nil then
740
975
  local abilities = self.abilities
741
976
  abilities[#abilities + 1] = ability
742
- return ability
743
977
  end
744
- return nil
978
+ return ability
745
979
  end
746
980
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
747
981
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -755,47 +989,47 @@ end
755
989
  function Unit.prototype.hasAbility(self, abilityId)
756
990
  return getUnitAbilityLevel(self.handle, abilityId) > 0
757
991
  end
758
- function Unit.prototype.getAbilityById(self, abilityId)
759
- local handle = self.handle
760
- if unitAddAbility(handle, abilityId) then
761
- assert(unitRemoveAbility(handle, abilityId))
762
- return nil
763
- end
764
- return UnitAbility:of(
765
- getUnitAbility(self.handle, abilityId),
766
- abilityId,
767
- self
768
- )
992
+ function Unit.prototype.getAbility(self, abilityId)
993
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
994
+ return UnitAbility:of(ability, abilityId, self)
769
995
  end
770
- function Unit.prototype.removeAbility(self, abilityId)
771
- if unitRemoveAbility(self.handle, abilityId) then
772
- local abilities = self.abilities
773
- for i = 1, #abilities do
774
- if abilities[i].typeId == abilityId then
775
- abilities[i]:destroy()
776
- tremove(abilities, i)
777
- 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
778
1004
  end
1005
+ ability:destroy()
1006
+ return true
779
1007
  end
780
- return true
781
1008
  end
782
- return false
1009
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
783
1010
  end
784
1011
  function Unit.prototype.hideAbility(self, abilityId, flag)
785
1012
  BlzUnitHideAbility(self.handle, abilityId, flag)
786
1013
  end
1014
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
1015
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
1016
+ end
787
1017
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
1018
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
1019
  end
790
1020
  function Unit.prototype.endAbilityCooldown(self, abilityId)
791
1021
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
792
1022
  end
793
- function Unit.prototype.interruptAttack(self)
794
- unitInterruptAttack(self.handle)
795
- end
796
1023
  function Unit.prototype.interruptCast(self, abilityId)
797
- unitDisableAbility(self.handle, abilityId, true, false)
798
- unitDisableAbility(self.handle, abilityId, false, false)
1024
+ local handle = self.handle
1025
+ unitDisableAbility(handle, abilityId, true, false)
1026
+ Timer:run(
1027
+ unitDisableAbility,
1028
+ handle,
1029
+ abilityId,
1030
+ false,
1031
+ false
1032
+ )
799
1033
  end
800
1034
  function Unit.prototype.getDistanceTo(self, target)
801
1035
  local handle = self.handle
@@ -855,18 +1089,44 @@ function Unit.prototype.unpauseEx(self)
855
1089
  self:decrementStunCounter()
856
1090
  end
857
1091
  function Unit.prototype.incrementStunCounter(self)
858
- local stunCounter = self[101] or 0
859
- if not self[100] or stunCounter >= 0 then
1092
+ local stunCounter = self[102] or 0
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
860
1094
  BlzPauseUnitEx(self.handle, true)
861
1095
  end
862
- self[101] = stunCounter + 1
1096
+ self[102] = stunCounter + 1
863
1097
  end
864
1098
  function Unit.prototype.decrementStunCounter(self)
865
- local stunCounter = self[101] or 0
866
- if not self[100] or stunCounter >= 1 then
1099
+ local stunCounter = self[102] or 0
1100
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
867
1101
  BlzPauseUnitEx(self.handle, false)
868
1102
  end
869
- self[101] = stunCounter - 1
1103
+ self[102] = stunCounter - 1
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
870
1130
  end
871
1131
  function Unit.create(self, owner, id, x, y, facing, skinId)
872
1132
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -968,8 +1228,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
968
1228
  )
969
1229
  return targetCollection
970
1230
  end
971
- function Unit.getSelectionOf(self, player)
972
- targetCollection = {}
1231
+ function Unit.getSelectionOf(self, player, target)
1232
+ if target == nil then
1233
+ target = {}
1234
+ end
1235
+ targetCollection = target
973
1236
  targetCollectionNextIndex = 1
974
1237
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
1238
  return targetCollection
@@ -991,6 +1254,9 @@ end
991
1254
  function Unit.prototype.__tostring(self)
992
1255
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
1256
  end
1257
+ function Unit.getBySyncId(self, syncId)
1258
+ return unitBySyncId[syncId]
1259
+ end
994
1260
  __TS__SetDescriptor(
995
1261
  Unit.prototype,
996
1262
  "_deltas",
@@ -1050,7 +1316,15 @@ __TS__SetDescriptor(
1050
1316
  Unit.prototype,
1051
1317
  "isIllusion",
1052
1318
  {get = function(self)
1053
- return isUnitIllusion(self.handle)
1319
+ return IsUnitIllusion(self.handle)
1320
+ end},
1321
+ true
1322
+ )
1323
+ __TS__SetDescriptor(
1324
+ Unit.prototype,
1325
+ "isStunned",
1326
+ {get = function(self)
1327
+ return getUnitCurrentOrder(self.handle) == 851973
1054
1328
  end},
1055
1329
  true
1056
1330
  )
@@ -1071,12 +1345,27 @@ __TS__SetDescriptor(
1071
1345
  Unit.prototype,
1072
1346
  "weapons",
1073
1347
  {get = function(self)
1074
- local weapons = {
1075
- setmetatable({h = self.handle, i = 0}, weaponMetatable),
1076
- setmetatable({h = self.handle, i = 1}, weaponMetatable)
1077
- }
1078
- rawset(self, "weapons", weapons)
1079
- return weapons
1348
+ return {self.firstWeapon, self.secondWeapon}
1349
+ end},
1350
+ true
1351
+ )
1352
+ __TS__SetDescriptor(
1353
+ Unit.prototype,
1354
+ "firstWeapon",
1355
+ {get = function(self)
1356
+ local weapon = __TS__New(____exports.UnitWeapon, self, 0)
1357
+ rawset(self, "firstWeapon", weapon)
1358
+ return weapon
1359
+ end},
1360
+ true
1361
+ )
1362
+ __TS__SetDescriptor(
1363
+ Unit.prototype,
1364
+ "secondWeapon",
1365
+ {get = function(self)
1366
+ local weapon = __TS__New(____exports.UnitWeapon, self, 1)
1367
+ rawset(self, "secondWeapon", weapon)
1368
+ return weapon
1080
1369
  end},
1081
1370
  true
1082
1371
  )
@@ -1114,13 +1403,13 @@ __TS__SetDescriptor(
1114
1403
  )
1115
1404
  __TS__SetDescriptor(
1116
1405
  Unit.prototype,
1117
- "strengthBase",
1406
+ "primaryAttribute",
1118
1407
  {
1119
1408
  get = function(self)
1120
- return getHeroStr(self.handle, false)
1409
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1121
1410
  end,
1122
- set = function(self, strengthBase)
1123
- setHeroStr(self.handle, strengthBase, true)
1411
+ set = function(self, primaryAttribute)
1412
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1124
1413
  end
1125
1414
  },
1126
1415
  true
@@ -1142,19 +1431,6 @@ __TS__SetDescriptor(
1142
1431
  end},
1143
1432
  true
1144
1433
  )
1145
- __TS__SetDescriptor(
1146
- Unit.prototype,
1147
- "agilityBase",
1148
- {
1149
- get = function(self)
1150
- return getHeroAgi(self.handle, false)
1151
- end,
1152
- set = function(self, agilityBase)
1153
- setHeroAgi(self.handle, agilityBase, true)
1154
- end
1155
- },
1156
- true
1157
- )
1158
1434
  __TS__SetDescriptor(
1159
1435
  Unit.prototype,
1160
1436
  "agilityBonus",
@@ -1172,19 +1448,6 @@ __TS__SetDescriptor(
1172
1448
  end},
1173
1449
  true
1174
1450
  )
1175
- __TS__SetDescriptor(
1176
- Unit.prototype,
1177
- "intelligenceBase",
1178
- {
1179
- get = function(self)
1180
- return getHeroInt(self.handle, false)
1181
- end,
1182
- set = function(self, intelligenceBase)
1183
- setHeroInt(self.handle, intelligenceBase, true)
1184
- end
1185
- },
1186
- true
1187
- )
1188
1451
  __TS__SetDescriptor(
1189
1452
  Unit.prototype,
1190
1453
  "intelligenceBonus",
@@ -1233,17 +1496,17 @@ __TS__SetDescriptor(
1233
1496
  "isTeamGlowVisible",
1234
1497
  {
1235
1498
  get = function(self)
1236
- return not self[103]
1499
+ return not self[107]
1237
1500
  end,
1238
1501
  set = function(self, isTeamGlowVisible)
1239
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
- local ____temp_2
1502
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1503
+ local ____temp_8
1241
1504
  if not isTeamGlowVisible then
1242
- ____temp_2 = true
1505
+ ____temp_8 = true
1243
1506
  else
1244
- ____temp_2 = nil
1507
+ ____temp_8 = nil
1245
1508
  end
1246
- self[103] = ____temp_2
1509
+ self[107] = ____temp_8
1247
1510
  end
1248
1511
  },
1249
1512
  true
@@ -1252,9 +1515,9 @@ __TS__SetDescriptor(
1252
1515
  Unit.prototype,
1253
1516
  "color",
1254
1517
  {set = function(self, color)
1255
- setUnitColor(self.handle, color.handle)
1256
- if self[103] then
1257
- showUnitTeamGlow(self.handle, false)
1518
+ SetUnitColor(self.handle, color.handle)
1519
+ if self[107] then
1520
+ BlzShowUnitTeamGlow(self.handle, false)
1258
1521
  end
1259
1522
  end},
1260
1523
  true
@@ -1277,10 +1540,14 @@ __TS__SetDescriptor(
1277
1540
  "maxHealth",
1278
1541
  {
1279
1542
  get = function(self)
1280
- return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1543
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1281
1544
  end,
1282
1545
  set = function(self, maxHealth)
1283
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1546
+ if maxHealth < 1 and self[104] ~= nil then
1547
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1548
+ maxHealth = 1
1549
+ end
1550
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1284
1551
  end
1285
1552
  },
1286
1553
  true
@@ -1322,10 +1589,10 @@ __TS__SetDescriptor(
1322
1589
  "health",
1323
1590
  {
1324
1591
  get = function(self)
1325
- return GetWidgetLife(self.handle) - (self[102] or 0)
1592
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1326
1593
  end,
1327
1594
  set = function(self, health)
1328
- SetWidgetLife(self.handle, health + (self[102] or 0))
1595
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1329
1596
  end
1330
1597
  },
1331
1598
  true
@@ -1401,25 +1668,12 @@ __TS__SetDescriptor(
1401
1668
  },
1402
1669
  true
1403
1670
  )
1404
- __TS__SetDescriptor(
1405
- Unit.prototype,
1406
- "flyHeight",
1407
- {
1408
- get = function(self)
1409
- return getUnitFlyHeight(self.handle)
1410
- end,
1411
- set = function(self, v)
1412
- SetUnitFlyHeight(self.handle, v, 100000)
1413
- end
1414
- },
1415
- true
1416
- )
1417
1671
  __TS__SetDescriptor(
1418
1672
  Unit.prototype,
1419
1673
  "x",
1420
1674
  {
1421
1675
  get = function(self)
1422
- return getUnitX(self.handle)
1676
+ return self[108] or getUnitX(self.handle)
1423
1677
  end,
1424
1678
  set = function(self, v)
1425
1679
  SetUnitX(self.handle, v)
@@ -1432,7 +1686,7 @@ __TS__SetDescriptor(
1432
1686
  "y",
1433
1687
  {
1434
1688
  get = function(self)
1435
- return getUnitY(self.handle)
1689
+ return self[109] or getUnitY(self.handle)
1436
1690
  end,
1437
1691
  set = function(self, v)
1438
1692
  SetUnitY(self.handle, v)
@@ -1518,10 +1772,10 @@ __TS__SetDescriptor(
1518
1772
  "gold",
1519
1773
  {
1520
1774
  get = function(self)
1521
- return getResourceAmount(self.handle)
1775
+ return GetResourceAmount(self.handle)
1522
1776
  end,
1523
1777
  set = function(self, gold)
1524
- setResourceAmount(self.handle, gold)
1778
+ SetResourceAmount(self.handle, gold)
1525
1779
  end
1526
1780
  },
1527
1781
  true
@@ -1536,17 +1790,21 @@ __TS__SetDescriptor(
1536
1790
  set = function(self, isPaused)
1537
1791
  local handle = self.handle
1538
1792
  if isPaused and not IsUnitPaused(handle) then
1539
- self[100] = true
1540
- for _ = self[101] or 0, -1 do
1541
- BlzPauseUnitEx(handle, true)
1793
+ self[101] = true
1794
+ if (self[103] or 0) <= 0 then
1795
+ for _ = self[102] or 0, -1 do
1796
+ BlzPauseUnitEx(handle, true)
1797
+ end
1542
1798
  end
1543
1799
  PauseUnit(handle, true)
1544
1800
  elseif not isPaused and IsUnitPaused(handle) then
1545
1801
  PauseUnit(handle, false)
1546
- for _ = self[101] or 0, -1 do
1547
- 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
1548
1806
  end
1549
- self[100] = nil
1807
+ self[101] = nil
1550
1808
  end
1551
1809
  end
1552
1810
  },
@@ -1602,20 +1860,6 @@ __TS__SetDescriptor(
1602
1860
  },
1603
1861
  true
1604
1862
  )
1605
- __TS__SetDescriptor(
1606
- Unit.prototype,
1607
- "scale",
1608
- {
1609
- get = function(self)
1610
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1611
- end,
1612
- set = function(self, v)
1613
- setUnitScale(self.handle, v, v, v)
1614
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1615
- end
1616
- },
1617
- true
1618
- )
1619
1863
  __TS__SetDescriptor(
1620
1864
  Unit.prototype,
1621
1865
  "timeScale",
@@ -1642,13 +1886,26 @@ __TS__SetDescriptor(
1642
1886
  Unit.prototype,
1643
1887
  "pathingCollisionRange",
1644
1888
  {get = function(self)
1645
- return 16 * (min(
1889
+ return 16 * (math.min(
1646
1890
  getUnitCollisionSize(self.handle) // 16,
1647
1891
  3
1648
1892
  ) + 1)
1649
1893
  end},
1650
1894
  true
1651
1895
  )
1896
+ __TS__SetDescriptor(
1897
+ Unit.prototype,
1898
+ "movementType",
1899
+ {
1900
+ get = function(self)
1901
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1902
+ end,
1903
+ set = function(self, movementType)
1904
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1905
+ end
1906
+ },
1907
+ true
1908
+ )
1652
1909
  __TS__SetDescriptor(
1653
1910
  Unit.prototype,
1654
1911
  "pathing",
@@ -1739,30 +1996,6 @@ __TS__SetDescriptor(
1739
1996
  end},
1740
1997
  true
1741
1998
  )
1742
- __TS__SetDescriptor(
1743
- Unit.prototype,
1744
- "onUnitInRange",
1745
- {get = function(self)
1746
- local handle = self.handle
1747
- local onUnitInRange = setmetatable(
1748
- {},
1749
- {__index = function(self, value)
1750
- local event = __TS__New(
1751
- TriggerEvent,
1752
- function(trigger)
1753
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1754
- end,
1755
- function() return ____exports.Unit:of(handle) end
1756
- )
1757
- rawset(self, value, event)
1758
- return event
1759
- end}
1760
- )
1761
- rawset(self, "onUnitInRange", onUnitInRange)
1762
- return onUnitInRange
1763
- end},
1764
- true
1765
- )
1766
1999
  __TS__SetDescriptor(
1767
2000
  Unit.prototype,
1768
2001
  "onManaEqual",
@@ -1830,6 +2063,14 @@ __TS__SetDescriptor(
1830
2063
  end},
1831
2064
  true
1832
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
+ )
1833
2074
  __TS__SetDescriptor(
1834
2075
  Unit.prototype,
1835
2076
  "onSelect",
@@ -1890,6 +2131,11 @@ __TS__SetDescriptor(
1890
2131
  end},
1891
2132
  true
1892
2133
  )
2134
+ Unit.levelChangedEvent = __TS__New(
2135
+ ____exports.UnitTriggerEvent,
2136
+ EVENT_PLAYER_HERO_LEVEL,
2137
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2138
+ )
1893
2139
  Unit.deathEvent = __TS__New(
1894
2140
  ____exports.UnitTriggerEvent,
1895
2141
  EVENT_PLAYER_UNIT_DEATH,
@@ -1903,12 +2149,11 @@ Unit.onDecay = __TS__New(
1903
2149
  Unit.onResurrect = __TS__New(
1904
2150
  InitializingEvent,
1905
2151
  function(event)
1906
- local invoke = Event.invoke
1907
2152
  local dead = setmetatable({}, {__mode = "k"})
1908
2153
  ____exports.Unit.deathEvent:addListener(function(unit)
1909
2154
  dead[unit] = true
1910
2155
  end)
1911
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2156
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
1912
2157
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
1913
2158
  dead[unit] = false
1914
2159
  invoke(event, unit)
@@ -1919,10 +2164,15 @@ Unit.onResurrect = __TS__New(
1919
2164
  Unit.morphEvent = __TS__New(
1920
2165
  InitializingEvent,
1921
2166
  function(event)
1922
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2167
+ local function ifNotLeft(unit)
2168
+ local handle = unit.handle
2169
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2170
+ invoke(event, unit)
2171
+ end
2172
+ end
2173
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
1923
2174
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
- Timer:run(Event.invoke, event, unit)
2175
+ Timer:run(ifNotLeft, unit)
1926
2176
  end
1927
2177
  end)
1928
2178
  end
@@ -1960,27 +2210,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
1960
2210
  Unit.onTargetCast = dispatchId(__TS__New(
1961
2211
  InitializingEvent,
1962
2212
  function(event)
1963
- local invoke = Event.invoke
1964
2213
  local function listener(unit, id)
1965
- local ____GetSpellTargetUnit_result_5
2214
+ local ____GetSpellTargetUnit_result_11
1966
2215
  if GetSpellTargetUnit() then
1967
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2216
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
1968
2217
  else
1969
- local ____GetSpellTargetItem_result_4
2218
+ local ____GetSpellTargetItem_result_10
1970
2219
  if GetSpellTargetItem() then
1971
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2220
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
1972
2221
  else
1973
- local ____GetSpellTargetDestructable_result_3
2222
+ local ____GetSpellTargetDestructable_result_9
1974
2223
  if GetSpellTargetDestructable() then
1975
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2224
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
1976
2225
  else
1977
- ____GetSpellTargetDestructable_result_3 = nil
2226
+ ____GetSpellTargetDestructable_result_9 = nil
1978
2227
  end
1979
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2228
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
1980
2229
  end
1981
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2230
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
1982
2231
  end
1983
- local target = ____GetSpellTargetUnit_result_5
2232
+ local target = ____GetSpellTargetUnit_result_11
1984
2233
  if target then
1985
2234
  invoke(event, unit, id, target)
1986
2235
  end
@@ -2152,10 +2401,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
2401
  ____exports.UnitTriggerEvent,
2153
2402
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
2403
  function()
2155
- local unit = ____exports.Unit:of(getOrderedUnit())
2156
- local issuedOrderId = getIssuedOrderId()
2157
- if unit ~= nil and unit.state == 1 then
2158
- return unit, issuedOrderId
2404
+ local handle = getOrderedUnit()
2405
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2406
+ local unit = ____exports.Unit:of(handle)
2407
+ if unit.state == 1 then
2408
+ return unit, getIssuedOrderId()
2409
+ end
2159
2410
  end
2160
2411
  return IgnoreEvent
2161
2412
  end
@@ -2177,7 +2428,6 @@ Unit.autoAttackStartEvent = __TS__New(
2177
2428
  )
2178
2429
  Unit.onDamaging = (function()
2179
2430
  local event = __TS__New(Event)
2180
- local invoke = Event.invoke
2181
2431
  local trigger = CreateTrigger()
2182
2432
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
2433
  TriggerAddCondition(
@@ -2187,38 +2437,57 @@ Unit.onDamaging = (function()
2187
2437
  if source and source.typeId == dummyUnitId then
2188
2438
  source = nil
2189
2439
  end
2190
- local target = BlzGetEventDamageTarget()
2440
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2441
+ local metadata = damageMetadataByTarget[target]
2442
+ damageMetadataByTarget[target] = nil
2191
2443
  local data = {
2192
2444
  amount = GetEventDamage(),
2193
- attackType = BlzGetEventAttackType(),
2445
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2194
2446
  damageType = BlzGetEventDamageType(),
2195
2447
  weaponType = BlzGetEventWeaponType(),
2196
- isAttack = BlzGetEventIsAttack()
2448
+ metadata = metadata,
2449
+ isAttack = BlzGetEventIsAttack(),
2450
+ originalAmount = GetEventDamage(),
2451
+ originalMetadata = metadata,
2452
+ preventRetaliation = damagingEventPreventRetaliation
2197
2453
  }
2198
2454
  if data.isAttack and source then
2199
- 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
2200
- if weapon == -1 then
2201
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2202
- weapon = 0
2203
- end
2204
- data.weapon = assert(source.weapons[weapon + 1])
2455
+ data.weapon = source:chooseWeapon(target)
2205
2456
  end
2206
2457
  if not data.isAttack or not source or not source._attackHandlers then
2207
2458
  invoke(
2208
2459
  event,
2209
2460
  source,
2210
- ____exports.Unit:of(target),
2461
+ target,
2211
2462
  setmetatable(
2212
2463
  {},
2213
2464
  {
2214
2465
  __index = data,
2215
2466
  __newindex = function(self, key, value)
2216
- damageSetters[key](value)
2467
+ local damageSetter = damageSetters[key]
2468
+ if damageSetter ~= nil then
2469
+ damageSetter(value)
2470
+ end
2217
2471
  data[key] = value
2218
2472
  end
2219
2473
  }
2220
2474
  )
2221
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
2222
2491
  return
2223
2492
  end
2224
2493
  BlzSetEventDamage(0)
@@ -2226,7 +2495,7 @@ Unit.onDamaging = (function()
2226
2495
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
2496
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
2497
  local sourceOwner = source.owner.handle
2229
- local targetOwner = GetOwningPlayer(target)
2498
+ local targetOwner = target.owner.handle
2230
2499
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
2500
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
2501
  Timer:run(function()
@@ -2242,23 +2511,19 @@ Unit.onDamaging = (function()
2242
2511
  for ____, ____value in ipairs(source._attackHandlers) do
2243
2512
  local condition = ____value[1]
2244
2513
  local action = ____value[2]
2245
- if condition(
2246
- source,
2247
- ____exports.Unit:of(target),
2248
- data
2249
- ) then
2514
+ if condition(source, target, data) then
2250
2515
  action(
2251
2516
  source,
2252
- ____exports.Unit:of(target),
2517
+ target,
2253
2518
  setmetatable(
2254
2519
  {fire = function()
2255
2520
  UnitDamageTarget(
2256
2521
  source.handle,
2257
- target,
2522
+ target.handle,
2258
2523
  data.amount,
2259
2524
  true,
2260
2525
  true,
2261
- data.attackType,
2526
+ attackTypeToNative(data.attackType),
2262
2527
  data.damageType,
2263
2528
  data.weaponType
2264
2529
  )
@@ -2276,7 +2541,6 @@ end)()
2276
2541
  Unit.onDamage = __TS__New(
2277
2542
  InitializingEvent,
2278
2543
  function(event)
2279
- local invoke = Event.invoke
2280
2544
  local trigger = CreateTrigger()
2281
2545
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
2546
  TriggerAddCondition(
@@ -2286,29 +2550,54 @@ Unit.onDamage = __TS__New(
2286
2550
  if source and source.typeId == dummyUnitId then
2287
2551
  source = nil
2288
2552
  end
2553
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2554
+ local damagingEvent = damagingEventByTarget[target]
2555
+ damagingEventByTarget[target] = nil
2289
2556
  local data = {
2290
2557
  amount = GetEventDamage(),
2291
- attackType = BlzGetEventAttackType(),
2558
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2292
2559
  damageType = BlzGetEventDamageType(),
2293
2560
  weaponType = BlzGetEventWeaponType(),
2561
+ metadata = damagingEvent and damagingEvent.metadata,
2294
2562
  isAttack = BlzGetEventIsAttack(),
2563
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2564
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2295
2565
  preventDeath = damageEventPreventDeath
2296
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
2297
2584
  local evData = setmetatable(
2298
2585
  {},
2299
2586
  {
2300
2587
  __index = data,
2301
2588
  __newindex = function(self, key, value)
2302
- damageSetters[key](value)
2589
+ local damageSetter = damageSetters[key]
2590
+ if damageSetter ~= nil then
2591
+ damageSetter(value)
2592
+ end
2303
2593
  data[key] = value
2304
2594
  end
2305
2595
  }
2306
2596
  )
2307
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
2597
  invoke(event, source, target, evData)
2309
2598
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
2599
  local bonusHealth = math.ceil(evData.amount)
2311
- target[102] = (target[102] or 0) + bonusHealth
2600
+ target[106] = (target[106] or 0) + bonusHealth
2312
2601
  BlzSetUnitMaxHP(
2313
2602
  target.handle,
2314
2603
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2322,7 +2611,7 @@ Unit.onDamage = __TS__New(
2322
2611
  evData[0],
2323
2612
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
2613
  )
2325
- target[102] = (target[102] or 0) - bonusHealth
2614
+ target[106] = (target[106] or 0) - bonusHealth
2326
2615
  SetWidgetLife(
2327
2616
  target.handle,
2328
2617
  GetWidgetLife(target.handle) - bonusHealth
@@ -2342,32 +2631,60 @@ Unit.onDamage = __TS__New(
2342
2631
  DestroyTrigger(trigger)
2343
2632
  end
2344
2633
  )
2345
- Unit.onItemDrop = __TS__New(
2634
+ Unit.itemDroppedEvent = __TS__New(
2346
2635
  ____exports.UnitTriggerEvent,
2347
2636
  EVENT_PLAYER_UNIT_DROP_ITEM,
2348
2637
  function()
2349
2638
  local unit = getTriggerUnit()
2350
- if getUnitTypeId(unit) ~= dummyUnitId then
2351
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2639
+ local item = getManipulatedItem()
2640
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2641
+ return ____exports.Unit:of(unit), Item:of(item)
2352
2642
  end
2353
2643
  return IgnoreEvent
2354
2644
  end
2355
2645
  )
2356
- Unit.onItemPickup = __TS__New(
2646
+ Unit.itemPickedUpEvent = __TS__New(
2357
2647
  ____exports.UnitTriggerEvent,
2358
2648
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
2649
  function()
2360
- local unit = getTriggerUnit()
2361
- if getUnitTypeId(unit) ~= dummyUnitId then
2362
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
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
2363
2658
  end
2364
2659
  return IgnoreEvent
2365
2660
  end
2366
2661
  )
2367
- Unit.onItemUse = __TS__New(
2662
+ Unit.itemUsedEvent = __TS__New(
2368
2663
  ____exports.UnitTriggerEvent,
2369
2664
  EVENT_PLAYER_UNIT_USE_ITEM,
2370
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2665
+ function()
2666
+ local unit = getTriggerUnit()
2667
+ local item = getManipulatedItem()
2668
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2669
+ return ____exports.Unit:of(unit), Item:of(item)
2670
+ end
2671
+ return IgnoreEvent
2672
+ end
2673
+ )
2674
+ __TS__ObjectDefineProperty(
2675
+ Unit,
2676
+ "itemChargesChangedEvent",
2677
+ {get = function(self)
2678
+ local event = __TS__New(Event)
2679
+ Item.chargesChangedEvent:addListener(function(item)
2680
+ local unit = item.owner
2681
+ if unit ~= nil then
2682
+ invoke(event, unit, item)
2683
+ end
2684
+ end)
2685
+ rawset(self, "itemChargesChangedEvent", event)
2686
+ return event
2687
+ end}
2371
2688
  )
2372
2689
  __TS__ObjectDefineProperty(
2373
2690
  Unit,
@@ -2394,6 +2711,10 @@ __TS__ObjectDefineProperty(
2394
2711
  rawset(self, "destroyEvent", destroyEvent)
2395
2712
  return destroyEvent
2396
2713
  end}
2714
+ )
2715
+ Unit.synchronize = synchronizer(
2716
+ function(unit) return unit.syncId end,
2717
+ function(syncId) return unitBySyncId[syncId] end
2397
2718
  );
2398
2719
  (function(self)
2399
2720
  local leaveAbilityIds = postcompile(function()
@@ -2411,11 +2732,7 @@ __TS__ObjectDefineProperty(
2411
2732
  function(____, id) return fourCC(id) end
2412
2733
  )
2413
2734
  end)
2414
- for ____, leaveOrderId in ipairs({
2415
- orderId("undefend"),
2416
- orderId("magicundefense"),
2417
- orderId("unimmolation")
2418
- }) do
2735
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2419
2736
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2420
2737
  local handle = unit.handle
2421
2738
  for i = 1, #leaveAbilityIds do
@@ -2423,7 +2740,8 @@ __TS__ObjectDefineProperty(
2423
2740
  return
2424
2741
  end
2425
2742
  end
2426
- unit:destroy()
2743
+ unit:saveData()
2744
+ Timer:run(unit, "destroy")
2427
2745
  end)
2428
2746
  end
2429
2747
  end)(Unit)