genshin-world 4.1.2 → 4.3.1

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 (239) hide show
  1. package/README.md +2 -2
  2. package/dist/ElementDamageBonusAttributeMap-r29fkvtM.js +13 -0
  3. package/dist/EnemyState-DV57Bh7L.js +14 -0
  4. package/dist/GameDataset-B6H7oezV.js +279 -0
  5. package/dist/KitEventKind-CGMNB7W9.js +34 -0
  6. package/dist/{ReactionType-BBSdxyO3.js → ReactionType-hpFnoVev.js} +10 -16
  7. package/dist/TransformativeReactionType-CleFzf8J.js +15 -0
  8. package/dist/{addKitEffect-DBqTfm_3.js → addKitEffect-B922PsCn.js} +3 -0
  9. package/dist/addKitStatus-B0kqLgt1.js +9 -0
  10. package/dist/ainoKit-9nNWJtt8.js +111 -0
  11. package/dist/albedoKit-CqDSRYSS.js +133 -0
  12. package/dist/{alhaithamKit-Bhs-coX9.js → alhaithamKit-CPqHnLHg.js} +22 -8
  13. package/dist/aloyKit-mX4ue1UK.js +67 -0
  14. package/dist/alyoshaKit-BT4RmJiZ.js +4 -0
  15. package/dist/amberKit-DiseylUk.js +86 -0
  16. package/dist/arlecchinoKit-Ktk2qBrZ.js +17 -0
  17. package/dist/ayakaKit-B8lRaVEX.js +85 -0
  18. package/dist/{ayatoKit-BXZNajk7.js → ayatoKit-C1d3zZO0.js} +33 -4
  19. package/dist/baizhuKit-BahbIHOM.js +82 -0
  20. package/dist/barbaraKit-DyVdn4JU.js +123 -0
  21. package/dist/{beidouKit-sQUahtIk.js → beidouKit-DtdW2iYD.js} +39 -8
  22. package/dist/{bennettKit-Cr-zZ_25.js → bennettKit-DMybe5yt.js} +16 -6
  23. package/dist/{candaceKit-BUs_wwFU.js → candaceKit-D2JxxJ-U.js} +23 -14
  24. package/dist/castKitField-_74Co83C.js +23 -0
  25. package/dist/{characterPack-YAEqbhAX.d.ts → characterPack-COXASMYv.d.ts} +36 -9
  26. package/dist/characterPack-DibegH5Y.js +723 -0
  27. package/dist/characterPack.d.ts +1 -1
  28. package/dist/characterPack.js +3 -1
  29. package/dist/{charlotteKit-BOZiCPEb.js → charlotteKit-BHanMBgA.js} +34 -20
  30. package/dist/chascaKit-CF8KPyfH.js +53 -0
  31. package/dist/checkIsKitShieldLive-Ch8BgpHZ.js +4 -0
  32. package/dist/chevreuseKit-CH5xu1yJ.js +48 -0
  33. package/dist/{chioriKit-CxRUSHNw.js → chioriKit-CyJV9RuV.js} +4 -1
  34. package/dist/{chongyunKit-jrWQKRkG.js → chongyunKit-Bfp6g05V.js} +11 -15
  35. package/dist/citlaliKit-BFxlFfsf.js +63 -0
  36. package/dist/clorindeKit-CVP7rxb2.js +62 -0
  37. package/dist/collectKitEnergyDrops-Bt4C9o5I.js +66 -0
  38. package/dist/colleiKit-CCIYW8bc.js +52 -0
  39. package/dist/columbinaKit-CJ0as-TP.js +281 -0
  40. package/dist/computeFacingAngle-BaRnmfMH.js +8 -0
  41. package/dist/constants-C5MNdAtu.js +74 -0
  42. package/dist/constants-CFW7hhnp.js +187 -0
  43. package/dist/constants-DCZ-jxqC.js +4 -0
  44. package/dist/consumeKitResource-CbrNQtZP.js +18 -0
  45. package/dist/countKitResource-DvrWXcCc.js +5 -0
  46. package/dist/{createWindriseGroundPaint-BmZkGq-r.js → createWindriseGroundPaint-3I4-42A5.js} +14 -10
  47. package/dist/{cynoKit-DpfT5dmS.js → cynoKit-BsdVe5ip.js} +33 -8
  48. package/dist/dahliaKit-BvAE-bdw.js +21 -0
  49. package/dist/dehyaKit-DiC7yHRH.js +24 -0
  50. package/dist/dilucKit-C9Nz6xLi.js +167 -0
  51. package/dist/dionaKit-CSA9iGCG.js +69 -0
  52. package/dist/{doriKit-G9XTwwCP.js → doriKit-MallfU4i.js} +3 -2
  53. package/dist/{durinKit-BIYdUkbh.js → durinKit-Cwno0X9u.js} +7 -6
  54. package/dist/{emilieKit-0b2vhNtl.js → emilieKit-WNRG1HiW.js} +1 -1
  55. package/dist/emitKitEvent-MEMMkn9X.js +12 -0
  56. package/dist/escoffierKit-DC0knooj.js +96 -0
  57. package/dist/{eulaKit-DAENHIEx.js → eulaKit-B714Qm9u.js} +32 -16
  58. package/dist/{faruzanKit-BcW6D-N3.js → faruzanKit-Bnz3BRKw.js} +6 -4
  59. package/dist/findKitStatus-c5kVgwo6.js +4 -0
  60. package/dist/{fischlKit-Bm8vNmuV.js → fischlKit-BKJSDlae.js} +11 -13
  61. package/dist/flinsKit-CP5D22yk.js +31 -0
  62. package/dist/freminetKit-BKugfnRC.js +21 -0
  63. package/dist/{furinaKit-BREisAdJ.js → furinaKit-BGd_lLjr.js} +54 -43
  64. package/dist/gainKitResource-Cb8C2L3s.js +15 -0
  65. package/dist/gainPartyMemberEnergy-D9hiqeb4.js +12 -0
  66. package/dist/gamingKit-kIgqMnFq.js +26 -0
  67. package/dist/{ganyuKit-DLJa1t-Z.js → ganyuKit-DemmOZho.js} +31 -20
  68. package/dist/getActiveCharacterId-BAGBdS2c.js +10 -0
  69. package/dist/getBuffedCombatant-B7Fe7E_P.js +101 -0
  70. package/dist/getDeployedCharacterIds-ED-6JY4w.js +4 -0
  71. package/dist/getDeployedCombatants-BqXm9a6o.js +17 -0
  72. package/dist/getPartyMember-CPyR8-gA.js +9 -0
  73. package/dist/gorouKit-D1aEnA6A.js +154 -0
  74. package/dist/heizouKit-ePG5r1Cn.js +50 -0
  75. package/dist/huTaoKit-4-GOh-Vv.js +147 -0
  76. package/dist/iansanKit-CRWpDWLi.js +146 -0
  77. package/dist/ifaKit-DIM0kU9K.js +40 -0
  78. package/dist/illugaKit-D1QkAPS6.js +112 -0
  79. package/dist/{index-DQB91Tfq.d.ts → index-CPoeaSkB.d.ts} +19875 -7580
  80. package/dist/index.d.ts +4 -4
  81. package/dist/index.js +47247 -25551
  82. package/dist/ineffaKit-vPT9zyfI.js +155 -0
  83. package/dist/{ittoKit-CfwXkR0g.js → ittoKit-DzOW-TE9.js} +33 -12
  84. package/dist/jahodaKit-9YGHCAcA.js +347 -0
  85. package/dist/{jeanKit-Do8vx5Kp.js → jeanKit-9eNCZ6dx.js} +39 -5
  86. package/dist/kachinaKit-BrwrswKB.js +7 -0
  87. package/dist/kaeyaKit-CY35PXmA.js +92 -0
  88. package/dist/kavehKit-BE7gKtWP.js +34 -0
  89. package/dist/{kazuhaKit-C5gn8iGg.js → kazuhaKit-qOCjcrqH.js} +26 -4
  90. package/dist/keqingKit-BzAWT9BG.js +101 -0
  91. package/dist/kinichKit-CymKuu1M.js +72 -0
  92. package/dist/kiraraKit-DyhPmhEL.js +71 -0
  93. package/dist/kleeKit-BwHcJznq.js +96 -0
  94. package/dist/kokomiKit-CA0CzriO.js +84 -0
  95. package/dist/kujouSaraKit-BW83jN0G.js +96 -0
  96. package/dist/{kukiKit-DcARldP9.js → kukiKit-AxsqxqeV.js} +22 -10
  97. package/dist/lanYanKit-ttJg9kuB.js +27 -0
  98. package/dist/laumaKit-Byo_-u9y.js +162 -0
  99. package/dist/laylaKit-L2t_Rj6L.js +181 -0
  100. package/dist/lisaKit-BsYIJpRR.js +66 -0
  101. package/dist/lynetteKit-N8fgD5-q.js +40 -0
  102. package/dist/lyneyKit-T586Gpbd.js +43 -0
  103. package/dist/mavuikaKit-nJaEDdfr.js +22 -0
  104. package/dist/{mikaKit-C9xDhjJg.js → mikaKit-CdLY5aCh.js} +6 -2
  105. package/dist/mizukiKit-BEXzx_Y6.js +58 -0
  106. package/dist/monaKit-ONoXQhmJ.js +146 -0
  107. package/dist/mualaniKit-DXSW984Q.js +7 -0
  108. package/dist/nahidaKit-f_e4vgfj.js +113 -0
  109. package/dist/naviaKit-BtcUuWFE.js +140 -0
  110. package/dist/neferKit-12ZI_Dj4.js +30 -0
  111. package/dist/neuvilletteKit-l08eZ2jR.js +119 -0
  112. package/dist/nicoleKit-BGBQ8CMU.js +282 -0
  113. package/dist/nilouKit-BH5jWBqC.js +105 -0
  114. package/dist/{ningguangKit-N88BhNb_.js → ningguangKit-YmHdRYcn.js} +20 -12
  115. package/dist/noelleKit-IDYWuE-6.js +148 -0
  116. package/dist/odetteKit-Dw5i_A2J.js +102 -0
  117. package/dist/{ororonKit-DiAd2dlh.js → ororonKit-HsTfXvsW.js} +10 -4
  118. package/dist/pruneKit-PR-_GqAt.js +35 -0
  119. package/dist/{qiqiKit-DCtsriE7.js → qiqiKit-HX-bDmRf.js} +18 -1
  120. package/dist/{raidenKit-BBWMmPFn.js → raidenKit-DUUHQxaP.js} +19 -10
  121. package/dist/{razorKit-CBgdHYic.js → razorKit-BQIWQCQH.js} +44 -12
  122. package/dist/{readCharacterAvatar-C7FufK7J.js → readCharacterAvatar-QXdaK_b0.js} +16 -13
  123. package/dist/removeKitEffects--6C1cGOY.js +6 -0
  124. package/dist/rosariaKit-Dn-L-EAF.js +60 -0
  125. package/dist/sandroneKit-BwVm_e-C.js +4 -0
  126. package/dist/save-BONR7TY2.js +2602 -0
  127. package/dist/save.d.ts +2 -2
  128. package/dist/save.js +1 -1
  129. package/dist/sayuKit-CzPYsFzM.js +68 -0
  130. package/dist/{sceneExport-BZaF05K-.d.ts → sceneExport-BmTj9FRK.d.ts} +2 -1
  131. package/dist/{sceneExport-DiiIi0PM.js → sceneExport-p78Obc7R.js} +2 -1
  132. package/dist/sceneExport.d.ts +1 -1
  133. package/dist/sceneExport.js +1 -1
  134. package/dist/sethosKit-Dnj7Y8q0.js +7 -0
  135. package/dist/shenheKit-DyoqKfsa.js +153 -0
  136. package/dist/sigewinneKit-a6h94xdX.js +22 -0
  137. package/dist/spendKitResource-BMOGVq9a.js +10 -0
  138. package/dist/style.css +1353 -395
  139. package/dist/{sucroseKit-DF0jcI2y.js → sucroseKit-D2zXGz1h.js} +32 -8
  140. package/dist/{tartagliaKit-Bbtww18S.js → tartagliaKit-BwGA6N1Y.js} +16 -15
  141. package/dist/terrainTileWorker.js +3 -3
  142. package/dist/thomaKit-BJfMbEIx.js +96 -0
  143. package/dist/tighnariKit-RYM02O_t.js +46 -0
  144. package/dist/varesaKit-tl3QT31L.js +37 -0
  145. package/dist/{ventiKit-BcQkbI-z.js → ventiKit-FYuBhbPY.js} +5 -4
  146. package/dist/vesnaKit-CmM1CVe6.js +4 -0
  147. package/dist/vodyanitsaKit-7WoQIUHv.js +4 -0
  148. package/dist/wriothesleyKit-BtcN4_Bv.js +103 -0
  149. package/dist/{xianglingKit-BPQN7cxU.js → xianglingKit-BQjcNu7M.js} +9 -3
  150. package/dist/xianyunKit-D76nKV4f.js +108 -0
  151. package/dist/{xiaoKit-BDI_SODG.js → xiaoKit-DPd4UkOr.js} +36 -21
  152. package/dist/xilonenKit-BykTSGYe.js +42 -0
  153. package/dist/{xingqiuKit-Cv8JYeYO.js → xingqiuKit-BZz9JUTt.js} +35 -14
  154. package/dist/{xinyanKit-CffF-Er0.js → xinyanKit-DN0kCOuW.js} +41 -16
  155. package/dist/{yaeMikoKit-xAKYm2K6.js → yaeMikoKit-hw1By6wO.js} +17 -4
  156. package/dist/{yanfeiKit-C6elnkmn.js → yanfeiKit-CnIuIJrr.js} +37 -4
  157. package/dist/yaoyaoKit-5ny2CT69.js +202 -0
  158. package/dist/yelanKit-CQcriSs3.js +79 -0
  159. package/dist/yoimiyaKit-BlohgeOv.js +91 -0
  160. package/dist/yunjinKit-BJEkLGZt.js +87 -0
  161. package/dist/{zhongliKit-uMdKUTP-.js → zhongliKit-Cm3k5sX5.js} +21 -11
  162. package/dist/zibaiKit-C0elIlw8.js +63 -0
  163. package/package.json +10 -13
  164. package/dist/ainoKit-Dy3vTp3B.js +0 -28
  165. package/dist/albedoKit-CU5N1Hnm.js +0 -43
  166. package/dist/aloyKit-C7x_Jf16.js +0 -32
  167. package/dist/amberKit-BO7ZAQgU.js +0 -38
  168. package/dist/arlecchinoKit-DJawwVVl.js +0 -4
  169. package/dist/ayakaKit-Bu_QuYsR.js +0 -26
  170. package/dist/baizhuKit-8_4IzZ3A.js +0 -33
  171. package/dist/barbaraKit-B5DpLyHJ.js +0 -58
  172. package/dist/characterPack-zycIUHje.js +0 -641
  173. package/dist/chascaKit-C1Csj0Yf.js +0 -4
  174. package/dist/chevreuseKit-DDHga8Tj.js +0 -20
  175. package/dist/citlaliKit-sv7XrzVx.js +0 -4
  176. package/dist/clorindeKit-DxtRn_To.js +0 -4
  177. package/dist/colleiKit-CO_n9qra.js +0 -28
  178. package/dist/columbinaKit-DrW0EvqN.js +0 -31
  179. package/dist/constants-BqrUOf2M.js +0 -48
  180. package/dist/dahliaKit-B8fOPvvi.js +0 -16
  181. package/dist/dehyaKit-42tyEI0Z.js +0 -4
  182. package/dist/dilucKit-EwLUSPgs.js +0 -63
  183. package/dist/dionaKit-89B1hwYL.js +0 -48
  184. package/dist/escoffierKit-Da5UAvAF.js +0 -48
  185. package/dist/flinsKit-GUnFJdUg.js +0 -9
  186. package/dist/freminetKit-CpwsVmTT.js +0 -4
  187. package/dist/gamingKit-D9ekWGMJ.js +0 -4
  188. package/dist/gorouKit-DkpaGNA8.js +0 -94
  189. package/dist/heizouKit-B6kRXVCP.js +0 -35
  190. package/dist/huTaoKit-drjrzLjf.js +0 -58
  191. package/dist/iansanKit-RNjD9nSq.js +0 -4
  192. package/dist/ifaKit-CXWxCOPI.js +0 -4
  193. package/dist/illugaKit-BFtXIf3P.js +0 -4
  194. package/dist/ineffaKit-3J0FJo2E.js +0 -51
  195. package/dist/jahodaKit-C1sdSDfr.js +0 -97
  196. package/dist/kachinaKit-DWLNDpgO.js +0 -4
  197. package/dist/kaeyaKit-DU8Df4RE.js +0 -14
  198. package/dist/kavehKit-BWoAaKs4.js +0 -9
  199. package/dist/keqingKit-uGsb_p7t.js +0 -12
  200. package/dist/kinichKit-Dp3lNUJt.js +0 -22
  201. package/dist/kiraraKit-CCAGXouk.js +0 -43
  202. package/dist/kleeKit-BzcJLC2i.js +0 -48
  203. package/dist/kokomiKit-DBdTlTDr.js +0 -42
  204. package/dist/kujouSaraKit-DDE-24jd.js +0 -56
  205. package/dist/lanYanKit-B3lwZ7OW.js +0 -18
  206. package/dist/laumaKit-DkG-i0rL.js +0 -59
  207. package/dist/laylaKit-DYtz0tSZ.js +0 -41
  208. package/dist/lisaKit-CWUiiam1.js +0 -22
  209. package/dist/lynetteKit-BnNW81Pm.js +0 -20
  210. package/dist/lyneyKit-D6yTnfFv.js +0 -19
  211. package/dist/mavuikaKit-CUC1kHRJ.js +0 -4
  212. package/dist/mizukiKit-DY-gHM8N.js +0 -4
  213. package/dist/monaKit-B748iTEy.js +0 -26
  214. package/dist/mualaniKit-B-Km_dcQ.js +0 -4
  215. package/dist/nahidaKit-BGRc-swN.js +0 -4
  216. package/dist/naviaKit-CHh2VdX3.js +0 -64
  217. package/dist/neferKit-BTALTTiV.js +0 -4
  218. package/dist/neuvilletteKit-DAfX_2tC.js +0 -4
  219. package/dist/nicoleKit-BVjL7LI0.js +0 -4
  220. package/dist/nilouKit-BgM4u-hg.js +0 -52
  221. package/dist/noelleKit-DDewnuJ9.js +0 -48
  222. package/dist/pruneKit-CHkC_OSB.js +0 -4
  223. package/dist/rosariaKit-D_RDXpLp.js +0 -29
  224. package/dist/save-CEbj1mOx.js +0 -854
  225. package/dist/sayuKit-Hnv4iA3_.js +0 -35
  226. package/dist/sethosKit-8EK04AA4.js +0 -4
  227. package/dist/shenheKit-DqrG2I4S.js +0 -50
  228. package/dist/sigewinneKit-CYJyadTr.js +0 -10
  229. package/dist/thomaKit-Zm5AJ9Fm.js +0 -64
  230. package/dist/tighnariKit-CSa_Yqpp.js +0 -4
  231. package/dist/varesaKit-CMXLbBv9.js +0 -4
  232. package/dist/wriothesleyKit-CBTnYlOy.js +0 -4
  233. package/dist/xianyunKit-CVhuYBde.js +0 -4
  234. package/dist/xilonenKit-YAVOPRwm.js +0 -4
  235. package/dist/yaoyaoKit-CaPIIp-i.js +0 -4
  236. package/dist/yelanKit-Da0oQ6yu.js +0 -33
  237. package/dist/yoimiyaKit-DTENWB4y.js +0 -49
  238. package/dist/yunjinKit-PP4yeyn1.js +0 -22
  239. package/dist/zibaiKit-Dq6mFWSx.js +0 -4
@@ -0,0 +1,133 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as getBuffedCombatant } from "./getBuffedCombatant-B7Fe7E_P.js";
3
+ import { t as getPartyMember } from "./getPartyMember-CPyR8-gA.js";
4
+ import "./KitEventKind-CGMNB7W9.js";
5
+ import { t as findKitStatus } from "./findKitStatus-c5kVgwo6.js";
6
+ import { t as addKitStatus } from "./addKitStatus-B0kqLgt1.js";
7
+ import { buffKitMember, buffKitTeam, castKitSummon, checkIsInKitField, checkIsKitStatusActive, createAheadBody, createKitBody, findStandingKitSummon, startKitCooldown } from "./index.js";
8
+ //#region src/services/kit/characters/albedoKit.ts
9
+ const SOLAR_ISOTOMA_ID = "albedo-solar-isotoma";
10
+ const TRANSIENT_BLOSSOM_COOLDOWN_STATUS_ID = "albedo-transient-blossom-cooldown";
11
+ const CALCITE_MIGHT_ASCENSION = 1;
12
+ const CALCITE_MIGHT_HEALTH_SHARE = .5;
13
+ const CALCITE_MIGHT_DAMAGE_BONUS = .25;
14
+ const TECTONIC_TIDE_ASCENSION = 4;
15
+ const TECTONIC_TIDE_ELEMENTAL_MASTERY = 125;
16
+ const TECTONIC_TIDE_ELEMENTAL_MASTERY_SECONDS = 10;
17
+ const TECTONIC_TIDE_SOURCE = "albedo-tectonic-tide";
18
+ const ALBEDO_CONSTELLATION_1 = 1;
19
+ const ALBEDO_CONSTELLATION_4 = 4;
20
+ const CONSTELLATION_4_PLUNGING_ATTACK_BONUS = .3;
21
+ const CONSTELLATION_4_SECONDS = 1;
22
+ const CONSTELLATION_4_CHECK_SECONDS = .3;
23
+ const CONSTELLATION_4_CHECK_STATUS_ID = "albedo-constellation-4-check";
24
+ const CONSTELLATION_4_SOURCE = "albedo-constellation-4";
25
+ const TRANSIENT_BLOSSOM_ENERGY = 1.2;
26
+ const SOLAR_ISOTOMA_DEFENSE_PERCENT = .5;
27
+ const SOLAR_ISOTOMA_DEFENSE_SECONDS = 20;
28
+ const FLOWER_OF_EDEN_SOURCE = "albedo-flower-of-eden";
29
+ const ALBEDO_CONSTELLATION_2 = 2;
30
+ const FATAL_RECKONING_DEFENSE_SHARE = .3;
31
+ const FATAL_RECKONING_MAX_STACKS = 4;
32
+ const FATAL_RECKONING_SECONDS = 30;
33
+ const FATAL_RECKONING_STATUS_ID = "albedo-fatal-reckoning";
34
+ const ALBEDO_CHARACTER_ID = 10000038;
35
+ const addFatalReckoningStack = (kitEffectState, combatant) => {
36
+ const { characterId } = combatant;
37
+ const stacks = checkIsKitStatusActive(kitEffectState.effects, characterId, FATAL_RECKONING_STATUS_ID) ? findKitStatus(kitEffectState.effects, characterId, FATAL_RECKONING_STATUS_ID)?.stacks ?? 0 : 0;
38
+ addKitStatus(kitEffectState, characterId, {
39
+ id: FATAL_RECKONING_STATUS_ID,
40
+ secondsRemaining: FATAL_RECKONING_SECONDS,
41
+ stacks: Math.min(FATAL_RECKONING_MAX_STACKS, stacks + 1)
42
+ });
43
+ };
44
+ const withFatalReckoningBonus = (hit, bonus) => ({
45
+ ...hit,
46
+ additiveBaseDamageBonus: (combatant) => (hit.additiveBaseDamageBonus?.(combatant) ?? 0) + bonus
47
+ });
48
+ const consumeFatalReckoningBonus = (context) => {
49
+ const { activeCombatant: combatant, characterIdCombatantMap, kitEffectState, party } = context;
50
+ const { characterId } = combatant;
51
+ if (combatant.constellationCount < ALBEDO_CONSTELLATION_2 || !checkIsKitStatusActive(kitEffectState.effects, characterId, FATAL_RECKONING_STATUS_ID)) return 0;
52
+ const status = findKitStatus(kitEffectState.effects, characterId, FATAL_RECKONING_STATUS_ID);
53
+ const stacks = status?.stacks ?? 0;
54
+ if (status) status.stacks = 0;
55
+ const { defense } = getBuffedCombatant(combatant, kitEffectState.effects, party, characterIdCombatantMap).attributes;
56
+ return stacks * FATAL_RECKONING_DEFENSE_SHARE * defense;
57
+ };
58
+ const createAlbedoKitBehaviour = ({ readHit, readHits, readParameter, readSeconds }) => {
59
+ const solarIsotomaAheadMetres = readParameter("solarIsotomaAheadMetres");
60
+ const solarIsotomaRadius = readParameter("solarIsotomaRadius");
61
+ const solarIsotomaSeconds = readSeconds("solarIsotomaDuration");
62
+ const transientBlossomCooldownSeconds = readSeconds("transientBlossomCooldown");
63
+ const solarIsotomaHit = readHit("solarIsotoma");
64
+ const transientBlossom = readHit("transientBlossom");
65
+ const fatalBlossoms = readHits("fatalBlossoms");
66
+ return {
67
+ burst: { onStart: (context) => {
68
+ const { activeCombatant: combatant, kitEffectState, party } = context;
69
+ const fatalReckoningBonus = consumeFatalReckoningBonus(context);
70
+ const blossoms = fatalReckoningBonus === 0 ? fatalBlossoms : fatalBlossoms.map((hit) => withFatalReckoningBonus(hit, fatalReckoningBonus));
71
+ const solarIsotoma = findStandingKitSummon(kitEffectState.effects, SOLAR_ISOTOMA_ID, combatant.characterId);
72
+ if (solarIsotoma && solarIsotoma.secondsRemaining > 0) castKitSummon(kitEffectState, solarIsotoma.body, solarIsotoma.combatant, blossoms, { attackTag: "ElementalBurst" });
73
+ if (combatant.ascension < TECTONIC_TIDE_ASCENSION) return;
74
+ buffKitTeam(kitEffectState, party, {
75
+ amount: TECTONIC_TIDE_ELEMENTAL_MASTERY,
76
+ attribute: "FIGHT_PROP_ELEMENT_MASTERY",
77
+ secondsRemaining: TECTONIC_TIDE_ELEMENTAL_MASTERY_SECONDS,
78
+ source: TECTONIC_TIDE_SOURCE
79
+ });
80
+ } },
81
+ getStrikeDamageBonus: ({ combatant, hit }, enemy) => combatant.ascension >= CALCITE_MIGHT_ASCENSION && hit === transientBlossom && enemy.health / enemy.maxHealth < CALCITE_MIGHT_HEALTH_SHARE ? CALCITE_MIGHT_DAMAGE_BONUS : 0,
82
+ onKitEvent: (event, { kitEffectState, party }, combatant) => {
83
+ if (event.kind !== "DamageTaken") return;
84
+ const { characterId } = combatant;
85
+ const { effects } = kitEffectState;
86
+ const solarIsotoma = findStandingKitSummon(effects, SOLAR_ISOTOMA_ID, characterId);
87
+ if (!solarIsotoma || solarIsotoma.secondsRemaining <= 0) return;
88
+ const { position } = event.enemy;
89
+ if (Math.hypot(position.x - solarIsotoma.body.position.x, position.z - solarIsotoma.body.position.z) > solarIsotomaRadius || !startKitCooldown(kitEffectState, characterId, TRANSIENT_BLOSSOM_COOLDOWN_STATUS_ID, transientBlossomCooldownSeconds)) return;
90
+ castKitSummon(kitEffectState, createKitBody(position), solarIsotoma.combatant, [transientBlossom], { attackTag: "ElementalSkill" });
91
+ if (combatant.constellationCount >= ALBEDO_CONSTELLATION_2) addFatalReckoningStack(kitEffectState, combatant);
92
+ if (combatant.constellationCount < ALBEDO_CONSTELLATION_1) return;
93
+ const member = getPartyMember(party, characterId);
94
+ member.energy = Math.min(combatant.kit.burstEnergyCost, member.energy + TRANSIENT_BLOSSOM_ENERGY);
95
+ },
96
+ onStep: ({ activeCombatant, body, kitEffectState }, combatant) => {
97
+ if (combatant.constellationCount < ALBEDO_CONSTELLATION_4) return;
98
+ if (!startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_4_CHECK_STATUS_ID, CONSTELLATION_4_CHECK_SECONDS)) return;
99
+ const solarIsotoma = findStandingKitSummon(kitEffectState.effects, SOLAR_ISOTOMA_ID, combatant.characterId);
100
+ if (!solarIsotoma || solarIsotoma.secondsRemaining <= 0 || !checkIsInKitField({
101
+ centre: solarIsotoma.body.position,
102
+ radius: solarIsotomaRadius
103
+ }, body.position)) return;
104
+ buffKitMember(kitEffectState, activeCombatant.characterId, {
105
+ amount: CONSTELLATION_4_PLUNGING_ATTACK_BONUS,
106
+ attribute: "FIGHT_PROP_PLUNGING_ATTACK_ADD_HURT",
107
+ secondsRemaining: CONSTELLATION_4_SECONDS,
108
+ source: CONSTELLATION_4_SOURCE
109
+ });
110
+ },
111
+ skill: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) => {
112
+ if (combatant.constellationCount >= ALBEDO_CONSTELLATION_1) buffKitMember(kitEffectState, combatant.characterId, {
113
+ amount: SOLAR_ISOTOMA_DEFENSE_PERCENT,
114
+ attribute: "FIGHT_PROP_DEFENSE_PERCENT",
115
+ secondsRemaining: SOLAR_ISOTOMA_DEFENSE_SECONDS,
116
+ source: FLOWER_OF_EDEN_SOURCE
117
+ });
118
+ for (const effect of kitEffectState.effects) if (effect.kind === "summon" && effect.id === SOLAR_ISOTOMA_ID) effect.secondsRemaining = 0;
119
+ if (combatant.constellationCount >= ALBEDO_CONSTELLATION_4) addKitStatus(kitEffectState, combatant.characterId, {
120
+ id: CONSTELLATION_4_CHECK_STATUS_ID,
121
+ secondsRemaining: solarIsotomaHit.hitmarkSeconds + CONSTELLATION_4_CHECK_SECONDS
122
+ });
123
+ castKitSummon(kitEffectState, createAheadBody(body, solarIsotomaAheadMetres), combatant, [solarIsotomaHit], {
124
+ attackTag: "ElementalSkill",
125
+ id: SOLAR_ISOTOMA_ID,
126
+ secondsRemaining: solarIsotomaSeconds,
127
+ spawnSeconds: solarIsotomaHit.hitmarkSeconds
128
+ });
129
+ } }
130
+ };
131
+ };
132
+ //#endregion
133
+ export { ALBEDO_CHARACTER_ID, createAlbedoKitBehaviour };
@@ -1,10 +1,18 @@
1
- import "./characterPack-zycIUHje.js";
2
- import { t as addKitEffect } from "./addKitEffect-DBqTfm_3.js";
3
- import { addKitStatus, buffKitMember, castKitField, castKitSummon, findKitStatus, getDeployedCharacterIds, scheduleKitTask, startKitCooldown } from "./index.js";
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as getDeployedCharacterIds } from "./getDeployedCharacterIds-ED-6JY4w.js";
3
+ import "./KitEventKind-CGMNB7W9.js";
4
+ import { t as addKitEffect } from "./addKitEffect-B922PsCn.js";
5
+ import { t as findKitStatus } from "./findKitStatus-c5kVgwo6.js";
6
+ import { t as addKitStatus } from "./addKitStatus-B0kqLgt1.js";
7
+ import { t as castKitField } from "./castKitField-_74Co83C.js";
8
+ import { buffKitMember, castKitSummon, changeKitSkillCooldown, elementalMasteryMultiplier, scheduleKitTask, startKitCooldown } from "./index.js";
4
9
  import { takeOne } from "@esposter/shared";
5
10
  //#region src/services/kit/characters/alhaithamKit.ts
6
11
  const ASCENSION_1 = 1;
7
12
  const ASCENSION_4 = 4;
13
+ const CONSTELLATION_1 = 1;
14
+ const CONSTELLATION_1_ICD_SECONDS = 1;
15
+ const CONSTELLATION_1_ICD_STATUS_ID = "alhaitham-c1-cut-icd";
8
16
  const CONSTELLATION_2 = 2;
9
17
  const CONSTELLATION_4 = 4;
10
18
  const CONSTELLATION_6 = 6;
@@ -84,7 +92,6 @@ const addConstellation6Buffs = (kitEffectState, characterId, overflow, buffs) =>
84
92
  });
85
93
  }
86
94
  };
87
- const elementalMasteryMultiplier = (combatant, multiplier) => combatant.attributes.attributeTotalMap["FIGHT_PROP_ELEMENT_MASTERY"] * multiplier;
88
95
  const getSkillMirrorGain = (effects, characterId) => getMirrorCount(effects, characterId) === 0 ? 2 : 1;
89
96
  const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds, readSecondsList }) => {
90
97
  const mirrorSecondsList = readSecondsList("universalityMirrorDelays");
@@ -115,7 +122,14 @@ const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds
115
122
  constellation6CriticalRate,
116
123
  constellation6Seconds: readSeconds("constellation6Duration")
117
124
  };
118
- const projectionHitBehaviour = { additiveBaseDamageBonus: (striker) => elementalMasteryMultiplier(striker, projectionElementalMasteryShare) };
125
+ const projectionHitBehaviour = {
126
+ additiveBaseDamageBonus: (striker) => elementalMasteryMultiplier(striker, projectionElementalMasteryShare),
127
+ onStrike: ({ kitEffectState, party }, { combatant }) => {
128
+ if (combatant.constellationCount < CONSTELLATION_1) return;
129
+ if (!startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_1_ICD_STATUS_ID, CONSTELLATION_1_ICD_SECONDS)) return;
130
+ changeKitSkillCooldown(party, combatant.characterId, -1.2);
131
+ }
132
+ };
119
133
  const projectionAttacks = [
120
134
  readHits("projectionAttackOneMirror", projectionHitBehaviour),
121
135
  readHits("projectionAttackTwoMirrors", projectionHitBehaviour),
@@ -156,7 +170,7 @@ const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds
156
170
  if (isMirrorSource && ascension >= ASCENSION_1 && startKitCooldown(kitEffectState, characterId, ASCENSION_1_ICD_STATUS_ID, ascension1IcdSeconds)) gainMirrors(kitEffectState, body, combatant, 1);
157
171
  const count = getMirrorCount(kitEffectState.effects, characterId);
158
172
  if (count === 0 || !startKitCooldown(kitEffectState, characterId, PROJECTION_ICD_STATUS_ID, projectionCooldownSeconds)) return;
159
- castKitSummon(kitEffectState, body, combatant, takeOne(projectionAttacks, count - 1));
173
+ castKitSummon(kitEffectState, body, combatant, takeOne(projectionAttacks, count - 1), { attackTag: "ElementalSkill" });
160
174
  };
161
175
  const strikeHitBehaviour = { onStrike: (context, strike) => triggerProjection(context, strike, false) };
162
176
  const mirrorSourceHitBehaviour = { onStrike: (context, strike) => triggerProjection(context, strike, true) };
@@ -168,7 +182,7 @@ const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds
168
182
  burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState, party }) => {
169
183
  const { characterId, constellationCount } = combatant;
170
184
  const consumed = getMirrorCount(kitEffectState.effects, characterId);
171
- castKitSummon(kitEffectState, body, combatant, particularFieldHits.slice(0, burstBaseHitCount + burstHitCountPerMirror * consumed));
185
+ castKitSummon(kitEffectState, body, combatant, particularFieldHits.slice(0, burstBaseHitCount + burstHitCountPerMirror * consumed), { attackTag: "ElementalBurst" });
172
186
  setMirrorCount(kitEffectState, characterId, 0);
173
187
  if (constellationCount >= CONSTELLATION_4 && consumed > 0) for (const memberId of getDeployedCharacterIds(party)) {
174
188
  if (memberId === characterId) continue;
@@ -192,7 +206,7 @@ const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds
192
206
  }, { id: MIRROR_REGEN_TASK_ID });
193
207
  } },
194
208
  chargedAttack: { hits: kit.chargedAttack.hits.map(() => mirrorSourceHitBehaviour) },
195
- getStrikeDamageBonus: ({ combatant, hit }) => combatant.ascension >= ASCENSION_4 && (hit.internalCooldownTag === "ElementalBurst" || hit.internalCooldownTag === "ElementalSkill") ? Math.min(combatant.attributes.attributeTotalMap["FIGHT_PROP_ELEMENT_MASTERY"] * ascension4DamagePerElementalMastery, ascension4DamageMax) : 0,
209
+ getStrikeDamageBonus: ({ combatant, hit }) => combatant.ascension >= ASCENSION_4 && (hit.internalCooldownTag === "ElementalBurst" || hit.internalCooldownTag === "ElementalSkill") ? Math.min(elementalMasteryMultiplier(combatant, ascension4DamagePerElementalMastery), ascension4DamageMax) : 0,
196
210
  normalAttacks: kit.normalAttacks.map(({ hits }) => ({ hits: hits.map(() => strikeHitBehaviour) })),
197
211
  onKitEvent: (event, { kitEffectState }, combatant) => {
198
212
  if (event.kind !== "CharacterSwapped" || event.previousCharacterId !== combatant.characterId) return;
@@ -0,0 +1,67 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as addKitEffect } from "./addKitEffect-B922PsCn.js";
3
+ import { t as addKitStatus } from "./addKitStatus-B0kqLgt1.js";
4
+ import { t as spendKitResource } from "./spendKitResource-BMOGVq9a.js";
5
+ import { t as gainKitResource } from "./gainKitResource-Cb8C2L3s.js";
6
+ import { buffKitMember, buffKitTeam, checkHasKitStatus, scheduleKitTask } from "./index.js";
7
+ //#region src/services/kit/characters/aloyKit.ts
8
+ const COIL_RUSHING_ICE_STACKS = 4;
9
+ const COIL_RESOURCE_ID = "aloy-coil";
10
+ const RUSHING_ICE_STATUS_ID = "aloy-rushing-ice";
11
+ const ASCENSION_1 = 1;
12
+ const ASCENSION_1_ATTACK_SHARE = .08;
13
+ const ASCENSION_1_SELF_ATTACK_SHARE = .08;
14
+ const ASCENSION_1_SOURCE = "aloy-ascension-1";
15
+ const ASCENSION_1_SELF_SOURCE = "aloy-ascension-1-self";
16
+ const ASCENSION_4 = 4;
17
+ const ASCENSION_4_CRYO_SHARE_PER_STACK = .035;
18
+ const ASCENSION_4_MAX_STACKS = 10;
19
+ const ASCENSION_4_SOURCE = "aloy-ascension-4";
20
+ const addCryoStacks = (kitEffectState, characterId, stacks, secondsRemaining) => buffKitMember(kitEffectState, characterId, {
21
+ amount: Math.min(stacks, ASCENSION_4_MAX_STACKS) * ASCENSION_4_CRYO_SHARE_PER_STACK,
22
+ attribute: "FIGHT_PROP_ICE_ADD_HURT",
23
+ secondsRemaining,
24
+ source: ASCENSION_4_SOURCE
25
+ });
26
+ const createAloyKitBehaviour = ({ readSeconds }) => {
27
+ const rushingIceSeconds = readSeconds("rushingIceDuration");
28
+ const addCoilStack = ({ kitEffectState, party }, { combatant }) => {
29
+ if (checkHasKitStatus(kitEffectState.effects, combatant.characterId, RUSHING_ICE_STATUS_ID)) return;
30
+ if (gainKitResource(kitEffectState, combatant.characterId, COIL_RESOURCE_ID, 1, COIL_RUSHING_ICE_STACKS) < COIL_RUSHING_ICE_STACKS) return;
31
+ spendKitResource(kitEffectState, combatant.characterId, COIL_RESOURCE_ID);
32
+ addKitEffect(kitEffectState, {
33
+ characterId: combatant.characterId,
34
+ element: "Ice",
35
+ kind: "infusion",
36
+ secondsRemaining: rushingIceSeconds
37
+ });
38
+ addKitStatus(kitEffectState, combatant.characterId, {
39
+ id: RUSHING_ICE_STATUS_ID,
40
+ secondsRemaining: rushingIceSeconds
41
+ });
42
+ if (combatant.ascension >= ASCENSION_1) {
43
+ buffKitTeam(kitEffectState, party, {
44
+ amount: ASCENSION_1_ATTACK_SHARE,
45
+ attribute: "FIGHT_PROP_ATTACK_PERCENT",
46
+ secondsRemaining: rushingIceSeconds,
47
+ source: ASCENSION_1_SOURCE
48
+ });
49
+ buffKitMember(kitEffectState, combatant.characterId, {
50
+ amount: ASCENSION_1_SELF_ATTACK_SHARE,
51
+ attribute: "FIGHT_PROP_ATTACK_PERCENT",
52
+ secondsRemaining: rushingIceSeconds,
53
+ source: ASCENSION_1_SELF_SOURCE
54
+ });
55
+ }
56
+ if (combatant.ascension < ASCENSION_4) return;
57
+ addCryoStacks(kitEffectState, combatant.characterId, 1, rushingIceSeconds);
58
+ for (let second = 1; second < ASCENSION_4_MAX_STACKS; second++) scheduleKitTask(kitEffectState, combatant.characterId, second, ({ kitEffectState: tickKitEffectState }) => addCryoStacks(tickKitEffectState, combatant.characterId, second + 1, rushingIceSeconds - second));
59
+ };
60
+ return { skill: { hits: [
61
+ {},
62
+ { onStrike: addCoilStack },
63
+ { onStrike: addCoilStack }
64
+ ] } };
65
+ };
66
+ //#endregion
67
+ export { createAloyKitBehaviour };
@@ -0,0 +1,4 @@
1
+ //#region src/services/kit/characters/alyoshaKit.ts
2
+ const createAlyoshaKitBehaviour = () => ({});
3
+ //#endregion
4
+ export { createAlyoshaKitBehaviour };
@@ -0,0 +1,86 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { buffKitTeam, castKitSummon, castKitTaunt, createConstellationSkillChargeBonus, getKitMaxHealth, queueKitPassiveHit } from "./index.js";
3
+ //#region src/services/kit/characters/amberKit.ts
4
+ const EVERY_ARROW_FINDS_ITS_TARGET_ASCENSION = 1;
5
+ const EVERY_ARROW_FINDS_ITS_TARGET_CRITICAL_RATE = .1;
6
+ const CONSTELLATION_4 = 4;
7
+ const CONSTELLATION_4_SKILL_COOLDOWN_MULTIPLIER = .8;
8
+ const CONSTELLATION_1 = 1;
9
+ const CONSTELLATION_1_SECOND_ARROW_SHARE = .2;
10
+ const CONSTELLATION_6 = 6;
11
+ const CONSTELLATION_6_SHARE = .15;
12
+ const CONSTELLATION_6_SECONDS = 10;
13
+ const FIERY_RAIN_SOURCE = "amber-fiery-rain";
14
+ const addEveryArrowCriticalRate = (combatant) => {
15
+ const { attributeTotalMap } = combatant.attributes;
16
+ return {
17
+ ...combatant,
18
+ attributes: {
19
+ ...combatant.attributes,
20
+ attributeTotalMap: {
21
+ ...attributeTotalMap,
22
+ ["FIGHT_PROP_CRITICAL"]: attributeTotalMap["FIGHT_PROP_CRITICAL"] + EVERY_ARROW_FINDS_ITS_TARGET_CRITICAL_RATE
23
+ }
24
+ }
25
+ };
26
+ };
27
+ const widenFieryRainArrows = (arrows) => arrows.map((arrow) => ({
28
+ ...arrow,
29
+ hitArea: {
30
+ ...arrow.hitArea,
31
+ radius: arrow.hitArea.radius * 1.3
32
+ }
33
+ }));
34
+ const createAmberKitBehaviour = ({ readHit, readHits, readParameter, readSeconds }) => {
35
+ const bunnyExplosion = readHit("baronBunnyExplosion");
36
+ const bunnyMaxHealthShare = readParameter("baronBunnyMaxHealthShare");
37
+ const bunnySeconds = readSeconds("baronBunnySeconds");
38
+ const fieryRainArrows = readHits("fieryRainArrows");
39
+ const everyArrowFindsItsTargetFieryRainArrows = widenFieryRainArrows(fieryRainArrows);
40
+ let secondArrowFired = false;
41
+ return {
42
+ burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState, party }) => {
43
+ const hasEveryArrowFindsItsTarget = combatant.ascension >= EVERY_ARROW_FINDS_ITS_TARGET_ASCENSION;
44
+ castKitSummon(kitEffectState, body, hasEveryArrowFindsItsTarget ? addEveryArrowCriticalRate(combatant) : combatant, hasEveryArrowFindsItsTarget ? everyArrowFindsItsTargetFieryRainArrows : fieryRainArrows, { attackTag: "ElementalBurst" });
45
+ if (combatant.constellationCount >= CONSTELLATION_6) {
46
+ const buff = {
47
+ amount: CONSTELLATION_6_SHARE,
48
+ secondsRemaining: CONSTELLATION_6_SECONDS,
49
+ source: FIERY_RAIN_SOURCE
50
+ };
51
+ buffKitTeam(kitEffectState, party, {
52
+ ...buff,
53
+ attribute: "FIGHT_PROP_MOVE_SPEED"
54
+ });
55
+ buffKitTeam(kitEffectState, party, {
56
+ ...buff,
57
+ attribute: "FIGHT_PROP_ATTACK_PERCENT"
58
+ });
59
+ }
60
+ } },
61
+ chargedAttack: {
62
+ hits: [{ onStrike: (context, { combatant, hit }) => {
63
+ if (combatant.constellationCount < CONSTELLATION_1 || secondArrowFired) return;
64
+ secondArrowFired = true;
65
+ queueKitPassiveHit(context, combatant, {
66
+ ...hit,
67
+ attackTag: void 0,
68
+ onStrike: void 0,
69
+ talentMultiplier: hit.talentMultiplier * CONSTELLATION_1_SECOND_ARROW_SHARE
70
+ });
71
+ } }],
72
+ onStart: () => {
73
+ secondArrowFired = false;
74
+ }
75
+ },
76
+ getSkillChargeBonus: createConstellationSkillChargeBonus(CONSTELLATION_4),
77
+ getSkillCooldownMultiplier: ({ activeCombatant }) => activeCombatant.constellationCount >= CONSTELLATION_4 ? CONSTELLATION_4_SKILL_COOLDOWN_MULTIPLIER : 1,
78
+ skill: { onStart: ({ activeCombatant: combatant, body, characterIdCombatantMap, kitEffectState, party }) => castKitTaunt(kitEffectState, body, combatant, {
79
+ explosion: bunnyExplosion,
80
+ health: bunnyMaxHealthShare * getKitMaxHealth(combatant, kitEffectState.effects, party, characterIdCombatantMap),
81
+ secondsRemaining: bunnySeconds
82
+ }) }
83
+ };
84
+ };
85
+ //#endregion
86
+ export { createAmberKitBehaviour };
@@ -0,0 +1,17 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as getPartyMember } from "./getPartyMember-CPyR8-gA.js";
3
+ import { scheduleKitTask, toKitSeconds } from "./index.js";
4
+ //#region src/services/kit/characters/arlecchinoKit.ts
5
+ const PYRO_DAMAGE_BONUS = .4;
6
+ const BURST_SKILL_RESET_FRAMES = 107;
7
+ const createArlecchinoKitBehaviour = () => ({
8
+ burst: { onStart: ({ activeCombatant: combatant, kitEffectState }) => scheduleKitTask(kitEffectState, combatant.characterId, toKitSeconds(BURST_SKILL_RESET_FRAMES), ({ party }) => {
9
+ getPartyMember(party, combatant.characterId).skillCooldownSeconds = 0;
10
+ }) },
11
+ getPassiveBonuses: () => [{
12
+ amount: PYRO_DAMAGE_BONUS,
13
+ attribute: "FIGHT_PROP_FIRE_ADD_HURT"
14
+ }]
15
+ });
16
+ //#endregion
17
+ export { createArlecchinoKitBehaviour };
@@ -0,0 +1,85 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as addKitEffect } from "./addKitEffect-B922PsCn.js";
3
+ import { t as findKitStatus } from "./findKitStatus-c5kVgwo6.js";
4
+ import { t as addKitStatus } from "./addKitStatus-B0kqLgt1.js";
5
+ import { castKitSummon, changeKitSkillCooldown, startKitCooldown } from "./index.js";
6
+ //#region src/services/kit/characters/ayakaKit.ts
7
+ const BLIZZARD_BLADE_SEKI_NO_TO_CONSTELLATION = 2;
8
+ const SENHO_INFUSION_SECONDS = 5;
9
+ const CONSTELLATION_1 = 1;
10
+ const CONSTELLATION_1_CHANCE = .5;
11
+ const CONSTELLATION_1_ICD_SECONDS = .1;
12
+ const CONSTELLATION_1_ICD_STATUS_ID = "ayaka-snowswept-sakura-icd";
13
+ const ASCENSION_1 = 1;
14
+ const AMATSUMI_KUNITSUMI_SANCTIFICATION_DAMAGE_BONUS = .3;
15
+ const AMATSUMI_KUNITSUMI_SANCTIFICATION_SECONDS = 6;
16
+ const AMATSUMI_KUNITSUMI_SANCTIFICATION_STATUS_ID = "ayaka-amatsumi-kunitsumi-sanctification";
17
+ const CONSTELLATION_4 = 4;
18
+ const CONSTELLATION_4_DEFENCE_REDUCTION = .3;
19
+ const CONSTELLATION_4_SECONDS = 6;
20
+ const CONSTELLATION_4_STATUS_ID = "ayaka-frostflake-defence-reduction";
21
+ const CONSTELLATION_6 = 6;
22
+ const USURAHI_BUTOU_DAMAGE_BONUS = 2.98;
23
+ const USURAHI_BUTOU_RECHARGE_SECONDS = 10;
24
+ const USURAHI_BUTOU_STATUS_ID = "ayaka-usurahi-butou-recharge";
25
+ const getFrostflakeDefenceReduction = ({ constellationCount }) => constellationCount >= CONSTELLATION_4 ? {
26
+ damageTakenBonus: 0,
27
+ defenseReduction: CONSTELLATION_4_DEFENCE_REDUCTION,
28
+ id: CONSTELLATION_4_STATUS_ID,
29
+ secondsRemaining: CONSTELLATION_4_SECONDS
30
+ } : void 0;
31
+ const withFrostflakeDefenceReduction = (hits) => hits.map((hit) => ({
32
+ ...hit,
33
+ enemyStatusAfterDamage: getFrostflakeDefenceReduction
34
+ }));
35
+ const checkIsUsurahiButouOn = (effects, characterId) => {
36
+ const status = findKitStatus(effects, characterId, USURAHI_BUTOU_STATUS_ID);
37
+ return !status || status.secondsRemaining > USURAHI_BUTOU_RECHARGE_SECONDS;
38
+ };
39
+ const snowsweptSakuraHit = { onStrike: ({ kitEffectState, party, random }, { combatant }) => {
40
+ if (combatant.constellationCount < CONSTELLATION_1) return;
41
+ if (!startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_1_ICD_STATUS_ID, CONSTELLATION_1_ICD_SECONDS)) return;
42
+ if (random() < CONSTELLATION_1_CHANCE) changeKitSkillCooldown(party, combatant.characterId, -.3);
43
+ } };
44
+ const chargedAttackHit = { onStrike: (context, strike, enemy) => {
45
+ snowsweptSakuraHit.onStrike?.(context, strike, enemy);
46
+ const { combatant } = strike;
47
+ if (combatant.constellationCount < CONSTELLATION_6) return;
48
+ if (findKitStatus(context.kitEffectState.effects, combatant.characterId, USURAHI_BUTOU_STATUS_ID)) return;
49
+ addKitStatus(context.kitEffectState, combatant.characterId, {
50
+ id: USURAHI_BUTOU_STATUS_ID,
51
+ secondsRemaining: 10.5
52
+ });
53
+ } };
54
+ const createAyakaKitBehaviour = ({ kit, readHits }) => {
55
+ const frostflakeHits = withFrostflakeDefenceReduction(readHits("frostflake"));
56
+ const smallFrostflakeHits = withFrostflakeDefenceReduction(readHits("smallFrostflake"));
57
+ return {
58
+ burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) => {
59
+ castKitSummon(kitEffectState, body, combatant, frostflakeHits, { attackTag: "ElementalBurst" });
60
+ if (combatant.constellationCount < BLIZZARD_BLADE_SEKI_NO_TO_CONSTELLATION) return;
61
+ castKitSummon(kitEffectState, body, combatant, smallFrostflakeHits, { attackTag: "ElementalBurst" });
62
+ castKitSummon(kitEffectState, body, combatant, smallFrostflakeHits, { attackTag: "ElementalBurst" });
63
+ } },
64
+ chargedAttack: { hits: kit.chargedAttack.hits.map(() => chargedAttackHit) },
65
+ getStrikeDamageBonus: ({ attackTag, combatant }, _enemy, _party, effects) => {
66
+ return ((attackTag === "NormalAttack" || attackTag === "ChargedAttack") && findKitStatus(effects, combatant.characterId, AMATSUMI_KUNITSUMI_SANCTIFICATION_STATUS_ID) ? AMATSUMI_KUNITSUMI_SANCTIFICATION_DAMAGE_BONUS : 0) + (attackTag === "ChargedAttack" && combatant.constellationCount >= CONSTELLATION_6 && checkIsUsurahiButouOn(effects, combatant.characterId) ? USURAHI_BUTOU_DAMAGE_BONUS : 0);
67
+ },
68
+ normalAttacks: kit.normalAttacks.map(({ hits }) => ({ hits: hits.map(() => snowsweptSakuraHit) })),
69
+ onSprint: ({ activeCombatant: combatant, kitEffectState }) => addKitEffect(kitEffectState, {
70
+ characterId: combatant.characterId,
71
+ element: "Ice",
72
+ kind: "infusion",
73
+ secondsRemaining: SENHO_INFUSION_SECONDS
74
+ }),
75
+ skill: { onStart: ({ activeCombatant: combatant, kitEffectState }) => {
76
+ if (combatant.ascension < ASCENSION_1) return;
77
+ addKitStatus(kitEffectState, combatant.characterId, {
78
+ id: AMATSUMI_KUNITSUMI_SANCTIFICATION_STATUS_ID,
79
+ secondsRemaining: AMATSUMI_KUNITSUMI_SANCTIFICATION_SECONDS
80
+ });
81
+ } }
82
+ };
83
+ };
84
+ //#endregion
85
+ export { createAyakaKitBehaviour };
@@ -1,4 +1,10 @@
1
- import { addKitStatus, castKitField, castKitSummon, enterKitStance, findKitStatus, scheduleKitTask } from "./index.js";
1
+ import { t as gainPartyMemberEnergy } from "./gainPartyMemberEnergy-D9hiqeb4.js";
2
+ import { t as getPartyMember } from "./getPartyMember-CPyR8-gA.js";
3
+ import "./KitEventKind-CGMNB7W9.js";
4
+ import { t as findKitStatus } from "./findKitStatus-c5kVgwo6.js";
5
+ import { t as addKitStatus } from "./addKitStatus-B0kqLgt1.js";
6
+ import { t as castKitField } from "./castKitField-_74Co83C.js";
7
+ import { castKitSummon, enterKitStance, scheduleKitTask } from "./index.js";
2
8
  import { takeOne } from "@esposter/shared";
3
9
  //#region src/services/kit/characters/ayatoKit.ts
4
10
  const SOUKAI_KANKA_SECONDS = 6;
@@ -14,9 +20,27 @@ const CONSTELLATION_2_NAMISEN_STACKS_MAX = 5;
14
20
  const CONSTELLATION_6 = 6;
15
21
  const HELD_UNTIL_SWAP_SECONDS = Number.POSITIVE_INFINITY;
16
22
  const NAMISEN_STATUS_ID = "ayato-namisen";
23
+ const ASCENSION_4 = 4;
24
+ const MICHIYUKU_HAGETSU_ENERGY = 2;
25
+ const MICHIYUKU_HAGETSU_ENERGY_CEILING = 40;
26
+ const MICHIYUKU_HAGETSU_ID = "ayato-michiyuku-hagetsu";
17
27
  const CONSTELLATION_6_STATUS_ID = "ayato-constellation-6";
18
28
  const countNamisenStacks = (effects, characterId) => findKitStatus(effects, characterId, NAMISEN_STATUS_ID)?.stacks ?? 0;
19
29
  const getNamisenStacksMax = (combatant) => combatant.constellationCount >= CONSTELLATION_2 ? CONSTELLATION_2_NAMISEN_STACKS_MAX : NAMISEN_STACKS_MAX;
30
+ const castMichiyukuHagetsu = (kitEffectState, combatant) => {
31
+ castKitField(kitEffectState, combatant.characterId, {
32
+ x: 0,
33
+ z: 0
34
+ }, {
35
+ id: MICHIYUKU_HAGETSU_ID,
36
+ nextTickSeconds: 1,
37
+ onTick: ({ party }) => {
38
+ if (getPartyMember(party, combatant.characterId).energy < MICHIYUKU_HAGETSU_ENERGY_CEILING) gainPartyMemberEnergy(party, combatant, MICHIYUKU_HAGETSU_ENERGY);
39
+ },
40
+ secondsRemaining: Number.POSITIVE_INFINITY,
41
+ tickIntervalSeconds: 1
42
+ });
43
+ };
20
44
  const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, readParameters, readSeconds, readSecondsList }) => {
21
45
  const namisenShare = readParameter("namisenShare");
22
46
  const gardenOfPuritySeconds = readParameter("gardenOfPuritySeconds");
@@ -47,7 +71,7 @@ const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, r
47
71
  const constellation6 = findKitStatus(effectState.effects, characterId, CONSTELLATION_6_STATUS_ID);
48
72
  if (!constellation6) return;
49
73
  constellation6.secondsRemaining = 0;
50
- castKitSummon(effectState, body, combatant, constellation6Hits);
74
+ castKitSummon(effectState, body, combatant, constellation6Hits, { attackTag: "NormalAttack" });
51
75
  },
52
76
  talentMultiplier
53
77
  });
@@ -59,7 +83,7 @@ const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, r
59
83
  facing,
60
84
  height,
61
85
  position: gardenOfPurity.centre
62
- }, combatant, [bloomwaterBlade]),
86
+ }, combatant, [bloomwaterBlade], { attackTag: "ElementalBurst" }),
63
87
  secondsRemaining: bloomwaterBladeFirstTickSeconds + gardenOfPuritySeconds,
64
88
  tickIntervalSeconds: bloomwaterBladeIntervalSeconds
65
89
  });
@@ -68,9 +92,14 @@ const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, r
68
92
  burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) => castGardenOfPurity(kitEffectState, body, combatant) },
69
93
  getStrikeDamageBonus: ({ attackTag, combatant }, enemy) => combatant.constellationCount >= CONSTELLATION_1 && attackTag === "NormalAttack" && enemy.health / enemy.maxHealth <= CONSTELLATION_1_HEALTH_SHARE ? CONSTELLATION_1_DAMAGE_BONUS : 0,
70
94
  onKitEvent: (event, { kitEffectState }, combatant) => {
71
- if (event.kind !== "CharacterSwapped" || event.previousCharacterId !== combatant.characterId) return;
95
+ if (event.kind !== "CharacterSwapped") return;
96
+ if (event.characterId === combatant.characterId) {
97
+ for (const effect of kitEffectState.effects) if (effect.kind === "field" && effect.id === MICHIYUKU_HAGETSU_ID) effect.secondsRemaining = 0;
98
+ }
99
+ if (event.previousCharacterId !== combatant.characterId) return;
72
100
  const namisen = findKitStatus(kitEffectState.effects, combatant.characterId, NAMISEN_STATUS_ID);
73
101
  if (namisen) namisen.secondsRemaining = 0;
102
+ if (combatant.ascension >= ASCENSION_4) castMichiyukuHagetsu(kitEffectState, combatant);
74
103
  },
75
104
  skill: { onStart: ({ activeCombatant: combatant, kitEffectState }) => {
76
105
  const { characterId } = combatant;
@@ -0,0 +1,82 @@
1
+ import "./GameDataset-B6H7oezV.js";
2
+ import { t as getPartyMember } from "./getPartyMember-CPyR8-gA.js";
3
+ import "./KitEventKind-CGMNB7W9.js";
4
+ import { t as castKitField } from "./castKitField-_74Co83C.js";
5
+ import { t as getActiveCharacterId } from "./getActiveCharacterId-BAGBdS2c.js";
6
+ import { buffKitTeam, castKitShield, createConstellationSkillChargeBonus, getKitHitElement, getKitMaxHealth, queueKitPassiveHit, startKitCooldown } from "./index.js";
7
+ //#region src/services/kit/characters/baizhuKit.ts
8
+ const FIVE_FORTUNES_FOREVER_ASCENSION = 1;
9
+ const FIVE_FORTUNES_FOREVER_HEALTH_SHARE = .5;
10
+ const FIVE_FORTUNES_FOREVER_DENDRO_DAMAGE_BONUS = .25;
11
+ const CONSTELLATION_2 = 2;
12
+ const CONSTELLATION_2_COOLDOWN_SECONDS = 5;
13
+ const CONSTELLATION_2_COOLDOWN_STATUS_ID = "baizhu-constellation-2-cooldown";
14
+ const CONSTELLATION_2_MULTIPLIER = 2.5;
15
+ const CONSTELLATION_2_RADIUS = .6;
16
+ const CONSTELLATION_1 = 1;
17
+ const CONSTELLATION_4 = 4;
18
+ const CONSTELLATION_4_ELEMENTAL_MASTERY = 80;
19
+ const CONSTELLATION_4_SECONDS = 15;
20
+ const CONSTELLATION_4_SOURCE = "baizhu-ancient-art-of-perception";
21
+ const gossamerSpliceHit = {
22
+ attackTag: "ElementalSkill",
23
+ element: "Grass",
24
+ hitArea: {
25
+ angle: 2 * Math.PI,
26
+ height: 2,
27
+ radius: CONSTELLATION_2_RADIUS
28
+ },
29
+ hitmarkSeconds: 0,
30
+ poiseDamage: 0,
31
+ talentMultiplier: CONSTELLATION_2_MULTIPLIER
32
+ };
33
+ const createBaizhuKitBehaviour = ({ readHit, readParameter, readSeconds }) => {
34
+ const shieldMaxHealthShare = readParameter("seamlessShieldMaxHealthShare");
35
+ const shieldFlatHealth = readParameter("seamlessShieldFlatHealth");
36
+ const firstShieldSeconds = readSeconds("firstSeamlessShield");
37
+ const shieldSeconds = readSeconds("seamlessShield");
38
+ const firstRefreshSeconds = readSeconds("firstSeamlessShieldRefresh");
39
+ const refreshIntervalSeconds = readSeconds("seamlessShieldRefreshInterval");
40
+ const refreshFieldSeconds = readSeconds("seamlessShieldRefreshField");
41
+ const spiritvein = readHit("spiritvein");
42
+ const castShield = (context, combatant, secondsRemaining) => {
43
+ const { characterIdCombatantMap, kitEffectState, party } = context;
44
+ return castKitShield(context, combatant.characterId, {
45
+ element: "Grass",
46
+ explosion: {
47
+ combatant,
48
+ hit: spiritvein
49
+ },
50
+ health: shieldMaxHealthShare * getKitMaxHealth(combatant, kitEffectState.effects, party, characterIdCombatantMap) + shieldFlatHealth,
51
+ secondsRemaining
52
+ });
53
+ };
54
+ return {
55
+ burst: { onStart: (context) => {
56
+ const { activeCombatant: combatant, body, kitEffectState, party } = context;
57
+ castShield(context, combatant, firstShieldSeconds);
58
+ if (combatant.constellationCount >= CONSTELLATION_4) buffKitTeam(kitEffectState, party, {
59
+ amount: CONSTELLATION_4_ELEMENTAL_MASTERY,
60
+ attribute: "FIGHT_PROP_ELEMENT_MASTERY",
61
+ secondsRemaining: CONSTELLATION_4_SECONDS,
62
+ source: CONSTELLATION_4_SOURCE
63
+ });
64
+ castKitField(kitEffectState, combatant.characterId, body.position, {
65
+ nextTickSeconds: firstRefreshSeconds,
66
+ onTick: (tick) => castShield(tick, combatant, shieldSeconds),
67
+ secondsRemaining: refreshFieldSeconds,
68
+ tickIntervalSeconds: refreshIntervalSeconds
69
+ });
70
+ } },
71
+ getSkillChargeBonus: createConstellationSkillChargeBonus(CONSTELLATION_1),
72
+ getStrikeDamageBonus: ({ combatant, hit }, _enemy, party) => combatant.ascension >= FIVE_FORTUNES_FOREVER_ASCENSION && getKitHitElement(hit, combatant) === "Grass" && getPartyMember(party, getActiveCharacterId(party)).healthShare >= FIVE_FORTUNES_FOREVER_HEALTH_SHARE ? FIVE_FORTUNES_FOREVER_DENDRO_DAMAGE_BONUS : 0,
73
+ onKitEvent: (event, context, combatant) => {
74
+ if (event.kind !== "DamageTaken" || combatant.constellationCount < CONSTELLATION_2) return;
75
+ if (event.striker.characterId !== context.activeCombatant.characterId) return;
76
+ if (!startKitCooldown(context.kitEffectState, combatant.characterId, CONSTELLATION_2_COOLDOWN_STATUS_ID, CONSTELLATION_2_COOLDOWN_SECONDS)) return;
77
+ queueKitPassiveHit(context, combatant, gossamerSpliceHit, event.enemy);
78
+ }
79
+ };
80
+ };
81
+ //#endregion
82
+ export { createBaizhuKitBehaviour };