warscript 0.0.1-dev.404878c

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 (493) hide show
  1. package/LICENSE +23 -0
  2. package/binaryreader.d.ts +20 -0
  3. package/binaryreader.lua +50 -0
  4. package/binarywriter.d.ts +21 -0
  5. package/binarywriter.lua +90 -0
  6. package/core/dummy.d.ts +22 -0
  7. package/core/dummy.lua +133 -0
  8. package/core/game.d.ts +3 -0
  9. package/core/game.lua +24 -0
  10. package/core/mapbounds.d.ts +8 -0
  11. package/core/mapbounds.lua +12 -0
  12. package/core/thread.d.ts +8 -0
  13. package/core/thread.lua +40 -0
  14. package/core/types/ability.d.ts +4 -0
  15. package/core/types/ability.lua +10 -0
  16. package/core/types/async.d.ts +3 -0
  17. package/core/types/async.lua +2 -0
  18. package/core/types/camera.d.ts +4 -0
  19. package/core/types/camera.lua +21 -0
  20. package/core/types/cameraField.d.ts +15 -0
  21. package/core/types/cameraField.lua +38 -0
  22. package/core/types/color.d.ts +16 -0
  23. package/core/types/color.lua +93 -0
  24. package/core/types/destructable.d.ts +31 -0
  25. package/core/types/destructable.lua +245 -0
  26. package/core/types/effect.d.ts +31 -0
  27. package/core/types/effect.lua +209 -0
  28. package/core/types/frame.d.ts +140 -0
  29. package/core/types/frame.lua +882 -0
  30. package/core/types/game.d.ts +8 -0
  31. package/core/types/game.lua +41 -0
  32. package/core/types/group.d.ts +22 -0
  33. package/core/types/group.lua +94 -0
  34. package/core/types/handle.d.ts +48 -0
  35. package/core/types/handle.lua +169 -0
  36. package/core/types/image.d.ts +30 -0
  37. package/core/types/image.lua +121 -0
  38. package/core/types/internal/ability+cooldownRemaining.d.ts +1 -0
  39. package/core/types/internal/ability+cooldownRemaining.lua +0 -0
  40. package/core/types/item.d.ts +4 -0
  41. package/core/types/item.lua +6 -0
  42. package/core/types/missile.d.ts +22 -0
  43. package/core/types/missile.lua +233 -0
  44. package/core/types/order.d.ts +25 -0
  45. package/core/types/order.lua +55 -0
  46. package/core/types/player.d.ts +71 -0
  47. package/core/types/player.lua +448 -0
  48. package/core/types/playerCamera.d.ts +32 -0
  49. package/core/types/playerCamera.lua +162 -0
  50. package/core/types/playerColor.d.ts +40 -0
  51. package/core/types/playerColor.lua +203 -0
  52. package/core/types/rect.d.ts +39 -0
  53. package/core/types/rect.lua +152 -0
  54. package/core/types/region.d.ts +14 -0
  55. package/core/types/region.lua +84 -0
  56. package/core/types/sound.d.ts +69 -0
  57. package/core/types/sound.lua +247 -0
  58. package/core/types/tileCell.d.ts +13 -0
  59. package/core/types/tileCell.lua +100 -0
  60. package/core/types/timer.d.ts +36 -0
  61. package/core/types/timer.lua +230 -0
  62. package/core/types/timerDialog.d.ts +19 -0
  63. package/core/types/timerDialog.lua +95 -0
  64. package/core/types/unit.d.ts +10 -0
  65. package/core/types/unit.lua +24 -0
  66. package/core/types/widget.d.ts +5 -0
  67. package/core/types/widget.lua +2 -0
  68. package/core/util.d.ts +62 -0
  69. package/core/util.lua +464 -0
  70. package/core/vecmath/common.d.ts +18 -0
  71. package/core/vecmath/common.lua +29 -0
  72. package/core/vecmath/mat2.d.ts +73 -0
  73. package/core/vecmath/mat2.lua +261 -0
  74. package/core/vecmath/vec3.d.ts +47 -0
  75. package/core/vecmath/vec3.lua +350 -0
  76. package/core/vecmath/vec4.d.ts +54 -0
  77. package/core/vecmath/vec4.lua +400 -0
  78. package/crypto/ecc.d.ts +6 -0
  79. package/crypto/ecc.lua +1734 -0
  80. package/decl/index.d.ts +116 -0
  81. package/decl/native.d.ts +8198 -0
  82. package/destroyable.d.ts +20 -0
  83. package/destroyable.lua +31 -0
  84. package/engine/ability.d.ts +5 -0
  85. package/engine/ability.lua +7 -0
  86. package/engine/behavior.d.ts +28 -0
  87. package/engine/behavior.lua +181 -0
  88. package/engine/behaviour/ability/apply-buff.d.ts +38 -0
  89. package/engine/behaviour/ability/apply-buff.lua +126 -0
  90. package/engine/behaviour/ability/apply-unit-behavior.d.ts +12 -0
  91. package/engine/behaviour/ability/apply-unit-behavior.lua +36 -0
  92. package/engine/behaviour/ability/damage.d.ts +25 -0
  93. package/engine/behaviour/ability/damage.lua +75 -0
  94. package/engine/behaviour/ability/heal.d.ts +16 -0
  95. package/engine/behaviour/ability/heal.lua +35 -0
  96. package/engine/behaviour/ability/instant-impact.d.ts +6 -0
  97. package/engine/behaviour/ability/instant-impact.lua +25 -0
  98. package/engine/behaviour/ability.d.ts +40 -0
  99. package/engine/behaviour/ability.lua +175 -0
  100. package/engine/behaviour/unit/stun-immunity.d.ts +19 -0
  101. package/engine/behaviour/unit/stun-immunity.lua +67 -0
  102. package/engine/behaviour/unit.d.ts +20 -0
  103. package/engine/behaviour/unit.lua +75 -0
  104. package/engine/buff.d.ts +221 -0
  105. package/engine/buff.lua +1093 -0
  106. package/engine/constants.d.ts +7 -0
  107. package/engine/constants.lua +8 -0
  108. package/engine/index.d.ts +5 -0
  109. package/engine/index.lua +2 -0
  110. package/engine/internal/ability.d.ts +91 -0
  111. package/engine/internal/ability.lua +531 -0
  112. package/engine/internal/item/ability.d.ts +2 -0
  113. package/engine/internal/item/ability.lua +48 -0
  114. package/engine/internal/item+owner.d.ts +7 -0
  115. package/engine/internal/item+owner.lua +22 -0
  116. package/engine/internal/item.d.ts +86 -0
  117. package/engine/internal/item.lua +580 -0
  118. package/engine/internal/mechanics/ability-duration.d.ts +4 -0
  119. package/engine/internal/mechanics/ability-duration.lua +11 -0
  120. package/engine/internal/mechanics/area-damage.d.ts +2 -0
  121. package/engine/internal/mechanics/area-damage.lua +33 -0
  122. package/engine/internal/misc/dummy-units.d.ts +2 -0
  123. package/engine/internal/misc/dummy-units.lua +14 -0
  124. package/engine/internal/object-data/armor-increase.d.ts +2 -0
  125. package/engine/internal/object-data/armor-increase.lua +19 -0
  126. package/engine/internal/object-data/attribute-bonus.d.ts +2 -0
  127. package/engine/internal/object-data/attribute-bonus.lua +15 -0
  128. package/engine/internal/object-data/auto-attack-damage-increase.d.ts +2 -0
  129. package/engine/internal/object-data/auto-attack-damage-increase.lua +17 -0
  130. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +2 -0
  131. package/engine/internal/object-data/auto-attack-speed-increase.lua +14 -0
  132. package/engine/internal/object-data/dummy-inventory.d.ts +2 -0
  133. package/engine/internal/object-data/dummy-inventory.lua +16 -0
  134. package/engine/internal/object-data/dummy-item.d.ts +2 -0
  135. package/engine/internal/object-data/dummy-item.lua +10 -0
  136. package/engine/internal/object-data/ghost-visible.d.ts +2 -0
  137. package/engine/internal/object-data/ghost-visible.lua +15 -0
  138. package/engine/internal/object-data/invulnerable.d.ts +2 -0
  139. package/engine/internal/object-data/invulnerable.lua +11 -0
  140. package/engine/internal/object-data/movement-speed-increase-factor.d.ts +2 -0
  141. package/engine/internal/object-data/movement-speed-increase-factor.lua +18 -0
  142. package/engine/internal/unit/ability.d.ts +143 -0
  143. package/engine/internal/unit/ability.lua +369 -0
  144. package/engine/internal/unit/allowed-targets.d.ts +17 -0
  145. package/engine/internal/unit/allowed-targets.lua +19 -0
  146. package/engine/internal/unit/band-aids/ancestral-spirit-cannibalize.d.ts +2 -0
  147. package/engine/internal/unit/band-aids/ancestral-spirit-cannibalize.lua +21 -0
  148. package/engine/internal/unit/bonus.d.ts +41 -0
  149. package/engine/internal/unit/bonus.lua +188 -0
  150. package/engine/internal/unit/buff.d.ts +38 -0
  151. package/engine/internal/unit/buff.lua +81 -0
  152. package/engine/internal/unit/expiration-timer.d.ts +22 -0
  153. package/engine/internal/unit/expiration-timer.lua +44 -0
  154. package/engine/internal/unit/ghost-counter.d.ts +12 -0
  155. package/engine/internal/unit/ghost-counter.lua +26 -0
  156. package/engine/internal/unit/invulnerability-counter.d.ts +12 -0
  157. package/engine/internal/unit/invulnerability-counter.lua +26 -0
  158. package/engine/internal/unit/missile.d.ts +42 -0
  159. package/engine/internal/unit/missile.lua +70 -0
  160. package/engine/internal/unit/movement-speed.d.ts +18 -0
  161. package/engine/internal/unit/movement-speed.lua +42 -0
  162. package/engine/internal/unit/summon-event.d.ts +12 -0
  163. package/engine/internal/unit/summon-event.lua +50 -0
  164. package/engine/internal/unit+ability.d.ts +9 -0
  165. package/engine/internal/unit+ability.lua +59 -0
  166. package/engine/internal/unit+bonus.d.ts +8 -0
  167. package/engine/internal/unit+bonus.lua +40 -0
  168. package/engine/internal/unit+damage.d.ts +69 -0
  169. package/engine/internal/unit+damage.lua +123 -0
  170. package/engine/internal/unit+rally.d.ts +10 -0
  171. package/engine/internal/unit+rally.lua +159 -0
  172. package/engine/internal/unit+spellSteal.d.ts +7 -0
  173. package/engine/internal/unit+spellSteal.lua +64 -0
  174. package/engine/internal/unit+transport.d.ts +12 -0
  175. package/engine/internal/unit+transport.lua +102 -0
  176. package/engine/internal/unit-missile-data.d.ts +2 -0
  177. package/engine/internal/unit-missile-data.lua +107 -0
  178. package/engine/internal/unit-missile-launch.d.ts +7 -0
  179. package/engine/internal/unit-missile-launch.lua +32 -0
  180. package/engine/internal/unit.d.ts +312 -0
  181. package/engine/internal/unit.lua +2430 -0
  182. package/engine/internal/utility.d.ts +2 -0
  183. package/engine/internal/utility.lua +13 -0
  184. package/engine/lightning.d.ts +51 -0
  185. package/engine/lightning.lua +303 -0
  186. package/engine/local-client.d.ts +16 -0
  187. package/engine/local-client.lua +86 -0
  188. package/engine/object-data/auxiliary/animation-name.d.ts +14 -0
  189. package/engine/object-data/auxiliary/animation-name.lua +2 -0
  190. package/engine/object-data/auxiliary/animation-qualifier.d.ts +53 -0
  191. package/engine/object-data/auxiliary/animation-qualifier.lua +2 -0
  192. package/engine/object-data/auxiliary/armor-sound-type.d.ts +8 -0
  193. package/engine/object-data/auxiliary/armor-sound-type.lua +2 -0
  194. package/engine/object-data/auxiliary/attachment-preset.d.ts +15 -0
  195. package/engine/object-data/auxiliary/attachment-preset.lua +29 -0
  196. package/engine/object-data/auxiliary/attack-type.d.ts +11 -0
  197. package/engine/object-data/auxiliary/attack-type.lua +2 -0
  198. package/engine/object-data/auxiliary/buff-polarity.d.ts +6 -0
  199. package/engine/object-data/auxiliary/buff-polarity.lua +2 -0
  200. package/engine/object-data/auxiliary/buff-resistance-type.d.ts +6 -0
  201. package/engine/object-data/auxiliary/buff-resistance-type.lua +2 -0
  202. package/engine/object-data/auxiliary/combat-classification.d.ts +46 -0
  203. package/engine/object-data/auxiliary/combat-classification.lua +206 -0
  204. package/engine/object-data/auxiliary/detection-type.d.ts +7 -0
  205. package/engine/object-data/auxiliary/detection-type.lua +2 -0
  206. package/engine/object-data/auxiliary/model-node-name.d.ts +12 -0
  207. package/engine/object-data/auxiliary/model-node-name.lua +2 -0
  208. package/engine/object-data/auxiliary/model-node-qualifier.d.ts +21 -0
  209. package/engine/object-data/auxiliary/model-node-qualifier.lua +2 -0
  210. package/engine/object-data/auxiliary/movement-type.d.ts +10 -0
  211. package/engine/object-data/auxiliary/movement-type.lua +2 -0
  212. package/engine/object-data/auxiliary/race.d.ts +14 -0
  213. package/engine/object-data/auxiliary/race.lua +2 -0
  214. package/engine/object-data/auxiliary/sound-preset-name.d.ts +8 -0
  215. package/engine/object-data/auxiliary/sound-preset-name.lua +2 -0
  216. package/engine/object-data/auxiliary/sound-set-name.d.ts +35 -0
  217. package/engine/object-data/auxiliary/sound-set-name.lua +2 -0
  218. package/engine/object-data/auxiliary/targeting-type.d.ts +8 -0
  219. package/engine/object-data/auxiliary/targeting-type.lua +2 -0
  220. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +16 -0
  221. package/engine/object-data/auxiliary/tech-tree-dependency.lua +8 -0
  222. package/engine/object-data/auxiliary/unit-classification.d.ts +19 -0
  223. package/engine/object-data/auxiliary/unit-classification.lua +50 -0
  224. package/engine/object-data/auxiliary/weapon-sound-type.d.ts +17 -0
  225. package/engine/object-data/auxiliary/weapon-sound-type.lua +2 -0
  226. package/engine/object-data/entry/ability-type/armor-increase.d.ts +8 -0
  227. package/engine/object-data/entry/ability-type/armor-increase.lua +26 -0
  228. package/engine/object-data/entry/ability-type/attribute-increase.d.ts +12 -0
  229. package/engine/object-data/entry/ability-type/attribute-increase.lua +52 -0
  230. package/engine/object-data/entry/ability-type/auto-attack-damage-increase.d.ts +8 -0
  231. package/engine/object-data/entry/ability-type/auto-attack-damage-increase.lua +26 -0
  232. package/engine/object-data/entry/ability-type/auto-attack-heal-reduction-effect.d.ts +12 -0
  233. package/engine/object-data/entry/ability-type/auto-attack-heal-reduction-effect.lua +52 -0
  234. package/engine/object-data/entry/ability-type/auto-attack-speed-increase.d.ts +8 -0
  235. package/engine/object-data/entry/ability-type/auto-attack-speed-increase.lua +26 -0
  236. package/engine/object-data/entry/ability-type/bash.d.ts +16 -0
  237. package/engine/object-data/entry/ability-type/bash.lua +78 -0
  238. package/engine/object-data/entry/ability-type/berserk.d.ts +10 -0
  239. package/engine/object-data/entry/ability-type/berserk.lua +39 -0
  240. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +21 -0
  241. package/engine/object-data/entry/ability-type/blank-configurable.lua +249 -0
  242. package/engine/object-data/entry/ability-type/blank-passive.d.ts +7 -0
  243. package/engine/object-data/entry/ability-type/blank-passive.lua +28 -0
  244. package/engine/object-data/entry/ability-type/blizzard.d.ts +16 -0
  245. package/engine/object-data/entry/ability-type/blizzard.lua +78 -0
  246. package/engine/object-data/entry/ability-type/blood-lust.d.ts +12 -0
  247. package/engine/object-data/entry/ability-type/blood-lust.lua +52 -0
  248. package/engine/object-data/entry/ability-type/chain-lightning.d.ts +12 -0
  249. package/engine/object-data/entry/ability-type/chain-lightning.lua +52 -0
  250. package/engine/object-data/entry/ability-type/channel.d.ts +48 -0
  251. package/engine/object-data/entry/ability-type/channel.lua +140 -0
  252. package/engine/object-data/entry/ability-type/charge-gold-and-lumber.d.ts +14 -0
  253. package/engine/object-data/entry/ability-type/charge-gold-and-lumber.lua +65 -0
  254. package/engine/object-data/entry/ability-type/cleaving-attack.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/cleaving-attack.lua +26 -0
  256. package/engine/object-data/entry/ability-type/cluster-rockets.d.ts +18 -0
  257. package/engine/object-data/entry/ability-type/cluster-rockets.lua +91 -0
  258. package/engine/object-data/entry/ability-type/cripple.d.ts +12 -0
  259. package/engine/object-data/entry/ability-type/cripple.lua +52 -0
  260. package/engine/object-data/entry/ability-type/critical-strike.d.ts +18 -0
  261. package/engine/object-data/entry/ability-type/critical-strike.lua +91 -0
  262. package/engine/object-data/entry/ability-type/curse.d.ts +8 -0
  263. package/engine/object-data/entry/ability-type/curse.lua +26 -0
  264. package/engine/object-data/entry/ability-type/dark-summoning.d.ts +10 -0
  265. package/engine/object-data/entry/ability-type/dark-summoning.lua +39 -0
  266. package/engine/object-data/entry/ability-type/death-coil.d.ts +8 -0
  267. package/engine/object-data/entry/ability-type/death-coil.lua +26 -0
  268. package/engine/object-data/entry/ability-type/disease-cloud.d.ts +15 -0
  269. package/engine/object-data/entry/ability-type/disease-cloud.lua +65 -0
  270. package/engine/object-data/entry/ability-type/divine-shield.d.ts +5 -0
  271. package/engine/object-data/entry/ability-type/divine-shield.lua +12 -0
  272. package/engine/object-data/entry/ability-type/endurance-aura.d.ts +10 -0
  273. package/engine/object-data/entry/ability-type/endurance-aura.lua +39 -0
  274. package/engine/object-data/entry/ability-type/engineering-upgrade.d.ts +13 -0
  275. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +88 -0
  276. package/engine/object-data/entry/ability-type/evasion.d.ts +8 -0
  277. package/engine/object-data/entry/ability-type/evasion.lua +26 -0
  278. package/engine/object-data/entry/ability-type/faerie-fire.d.ts +10 -0
  279. package/engine/object-data/entry/ability-type/faerie-fire.lua +39 -0
  280. package/engine/object-data/entry/ability-type/far-sight.d.ts +9 -0
  281. package/engine/object-data/entry/ability-type/far-sight.lua +26 -0
  282. package/engine/object-data/entry/ability-type/feral-spirit.d.ts +11 -0
  283. package/engine/object-data/entry/ability-type/feral-spirit.lua +39 -0
  284. package/engine/object-data/entry/ability-type/frenzy.d.ts +12 -0
  285. package/engine/object-data/entry/ability-type/frenzy.lua +52 -0
  286. package/engine/object-data/entry/ability-type/frost-nova.d.ts +12 -0
  287. package/engine/object-data/entry/ability-type/frost-nova.lua +52 -0
  288. package/engine/object-data/entry/ability-type/ghost-visible.d.ts +10 -0
  289. package/engine/object-data/entry/ability-type/ghost-visible.lua +39 -0
  290. package/engine/object-data/entry/ability-type/gold-mine.d.ts +12 -0
  291. package/engine/object-data/entry/ability-type/gold-mine.lua +52 -0
  292. package/engine/object-data/entry/ability-type/heal.d.ts +8 -0
  293. package/engine/object-data/entry/ability-type/heal.lua +26 -0
  294. package/engine/object-data/entry/ability-type/healing-salve.d.ts +22 -0
  295. package/engine/object-data/entry/ability-type/healing-salve.lua +78 -0
  296. package/engine/object-data/entry/ability-type/healing-spray.d.ts +18 -0
  297. package/engine/object-data/entry/ability-type/healing-spray.lua +91 -0
  298. package/engine/object-data/entry/ability-type/healing-wave.d.ts +12 -0
  299. package/engine/object-data/entry/ability-type/healing-wave.lua +52 -0
  300. package/engine/object-data/entry/ability-type/holy-light.d.ts +8 -0
  301. package/engine/object-data/entry/ability-type/holy-light.lua +26 -0
  302. package/engine/object-data/entry/ability-type/incinerate.d.ts +18 -0
  303. package/engine/object-data/entry/ability-type/incinerate.lua +91 -0
  304. package/engine/object-data/entry/ability-type/inner-fire.d.ts +14 -0
  305. package/engine/object-data/entry/ability-type/inner-fire.lua +65 -0
  306. package/engine/object-data/entry/ability-type/inventory.d.ts +16 -0
  307. package/engine/object-data/entry/ability-type/inventory.lua +78 -0
  308. package/engine/object-data/entry/ability-type/invulnerable.d.ts +5 -0
  309. package/engine/object-data/entry/ability-type/invulnerable.lua +12 -0
  310. package/engine/object-data/entry/ability-type/lightning-shield.d.ts +8 -0
  311. package/engine/object-data/entry/ability-type/lightning-shield.lua +26 -0
  312. package/engine/object-data/entry/ability-type/movement-speed-increase.d.ts +8 -0
  313. package/engine/object-data/entry/ability-type/movement-speed-increase.lua +26 -0
  314. package/engine/object-data/entry/ability-type/permanent-immolation.d.ts +8 -0
  315. package/engine/object-data/entry/ability-type/permanent-immolation.lua +26 -0
  316. package/engine/object-data/entry/ability-type/phoenix-morph.d.ts +25 -0
  317. package/engine/object-data/entry/ability-type/phoenix-morph.lua +130 -0
  318. package/engine/object-data/entry/ability-type/recall.d.ts +10 -0
  319. package/engine/object-data/entry/ability-type/recall.lua +39 -0
  320. package/engine/object-data/entry/ability-type/rejuvenation.d.ts +20 -0
  321. package/engine/object-data/entry/ability-type/rejuvenation.lua +65 -0
  322. package/engine/object-data/entry/ability-type/searing-arrows.d.ts +8 -0
  323. package/engine/object-data/entry/ability-type/searing-arrows.lua +26 -0
  324. package/engine/object-data/entry/ability-type/shock-wave.d.ts +10 -0
  325. package/engine/object-data/entry/ability-type/shock-wave.lua +39 -0
  326. package/engine/object-data/entry/ability-type/slow-poison.d.ts +12 -0
  327. package/engine/object-data/entry/ability-type/slow-poison.lua +52 -0
  328. package/engine/object-data/entry/ability-type/slow.d.ts +12 -0
  329. package/engine/object-data/entry/ability-type/slow.lua +52 -0
  330. package/engine/object-data/entry/ability-type/spell-damage-reduction.d.ts +10 -0
  331. package/engine/object-data/entry/ability-type/spell-damage-reduction.lua +39 -0
  332. package/engine/object-data/entry/ability-type/spiked-carapace.d.ts +12 -0
  333. package/engine/object-data/entry/ability-type/spiked-carapace.lua +52 -0
  334. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +14 -0
  335. package/engine/object-data/entry/ability-type/spirit-touch.lua +65 -0
  336. package/engine/object-data/entry/ability-type/storm-bolt.d.ts +8 -0
  337. package/engine/object-data/entry/ability-type/storm-bolt.lua +26 -0
  338. package/engine/object-data/entry/ability-type/summon-quilbeast.d.ts +11 -0
  339. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +39 -0
  340. package/engine/object-data/entry/ability-type/summon-water-elemental.d.ts +11 -0
  341. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +39 -0
  342. package/engine/object-data/entry/ability-type.d.ts +148 -0
  343. package/engine/object-data/entry/ability-type.lua +1058 -0
  344. package/engine/object-data/entry/buff-type/applicable.d.ts +16 -0
  345. package/engine/object-data/entry/buff-type/applicable.lua +377 -0
  346. package/engine/object-data/entry/buff-type/blank.d.ts +8 -0
  347. package/engine/object-data/entry/buff-type/blank.lua +17 -0
  348. package/engine/object-data/entry/buff-type.d.ts +64 -0
  349. package/engine/object-data/entry/buff-type.lua +316 -0
  350. package/engine/object-data/entry/destructible-type.d.ts +21 -0
  351. package/engine/object-data/entry/destructible-type.lua +83 -0
  352. package/engine/object-data/entry/item-type/blank.d.ts +8 -0
  353. package/engine/object-data/entry/item-type/blank.lua +21 -0
  354. package/engine/object-data/entry/item-type.d.ts +49 -0
  355. package/engine/object-data/entry/item-type.lua +259 -0
  356. package/engine/object-data/entry/lightning-type.d.ts +37 -0
  357. package/engine/object-data/entry/lightning-type.lua +191 -0
  358. package/engine/object-data/entry/unit-type/blank.d.ts +6 -0
  359. package/engine/object-data/entry/unit-type/blank.lua +13 -0
  360. package/engine/object-data/entry/unit-type.d.ts +218 -0
  361. package/engine/object-data/entry/unit-type.lua +1306 -0
  362. package/engine/object-data/entry/upgrade/blank.d.ts +8 -0
  363. package/engine/object-data/entry/upgrade/blank.lua +22 -0
  364. package/engine/object-data/entry/upgrade.d.ts +59 -0
  365. package/engine/object-data/entry/upgrade.lua +238 -0
  366. package/engine/object-data/entry.d.ts +80 -0
  367. package/engine/object-data/entry.lua +634 -0
  368. package/engine/object-data/utility/object-data-entry-id-generator.d.ts +6 -0
  369. package/engine/object-data/utility/object-data-entry-id-generator.lua +63 -0
  370. package/engine/object-data/utility/order-type-string-id-factory.d.ts +9 -0
  371. package/engine/object-data/utility/order-type-string-id-factory.lua +368 -0
  372. package/engine/object-field/ability.d.ts +115 -0
  373. package/engine/object-field/ability.lua +471 -0
  374. package/engine/object-field/unit.d.ts +15 -0
  375. package/engine/object-field/unit.lua +49 -0
  376. package/engine/object-field.d.ts +84 -0
  377. package/engine/object-field.lua +444 -0
  378. package/engine/random.d.ts +10 -0
  379. package/engine/random.lua +9 -0
  380. package/engine/standard/entries/ability-type.d.ts +8 -0
  381. package/engine/standard/entries/ability-type.lua +8 -0
  382. package/engine/standard/entries/lightning-type.d.ts +16 -0
  383. package/engine/standard/entries/lightning-type.lua +16 -0
  384. package/engine/standard/entries/unit-type.d.ts +63 -0
  385. package/engine/standard/entries/unit-type.lua +63 -0
  386. package/engine/standard/entries/upgrade.d.ts +92 -0
  387. package/engine/standard/entries/upgrade.lua +92 -0
  388. package/engine/standard/fields/ability.d.ts +737 -0
  389. package/engine/standard/fields/ability.lua +749 -0
  390. package/engine/standard/pathing-textures.d.ts +6 -0
  391. package/engine/standard/pathing-textures.lua +7 -0
  392. package/engine/text-tag.d.ts +25 -0
  393. package/engine/text-tag.lua +109 -0
  394. package/engine/unit.d.ts +20 -0
  395. package/engine/unit.lua +31 -0
  396. package/event.d.ts +53 -0
  397. package/event.lua +269 -0
  398. package/exception.d.ts +17 -0
  399. package/exception.lua +53 -0
  400. package/file.d.ts +4 -0
  401. package/file.lua +42 -0
  402. package/global/math.d.ts +21 -0
  403. package/global/math.lua +72 -0
  404. package/global/vec2.d.ts +66 -0
  405. package/global/vec2.lua +159 -0
  406. package/index.d.ts +8 -0
  407. package/index.lua +9 -0
  408. package/lualib_bundle.lua +2629 -0
  409. package/math/vec2.d.ts +18 -0
  410. package/math/vec2.lua +42 -0
  411. package/math.d.ts +39 -0
  412. package/math.lua +91 -0
  413. package/net/signal.d.ts +11 -0
  414. package/net/signal.lua +56 -0
  415. package/net/socket.d.ts +9 -0
  416. package/net/socket.lua +26 -0
  417. package/network.d.ts +31 -0
  418. package/network.lua +194 -0
  419. package/objutil/ability.d.ts +710 -0
  420. package/objutil/ability.lua +3781 -0
  421. package/objutil/buff.d.ts +110 -0
  422. package/objutil/buff.lua +769 -0
  423. package/objutil/dummy.d.ts +2 -0
  424. package/objutil/dummy.lua +49 -0
  425. package/objutil/idgen.d.ts +9 -0
  426. package/objutil/idgen.lua +92 -0
  427. package/objutil/item.d.ts +38 -0
  428. package/objutil/item.lua +254 -0
  429. package/objutil/object.d.ts +43 -0
  430. package/objutil/object.lua +213 -0
  431. package/objutil/unit.d.ts +134 -0
  432. package/objutil/unit.lua +913 -0
  433. package/objutil/upgrade.d.ts +22 -0
  434. package/objutil/upgrade.lua +127 -0
  435. package/operation.d.ts +35 -0
  436. package/operation.lua +179 -0
  437. package/package.json +47 -0
  438. package/patch-lualib.d.ts +2 -0
  439. package/patch-lualib.lua +67 -0
  440. package/patch-natives.d.ts +11 -0
  441. package/patch-natives.lua +14 -0
  442. package/string.d.ts +106 -0
  443. package/string.lua +34 -0
  444. package/time/dayOfWeek.d.ts +97 -0
  445. package/time/dayOfWeek.lua +53 -0
  446. package/time/localDate.d.ts +145 -0
  447. package/time/localDate.lua +236 -0
  448. package/time/localDateTime.d.ts +133 -0
  449. package/time/localDateTime.lua +154 -0
  450. package/time/localTime.d.ts +87 -0
  451. package/time/localTime.lua +91 -0
  452. package/time/month.d.ts +146 -0
  453. package/time/month.lua +129 -0
  454. package/time/year.d.ts +117 -0
  455. package/time/year.lua +81 -0
  456. package/types.d.ts +13 -0
  457. package/types.lua +0 -0
  458. package/util/objectPool.d.ts +6 -0
  459. package/util/objectPool.lua +28 -0
  460. package/util/stream.d.ts +29 -0
  461. package/util/stream.lua +453 -0
  462. package/util/stringBuilder.d.ts +8 -0
  463. package/util/stringBuilder.lua +25 -0
  464. package/utility/arrays.d.ts +57 -0
  465. package/utility/arrays.lua +369 -0
  466. package/utility/base64.d.ts +23 -0
  467. package/utility/base64.lua +177 -0
  468. package/utility/bit-set.d.ts +18 -0
  469. package/utility/bit-set.lua +12 -0
  470. package/utility/functions.d.ts +5 -0
  471. package/utility/functions.lua +90 -0
  472. package/utility/json.d.ts +2 -0
  473. package/utility/json.lua +400 -0
  474. package/utility/linked-set.d.ts +49 -0
  475. package/utility/linked-set.lua +181 -0
  476. package/utility/lua-maps.d.ts +6 -0
  477. package/utility/lua-maps.lua +25 -0
  478. package/utility/lua-sets.d.ts +6 -0
  479. package/utility/lua-sets.lua +37 -0
  480. package/utility/lzw.d.ts +2 -0
  481. package/utility/lzw.lua +161 -0
  482. package/utility/observable-array.d.ts +17 -0
  483. package/utility/observable-array.lua +30 -0
  484. package/utility/preconditions.d.ts +23 -0
  485. package/utility/preconditions.lua +58 -0
  486. package/utility/records.d.ts +3 -0
  487. package/utility/records.lua +9 -0
  488. package/utility/reflection.d.ts +4 -0
  489. package/utility/reflection.lua +31 -0
  490. package/utility/strings.d.ts +2 -0
  491. package/utility/strings.lua +44 -0
  492. package/utility/types.d.ts +39 -0
  493. package/utility/types.lua +2 -0
@@ -0,0 +1,2430 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__StringSplit = ____lualib.__TS__StringSplit
3
+ local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
4
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
5
+ local __TS__New = ____lualib.__TS__New
6
+ local __TS__Class = ____lualib.__TS__Class
7
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
+ local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
9
+ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
11
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
+ local Set = ____lualib.Set
13
+ local __TS__Spread = ____lualib.__TS__Spread
14
+ local ____exports = {}
15
+ local ____handle = require("core.types.handle")
16
+ local Handle = ____handle.Handle
17
+ local ____player = require("core.types.player")
18
+ local Player = ____player.Player
19
+ local ____event = require("event")
20
+ local Event = ____event.Event
21
+ local IgnoreEvent = ____event.IgnoreEvent
22
+ local InitializingEvent = ____event.InitializingEvent
23
+ local TriggerEvent = ____event.TriggerEvent
24
+ local ____color = require("core.types.color")
25
+ local Color = ____color.Color
26
+ local ____item = require("engine.internal.item")
27
+ local Item = ____item.Item
28
+ local ____destructable = require("core.types.destructable")
29
+ local Destructable = ____destructable.Destructable
30
+ local ____ability = require("objutil.ability")
31
+ local AbilityDefinition = ____ability.AbilityDefinition
32
+ local AbilityDefinitionLightningAttack = ____ability.AbilityDefinitionLightningAttack
33
+ local AbilityDefinitionSpikedCarapace = ____ability.AbilityDefinitionSpikedCarapace
34
+ local ____ability = require("engine.internal.ability")
35
+ local ItemAbility = ____ability.ItemAbility
36
+ local UnitAbility = ____ability.UnitAbility
37
+ local UnrecognizedAbility = ____ability.UnrecognizedAbility
38
+ local ____timer = require("core.types.timer")
39
+ local Timer = ____timer.Timer
40
+ local ____dummy = require("objutil.dummy")
41
+ local dummyUnitId = ____dummy.dummyUnitId
42
+ local ____preconditions = require("utility.preconditions")
43
+ local checkNotNull = ____preconditions.checkNotNull
44
+ local ____constants = require("engine.constants")
45
+ local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
46
+ 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
51
+ local match = string.match
52
+ local ____tostring = _G.tostring
53
+ local setUnitAnimation = SetUnitAnimation
54
+ local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
+ local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
+ local queueUnitAnimation = QueueUnitAnimation
57
+ local getUnitIntegerField = BlzGetUnitIntegerField
58
+ local getUnitRealField = BlzGetUnitRealField
59
+ local getHeroStr = GetHeroStr
60
+ local getHeroAgi = GetHeroAgi
61
+ local getHeroInt = GetHeroInt
62
+ local setHeroStr = SetHeroStr
63
+ local setHeroAgi = SetHeroAgi
64
+ local setHeroInt = SetHeroInt
65
+ local getUnitBooleanField = BlzGetUnitBooleanField
66
+ local getUnitStringField = BlzGetUnitStringField
67
+ local setUnitIntegerField = BlzSetUnitIntegerField
68
+ local setUnitRealField = BlzSetUnitRealField
69
+ local setUnitBooleanField = BlzSetUnitBooleanField
70
+ local setUnitStringField = BlzSetUnitStringField
71
+ local setUnitScale = SetUnitScale
72
+ local setUnitPosition = SetUnitPosition
73
+ local setUnitTimeScale = SetUnitTimeScale
74
+ local getHandleId = GetHandleId
75
+ local createUnit = CreateUnit
76
+ local killUnit = KillUnit
77
+ local setUnitExploded = SetUnitExploded
78
+ local removeUnit = RemoveUnit
79
+ local getUnitTypeId = GetUnitTypeId
80
+ local isHeroUnitId = IsHeroUnitId
81
+ local getTriggerUnit = GetTriggerUnit
82
+ local getManipulatedItem = GetManipulatedItem
83
+ local getTriggerPlayer = GetTriggerPlayer
84
+ local getSpellAbility = GetSpellAbility
85
+ local getSpellAbilityId = GetSpellAbilityId
86
+ local getSpellTargetUnit = GetSpellTargetUnit
87
+ local getSpellTargetX = GetSpellTargetX
88
+ local getSpellTargetY = GetSpellTargetY
89
+ local getSpellTargetItem = GetSpellTargetItem
90
+ local getSpellTargetDestructable = GetSpellTargetDestructable
91
+ local isUnitInRangeXY = IsUnitInRangeXY
92
+ local isUnitInRange = IsUnitInRange
93
+ local setResourceAmount = SetResourceAmount
94
+ local getResourceAmount = GetResourceAmount
95
+ local getUnitAbilityLevel = GetUnitAbilityLevel
96
+ local unitDisableAbility = BlzUnitDisableAbility
97
+ local unitInterruptAttack = BlzUnitInterruptAttack
98
+ local isUnitInvisible = IsUnitInvisible
99
+ local isUnitVisible = IsUnitVisible
100
+ local getUnitX = GetUnitX
101
+ local getUnitY = GetUnitY
102
+ local getUnitFlyHeight = GetUnitFlyHeight
103
+ local moveLocation = MoveLocation
104
+ local getLocationZ = GetLocationZ
105
+ local groupEnumUnitsInRange = GroupEnumUnitsInRange
106
+ local groupEnumUnitsInRect = GroupEnumUnitsInRect
107
+ local groupEnumUnitsOfPlayer = GroupEnumUnitsOfPlayer
108
+ local getFilterUnit = GetFilterUnit
109
+ local getUnitCollisionSize = BlzGetUnitCollisionSize
110
+ local getOrderedUnit = GetOrderedUnit
111
+ local getIssuedOrderId = GetIssuedOrderId
112
+ local isUnitInvulnerable = BlzIsUnitInvulnerable
113
+ local unitAlive = UnitAlive
114
+ local unitAddType = UnitAddType
115
+ local unitRemoveType = UnitRemoveType
116
+ local isUnitIllusion = IsUnitIllusion
117
+ local isUnitType = IsUnitType
118
+ local isUnitAlly = IsUnitAlly
119
+ local isUnitEnemy = IsUnitEnemy
120
+ local getOwningPlayer = GetOwningPlayer
121
+ local setUnitColor = SetUnitColor
122
+ local showUnitTeamGlow = BlzShowUnitTeamGlow
123
+ ____exports.UnitClassification = {}
124
+ local UnitClassification = ____exports.UnitClassification
125
+ do
126
+ UnitClassification.STRUCTURE = UNIT_TYPE_STRUCTURE
127
+ UnitClassification.UNDEAD = UNIT_TYPE_UNDEAD
128
+ UnitClassification.AIR = UNIT_TYPE_FLYING
129
+ UnitClassification.GROUND = UNIT_TYPE_GROUND
130
+ UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
131
+ UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
132
+ UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
133
+ UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
134
+ UnitClassification.TAUREN = UNIT_TYPE_TAUREN
135
+ UnitClassification.RESISTANT = UNIT_TYPE_RESISTANT
136
+ end
137
+ local tremove = table.remove
138
+ local loc = Location(0, 0)
139
+ local invoke = Event.invoke
140
+ local stockAbilities = postcompile(function()
141
+ local abilityData = {}
142
+ if currentMap then
143
+ for id, unit in pairs(currentMap.objects.unit.all) do
144
+ local ids = __TS__ArrayMap(
145
+ __TS__ArrayFilter(
146
+ __TS__StringSplit(
147
+ tostring(unit:getField("uabi") or ""),
148
+ ","
149
+ ),
150
+ function(____, id) return id ~= "_" and id ~= "" end
151
+ ),
152
+ function(____, id) return fourCC(id) end
153
+ )
154
+ if #ids ~= 0 then
155
+ abilityData[fourCC(id)] = ids
156
+ end
157
+ end
158
+ end
159
+ return abilityData
160
+ end)
161
+ local attackHandlerAbilityId = compiletime(function()
162
+ local ability = __TS__New(AbilityDefinitionLightningAttack)
163
+ ability.graphicDelay = 0
164
+ ability.graphicDuration = 0
165
+ ability.lightningEffects = {}
166
+ ability.missileArt = ""
167
+ ability.missileSpeed = 0
168
+ ability.targetArt = ""
169
+ return fourCC(ability.id)
170
+ end)
171
+ local leaveDetectAbilityId = compiletime(fourCC(__TS__New(AbilityDefinition, "Adef").id))
172
+ for ____, player in ipairs(Player.all) do
173
+ SetPlayerAbilityAvailable(player.handle, leaveDetectAbilityId, false)
174
+ end
175
+ local morphDetectAbilityId = compiletime(fourCC(__TS__New(AbilityDefinition, "Adef").id))
176
+ for ____, player in ipairs(Player.all) do
177
+ SetPlayerAbilityAvailable(player.handle, morphDetectAbilityId, false)
178
+ end
179
+ local armorBonusAbilityId = compiletime(function()
180
+ local ability = __TS__New(AbilityDefinitionSpikedCarapace)
181
+ ability.levels = 1
182
+ ability.returnedDamageFactor = 0
183
+ ability.receivedDamageFactor = 1
184
+ ability.armorBonus = 0
185
+ return fourCC(ability.id)
186
+ end)
187
+ local armorBonusField = ABILITY_RLF_DEFENSE_BONUS_UTS3
188
+ local atan = math.atan
189
+ local fmod = math.fmod
190
+ local sqrt = math.sqrt
191
+ local max = math.max
192
+ local rad = math.rad
193
+ local pi2 = 2 * math.pi
194
+ local dummyGroup = CreateGroup()
195
+ local targetCollection
196
+ local targetCollectionNextIndex
197
+ local centerX
198
+ local centerY
199
+ local enumRange
200
+ local enumPredicate
201
+ local collectIntoTarget = Filter(function()
202
+ local unit = getFilterUnit()
203
+ if getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 then
204
+ targetCollection[targetCollectionNextIndex] = ____exports.Unit:of(unit)
205
+ targetCollectionNextIndex = targetCollectionNextIndex + 1
206
+ end
207
+ end)
208
+ local collectIntoTargetWithPredicate = Filter(function()
209
+ local unit = getFilterUnit()
210
+ if getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 and enumPredicate(____exports.Unit:of(unit)) then
211
+ targetCollection[targetCollectionNextIndex] = ____exports.Unit:of(unit)
212
+ targetCollectionNextIndex = targetCollectionNextIndex + 1
213
+ end
214
+ end)
215
+ local gConsumer
216
+ local message
217
+ local invokeConsumer = Filter(function()
218
+ local unit = getFilterUnit()
219
+ if message == nil and getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 then
220
+ local success, msg = pcall(
221
+ gConsumer,
222
+ ____exports.Unit:of(unit)
223
+ )
224
+ if not success then
225
+ message = msg
226
+ end
227
+ end
228
+ end)
229
+ local collectIntoTargetCollision = Filter(function()
230
+ local unit = getFilterUnit()
231
+ if isUnitInRangeXY(unit, centerX, centerY, enumRange) and getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 then
232
+ targetCollection[targetCollectionNextIndex] = ____exports.Unit:of(unit)
233
+ targetCollectionNextIndex = targetCollectionNextIndex + 1
234
+ end
235
+ end)
236
+ local collectIntoTargetCollisionWithPredicate = Filter(function()
237
+ local unit = getFilterUnit()
238
+ if isUnitInRangeXY(unit, centerX, centerY, enumRange) and getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 and enumPredicate(____exports.Unit:of(unit)) then
239
+ targetCollection[targetCollectionNextIndex] = ____exports.Unit:of(unit)
240
+ targetCollectionNextIndex = targetCollectionNextIndex + 1
241
+ end
242
+ end)
243
+ local posX
244
+ local posY
245
+ local startAngle
246
+ local centerAngle
247
+ local collectSectorIntoTarget = Filter(function()
248
+ local unit = getFilterUnit()
249
+ if getUnitTypeId(unit) ~= dummyUnitId and getUnitAbilityLevel(unit, leaveDetectAbilityId) > 0 then
250
+ local angle = atan(
251
+ getUnitY(unit) - posY,
252
+ getUnitX(unit) - posX
253
+ )
254
+ angle = fmod(angle - startAngle, pi2)
255
+ if (angle < 0 and angle + pi2 or angle) <= centerAngle then
256
+ targetCollection[targetCollectionNextIndex] = ____exports.Unit:of(unit)
257
+ targetCollectionNextIndex = targetCollectionNextIndex + 1
258
+ end
259
+ end
260
+ end)
261
+ local function deg2rad(angle)
262
+ angle = fmod(angle, 360)
263
+ return rad(angle < 0 and angle + 360 or angle)
264
+ end
265
+ ____exports.UnitTriggerEvent = __TS__Class()
266
+ local UnitTriggerEvent = ____exports.UnitTriggerEvent
267
+ UnitTriggerEvent.name = "UnitTriggerEvent"
268
+ __TS__ClassExtends(UnitTriggerEvent, TriggerEvent)
269
+ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
270
+ TriggerEvent.prototype.____constructor(
271
+ self,
272
+ function(trigger) return TriggerRegisterAnyUnitEventBJ(trigger, eventType) end,
273
+ c
274
+ )
275
+ end
276
+ local function dispatch(event, idGetter, argsGetter)
277
+ local initialized = false
278
+ local x = {}
279
+ return setmetatable(
280
+ x,
281
+ {
282
+ __index = function(self, id)
283
+ if type(id) ~= "number" then
284
+ return event[id]
285
+ end
286
+ if not initialized then
287
+ local invoke = Event.invoke
288
+ event:addListener(function(...)
289
+ local id = idGetter(...)
290
+ local dispatched = rawget(self, id)
291
+ if dispatched ~= nil then
292
+ invoke(
293
+ dispatched,
294
+ argsGetter(...)
295
+ )
296
+ end
297
+ end)
298
+ initialized = true
299
+ end
300
+ local dispatched = __TS__New(Event)
301
+ rawset(self, id, dispatched)
302
+ return dispatched
303
+ end,
304
+ __newindex = event
305
+ }
306
+ )
307
+ end
308
+ local function dispatchId(event)
309
+ return dispatch(
310
+ event,
311
+ function(unit, id, ...) return id end,
312
+ function(unit, id, ...) return unit, ... end
313
+ )
314
+ end
315
+ local function dispatchAbility(event)
316
+ local initialized = false
317
+ return setmetatable(
318
+ {},
319
+ {
320
+ __index = function(self, id)
321
+ if type(id) ~= "number" then
322
+ return event[id]
323
+ end
324
+ if not initialized then
325
+ local invoke = Event.invoke
326
+ event:addListener(function(unit, ability, ...)
327
+ local dispatched = rawget(self, ability.typeId)
328
+ if dispatched ~= nil then
329
+ invoke(dispatched, unit, ability, ...)
330
+ end
331
+ end)
332
+ initialized = true
333
+ end
334
+ local dispatched = __TS__New(Event)
335
+ rawset(self, id, dispatched)
336
+ return dispatched
337
+ end,
338
+ __newindex = event
339
+ }
340
+ )
341
+ end
342
+ local function damageEventPreventDeath(self, callback, ...)
343
+ if self[0] ~= nil then
344
+ return
345
+ end
346
+ rawset(self, 0, callback)
347
+ local parametersLength = select("#", ...)
348
+ rawset(self, 1, parametersLength)
349
+ for i = 1, parametersLength do
350
+ rawset(self, 1 + i, (select(i, ...)))
351
+ end
352
+ end
353
+ local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
354
+ local jlimitopByOperator = {
355
+ [0] = LESS_THAN_OR_EQUAL,
356
+ [1] = LESS_THAN_OR_EQUAL,
357
+ [2] = EQUAL,
358
+ [3] = GREATER_THAN_OR_EQUAL,
359
+ [4] = GREATER_THAN_OR_EQUAL,
360
+ [5] = NOT_EQUAL
361
+ }
362
+ local modifiers = {
363
+ speed = function(unit, value)
364
+ SetUnitMoveSpeed(
365
+ unit,
366
+ GetUnitMoveSpeed(unit) + value
367
+ )
368
+ end,
369
+ armor = function(unit, value)
370
+ if UnitAddAbility(unit, armorBonusAbilityId) then
371
+ assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
372
+ end
373
+ local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
374
+ assert(BlzSetAbilityRealLevelField(
375
+ ability,
376
+ armorBonusField,
377
+ 0,
378
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
379
+ ))
380
+ end
381
+ }
382
+ local getters = {
383
+ speed = function(unit, delta)
384
+ return GetUnitMoveSpeed(unit) + delta
385
+ end,
386
+ armor = function(unit)
387
+ return BlzGetUnitArmor(unit)
388
+ end
389
+ }
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
437
+ local getItemAbility = BlzGetItemAbility
438
+ local getUnitAbility = BlzGetUnitAbility
439
+ local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
440
+ local getAbilityId = BlzGetAbilityId
441
+ local getAbilityName = GetAbilityName
442
+ local unitAddAbility = UnitAddAbility
443
+ local getUnitGoldCost = GetUnitGoldCost
444
+ local getUnitLumberCost = GetUnitWoodCost
445
+ local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
446
+ local unitAddItem = UnitAddItem
447
+ local unitRemoveAbility = UnitRemoveAbility
448
+ local function retrieveAbility(unit, ability, abilityId)
449
+ if ability == nil then
450
+ return __TS__New(
451
+ UnrecognizedAbility,
452
+ abilityId,
453
+ ____exports.Unit:of(unit)
454
+ )
455
+ 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)
469
+ if getItemAbility(item, abilityId) == ability then
470
+ return ItemAbility:of(
471
+ ability,
472
+ abilityId,
473
+ Item:of(item)
474
+ )
475
+ end
476
+ end
477
+ return UnitAbility:of(
478
+ ability,
479
+ abilityId,
480
+ ____exports.Unit:of(unit)
481
+ )
482
+ end
483
+ local fieldGetters = {
484
+ unitintegerfield = function(unit, field)
485
+ return getUnitIntegerField(unit.handle, field)
486
+ end,
487
+ unitrealfield = function(unit, field)
488
+ return getUnitRealField(unit.handle, field)
489
+ end,
490
+ unitbooleanfield = function(unit, field)
491
+ return getUnitBooleanField(unit.handle, field)
492
+ end,
493
+ unitstringfield = function(unit, field)
494
+ return getUnitStringField(unit.handle, field)
495
+ end
496
+ }
497
+ local fieldSetters = {
498
+ unitintegerfield = function(unit, field, value)
499
+ return setUnitIntegerField(unit.handle, field, value)
500
+ end,
501
+ unitrealfield = function(unit, field, value)
502
+ return setUnitRealField(unit.handle, field, value)
503
+ end,
504
+ unitbooleanfield = function(unit, field, value)
505
+ return setUnitBooleanField(unit.handle, field, value)
506
+ end,
507
+ unitstringfield = function(unit, field, value)
508
+ return setUnitStringField(unit.handle, field, value)
509
+ end
510
+ }
511
+ local dummies = {}
512
+ for ____, player in ipairs(Player.all) do
513
+ local dummy = assert(createUnit(
514
+ player.handle,
515
+ dummyUnitId,
516
+ 0,
517
+ 0,
518
+ 270
519
+ ))
520
+ ShowUnit(dummy, false)
521
+ dummies[player] = dummy
522
+ end
523
+ ____exports.Unit = __TS__Class()
524
+ local Unit = ____exports.Unit
525
+ Unit.name = "Unit"
526
+ __TS__ClassExtends(Unit, Handle)
527
+ function Unit.prototype.____constructor(self, handle)
528
+ Handle.prototype.____constructor(self, handle)
529
+ self._owner = Player:of(getOwningPlayer(handle))
530
+ assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
531
+ assert(unitAddAbility(handle, morphDetectAbilityId))
532
+ if unitAddAbility(
533
+ handle,
534
+ fourCC("Amrf")
535
+ ) then
536
+ assert(unitRemoveAbility(
537
+ handle,
538
+ fourCC("Amrf")
539
+ ))
540
+ end
541
+ local ____ = self.abilities
542
+ 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(
548
+ TriggerEvent,
549
+ function(trigger)
550
+ TriggerRegisterUnitEvent(trigger, self.handle, event)
551
+ end,
552
+ collector or (function() return {} end)
553
+ )
554
+ end
555
+ return self.events[eventId]
556
+ end
557
+ function Unit.prototype.onDestroy(self)
558
+ local handle = self.handle
559
+ if not self._owner then
560
+ self._owner = Player:of(getOwningPlayer(handle))
561
+ end
562
+ local abilities = self.abilities
563
+ for ____, ability in ipairs(abilities) do
564
+ ability:destroy()
565
+ end
566
+ __TS__ArraySetLength(abilities, 0)
567
+ for ____, player in ipairs(Player.all) do
568
+ if self:isSelected(player) then
569
+ Event.invoke(____exports.Unit.onDeselect, self, player)
570
+ end
571
+ end
572
+ if self.events then
573
+ for ____, event in pairs(self.events) do
574
+ event:destroy()
575
+ end
576
+ end
577
+ local eventsToDestroy = self._eventsToDestroy
578
+ if eventsToDestroy ~= nil then
579
+ forEach(eventsToDestroy, "destroy")
580
+ end
581
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
582
+ unitRemoveAbility(handle, leaveDetectAbilityId)
583
+ removeUnit(handle)
584
+ end
585
+ return Handle.prototype.onDestroy(self)
586
+ end
587
+ function Unit.prototype.addAttackHandler(self, condition, action)
588
+ local handler = {
589
+ condition,
590
+ warpack.wrapThread(action)
591
+ }
592
+ local handlers = self._attackHandlers or ({})
593
+ handlers[#handlers + 1] = handler
594
+ self._attackHandlers = handlers
595
+ if #handlers == 1 then
596
+ local handle = self.handle
597
+ assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
598
+ end
599
+ return handler
600
+ end
601
+ function Unit.prototype.removeAttackHandler(self, handler)
602
+ local handlers = self._attackHandlers
603
+ if handlers then
604
+ for i = 1, #handlers do
605
+ if handlers[i] == handler then
606
+ tremove(handlers, i)
607
+ return true
608
+ end
609
+ end
610
+ end
611
+ return false
612
+ end
613
+ function Unit.prototype.addModifier(self, property, modifier)
614
+ local handle = self.handle
615
+ local deltas = self._deltas
616
+ local delta = deltas[property] or 0
617
+ local addition = modifier(getters[property](handle, delta))
618
+ modifiers[property](handle, addition)
619
+ deltas[property] = delta + addition
620
+ return {destroy = function()
621
+ modifiers[property](handle, -addition)
622
+ deltas[property] = (deltas[property] or 0) - addition
623
+ end}
624
+ end
625
+ function Unit.prototype.hasCombatClassification(self, combatClassification)
626
+ local ____combatClassification_0 = combatClassification
627
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
628
+ end
629
+ function Unit.prototype.addClassification(self, classification)
630
+ return unitAddType(self.handle, classification)
631
+ end
632
+ function Unit.prototype.removeClassification(self, classification)
633
+ return unitRemoveType(self.handle, classification)
634
+ end
635
+ function Unit.prototype.hasClassification(self, classification)
636
+ return isUnitType(self.handle, classification)
637
+ end
638
+ function Unit.prototype.isVisibleTo(self, player)
639
+ return isUnitVisible(self.handle, player.handle)
640
+ end
641
+ function Unit.prototype.isInvisibleTo(self, player)
642
+ return isUnitInvisible(self.handle, player.handle)
643
+ end
644
+ function Unit.prototype.isInRangeOf(self, x, y, range)
645
+ local ____temp_1
646
+ if type(x) == "number" then
647
+ ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
648
+ else
649
+ ____temp_1 = isUnitInRange(self.handle, x.handle, y)
650
+ end
651
+ return ____temp_1
652
+ end
653
+ function Unit.prototype.isAllyOf(self, unit)
654
+ return isUnitAlly(
655
+ self.handle,
656
+ getOwningPlayer(unit.handle)
657
+ )
658
+ end
659
+ function Unit.prototype.isEnemyOf(self, unit)
660
+ return isUnitEnemy(
661
+ self.handle,
662
+ getOwningPlayer(unit.handle)
663
+ )
664
+ end
665
+ function Unit.prototype.playAnimation(self, animation, rarity)
666
+ if type(animation) == "number" then
667
+ setUnitAnimationByIndex(self.handle, animation)
668
+ elseif rarity then
669
+ setUnitAnimationWithRarity(self.handle, animation, rarity)
670
+ else
671
+ setUnitAnimation(self.handle, animation)
672
+ end
673
+ end
674
+ function Unit.prototype.queueAnimation(self, animation)
675
+ queueUnitAnimation(self.handle, animation)
676
+ end
677
+ function Unit.prototype.setPosition(self, x, y)
678
+ setUnitPosition(self.handle, x, y)
679
+ end
680
+ function Unit.prototype.isSelected(self, player)
681
+ return IsUnitSelected(self.handle, player.handle)
682
+ end
683
+ function Unit.prototype.explode(self)
684
+ setUnitExploded(self.handle, true)
685
+ killUnit(self.handle)
686
+ end
687
+ function Unit.prototype.kill(self)
688
+ killUnit(self.handle)
689
+ end
690
+ function Unit.prototype.revive(self, pos, doEffect)
691
+ ReviveHero(self.handle, pos.x, pos.y, doEffect)
692
+ end
693
+ function Unit.prototype.healTarget(self, target, amount)
694
+ if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
695
+ target.health = target.health + 0.65 * amount
696
+ else
697
+ target.health = target.health + amount
698
+ end
699
+ end
700
+ function Unit.prototype.useItem(self, item)
701
+ return UnitUseItem(self.handle, item.handle)
702
+ end
703
+ function Unit.prototype.issueImmediateOrder(self, order)
704
+ return IssueImmediateOrderById(self.handle, order)
705
+ end
706
+ function Unit.prototype.issuePointOrder(self, order, x, y)
707
+ return IssuePointOrderById(self.handle, order, x, y)
708
+ end
709
+ function Unit.prototype.issueTargetOrder(self, order, target)
710
+ return IssueTargetOrderById(self.handle, order, target.handle)
711
+ end
712
+ function Unit.prototype.queueImmediateOrder(self, order)
713
+ return BlzQueueImmediateOrderById(self.handle, order)
714
+ end
715
+ function Unit.prototype.queuePointOrder(self, order, x, y)
716
+ return BlzQueuePointOrderById(self.handle, order, x, y)
717
+ end
718
+ function Unit.prototype.queueTargetOrder(self, order, target)
719
+ return BlzQueueTargetOrderById(self.handle, order, target.handle)
720
+ end
721
+ function Unit.prototype.addItem(self, item)
722
+ return UnitAddItem(self.handle, item.handle)
723
+ end
724
+ function Unit.prototype.dropItemTarget(self, item, target)
725
+ return UnitDropItemTarget(self.handle, item.handle, target.handle)
726
+ end
727
+ function Unit.prototype.dropItemSlot(self, item, slot)
728
+ return UnitDropItemSlot(self.handle, item.handle, slot)
729
+ end
730
+ function Unit.prototype.itemInSlot(self, slot)
731
+ return Item:of(UnitItemInSlot(self.handle, slot))
732
+ end
733
+ 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
+ )
740
+ local abilities = self.abilities
741
+ abilities[#abilities + 1] = ability
742
+ return ability
743
+ end
744
+ return nil
745
+ end
746
+ function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
747
+ return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
748
+ end
749
+ function Unit.prototype.setAbilityLevel(self, abilityId, level)
750
+ return SetUnitAbilityLevel(self.handle, abilityId, level)
751
+ end
752
+ function Unit.prototype.getAbilityLevel(self, abilityId)
753
+ return getUnitAbilityLevel(self.handle, abilityId)
754
+ end
755
+ function Unit.prototype.hasAbility(self, abilityId)
756
+ return getUnitAbilityLevel(self.handle, abilityId) > 0
757
+ 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
+ )
769
+ 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
778
+ end
779
+ end
780
+ return true
781
+ end
782
+ return false
783
+ end
784
+ function Unit.prototype.hideAbility(self, abilityId, flag)
785
+ BlzUnitHideAbility(self.handle, abilityId, flag)
786
+ end
787
+ function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
788
+ BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
789
+ end
790
+ function Unit.prototype.endAbilityCooldown(self, abilityId)
791
+ BlzEndUnitAbilityCooldown(self.handle, abilityId)
792
+ end
793
+ function Unit.prototype.interruptAttack(self)
794
+ unitInterruptAttack(self.handle)
795
+ end
796
+ function Unit.prototype.interruptCast(self, abilityId)
797
+ unitDisableAbility(self.handle, abilityId, true, false)
798
+ unitDisableAbility(self.handle, abilityId, false, false)
799
+ end
800
+ function Unit.prototype.getDistanceTo(self, target)
801
+ local handle = self.handle
802
+ local targetHandle = target.handle
803
+ if targetHandle then
804
+ local dx = getUnitX(targetHandle) - getUnitX(handle)
805
+ local dy = getUnitY(targetHandle) - getUnitY(handle)
806
+ return sqrt(dx * dx + dy * dy)
807
+ else
808
+ local dx = target.x - getUnitX(handle)
809
+ local dy = target.y - getUnitY(handle)
810
+ return sqrt(dx * dx + dy * dy)
811
+ end
812
+ end
813
+ function Unit.prototype.getCollisionDistanceTo(self, targetUnitOrX, targetY)
814
+ local handle = self.handle
815
+ if targetY == nil then
816
+ local targetHandle = targetUnitOrX.handle
817
+ local dx = getUnitX(targetHandle) - getUnitX(handle)
818
+ local dy = getUnitY(targetHandle) - getUnitY(handle)
819
+ return max(
820
+ 0,
821
+ sqrt(dx * dx + dy * dy) - getUnitCollisionSize(targetHandle) - getUnitCollisionSize(handle)
822
+ )
823
+ else
824
+ local dx = targetUnitOrX - getUnitX(handle)
825
+ local dy = targetY - getUnitY(handle)
826
+ return max(
827
+ 0,
828
+ sqrt(dx * dx + dy * dy) - getUnitCollisionSize(handle)
829
+ )
830
+ end
831
+ end
832
+ function Unit.prototype.resetCooldown(self)
833
+ UnitResetCooldown(self.handle)
834
+ end
835
+ function Unit.prototype.incrementDisableAutoAttackCounter(self)
836
+ unitDisableAbility(
837
+ self.handle,
838
+ fourCC("Aatk"),
839
+ true,
840
+ false
841
+ )
842
+ end
843
+ function Unit.prototype.decrementDisableAutoAttackCounter(self)
844
+ unitDisableAbility(
845
+ self.handle,
846
+ fourCC("Aatk"),
847
+ false,
848
+ false
849
+ )
850
+ end
851
+ function Unit.prototype.pauseEx(self)
852
+ self:incrementStunCounter()
853
+ end
854
+ function Unit.prototype.unpauseEx(self)
855
+ self:decrementStunCounter()
856
+ end
857
+ function Unit.prototype.incrementStunCounter(self)
858
+ local stunCounter = self[101] or 0
859
+ if not self[100] or stunCounter >= 0 then
860
+ BlzPauseUnitEx(self.handle, true)
861
+ end
862
+ self[101] = stunCounter + 1
863
+ end
864
+ function Unit.prototype.decrementStunCounter(self)
865
+ local stunCounter = self[101] or 0
866
+ if not self[100] or stunCounter >= 1 then
867
+ BlzPauseUnitEx(self.handle, false)
868
+ end
869
+ self[101] = stunCounter - 1
870
+ end
871
+ function Unit.create(self, owner, id, x, y, facing, skinId)
872
+ local handle = skinId and BlzCreateUnitWithSkin(
873
+ owner.handle,
874
+ id,
875
+ x,
876
+ y,
877
+ facing,
878
+ skinId
879
+ ) or CreateUnit(
880
+ owner.handle,
881
+ id,
882
+ x,
883
+ y,
884
+ facing
885
+ )
886
+ return handle and self:of(handle)
887
+ end
888
+ function Unit.forAll(self, consumer)
889
+ message = nil
890
+ gConsumer = consumer
891
+ groupEnumUnitsInRange(
892
+ dummyGroup,
893
+ 0,
894
+ 0,
895
+ 999999,
896
+ invokeConsumer
897
+ )
898
+ if message then
899
+ error(message)
900
+ end
901
+ end
902
+ function Unit.getAll(self, predicate)
903
+ targetCollection = {}
904
+ targetCollectionNextIndex = 1
905
+ enumPredicate = predicate
906
+ local collect = predicate and collectIntoTargetWithPredicate or collectIntoTarget
907
+ for ____, player in ipairs(Player.all) do
908
+ groupEnumUnitsOfPlayer(dummyGroup, player.handle, collect)
909
+ end
910
+ return targetCollection
911
+ end
912
+ function Unit.getOwnedBy(self, player, predicate)
913
+ targetCollection = {}
914
+ targetCollectionNextIndex = 1
915
+ enumPredicate = predicate
916
+ groupEnumUnitsOfPlayer(dummyGroup, player.handle, predicate and collectIntoTargetWithPredicate or collectIntoTarget)
917
+ return targetCollection
918
+ end
919
+ function Unit.getInRect(self, rect, predicate)
920
+ targetCollection = {}
921
+ targetCollectionNextIndex = 1
922
+ enumPredicate = predicate
923
+ groupEnumUnitsInRect(dummyGroup, rect.handle, predicate and collectIntoTargetWithPredicate or collectIntoTarget)
924
+ return targetCollection
925
+ end
926
+ function Unit.getInRange(self, x, y, range, predicate)
927
+ targetCollection = {}
928
+ targetCollectionNextIndex = 1
929
+ enumPredicate = predicate
930
+ groupEnumUnitsInRange(
931
+ dummyGroup,
932
+ x,
933
+ y,
934
+ range,
935
+ predicate and collectIntoTargetWithPredicate or collectIntoTarget
936
+ )
937
+ return targetCollection
938
+ end
939
+ function Unit.getInCollisionRange(self, x, y, range, predicate)
940
+ targetCollection = {}
941
+ targetCollectionNextIndex = 1
942
+ centerX = x
943
+ centerY = y
944
+ enumRange = range
945
+ enumPredicate = predicate
946
+ groupEnumUnitsInRange(
947
+ dummyGroup,
948
+ centerX,
949
+ centerY,
950
+ range + 256,
951
+ predicate and collectIntoTargetCollisionWithPredicate or collectIntoTargetCollision
952
+ )
953
+ return targetCollection
954
+ end
955
+ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
956
+ posX = pos.x
957
+ posY = pos.y
958
+ startAngle = deg2rad(offsetAngle)
959
+ centerAngle = deg2rad(centralAngle)
960
+ targetCollection = {}
961
+ targetCollectionNextIndex = 1
962
+ groupEnumUnitsInRange(
963
+ dummyGroup,
964
+ pos.x,
965
+ pos.y,
966
+ range,
967
+ collectSectorIntoTarget
968
+ )
969
+ return targetCollection
970
+ end
971
+ function Unit.getSelectionOf(self, player)
972
+ targetCollection = {}
973
+ targetCollectionNextIndex = 1
974
+ GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
975
+ return targetCollection
976
+ end
977
+ function Unit.prototype.getField(self, field)
978
+ local fieldType = match(
979
+ ____tostring(field),
980
+ "^(.-):"
981
+ )
982
+ return fieldGetters[fieldType](self, field)
983
+ end
984
+ function Unit.prototype.setField(self, field, value)
985
+ local fieldType = match(
986
+ ____tostring(field),
987
+ "^(.-):"
988
+ )
989
+ return fieldSetters[fieldType](self, field, value)
990
+ end
991
+ function Unit.prototype.__tostring(self)
992
+ return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
993
+ end
994
+ __TS__SetDescriptor(
995
+ Unit.prototype,
996
+ "_deltas",
997
+ {get = function(self)
998
+ local deltas = {}
999
+ rawset(self, "_deltas", deltas)
1000
+ return deltas
1001
+ end},
1002
+ true
1003
+ )
1004
+ __TS__SetDescriptor(
1005
+ Unit.prototype,
1006
+ "skinId",
1007
+ {
1008
+ get = function(self)
1009
+ return BlzGetUnitSkin(self.handle)
1010
+ end,
1011
+ set = function(self, v)
1012
+ BlzSetUnitSkin(self.handle, v)
1013
+ end
1014
+ },
1015
+ true
1016
+ )
1017
+ __TS__SetDescriptor(
1018
+ Unit.prototype,
1019
+ "typeId",
1020
+ {get = function(self)
1021
+ return getUnitTypeId(self.handle)
1022
+ end},
1023
+ true
1024
+ )
1025
+ __TS__SetDescriptor(
1026
+ Unit.prototype,
1027
+ "isHero",
1028
+ {get = function(self)
1029
+ return isHeroUnitId(getUnitTypeId(self.handle))
1030
+ end},
1031
+ true
1032
+ )
1033
+ __TS__SetDescriptor(
1034
+ Unit.prototype,
1035
+ "isAlive",
1036
+ {get = function(self)
1037
+ return unitAlive(self.handle)
1038
+ end},
1039
+ true
1040
+ )
1041
+ __TS__SetDescriptor(
1042
+ Unit.prototype,
1043
+ "isDead",
1044
+ {get = function(self)
1045
+ return not unitAlive(self.handle)
1046
+ end},
1047
+ true
1048
+ )
1049
+ __TS__SetDescriptor(
1050
+ Unit.prototype,
1051
+ "isIllusion",
1052
+ {get = function(self)
1053
+ return isUnitIllusion(self.handle)
1054
+ end},
1055
+ true
1056
+ )
1057
+ __TS__SetDescriptor(
1058
+ Unit.prototype,
1059
+ "combatClassifications",
1060
+ {
1061
+ get = function(self)
1062
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS)
1063
+ end,
1064
+ set = function(self, combatClassifications)
1065
+ setUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS, combatClassifications)
1066
+ end
1067
+ },
1068
+ true
1069
+ )
1070
+ __TS__SetDescriptor(
1071
+ Unit.prototype,
1072
+ "weapons",
1073
+ {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
1080
+ end},
1081
+ true
1082
+ )
1083
+ __TS__SetDescriptor(
1084
+ Unit.prototype,
1085
+ "level",
1086
+ {
1087
+ get = function(self)
1088
+ return GetHeroLevel(self.handle)
1089
+ end,
1090
+ set = function(self, v)
1091
+ local handle = self.handle
1092
+ local level = GetHeroLevel(handle)
1093
+ if v > level then
1094
+ SetHeroLevel(handle, v, false)
1095
+ else
1096
+ UnitStripHeroLevel(handle, level - v)
1097
+ end
1098
+ end
1099
+ },
1100
+ true
1101
+ )
1102
+ __TS__SetDescriptor(
1103
+ Unit.prototype,
1104
+ "xp",
1105
+ {
1106
+ get = function(self)
1107
+ return GetHeroXP(self.handle)
1108
+ end,
1109
+ set = function(self, v)
1110
+ SetHeroXP(self.handle, v, false)
1111
+ end
1112
+ },
1113
+ true
1114
+ )
1115
+ __TS__SetDescriptor(
1116
+ Unit.prototype,
1117
+ "strengthBase",
1118
+ {
1119
+ get = function(self)
1120
+ return getHeroStr(self.handle, false)
1121
+ end,
1122
+ set = function(self, strengthBase)
1123
+ setHeroStr(self.handle, strengthBase, true)
1124
+ end
1125
+ },
1126
+ true
1127
+ )
1128
+ __TS__SetDescriptor(
1129
+ Unit.prototype,
1130
+ "strengthBonus",
1131
+ {get = function(self)
1132
+ local handle = self.handle
1133
+ return getHeroStr(handle, true) - getHeroStr(handle, false)
1134
+ end},
1135
+ true
1136
+ )
1137
+ __TS__SetDescriptor(
1138
+ Unit.prototype,
1139
+ "strength",
1140
+ {get = function(self)
1141
+ return getHeroStr(self.handle, true)
1142
+ end},
1143
+ true
1144
+ )
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
+ __TS__SetDescriptor(
1159
+ Unit.prototype,
1160
+ "agilityBonus",
1161
+ {get = function(self)
1162
+ local handle = self.handle
1163
+ return getHeroAgi(handle, true) - getHeroAgi(handle, false)
1164
+ end},
1165
+ true
1166
+ )
1167
+ __TS__SetDescriptor(
1168
+ Unit.prototype,
1169
+ "agility",
1170
+ {get = function(self)
1171
+ return getHeroAgi(self.handle, true)
1172
+ end},
1173
+ true
1174
+ )
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
+ __TS__SetDescriptor(
1189
+ Unit.prototype,
1190
+ "intelligenceBonus",
1191
+ {get = function(self)
1192
+ local handle = self.handle
1193
+ return getHeroInt(handle, true) - getHeroInt(handle, false)
1194
+ end},
1195
+ true
1196
+ )
1197
+ __TS__SetDescriptor(
1198
+ Unit.prototype,
1199
+ "intelligence",
1200
+ {get = function(self)
1201
+ return getHeroInt(self.handle, true)
1202
+ end},
1203
+ true
1204
+ )
1205
+ __TS__SetDescriptor(
1206
+ Unit.prototype,
1207
+ "name",
1208
+ {
1209
+ get = function(self)
1210
+ return GetUnitName(self.handle)
1211
+ end,
1212
+ set = function(self, v)
1213
+ BlzSetUnitName(self.handle, v)
1214
+ end
1215
+ },
1216
+ true
1217
+ )
1218
+ __TS__SetDescriptor(
1219
+ Unit.prototype,
1220
+ "properName",
1221
+ {
1222
+ get = function(self)
1223
+ return GetHeroProperName(self.handle)
1224
+ end,
1225
+ set = function(self, v)
1226
+ BlzSetHeroProperName(self.handle, v)
1227
+ end
1228
+ },
1229
+ true
1230
+ )
1231
+ __TS__SetDescriptor(
1232
+ Unit.prototype,
1233
+ "isTeamGlowVisible",
1234
+ {
1235
+ get = function(self)
1236
+ return not self[103]
1237
+ end,
1238
+ set = function(self, isTeamGlowVisible)
1239
+ showUnitTeamGlow(self.handle, isTeamGlowVisible)
1240
+ local ____temp_2
1241
+ if not isTeamGlowVisible then
1242
+ ____temp_2 = true
1243
+ else
1244
+ ____temp_2 = nil
1245
+ end
1246
+ self[103] = ____temp_2
1247
+ end
1248
+ },
1249
+ true
1250
+ )
1251
+ __TS__SetDescriptor(
1252
+ Unit.prototype,
1253
+ "color",
1254
+ {set = function(self, color)
1255
+ setUnitColor(self.handle, color.handle)
1256
+ if self[103] then
1257
+ showUnitTeamGlow(self.handle, false)
1258
+ end
1259
+ end},
1260
+ true
1261
+ )
1262
+ __TS__SetDescriptor(
1263
+ Unit.prototype,
1264
+ "acquisitionRange",
1265
+ {
1266
+ get = function(self)
1267
+ return GetUnitAcquireRange(self.handle)
1268
+ end,
1269
+ set = function(self, v)
1270
+ SetUnitAcquireRange(self.handle, v)
1271
+ end
1272
+ },
1273
+ true
1274
+ )
1275
+ __TS__SetDescriptor(
1276
+ Unit.prototype,
1277
+ "maxHealth",
1278
+ {
1279
+ get = function(self)
1280
+ return BlzGetUnitMaxHP(self.handle) - (self[102] or 0)
1281
+ end,
1282
+ set = function(self, maxHealth)
1283
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[102] or 0))
1284
+ end
1285
+ },
1286
+ true
1287
+ )
1288
+ __TS__SetDescriptor(
1289
+ Unit.prototype,
1290
+ "healthRegenerationRate",
1291
+ {
1292
+ get = function(self)
1293
+ local handle = self.handle
1294
+ return getUnitRealField(handle, UNIT_RF_HIT_POINTS_REGENERATION_RATE) + getHeroStr(handle, true) * HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
1295
+ end,
1296
+ set = function(self, healthRegenerationRate)
1297
+ local handle = self.handle
1298
+ setUnitRealField(
1299
+ handle,
1300
+ UNIT_RF_HIT_POINTS_REGENERATION_RATE,
1301
+ healthRegenerationRate - getHeroStr(handle, true) * HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
1302
+ )
1303
+ end
1304
+ },
1305
+ true
1306
+ )
1307
+ __TS__SetDescriptor(
1308
+ Unit.prototype,
1309
+ "maxMana",
1310
+ {
1311
+ get = function(self)
1312
+ return BlzGetUnitMaxMana(self.handle)
1313
+ end,
1314
+ set = function(self, maxMana)
1315
+ BlzSetUnitMaxMana(self.handle, maxMana)
1316
+ end
1317
+ },
1318
+ true
1319
+ )
1320
+ __TS__SetDescriptor(
1321
+ Unit.prototype,
1322
+ "health",
1323
+ {
1324
+ get = function(self)
1325
+ return GetWidgetLife(self.handle) - (self[102] or 0)
1326
+ end,
1327
+ set = function(self, health)
1328
+ SetWidgetLife(self.handle, health + (self[102] or 0))
1329
+ end
1330
+ },
1331
+ true
1332
+ )
1333
+ __TS__SetDescriptor(
1334
+ Unit.prototype,
1335
+ "mana",
1336
+ {
1337
+ get = function(self)
1338
+ return GetUnitState(self.handle, UNIT_STATE_MANA)
1339
+ end,
1340
+ set = function(self, mana)
1341
+ SetUnitState(self.handle, UNIT_STATE_MANA, mana)
1342
+ end
1343
+ },
1344
+ true
1345
+ )
1346
+ __TS__SetDescriptor(
1347
+ Unit.prototype,
1348
+ "manaRegenerationRate",
1349
+ {
1350
+ get = function(self)
1351
+ local handle = self.handle
1352
+ return getUnitRealField(handle, UNIT_RF_MANA_REGENERATION) + getHeroInt(handle, true) * MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
1353
+ end,
1354
+ set = function(self, manaRegenerationRate)
1355
+ local handle = self.handle
1356
+ setUnitRealField(
1357
+ handle,
1358
+ UNIT_RF_MANA_REGENERATION,
1359
+ manaRegenerationRate - getHeroInt(handle, true) * MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
1360
+ )
1361
+ end
1362
+ },
1363
+ true
1364
+ )
1365
+ __TS__SetDescriptor(
1366
+ Unit.prototype,
1367
+ "armor",
1368
+ {
1369
+ get = function(self)
1370
+ return BlzGetUnitArmor(self.handle)
1371
+ end,
1372
+ set = function(self, armor)
1373
+ BlzSetUnitArmor(self.handle, armor)
1374
+ end
1375
+ },
1376
+ true
1377
+ )
1378
+ __TS__SetDescriptor(
1379
+ Unit.prototype,
1380
+ "facing",
1381
+ {
1382
+ get = function(self)
1383
+ return GetUnitFacing(self.handle)
1384
+ end,
1385
+ set = function(self, v)
1386
+ BlzSetUnitFacingEx(self.handle, v)
1387
+ end
1388
+ },
1389
+ true
1390
+ )
1391
+ __TS__SetDescriptor(
1392
+ Unit.prototype,
1393
+ "speed",
1394
+ {
1395
+ get = function(self)
1396
+ return GetUnitMoveSpeed(self.handle)
1397
+ end,
1398
+ set = function(self, v)
1399
+ SetUnitMoveSpeed(self.handle, v)
1400
+ end
1401
+ },
1402
+ true
1403
+ )
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
+ __TS__SetDescriptor(
1418
+ Unit.prototype,
1419
+ "x",
1420
+ {
1421
+ get = function(self)
1422
+ return getUnitX(self.handle)
1423
+ end,
1424
+ set = function(self, v)
1425
+ SetUnitX(self.handle, v)
1426
+ end
1427
+ },
1428
+ true
1429
+ )
1430
+ __TS__SetDescriptor(
1431
+ Unit.prototype,
1432
+ "y",
1433
+ {
1434
+ get = function(self)
1435
+ return getUnitY(self.handle)
1436
+ end,
1437
+ set = function(self, v)
1438
+ SetUnitY(self.handle, v)
1439
+ end
1440
+ },
1441
+ true
1442
+ )
1443
+ __TS__SetDescriptor(
1444
+ Unit.prototype,
1445
+ "z",
1446
+ {get = function(self)
1447
+ local handle = self.handle
1448
+ moveLocation(
1449
+ loc,
1450
+ getUnitX(handle),
1451
+ getUnitY(handle)
1452
+ )
1453
+ return getUnitFlyHeight(handle) + getLocationZ(loc)
1454
+ end},
1455
+ true
1456
+ )
1457
+ __TS__SetDescriptor(
1458
+ Unit.prototype,
1459
+ "xy",
1460
+ {set = function(self, v)
1461
+ SetUnitX(self.handle, v.x)
1462
+ SetUnitY(self.handle, v.y)
1463
+ end},
1464
+ true
1465
+ )
1466
+ __TS__SetDescriptor(
1467
+ Unit.prototype,
1468
+ "position",
1469
+ {
1470
+ get = function(self)
1471
+ return vec2(
1472
+ getUnitX(self.handle),
1473
+ getUnitY(self.handle)
1474
+ )
1475
+ end,
1476
+ set = function(self, v)
1477
+ SetUnitPosition(self.handle, v.x, v.y)
1478
+ end
1479
+ },
1480
+ true
1481
+ )
1482
+ __TS__SetDescriptor(
1483
+ Unit.prototype,
1484
+ "owner",
1485
+ {
1486
+ get = function(self)
1487
+ return Player:of(getOwningPlayer(self.handle)) or self._owner or Player.neutralExtra
1488
+ end,
1489
+ set = function(self, v)
1490
+ SetUnitOwner(self.handle, v.handle, false)
1491
+ if self._owner then
1492
+ self._owner = v
1493
+ end
1494
+ end
1495
+ },
1496
+ true
1497
+ )
1498
+ __TS__SetDescriptor(
1499
+ Unit.prototype,
1500
+ "goldCost",
1501
+ {get = function(self)
1502
+ local typeId = getUnitTypeId(self.handle)
1503
+ return isHeroUnitId(typeId) and 0 or getUnitGoldCost(typeId)
1504
+ end},
1505
+ true
1506
+ )
1507
+ __TS__SetDescriptor(
1508
+ Unit.prototype,
1509
+ "lumberCost",
1510
+ {get = function(self)
1511
+ local typeId = getUnitTypeId(self.handle)
1512
+ return isHeroUnitId(typeId) and 0 or getUnitLumberCost(typeId)
1513
+ end},
1514
+ true
1515
+ )
1516
+ __TS__SetDescriptor(
1517
+ Unit.prototype,
1518
+ "gold",
1519
+ {
1520
+ get = function(self)
1521
+ return getResourceAmount(self.handle)
1522
+ end,
1523
+ set = function(self, gold)
1524
+ setResourceAmount(self.handle, gold)
1525
+ end
1526
+ },
1527
+ true
1528
+ )
1529
+ __TS__SetDescriptor(
1530
+ Unit.prototype,
1531
+ "isPaused",
1532
+ {
1533
+ get = function(self)
1534
+ return IsUnitPaused(self.handle)
1535
+ end,
1536
+ set = function(self, isPaused)
1537
+ local handle = self.handle
1538
+ if isPaused and not IsUnitPaused(handle) then
1539
+ self[100] = true
1540
+ for _ = self[101] or 0, -1 do
1541
+ BlzPauseUnitEx(handle, true)
1542
+ end
1543
+ PauseUnit(handle, true)
1544
+ elseif not isPaused and IsUnitPaused(handle) then
1545
+ PauseUnit(handle, false)
1546
+ for _ = self[101] or 0, -1 do
1547
+ BlzPauseUnitEx(handle, false)
1548
+ end
1549
+ self[100] = nil
1550
+ end
1551
+ end
1552
+ },
1553
+ true
1554
+ )
1555
+ __TS__SetDescriptor(
1556
+ Unit.prototype,
1557
+ "hidden",
1558
+ {
1559
+ get = function(self)
1560
+ return IsUnitHidden(self.handle)
1561
+ end,
1562
+ set = function(self, v)
1563
+ if v then
1564
+ ShowUnitHide(self.handle)
1565
+ else
1566
+ ShowUnitShow(self.handle)
1567
+ end
1568
+ end
1569
+ },
1570
+ true
1571
+ )
1572
+ __TS__SetDescriptor(
1573
+ Unit.prototype,
1574
+ "isInvulnerable",
1575
+ {get = function(self)
1576
+ return isUnitInvulnerable(self.handle)
1577
+ end},
1578
+ true
1579
+ )
1580
+ __TS__SetDescriptor(
1581
+ Unit.prototype,
1582
+ "vertexColor",
1583
+ {
1584
+ get = function(self)
1585
+ local handle = self.handle
1586
+ return Color:of(
1587
+ getUnitIntegerField(handle, UNIT_IF_TINTING_COLOR_RED),
1588
+ getUnitIntegerField(handle, UNIT_IF_TINTING_COLOR_GREEN),
1589
+ getUnitIntegerField(handle, UNIT_IF_TINTING_COLOR_BLUE),
1590
+ getUnitIntegerField(handle, UNIT_IF_TINTING_COLOR_ALPHA)
1591
+ )
1592
+ end,
1593
+ set = function(self, v)
1594
+ SetUnitVertexColor(
1595
+ self.handle,
1596
+ v.r,
1597
+ v.g,
1598
+ v.b,
1599
+ v.a
1600
+ )
1601
+ end
1602
+ },
1603
+ true
1604
+ )
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
+ __TS__SetDescriptor(
1620
+ Unit.prototype,
1621
+ "timeScale",
1622
+ {
1623
+ get = function(self)
1624
+ return self._timeScale or 1
1625
+ end,
1626
+ set = function(self, v)
1627
+ setUnitTimeScale(self.handle, v)
1628
+ self._timeScale = v ~= 1 and v or nil
1629
+ end
1630
+ },
1631
+ true
1632
+ )
1633
+ __TS__SetDescriptor(
1634
+ Unit.prototype,
1635
+ "collisionSize",
1636
+ {get = function(self)
1637
+ return getUnitCollisionSize(self.handle)
1638
+ end},
1639
+ true
1640
+ )
1641
+ __TS__SetDescriptor(
1642
+ Unit.prototype,
1643
+ "pathingCollisionRange",
1644
+ {get = function(self)
1645
+ return 16 * (min(
1646
+ getUnitCollisionSize(self.handle) // 16,
1647
+ 3
1648
+ ) + 1)
1649
+ end},
1650
+ true
1651
+ )
1652
+ __TS__SetDescriptor(
1653
+ Unit.prototype,
1654
+ "pathing",
1655
+ {set = function(self, v)
1656
+ SetUnitPathing(self.handle, v)
1657
+ end},
1658
+ true
1659
+ )
1660
+ __TS__SetDescriptor(
1661
+ Unit.prototype,
1662
+ "buffIds",
1663
+ {get = function(self)
1664
+ local buffIds = {}
1665
+ local buffIdsCount = 0
1666
+ local handle = self.handle
1667
+ do
1668
+ local i = 0
1669
+ local ability = getUnitAbilityByIndex(handle, i)
1670
+ while ability ~= nil do
1671
+ local abilityId = getAbilityId(ability)
1672
+ if getAbilityName(abilityId) == "Default string" and abilityId ~= fourCC("Atrg") then
1673
+ buffIdsCount = buffIdsCount + 1
1674
+ buffIds[buffIdsCount] = abilityId
1675
+ end
1676
+ do
1677
+ i = i + 1
1678
+ ability = getUnitAbilityByIndex(handle, i)
1679
+ end
1680
+ end
1681
+ end
1682
+ return buffIds
1683
+ end},
1684
+ true
1685
+ )
1686
+ __TS__SetDescriptor(
1687
+ Unit.prototype,
1688
+ "waygateActive",
1689
+ {
1690
+ get = function(self)
1691
+ return WaygateIsActive(self.handle)
1692
+ end,
1693
+ set = function(self, v)
1694
+ WaygateActivate(self.handle, v)
1695
+ end
1696
+ },
1697
+ true
1698
+ )
1699
+ __TS__SetDescriptor(
1700
+ Unit.prototype,
1701
+ "waygateDestination",
1702
+ {
1703
+ get = function(self)
1704
+ return vec2(
1705
+ WaygateGetDestinationX(self.handle),
1706
+ WaygateGetDestinationY(self.handle)
1707
+ )
1708
+ end,
1709
+ set = function(self, v)
1710
+ WaygateSetDestination(self.handle, v.x, v.y)
1711
+ end
1712
+ },
1713
+ true
1714
+ )
1715
+ __TS__SetDescriptor(
1716
+ Unit.prototype,
1717
+ "abilities",
1718
+ {get = function(self)
1719
+ local abilities = {}
1720
+ local stock = stockAbilities[self.typeId]
1721
+ if stock then
1722
+ local handle = self.handle
1723
+ local j = 1
1724
+ for i = 1, #stock do
1725
+ local abilityId = stock[i]
1726
+ local ability = UnitAbility:of(
1727
+ getUnitAbility(handle, abilityId),
1728
+ abilityId,
1729
+ self
1730
+ )
1731
+ if ability then
1732
+ abilities[j] = ability
1733
+ j = j + 1
1734
+ end
1735
+ end
1736
+ end
1737
+ rawset(self, "abilities", abilities)
1738
+ return abilities
1739
+ end},
1740
+ true
1741
+ )
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
+ __TS__SetDescriptor(
1767
+ Unit.prototype,
1768
+ "onManaEqual",
1769
+ {get = function(self)
1770
+ local handle = self.handle
1771
+ local onManaEqual = setmetatable(
1772
+ {},
1773
+ {__index = function(self, value)
1774
+ local event = __TS__New(
1775
+ TriggerEvent,
1776
+ function(trigger)
1777
+ TriggerRegisterUnitManaEvent(trigger, handle, EQUAL, value)
1778
+ end,
1779
+ function() return ____exports.Unit:of(handle), value end
1780
+ )
1781
+ rawset(self, value, event)
1782
+ return event
1783
+ end}
1784
+ )
1785
+ rawset(self, "onManaEqual", onManaEqual)
1786
+ return onManaEqual
1787
+ end},
1788
+ true
1789
+ )
1790
+ __TS__SetDescriptor(
1791
+ Unit.prototype,
1792
+ "manaEvent",
1793
+ {get = function(self)
1794
+ local unit = self
1795
+ local eventByValueByOperator = setmetatable(
1796
+ {},
1797
+ {__index = function(self, operator)
1798
+ local eventByValue = setmetatable(
1799
+ {},
1800
+ {__index = function(self, value)
1801
+ local actualValue = value
1802
+ if operator == 4 then
1803
+ actualValue = value + 0.01
1804
+ elseif operator == 0 then
1805
+ actualValue = value - 0.01
1806
+ end
1807
+ local event = __TS__New(
1808
+ TriggerEvent,
1809
+ function(trigger)
1810
+ TriggerRegisterUnitManaEvent(trigger, unit.handle, jlimitopByOperator[operator], actualValue)
1811
+ end,
1812
+ function() return unit end
1813
+ )
1814
+ local eventsToDestroy = unit._eventsToDestroy
1815
+ if eventsToDestroy == nil then
1816
+ eventsToDestroy = {}
1817
+ unit._eventsToDestroy = eventsToDestroy
1818
+ end
1819
+ eventsToDestroy[#eventsToDestroy + 1] = event
1820
+ rawset(self, value, event)
1821
+ return event
1822
+ end}
1823
+ )
1824
+ rawset(self, operator, eventByValue)
1825
+ return eventByValue
1826
+ end}
1827
+ )
1828
+ rawset(self, "manaEvent", eventByValueByOperator)
1829
+ return eventByValueByOperator
1830
+ end},
1831
+ true
1832
+ )
1833
+ __TS__SetDescriptor(
1834
+ Unit.prototype,
1835
+ "onSelect",
1836
+ {get = function(self)
1837
+ return self:getEvent(EVENT_UNIT_SELECTED)
1838
+ end},
1839
+ true
1840
+ )
1841
+ __TS__SetDescriptor(
1842
+ Unit.prototype,
1843
+ "onDeselect",
1844
+ {get = function(self)
1845
+ return self:getEvent(EVENT_UNIT_DESELECTED)
1846
+ end},
1847
+ true
1848
+ )
1849
+ __TS__SetDescriptor(
1850
+ Unit.prototype,
1851
+ "onImmediateOrder",
1852
+ {get = function(self)
1853
+ return self:getEvent(
1854
+ EVENT_UNIT_ISSUED_ORDER,
1855
+ function() return GetIssuedOrderId() end
1856
+ )
1857
+ end},
1858
+ true
1859
+ )
1860
+ __TS__SetDescriptor(
1861
+ Unit.prototype,
1862
+ "onPointOrder",
1863
+ {get = function(self)
1864
+ return self:getEvent(
1865
+ EVENT_UNIT_ISSUED_POINT_ORDER,
1866
+ function() return GetIssuedOrderId() end
1867
+ )
1868
+ end},
1869
+ true
1870
+ )
1871
+ __TS__SetDescriptor(
1872
+ Unit.prototype,
1873
+ "onTargetOrder",
1874
+ {get = function(self)
1875
+ return self:getEvent(
1876
+ EVENT_UNIT_ISSUED_TARGET_ORDER,
1877
+ function() return GetIssuedOrderId(), ____exports.Unit:of(GetOrderTargetUnit()) or Item:of(GetOrderTargetItem()) or checkNotNull(Destructable:of(GetOrderTargetDestructable())) end
1878
+ )
1879
+ end},
1880
+ true
1881
+ )
1882
+ __TS__SetDescriptor(
1883
+ Unit.prototype,
1884
+ "onSpellEffect",
1885
+ {get = function(self)
1886
+ return self:getEvent(
1887
+ EVENT_UNIT_SPELL_EFFECT,
1888
+ function() return GetSpellAbilityId() end
1889
+ )
1890
+ end},
1891
+ true
1892
+ )
1893
+ Unit.deathEvent = __TS__New(
1894
+ ____exports.UnitTriggerEvent,
1895
+ EVENT_PLAYER_UNIT_DEATH,
1896
+ function() return ____exports.Unit:of(GetDyingUnit()), ____exports.Unit:of(GetKillingUnit()) end
1897
+ )
1898
+ Unit.onDecay = __TS__New(
1899
+ ____exports.UnitTriggerEvent,
1900
+ EVENT_PLAYER_UNIT_DECAY,
1901
+ function() return ____exports.Unit:of(GetDecayingUnit()) end
1902
+ )
1903
+ Unit.onResurrect = __TS__New(
1904
+ InitializingEvent,
1905
+ function(event)
1906
+ local invoke = Event.invoke
1907
+ local dead = setmetatable({}, {__mode = "k"})
1908
+ ____exports.Unit.deathEvent:addListener(function(unit)
1909
+ dead[unit] = true
1910
+ end)
1911
+ ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1912
+ if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
1913
+ dead[unit] = false
1914
+ invoke(event, unit)
1915
+ end
1916
+ end)
1917
+ end
1918
+ )
1919
+ Unit.morphEvent = __TS__New(
1920
+ InitializingEvent,
1921
+ function(event)
1922
+ ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
1923
+ if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
1924
+ assert(unitAddAbility(unit.handle, morphDetectAbilityId))
1925
+ Timer:run(Event.invoke, event, unit)
1926
+ end
1927
+ end)
1928
+ end
1929
+ )
1930
+ Unit.onOwnerChange = __TS__New(
1931
+ ____exports.UnitTriggerEvent,
1932
+ EVENT_PLAYER_UNIT_CHANGE_OWNER,
1933
+ function() return ____exports.Unit:of(GetChangingUnit()), Player:of(GetChangingUnitPrevOwner()) end
1934
+ )
1935
+ Unit.onSelect = __TS__New(
1936
+ ____exports.UnitTriggerEvent,
1937
+ EVENT_PLAYER_UNIT_SELECTED,
1938
+ function() return ____exports.Unit:of(getTriggerUnit()), Player:of(getTriggerPlayer()) end
1939
+ )
1940
+ Unit.onDeselect = __TS__New(
1941
+ ____exports.UnitTriggerEvent,
1942
+ EVENT_PLAYER_UNIT_DESELECTED,
1943
+ function() return ____exports.Unit:of(getTriggerUnit()), Player:of(getTriggerPlayer()) end
1944
+ )
1945
+ Unit.constructionStartEvent = __TS__New(
1946
+ ____exports.UnitTriggerEvent,
1947
+ EVENT_PLAYER_UNIT_CONSTRUCT_START,
1948
+ function() return ____exports.Unit:of(GetConstructingStructure()) end
1949
+ )
1950
+ Unit.onUpgradeFinish = __TS__New(
1951
+ ____exports.UnitTriggerEvent,
1952
+ EVENT_PLAYER_UNIT_UPGRADE_FINISH,
1953
+ function() return ____exports.Unit:of(getTriggerUnit()) end
1954
+ )
1955
+ Unit.onSpellEffect = dispatchId(__TS__New(
1956
+ ____exports.UnitTriggerEvent,
1957
+ EVENT_PLAYER_UNIT_SPELL_EFFECT,
1958
+ function() return ____exports.Unit:of(GetTriggerUnit()), GetSpellAbilityId() end
1959
+ ))
1960
+ Unit.onTargetCast = dispatchId(__TS__New(
1961
+ InitializingEvent,
1962
+ function(event)
1963
+ local invoke = Event.invoke
1964
+ local function listener(unit, id)
1965
+ local ____GetSpellTargetUnit_result_5
1966
+ if GetSpellTargetUnit() then
1967
+ ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
1968
+ else
1969
+ local ____GetSpellTargetItem_result_4
1970
+ if GetSpellTargetItem() then
1971
+ ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
1972
+ else
1973
+ local ____GetSpellTargetDestructable_result_3
1974
+ if GetSpellTargetDestructable() then
1975
+ ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
1976
+ else
1977
+ ____GetSpellTargetDestructable_result_3 = nil
1978
+ end
1979
+ ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
1980
+ end
1981
+ ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
1982
+ end
1983
+ local target = ____GetSpellTargetUnit_result_5
1984
+ if target then
1985
+ invoke(event, unit, id, target)
1986
+ end
1987
+ end
1988
+ ____exports.Unit.onSpellEffect:addListener(listener)
1989
+ return listener
1990
+ end,
1991
+ function(listener)
1992
+ ____exports.Unit.onSpellEffect:removeListener(listener)
1993
+ end
1994
+ ))
1995
+ Unit.onCastPrepare = dispatchAbility(__TS__New(
1996
+ ____exports.UnitTriggerEvent,
1997
+ EVENT_PLAYER_UNIT_SPELL_CHANNEL,
1998
+ function()
1999
+ local unit = getTriggerUnit()
2000
+ return ____exports.Unit:of(unit), retrieveAbility(
2001
+ unit,
2002
+ getSpellAbility(),
2003
+ getSpellAbilityId()
2004
+ )
2005
+ end
2006
+ ))
2007
+ Unit.onCast = dispatchAbility(__TS__New(
2008
+ ____exports.UnitTriggerEvent,
2009
+ EVENT_PLAYER_UNIT_SPELL_EFFECT,
2010
+ function()
2011
+ local unit = getTriggerUnit()
2012
+ return ____exports.Unit:of(unit), retrieveAbility(
2013
+ unit,
2014
+ getSpellAbility(),
2015
+ getSpellAbilityId()
2016
+ )
2017
+ end
2018
+ ))
2019
+ Unit.onPointCastPrepare = dispatchAbility(__TS__New(
2020
+ InitializingEvent,
2021
+ function(event)
2022
+ local function listener(unit, ability)
2023
+ local x = getSpellTargetX()
2024
+ local y = getSpellTargetY()
2025
+ if x ~= 0 or y ~= 0 then
2026
+ invoke(
2027
+ event,
2028
+ unit,
2029
+ ability,
2030
+ x,
2031
+ y
2032
+ )
2033
+ end
2034
+ end
2035
+ ____exports.Unit.onCastPrepare:addListener(listener)
2036
+ return listener
2037
+ end,
2038
+ function(listener)
2039
+ ____exports.Unit.onCastPrepare:removeListener(listener)
2040
+ end
2041
+ ))
2042
+ Unit.onUnitTargetCastPrepare = dispatchAbility(__TS__New(
2043
+ InitializingEvent,
2044
+ function(event)
2045
+ local function listener(unit, ability)
2046
+ local target = ____exports.Unit:of(getSpellTargetUnit())
2047
+ if target then
2048
+ invoke(event, unit, ability, target)
2049
+ end
2050
+ end
2051
+ ____exports.Unit.onCastPrepare:addListener(listener)
2052
+ return listener
2053
+ end,
2054
+ function(listener)
2055
+ ____exports.Unit.onCastPrepare:removeListener(listener)
2056
+ end
2057
+ ))
2058
+ Unit.onUnitTargetCast = dispatchAbility(__TS__New(
2059
+ InitializingEvent,
2060
+ function(event)
2061
+ local function listener(unit, ability)
2062
+ local target = ____exports.Unit:of(getSpellTargetUnit())
2063
+ if target then
2064
+ invoke(event, unit, ability, target)
2065
+ end
2066
+ end
2067
+ ____exports.Unit.onCast:addListener(listener)
2068
+ return listener
2069
+ end,
2070
+ function(listener)
2071
+ ____exports.Unit.onCast:removeListener(listener)
2072
+ end
2073
+ ))
2074
+ Unit.onPointCast = dispatchAbility(__TS__New(
2075
+ InitializingEvent,
2076
+ function(event)
2077
+ local function listener(unit, ability)
2078
+ if not (getSpellTargetUnit() or getSpellTargetItem() or getSpellTargetDestructable()) then
2079
+ local x = getSpellTargetX()
2080
+ local y = getSpellTargetY()
2081
+ if x ~= 0 or y ~= 0 then
2082
+ invoke(
2083
+ event,
2084
+ unit,
2085
+ ability,
2086
+ x,
2087
+ y
2088
+ )
2089
+ end
2090
+ end
2091
+ end
2092
+ ____exports.Unit.onCast:addListener(listener)
2093
+ return listener
2094
+ end,
2095
+ function(listener)
2096
+ ____exports.Unit.onCast:removeListener(listener)
2097
+ end
2098
+ ))
2099
+ Unit.onCastStart = dispatchAbility(__TS__New(
2100
+ ____exports.UnitTriggerEvent,
2101
+ EVENT_PLAYER_UNIT_SPELL_CAST,
2102
+ function()
2103
+ local unit = getTriggerUnit()
2104
+ return ____exports.Unit:of(unit), retrieveAbility(
2105
+ unit,
2106
+ getSpellAbility(),
2107
+ getSpellAbilityId()
2108
+ )
2109
+ end
2110
+ ))
2111
+ Unit.onUnitTargetCastStart = dispatchAbility(__TS__New(
2112
+ InitializingEvent,
2113
+ function(event)
2114
+ local function listener(unit, ability)
2115
+ local target = ____exports.Unit:of(getSpellTargetUnit())
2116
+ if target then
2117
+ invoke(event, unit, ability, target)
2118
+ end
2119
+ end
2120
+ ____exports.Unit.onCastStart:addListener(listener)
2121
+ return listener
2122
+ end,
2123
+ function(listener)
2124
+ ____exports.Unit.onCastStart:removeListener(listener)
2125
+ end
2126
+ ))
2127
+ Unit.onCastFinish = dispatchAbility(__TS__New(
2128
+ ____exports.UnitTriggerEvent,
2129
+ EVENT_PLAYER_UNIT_SPELL_FINISH,
2130
+ function()
2131
+ local unit = getTriggerUnit()
2132
+ return ____exports.Unit:of(unit), retrieveAbility(
2133
+ unit,
2134
+ getSpellAbility(),
2135
+ getSpellAbilityId()
2136
+ )
2137
+ end
2138
+ ))
2139
+ Unit.onCastStop = dispatchAbility(__TS__New(
2140
+ ____exports.UnitTriggerEvent,
2141
+ EVENT_PLAYER_UNIT_SPELL_ENDCAST,
2142
+ function()
2143
+ local unit = getTriggerUnit()
2144
+ return ____exports.Unit:of(unit), retrieveAbility(
2145
+ unit,
2146
+ getSpellAbility(),
2147
+ getSpellAbilityId()
2148
+ )
2149
+ end
2150
+ ))
2151
+ Unit.onImmediateOrder = dispatchId(__TS__New(
2152
+ ____exports.UnitTriggerEvent,
2153
+ EVENT_PLAYER_UNIT_ISSUED_ORDER,
2154
+ 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
2159
+ end
2160
+ return IgnoreEvent
2161
+ end
2162
+ ))
2163
+ Unit.onTargetOrder = dispatchId(__TS__New(
2164
+ ____exports.UnitTriggerEvent,
2165
+ EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER,
2166
+ function() return ____exports.Unit:of(GetOrderedUnit()), GetIssuedOrderId(), ____exports.Unit:of(GetOrderTargetUnit()) or Item:of(GetOrderTargetItem()) or checkNotNull(Destructable:of(GetOrderTargetDestructable())) end
2167
+ ))
2168
+ Unit.onPointOrder = dispatchId(__TS__New(
2169
+ ____exports.UnitTriggerEvent,
2170
+ EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,
2171
+ function() return ____exports.Unit:of(GetOrderedUnit()), GetIssuedOrderId(), GetOrderPointX(), GetOrderPointY() end
2172
+ ))
2173
+ Unit.autoAttackStartEvent = __TS__New(
2174
+ ____exports.UnitTriggerEvent,
2175
+ EVENT_PLAYER_UNIT_ATTACKED,
2176
+ function() return ____exports.Unit:of(GetAttacker()), ____exports.Unit:of(GetTriggerUnit()) end
2177
+ )
2178
+ Unit.onDamaging = (function()
2179
+ local event = __TS__New(Event)
2180
+ local invoke = Event.invoke
2181
+ local trigger = CreateTrigger()
2182
+ TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2183
+ TriggerAddCondition(
2184
+ trigger,
2185
+ Condition(warpack.wrapSafeCall(function()
2186
+ local source = ____exports.Unit:of(GetEventDamageSource())
2187
+ if source and source.typeId == dummyUnitId then
2188
+ source = nil
2189
+ end
2190
+ local target = BlzGetEventDamageTarget()
2191
+ local data = {
2192
+ amount = GetEventDamage(),
2193
+ attackType = BlzGetEventAttackType(),
2194
+ damageType = BlzGetEventDamageType(),
2195
+ weaponType = BlzGetEventWeaponType(),
2196
+ isAttack = BlzGetEventIsAttack()
2197
+ }
2198
+ 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])
2205
+ end
2206
+ if not data.isAttack or not source or not source._attackHandlers then
2207
+ invoke(
2208
+ event,
2209
+ source,
2210
+ ____exports.Unit:of(target),
2211
+ setmetatable(
2212
+ {},
2213
+ {
2214
+ __index = data,
2215
+ __newindex = function(self, key, value)
2216
+ damageSetters[key](value)
2217
+ data[key] = value
2218
+ end
2219
+ }
2220
+ )
2221
+ )
2222
+ return
2223
+ end
2224
+ BlzSetEventDamage(0)
2225
+ BlzSetEventAttackType(ATTACK_TYPE_NORMAL)
2226
+ BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2227
+ BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2228
+ local sourceOwner = source.owner.handle
2229
+ local targetOwner = GetOwningPlayer(target)
2230
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2231
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2232
+ Timer:run(function()
2233
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2234
+ end)
2235
+ end
2236
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2237
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2238
+ Timer:run(function()
2239
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2240
+ end)
2241
+ end
2242
+ for ____, ____value in ipairs(source._attackHandlers) do
2243
+ local condition = ____value[1]
2244
+ local action = ____value[2]
2245
+ if condition(
2246
+ source,
2247
+ ____exports.Unit:of(target),
2248
+ data
2249
+ ) then
2250
+ action(
2251
+ source,
2252
+ ____exports.Unit:of(target),
2253
+ setmetatable(
2254
+ {fire = function()
2255
+ UnitDamageTarget(
2256
+ source.handle,
2257
+ target,
2258
+ data.amount,
2259
+ true,
2260
+ true,
2261
+ data.attackType,
2262
+ data.damageType,
2263
+ data.weaponType
2264
+ )
2265
+ end},
2266
+ {__index = data, __newindex = data}
2267
+ )
2268
+ )
2269
+ return
2270
+ end
2271
+ end
2272
+ end))
2273
+ )
2274
+ return event
2275
+ end)()
2276
+ Unit.onDamage = __TS__New(
2277
+ InitializingEvent,
2278
+ function(event)
2279
+ local invoke = Event.invoke
2280
+ local trigger = CreateTrigger()
2281
+ TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2282
+ TriggerAddCondition(
2283
+ trigger,
2284
+ Condition(warpack.wrapSafeCall(function()
2285
+ local source = ____exports.Unit:of(GetEventDamageSource())
2286
+ if source and source.typeId == dummyUnitId then
2287
+ source = nil
2288
+ end
2289
+ local data = {
2290
+ amount = GetEventDamage(),
2291
+ attackType = BlzGetEventAttackType(),
2292
+ damageType = BlzGetEventDamageType(),
2293
+ weaponType = BlzGetEventWeaponType(),
2294
+ isAttack = BlzGetEventIsAttack(),
2295
+ preventDeath = damageEventPreventDeath
2296
+ }
2297
+ local evData = setmetatable(
2298
+ {},
2299
+ {
2300
+ __index = data,
2301
+ __newindex = function(self, key, value)
2302
+ damageSetters[key](value)
2303
+ data[key] = value
2304
+ end
2305
+ }
2306
+ )
2307
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2308
+ invoke(event, source, target, evData)
2309
+ if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2310
+ local bonusHealth = math.ceil(evData.amount)
2311
+ target[102] = (target[102] or 0) + bonusHealth
2312
+ BlzSetUnitMaxHP(
2313
+ target.handle,
2314
+ BlzGetUnitMaxHP(target.handle) + bonusHealth
2315
+ )
2316
+ SetWidgetLife(
2317
+ target.handle,
2318
+ GetWidgetLife(target.handle) + bonusHealth
2319
+ )
2320
+ Timer:run(function()
2321
+ warpack.safeCall(
2322
+ evData[0],
2323
+ table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2324
+ )
2325
+ target[102] = (target[102] or 0) - bonusHealth
2326
+ SetWidgetLife(
2327
+ target.handle,
2328
+ GetWidgetLife(target.handle) - bonusHealth
2329
+ )
2330
+ BlzSetUnitMaxHP(
2331
+ target.handle,
2332
+ BlzGetUnitMaxHP(target.handle) - bonusHealth
2333
+ )
2334
+ end)
2335
+ end
2336
+ end))
2337
+ )
2338
+ return trigger
2339
+ end,
2340
+ function(trigger)
2341
+ TriggerClearConditions(trigger)
2342
+ DestroyTrigger(trigger)
2343
+ end
2344
+ )
2345
+ Unit.onItemDrop = __TS__New(
2346
+ ____exports.UnitTriggerEvent,
2347
+ EVENT_PLAYER_UNIT_DROP_ITEM,
2348
+ function()
2349
+ local unit = getTriggerUnit()
2350
+ if getUnitTypeId(unit) ~= dummyUnitId then
2351
+ return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2352
+ end
2353
+ return IgnoreEvent
2354
+ end
2355
+ )
2356
+ Unit.onItemPickup = __TS__New(
2357
+ ____exports.UnitTriggerEvent,
2358
+ EVENT_PLAYER_UNIT_PICKUP_ITEM,
2359
+ function()
2360
+ local unit = getTriggerUnit()
2361
+ if getUnitTypeId(unit) ~= dummyUnitId then
2362
+ return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2363
+ end
2364
+ return IgnoreEvent
2365
+ end
2366
+ )
2367
+ Unit.onItemUse = __TS__New(
2368
+ ____exports.UnitTriggerEvent,
2369
+ EVENT_PLAYER_UNIT_USE_ITEM,
2370
+ function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2371
+ )
2372
+ __TS__ObjectDefineProperty(
2373
+ Unit,
2374
+ "onCreate",
2375
+ {get = function(self)
2376
+ local onCreate = dispatch(
2377
+ ____exports.Unit.onCreateEvent,
2378
+ function(unit) return unit.typeId end,
2379
+ function(unit) return unit end
2380
+ )
2381
+ rawset(self, "onCreate", onCreate)
2382
+ return onCreate
2383
+ end}
2384
+ )
2385
+ __TS__ObjectDefineProperty(
2386
+ Unit,
2387
+ "destroyEvent",
2388
+ {get = function(self)
2389
+ local destroyEvent = dispatch(
2390
+ ____exports.Unit.onDestroyEvent,
2391
+ function(unit) return unit.typeId end,
2392
+ function(unit) return unit end
2393
+ )
2394
+ rawset(self, "destroyEvent", destroyEvent)
2395
+ return destroyEvent
2396
+ end}
2397
+ );
2398
+ (function(self)
2399
+ local leaveAbilityIds = postcompile(function()
2400
+ local parentLeaveAbilityIds = __TS__New(Set, {"Adef", "Amdf", "AEim", "ACim"})
2401
+ local leaveAbilityIds = {__TS__Spread(parentLeaveAbilityIds:values())}
2402
+ if currentMap then
2403
+ for id, ability in pairs(currentMap.objects.ability.all) do
2404
+ if ability.parentId and parentLeaveAbilityIds:has(ability.parentId) then
2405
+ leaveAbilityIds[#leaveAbilityIds + 1] = id
2406
+ end
2407
+ end
2408
+ end
2409
+ return __TS__ArrayMap(
2410
+ leaveAbilityIds,
2411
+ function(____, id) return fourCC(id) end
2412
+ )
2413
+ end)
2414
+ for ____, leaveOrderId in ipairs({
2415
+ orderId("undefend"),
2416
+ orderId("magicundefense"),
2417
+ orderId("unimmolation")
2418
+ }) do
2419
+ ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2420
+ local handle = unit.handle
2421
+ for i = 1, #leaveAbilityIds do
2422
+ if getUnitAbilityLevel(handle, leaveAbilityIds[i]) ~= 0 then
2423
+ return
2424
+ end
2425
+ end
2426
+ unit:destroy()
2427
+ end)
2428
+ end
2429
+ end)(Unit)
2430
+ return ____exports