genshin-world 4.3.3 → 4.4.0

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 (171) hide show
  1. package/README.md +33 -17
  2. package/package.json +14 -18
  3. package/dist/ElementDamageBonusAttributeMap-Cf1kBcTu.js +0 -12
  4. package/dist/EnemyState-BdsrVDVv.js +0 -13
  5. package/dist/GameDataset-oS0Tc9KV.js +0 -272
  6. package/dist/KitEventKind-DinObjiq.js +0 -33
  7. package/dist/ReactionType-BTiek5WA.js +0 -36
  8. package/dist/TransformativeReactionType-DYhIEAoe.js +0 -14
  9. package/dist/addKitEffect-DEhZUuxo.js +0 -19
  10. package/dist/addKitStatus-CecgwPmO.js +0 -8
  11. package/dist/ainoKit-Z23iOdpE.js +0 -110
  12. package/dist/albedoKit-h6MSXqhl.js +0 -132
  13. package/dist/alhaithamKit-2VrwmZzn.js +0 -225
  14. package/dist/aloyKit-Dlk_fLbL.js +0 -66
  15. package/dist/alyoshaKit-3ky4aL_z.js +0 -3
  16. package/dist/amberKit-BuYU5ACZ.js +0 -85
  17. package/dist/arlecchinoKit-B2WJP5Y5.js +0 -16
  18. package/dist/ayakaKit-D7K6RdMw.js +0 -84
  19. package/dist/ayatoKit-qQp-Ayun.js +0 -136
  20. package/dist/baizhuKit-9i8Hvfeg.js +0 -81
  21. package/dist/barbaraKit-DMo_2qWo.js +0 -122
  22. package/dist/beidouKit-1lURCwhO.js +0 -89
  23. package/dist/bennettKit-B-ipp-MR.js +0 -75
  24. package/dist/candaceKit-oGYu9t5n.js +0 -92
  25. package/dist/castKitField-BhB1fy3l.js +0 -21
  26. package/dist/characterPack-B3e_YsdJ.d.ts +0 -115
  27. package/dist/characterPack-DzYMqBNM.js +0 -697
  28. package/dist/characterPack.d.ts +0 -2
  29. package/dist/characterPack.js +0 -3
  30. package/dist/charlotteKit-BjNvcN8w.js +0 -103
  31. package/dist/chascaKit-isny33W1.js +0 -52
  32. package/dist/checkIsKitShieldLive-DEn8yb0C.js +0 -3
  33. package/dist/chevreuseKit-BppMndmv.js +0 -47
  34. package/dist/chioriKit-CKfqMVtb.js +0 -30
  35. package/dist/chongyunKit-DeZG-qOb.js +0 -99
  36. package/dist/citlaliKit-BLY9P2cd.js +0 -62
  37. package/dist/clorindeKit-DGNp_1SZ.js +0 -61
  38. package/dist/collectKitEnergyDrops-4kTI3aGH.js +0 -61
  39. package/dist/colleiKit-CVBvP9-k.js +0 -51
  40. package/dist/columbinaKit-BqmNtRDK.js +0 -279
  41. package/dist/computeFacingAngle-DapXsgDc.js +0 -7
  42. package/dist/constants-6NEnGOni.js +0 -186
  43. package/dist/constants-BIXoNz1x.js +0 -73
  44. package/dist/constants-DWgLZz-I.js +0 -45
  45. package/dist/constants-jHIdcxxW.js +0 -3
  46. package/dist/constants-r10WzaUG.js +0 -48
  47. package/dist/consumeKitResource-DknosO6e.js +0 -17
  48. package/dist/countKitResource-CPve-dw2.js +0 -4
  49. package/dist/createWindriseGroundPaint-CtFTL5uW.js +0 -293
  50. package/dist/cynoKit-bhub8RfD.js +0 -203
  51. package/dist/dahliaKit-BeEPFn33.js +0 -20
  52. package/dist/dehyaKit-1qJYvLv-.js +0 -23
  53. package/dist/dilucKit-DslGKmxO.js +0 -166
  54. package/dist/dionaKit-B33zk3GI.js +0 -68
  55. package/dist/doriKit-BmYySQcG.js +0 -24
  56. package/dist/durinKit-CpCXxj-r.js +0 -49
  57. package/dist/emilieKit-BZqz4PVs.js +0 -20
  58. package/dist/emitKitEvent-Cb-ZHu50.js +0 -11
  59. package/dist/escoffierKit-DFRj0Hpo.js +0 -95
  60. package/dist/eulaKit-BzD8ye_S.js +0 -144
  61. package/dist/faruzanKit-C5WQz91G.js +0 -72
  62. package/dist/findKitStatus-Dj_zauGj.js +0 -3
  63. package/dist/fischlKit-e4xAt26v.js +0 -95
  64. package/dist/flinsKit-D82N06z5.js +0 -30
  65. package/dist/freminetKit-Dq9ebIts.js +0 -20
  66. package/dist/furinaKit-CzTKkE0N.js +0 -289
  67. package/dist/gainKitResource-3F1z8Aco.js +0 -14
  68. package/dist/gainPartyMemberEnergy-DUbIxe6i.js +0 -10
  69. package/dist/gamingKit-yxYvslgf.js +0 -25
  70. package/dist/ganyuKit-B2pxzHKL.js +0 -84
  71. package/dist/getActiveCharacterId-D9TtVSWj.js +0 -9
  72. package/dist/getBuffedCombatant-CwXmBrc6.js +0 -94
  73. package/dist/getDeployedCharacterIds-TuIRCNKb.js +0 -3
  74. package/dist/getDeployedCombatants-BQdLjZha.js +0 -16
  75. package/dist/getPartyMember-BAb9wUiz.js +0 -8
  76. package/dist/gorouKit--Luf6-WZ.js +0 -153
  77. package/dist/heizouKit-DRleoyzF.js +0 -49
  78. package/dist/huTaoKit-WDMpqAzD.js +0 -146
  79. package/dist/iansanKit-BPzX4C36.js +0 -145
  80. package/dist/ifaKit-Z57TFRSg.js +0 -39
  81. package/dist/illugaKit-86u4wqrU.js +0 -111
  82. package/dist/index-C5rNBYhp.d.ts +0 -26017
  83. package/dist/index.d.ts +0 -4
  84. package/dist/index.js +0 -48495
  85. package/dist/ineffaKit-D0SA01X2.js +0 -154
  86. package/dist/ittoKit-hM51Mywb.js +0 -132
  87. package/dist/jahodaKit-CqtBpzVS.js +0 -344
  88. package/dist/jeanKit-fwjmnF1v.js +0 -89
  89. package/dist/kachinaKit-Dyh5F-ob.js +0 -6
  90. package/dist/kaeyaKit-SBM0QxJ5.js +0 -91
  91. package/dist/kavehKit-1XyMxtUb.js +0 -33
  92. package/dist/kazuhaKit-C726LLZy.js +0 -76
  93. package/dist/keqingKit-O_V-tx1h.js +0 -100
  94. package/dist/kinichKit-DIVa0P5s.js +0 -71
  95. package/dist/kiraraKit-nS9iOECm.js +0 -70
  96. package/dist/kleeKit-DzbELTyN.js +0 -95
  97. package/dist/kokomiKit-BRzXNRVb.js +0 -83
  98. package/dist/kujouSaraKit-BpN3Ipay.js +0 -95
  99. package/dist/kukiKit-DRdmE41e.js +0 -70
  100. package/dist/lanYanKit-CRK1J-LX.js +0 -26
  101. package/dist/laumaKit-CRc88J5l.js +0 -161
  102. package/dist/laylaKit-B7Pjqgzw.js +0 -180
  103. package/dist/linneaKit-CVZeam_T.js +0 -3
  104. package/dist/lisaKit-BJqj8t7j.js +0 -65
  105. package/dist/lohenKit-BZk4IiPV.js +0 -3
  106. package/dist/lynetteKit-CfwhsLsJ.js +0 -39
  107. package/dist/lyneyKit-BQiI15dt.js +0 -42
  108. package/dist/mavuikaKit-MMBY1DJn.js +0 -21
  109. package/dist/mikaKit-BIMafqBI.js +0 -20
  110. package/dist/mizukiKit-CC34yGgJ.js +0 -57
  111. package/dist/monaKit-BlrXXHlB.js +0 -145
  112. package/dist/mualaniKit-BUTB11j2.js +0 -6
  113. package/dist/nahidaKit-ZHrD7-m7.js +0 -112
  114. package/dist/naviaKit-DDttg5Dp.js +0 -139
  115. package/dist/neferKit-Z-QBM46z.js +0 -29
  116. package/dist/neuvilletteKit-B4EhID2O.js +0 -117
  117. package/dist/nicoleKit-Dmrpe0yU.js +0 -281
  118. package/dist/nilouKit-CoztU-uZ.js +0 -104
  119. package/dist/ningguangKit-BGOXmwd-.js +0 -112
  120. package/dist/noelleKit-nl5ar8f1.js +0 -147
  121. package/dist/odetteKit-Bu1W8GX7.js +0 -101
  122. package/dist/ororonKit-CboDk9B8.js +0 -91
  123. package/dist/pruneKit-xgQ9cym6.js +0 -34
  124. package/dist/qiqiKit-lz_qLyLu.js +0 -104
  125. package/dist/raidenKit-CVTi4bpy.js +0 -152
  126. package/dist/razorKit-BHyrlVEl.js +0 -121
  127. package/dist/readCharacterAvatar-xauJoD8Q.js +0 -291
  128. package/dist/removeKitEffects-Csap9Xyn.js +0 -5
  129. package/dist/rosariaKit-DEpP8gj7.js +0 -59
  130. package/dist/sandroneKit-C7vjjwWY.js +0 -3
  131. package/dist/save-W-sjOoN_.js +0 -2475
  132. package/dist/save.d.ts +0 -2
  133. package/dist/save.js +0 -1
  134. package/dist/sayuKit-DQbPlL_6.js +0 -67
  135. package/dist/sceneExport-3Se7hlVa.js +0 -26
  136. package/dist/sceneExport-C-q_cRxm.d.ts +0 -57
  137. package/dist/sceneExport.d.ts +0 -2
  138. package/dist/sceneExport.js +0 -1
  139. package/dist/sethosKit-o-Tz2GFI.js +0 -6
  140. package/dist/shenheKit-Xu_rt5aN.js +0 -152
  141. package/dist/sigewinneKit-NOWCcIW4.js +0 -21
  142. package/dist/skirkKit-CK183sCe.js +0 -9
  143. package/dist/spendKitResource-CC5kZDgu.js +0 -9
  144. package/dist/style.css +0 -4570
  145. package/dist/sucroseKit-Brr_FwwP.js +0 -124
  146. package/dist/tartagliaKit-DQzYxDRn.js +0 -136
  147. package/dist/terrainTileWorker.d.ts +0 -1
  148. package/dist/terrainTileWorker.js +0 -80
  149. package/dist/thomaKit-CesNlmDH.js +0 -95
  150. package/dist/tighnariKit-B9BZlgE9.js +0 -45
  151. package/dist/varesaKit-D5iKxzdo.js +0 -36
  152. package/dist/varkaKit-CNpU_rb3.js +0 -3
  153. package/dist/ventiKit-CM94zgZy.js +0 -52
  154. package/dist/vesnaKit-DtGBZlNW.js +0 -3
  155. package/dist/vodyanitsaKit-BurO3Fqh.js +0 -3
  156. package/dist/wandererKit-CW3sLw53.js +0 -8
  157. package/dist/wriothesleyKit-CPwNVWnr.js +0 -102
  158. package/dist/xianglingKit-DAFhr2LW.js +0 -113
  159. package/dist/xianyunKit-G4ateSub.js +0 -107
  160. package/dist/xiaoKit-CQljYrZS.js +0 -104
  161. package/dist/xilonenKit-39u8vLuk.js +0 -41
  162. package/dist/xingqiuKit-nURrQ7vt.js +0 -126
  163. package/dist/xinyanKit-DU0WpVms.js +0 -144
  164. package/dist/yaeMikoKit-kSDqAFyn.js +0 -56
  165. package/dist/yanfeiKit-Cst973qA.js +0 -118
  166. package/dist/yaoyaoKit-6yjjf3np.js +0 -201
  167. package/dist/yelanKit-SSdzqMQa.js +0 -78
  168. package/dist/yoimiyaKit-DqiQvgAt.js +0 -90
  169. package/dist/yunjinKit-lCP6TTRP.js +0 -86
  170. package/dist/zhongliKit-CTjDWUoW.js +0 -109
  171. package/dist/zibaiKit-CatYt9BG.js +0 -62
@@ -1,110 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { t as gainPartyMemberEnergy } from "./gainPartyMemberEnergy-DUbIxe6i.js";
3
- import "./KitEventKind-DinObjiq.js";
4
- import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
5
- import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
6
- import { t as castKitField } from "./castKitField-BhB1fy3l.js";
7
- import { buffKitMember, castKitSummon, checkIsKitStatusActive, elementalMasteryMultiplier, getMoonsignLevel, queueKitPassiveHit, startKitCooldown } from "./index.js";
8
- // src/services/kit/characters/ainoKit.ts
9
- const ASCENSION_4 = 4;
10
- const ASCENSION_1 = 1;
11
- const ASCENSION_1_WATER_BALL_INTERVAL_SECONDS = .7;
12
- const ASCENSION_1_WATER_BALL_RADIUS = 4;
13
- const CONSTELLATION_4 = 4;
14
- const CONSTELLATION_4_COOLDOWN_SECONDS = 10;
15
- const CONSTELLATION_4_ENERGY = 10;
16
- const CONSTELLATION_4_STATUS_ID = "aino-constellation-4";
17
- const CONSTELLATION_1 = 1;
18
- const CONSTELLATION_1_MASTERY = 80;
19
- const CONSTELLATION_1_SECONDS = 15;
20
- const CONSTELLATION_1_STATUS_ID = "aino-constellation-1";
21
- const CONSTELLATION_2 = 2;
22
- const CONSTELLATION_2_ATTACK_SHARE = .25;
23
- const CONSTELLATION_2_MASTERY_SHARE = 1;
24
- const CONSTELLATION_2_COOLDOWN_ID = "aino-constellation-2-cooldown";
25
- const CONSTELLATION_2_COOLDOWN_SECONDS = 5;
26
- const CONSTELLATION_2_RADIUS = 1.5;
27
- const BURST_FIELD_ID = "aino-precision-hydronic-cooler";
28
- const createAinoKitBehaviour = ({ kit, readHit, readParameter, readSeconds }) => {
29
- const masteryShare = readParameter("ascension4MasteryShare");
30
- const burstFirstTickSeconds = readSeconds("burstStart");
31
- const waterBallHit = readHit("waterBall", { additiveBaseDamageBonus: (combatant) => combatant.ascension >= ASCENSION_4 ? elementalMasteryMultiplier(combatant, masteryShare) : 0 });
32
- const waterBall = {
33
- ...waterBallHit,
34
- hitmarkSeconds: waterBallHit.hitmarkSeconds - burstFirstTickSeconds
35
- };
36
- const burstTickIntervalSeconds = readSeconds("waterBallInterval");
37
- const burstSeconds = readSeconds("burstDuration");
38
- const burstRadius = readParameter("burstRadius");
39
- const ascendantWaterBall = {
40
- ...waterBall,
41
- hitArea: {
42
- ...waterBall.hitArea,
43
- radius: burstRadius + ASCENSION_1_WATER_BALL_RADIUS
44
- },
45
- internalCooldownTag: "AinoBurstMoonHit"
46
- };
47
- const { internalCooldownTag: _internalCooldownTag, ...waterBallWithoutCooldown } = waterBall;
48
- const constellation2WaterBall = {
49
- ...waterBallWithoutCooldown,
50
- additiveBaseDamageBonus: (combatant) => (waterBall.additiveBaseDamageBonus?.(combatant) ?? 0) + elementalMasteryMultiplier(combatant, CONSTELLATION_2_MASTERY_SHARE),
51
- hitArea: {
52
- ...waterBall.hitArea,
53
- radius: CONSTELLATION_2_RADIUS
54
- },
55
- talentMultiplier: CONSTELLATION_2_ATTACK_SHARE
56
- };
57
- const skillHits = kit.elementalSkill.hits;
58
- return {
59
- burst: { onStart: ({ activeCombatant: combatant, body: { facing, height, position }, characterIdCombatantMap, kitEffectState, party }) => {
60
- const isAscendantBurst = combatant.ascension >= ASCENSION_1 && getMoonsignLevel(characterIdCombatantMap, party) === "AscendantGleam";
61
- const burstField = castKitField(kitEffectState, combatant.characterId, position, {
62
- id: BURST_FIELD_ID,
63
- isFollowing: true,
64
- nextTickSeconds: burstFirstTickSeconds,
65
- onTick: ({ kitEffectState: tickKitEffectState }) => castKitSummon(tickKitEffectState, {
66
- facing,
67
- height,
68
- position: burstField.centre
69
- }, combatant, [isAscendantBurst ? ascendantWaterBall : waterBall], { attackTag: "ElementalBurst" }),
70
- radius: burstRadius,
71
- secondsRemaining: burstFirstTickSeconds + burstSeconds,
72
- tickIntervalSeconds: isAscendantBurst ? ASCENSION_1_WATER_BALL_INTERVAL_SECONDS : burstTickIntervalSeconds
73
- });
74
- } },
75
- onKitEvent: (event, context, combatant) => {
76
- const { activeCombatant, kitEffectState, party } = context;
77
- if (combatant.constellationCount >= CONSTELLATION_1 && (event.kind === "SkillUsed" || event.kind === "BurstUsed") && event.characterId === combatant.characterId) {
78
- addKitStatus(kitEffectState, combatant.characterId, {
79
- id: CONSTELLATION_1_STATUS_ID,
80
- secondsRemaining: CONSTELLATION_1_SECONDS
81
- });
82
- buffKitMember(kitEffectState, combatant.characterId, {
83
- amount: CONSTELLATION_1_MASTERY,
84
- attribute: "FIGHT_PROP_ELEMENT_MASTERY",
85
- secondsRemaining: CONSTELLATION_1_SECONDS,
86
- source: CONSTELLATION_1_STATUS_ID
87
- });
88
- }
89
- if (event.kind === "CharacterSwapped" && event.characterId !== combatant.characterId) {
90
- const constellation1Seconds = findKitStatus(kitEffectState.effects, combatant.characterId, CONSTELLATION_1_STATUS_ID)?.secondsRemaining ?? 0;
91
- if (constellation1Seconds > 0) buffKitMember(kitEffectState, event.characterId, {
92
- amount: CONSTELLATION_1_MASTERY,
93
- attribute: "FIGHT_PROP_ELEMENT_MASTERY",
94
- isEndedOnSwap: true,
95
- secondsRemaining: constellation1Seconds,
96
- source: CONSTELLATION_1_STATUS_ID
97
- });
98
- }
99
- if (event.kind !== "DamageTaken") return;
100
- if (combatant.constellationCount >= CONSTELLATION_2 && activeCombatant.characterId !== combatant.characterId && event.striker.characterId === activeCombatant.characterId && kitEffectState.effects.some((effect) => effect.kind === "field" && effect.id === BURST_FIELD_ID && effect.secondsRemaining > 0) && startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_2_COOLDOWN_ID, CONSTELLATION_2_COOLDOWN_SECONDS)) queueKitPassiveHit(context, combatant, constellation2WaterBall, event.enemy);
101
- if (combatant.constellationCount < CONSTELLATION_4 || event.striker.characterId !== combatant.characterId || !skillHits.includes(event.hit) || checkIsKitStatusActive(kitEffectState.effects, combatant.characterId, CONSTELLATION_4_STATUS_ID)) return;
102
- addKitStatus(kitEffectState, combatant.characterId, {
103
- id: CONSTELLATION_4_STATUS_ID,
104
- secondsRemaining: CONSTELLATION_4_COOLDOWN_SECONDS
105
- });
106
- gainPartyMemberEnergy(party, combatant, CONSTELLATION_4_ENERGY);
107
- }
108
- };
109
- };
110
- export { createAinoKitBehaviour };
@@ -1,132 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { t as getBuffedCombatant } from "./getBuffedCombatant-CwXmBrc6.js";
3
- import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
4
- import "./KitEventKind-DinObjiq.js";
5
- import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
6
- import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
7
- import { buffKitMember, buffKitTeam, castKitSummon, checkIsInKitField, checkIsKitStatusActive, createAheadBody, createKitBody, findStandingKitSummon, startKitCooldown } from "./index.js";
8
- // 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
- export { ALBEDO_CHARACTER_ID, createAlbedoKitBehaviour };
@@ -1,225 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { t as getDeployedCharacterIds } from "./getDeployedCharacterIds-TuIRCNKb.js";
3
- import "./KitEventKind-DinObjiq.js";
4
- import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
5
- import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
6
- import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
7
- import { t as castKitField } from "./castKitField-BhB1fy3l.js";
8
- import { buffKitMember, castKitSummon, changeKitSkillCooldown, elementalMasteryMultiplier, scheduleKitTask, startKitCooldown } from "./index.js";
9
- import { takeOne } from "@esposter/shared";
10
- // src/services/kit/characters/alhaithamKit.ts
11
- const ASCENSION_1 = 1;
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";
16
- const CONSTELLATION_2 = 2;
17
- const CONSTELLATION_4 = 4;
18
- const CONSTELLATION_6 = 6;
19
- const HELD_UNTIL_SWAP_SECONDS = Number.POSITIVE_INFINITY;
20
- const MIRROR_STATUS_ID = "alhaitham-mirrors";
21
- const MIRROR_DECAY_FIELD_ID = "alhaitham-mirror-decay";
22
- const MIRROR_REGEN_TASK_ID = "alhaitham-mirror-regen";
23
- const PROJECTION_ICD_STATUS_ID = "alhaitham-projection-icd";
24
- const ASCENSION_1_ICD_STATUS_ID = "alhaitham-a1-icd";
25
- const CONSTELLATION_2_CURSOR_STATUS_ID = "alhaitham-c2-cursor";
26
- const CONSTELLATION_2_SOURCE_PREFIX = "alhaitham-c2-";
27
- const CONSTELLATION_4_LOSS_SOURCE = "alhaitham-c4-loss";
28
- const CONSTELLATION_4_GAIN_SOURCE = "alhaitham-c4-gain";
29
- const CONSTELLATION_6_SOURCE = "alhaitham-c6";
30
- const findKitField = (effects, id) => effects.find((effect) => effect.kind === "field" && effect.id === id);
31
- const findKitBuff = (effects, characterId, attribute, source) => effects.find((effect) => effect.kind === "buff" && effect.characterId === characterId && effect.attribute === attribute && effect.source === source);
32
- const getMirrorCount = (effects, characterId) => findKitStatus(effects, characterId, MIRROR_STATUS_ID)?.stacks ?? 0;
33
- const setMirrorCount = (kitEffectState, characterId, mirrors) => {
34
- if (mirrors <= 0) {
35
- const status = findKitStatus(kitEffectState.effects, characterId, MIRROR_STATUS_ID);
36
- if (status) {
37
- status.stacks = 0;
38
- status.secondsRemaining = 0;
39
- }
40
- for (const effect of kitEffectState.effects) {
41
- if (effect.kind === "infusion" && effect.characterId === characterId && effect.element === "Grass") effect.secondsRemaining = 0;
42
- if (effect.kind === "field" && effect.id === MIRROR_DECAY_FIELD_ID) effect.secondsRemaining = 0;
43
- }
44
- return;
45
- }
46
- addKitStatus(kitEffectState, characterId, {
47
- id: MIRROR_STATUS_ID,
48
- secondsRemaining: HELD_UNTIL_SWAP_SECONDS,
49
- stacks: mirrors
50
- });
51
- addKitEffect(kitEffectState, {
52
- characterId,
53
- element: "Grass",
54
- kind: "infusion",
55
- secondsRemaining: HELD_UNTIL_SWAP_SECONDS
56
- });
57
- };
58
- const addConstellation2Buff = (kitEffectState, characterId, buffs) => {
59
- const cursor = findKitStatus(kitEffectState.effects, characterId, CONSTELLATION_2_CURSOR_STATUS_ID)?.stacks ?? 0;
60
- addKitStatus(kitEffectState, characterId, {
61
- id: CONSTELLATION_2_CURSOR_STATUS_ID,
62
- secondsRemaining: HELD_UNTIL_SWAP_SECONDS,
63
- stacks: (cursor + 1) % buffs.constellation2StacksMax
64
- });
65
- buffKitMember(kitEffectState, characterId, {
66
- amount: buffs.constellation2ElementalMastery,
67
- attribute: "FIGHT_PROP_ELEMENT_MASTERY",
68
- secondsRemaining: buffs.constellation2Seconds,
69
- source: `${CONSTELLATION_2_SOURCE_PREFIX}${cursor + 1}`
70
- });
71
- };
72
- const addConstellation6Buffs = (kitEffectState, characterId, overflow, buffs) => {
73
- for (let index = 0; index < overflow; index++) {
74
- const critical = findKitBuff(kitEffectState.effects, characterId, "FIGHT_PROP_CRITICAL", CONSTELLATION_6_SOURCE);
75
- if (critical) {
76
- critical.secondsRemaining += buffs.constellation6Seconds;
77
- const criticalDamage = findKitBuff(kitEffectState.effects, characterId, "FIGHT_PROP_CRITICAL_HURT", CONSTELLATION_6_SOURCE);
78
- if (criticalDamage) criticalDamage.secondsRemaining += buffs.constellation6Seconds;
79
- continue;
80
- }
81
- buffKitMember(kitEffectState, characterId, {
82
- amount: buffs.constellation6CriticalRate,
83
- attribute: "FIGHT_PROP_CRITICAL",
84
- secondsRemaining: buffs.constellation6Seconds,
85
- source: CONSTELLATION_6_SOURCE
86
- });
87
- buffKitMember(kitEffectState, characterId, {
88
- amount: buffs.constellation6CriticalDamage,
89
- attribute: "FIGHT_PROP_CRITICAL_HURT",
90
- secondsRemaining: buffs.constellation6Seconds,
91
- source: CONSTELLATION_6_SOURCE
92
- });
93
- }
94
- };
95
- const getSkillMirrorGain = (effects, characterId) => getMirrorCount(effects, characterId) === 0 ? 2 : 1;
96
- const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds, readSecondsList }) => {
97
- const mirrorSecondsList = readSecondsList("universalityMirrorDelays");
98
- const mirrorDecaySeconds = readSeconds("mirrorDecay");
99
- const projectionCooldownSeconds = readSeconds("projectionAttackCooldown");
100
- const burstMirrorRegenSeconds = readSeconds("particularFieldMirrorDelay");
101
- const projectionElementalMasteryShare = readParameter("projectionAttackElementalMasteryShare");
102
- const burstElementalMasteryShare = readParameter("particularFieldElementalMasteryShare");
103
- const skillElementalMasteryShare = readParameter("universalityElementalMasteryShare");
104
- const mirrorsMax = readParameter("mirrorsMax");
105
- const burstBaseHitCount = readParameter("burstBaseHitCount");
106
- const burstHitCountPerMirror = readParameter("burstHitCountPerMirror");
107
- const ascension1IcdSeconds = readSeconds("ascension1IcdDuration");
108
- const ascension4DamagePerElementalMastery = readParameter("ascension4DamagePerElementalMastery");
109
- const ascension4DamageMax = readParameter("ascension4DamageMax");
110
- const constellation2ElementalMastery = readParameter("constellation2ElementalMastery");
111
- const constellation2Seconds = readSeconds("constellation2Duration");
112
- const constellation2StacksMax = readParameter("constellation2StacksMax");
113
- const constellation4ElementalMasteryPerMirror = readParameter("constellation4ElementalMasteryPerMirror");
114
- const constellation4DendroDamageBonusPerMirror = readParameter("constellation4DendroDamageBonusPerMirror");
115
- const constellation4Seconds = readSeconds("constellation4Duration");
116
- const constellation6CriticalRate = readParameter("constellation6CriticalRate");
117
- const constellationBuffs = {
118
- constellation2ElementalMastery,
119
- constellation2Seconds,
120
- constellation2StacksMax,
121
- constellation6CriticalDamage: readParameter("constellation6CriticalDamage"),
122
- constellation6CriticalRate,
123
- constellation6Seconds: readSeconds("constellation6Duration")
124
- };
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
- };
133
- const projectionAttacks = [
134
- readHits("projectionAttackOneMirror", projectionHitBehaviour),
135
- readHits("projectionAttackTwoMirrors", projectionHitBehaviour),
136
- readHits("projectionAttackThreeMirrors", projectionHitBehaviour)
137
- ];
138
- const particularFieldHits = readHits("particularFieldHits", { additiveBaseDamageBonus: (striker) => elementalMasteryMultiplier(striker, burstElementalMasteryShare) });
139
- const startMirrorDecay = (kitEffectState, body, combatant) => {
140
- const { characterId } = combatant;
141
- const field = findKitField(kitEffectState.effects, MIRROR_DECAY_FIELD_ID);
142
- if (field) {
143
- field.nextTickSeconds = mirrorDecaySeconds;
144
- field.secondsRemaining = HELD_UNTIL_SWAP_SECONDS;
145
- return;
146
- }
147
- castKitField(kitEffectState, characterId, body.position, {
148
- id: MIRROR_DECAY_FIELD_ID,
149
- nextTickSeconds: mirrorDecaySeconds,
150
- onTick: ({ kitEffectState: effectState }) => {
151
- const count = getMirrorCount(effectState.effects, characterId);
152
- setMirrorCount(effectState, characterId, count > 1 ? count - 1 : 0);
153
- },
154
- secondsRemaining: HELD_UNTIL_SWAP_SECONDS,
155
- tickIntervalSeconds: mirrorDecaySeconds
156
- });
157
- };
158
- const gainMirrors = (kitEffectState, body, combatant, generated) => {
159
- if (generated <= 0) return;
160
- const { characterId, constellationCount } = combatant;
161
- const count = getMirrorCount(kitEffectState.effects, characterId);
162
- const total = count + generated;
163
- if (count === 0 || total > mirrorsMax) startMirrorDecay(kitEffectState, body, combatant);
164
- setMirrorCount(kitEffectState, characterId, Math.min(total, mirrorsMax));
165
- if (constellationCount >= CONSTELLATION_2) for (let made = 0; made < generated; made++) addConstellation2Buff(kitEffectState, characterId, constellationBuffs);
166
- if (constellationCount >= CONSTELLATION_6 && total > mirrorsMax) addConstellation6Buffs(kitEffectState, characterId, total - mirrorsMax, constellationBuffs);
167
- };
168
- const triggerProjection = ({ kitEffectState }, { body, combatant }, isMirrorSource) => {
169
- const { ascension, characterId } = combatant;
170
- if (isMirrorSource && ascension >= ASCENSION_1 && startKitCooldown(kitEffectState, characterId, ASCENSION_1_ICD_STATUS_ID, ascension1IcdSeconds)) gainMirrors(kitEffectState, body, combatant, 1);
171
- const count = getMirrorCount(kitEffectState.effects, characterId);
172
- if (count === 0 || !startKitCooldown(kitEffectState, characterId, PROJECTION_ICD_STATUS_ID, projectionCooldownSeconds)) return;
173
- castKitSummon(kitEffectState, body, combatant, takeOne(projectionAttacks, count - 1), { attackTag: "ElementalSkill" });
174
- };
175
- const strikeHitBehaviour = { onStrike: (context, strike) => triggerProjection(context, strike, false) };
176
- const mirrorSourceHitBehaviour = { onStrike: (context, strike) => triggerProjection(context, strike, true) };
177
- const createSkillBehaviour = (mirrorSeconds) => ({
178
- hits: [{ additiveBaseDamageBonus: (striker) => elementalMasteryMultiplier(striker, skillElementalMasteryShare) }],
179
- onStart: ({ activeCombatant: combatant, body, kitEffectState }) => scheduleKitTask(kitEffectState, combatant.characterId, mirrorSeconds, (tick) => gainMirrors(tick.kitEffectState, body, combatant, getSkillMirrorGain(tick.kitEffectState.effects, combatant.characterId)))
180
- });
181
- return {
182
- burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState, party }) => {
183
- const { characterId, constellationCount } = combatant;
184
- const consumed = getMirrorCount(kitEffectState.effects, characterId);
185
- castKitSummon(kitEffectState, body, combatant, particularFieldHits.slice(0, burstBaseHitCount + burstHitCountPerMirror * consumed), { attackTag: "ElementalBurst" });
186
- setMirrorCount(kitEffectState, characterId, 0);
187
- if (constellationCount >= CONSTELLATION_4 && consumed > 0) for (const memberId of getDeployedCharacterIds(party)) {
188
- if (memberId === characterId) continue;
189
- buffKitMember(kitEffectState, memberId, {
190
- amount: constellation4ElementalMasteryPerMirror * consumed,
191
- attribute: "FIGHT_PROP_ELEMENT_MASTERY",
192
- secondsRemaining: constellation4Seconds,
193
- source: CONSTELLATION_4_LOSS_SOURCE
194
- });
195
- }
196
- const generated = constellationCount >= CONSTELLATION_6 ? mirrorsMax : mirrorsMax - consumed;
197
- if (generated <= 0) return;
198
- scheduleKitTask(kitEffectState, characterId, burstMirrorRegenSeconds, (tick) => {
199
- gainMirrors(tick.kitEffectState, body, combatant, generated);
200
- if (constellationCount >= CONSTELLATION_4) buffKitMember(tick.kitEffectState, characterId, {
201
- amount: constellation4DendroDamageBonusPerMirror * generated,
202
- attribute: "FIGHT_PROP_GRASS_ADD_HURT",
203
- secondsRemaining: constellation4Seconds,
204
- source: CONSTELLATION_4_GAIN_SOURCE
205
- });
206
- }, { id: MIRROR_REGEN_TASK_ID });
207
- } },
208
- chargedAttack: { hits: kit.chargedAttack.hits.map(() => mirrorSourceHitBehaviour) },
209
- getStrikeDamageBonus: ({ combatant, hit }) => combatant.ascension >= ASCENSION_4 && (hit.internalCooldownTag === "ElementalBurst" || hit.internalCooldownTag === "ElementalSkill") ? Math.min(elementalMasteryMultiplier(combatant, ascension4DamagePerElementalMastery), ascension4DamageMax) : 0,
210
- normalAttacks: kit.normalAttacks.map(({ hits }) => ({ hits: hits.map(() => strikeHitBehaviour) })),
211
- onKitEvent: (event, { kitEffectState }, combatant) => {
212
- if (event.kind !== "CharacterSwapped" || event.previousCharacterId !== combatant.characterId) return;
213
- setMirrorCount(kitEffectState, combatant.characterId, 0);
214
- for (const effect of kitEffectState.effects) if (effect.kind === "field" && effect.id === MIRROR_REGEN_TASK_ID) effect.secondsRemaining = 0;
215
- },
216
- plungeCollision: mirrorSourceHitBehaviour,
217
- plunges: {
218
- ["high"]: { hits: [mirrorSourceHitBehaviour] },
219
- ["low"]: { hits: [mirrorSourceHitBehaviour] }
220
- },
221
- skill: createSkillBehaviour(takeOne(mirrorSecondsList, 0)),
222
- skillHolds: [createSkillBehaviour(takeOne(mirrorSecondsList, 1))]
223
- };
224
- };
225
- export { createAlhaithamKitBehaviour };
@@ -1,66 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
3
- import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
4
- import { t as spendKitResource } from "./spendKitResource-CC5kZDgu.js";
5
- import { t as gainKitResource } from "./gainKitResource-3F1z8Aco.js";
6
- import { buffKitMember, buffKitTeam, checkHasKitStatus, scheduleKitTask } from "./index.js";
7
- // 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
- export { createAloyKitBehaviour };
@@ -1,3 +0,0 @@
1
- // src/services/kit/characters/alyoshaKit.ts
2
- const createAlyoshaKitBehaviour = () => ({});
3
- export { createAlyoshaKitBehaviour };
@@ -1,85 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { buffKitTeam, castKitSummon, castKitTaunt, createConstellationSkillChargeBonus, getKitMaxHealth, queueKitPassiveHit } from "./index.js";
3
- // 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
- export { createAmberKitBehaviour };
@@ -1,16 +0,0 @@
1
- import "./GameDataset-oS0Tc9KV.js";
2
- import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
3
- import { scheduleKitTask, toKitSeconds } from "./index.js";
4
- // 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
- export { createArlecchinoKitBehaviour };