@firestone-hs/simulate-bgs-battle 1.1.486 → 1.1.488

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 (286) hide show
  1. package/dist/bgs-player-entity.d.ts +2 -1
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/board-entity.d.ts +1 -0
  4. package/dist/board-entity.js.map +1 -1
  5. package/dist/cards/card.interface.d.ts +12 -0
  6. package/dist/cards/card.interface.js +3 -0
  7. package/dist/cards/card.interface.js.map +1 -0
  8. package/dist/cards/cards-data.js +16 -3
  9. package/dist/cards/cards-data.js.map +1 -1
  10. package/dist/cards/impl/anomaly/anomalous-twin.d.ts +8 -0
  11. package/dist/cards/impl/anomaly/anomalous-twin.js +24 -0
  12. package/dist/cards/impl/anomaly/anomalous-twin.js.map +1 -0
  13. package/dist/cards/impl/anomaly/blessed-or-blighted.d.ts +5 -0
  14. package/dist/cards/impl/anomaly/blessed-or-blighted.js +16 -0
  15. package/dist/cards/impl/anomaly/blessed-or-blighted.js.map +1 -0
  16. package/dist/cards/impl/hero-power/aim-high.d.ts +5 -0
  17. package/dist/cards/impl/hero-power/aim-high.js +18 -0
  18. package/dist/cards/impl/hero-power/aim-high.js.map +1 -0
  19. package/dist/cards/impl/hero-power/aim-left.d.ts +5 -0
  20. package/dist/cards/impl/hero-power/aim-left.js +16 -0
  21. package/dist/cards/impl/hero-power/aim-left.js.map +1 -0
  22. package/dist/cards/impl/hero-power/aim-low.d.ts +5 -0
  23. package/dist/cards/impl/hero-power/aim-low.js +18 -0
  24. package/dist/cards/impl/hero-power/aim-low.js.map +1 -0
  25. package/dist/cards/impl/hero-power/aim-right.d.ts +5 -0
  26. package/dist/cards/impl/hero-power/aim-right.js +16 -0
  27. package/dist/cards/impl/hero-power/aim-right.js.map +1 -0
  28. package/dist/cards/impl/hero-power/all-will-burn.d.ts +5 -0
  29. package/dist/cards/impl/hero-power/all-will-burn.js +18 -0
  30. package/dist/cards/impl/hero-power/all-will-burn.js.map +1 -0
  31. package/dist/cards/impl/hero-power/earth-invocation.d.ts +5 -0
  32. package/dist/cards/impl/hero-power/earth-invocation.js +13 -0
  33. package/dist/cards/impl/hero-power/earth-invocation.js.map +1 -0
  34. package/dist/cards/impl/hero-power/embrace-your-rage.d.ts +8 -0
  35. package/dist/cards/impl/hero-power/embrace-your-rage.js +26 -0
  36. package/dist/cards/impl/hero-power/embrace-your-rage.js.map +1 -0
  37. package/dist/cards/impl/hero-power/fire-invocation.d.ts +5 -0
  38. package/dist/cards/impl/hero-power/fire-invocation.js +13 -0
  39. package/dist/cards/impl/hero-power/fire-invocation.js.map +1 -0
  40. package/dist/cards/impl/hero-power/fragrant-phylactery.d.ts +8 -0
  41. package/dist/cards/impl/hero-power/fragrant-phylactery.js +25 -0
  42. package/dist/cards/impl/hero-power/fragrant-phylactery.js.map +1 -0
  43. package/dist/cards/impl/hero-power/glorious-gloop.d.ts +5 -0
  44. package/dist/cards/impl/hero-power/glorious-gloop.js +40 -0
  45. package/dist/cards/impl/hero-power/glorious-gloop.js.map +1 -0
  46. package/dist/cards/impl/hero-power/lightning-invocation.d.ts +5 -0
  47. package/dist/cards/impl/hero-power/lightning-invocation.js +13 -0
  48. package/dist/cards/impl/hero-power/lightning-invocation.js.map +1 -0
  49. package/dist/cards/impl/hero-power/rapid-reanimation.d.ts +8 -0
  50. package/dist/cards/impl/hero-power/rapid-reanimation.js +29 -0
  51. package/dist/cards/impl/hero-power/rapid-reanimation.js.map +1 -0
  52. package/dist/cards/impl/hero-power/reborn-rites.d.ts +5 -0
  53. package/dist/cards/impl/hero-power/reborn-rites.js +18 -0
  54. package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -0
  55. package/dist/cards/impl/hero-power/swatting-insects.d.ts +5 -0
  56. package/dist/cards/impl/hero-power/swatting-insects.js +21 -0
  57. package/dist/cards/impl/hero-power/swatting-insects.js.map +1 -0
  58. package/dist/cards/impl/hero-power/tentacular.d.ts +8 -0
  59. package/dist/cards/impl/hero-power/tentacular.js +10 -0
  60. package/dist/cards/impl/hero-power/tentacular.js.map +1 -0
  61. package/dist/cards/impl/hero-power/water-invocation.d.ts +5 -0
  62. package/dist/cards/impl/hero-power/water-invocation.js +13 -0
  63. package/dist/cards/impl/hero-power/water-invocation.js.map +1 -0
  64. package/dist/cards/impl/hero-power/wax-warband.d.ts +5 -0
  65. package/dist/cards/impl/hero-power/wax-warband.js +56 -0
  66. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -0
  67. package/dist/cards/impl/minion/amber-guardian.d.ts +5 -0
  68. package/dist/cards/impl/minion/amber-guardian.js +31 -0
  69. package/dist/cards/impl/minion/amber-guardian.js.map +1 -0
  70. package/dist/cards/impl/minion/audacious-anchor.d.ts +5 -0
  71. package/dist/cards/impl/minion/audacious-anchor.js +25 -0
  72. package/dist/cards/impl/minion/audacious-anchor.js.map +1 -0
  73. package/dist/cards/impl/minion/carbonic-copy.d.ts +5 -0
  74. package/dist/cards/impl/minion/carbonic-copy.js +24 -0
  75. package/dist/cards/impl/minion/carbonic-copy.js.map +1 -0
  76. package/dist/cards/impl/minion/choral-mrrrglr.d.ts +5 -0
  77. package/dist/cards/impl/minion/choral-mrrrglr.js +14 -0
  78. package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -0
  79. package/dist/cards/impl/minion/corrupted-myrmidon.d.ts +5 -0
  80. package/dist/cards/impl/minion/corrupted-myrmidon.js +13 -0
  81. package/dist/cards/impl/minion/corrupted-myrmidon.js.map +1 -0
  82. package/dist/cards/impl/minion/crabby.d.ts +5 -0
  83. package/dist/cards/impl/minion/crabby.js +18 -0
  84. package/dist/cards/impl/minion/crabby.js.map +1 -0
  85. package/dist/cards/impl/minion/diremuck-forager.d.ts +5 -0
  86. package/dist/cards/impl/minion/diremuck-forager.js +32 -0
  87. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -0
  88. package/dist/cards/impl/minion/elder-taggawag.d.ts +5 -0
  89. package/dist/cards/impl/minion/elder-taggawag.js +19 -0
  90. package/dist/cards/impl/minion/elder-taggawag.js.map +1 -0
  91. package/dist/cards/impl/minion/hawkstrider-herald.d.ts +5 -0
  92. package/dist/cards/impl/minion/hawkstrider-herald.js +27 -0
  93. package/dist/cards/impl/minion/hawkstrider-herald.js.map +1 -0
  94. package/dist/cards/impl/minion/hoarding-hatespawn.d.ts +5 -0
  95. package/dist/cards/impl/minion/hoarding-hatespawn.js +22 -0
  96. package/dist/cards/impl/minion/hoarding-hatespawn.js.map +1 -0
  97. package/dist/cards/impl/minion/humming-bird.d.ts +5 -0
  98. package/dist/cards/impl/minion/humming-bird.js +15 -0
  99. package/dist/cards/impl/minion/humming-bird.js.map +1 -0
  100. package/dist/cards/impl/minion/interrogator-whitemane.d.ts +5 -0
  101. package/dist/cards/impl/minion/interrogator-whitemane.js +33 -0
  102. package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -0
  103. package/dist/cards/impl/minion/irate-rooster.d.ts +5 -0
  104. package/dist/cards/impl/minion/irate-rooster.js +20 -0
  105. package/dist/cards/impl/minion/irate-rooster.js.map +1 -0
  106. package/dist/cards/impl/minion/mantid-queen.d.ts +5 -0
  107. package/dist/cards/impl/minion/mantid-queen.js +52 -0
  108. package/dist/cards/impl/minion/mantid-queen.js.map +1 -0
  109. package/dist/cards/impl/minion/misfit-dragonling.d.ts +5 -0
  110. package/dist/cards/impl/minion/misfit-dragonling.js +15 -0
  111. package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -0
  112. package/dist/cards/impl/minion/piloted-whirl-o-tron.d.ts +5 -0
  113. package/dist/cards/impl/minion/piloted-whirl-o-tron.js +13 -0
  114. package/dist/cards/impl/minion/piloted-whirl-o-tron.js.map +1 -0
  115. package/dist/cards/impl/minion/prized-promo-drake.d.ts +5 -0
  116. package/dist/cards/impl/minion/prized-promo-drake.js +22 -0
  117. package/dist/cards/impl/minion/prized-promo-drake.js.map +1 -0
  118. package/dist/cards/impl/minion/red-whelp.d.ts +5 -0
  119. package/dist/cards/impl/minion/red-whelp.js +17 -0
  120. package/dist/cards/impl/minion/red-whelp.js.map +1 -0
  121. package/dist/cards/impl/minion/sanctum-rester.d.ts +5 -0
  122. package/dist/cards/impl/minion/sanctum-rester.js +20 -0
  123. package/dist/cards/impl/minion/sanctum-rester.js.map +1 -0
  124. package/dist/cards/impl/minion/sandy.d.ts +5 -0
  125. package/dist/cards/impl/minion/sandy.js +23 -0
  126. package/dist/cards/impl/minion/sandy.js.map +1 -0
  127. package/dist/cards/impl/minion/sky-pirate-flagbearer.d.ts +5 -0
  128. package/dist/cards/impl/minion/sky-pirate-flagbearer.js +24 -0
  129. package/dist/cards/impl/minion/sky-pirate-flagbearer.js.map +1 -0
  130. package/dist/cards/impl/minion/soulsplitter.d.ts +5 -0
  131. package/dist/cards/impl/minion/soulsplitter.js +23 -0
  132. package/dist/cards/impl/minion/soulsplitter.js.map +1 -0
  133. package/dist/cards/impl/minion/sun-screener.d.ts +5 -0
  134. package/dist/cards/impl/minion/sun-screener.js +15 -0
  135. package/dist/cards/impl/minion/sun-screener.js.map +1 -0
  136. package/dist/cards/impl/minion/the-uninvited-guest.d.ts +5 -0
  137. package/dist/cards/impl/minion/the-uninvited-guest.js +24 -0
  138. package/dist/cards/impl/minion/the-uninvited-guest.js.map +1 -0
  139. package/dist/cards/impl/minion/thousandth-paper-drake.d.ts +5 -0
  140. package/dist/cards/impl/minion/thousandth-paper-drake.js +24 -0
  141. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -0
  142. package/dist/cards/impl/minion/vaelastrasz.d.ts +5 -0
  143. package/dist/cards/impl/minion/vaelastrasz.js +17 -0
  144. package/dist/cards/impl/minion/vaelastrasz.js.map +1 -0
  145. package/dist/cards/impl/minion/yulon-fortune-granter.d.ts +5 -0
  146. package/dist/cards/impl/minion/yulon-fortune-granter.js +26 -0
  147. package/dist/cards/impl/minion/yulon-fortune-granter.js.map +1 -0
  148. package/dist/cards/impl/quest-reward/evil-twin.d.ts +5 -0
  149. package/dist/cards/impl/quest-reward/evil-twin.js +32 -0
  150. package/dist/cards/impl/quest-reward/evil-twin.js.map +1 -0
  151. package/dist/cards/impl/quest-reward/staff-of-origination.d.ts +5 -0
  152. package/dist/cards/impl/quest-reward/staff-of-origination.js +14 -0
  153. package/dist/cards/impl/quest-reward/staff-of-origination.js.map +1 -0
  154. package/dist/cards/impl/quest-reward/stolen-gold.d.ts +5 -0
  155. package/dist/cards/impl/quest-reward/stolen-gold.js +16 -0
  156. package/dist/cards/impl/quest-reward/stolen-gold.js.map +1 -0
  157. package/dist/cards/impl/trinket/artisanal-urn.d.ts +5 -0
  158. package/dist/cards/impl/trinket/artisanal-urn.js +13 -0
  159. package/dist/cards/impl/trinket/artisanal-urn.js.map +1 -0
  160. package/dist/cards/impl/trinket/automaton-portrait.d.ts +5 -0
  161. package/dist/cards/impl/trinket/automaton-portrait.js +15 -0
  162. package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -0
  163. package/dist/cards/impl/trinket/bronze-timepiece.d.ts +5 -0
  164. package/dist/cards/impl/trinket/bronze-timepiece.js +17 -0
  165. package/dist/cards/impl/trinket/bronze-timepiece.js.map +1 -0
  166. package/dist/cards/impl/trinket/emerald-dreamcatcher.d.ts +5 -0
  167. package/dist/cards/impl/trinket/emerald-dreamcatcher.js +18 -0
  168. package/dist/cards/impl/trinket/emerald-dreamcatcher.js.map +1 -0
  169. package/dist/cards/impl/trinket/eternal-portrait.d.ts +5 -0
  170. package/dist/cards/impl/trinket/eternal-portrait.js +19 -0
  171. package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -0
  172. package/dist/cards/impl/trinket/fishy-sticker.d.ts +5 -0
  173. package/dist/cards/impl/trinket/fishy-sticker.js +28 -0
  174. package/dist/cards/impl/trinket/fishy-sticker.js.map +1 -0
  175. package/dist/cards/impl/trinket/hoggy-bank.d.ts +5 -0
  176. package/dist/cards/impl/trinket/hoggy-bank.js +23 -0
  177. package/dist/cards/impl/trinket/hoggy-bank.js.map +1 -0
  178. package/dist/cards/impl/trinket/holly-mallet.d.ts +5 -0
  179. package/dist/cards/impl/trinket/holly-mallet.js +18 -0
  180. package/dist/cards/impl/trinket/holly-mallet.js.map +1 -0
  181. package/dist/cards/impl/trinket/ironforge-anvil.d.ts +5 -0
  182. package/dist/cards/impl/trinket/ironforge-anvil.js +23 -0
  183. package/dist/cards/impl/trinket/ironforge-anvil.js.map +1 -0
  184. package/dist/cards/impl/trinket/jarred-frostling.d.ts +5 -0
  185. package/dist/cards/impl/trinket/jarred-frostling.js +27 -0
  186. package/dist/cards/impl/trinket/jarred-frostling.js.map +1 -0
  187. package/dist/cards/impl/trinket/karazhan-chess-set.d.ts +5 -0
  188. package/dist/cards/impl/trinket/karazhan-chess-set.js +40 -0
  189. package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -0
  190. package/dist/cards/impl/trinket/rivendare-portrait.d.ts +5 -0
  191. package/dist/cards/impl/trinket/rivendare-portrait.js +21 -0
  192. package/dist/cards/impl/trinket/rivendare-portrait.js.map +1 -0
  193. package/dist/cards/impl/trinket/rusty-trident.d.ts +5 -0
  194. package/dist/cards/impl/trinket/rusty-trident.js +23 -0
  195. package/dist/cards/impl/trinket/rusty-trident.js.map +1 -0
  196. package/dist/cards/impl/trinket/ship-in-a-bottle.d.ts +5 -0
  197. package/dist/cards/impl/trinket/ship-in-a-bottle.js +20 -0
  198. package/dist/cards/impl/trinket/ship-in-a-bottle.js.map +1 -0
  199. package/dist/cards/impl/trinket/summoning-sphere.d.ts +5 -0
  200. package/dist/cards/impl/trinket/summoning-sphere.js +31 -0
  201. package/dist/cards/impl/trinket/summoning-sphere.js.map +1 -0
  202. package/dist/cards/impl/trinket/tinyfin-onesie.d.ts +5 -0
  203. package/dist/cards/impl/trinket/tinyfin-onesie.js +15 -0
  204. package/dist/cards/impl/trinket/tinyfin-onesie.js.map +1 -0
  205. package/dist/cards/impl/trinket/training-certificate.d.ts +5 -0
  206. package/dist/cards/impl/trinket/training-certificate.js +21 -0
  207. package/dist/cards/impl/trinket/training-certificate.js.map +1 -0
  208. package/dist/cards/impl/trinket/valorous-medaillion.d.ts +5 -0
  209. package/dist/cards/impl/trinket/valorous-medaillion.js +12 -0
  210. package/dist/cards/impl/trinket/valorous-medaillion.js.map +1 -0
  211. package/dist/services/utils.d.ts +1 -0
  212. package/dist/services/utils.js +13 -1
  213. package/dist/services/utils.js.map +1 -1
  214. package/dist/simulation/add-minion-to-board.js +18 -23
  215. package/dist/simulation/add-minion-to-board.js.map +1 -1
  216. package/dist/simulation/attack.js +14 -4
  217. package/dist/simulation/attack.js.map +1 -1
  218. package/dist/simulation/auras.js +0 -2
  219. package/dist/simulation/auras.js.map +1 -1
  220. package/dist/simulation/avenge.js +24 -4
  221. package/dist/simulation/avenge.js.map +1 -1
  222. package/dist/simulation/battlecries.js +21 -5
  223. package/dist/simulation/battlecries.js.map +1 -1
  224. package/dist/simulation/blood-gems.js +8 -0
  225. package/dist/simulation/blood-gems.js.map +1 -1
  226. package/dist/simulation/deathrattle-effects.js +7 -1
  227. package/dist/simulation/deathrattle-effects.js.map +1 -1
  228. package/dist/simulation/deathrattle-on-trigger.js +5 -0
  229. package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
  230. package/dist/simulation/discover.d.ts +4 -0
  231. package/dist/simulation/discover.js +32 -0
  232. package/dist/simulation/discover.js.map +1 -0
  233. package/dist/simulation/magnetize.js +2 -1
  234. package/dist/simulation/magnetize.js.map +1 -1
  235. package/dist/simulation/minion-death.d.ts +1 -1
  236. package/dist/simulation/minion-death.js +8 -8
  237. package/dist/simulation/minion-death.js.map +1 -1
  238. package/dist/simulation/remove-minion-from-board.js +0 -10
  239. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  240. package/dist/simulation/simulator.js +1 -1
  241. package/dist/simulation/simulator.js.map +1 -1
  242. package/dist/simulation/start-of-combat/phases.d.ts +1 -0
  243. package/dist/simulation/start-of-combat/phases.js +3 -0
  244. package/dist/simulation/start-of-combat/phases.js.map +1 -0
  245. package/dist/simulation/start-of-combat/soc-action-processor.d.ts +4 -0
  246. package/dist/simulation/start-of-combat/soc-action-processor.js +286 -0
  247. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -0
  248. package/dist/simulation/start-of-combat/soc-anomalies.d.ts +4 -0
  249. package/dist/simulation/start-of-combat/soc-anomalies.js +39 -0
  250. package/dist/simulation/start-of-combat/soc-anomalies.js.map +1 -0
  251. package/dist/simulation/start-of-combat/soc-hero-power.d.ts +5 -0
  252. package/dist/simulation/start-of-combat/soc-hero-power.js +77 -0
  253. package/dist/simulation/start-of-combat/soc-hero-power.js.map +1 -0
  254. package/dist/simulation/start-of-combat/soc-illidan-hero-power.d.ts +4 -0
  255. package/dist/simulation/start-of-combat/soc-illidan-hero-power.js +55 -0
  256. package/dist/simulation/start-of-combat/soc-illidan-hero-power.js.map +1 -0
  257. package/dist/simulation/start-of-combat/soc-minion.d.ts +6 -0
  258. package/dist/simulation/start-of-combat/soc-minion.js +68 -0
  259. package/dist/simulation/start-of-combat/soc-minion.js.map +1 -0
  260. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.d.ts +4 -0
  261. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.js +72 -0
  262. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.js.map +1 -0
  263. package/dist/simulation/start-of-combat/soc-quest-reward.d.ts +4 -0
  264. package/dist/simulation/start-of-combat/soc-quest-reward.js +60 -0
  265. package/dist/simulation/start-of-combat/soc-quest-reward.js.map +1 -0
  266. package/dist/simulation/start-of-combat/soc-secret.d.ts +4 -0
  267. package/dist/simulation/start-of-combat/soc-secret.js +54 -0
  268. package/dist/simulation/start-of-combat/soc-secret.js.map +1 -0
  269. package/dist/simulation/start-of-combat/soc-trinket.d.ts +4 -0
  270. package/dist/simulation/start-of-combat/soc-trinket.js +60 -0
  271. package/dist/simulation/start-of-combat/soc-trinket.js.map +1 -0
  272. package/dist/simulation/start-of-combat/start-of-combat-input.d.ts +14 -0
  273. package/dist/simulation/start-of-combat/start-of-combat-input.js +3 -0
  274. package/dist/simulation/start-of-combat/start-of-combat-input.js.map +1 -0
  275. package/dist/simulation/start-of-combat/start-of-combat.d.ts +4 -0
  276. package/dist/simulation/start-of-combat/start-of-combat.js +68 -0
  277. package/dist/simulation/start-of-combat/start-of-combat.js.map +1 -0
  278. package/dist/simulation/summon-when-space.js +5 -1
  279. package/dist/simulation/summon-when-space.js.map +1 -1
  280. package/dist/temp-card-ids.d.ts +2 -0
  281. package/dist/temp-card-ids.js +3 -0
  282. package/dist/temp-card-ids.js.map +1 -0
  283. package/package.json +3 -3
  284. package/dist/simulation/start-of-combat.d.ts +0 -8
  285. package/dist/simulation/start-of-combat.js +0 -1167
  286. package/dist/simulation/start-of-combat.js.map +0 -1
@@ -1,1167 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.performStartOfCombatMinionsForPlayer = exports.getHeroPowerForHero = exports.handleStartOfCombatHeroPowers = exports.handleIllidanHeroPowers = exports.handleStartOfCombat = void 0;
4
- const reference_data_1 = require("@firestone-hs/reference-data");
5
- const divine_shield_1 = require("../divine-shield");
6
- const utils_1 = require("../services/utils");
7
- const utils_2 = require("../utils");
8
- const add_minion_to_board_1 = require("./add-minion-to-board");
9
- const attack_1 = require("./attack");
10
- const cards_in_hand_1 = require("./cards-in-hand");
11
- const deathrattle_effects_1 = require("./deathrattle-effects");
12
- const deathrattle_orchestration_1 = require("./deathrattle-orchestration");
13
- const deathrattle_spawns_1 = require("./deathrattle-spawns");
14
- const spawns_1 = require("./spawns");
15
- const stats_1 = require("./stats");
16
- const summon_when_space_1 = require("./summon-when-space");
17
- const golden_1 = require("./utils/golden");
18
- const handleStartOfCombat = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
19
- const shouldRecomputeCurrentAttacker = true;
20
- if (shouldRecomputeCurrentAttacker) {
21
- currentAttacker =
22
- playerBoard.length > opponentBoard.length
23
- ? 0
24
- : opponentBoard.length > playerBoard.length
25
- ? 1
26
- : Math.round(Math.random());
27
- }
28
- currentAttacker = handleStartOfCombatQuestRewards(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
29
- currentAttacker = handleStartOfCombatAnomalies(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
30
- currentAttacker = handlePreCombatHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
31
- const playerBoardBefore = playerBoard.map((e) => ({ ...e }));
32
- const opponentBoardBefore = opponentBoard.map((e) => ({ ...e }));
33
- currentAttacker = (0, exports.handleIllidanHeroPowers)(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
34
- currentAttacker = (0, exports.handleStartOfCombatHeroPowers)(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
35
- currentAttacker = handleStartOfCombatSpells(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
36
- handleStartOfCombatMinions(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, playerBoardBefore, opponentBoardBefore, gameState);
37
- playerEntity.startOfCombatDone = true;
38
- opponentEntity.startOfCombatDone = true;
39
- (0, stats_1.applyAfterStatsUpdate)(gameState);
40
- return currentAttacker;
41
- };
42
- exports.handleStartOfCombat = handleStartOfCombat;
43
- const handlePreCombatHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
44
- const initialPlayerBoardSize0 = playerBoard.length;
45
- const initialOpponentBoardSize0 = opponentBoard.length;
46
- const initialCurrentAttacker = currentAttacker;
47
- if (Math.random() < 0.5) {
48
- currentAttacker = handlePreCombatHeroPowersForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
49
- currentAttacker = handlePreCombatHeroPowersForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
50
- }
51
- else {
52
- currentAttacker = handlePreCombatHeroPowersForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
53
- currentAttacker = handlePreCombatHeroPowersForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
54
- }
55
- const initialPlayerBoardSize = playerBoard.length;
56
- const initialOpponentBoardSize = opponentBoard.length;
57
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
58
- if (playerBoard.length !== initialPlayerBoardSize || opponentBoard.length !== initialOpponentBoardSize) {
59
- currentAttacker =
60
- playerBoard.length > opponentBoard.length
61
- ? 0
62
- : opponentBoard.length > playerBoard.length
63
- ? 1
64
- : Math.round(Math.random());
65
- }
66
- return currentAttacker;
67
- };
68
- const handlePreCombatHeroPowersForPlayer = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, friendly, gameState) => {
69
- if (playerEntity.startOfCombatDone || playerEntity.hpLeft <= 0) {
70
- return currentAttacker;
71
- }
72
- let shouldRecomputeCurrentAttacker = false;
73
- const playerHeroPowerId = playerEntity.heroPowerId || (0, exports.getHeroPowerForHero)(playerEntity.cardId);
74
- if (playerHeroPowerId === "TB_BaconShop_HP_086" && playerBoard.length > 0) {
75
- handleAlakirForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
76
- }
77
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_001p_t1") {
78
- (0, deathrattle_effects_1.applyEarthInvocationEnchantment)(playerBoard, null, playerEntity, gameState);
79
- }
80
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_001p_t3") {
81
- (0, deathrattle_effects_1.applyWaterInvocationEnchantment)(playerBoard, playerEntity, null, playerEntity, gameState);
82
- }
83
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_001p_t2") {
84
- (0, deathrattle_effects_1.applyFireInvocationEnchantment)(playerBoard, playerEntity, null, playerEntity, gameState);
85
- }
86
- else if (playerHeroPowerId === "TB_BaconShop_HP_061") {
87
- applyAllWillBurn(playerBoard, playerEntity, opponentBoard, opponentEntity, playerEntity, gameState);
88
- }
89
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG20_HERO_282p") {
90
- handleTamsinForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
91
- shouldRecomputeCurrentAttacker = true;
92
- }
93
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "TB_BaconShop_HP_103") {
94
- handleEmbraceYourRageForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
95
- shouldRecomputeCurrentAttacker = true;
96
- }
97
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG23_HERO_201p") {
98
- playerEntity.heroPowerActivated = false;
99
- shouldRecomputeCurrentAttacker = true;
100
- }
101
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "TB_BaconShop_HP_024") {
102
- handleRebornRitesForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
103
- }
104
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG25_HERO_103p") {
105
- shouldRecomputeCurrentAttacker = handleTeronForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
106
- }
107
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "TB_BaconShop_HP_037a") {
108
- handleWaxWarbandForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
109
- }
110
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_001p_t4") {
111
- (0, deathrattle_effects_1.applyLightningInvocationEnchantment)(playerBoard, playerEntity, null, opponentBoard, opponentEntity, gameState);
112
- }
113
- else if (playerEntity.heroPowerUsed &&
114
- playerHeroPowerId === "BGDUO_HERO_101p") {
115
- applyGloriousGloop(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
116
- }
117
- (0, attack_1.processMinionDeath)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
118
- if (shouldRecomputeCurrentAttacker) {
119
- currentAttacker =
120
- playerBoard.length > opponentBoard.length
121
- ? friendly
122
- ? 0
123
- : 1
124
- : opponentBoard.length > playerBoard.length
125
- ? friendly
126
- ? 1
127
- : 0
128
- : Math.round(Math.random());
129
- }
130
- return currentAttacker;
131
- };
132
- const handleIllidanHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
133
- if (Math.random() < 0.5) {
134
- currentAttacker = handlePlayerIllidanHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
135
- currentAttacker = handlePlayerIllidanHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
136
- }
137
- else {
138
- currentAttacker = handlePlayerIllidanHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
139
- currentAttacker = handlePlayerIllidanHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
140
- }
141
- (0, attack_1.processMinionDeath)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
142
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
143
- return currentAttacker;
144
- };
145
- exports.handleIllidanHeroPowers = handleIllidanHeroPowers;
146
- const handleStartOfCombatMinions = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, playerBoardBefore, opponentBoardBefore, gameState) => {
147
- let attackerForStart = Math.random() < 0.5 ? 0 : 1;
148
- const playerAttackers = [...playerBoard];
149
- const opponentAttackers = [...opponentBoard];
150
- while (playerAttackers.length > 0 || opponentAttackers.length > 0) {
151
- let shouldUpdateNextPlayer = false;
152
- if (attackerForStart === 0 && playerAttackers.length > 0) {
153
- const attacker = playerAttackers.splice(0, 1)[0];
154
- if (attacker.health <= 0 || attacker.definitelyDead) {
155
- continue;
156
- }
157
- shouldUpdateNextPlayer = (0, exports.performStartOfCombatMinionsForPlayer)(attacker, playerBoard, playerEntity, opponentBoard, opponentEntity, playerBoardBefore, opponentBoardBefore, gameState);
158
- }
159
- else if (attackerForStart === 0 && playerAttackers.length === 0) {
160
- shouldUpdateNextPlayer = true;
161
- }
162
- else if (attackerForStart === 1 && opponentAttackers.length > 0) {
163
- const attacker = opponentAttackers.splice(0, 1)[0];
164
- if (attacker.health <= 0 || attacker.definitelyDead) {
165
- continue;
166
- }
167
- shouldUpdateNextPlayer = (0, exports.performStartOfCombatMinionsForPlayer)(attacker, opponentBoard, opponentEntity, playerBoard, playerEntity, opponentBoardBefore, playerBoardBefore, gameState);
168
- }
169
- else if (attackerForStart === 1 && opponentAttackers.length === 0) {
170
- shouldUpdateNextPlayer = true;
171
- }
172
- if (shouldUpdateNextPlayer) {
173
- attackerForStart = (attackerForStart + 1) % 2;
174
- }
175
- }
176
- return currentAttacker;
177
- };
178
- const handleStartOfCombatQuestRewards = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
179
- if (Math.random() < 0.5) {
180
- currentAttacker = handleStartOfCombatQuestRewardsForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, true);
181
- currentAttacker = handleStartOfCombatQuestRewardsForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, gameState, false);
182
- }
183
- else {
184
- currentAttacker = handleStartOfCombatQuestRewardsForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, gameState, false);
185
- currentAttacker = handleStartOfCombatQuestRewardsForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, true);
186
- }
187
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
188
- return currentAttacker;
189
- };
190
- const handleStartOfCombatSpells = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
191
- if (Math.random() < 0.5) {
192
- currentAttacker = handleStartOfCombatSpellsForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, true);
193
- currentAttacker = handleStartOfCombatSpellsForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, gameState, false);
194
- }
195
- else {
196
- currentAttacker = handleStartOfCombatSpellsForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, gameState, false);
197
- currentAttacker = handleStartOfCombatSpellsForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, true);
198
- }
199
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
200
- return currentAttacker;
201
- };
202
- const handleStartOfCombatAnomalies = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
203
- currentAttacker = handleStartOfCombatAnomaliesForPlayer(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState);
204
- currentAttacker = handleStartOfCombatAnomaliesForPlayer(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, gameState);
205
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
206
- return currentAttacker;
207
- };
208
- const handleStartOfCombatQuestRewardsForPlayer = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, playerIsFriendly) => {
209
- if (playerEntity.startOfCombatDone) {
210
- return currentAttacker;
211
- }
212
- for (const reward of playerEntity.questRewards) {
213
- switch (reward) {
214
- case "BG24_Reward_111":
215
- if (!!playerBoard.length && playerBoard.length < 7) {
216
- const highestHealthMinion = [...playerBoard].sort((a, b) => b.health - a.health)[0];
217
- const copy = {
218
- ...highestHealthMinion,
219
- lastAffectedByEntity: null,
220
- };
221
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, highestHealthMinion.friendly, true, false, false, copy);
222
- const indexFromRight = playerBoard.length - (playerBoard.indexOf(highestHealthMinion) + 1);
223
- (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, highestHealthMinion, indexFromRight, opponentBoard, opponentEntity, gameState);
224
- gameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, null, null);
225
- currentAttacker =
226
- playerBoard.length > opponentBoard.length
227
- ? playerIsFriendly
228
- ? 0
229
- : 1
230
- : opponentBoard.length > playerBoard.length
231
- ? playerIsFriendly
232
- ? 1
233
- : 0
234
- : Math.round(Math.random());
235
- }
236
- break;
237
- case "BG24_Reward_312":
238
- playerBoard.forEach((entity) => {
239
- (0, stats_1.modifyStats)(entity, 15, 15, playerBoard, playerEntity, gameState);
240
- gameState.spectator.registerPowerTarget(playerEntity, entity, playerBoard, null, null);
241
- });
242
- break;
243
- case "BG24_Reward_109":
244
- if (playerBoard.length > 0) {
245
- (0, golden_1.makeMinionGolden)(playerBoard[0], playerEntity, playerBoard, playerEntity, opponentEntity, gameState);
246
- }
247
- if (playerBoard.length > 1) {
248
- (0, golden_1.makeMinionGolden)(playerBoard[playerBoard.length - 1], playerEntity, playerBoard, playerEntity, opponentEntity, gameState);
249
- }
250
- break;
251
- }
252
- }
253
- return currentAttacker;
254
- };
255
- const handleStartOfCombatSpellsForPlayer = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState, playerIsFriendly) => {
256
- var _a, _b, _c;
257
- if (playerEntity.startOfCombatDone) {
258
- return currentAttacker;
259
- }
260
- for (const secret of (_a = playerEntity.secrets) !== null && _a !== void 0 ? _a : []) {
261
- switch (secret.cardId) {
262
- case "BG28_573":
263
- if (!!opponentBoard.length) {
264
- const target = (0, utils_1.pickRandom)(opponentBoard);
265
- target.health = 1;
266
- target.maxHealth = 1;
267
- gameState.spectator.registerPowerTarget(playerEntity, target, opponentBoard, null, null);
268
- }
269
- break;
270
- case "BG28_603":
271
- secret.scriptDataNum1 = 1;
272
- break;
273
- case "BG28_519":
274
- (0, utils_2.addStatsToBoard)(secret, playerBoard, playerEntity, 2, 1, gameState);
275
- break;
276
- case "BG28_641":
277
- if (playerBoard.length < 7) {
278
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)("BG28_641t", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, true, false, false);
279
- newMinions[0].attackImmediately = true;
280
- (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, null, 0, opponentBoard, opponentEntity, gameState);
281
- }
282
- break;
283
- }
284
- }
285
- for (const trinket of playerEntity.trinkets) {
286
- switch (trinket.cardId) {
287
- case "BG30_MagicItem_902":
288
- if (playerBoard.length > 0) {
289
- (0, divine_shield_1.updateDivineShield)(playerBoard[0], playerBoard, playerEntity, opponentEntity, true, gameState);
290
- gameState.spectator.registerPowerTarget(playerEntity, playerBoard[0], playerBoard, null, null);
291
- if (playerBoard.length > 1) {
292
- (0, divine_shield_1.updateDivineShield)(playerBoard[playerBoard.length - 1], playerBoard, playerEntity, opponentEntity, true, gameState);
293
- gameState.spectator.registerPowerTarget(playerEntity, playerBoard[playerBoard.length - 1], playerBoard, null, null);
294
- }
295
- }
296
- break;
297
- case "BG30_MagicItem_962":
298
- if (playerBoard.length > 0) {
299
- const minionsByAttack = [...playerBoard].sort((a, b) => a.attack - b.attack);
300
- const firstTarget = minionsByAttack[0];
301
- (0, stats_1.setEntityStats)(firstTarget, 2 * firstTarget.maxAttack, 2 * firstTarget.maxHealth, playerBoard, playerEntity, gameState);
302
- gameState.spectator.registerPowerTarget(trinket, firstTarget, playerBoard, null, null);
303
- if (playerBoard.length > 1) {
304
- const secondTarget = minionsByAttack[1];
305
- (0, stats_1.setEntityStats)(secondTarget, 2 * secondTarget.maxAttack, 2 * secondTarget.maxHealth, playerBoard, playerEntity, gameState);
306
- gameState.spectator.registerPowerTarget(trinket, secondTarget, playerBoard, null, null);
307
- }
308
- }
309
- break;
310
- case "BG30_MagicItem_970":
311
- case "BG30_MagicItem_970t":
312
- const medallionBuff = trinket.cardId === "BG30_MagicItem_970" ? 2 : 6;
313
- (0, utils_2.addStatsToBoard)(trinket, playerBoard, playerEntity, medallionBuff, medallionBuff, gameState);
314
- break;
315
- case "BG30_MagicItem_542":
316
- const highestAttack = Math.max(...playerBoard.map((entity) => entity.attack));
317
- playerBoard
318
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, playerEntity, reference_data_1.Race.DRAGON, gameState.allCards))
319
- .forEach((e) => {
320
- (0, stats_1.setEntityStats)(e, highestAttack, null, playerBoard, playerEntity, gameState);
321
- });
322
- break;
323
- case "BG30_MagicItem_952":
324
- const elementals = (0, utils_1.shuffleArray)(playerBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, playerEntity, reference_data_1.Race.ELEMENTAL, gameState.allCards)));
325
- const targets = elementals.slice(0, 2);
326
- targets.forEach((e) => {
327
- var _a;
328
- e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
329
- e.enchantments.push({
330
- cardId: "BG30_MagicItem_952e",
331
- originEntityId: trinket.entityId,
332
- repeats: 1,
333
- timing: gameState.sharedState.currentEntityId++,
334
- });
335
- gameState.spectator.registerPowerTarget(playerEntity, e, playerBoard, null, null);
336
- });
337
- break;
338
- case "BG30_MagicItem_917":
339
- playerBoard
340
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, playerEntity, reference_data_1.Race.NAGA, gameState.allCards))
341
- .forEach((e) => {
342
- var _a;
343
- e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
344
- e.enchantments.push({
345
- cardId: "BG30_MagicItem_917e",
346
- originEntityId: trinket.entityId,
347
- repeats: 1,
348
- timing: gameState.sharedState.currentEntityId++,
349
- });
350
- });
351
- break;
352
- case "BG30_MagicItem_411":
353
- playerBoard
354
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, playerEntity, reference_data_1.Race.QUILBOAR, gameState.allCards))
355
- .forEach((e) => {
356
- var _a;
357
- e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
358
- e.enchantments.push({
359
- cardId: "BG30_MagicItem_411e",
360
- originEntityId: trinket.entityId,
361
- repeats: 1,
362
- timing: gameState.sharedState.currentEntityId++,
363
- });
364
- });
365
- break;
366
- case "BG30_MagicItem_303":
367
- if (playerBoard.length < 7) {
368
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)("BG_TTN_401", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, true);
369
- (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
370
- }
371
- break;
372
- case "BG30_MagicItem_407":
373
- if (playerBoard.length < 7) {
374
- const target = (0, utils_1.pickRandom)(gameState.cardsData.pirateSpawns);
375
- (0, cards_in_hand_1.addCardsInHand)(playerEntity, playerBoard, [target], gameState);
376
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(target, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, false);
377
- const spawns = (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
378
- spawns.forEach((spawn) => (spawn.attackImmediately = true));
379
- }
380
- break;
381
- case "BG30_MagicItem_301":
382
- playerBoard
383
- .filter((e) => e.cardId === "BG25_008" ||
384
- e.cardId === "BG25_008_G")
385
- .forEach((knight) => {
386
- knight.taunt = true;
387
- knight.reborn = true;
388
- gameState.spectator.registerPowerTarget(playerEntity, knight, playerBoard, null, null);
389
- });
390
- break;
391
- case "BG30_MagicItem_822":
392
- case "BG30_MagicItem_822t2":
393
- break;
394
- case "BG30_MagicItem_989":
395
- case "BG30_MagicItem_989t":
396
- const artisanalUrnBuff = trinket.cardId === "BG30_MagicItem_989" ? 3 : 8;
397
- playerEntity.globalInfo.UndeadAttackBonus =
398
- ((_b = playerEntity.globalInfo.UndeadAttackBonus) !== null && _b !== void 0 ? _b : 0) + artisanalUrnBuff;
399
- break;
400
- case "BG30_MagicItem_310":
401
- if (trinket.scriptDataNum1 != 99) {
402
- const buffBonus = playerEntity.trinkets.filter((t) => t.cardId === "BG30_MagicItem_310").length;
403
- playerBoard
404
- .filter((e) => e.cardId === "BG25_354" ||
405
- e.cardId === "BG25_354_G")
406
- .forEach((e) => {
407
- (0, stats_1.modifyStats)(e, 0, buffBonus * e.health, playerBoard, playerEntity, gameState);
408
- gameState.spectator.registerPowerTarget(trinket, e, playerBoard, null, null);
409
- });
410
- playerEntity.trinkets.forEach((t) => (t.scriptDataNum1 = 99));
411
- }
412
- break;
413
- case "BG30_MagicItem_441":
414
- const highestHealthMinionInHand = (_c = playerEntity.hand) === null || _c === void 0 ? void 0 : _c.sort((a, b) => b.health - a.health)[0];
415
- if (highestHealthMinionInHand && playerBoard.length > 0) {
416
- (0, stats_1.modifyStats)(playerBoard[0], highestHealthMinionInHand.attack, highestHealthMinionInHand.health, playerBoard, playerEntity, gameState);
417
- }
418
- break;
419
- case "BG30_MagicItem_995":
420
- if (playerBoard.length > 0) {
421
- playerBoard.forEach((entity) => {
422
- const highest = Math.max(entity.attack, entity.health);
423
- (0, stats_1.setEntityStats)(entity, highest, highest, playerBoard, playerEntity, gameState);
424
- gameState.spectator.registerPowerTarget(trinket, entity, playerBoard, null, null);
425
- });
426
- }
427
- break;
428
- case "BG30_MagicItem_403":
429
- if (playerBoard.length > 0) {
430
- playerBoard
431
- .filter((e) => {
432
- const tribes = (0, utils_2.getEffectiveTribesForEntity)(e, playerEntity, gameState.allCards);
433
- return tribes.length === 0;
434
- })
435
- .forEach((entity) => {
436
- (0, stats_1.setEntityStats)(entity, 3 * entity.attack, 3 * entity.health, playerBoard, playerEntity, gameState);
437
- gameState.spectator.registerPowerTarget(trinket, entity, playerBoard, null, null);
438
- });
439
- }
440
- break;
441
- case "BG30_MagicItem_972":
442
- if (playerBoard.length > 0) {
443
- let minionsToCopy = 1;
444
- for (let i = 0; i < Math.min(playerBoard.length, 7); i++) {
445
- if (minionsToCopy <= 0) {
446
- break;
447
- }
448
- const entityToCoy = playerBoard[i];
449
- const copy = (0, utils_2.copyEntity)(entityToCoy);
450
- (0, add_minion_to_board_1.removeAurasFromSelf)(copy, playerBoard, playerEntity, gameState);
451
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, false, false, false, copy);
452
- const spawns = (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, playerBoard.length - i - 1, opponentBoard, opponentEntity, gameState);
453
- i += spawns.length;
454
- minionsToCopy--;
455
- }
456
- }
457
- currentAttacker =
458
- playerBoard.length > opponentBoard.length
459
- ? playerIsFriendly
460
- ? 0
461
- : 1
462
- : opponentBoard.length > playerBoard.length
463
- ? playerIsFriendly
464
- ? 1
465
- : 0
466
- : Math.round(Math.random());
467
- break;
468
- case "BG30_MagicItem_821":
469
- case "BG30_MagicItem_821t2":
470
- if (playerBoard.length < 7) {
471
- const spawnId = trinket.cardId === "BG30_MagicItem_821"
472
- ? "TB_BaconShop_HP_105t"
473
- : "TB_BaconUps_307";
474
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(spawnId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, false);
475
- const spawns = (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
476
- currentAttacker =
477
- playerBoard.length > opponentBoard.length
478
- ? playerIsFriendly
479
- ? 0
480
- : 1
481
- : opponentBoard.length > playerBoard.length
482
- ? playerIsFriendly
483
- ? 1
484
- : 0
485
- : Math.round(Math.random());
486
- }
487
- break;
488
- }
489
- }
490
- return currentAttacker;
491
- };
492
- const handleStartOfCombatAnomaliesForPlayer = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
493
- var _a;
494
- if (!((_a = gameState.anomalies) === null || _a === void 0 ? void 0 : _a.length) || playerEntity.startOfCombatDone) {
495
- return currentAttacker;
496
- }
497
- for (const anomaly of gameState.anomalies) {
498
- switch (anomaly) {
499
- case "BG27_Anomaly_726":
500
- if (playerBoard.length > 0) {
501
- const dsTarget = playerBoard[0];
502
- (0, divine_shield_1.updateDivineShield)(dsTarget, playerBoard, playerEntity, opponentEntity, true, gameState);
503
- const rebornTarget = playerBoard[playerBoard.length - 1];
504
- rebornTarget.reborn = true;
505
- }
506
- break;
507
- case "BG27_Anomaly_560":
508
- if (!!playerBoard.length && playerBoard.length < 7) {
509
- const highestHealthMinion = [...playerBoard].sort((a, b) => b.health - a.health)[0];
510
- const copy = {
511
- ...highestHealthMinion,
512
- lastAffectedByEntity: null,
513
- };
514
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, highestHealthMinion.friendly, true, false, false, copy);
515
- const indexFromRight = playerBoard.length - (playerBoard.indexOf(highestHealthMinion) + 1);
516
- (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, highestHealthMinion, indexFromRight, opponentBoard, opponentEntity, gameState);
517
- gameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, null, null);
518
- }
519
- return playerBoard.length > opponentBoard.length
520
- ? 0
521
- : opponentBoard.length > playerBoard.length
522
- ? 1
523
- : Math.round(Math.random());
524
- }
525
- }
526
- return currentAttacker;
527
- };
528
- const handleStartOfCombatHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
529
- if (Math.random() < 0.5) {
530
- currentAttacker = handlePlayerStartOfCombatHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
531
- currentAttacker = handlePlayerStartOfCombatHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
532
- }
533
- else {
534
- currentAttacker = handlePlayerStartOfCombatHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
535
- currentAttacker = handlePlayerStartOfCombatHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
536
- }
537
- (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
538
- return currentAttacker;
539
- };
540
- exports.handleStartOfCombatHeroPowers = handleStartOfCombatHeroPowers;
541
- const handlePlayerIllidanHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, friendly, gameState) => {
542
- if (playerEntity.hpLeft <= 0) {
543
- return currentAttacker;
544
- }
545
- const playerHeroPowerId = playerEntity.heroPowerId || (0, exports.getHeroPowerForHero)(playerEntity.cardId);
546
- if (playerHeroPowerId === "TB_BaconShop_HP_069" && playerBoard.length > 0) {
547
- handleIllidanForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, currentAttacker);
548
- currentAttacker = friendly ? 1 : 0;
549
- }
550
- return currentAttacker;
551
- };
552
- const handleIllidanForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, currentAttacker) => {
553
- if (playerEntity.startOfCombatDone) {
554
- return;
555
- }
556
- const minionsAtStart = playerBoard.length;
557
- const firstAttacker = playerBoard[0];
558
- const secondAttacker = minionsAtStart > 1 ? playerBoard[playerBoard.length - 1] : null;
559
- (0, stats_1.modifyStats)(firstAttacker, 2, 1, playerBoard, playerEntity, gameState);
560
- gameState.spectator.registerPowerTarget(firstAttacker, firstAttacker, playerBoard, playerEntity, opponentEntity);
561
- if (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {
562
- (0, stats_1.modifyStats)(secondAttacker, 2, 1, playerBoard, playerEntity, gameState);
563
- gameState.spectator.registerPowerTarget(secondAttacker, secondAttacker, playerBoard, playerEntity, opponentEntity);
564
- }
565
- firstAttacker.attackImmediately = true;
566
- (0, attack_1.simulateAttack)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
567
- firstAttacker.hasAttacked = 0;
568
- if (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {
569
- secondAttacker.attackImmediately = true;
570
- (0, attack_1.simulateAttack)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
571
- secondAttacker.hasAttacked = 0;
572
- }
573
- };
574
- const handleAlakirForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
575
- const firstEntity = playerBoard[0];
576
- firstEntity.windfury = true;
577
- if (!firstEntity.divineShield) {
578
- (0, divine_shield_1.updateDivineShield)(firstEntity, playerBoard, playerEntity, opponentEntity, true, gameState);
579
- }
580
- firstEntity.taunt = true;
581
- gameState.spectator.registerPowerTarget(firstEntity, firstEntity, playerBoard, playerEntity, opponentEntity);
582
- };
583
- const handleTamsinForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
584
- const chosenEntity = (0, utils_1.pickRandomLowestHealth)(playerBoard);
585
- if (!chosenEntity) {
586
- console.warn('could not pick any entity for tamsin');
587
- return;
588
- }
589
- gameState.spectator.registerPowerTarget(playerEntity, chosenEntity, playerBoard, null, null);
590
- const newBoard = playerBoard.filter((e) => e.entityId !== chosenEntity.entityId);
591
- chosenEntity.definitelyDead = true;
592
- newBoard.forEach((e) => {
593
- (0, stats_1.modifyStats)(e, chosenEntity.attack, chosenEntity.health, newBoard, playerEntity, gameState);
594
- gameState.spectator.registerPowerTarget(chosenEntity, e, newBoard, playerEntity, opponentEntity);
595
- });
596
- };
597
- const applyGloriousGloop = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
598
- var _a;
599
- if (!(playerBoard === null || playerBoard === void 0 ? void 0 : playerBoard.length)) {
600
- return;
601
- }
602
- const target = playerBoard.find((m) => { var _a; return (_a = m.enchantments) === null || _a === void 0 ? void 0 : _a.some((e) => e.cardId === "BGDUO_HERO_101pe2"); });
603
- if (!target) {
604
- return;
605
- }
606
- const teammateState = (0, utils_2.getTeammateInitialState)(gameState.gameState, playerEntity);
607
- if (!((_a = teammateState === null || teammateState === void 0 ? void 0 : teammateState.board) === null || _a === void 0 ? void 0 : _a.length)) {
608
- return;
609
- }
610
- const highestTier = Math.max(...teammateState.board.map((entity) => gameState.allCards.getCard(entity.cardId).techLevel));
611
- const candidates = teammateState.board.filter((entity) => gameState.allCards.getCard(entity.cardId).techLevel === highestTier);
612
- if (!candidates.length) {
613
- return;
614
- }
615
- const highestTierMinion = (0, utils_1.pickRandom)(candidates);
616
- const clone = (0, utils_2.addImpliedMechanics)({
617
- ...highestTierMinion,
618
- lastAffectedByEntity: null,
619
- definitelyDead: false,
620
- attackImmediately: false,
621
- }, gameState.cardsData);
622
- gameState.spectator.registerPowerTarget(playerEntity, target, playerBoard, playerEntity, opponentEntity);
623
- const index = playerBoard.indexOf(target);
624
- playerBoard.splice(index, 1, clone);
625
- };
626
- const handleEmbraceYourRageForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
627
- const createdCardId = playerEntity.heroPowerInfo;
628
- if (!(createdCardId === null || createdCardId === void 0 ? void 0 : createdCardId.length)) {
629
- return;
630
- }
631
- const spawns = (0, deathrattle_spawns_1.spawnEntities)(createdCardId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, true, false, false);
632
- const indexFromRight = 0;
633
- (0, spawns_1.performEntitySpawns)(spawns, playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState);
634
- gameState.spectator.registerPowerTarget(playerEntity, spawns[0], playerBoard, playerEntity, opponentEntity);
635
- (0, cards_in_hand_1.addCardsInHand)(playerEntity, playerBoard, spawns, gameState);
636
- gameState.spectator.registerPowerTarget(playerEntity, spawns[0], playerBoard, playerEntity, opponentEntity);
637
- };
638
- const handleRebornRitesForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
639
- const targetEntityId = playerEntity.heroPowerInfo;
640
- const target = playerBoard.find((entity) => entity.entityId === targetEntityId);
641
- if (!target) {
642
- return;
643
- }
644
- target.reborn = true;
645
- gameState.spectator.registerPowerTarget(playerEntity, target, playerBoard, playerEntity, opponentEntity);
646
- };
647
- const handleTeronForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
648
- const minionThatWillDie = playerBoard
649
- .filter((m) => m.enchantments.some((e) => e.cardId === "BG25_HERO_103pe"))
650
- .sort((a, b) => b.enchantments.find((e) => e.cardId === "BG25_HERO_103pe")
651
- .originEntityId -
652
- a.enchantments.find((e) => e.cardId === "BG25_HERO_103pe")
653
- .originEntityId || b.entityId - a.entityId)[0];
654
- if (minionThatWillDie) {
655
- const rapidReanimationIndexFromLeft = playerBoard.indexOf(minionThatWillDie);
656
- playerEntity.rapidReanimationIndexFromRight = playerBoard.length - 1 - rapidReanimationIndexFromLeft;
657
- const minionToCopy = (0, utils_2.copyEntity)(minionThatWillDie);
658
- (0, add_minion_to_board_1.removeAurasFromSelf)(minionToCopy, playerBoard, playerEntity, gameState);
659
- playerEntity.rapidReanimationMinion = minionToCopy;
660
- minionThatWillDie.definitelyDead = true;
661
- gameState.spectator.registerPowerTarget(playerEntity, minionThatWillDie, playerBoard, playerEntity, opponentEntity);
662
- return true;
663
- }
664
- return false;
665
- };
666
- const handleWaxWarbandForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
667
- if (playerBoard.length > 0) {
668
- const boardWithTribes = playerBoard.filter((e) => !!(0, utils_2.getEffectiveTribesForEntity)(e, playerEntity, gameState.allCards).length);
669
- const boardWithoutAll = boardWithTribes.filter((e) => { var _a; return !((_a = gameState.allCards.getCard(e.cardId).races) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.Race[reference_data_1.Race.ALL])); });
670
- const selectedMinions = selectMinions(boardWithoutAll, reference_data_1.ALL_BG_RACES, gameState.allCards);
671
- const allMinions = [
672
- ...selectedMinions,
673
- ...boardWithTribes.filter((e) => { var _a; return (_a = gameState.allCards.getCard(e.cardId).races) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.Race[reference_data_1.Race.ALL]); }),
674
- ];
675
- allMinions.forEach((e) => {
676
- (0, stats_1.modifyStats)(e, gameState.cardsData.getTavernLevel(e.cardId), gameState.cardsData.getTavernLevel(e.cardId), playerBoard, playerEntity, gameState);
677
- gameState.spectator.registerPowerTarget(playerEntity, e, playerBoard, playerEntity, opponentEntity);
678
- });
679
- }
680
- };
681
- const selectMinions = (minions, tribes, allCards) => {
682
- var _a, _b;
683
- const minionsByTribe = {};
684
- for (const minion of minions) {
685
- for (const tribe of (_a = allCards.getCard(minion.cardId).races) !== null && _a !== void 0 ? _a : []) {
686
- if (!minionsByTribe[tribe]) {
687
- minionsByTribe[tribe] = [];
688
- }
689
- minionsByTribe[tribe].push(minion);
690
- }
691
- }
692
- for (const tribe of reference_data_1.ALL_BG_RACES) {
693
- minionsByTribe[tribe] = (0, utils_1.shuffleArray)((_b = minionsByTribe[reference_data_1.Race[tribe]]) !== null && _b !== void 0 ? _b : []);
694
- }
695
- const selectedMinions = [];
696
- for (const tribe of tribes) {
697
- if (minionsByTribe[tribe]) {
698
- minionsByTribe[tribe].sort((a, b) => allCards.getCard(a.cardId).races.length - allCards.getCard(b.cardId).races.length);
699
- for (const minion of minionsByTribe[tribe]) {
700
- if (!selectedMinions.includes(minion)) {
701
- selectedMinions.push(minion);
702
- break;
703
- }
704
- }
705
- }
706
- }
707
- return selectedMinions;
708
- };
709
- const handlePlayerStartOfCombatHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, friendly, gameState) => {
710
- var _a, _b, _c, _d;
711
- if (playerEntity.startOfCombatDone || playerEntity.hpLeft <= 0) {
712
- return currentAttacker;
713
- }
714
- let shouldRecomputeCurrentAttacker = false;
715
- const playerHeroPowerId = playerEntity.heroPowerId || (0, exports.getHeroPowerForHero)(playerEntity.cardId);
716
- if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_000p_t1") {
717
- const target = opponentBoard[0];
718
- const damageDone = (0, attack_1.dealDamageToMinion)(target, opponentBoard, opponentEntity, null, (_a = playerEntity.heroPowerInfo2) !== null && _a !== void 0 ? _a : 0, playerBoard, playerEntity, gameState);
719
- playerEntity.deadEyeDamageDone = damageDone;
720
- }
721
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_000p_t4") {
722
- const target = opponentBoard[opponentBoard.length - 1];
723
- const damageDone = (0, attack_1.dealDamageToMinion)(target, opponentBoard, opponentEntity, null, (_b = playerEntity.heroPowerInfo2) !== null && _b !== void 0 ? _b : 0, playerBoard, playerEntity, gameState);
724
- playerEntity.deadEyeDamageDone = damageDone;
725
- }
726
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_000p_t2") {
727
- const smallestHealthMinion = [...opponentBoard].sort((a, b) => a.health - b.health)[0];
728
- const target = (0, utils_1.pickRandom)(opponentBoard.filter((e) => e.health === smallestHealthMinion.health));
729
- const damageDone = (0, attack_1.dealDamageToMinion)(target, opponentBoard, opponentEntity, null, (_c = playerEntity.heroPowerInfo2) !== null && _c !== void 0 ? _c : 0, playerBoard, playerEntity, gameState);
730
- playerEntity.deadEyeDamageDone = damageDone;
731
- }
732
- else if (playerEntity.heroPowerUsed && playerHeroPowerId === "BG22_HERO_000p_t3") {
733
- const highestHealthMinion = [...opponentBoard].sort((a, b) => b.health - a.health)[0];
734
- const target = (0, utils_1.pickRandom)(opponentBoard.filter((e) => e.health === highestHealthMinion.health));
735
- const damageDone = (0, attack_1.dealDamageToMinion)(target, opponentBoard, opponentEntity, null, (_d = playerEntity.heroPowerInfo2) !== null && _d !== void 0 ? _d : 0, playerBoard, playerEntity, gameState);
736
- playerEntity.deadEyeDamageDone = damageDone;
737
- }
738
- (0, attack_1.processMinionDeath)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
739
- if (shouldRecomputeCurrentAttacker) {
740
- const previousCurrentAttacker = currentAttacker;
741
- currentAttacker =
742
- playerBoard.length > opponentBoard.length
743
- ? friendly
744
- ? 0
745
- : 1
746
- : opponentBoard.length > playerBoard.length
747
- ? friendly
748
- ? 1
749
- : 0
750
- : currentAttacker;
751
- }
752
- return currentAttacker;
753
- };
754
- const getHeroPowerForHero = (heroCardId) => {
755
- switch (heroCardId) {
756
- case "TB_BaconShop_HERO_08":
757
- return "TB_BaconShop_HP_069";
758
- case "TB_BaconShop_HERO_22":
759
- return "TB_BaconShop_HP_024";
760
- case "BG25_HERO_100":
761
- return "TB_BaconShop_HP_018";
762
- case "TB_BaconShop_HERO_52":
763
- return "TB_BaconShop_HP_061";
764
- case "BG25_HERO_103":
765
- return "BG25_HERO_103p";
766
- }
767
- return null;
768
- };
769
- exports.getHeroPowerForHero = getHeroPowerForHero;
770
- const performStartOfCombatMinionsForPlayer = (attacker, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, attackingBoardBefore, defendingBoardBefore, gameState) => {
771
- var _a, _b, _c, _d;
772
- if (attackingBoardHero.startOfCombatDone) {
773
- return false;
774
- }
775
- let hasProcessed = true;
776
- if (attacker.cardId === "BGS_019") {
777
- const damage = attackingBoardBefore.filter((entity) => (0, utils_2.hasCorrectTribe)(entity, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards)).length;
778
- (0, attack_1.dealDamageToRandomEnemy)(defendingBoard, defendingBoardHero, attacker, damage, attackingBoard, attackingBoardHero, gameState);
779
- }
780
- else if (attacker.cardId === "TB_BaconUps_102") {
781
- const damage = attackingBoardBefore.filter((entity) => (0, utils_2.hasCorrectTribe)(entity, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards)).length;
782
- (0, attack_1.dealDamageToRandomEnemy)(defendingBoard, defendingBoardHero, attacker, damage, attackingBoard, attackingBoardHero, gameState);
783
- (0, attack_1.dealDamageToRandomEnemy)(defendingBoard, defendingBoardHero, attacker, damage, attackingBoard, attackingBoardHero, gameState);
784
- }
785
- else if (attacker.cardId === "BG21_014" ||
786
- attacker.cardId === "BG21_014_G") {
787
- const stats = attacker.cardId === "BG21_014_G" ? 6 : 3;
788
- const targets = attackingBoard
789
- .filter((e) => e.entityId !== attacker.entityId)
790
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards));
791
- for (const entity of targets) {
792
- (0, stats_1.modifyStats)(entity, stats, stats, attackingBoard, attackingBoardHero, gameState);
793
- gameState.spectator.registerPowerTarget(attacker, entity, attackingBoard, attackingBoardHero, defendingBoardHero);
794
- }
795
- }
796
- else if (attacker.cardId === "BG26_354" ||
797
- attacker.cardId === "BG26_354_G") {
798
- const multiplier = attacker.cardId === "BG26_354_G" ? 2 : 1;
799
- (0, stats_1.modifyStats)(attacker, multiplier * ((_a = attackingBoardHero.globalInfo) === null || _a === void 0 ? void 0 : _a.ChoralAttackBuff), multiplier * ((_b = attackingBoardHero.globalInfo) === null || _b === void 0 ? void 0 : _b.ChoralHealthBuff), attackingBoard, attackingBoardHero, gameState);
800
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
801
- }
802
- else if (attacker.cardId === "BG24_500" ||
803
- attacker.cardId === "BG24_500_G") {
804
- const otherDragons = attackingBoard
805
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards))
806
- .filter((e) => e.entityId !== attacker.entityId);
807
- const loops = attacker.cardId === "BG24_500_G" ? 2 : 1;
808
- const dragonsToConsider = otherDragons;
809
- for (let i = 0; i < loops; i++) {
810
- const otherDragon = (_c = (0, utils_1.pickRandom)(dragonsToConsider.filter((e) => !e.divineShield))) !== null && _c !== void 0 ? _c : (0, utils_1.pickRandom)(dragonsToConsider);
811
- if (otherDragon) {
812
- if (!otherDragon.divineShield) {
813
- (0, divine_shield_1.updateDivineShield)(otherDragon, attackingBoard, attackingBoardHero, defendingBoardHero, true, gameState);
814
- }
815
- (0, stats_1.modifyStats)(otherDragon, 5, 5, attackingBoard, attackingBoardHero, gameState);
816
- gameState.spectator.registerPowerTarget(attacker, otherDragon, attackingBoard, attackingBoardHero, defendingBoardHero);
817
- dragonsToConsider.splice(dragonsToConsider.indexOf(otherDragon), 1);
818
- }
819
- }
820
- }
821
- else if (attacker.cardId === "BG26_356" ||
822
- attacker.cardId === "BG26_356_G") {
823
- const buff = attacker.cardId === "BG26_356_G" ? 16 : 8;
824
- const otherDragons = attackingBoard
825
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards))
826
- .filter((e) => e.entityId !== attacker.entityId);
827
- otherDragons.forEach((otherDragon) => {
828
- (0, stats_1.modifyStats)(otherDragon, 0, buff, attackingBoard, attackingBoardHero, gameState);
829
- gameState.spectator.registerPowerTarget(attacker, otherDragon, attackingBoard, attackingBoardHero, defendingBoardHero);
830
- });
831
- }
832
- else if (attacker.cardId === "BG25_023" ||
833
- attacker.cardId === "BG25_023_G") {
834
- const numberOfTargets = attacker.cardId === "BG25_023_G" ? 2 : 1;
835
- for (let i = 0; i < numberOfTargets; i++) {
836
- const undeadsWithoutReborn = attackingBoard
837
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.UNDEAD, gameState.allCards))
838
- .filter((e) => !e.reborn);
839
- const chosenUndead = (0, utils_1.pickRandom)(undeadsWithoutReborn);
840
- if (chosenUndead) {
841
- chosenUndead.reborn = true;
842
- gameState.spectator.registerPowerTarget(attacker, chosenUndead, attackingBoard, attackingBoardHero, defendingBoardHero);
843
- }
844
- }
845
- }
846
- else if (attacker.cardId === "BG22_HERO_000_Buddy" ||
847
- attacker.cardId === "BG22_HERO_000_Buddy_G") {
848
- const neighbours = (0, attack_1.getNeighbours)(attackingBoard, attacker);
849
- const multiplier = attacker.cardId === "BG22_HERO_000_Buddy_G" ? 2 : 1;
850
- neighbours.forEach((entity) => {
851
- var _a, _b;
852
- (0, stats_1.modifyStats)(entity, multiplier * ((_a = attackingBoardHero.deadEyeDamageDone) !== null && _a !== void 0 ? _a : 0), multiplier * ((_b = attackingBoardHero.deadEyeDamageDone) !== null && _b !== void 0 ? _b : 0), attackingBoard, attackingBoardHero, gameState);
853
- gameState.spectator.registerPowerTarget(attacker, entity, attackingBoard, attackingBoardHero, defendingBoardHero);
854
- });
855
- }
856
- else if (attacker.cardId === "BG23_012" ||
857
- attacker.cardId === "BG23_012_G") {
858
- const multiplier = attacker.cardId === "BG23_012_G" ? 2 : 1;
859
- (0, stats_1.modifyStats)(attacker, multiplier * attacker.attack, multiplier * attacker.health, attackingBoard, attackingBoardHero, gameState);
860
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
861
- }
862
- else if (attacker.cardId === "BG24_704" ||
863
- attacker.cardId === "BG24_704_G") {
864
- if (defendingBoard.length > 0) {
865
- const validTargets = defendingBoard.filter((e) => gameState.cardsData.getTavernLevel(e.cardId) >= 5);
866
- const numberOfPicks = attacker.cardId === "BG24_704_G" ? 2 : 1;
867
- for (let i = 0; i < numberOfPicks; i++) {
868
- const target = (0, utils_1.pickRandom)(validTargets);
869
- if (!!target) {
870
- castImpure(target, attacker, attackingBoard, gameState.spectator);
871
- const targetIndex = validTargets.findIndex((e) => e.entityId === target.entityId);
872
- validTargets.splice(targetIndex, 1);
873
- }
874
- }
875
- }
876
- }
877
- else if (attacker.cardId === "BG22_402" || attacker.cardId === "BG22_402_G") {
878
- const multiplier = attacker.cardId === "BG22_402_G" ? 2 : 1;
879
- const allRaces = attackingBoardBefore
880
- .map((entity) => entity.cardId)
881
- .flatMap((cardId) => gameState.allCards.getCard(cardId).races)
882
- .filter((race) => !!race && race !== reference_data_1.Race[reference_data_1.Race.BLANK]);
883
- const totalRaces = [...new Set(allRaces.filter((race) => race !== reference_data_1.Race[reference_data_1.Race.ALL]))].length +
884
- allRaces.filter((race) => race === reference_data_1.Race[reference_data_1.Race.ALL]).length;
885
- for (let i = 0; i < multiplier; i++) {
886
- for (let j = 0; j < totalRaces; j++) {
887
- const buffType = getRandomMantidQueenBuffType(attacker);
888
- switch (buffType) {
889
- case 'stats':
890
- (0, stats_1.modifyStats)(attacker, 5, 5, attackingBoard, attackingBoardHero, gameState);
891
- break;
892
- case 'reborn':
893
- attacker.reborn = true;
894
- break;
895
- case 'taunt':
896
- attacker.taunt = true;
897
- break;
898
- case 'windfury':
899
- attacker.windfury = true;
900
- break;
901
- }
902
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
903
- }
904
- }
905
- }
906
- else if (attacker.cardId === "BG27_503" ||
907
- attacker.cardId === "BG27_503_G") {
908
- const numberOfCopies = attacker.cardId === "BG27_503_G" ? 2 : 1;
909
- for (let i = 0; i < numberOfCopies; i++) {
910
- if (!!attackingBoard.length && attackingBoard.length < 7) {
911
- const copy = {
912
- ...attacker,
913
- lastAffectedByEntity: null,
914
- };
915
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, attacker.friendly, true, false, false, copy);
916
- const indexFromRight = attackingBoard.length - (attackingBoard.indexOf(attacker) + 1);
917
- (0, spawns_1.performEntitySpawns)(newMinions, attackingBoard, attackingBoardHero, attacker, indexFromRight, defendingBoard, defendingBoardHero, gameState);
918
- gameState.spectator.registerPowerTarget(attacker, copy, attackingBoard, attackingBoardHero, defendingBoardHero);
919
- }
920
- }
921
- }
922
- else if (attacker.cardId === "BG27_556" ||
923
- attacker.cardId === "BG27_556_G") {
924
- const potentialTargets = attackingBoardHero.hand
925
- .filter((e) => !!e.cardId)
926
- .filter((e) => { var _a; return ((_a = gameState.allCards.getCard(e.cardId).type) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === reference_data_1.CardType[reference_data_1.CardType.MINION]; })
927
- .filter((e) => !e.locked);
928
- if (potentialTargets.length > 0) {
929
- const target = (0, utils_1.pickRandom)(potentialTargets);
930
- const diremuckBuff = attacker.cardId === "BG27_556_G" ? 4 : 2;
931
- (0, stats_1.modifyStats)(target, diremuckBuff, diremuckBuff, attackingBoard, attackingBoardHero, gameState);
932
- gameState.spectator.registerPowerTarget(attacker, target, attackingBoard, attackingBoardHero, defendingBoardHero);
933
- if (attackingBoard.length < 7) {
934
- target.locked = true;
935
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(target.cardId, 1, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, attacker.friendly, false, false, true, { ...target });
936
- for (const s of newMinions) {
937
- s.onCanceledSummon = () => (target.locked = false);
938
- }
939
- (0, spawns_1.performEntitySpawns)(newMinions, attackingBoard, attackingBoardHero, attacker, attackingBoard.length - (attackingBoard.indexOf(attacker) + 1), defendingBoard, defendingBoardHero, gameState);
940
- }
941
- }
942
- }
943
- else if (attacker.cardId === "BG27_079" ||
944
- attacker.cardId === "BG27_079_G") {
945
- const multiplier = attacker.cardId === "BG27_079_G" ? 2 : 1;
946
- for (const entity of attackingBoard) {
947
- for (let i = 0; i < multiplier; i++) {
948
- gameState.spectator.registerPowerTarget(attacker, entity, attackingBoard, attackingBoardHero, defendingBoardHero);
949
- (0, deathrattle_orchestration_1.handleDeathrattles)({
950
- gameState: gameState,
951
- playerDeadEntities: attackingBoardHero.friendly ? [entity] : [],
952
- playerDeadEntityIndexesFromRight: attackingBoardHero.friendly
953
- ? [attackingBoard.length - 1 - attackingBoard.indexOf(entity)]
954
- : [],
955
- opponentDeadEntities: attackingBoardHero.friendly ? [] : [entity],
956
- opponentDeadEntityIndexesFromRight: attackingBoardHero.friendly
957
- ? []
958
- : [attackingBoard.length - 1 - attackingBoard.indexOf(entity)],
959
- });
960
- }
961
- }
962
- }
963
- else if (attacker.cardId === "BG28_904" ||
964
- attacker.cardId === "BG28_904_G") {
965
- const iterations = attacker.cardId === "BG28_904_G" ? 2 : 1;
966
- for (let i = 0; i < iterations; i++) {
967
- const targets = (0, attack_1.findNearestEnemies)(attackingBoard, attacker, attackingBoard.length - 1 - attackingBoard.indexOf(attacker), defendingBoard, 1, gameState.allCards);
968
- if (!targets.length) {
969
- break;
970
- }
971
- if (targets.length > 2) {
972
- console.error('Invalid number of targets', targets.length);
973
- }
974
- const target = (0, utils_1.pickRandom)(targets);
975
- while (attacker.health > 0 && target.health > 0 && !attacker.definitelyDead && !target.definitelyDead) {
976
- (0, attack_1.doFullAttack)(attacker, attackingBoard, attackingBoardHero, target, defendingBoard, defendingBoardHero, gameState);
977
- }
978
- }
979
- }
980
- else if (attacker.cardId === "BG21_HERO_030_Buddy" ||
981
- attacker.cardId === "BG21_HERO_030_Buddy_G") {
982
- (0, deathrattle_effects_1.rememberDeathrattles)(attacker, attackingBoard.filter((e) => e.cardId !== "BG21_HERO_030_Buddy" &&
983
- e.cardId !== "BG21_HERO_030_Buddy_G"), gameState.cardsData, gameState.allCards, gameState.sharedState);
984
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
985
- }
986
- else if (attacker.cardId === "BG29_990" ||
987
- attacker.cardId === "BG29_990_G") {
988
- const loops = attacker.cardId === "BG29_990_G" ? 2 : 1;
989
- for (let i = 0; i < loops; i++) {
990
- const neighbours = (0, attack_1.getNeighbours)(attackingBoard, attacker);
991
- for (const neighbour of neighbours) {
992
- gameState.spectator.registerPowerTarget(attacker, neighbour, attackingBoard, attackingBoardHero, defendingBoardHero);
993
- (0, attack_1.dealDamageToMinion)(neighbour, attackingBoard, attackingBoardHero, attacker, 1, defendingBoard, defendingBoardHero, gameState);
994
- (0, stats_1.modifyStats)(neighbour, 4, 0, attackingBoard, attackingBoardHero, gameState);
995
- }
996
- }
997
- }
998
- else if (attacker.cardId === "BG29_814" ||
999
- attacker.cardId === "BG29_814_G") {
1000
- const multiplier = attacker.cardId === "BG29_814_G" ? 2 : 1;
1001
- const tier = attackingBoardHero.tavernTier;
1002
- const stats = multiplier * tier;
1003
- (0, stats_1.modifyStats)(attacker, stats, stats, attackingBoard, attackingBoardHero, gameState);
1004
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
1005
- }
1006
- else if (attacker.cardId === "BG29_810" ||
1007
- attacker.cardId === "BG29_810_G") {
1008
- const loops = attacker.cardId === "BG29_810_G" ? 2 : 1;
1009
- const pickedTargets = [];
1010
- const dragons = attackingBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.DRAGON, gameState.allCards));
1011
- for (let i = 0; i < loops; i++) {
1012
- const target = dragons.filter((e) => !pickedTargets.includes(e))[0];
1013
- if (!!target) {
1014
- (0, stats_1.modifyStats)(target, 1, 2, attackingBoard, attackingBoardHero, gameState);
1015
- target.windfury = true;
1016
- gameState.spectator.registerPowerTarget(attacker, target, attackingBoard, attackingBoardHero, defendingBoardHero);
1017
- pickedTargets.push(target);
1018
- }
1019
- }
1020
- }
1021
- else if (attacker.cardId === "BG29_811" ||
1022
- attacker.cardId === "BG29_811_G") {
1023
- const loops = attacker.cardId === "BG29_811_G" ? 2 : 1;
1024
- for (let i = 0; i < loops; i++) {
1025
- const candidateBoard = attackingBoard
1026
- .filter((e) => !(0, utils_2.isGolden)(e.cardId, gameState.allCards))
1027
- .filter((e) => e.cardId !== "BG29_811" &&
1028
- e.cardId !== "BG29_811_G");
1029
- const randomBoard = (0, utils_1.shuffleArray)(candidateBoard);
1030
- const candidates = randomBoard.sort((a, b) => gameState.cardsData.getTavernLevel(a.cardId) - gameState.cardsData.getTavernLevel(b.cardId));
1031
- const target = candidates[0];
1032
- if (!!target) {
1033
- (0, golden_1.makeMinionGolden)(target, attacker, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);
1034
- }
1035
- }
1036
- }
1037
- else if (attacker.cardId === "BG29_872" ||
1038
- attacker.cardId === "BG29_872_G") {
1039
- const stats = attacker.cardId === "BG29_872_G" ? 20 : 10;
1040
- const target = (0, utils_2.getRandomMinionWithHighestHealth)(defendingBoard);
1041
- if (!!target) {
1042
- const previousAttack = target.attack;
1043
- const previousHealth = target.health;
1044
- target.attack = Math.max(0, target.attack - stats);
1045
- target.health = Math.max(0, target.health - stats);
1046
- target.maxHealth = Math.max(0, target.maxHealth - stats);
1047
- (0, stats_1.modifyStats)(attacker, previousAttack - target.attack, previousHealth - target.health, attackingBoard, attackingBoardHero, gameState);
1048
- gameState.spectator.registerPowerTarget(attacker, target, attackingBoard, attackingBoardHero, defendingBoardHero);
1049
- }
1050
- }
1051
- else if (attacker.cardId === "BG29_875" ||
1052
- attacker.cardId === "BG29_875_G") {
1053
- const targetEnchantment = attacker.cardId === "BG29_875_G"
1054
- ? "BG29_875_Ge"
1055
- : "BG29_875e";
1056
- attackingBoard
1057
- .filter((e) => e.entityId != attacker.entityId)
1058
- .forEach((e) => {
1059
- e.enchantments = e.enchantments || [];
1060
- if (!e.enchantments.some((e) => e.cardId === targetEnchantment)) {
1061
- e.enchantments.push({
1062
- cardId: targetEnchantment,
1063
- originEntityId: attacker.entityId,
1064
- timing: gameState.sharedState.currentEntityId++,
1065
- });
1066
- }
1067
- });
1068
- }
1069
- else if (attacker.cardId === "BGDUO_125" || attacker.cardId === "BGDUO_125_G") {
1070
- const teammateState = (0, utils_2.getTeammateInitialState)(gameState.gameState, attackingBoardHero);
1071
- if ((_d = teammateState === null || teammateState === void 0 ? void 0 : teammateState.board) === null || _d === void 0 ? void 0 : _d.length) {
1072
- const isGolden = attacker.cardId === "BGDUO_125_G";
1073
- const minionToCopy = (0, utils_2.getRandomMinionWithHighestHealth)(teammateState.board);
1074
- const copy = { ...minionToCopy, enchantments: [...minionToCopy.enchantments] };
1075
- const attackerIndex = attackingBoard.indexOf(attacker);
1076
- attackingBoard.splice(attackerIndex, 0, copy);
1077
- if (isGolden) {
1078
- (0, golden_1.makeMinionGolden)(copy, copy, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);
1079
- }
1080
- }
1081
- }
1082
- else if (attacker.cardId === "TB_BaconShop_HERO_56_Buddy" ||
1083
- attacker.cardId === "TB_BaconShop_HERO_56_Buddy_G") {
1084
- const vaelastraszBonus = attacker.cardId === "TB_BaconShop_HERO_56_Buddy_G" ? 6 : 3;
1085
- attackingBoard
1086
- .filter((e) => e.entityId !== attacker.entityId)
1087
- .forEach((e) => {
1088
- (0, stats_1.modifyStats)(e, vaelastraszBonus, vaelastraszBonus, attackingBoard, attackingBoardHero, gameState);
1089
- gameState.spectator.registerPowerTarget(attacker, e, attackingBoard, attackingBoardHero, defendingBoardHero);
1090
- });
1091
- }
1092
- else if (attacker.cardId === "TB_BaconShop_HERO_14_Buddy" ||
1093
- attacker.cardId === "TB_BaconShop_HERO_14_Buddy_G") {
1094
- const minionsOfDifferentTypes = (0, utils_2.getMinionsOfDifferentTypes)(attackingBoard, attackingBoardHero, gameState);
1095
- if (minionsOfDifferentTypes.length >= 4) {
1096
- const highestAttackOnBoard = Math.max(...attackingBoard.map((entity) => entity.attack));
1097
- const highestHealthOnBoard = Math.max(...attackingBoard.map((entity) => entity.health));
1098
- const multiplier = attacker.cardId === "TB_BaconShop_HERO_14_Buddy_G" ? 2 : 1;
1099
- (0, stats_1.modifyStats)(attacker, highestAttackOnBoard * multiplier, highestHealthOnBoard * multiplier, attackingBoard, attackingBoardHero, gameState);
1100
- gameState.spectator.registerPowerTarget(attacker, attacker, attackingBoard, attackingBoardHero, defendingBoardHero);
1101
- }
1102
- }
1103
- else if (attacker.cardId === "BG30_101" || attacker.cardId === "BG30_101_G") {
1104
- if (attackingBoard.length > 0 || defendingBoard.length > 0) {
1105
- const quantity = attacker.cardId === "BG30_101" ? 3 : 6;
1106
- (0, divine_shield_1.grantDivineShieldToLeftmostMinions)(attacker, attackingBoard, attackingBoardHero, quantity, defendingBoardHero, gameState);
1107
- (0, divine_shield_1.grantDivineShieldToLeftmostMinions)(attacker, defendingBoard, defendingBoardHero, quantity, attackingBoardHero, gameState);
1108
- }
1109
- }
1110
- else if (attacker.cardId === "BG30_119" ||
1111
- attacker.cardId === "BG30_119_G") {
1112
- attackingBoard
1113
- .filter((e) => e.entityId !== attacker.entityId)
1114
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.PIRATE, gameState.allCards))
1115
- .forEach((e) => {
1116
- e.enchantments = e.enchantments || [];
1117
- e.enchantments.push({
1118
- cardId: attacker.cardId === "BG30_119_G"
1119
- ? "BG30_119_Ge"
1120
- : "BG30_119e",
1121
- originEntityId: attacker.entityId,
1122
- timing: gameState.sharedState.currentEntityId++,
1123
- });
1124
- });
1125
- }
1126
- else {
1127
- hasProcessed = false;
1128
- }
1129
- (0, attack_1.processMinionDeath)(attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState);
1130
- return hasProcessed;
1131
- };
1132
- exports.performStartOfCombatMinionsForPlayer = performStartOfCombatMinionsForPlayer;
1133
- const applyAllWillBurn = (board1, board1Hero, board2, board2Hero, sourceEntity, gameState) => {
1134
- for (const entity of board1) {
1135
- (0, stats_1.modifyStats)(entity, 2, 0, board1, board1Hero, gameState);
1136
- gameState.spectator.registerPowerTarget(sourceEntity, entity, board1, null, null);
1137
- }
1138
- for (const entity of board2) {
1139
- (0, stats_1.modifyStats)(entity, 2, 0, board2, board1Hero, gameState);
1140
- gameState.spectator.registerPowerTarget(sourceEntity, entity, board2, null, null);
1141
- }
1142
- };
1143
- const castImpure = (entity, source, board, spectator) => {
1144
- var _a;
1145
- if (!entity) {
1146
- return;
1147
- }
1148
- const multiplier = source.cardId === "BG24_704_G" ? 3 : 2;
1149
- entity.taunt = true;
1150
- entity.damageMultiplier = (_a = entity.damageMultiplier) !== null && _a !== void 0 ? _a : 1;
1151
- entity.damageMultiplier *= multiplier;
1152
- spectator.registerPowerTarget(source, entity, board, null, null);
1153
- };
1154
- const getRandomMantidQueenBuffType = (entity) => {
1155
- const possibilities = ['stats'];
1156
- if (!entity.reborn) {
1157
- possibilities.push('reborn');
1158
- }
1159
- if (!entity.windfury) {
1160
- possibilities.push('windfury');
1161
- }
1162
- if (!entity.taunt) {
1163
- possibilities.push('taunt');
1164
- }
1165
- return (0, utils_1.pickRandom)(possibilities);
1166
- };
1167
- //# sourceMappingURL=start-of-combat.js.map