genshin-world 4.2.0 → 4.3.3

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 +2 -2
  2. package/dist/ElementDamageBonusAttributeMap-Cf1kBcTu.js +12 -0
  3. package/dist/EnemyState-BdsrVDVv.js +13 -0
  4. package/dist/GameDataset-oS0Tc9KV.js +272 -0
  5. package/dist/KitEventKind-DinObjiq.js +33 -0
  6. package/dist/ReactionType-BTiek5WA.js +36 -0
  7. package/dist/TransformativeReactionType-DYhIEAoe.js +14 -0
  8. package/dist/addKitEffect-DEhZUuxo.js +19 -0
  9. package/dist/addKitStatus-CecgwPmO.js +8 -0
  10. package/dist/ainoKit-Z23iOdpE.js +110 -0
  11. package/dist/albedoKit-h6MSXqhl.js +132 -0
  12. package/dist/alhaithamKit-2VrwmZzn.js +225 -0
  13. package/dist/aloyKit-Dlk_fLbL.js +66 -0
  14. package/dist/alyoshaKit-3ky4aL_z.js +3 -0
  15. package/dist/amberKit-BuYU5ACZ.js +85 -0
  16. package/dist/arlecchinoKit-B2WJP5Y5.js +16 -0
  17. package/dist/ayakaKit-D7K6RdMw.js +84 -0
  18. package/dist/ayatoKit-qQp-Ayun.js +136 -0
  19. package/dist/baizhuKit-9i8Hvfeg.js +81 -0
  20. package/dist/barbaraKit-DMo_2qWo.js +122 -0
  21. package/dist/beidouKit-1lURCwhO.js +89 -0
  22. package/dist/bennettKit-B-ipp-MR.js +75 -0
  23. package/dist/candaceKit-oGYu9t5n.js +92 -0
  24. package/dist/castKitField-BhB1fy3l.js +21 -0
  25. package/dist/characterPack-B3e_YsdJ.d.ts +115 -0
  26. package/dist/characterPack-DzYMqBNM.js +697 -0
  27. package/dist/characterPack.d.ts +2 -0
  28. package/dist/characterPack.js +3 -0
  29. package/dist/charlotteKit-BjNvcN8w.js +103 -0
  30. package/dist/chascaKit-isny33W1.js +52 -0
  31. package/dist/checkIsKitShieldLive-DEn8yb0C.js +3 -0
  32. package/dist/chevreuseKit-BppMndmv.js +47 -0
  33. package/dist/chioriKit-CKfqMVtb.js +30 -0
  34. package/dist/chongyunKit-DeZG-qOb.js +99 -0
  35. package/dist/citlaliKit-BLY9P2cd.js +62 -0
  36. package/dist/clorindeKit-DGNp_1SZ.js +61 -0
  37. package/dist/collectKitEnergyDrops-4kTI3aGH.js +61 -0
  38. package/dist/colleiKit-CVBvP9-k.js +51 -0
  39. package/dist/columbinaKit-BqmNtRDK.js +279 -0
  40. package/dist/computeFacingAngle-DapXsgDc.js +7 -0
  41. package/dist/constants-6NEnGOni.js +186 -0
  42. package/dist/constants-BIXoNz1x.js +73 -0
  43. package/dist/constants-DWgLZz-I.js +45 -0
  44. package/dist/constants-jHIdcxxW.js +3 -0
  45. package/dist/constants-r10WzaUG.js +48 -0
  46. package/dist/consumeKitResource-DknosO6e.js +17 -0
  47. package/dist/countKitResource-CPve-dw2.js +4 -0
  48. package/dist/createWindriseGroundPaint-CtFTL5uW.js +293 -0
  49. package/dist/cynoKit-bhub8RfD.js +203 -0
  50. package/dist/dahliaKit-BeEPFn33.js +20 -0
  51. package/dist/dehyaKit-1qJYvLv-.js +23 -0
  52. package/dist/dilucKit-DslGKmxO.js +166 -0
  53. package/dist/dionaKit-B33zk3GI.js +68 -0
  54. package/dist/doriKit-BmYySQcG.js +24 -0
  55. package/dist/durinKit-CpCXxj-r.js +49 -0
  56. package/dist/emilieKit-BZqz4PVs.js +20 -0
  57. package/dist/emitKitEvent-Cb-ZHu50.js +11 -0
  58. package/dist/escoffierKit-DFRj0Hpo.js +95 -0
  59. package/dist/eulaKit-BzD8ye_S.js +144 -0
  60. package/dist/faruzanKit-C5WQz91G.js +72 -0
  61. package/dist/findKitStatus-Dj_zauGj.js +3 -0
  62. package/dist/fischlKit-e4xAt26v.js +95 -0
  63. package/dist/flinsKit-D82N06z5.js +30 -0
  64. package/dist/freminetKit-Dq9ebIts.js +20 -0
  65. package/dist/furinaKit-CzTKkE0N.js +289 -0
  66. package/dist/gainKitResource-3F1z8Aco.js +14 -0
  67. package/dist/gainPartyMemberEnergy-DUbIxe6i.js +10 -0
  68. package/dist/gamingKit-yxYvslgf.js +25 -0
  69. package/dist/ganyuKit-B2pxzHKL.js +84 -0
  70. package/dist/getActiveCharacterId-D9TtVSWj.js +9 -0
  71. package/dist/getBuffedCombatant-CwXmBrc6.js +94 -0
  72. package/dist/getDeployedCharacterIds-TuIRCNKb.js +3 -0
  73. package/dist/getDeployedCombatants-BQdLjZha.js +16 -0
  74. package/dist/getPartyMember-BAb9wUiz.js +8 -0
  75. package/dist/gorouKit--Luf6-WZ.js +153 -0
  76. package/dist/heizouKit-DRleoyzF.js +49 -0
  77. package/dist/huTaoKit-WDMpqAzD.js +146 -0
  78. package/dist/iansanKit-BPzX4C36.js +145 -0
  79. package/dist/ifaKit-Z57TFRSg.js +39 -0
  80. package/dist/illugaKit-86u4wqrU.js +111 -0
  81. package/dist/index-C5rNBYhp.d.ts +26017 -0
  82. package/dist/index.d.ts +4 -0
  83. package/dist/index.js +48495 -0
  84. package/dist/ineffaKit-D0SA01X2.js +154 -0
  85. package/dist/ittoKit-hM51Mywb.js +132 -0
  86. package/dist/jahodaKit-CqtBpzVS.js +344 -0
  87. package/dist/jeanKit-fwjmnF1v.js +89 -0
  88. package/dist/kachinaKit-Dyh5F-ob.js +6 -0
  89. package/dist/kaeyaKit-SBM0QxJ5.js +91 -0
  90. package/dist/kavehKit-1XyMxtUb.js +33 -0
  91. package/dist/kazuhaKit-C726LLZy.js +76 -0
  92. package/dist/keqingKit-O_V-tx1h.js +100 -0
  93. package/dist/kinichKit-DIVa0P5s.js +71 -0
  94. package/dist/kiraraKit-nS9iOECm.js +70 -0
  95. package/dist/kleeKit-DzbELTyN.js +95 -0
  96. package/dist/kokomiKit-BRzXNRVb.js +83 -0
  97. package/dist/kujouSaraKit-BpN3Ipay.js +95 -0
  98. package/dist/kukiKit-DRdmE41e.js +70 -0
  99. package/dist/lanYanKit-CRK1J-LX.js +26 -0
  100. package/dist/laumaKit-CRc88J5l.js +161 -0
  101. package/dist/laylaKit-B7Pjqgzw.js +180 -0
  102. package/dist/linneaKit-CVZeam_T.js +3 -0
  103. package/dist/lisaKit-BJqj8t7j.js +65 -0
  104. package/dist/lohenKit-BZk4IiPV.js +3 -0
  105. package/dist/lynetteKit-CfwhsLsJ.js +39 -0
  106. package/dist/lyneyKit-BQiI15dt.js +42 -0
  107. package/dist/mavuikaKit-MMBY1DJn.js +21 -0
  108. package/dist/mikaKit-BIMafqBI.js +20 -0
  109. package/dist/mizukiKit-CC34yGgJ.js +57 -0
  110. package/dist/monaKit-BlrXXHlB.js +145 -0
  111. package/dist/mualaniKit-BUTB11j2.js +6 -0
  112. package/dist/nahidaKit-ZHrD7-m7.js +112 -0
  113. package/dist/naviaKit-DDttg5Dp.js +139 -0
  114. package/dist/neferKit-Z-QBM46z.js +29 -0
  115. package/dist/neuvilletteKit-B4EhID2O.js +117 -0
  116. package/dist/nicoleKit-Dmrpe0yU.js +281 -0
  117. package/dist/nilouKit-CoztU-uZ.js +104 -0
  118. package/dist/ningguangKit-BGOXmwd-.js +112 -0
  119. package/dist/noelleKit-nl5ar8f1.js +147 -0
  120. package/dist/odetteKit-Bu1W8GX7.js +101 -0
  121. package/dist/ororonKit-CboDk9B8.js +91 -0
  122. package/dist/pruneKit-xgQ9cym6.js +34 -0
  123. package/dist/qiqiKit-lz_qLyLu.js +104 -0
  124. package/dist/raidenKit-CVTi4bpy.js +152 -0
  125. package/dist/razorKit-BHyrlVEl.js +121 -0
  126. package/dist/readCharacterAvatar-xauJoD8Q.js +291 -0
  127. package/dist/removeKitEffects-Csap9Xyn.js +5 -0
  128. package/dist/rosariaKit-DEpP8gj7.js +59 -0
  129. package/dist/sandroneKit-C7vjjwWY.js +3 -0
  130. package/dist/save-W-sjOoN_.js +2475 -0
  131. package/dist/save.d.ts +2 -0
  132. package/dist/save.js +1 -0
  133. package/dist/sayuKit-DQbPlL_6.js +67 -0
  134. package/dist/sceneExport-3Se7hlVa.js +26 -0
  135. package/dist/sceneExport-C-q_cRxm.d.ts +57 -0
  136. package/dist/sceneExport.d.ts +2 -0
  137. package/dist/sceneExport.js +1 -0
  138. package/dist/sethosKit-o-Tz2GFI.js +6 -0
  139. package/dist/shenheKit-Xu_rt5aN.js +152 -0
  140. package/dist/sigewinneKit-NOWCcIW4.js +21 -0
  141. package/dist/skirkKit-CK183sCe.js +9 -0
  142. package/dist/spendKitResource-CC5kZDgu.js +9 -0
  143. package/dist/style.css +4570 -0
  144. package/dist/sucroseKit-Brr_FwwP.js +124 -0
  145. package/dist/tartagliaKit-DQzYxDRn.js +136 -0
  146. package/dist/terrainTileWorker.d.ts +1 -0
  147. package/dist/terrainTileWorker.js +80 -0
  148. package/dist/thomaKit-CesNlmDH.js +95 -0
  149. package/dist/tighnariKit-B9BZlgE9.js +45 -0
  150. package/dist/varesaKit-D5iKxzdo.js +36 -0
  151. package/dist/varkaKit-CNpU_rb3.js +3 -0
  152. package/dist/ventiKit-CM94zgZy.js +52 -0
  153. package/dist/vesnaKit-DtGBZlNW.js +3 -0
  154. package/dist/vodyanitsaKit-BurO3Fqh.js +3 -0
  155. package/dist/wandererKit-CW3sLw53.js +8 -0
  156. package/dist/wriothesleyKit-CPwNVWnr.js +102 -0
  157. package/dist/xianglingKit-DAFhr2LW.js +113 -0
  158. package/dist/xianyunKit-G4ateSub.js +107 -0
  159. package/dist/xiaoKit-CQljYrZS.js +104 -0
  160. package/dist/xilonenKit-39u8vLuk.js +41 -0
  161. package/dist/xingqiuKit-nURrQ7vt.js +126 -0
  162. package/dist/xinyanKit-DU0WpVms.js +144 -0
  163. package/dist/yaeMikoKit-kSDqAFyn.js +56 -0
  164. package/dist/yanfeiKit-Cst973qA.js +118 -0
  165. package/dist/yaoyaoKit-6yjjf3np.js +201 -0
  166. package/dist/yelanKit-SSdzqMQa.js +78 -0
  167. package/dist/yoimiyaKit-DqiQvgAt.js +90 -0
  168. package/dist/yunjinKit-lCP6TTRP.js +86 -0
  169. package/dist/zhongliKit-CTjDWUoW.js +109 -0
  170. package/dist/zibaiKit-CatYt9BG.js +62 -0
  171. package/package.json +11 -14
@@ -0,0 +1,279 @@
1
+ import "./GameDataset-oS0Tc9KV.js";
2
+ import "./save-W-sjOoN_.js";
3
+ import { t as gainPartyMemberEnergy } from "./gainPartyMemberEnergy-DUbIxe6i.js";
4
+ import { t as getDeployedCharacterIds } from "./getDeployedCharacterIds-TuIRCNKb.js";
5
+ import "./ReactionType-BTiek5WA.js";
6
+ import "./KitEventKind-DinObjiq.js";
7
+ import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
8
+ import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
9
+ import { t as castKitField } from "./castKitField-BhB1fy3l.js";
10
+ import { addKitHold, buffKitMember, castKitShield, castKitSummon, checkIsKitHold, checkIsKitStatusActive, checkIsLunarReactionType, countDew, countKitHolds, createKitBody, getKitHitElement, getKitMaxHealth, getMoonsignLevel, spendDew, startKitCooldown, toKitSeconds } from "./index.js";
11
+ import { takeOne } from "@esposter/shared";
12
+ // src/services/kit/characters/columbinaBenediction.ts
13
+ const BENEDICTION_BASE_DAMAGE_BONUS_PER_MAX_HEALTH = .002 / 1e3;
14
+ const BENEDICTION_MAXIMUM_BASE_DAMAGE_BONUS = .07;
15
+ const getBenedictionBaseDamageBonus = (maxHealth) => Math.min(maxHealth * BENEDICTION_BASE_DAMAGE_BONUS_PER_MAX_HEALTH, BENEDICTION_MAXIMUM_BASE_DAMAGE_BONUS);
16
+ // src/services/kit/characters/columbinaKit.ts
17
+ const COLUMBINA_CHARACTER_ID = 10000125;
18
+ const COLUMBINA_SKILL_FIELD_ID = "columbina-gravity-interference";
19
+ const ASCENDANT_GLEAM_SKILL_DOT_RADIUS = 6;
20
+ const ASCENSION_1 = 1;
21
+ const LUNACY_ID = "columbina-lunacy";
22
+ const LUNACY_CRIT_RATE_PER_STACK = .05;
23
+ const LUNACY_MAX_STACKS = 3;
24
+ const LUNACY_SECONDS = 10;
25
+ const GRAVITY_MAX = 60;
26
+ const GRAVITY_PER_SECOND = 10;
27
+ const GRAVITY_SECONDS = 2;
28
+ const CONSTELLATION_1 = 1;
29
+ const CONSTELLATION_1_ENERGY = 6;
30
+ const CONSTELLATION_1_ICD_ID = "columbina-c1-icd";
31
+ const CONSTELLATION_1_ICD_SECONDS = 15;
32
+ const CONSTELLATION_1_SHIELD_HEALTH_SHARE = .12;
33
+ const CONSTELLATION_1_SHIELD_SECONDS = 8;
34
+ const CONSTELLATION_2 = 2;
35
+ const CONSTELLATION_2_GRAVITY_RATE = .34;
36
+ const CONSTELLATION_2_HEALTH_SHARE = .4;
37
+ const CONSTELLATION_2_HEALTH_SOURCE = "columbina-c2-health";
38
+ const CONSTELLATION_2_SECONDS = 8;
39
+ const CONSTELLATION_2_TEAM_BUFFS = {
40
+ ["LunarBloom"]: {
41
+ amountPerMaxHealth: .0035,
42
+ attribute: "FIGHT_PROP_ELEMENT_MASTERY",
43
+ source: "columbina-c2-lunar-bloom"
44
+ },
45
+ ["LunarCharged"]: {
46
+ amountPerMaxHealth: .01,
47
+ attribute: "FIGHT_PROP_ATTACK",
48
+ source: "columbina-c2-lunar-charged"
49
+ },
50
+ ["LunarCrystallize"]: {
51
+ amountPerMaxHealth: .01,
52
+ attribute: "FIGHT_PROP_DEFENSE",
53
+ source: "columbina-c2-lunar-crystallize"
54
+ }
55
+ };
56
+ const CONSTELLATION_2_TEAM_SOURCES = new Set(Object.values(CONSTELLATION_2_TEAM_BUFFS).map(({ source }) => source));
57
+ const GRAVITY_REACTION_TYPES = [
58
+ "LunarCharged",
59
+ "LunarBloom",
60
+ "LunarCrystallize"
61
+ ];
62
+ const ELEMENT_REACTION_TYPES = [
63
+ ["Electric", "LunarCharged"],
64
+ ["Grass", "LunarBloom"],
65
+ ["Rock", "LunarCrystallize"]
66
+ ];
67
+ const BURST_WINDOW_ID = "columbina-burst-window";
68
+ const BURST_WINDOW_SECONDS = 1.2;
69
+ const ASCENSION_4 = 4;
70
+ const MOONRIDGE_DEW_ICD_ID = "columbina-moonridge-dew-icd";
71
+ const MOONRIDGE_DEW_ICD_SECONDS = toKitSeconds(3);
72
+ const MOONRIDGE_DEW_WINDOW_ID = "columbina-moonridge-dew-window";
73
+ const MOONRIDGE_DEW_WINDOW_SECONDS = toKitSeconds(1080);
74
+ const MOONRIDGE_DEW_GAINS_PER_WINDOW = 3;
75
+ const MOONDEW_CLEANSE_DEW_COUNT = 1;
76
+ const MOONDEW_CLEANSE_DEFENCE_IGNORED = 1;
77
+ const MOONDEW_CLEANSE_STAMINA_MULTIPLIER = 0;
78
+ const checkIsMoondewCleanse = ({ party }) => countDew(party) > 0;
79
+ const gainMoonridgeDew = (context) => {
80
+ const { kitEffectState, party } = context;
81
+ const { effects } = kitEffectState;
82
+ if (!checkIsKitStatusActive(effects, 10000125, BURST_WINDOW_ID)) return;
83
+ if (checkIsKitStatusActive(effects, 10000125, MOONRIDGE_DEW_ICD_ID)) return;
84
+ const dewWindow = findKitStatus(effects, COLUMBINA_CHARACTER_ID, MOONRIDGE_DEW_WINDOW_ID);
85
+ const gains = dewWindow?.stacks ?? 0;
86
+ if (gains >= MOONRIDGE_DEW_GAINS_PER_WINDOW) return;
87
+ addKitStatus(kitEffectState, COLUMBINA_CHARACTER_ID, {
88
+ id: MOONRIDGE_DEW_WINDOW_ID,
89
+ secondsRemaining: dewWindow?.secondsRemaining ?? MOONRIDGE_DEW_WINDOW_SECONDS,
90
+ stacks: gains + 1
91
+ });
92
+ addKitStatus(kitEffectState, COLUMBINA_CHARACTER_ID, {
93
+ id: MOONRIDGE_DEW_ICD_ID,
94
+ secondsRemaining: MOONRIDGE_DEW_ICD_SECONDS
95
+ });
96
+ party.moonridgeDew = Math.min(party.moonridgeDew + 1, 3);
97
+ };
98
+ const CONSTELLATION_6 = 6;
99
+ const CONSTELLATION_6_CRITICAL_DAMAGE = .8;
100
+ const CONSTELLATION_6_SECONDS = 8;
101
+ const CONSTELLATION_6_BUFFS = /* @__PURE__ */ new Map([
102
+ ["LunarBloom", {
103
+ elements: /* @__PURE__ */ new Set(["Grass", "Water"]),
104
+ id: "columbina-c6-lunar-bloom"
105
+ }],
106
+ ["LunarCharged", {
107
+ elements: /* @__PURE__ */ new Set(["Electric", "Water"]),
108
+ id: "columbina-c6-lunar-charged"
109
+ }],
110
+ ["LunarCrystallize", {
111
+ elements: /* @__PURE__ */ new Set(["Rock", "Water"]),
112
+ id: "columbina-c6-lunar-crystallize"
113
+ }]
114
+ ]);
115
+ const gainLunacy = (kitEffectState, characterId) => {
116
+ const heldIds = kitEffectState.effects.flatMap((effect) => checkIsKitHold(effect, characterId, LUNACY_ID) ? [effect.id] : []);
117
+ for (const id of heldIds) addKitStatus(kitEffectState, characterId, {
118
+ id,
119
+ secondsRemaining: LUNACY_SECONDS
120
+ });
121
+ addKitHold(kitEffectState, characterId, {
122
+ id: LUNACY_ID,
123
+ maximum: LUNACY_MAX_STACKS,
124
+ seconds: LUNACY_SECONDS
125
+ });
126
+ };
127
+ const gravities = /* @__PURE__ */ new WeakMap();
128
+ const createGravity = () => ({
129
+ amounts: {
130
+ ["LunarBloom"]: 0,
131
+ ["LunarCharged"]: 0,
132
+ ["LunarCrystallize"]: 0
133
+ },
134
+ windowSeconds: 0
135
+ });
136
+ const getGravityRate = (combatant) => combatant.constellationCount >= CONSTELLATION_2 ? CONSTELLATION_2_GRAVITY_RATE : 0;
137
+ const getTotalGravity = (gravity) => GRAVITY_REACTION_TYPES.reduce((total, reactionType) => total + gravity.amounts[reactionType], 0);
138
+ const accrueGravity = (gravity, stepSeconds, rate) => {
139
+ if (gravity.lastReactionType !== void 0) gravity.amounts[gravity.lastReactionType] += Math.max(0, Math.min(stepSeconds, gravity.windowSeconds)) * GRAVITY_PER_SECOND * (1 + rate);
140
+ gravity.windowSeconds = Math.max(0, gravity.windowSeconds - stepSeconds);
141
+ };
142
+ const pickGravityReaction = (gravity, { characterIdCombatantMap, party }) => {
143
+ const elements = getDeployedCharacterIds(party).map((characterId) => characterIdCombatantMap.get(characterId)?.element);
144
+ const countOf = (element) => elements.filter((member) => member === element).length;
145
+ let reactionType = "LunarCharged";
146
+ let leaderCount = -1;
147
+ for (const [element, elementReactionType] of ELEMENT_REACTION_TYPES) if (countOf(element) > leaderCount) {
148
+ leaderCount = countOf(element);
149
+ reactionType = elementReactionType;
150
+ }
151
+ let maxGravity = 0;
152
+ for (const gravityReactionType of GRAVITY_REACTION_TYPES) if (gravity.amounts[gravityReactionType] > maxGravity) {
153
+ maxGravity = gravity.amounts[gravityReactionType];
154
+ reactionType = gravityReactionType;
155
+ }
156
+ return reactionType;
157
+ };
158
+ const applyConstellation1 = (context, combatant, reactionType) => {
159
+ if (reactionType === "LunarCharged") gainPartyMemberEnergy(context.party, context.activeCombatant, CONSTELLATION_1_ENERGY);
160
+ else if (reactionType === "LunarCrystallize") castKitShield(context, COLUMBINA_CHARACTER_ID, {
161
+ element: "Water",
162
+ health: CONSTELLATION_1_SHIELD_HEALTH_SHARE * getKitMaxHealth(combatant, context.kitEffectState.effects, context.party, context.characterIdCombatantMap),
163
+ secondsRemaining: CONSTELLATION_1_SHIELD_SECONDS
164
+ });
165
+ };
166
+ const applyConstellation2 = (context, combatant, reactionType) => {
167
+ buffKitMember(context.kitEffectState, COLUMBINA_CHARACTER_ID, {
168
+ amount: CONSTELLATION_2_HEALTH_SHARE,
169
+ attribute: "FIGHT_PROP_HP_PERCENT",
170
+ secondsRemaining: CONSTELLATION_2_SECONDS,
171
+ source: CONSTELLATION_2_HEALTH_SOURCE
172
+ });
173
+ if (getMoonsignLevel(context.characterIdCombatantMap, context.party) !== "AscendantGleam") return;
174
+ const { amountPerMaxHealth, attribute, source } = CONSTELLATION_2_TEAM_BUFFS[reactionType];
175
+ for (const effect of context.kitEffectState.effects) if (effect.kind === "buff" && effect.source !== void 0 && effect.source !== source && CONSTELLATION_2_TEAM_SOURCES.has(effect.source)) effect.secondsRemaining = 0;
176
+ buffKitMember(context.kitEffectState, context.activeCombatant.characterId, {
177
+ amount: amountPerMaxHealth * getKitMaxHealth(combatant, context.kitEffectState.effects, context.party, context.characterIdCombatantMap),
178
+ attribute,
179
+ isEndedOnSwap: true,
180
+ secondsRemaining: CONSTELLATION_2_SECONDS,
181
+ source
182
+ });
183
+ };
184
+ const fireGravityRipple = (context, combatant, gravity, clearsGravity) => {
185
+ const reactionType = pickGravityReaction(gravity, context);
186
+ if (clearsGravity) for (const gravityReactionType of GRAVITY_REACTION_TYPES) gravity.amounts[gravityReactionType] = 0;
187
+ if (combatant.ascension >= ASCENSION_1) gainLunacy(context.kitEffectState, combatant.characterId);
188
+ if (combatant.constellationCount >= CONSTELLATION_1) applyConstellation1(context, combatant, reactionType);
189
+ if (combatant.constellationCount >= CONSTELLATION_2) applyConstellation2(context, combatant, reactionType);
190
+ };
191
+ const getConstellation6CriticalDamage = (strike, effects) => {
192
+ const element = getKitHitElement(strike.hit, strike.combatant);
193
+ if (element === void 0) return 0;
194
+ let criticalDamage = 0;
195
+ for (const { elements, id } of CONSTELLATION_6_BUFFS.values()) if (elements.has(element) && checkIsKitStatusActive(effects, strike.combatant.characterId, id)) criticalDamage += CONSTELLATION_6_CRITICAL_DAMAGE;
196
+ return criticalDamage;
197
+ };
198
+ const createColumbinaKitBehaviour = ({ kit, readHit, readParameter, readSeconds }) => {
199
+ const skillDotHit = readHit("skillDot");
200
+ const skillDotFirstTickSeconds = readSeconds("skillDotFirstTick");
201
+ const skillDotIntervalSeconds = readSeconds("skillDotInterval");
202
+ const skillDurationSeconds = readParameter("skillDurationSeconds") + takeOne(kit.elementalSkill.hits).hitmarkSeconds;
203
+ const getSkillDotHit = ({ characterIdCombatantMap, party }) => getMoonsignLevel(characterIdCombatantMap, party) === "AscendantGleam" ? {
204
+ ...skillDotHit,
205
+ hitArea: {
206
+ ...skillDotHit.hitArea,
207
+ radius: ASCENDANT_GLEAM_SKILL_DOT_RADIUS
208
+ }
209
+ } : skillDotHit;
210
+ const castSkillField = (kitEffectState, body, combatant) => {
211
+ const gravity = createGravity();
212
+ const field = castKitField(kitEffectState, combatant.characterId, body.position, {
213
+ id: COLUMBINA_SKILL_FIELD_ID,
214
+ isFollowing: true,
215
+ nextTickSeconds: skillDotFirstTickSeconds,
216
+ onEvent: (event) => {
217
+ if (event.kind !== "ReactionTriggered") return;
218
+ for (const { reactionType } of event.reactions) if (checkIsLunarReactionType(reactionType)) {
219
+ gravity.lastReactionType = reactionType;
220
+ gravity.windowSeconds = GRAVITY_SECONDS;
221
+ }
222
+ },
223
+ onStep: (context, _field, stepSeconds) => {
224
+ accrueGravity(gravity, stepSeconds, getGravityRate(combatant));
225
+ if (getTotalGravity(gravity) >= GRAVITY_MAX) fireGravityRipple(context, combatant, gravity, true);
226
+ },
227
+ onTick: (tickContext) => castKitSummon(tickContext.kitEffectState, createKitBody(field.centre), combatant, [getSkillDotHit(tickContext)], { attackTag: "ElementalSkill" }),
228
+ secondsRemaining: skillDurationSeconds,
229
+ tickIntervalSeconds: skillDotIntervalSeconds
230
+ });
231
+ gravities.set(field, gravity);
232
+ return gravity;
233
+ };
234
+ return {
235
+ burst: { onStart: ({ kitEffectState }) => {
236
+ addKitStatus(kitEffectState, COLUMBINA_CHARACTER_ID, {
237
+ id: BURST_WINDOW_ID,
238
+ secondsRemaining: BURST_WINDOW_SECONDS
239
+ });
240
+ } },
241
+ chargedAttackVariant: {
242
+ checkIsActive: checkIsMoondewCleanse,
243
+ onStart: ({ party }) => {
244
+ spendDew(party, MOONDEW_CLEANSE_DEW_COUNT);
245
+ }
246
+ },
247
+ getChargedAttackStaminaMultiplier: (context) => checkIsMoondewCleanse(context) ? MOONDEW_CLEANSE_STAMINA_MULTIPLIER : 1,
248
+ getPartyStrikeBonus: (_member, strike, _enemy, _party, effects) => ({ criticalDamageBonus: getConstellation6CriticalDamage(strike, effects) }),
249
+ getStrikeCriticalDamageBonus: (strike, _enemy, _party, effects) => getConstellation6CriticalDamage(strike, effects),
250
+ getStrikeCriticalRateBonus: ({ combatant }, _enemy, _party, effects) => countKitHolds(effects, combatant.characterId, LUNACY_ID) * LUNACY_CRIT_RATE_PER_STACK,
251
+ getStrikeDefenceIgnored: ({ attackTag, hit }) => attackTag === "ChargedAttack" && hit.lunarHit?.lunarReactionType === "LunarBloom" ? MOONDEW_CLEANSE_DEFENCE_IGNORED : 0,
252
+ moonsignBenediction: { getBaseDamageBonus: ({ attributes }) => getBenedictionBaseDamageBonus(attributes.maxHealth) },
253
+ onKitEvent: (event, context, combatant) => {
254
+ if (event.kind !== "ReactionTriggered") return;
255
+ if (combatant.ascension >= ASCENSION_4 && event.reactions.some(({ reactionType }) => reactionType === "LunarBloom")) gainMoonridgeDew(context);
256
+ if (combatant.constellationCount < CONSTELLATION_6) return;
257
+ if (!checkIsKitStatusActive(context.kitEffectState.effects, 10000125, BURST_WINDOW_ID)) return;
258
+ for (const { reactionType } of event.reactions) {
259
+ const buff = CONSTELLATION_6_BUFFS.get(reactionType);
260
+ if (buff) for (const characterId of context.party.characterIdMemberMap.keys()) addKitStatus(context.kitEffectState, characterId, {
261
+ id: buff.id,
262
+ secondsRemaining: CONSTELLATION_6_SECONDS
263
+ });
264
+ }
265
+ },
266
+ skill: { onStart: (context) => {
267
+ const { activeCombatant: combatant, body, kitEffectState } = context;
268
+ const standingField = kitEffectState.effects.find((effect) => effect.kind === "field" && effect.id === COLUMBINA_SKILL_FIELD_ID && effect.characterId === combatant.characterId);
269
+ let gravity;
270
+ if (standingField === void 0) gravity = castSkillField(kitEffectState, body, combatant);
271
+ else {
272
+ standingField.secondsRemaining = skillDurationSeconds;
273
+ gravity = gravities.get(standingField) ?? createGravity();
274
+ }
275
+ if (combatant.constellationCount >= CONSTELLATION_1 && startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_1_ICD_ID, CONSTELLATION_1_ICD_SECONDS)) fireGravityRipple(context, combatant, gravity, false);
276
+ } }
277
+ };
278
+ };
279
+ export { createColumbinaKitBehaviour };
@@ -0,0 +1,7 @@
1
+ // src/services/kit/computeFacingAngle.ts
2
+ const computeFacingAngle = (position, facing, point) => {
3
+ const bearing = Math.atan2(position.x - point.x, position.z - point.z);
4
+ const difference = Math.abs(bearing - facing) % (2 * Math.PI);
5
+ return Math.min(difference, 2 * Math.PI - difference);
6
+ };
7
+ export { computeFacingAngle as t };
@@ -0,0 +1,186 @@
1
+ import "./EnemyState-BdsrVDVv.js";
2
+ // src/services/enemy/constants.ts
3
+ const ENEMY_STEP_SECONDS = 1 / 60;
4
+ const ENEMY_AGGRO_RANGE = 12;
5
+ const ENEMY_ALERT_SECONDS = 1;
6
+ const ENEMY_WALK_SPEED = 1.5;
7
+ const ENEMY_RUN_SPEED = 4;
8
+ const ENEMY_ATTACK_RANGE = 2;
9
+ const ENEMY_ATTACK_REACH = 2.5;
10
+ const ENEMY_WINDUP_SECONDS = .8;
11
+ const ENEMY_RECOVERY_SECONDS = 1;
12
+ const ENEMY_ATTACK_COOLDOWN_SECONDS = 2;
13
+ const ENEMY_LEASH_DISTANCE = 30;
14
+ const ENEMY_STAGGER_SECONDS = .5;
15
+ const ENEMY_DEATH_SECONDS = 2;
16
+ const ENEMY_LAUNCHED_STATUS_ID = "launched";
17
+ const ENEMY_ARRIVAL_DISTANCE = .1;
18
+ const ENGAGED_ENEMY_STATES = [
19
+ "Alert",
20
+ "Chase",
21
+ "Recovery",
22
+ "Stagger",
23
+ "Windup"
24
+ ];
25
+ const COMBAT_CLEAR_SECONDS = 5;
26
+ const COMMON_ENEMY_RESPAWN_DURATION = Temporal.Duration.from({ hours: 12 });
27
+ const ENEMY_LEVEL_BAND_SIZE = 5;
28
+ const ENEMY_LEVEL_BAND_COUNT = 19;
29
+ const COMMON_ENEMY_MORA_SHARES = [
30
+ [.4375, .65625],
31
+ [.5, .75],
32
+ [.5625, .875],
33
+ [.625, .9375],
34
+ [.6875, 1.03125],
35
+ [.75, 1.125],
36
+ [.8125, 1.21875],
37
+ [.84375, 1.28125],
38
+ [.90625, 1.34375],
39
+ [.90625, 1.375],
40
+ [.9375, 1.40625],
41
+ [.96875, 1.46875],
42
+ [1, 1.53125],
43
+ [1, 1.53125],
44
+ [1, 1.53125],
45
+ [1, 1.53125],
46
+ [1, 1.53125],
47
+ [1, 1.53125],
48
+ [1, 1.53125]
49
+ ];
50
+ const ELITE_ENEMY_MORA_SHARES = [
51
+ .425,
52
+ .5,
53
+ .55,
54
+ .6,
55
+ .675,
56
+ .725,
57
+ .8,
58
+ .825,
59
+ .875,
60
+ .9,
61
+ .925,
62
+ .975,
63
+ 1,
64
+ 1,
65
+ 1,
66
+ 1,
67
+ 1,
68
+ 1,
69
+ 1
70
+ ];
71
+ const COMMON_ENEMY_CHARACTER_EXPERIENCES = [
72
+ 10,
73
+ 10,
74
+ 11,
75
+ 12,
76
+ 12,
77
+ 13,
78
+ 13,
79
+ 14,
80
+ 14,
81
+ 15,
82
+ 16,
83
+ 16,
84
+ 17,
85
+ 17,
86
+ 18,
87
+ 18,
88
+ 19,
89
+ 19,
90
+ 20
91
+ ];
92
+ const ELITE_ENEMY_CHARACTER_EXPERIENCES = [
93
+ 30,
94
+ 31,
95
+ 33,
96
+ 35,
97
+ 36,
98
+ 38,
99
+ 40,
100
+ 41,
101
+ 43,
102
+ 45,
103
+ 47,
104
+ 48,
105
+ 50,
106
+ 52,
107
+ 53,
108
+ 55,
109
+ 57,
110
+ 58,
111
+ 60
112
+ ];
113
+ const ENEMY_MATERIAL_TIER_SHARES = [
114
+ [
115
+ .40005,
116
+ .42694,
117
+ .46073,
118
+ .49441,
119
+ .52808,
120
+ .56176,
121
+ .59555,
122
+ .62922,
123
+ .66289,
124
+ .69669,
125
+ .73037,
126
+ .76404,
127
+ .79772,
128
+ .83151,
129
+ .86518,
130
+ .89886,
131
+ .93253,
132
+ .96633,
133
+ 1
134
+ ],
135
+ [
136
+ 0,
137
+ 0,
138
+ 0,
139
+ 0,
140
+ 0,
141
+ 0,
142
+ 0,
143
+ 0,
144
+ .66289,
145
+ .69669,
146
+ .73037,
147
+ .76404,
148
+ .79772,
149
+ .83151,
150
+ .86518,
151
+ .89886,
152
+ .93253,
153
+ .96633,
154
+ 1
155
+ ],
156
+ [
157
+ 0,
158
+ 0,
159
+ 0,
160
+ 0,
161
+ 0,
162
+ 0,
163
+ 0,
164
+ 0,
165
+ 0,
166
+ 0,
167
+ 0,
168
+ 0,
169
+ .79772,
170
+ .83151,
171
+ .86518,
172
+ .89886,
173
+ .93253,
174
+ .96633,
175
+ 1
176
+ ]
177
+ ];
178
+ const ENEMY_CAPSULE_RADIUS = .4;
179
+ const ENEMY_CAPSULE_HEIGHT = 1.6;
180
+ const ENEMY_CAPACITY = 64;
181
+ const ENEMY_DROP_OFFSET = .5;
182
+ const ENEMY_HIT_TINT_SECONDS = .15;
183
+ const ENEMY_HIT_FLASH_SECONDS = .1;
184
+ const ENEMY_HIT_FLASH_RADIUS = .3;
185
+ const HIT_TINT_COLOR = 16777215;
186
+ export { ENEMY_WALK_SPEED as A, ENEMY_LEVEL_BAND_COUNT as C, ENEMY_RUN_SPEED as D, ENEMY_RECOVERY_SECONDS as E, ENGAGED_ENEMY_STATES as M, HIT_TINT_COLOR as N, ENEMY_STAGGER_SECONDS as O, ENEMY_LEASH_DISTANCE as S, ENEMY_MATERIAL_TIER_SHARES as T, ENEMY_DROP_OFFSET as _, ELITE_ENEMY_CHARACTER_EXPERIENCES as a, ENEMY_HIT_TINT_SECONDS as b, ENEMY_ALERT_SECONDS as c, ENEMY_ATTACK_RANGE as d, ENEMY_ATTACK_REACH as f, ENEMY_DEATH_SECONDS as g, ENEMY_CAPSULE_RADIUS as h, COMMON_ENEMY_RESPAWN_DURATION as i, ENEMY_WINDUP_SECONDS as j, ENEMY_STEP_SECONDS as k, ENEMY_ARRIVAL_DISTANCE as l, ENEMY_CAPSULE_HEIGHT as m, COMMON_ENEMY_CHARACTER_EXPERIENCES as n, ELITE_ENEMY_MORA_SHARES as o, ENEMY_CAPACITY as p, COMMON_ENEMY_MORA_SHARES as r, ENEMY_AGGRO_RANGE as s, COMBAT_CLEAR_SECONDS as t, ENEMY_ATTACK_COOLDOWN_SECONDS as u, ENEMY_HIT_FLASH_RADIUS as v, ENEMY_LEVEL_BAND_SIZE as w, ENEMY_LAUNCHED_STATUS_ID as x, ENEMY_HIT_FLASH_SECONDS as y };
@@ -0,0 +1,73 @@
1
+ import "./characterPack-DzYMqBNM.js";
2
+ import { t as ReactionType } from "./ReactionType-BTiek5WA.js";
3
+ import "./constants-jHIdcxxW.js";
4
+ import { LocomotionState } from "genshin-engine";
5
+ // src/services/kit/constants.ts
6
+ const STRIKE_TARGETING_AREA = Object.freeze({
7
+ angle: 2 * Math.PI,
8
+ height: 6,
9
+ radius: 5
10
+ });
11
+ const SKILL_TARGETING_AREA = Object.freeze({
12
+ angle: 2 * Math.PI,
13
+ height: 10,
14
+ radius: 15
15
+ });
16
+ const ON_FOOT_LOCOMOTION_STATES = [
17
+ LocomotionState.Idle,
18
+ LocomotionState.Run,
19
+ LocomotionState.Sprint,
20
+ LocomotionState.Walk
21
+ ];
22
+ const AIRBORNE_LOCOMOTION_STATES = [LocomotionState.Fall, LocomotionState.Jump];
23
+ const MOVEMENT_LOCOMOTION_STATES = [LocomotionState.Dash, ...AIRBORNE_LOCOMOTION_STATES];
24
+ const CHARGED_ATTACK_HOLD_SECONDS = .3;
25
+ const NORMAL_ATTACK_RESET_SECONDS = .5;
26
+ const PLUNGE_COLLISION_SECONDS = .3;
27
+ const HIGH_PLUNGE_MIN_HEIGHT = 2.4;
28
+ const ALTITUDE_LIMIT = 2;
29
+ const ALTITUDE_COEFFICIENT = .2;
30
+ const TARGET_DISTANCE_WEIGHT = .7;
31
+ const TARGET_ANGLE_WEIGHT = .3;
32
+ const ENEMY_STRIKE_TALENT_MULTIPLIER = 1;
33
+ const ENEMY_STRIKE_GAUGE = 1;
34
+ const SUMMON_LINGER_SECONDS = .1;
35
+ const UNBOUNDED_FIELD_RADIUS = Number.POSITIVE_INFINITY;
36
+ const ELECTRO_REACTION_TYPES = /* @__PURE__ */ new Set([
37
+ ReactionType.Aggravate,
38
+ ReactionType.ElectroCharged,
39
+ ReactionType.Hyperbloom,
40
+ ReactionType.Overloaded,
41
+ ReactionType.Quicken,
42
+ ReactionType.Superconduct
43
+ ]);
44
+ const MELEE_WEAPON_TYPES = /* @__PURE__ */ new Set([
45
+ "WEAPON_CLAYMORE",
46
+ "WEAPON_POLE",
47
+ "WEAPON_SWORD_ONE_HAND"
48
+ ]);
49
+ const NIGHTSOUL_BLESSING_STATUS_ID = "nightsoul-blessing";
50
+ const KIT_SKILL_CHARGE_ID = "kit-skill-charge";
51
+ const KIT_CHARGE_SKIP_ID = "kit-charge-skip";
52
+ const KIT_SWAP_LOCK_ID = "kit-swap-lock";
53
+ const NIGHTSOUL_POINTS_ID = "nightsoul-points";
54
+ const HAUNTED_NIGHT_STATUS_ID = "haunted-night";
55
+ const NIGHTINGALE_SONG_STATUS_ID = "nightingale-song";
56
+ const NIGHTINGALE_SONG_EXTRA_STATUS_ID = "nightingale-song-extra";
57
+ const POLESTAR_FIELD_RADIUS = 15;
58
+ const POLESTAR_FIELD_SECONDS = 7;
59
+ const POLESTAR_FIELD_TICK_SECONDS = 4;
60
+ const POLESTAR_FIELD_ID = "polestar";
61
+ const POLESTAR_PHYSICAL_RES_REDUCTION = .4;
62
+ const POLESTAR_SHRED_STATUS_ID = "polestar-shred";
63
+ const POLESTAR_BUFF_SOURCE = "polestar";
64
+ const RADIANCE_STELLAR_CONDUCT_STATUS_ID = "radiance-stellar-conduct";
65
+ const STELLAR_VORTEX_MAX_STACKS = 6;
66
+ const STELLAR_VORTEX_LEVEL_ONE_RADIUS = 6;
67
+ const STELLAR_VORTEX_LEVEL_TWO_RADIUS = 8;
68
+ const SOURCEWATER_DROPLET_FIELD_ID = "sourcewater-droplet";
69
+ const SOURCEWATER_DROPLET_SECONDS = 878 / 60;
70
+ const HEXEREI_SECRET_RITE_MINIMUM = 2;
71
+ const RESCUE_ESSENTIALS_CAP = 150;
72
+ const RESCUE_ESSENTIALS_LUNAR_CHARGED_DAMAGE_BONUS = .002;
73
+ export { RADIANCE_STELLAR_CONDUCT_STATUS_ID as A, SUMMON_LINGER_SECONDS as B, POLESTAR_BUFF_SOURCE as C, POLESTAR_FIELD_TICK_SECONDS as D, POLESTAR_FIELD_SECONDS as E, SOURCEWATER_DROPLET_SECONDS as F, TARGET_DISTANCE_WEIGHT as H, STELLAR_VORTEX_LEVEL_ONE_RADIUS as I, STELLAR_VORTEX_LEVEL_TWO_RADIUS as L, RESCUE_ESSENTIALS_LUNAR_CHARGED_DAMAGE_BONUS as M, SKILL_TARGETING_AREA as N, POLESTAR_PHYSICAL_RES_REDUCTION as O, SOURCEWATER_DROPLET_FIELD_ID as P, STELLAR_VORTEX_MAX_STACKS as R, PLUNGE_COLLISION_SECONDS as S, POLESTAR_FIELD_RADIUS as T, UNBOUNDED_FIELD_RADIUS as U, TARGET_ANGLE_WEIGHT as V, NIGHTINGALE_SONG_STATUS_ID as _, ELECTRO_REACTION_TYPES as a, NORMAL_ATTACK_RESET_SECONDS as b, HAUNTED_NIGHT_STATUS_ID as c, KIT_CHARGE_SKIP_ID as d, KIT_SKILL_CHARGE_ID as f, NIGHTINGALE_SONG_EXTRA_STATUS_ID as g, MOVEMENT_LOCOMOTION_STATES as h, CHARGED_ATTACK_HOLD_SECONDS as i, RESCUE_ESSENTIALS_CAP as j, POLESTAR_SHRED_STATUS_ID as k, HEXEREI_SECRET_RITE_MINIMUM as l, MELEE_WEAPON_TYPES as m, ALTITUDE_COEFFICIENT as n, ENEMY_STRIKE_GAUGE as o, KIT_SWAP_LOCK_ID as p, ALTITUDE_LIMIT as r, ENEMY_STRIKE_TALENT_MULTIPLIER as s, AIRBORNE_LOCOMOTION_STATES as t, HIGH_PLUNGE_MIN_HEIGHT as u, NIGHTSOUL_BLESSING_STATUS_ID as v, POLESTAR_FIELD_ID as w, ON_FOOT_LOCOMOTION_STATES as x, NIGHTSOUL_POINTS_ID as y, STRIKE_TARGETING_AREA as z };
@@ -0,0 +1,45 @@
1
+ // src/services/constants.ts
2
+ const TILE_SELECTION_CAPACITY = 512;
3
+ const TERRAIN_WORKER_COUNT = 2;
4
+ const MAX_PENDING_TILE_COUNT = 8;
5
+ const FINEST_TILE_LEVEL = 0;
6
+ const ORIGIN_SHIFT_THRESHOLD = 1024;
7
+ const ORIGIN_SHIFT_STEP = 512;
8
+ const WATER_SURFACE_SIZE = 3200;
9
+ const GRASS_CAPTURE_SIZE = 160;
10
+ const GRASS_CAPTURE_RESOLUTION = 512;
11
+ const GRASS_RECAPTURE_DISTANCE = 20;
12
+ const GRASS_BLADE_SEGMENT_COUNT = 3;
13
+ const CLOUD_DRIFT_PER_WIND = .012;
14
+ const REGION_REACH = 1500;
15
+ const REGION_RECHECK_DISTANCE = 64;
16
+ const AREA_WEATHER_CHANGE_SECONDS = 300;
17
+ const DATA_FETCH_TIMEOUT_MS = 1e4;
18
+ const DATA_FETCH_RETRY_MS = 5e3;
19
+ const TUNING_TINT_RANGE = .1;
20
+ const TUNING_TINT_CHANNELS = [
21
+ {
22
+ key: "0",
23
+ name: "red"
24
+ },
25
+ {
26
+ key: "1",
27
+ name: "green"
28
+ },
29
+ {
30
+ key: "2",
31
+ name: "blue"
32
+ }
33
+ ];
34
+ const FIXED_STEP_SECONDS = 1 / 60;
35
+ const WORLD_RANDOM_SEED = 1;
36
+ const CAMERA_FRAME_PRIORITY = -1;
37
+ const SHADOW_FRAME_PRIORITY = 1;
38
+ const BODY_SHADOW_CASCADES = 2;
39
+ const ENEMY_POSE_LENGTH = 3;
40
+ const CASTER_REDRAW_DISTANCE = .25;
41
+ const CASTER_REDRAW_ANGLE = .1;
42
+ const CHARACTER_PLACEHOLDER_COLOR = 15262420;
43
+ const UNDRAWN_EFFECTS_MESH_REGEX = /^Eff_/u;
44
+ const UNDRAWN_STAGE_PLANES_MESH_REGEX = /^Stages_(?:DecalCube|Plane)_/u;
45
+ export { WORLD_RANDOM_SEED as A, TERRAIN_WORKER_COUNT as C, UNDRAWN_EFFECTS_MESH_REGEX as D, TUNING_TINT_RANGE as E, UNDRAWN_STAGE_PLANES_MESH_REGEX as O, SHADOW_FRAME_PRIORITY as S, TUNING_TINT_CHANNELS as T, MAX_PENDING_TILE_COUNT as _, CASTER_REDRAW_DISTANCE as a, REGION_REACH as b, DATA_FETCH_RETRY_MS as c, FINEST_TILE_LEVEL as d, FIXED_STEP_SECONDS as f, GRASS_RECAPTURE_DISTANCE as g, GRASS_CAPTURE_SIZE as h, CASTER_REDRAW_ANGLE as i, WATER_SURFACE_SIZE as k, DATA_FETCH_TIMEOUT_MS as l, GRASS_CAPTURE_RESOLUTION as m, BODY_SHADOW_CASCADES as n, CHARACTER_PLACEHOLDER_COLOR as o, GRASS_BLADE_SEGMENT_COUNT as p, CAMERA_FRAME_PRIORITY as r, CLOUD_DRIFT_PER_WIND as s, AREA_WEATHER_CHANGE_SECONDS as t, ENEMY_POSE_LENGTH as u, ORIGIN_SHIFT_STEP as v, TILE_SELECTION_CAPACITY as w, REGION_RECHECK_DISTANCE as x, ORIGIN_SHIFT_THRESHOLD as y };
@@ -0,0 +1,3 @@
1
+ // src/services/shared/constants.ts
2
+ const KIT_FRAMES_PER_SECOND = 60;
3
+ export { KIT_FRAMES_PER_SECOND as t };
@@ -0,0 +1,48 @@
1
+ import { MmdBoneName } from "genshin-engine";
2
+ // src/services/character/avatar/constants.ts
3
+ const AVATAR_COMPONENT = "playergirl";
4
+ const AVATAR_TEXTURE_FOLDER = "Texture2D";
5
+ const AVATAR_TEXTURE_SLOTS = [
6
+ {
7
+ isColour: false,
8
+ slot: "_FaceMapTex"
9
+ },
10
+ {
11
+ isColour: false,
12
+ slot: "_LightMapTex"
13
+ },
14
+ {
15
+ isColour: true,
16
+ slot: "_MTMap"
17
+ },
18
+ {
19
+ isColour: true,
20
+ slot: "_MainTex"
21
+ },
22
+ {
23
+ isColour: true,
24
+ slot: "_PackedShadowRampTex"
25
+ }
26
+ ];
27
+ const AVATAR_HUMANOID_MMD_NAME_MAP = {
28
+ Chest: MmdBoneName.Upper2,
29
+ Head: MmdBoneName.Head,
30
+ Hips: MmdBoneName.Lower,
31
+ LeftFoot: MmdBoneName.LeftAnkle,
32
+ LeftHand: MmdBoneName.LeftWrist,
33
+ LeftLowerArm: MmdBoneName.LeftElbow,
34
+ LeftLowerLeg: MmdBoneName.LeftKnee,
35
+ LeftShoulder: MmdBoneName.LeftShoulder,
36
+ LeftUpperArm: MmdBoneName.LeftArm,
37
+ LeftUpperLeg: MmdBoneName.LeftLeg,
38
+ Neck: MmdBoneName.Neck,
39
+ RightFoot: MmdBoneName.RightAnkle,
40
+ RightHand: MmdBoneName.RightWrist,
41
+ RightLowerArm: MmdBoneName.RightElbow,
42
+ RightLowerLeg: MmdBoneName.RightKnee,
43
+ RightShoulder: MmdBoneName.RightShoulder,
44
+ RightUpperArm: MmdBoneName.RightArm,
45
+ RightUpperLeg: MmdBoneName.RightLeg,
46
+ Spine: MmdBoneName.Upper
47
+ };
48
+ export { AVATAR_TEXTURE_SLOTS as i, AVATAR_HUMANOID_MMD_NAME_MAP as n, AVATAR_TEXTURE_FOLDER as r, AVATAR_COMPONENT as t };
@@ -0,0 +1,17 @@
1
+ import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
2
+ import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
3
+ import { t as countKitResource } from "./countKitResource-CPve-dw2.js";
4
+ import { t as spendKitResource } from "./spendKitResource-CC5kZDgu.js";
5
+ // src/services/kit/effects/consumeKitResource.ts
6
+ const consumeKitResource = (kitEffectState, characterId, id, amount) => {
7
+ const status = findKitStatus(kitEffectState.effects, characterId, id);
8
+ const held = countKitResource(kitEffectState.effects, characterId, id);
9
+ if (status === void 0 || held < amount) return false;
10
+ if (held === amount) spendKitResource(kitEffectState, characterId, id);
11
+ else addKitStatus(kitEffectState, characterId, {
12
+ ...status,
13
+ stacks: held - amount
14
+ });
15
+ return true;
16
+ };
17
+ export { consumeKitResource as t };
@@ -0,0 +1,4 @@
1
+ import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
2
+ // src/services/kit/effects/countKitResource.ts
3
+ const countKitResource = (effects, characterId, id) => findKitStatus(effects, characterId, id)?.stacks ?? 0;
4
+ export { countKitResource as t };