genshin-world 4.3.3 → 4.5.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.
- package/README.md +39 -16
- package/dist/Attribute-FE76VuWb.js +47 -0
- package/dist/AuraType-CiHpg4GS.js +13 -0
- package/dist/{ElementDamageBonusAttributeMap-Cf1kBcTu.js → ElementDamageBonusAttributeMap-Bgf-ujSP.js} +2 -1
- package/dist/addKitStatus-D3DgePzt.js +10 -0
- package/dist/{ainoKit-Z23iOdpE.js → ainoKit-BGP5pu5T.js} +33 -10
- package/dist/{albedoKit-h6MSXqhl.js → albedoKit-DAJKIiIE.js} +22 -8
- package/dist/{alhaithamKit-2VrwmZzn.js → alhaithamKit-DQWwT5Et.js} +17 -8
- package/dist/{aloyKit-Dlk_fLbL.js → aloyKit-DRi2hSnt.js} +23 -17
- package/dist/{amberKit-BuYU5ACZ.js → amberKit-BlwZ_3EN.js} +8 -6
- package/dist/arlecchinoKit-Q6xz16oZ.js +37 -0
- package/dist/{ayakaKit-D7K6RdMw.js → ayakaKit-BkvjSRw8.js} +11 -9
- package/dist/{ayatoKit-qQp-Ayun.js → ayatoKit-DA4dHSo5.js} +22 -16
- package/dist/{baizhuKit-9i8Hvfeg.js → baizhuKit-tr6Adax1.js} +19 -7
- package/dist/{barbaraKit-DMo_2qWo.js → barbaraKit-Cm3iXp-_.js} +9 -7
- package/dist/{beidouKit-1lURCwhO.js → beidouKit-BTDmjh54.js} +32 -32
- package/dist/{bennettKit-B-ipp-MR.js → bennettKit-BB8WO9BW.js} +14 -11
- package/dist/{candaceKit-oGYu9t5n.js → candaceKit-xP3OdFF1.js} +37 -8
- package/dist/{castKitField-BhB1fy3l.js → castKitField-B4qvtyqk.js} +1 -1
- package/dist/charlotteKit-CWIXixYz.js +176 -0
- package/dist/{chascaKit-isny33W1.js → chascaKit-CSbOZVZu.js} +5 -3
- package/dist/checkIsKitStatusActive-DXqQEIWV.js +4 -0
- package/dist/chevreuseKit-D4YBmfZt.js +72 -0
- package/dist/{chioriKit-CKfqMVtb.js → chioriKit-EkVgfoAT.js} +10 -8
- package/dist/{chongyunKit-DeZG-qOb.js → chongyunKit-CaGyY-Ox.js} +10 -7
- package/dist/{citlaliKit-BLY9P2cd.js → citlaliKit-D3s0VDcT.js} +10 -3
- package/dist/{clorindeKit-DGNp_1SZ.js → clorindeKit-Dp8vu9Qm.js} +5 -3
- package/dist/{collectKitEnergyDrops-4kTI3aGH.js → collectKitEnergyDrops-CG_RM4My.js} +3 -3
- package/dist/{colleiKit-CVBvP9-k.js → colleiKit-Czm_d4d5.js} +4 -4
- package/dist/{columbinaKit-BqmNtRDK.js → columbinaKit-BAYIWsJc.js} +11 -9
- package/dist/{constants-BIXoNz1x.js → constants-12fZ4HHz.js} +11 -5
- package/dist/{constants-r10WzaUG.js → constants-BTk8lcI_.js} +14 -1
- package/dist/{constants-DWgLZz-I.js → constants-DB_mcGtc.js} +5 -2
- package/dist/{consumeKitResource-DknosO6e.js → consumeKitResource-CxS0-hNi.js} +2 -2
- package/dist/{cynoKit-bhub8RfD.js → cynoKit-CGV-oxJF.js} +17 -13
- package/dist/dahliaKit-2117hXRk.js +69 -0
- package/dist/{dehyaKit-1qJYvLv-.js → dehyaKit-1N72XzVC.js} +4 -2
- package/dist/{dilucKit-DslGKmxO.js → dilucKit-C7zMjT-W.js} +5 -3
- package/dist/{dionaKit-B33zk3GI.js → dionaKit-BlfcKhIz.js} +48 -7
- package/dist/doriKit-Q2xz9GmQ.js +31 -0
- package/dist/{durinKit-CpCXxj-r.js → durinKit-CvgMpTL4.js} +5 -3
- package/dist/{emilieKit-BZqz4PVs.js → emilieKit-C0gUztv2.js} +2 -2
- package/dist/{escoffierKit-DFRj0Hpo.js → escoffierKit-MbLX6779.js} +21 -9
- package/dist/{eulaKit-BzD8ye_S.js → eulaKit-6WRTplwN.js} +13 -8
- package/dist/{faruzanKit-C5WQz91G.js → faruzanKit-BvIh7odY.js} +4 -3
- package/dist/{fischlKit-e4xAt26v.js → fischlKit-B-9CjGXV.js} +13 -10
- package/dist/{flinsKit-D82N06z5.js → flinsKit-oWonxdlY.js} +16 -3
- package/dist/freminetKit-D_sHoaIp.js +63 -0
- package/dist/{furinaKit-CzTKkE0N.js → furinaKit-BQH1g6dB.js} +41 -28
- package/dist/{gainKitResource-3F1z8Aco.js → gainKitResource-CNEFzX4H.js} +1 -1
- package/dist/{gamingKit-yxYvslgf.js → gamingKit-CE_SPUk_.js} +1 -1
- package/dist/{ganyuKit-B2pxzHKL.js → ganyuKit-BKUXTEld.js} +27 -4
- package/dist/{getBuffedCombatant-CwXmBrc6.js → getBuffedCombatant-DGjgyKdW.js} +4 -4
- package/dist/{gorouKit--Luf6-WZ.js → gorouKit-CElR4kHO.js} +7 -5
- package/dist/{heizouKit-DRleoyzF.js → heizouKit-C9RZ12py.js} +17 -10
- package/dist/{huTaoKit-WDMpqAzD.js → huTaoKit-B8RnVweC.js} +33 -16
- package/dist/{iansanKit-BPzX4C36.js → iansanKit-o5yurFW0.js} +92 -23
- package/dist/{ifaKit-Z57TFRSg.js → ifaKit-0RwkwCDe.js} +5 -6
- package/dist/{illugaKit-86u4wqrU.js → illugaKit-BPZGhZwK.js} +9 -7
- package/dist/index-DKFK4_Ih.d.ts +29419 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.js +25223 -16603
- package/dist/{ineffaKit-D0SA01X2.js → ineffaKit-CmZxbaBi.js} +36 -11
- package/dist/{ittoKit-hM51Mywb.js → ittoKit-D1QGmUtM.js} +46 -12
- package/dist/{jahodaKit-CqtBpzVS.js → jahodaKit-UA2Tp-7O.js} +23 -14
- package/dist/{jeanKit-fwjmnF1v.js → jeanKit-oEjB1MxJ.js} +63 -9
- package/dist/{kachinaKit-Dyh5F-ob.js → kachinaKit-BvyiZGJf.js} +1 -1
- package/dist/{kaeyaKit-SBM0QxJ5.js → kaeyaKit-CzfMsH91.js} +12 -5
- package/dist/{kavehKit-1XyMxtUb.js → kavehKit-BwzF1tkH.js} +5 -3
- package/dist/{kazuhaKit-C726LLZy.js → kazuhaKit-DrVGSCvF.js} +34 -6
- package/dist/{keqingKit-O_V-tx1h.js → keqingKit-B0yC6wvb.js} +46 -7
- package/dist/{kinichKit-DIVa0P5s.js → kinichKit-de766BEY.js} +6 -4
- package/dist/{kiraraKit-nS9iOECm.js → kiraraKit-CxQhw2tt.js} +2 -1
- package/dist/{kleeKit-DzbELTyN.js → kleeKit-DrDxa_LO.js} +29 -8
- package/dist/{kokomiKit-BRzXNRVb.js → kokomiKit-BqtPZktg.js} +7 -5
- package/dist/{kujouSaraKit-BpN3Ipay.js → kujouSaraKit-2XnMeHJh.js} +23 -8
- package/dist/{kukiKit-DRdmE41e.js → kukiKit-DR2szNbR.js} +21 -5
- package/dist/{lanYanKit-CRK1J-LX.js → lanYanKit-DsodOaIC.js} +1 -1
- package/dist/{laumaKit-CRc88J5l.js → laumaKit-DEj4CPuv.js} +42 -9
- package/dist/{laylaKit-B7Pjqgzw.js → laylaKit-DsMCfdaw.js} +51 -18
- package/dist/{lisaKit-BJqj8t7j.js → lisaKit-DSjNkEhN.js} +8 -6
- package/dist/{lynetteKit-CfwhsLsJ.js → lynetteKit-D1Ogk-zD.js} +6 -4
- package/dist/{lyneyKit-BQiI15dt.js → lyneyKit-DliAqTaa.js} +8 -3
- package/dist/{mavuikaKit-MMBY1DJn.js → mavuikaKit-P-UGX4SG.js} +1 -1
- package/dist/{mikaKit-BIMafqBI.js → mikaKit-C7VZ33we.js} +1 -1
- package/dist/{mizukiKit-CC34yGgJ.js → mizukiKit-C5cNt5YD.js} +18 -2
- package/dist/{monaKit-BlrXXHlB.js → monaKit-BkaM7GNg.js} +9 -7
- package/dist/nahidaKit-BIAOyyY6.js +207 -0
- package/dist/{naviaKit-DDttg5Dp.js → naviaKit-BijwEz_P.js} +9 -6
- package/dist/{neferKit-Z-QBM46z.js → neferKit-Deg6U9-Y.js} +2 -2
- package/dist/{neuvilletteKit-B4EhID2O.js → neuvilletteKit-C92eqydr.js} +19 -13
- package/dist/{nicoleKit-Dmrpe0yU.js → nicoleKit-Cc4BOTai.js} +32 -27
- package/dist/{nilouKit-CoztU-uZ.js → nilouKit-BozGg1ex.js} +56 -26
- package/dist/{ningguangKit-BGOXmwd-.js → ningguangKit-DUdANcXN.js} +17 -4
- package/dist/{noelleKit-nl5ar8f1.js → noelleKit-C3D6Rvdm.js} +8 -5
- package/dist/{odetteKit-Bu1W8GX7.js → odetteKit-BmshjGvv.js} +3 -3
- package/dist/{ororonKit-CboDk9B8.js → ororonKit-iJbv44S9.js} +5 -5
- package/dist/{pruneKit-xgQ9cym6.js → pruneKit-DHyw27oI.js} +1 -1
- package/dist/{qiqiKit-lz_qLyLu.js → qiqiKit-DgIaJuTE.js} +12 -7
- package/dist/{raidenKit-CVTi4bpy.js → raidenKit-DhXNpHz5.js} +8 -7
- package/dist/{razorKit-BHyrlVEl.js → razorKit-CbWRxSI2.js} +28 -20
- package/dist/{readCharacterAvatar-xauJoD8Q.js → readCharacterAvatar-CUATz36q.js} +6 -5
- package/dist/rosariaKit-TRY4PA3E.js +110 -0
- package/dist/{save-W-sjOoN_.js → save-D-IcGqEm.js} +639 -272
- package/dist/save.d.ts +1 -1
- package/dist/save.js +1 -1
- package/dist/{sayuKit-DQbPlL_6.js → sayuKit-CrnsmO_J.js} +30 -8
- package/dist/{shenheKit-Xu_rt5aN.js → shenheKit-DII-mS2u.js} +7 -6
- package/dist/sigewinneKit-3120CDT8.js +53 -0
- package/dist/{skirkKit-CK183sCe.js → skirkKit-7VWgs8i4.js} +5 -1
- package/dist/style.css +7205 -3939
- package/dist/{sucroseKit-Brr_FwwP.js → sucroseKit-44fzCvn9.js} +7 -7
- package/dist/{tartagliaKit-DQzYxDRn.js → tartagliaKit-CGTfH-Tr.js} +22 -16
- package/dist/terrainTileWorker.js +4 -4
- package/dist/{thomaKit-CesNlmDH.js → thomaKit-Dl9rWoaP.js} +11 -6
- package/dist/{tighnariKit-B9BZlgE9.js → tighnariKit-2_-s6l8w.js} +3 -3
- package/dist/{varesaKit-D5iKxzdo.js → varesaKit-CRNMJSoc.js} +5 -3
- package/dist/{ventiKit-CM94zgZy.js → ventiKit-CA3xSK6I.js} +21 -3
- package/dist/{wandererKit-CW3sLw53.js → wandererKit-B_ifeLC0.js} +3 -1
- package/dist/{wriothesleyKit-CPwNVWnr.js → wriothesleyKit-DeQsvL4q.js} +11 -4
- package/dist/{xianglingKit-DAFhr2LW.js → xianglingKit-C817XGaX.js} +5 -4
- package/dist/{xianyunKit-G4ateSub.js → xianyunKit-CMHAhay9.js} +17 -10
- package/dist/{xiaoKit-CQljYrZS.js → xiaoKit-D4YDN5xd.js} +5 -4
- package/dist/xilonenKit-7NhQqLuF.js +80 -0
- package/dist/{xingqiuKit-nURrQ7vt.js → xingqiuKit-CfdF5bY4.js} +10 -5
- package/dist/{xinyanKit-DU0WpVms.js → xinyanKit-D3UNKfTl.js} +6 -5
- package/dist/{yaeMikoKit-kSDqAFyn.js → yaeMikoKit-C9vWIy6z.js} +21 -2
- package/dist/{yanfeiKit-Cst973qA.js → yanfeiKit-Dohf97o8.js} +25 -9
- package/dist/{yaoyaoKit-6yjjf3np.js → yaoyaoKit-B-fGVZ8A.js} +15 -10
- package/dist/{yelanKit-SSdzqMQa.js → yelanKit-CweIegpm.js} +42 -12
- package/dist/{yoimiyaKit-DqiQvgAt.js → yoimiyaKit-CsSrLPNg.js} +16 -9
- package/dist/{yunjinKit-lCP6TTRP.js → yunjinKit-B3yKAtk5.js} +29 -12
- package/dist/{zhongliKit-CTjDWUoW.js → zhongliKit-GyC8l0Qd.js} +11 -9
- package/dist/{zibaiKit-CatYt9BG.js → zibaiKit-CScZzBRk.js} +3 -3
- package/package.json +18 -21
- package/dist/GameDataset-oS0Tc9KV.js +0 -272
- package/dist/ReactionType-BTiek5WA.js +0 -36
- package/dist/TransformativeReactionType-DYhIEAoe.js +0 -14
- package/dist/addKitStatus-CecgwPmO.js +0 -8
- package/dist/arlecchinoKit-B2WJP5Y5.js +0 -16
- package/dist/characterPack-B3e_YsdJ.d.ts +0 -115
- package/dist/characterPack-DzYMqBNM.js +0 -697
- package/dist/characterPack.d.ts +0 -2
- package/dist/characterPack.js +0 -3
- package/dist/charlotteKit-BjNvcN8w.js +0 -103
- package/dist/chevreuseKit-BppMndmv.js +0 -47
- package/dist/dahliaKit-BeEPFn33.js +0 -20
- package/dist/doriKit-BmYySQcG.js +0 -24
- package/dist/freminetKit-Dq9ebIts.js +0 -20
- package/dist/index-C5rNBYhp.d.ts +0 -26017
- package/dist/nahidaKit-ZHrD7-m7.js +0 -112
- package/dist/rosariaKit-DEpP8gj7.js +0 -59
- package/dist/sigewinneKit-NOWCcIW4.js +0 -21
- package/dist/xilonenKit-39u8vLuk.js +0 -41
package/README.md
CHANGED
|
@@ -5,19 +5,14 @@
|
|
|
5
5
|
[![NPM downloads][badge-npm-downloads]][url-npm]
|
|
6
6
|
[![NPM Unpacked Size (with version)][badge-npm-unpacked-size]][url-npm]
|
|
7
7
|
|
|
8
|
-
Genshin Impact's world, rebuilt as an unofficial, non-commercial fan work on [`genshin-engine`](https://github.com/Esposter/Esposter/tree/main/packages/genshin-engine)
|
|
8
|
+
Genshin Impact's world, rebuilt as an unofficial, non-commercial fan work on [`genshin-engine`](https://github.com/Esposter/Esposter/tree/main/packages/genshin-engine), with no image, model or sound from the game. It is not affiliated with HoYoverse.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
- each region's authored data: its heights, colours, look and landmarks;
|
|
12
|
-
- the TresJS components and composables that build all of it;
|
|
13
|
-
- the game's screens — its opening's splashes, login screen and startup loading — built from [`genshin-interface`](https://github.com/Esposter/Esposter/tree/main/packages/genshin-interface)'s pieces.
|
|
14
|
-
|
|
15
|
-
It ships no image, model or sound from the game: every mesh, texture and shader is generated by code, and each mark on a screen is a vector path traced from the game's own or taken from a published vector of it.
|
|
10
|
+
Design notes live in [the specs](https://github.com/Esposter/Esposter/tree/main/openspec/specs/genshin).
|
|
16
11
|
|
|
17
12
|
## Table of Contents
|
|
18
13
|
|
|
19
14
|
- 🚀 [Getting Started](#getting-started)
|
|
20
|
-
-
|
|
15
|
+
- 🧩 [Key Exports](#key-exports)
|
|
21
16
|
- ⚖️ [License](#license)
|
|
22
17
|
|
|
23
18
|
---
|
|
@@ -25,37 +20,65 @@ It ships no image, model or sound from the game: every mesh, texture and shader
|
|
|
25
20
|
## <a name="getting-started">🚀 Getting Started</a>
|
|
26
21
|
|
|
27
22
|
```bash
|
|
28
|
-
pnpm i genshin-world genshin-engine genshin-interface @esposter/shared @tresjs/core @vueuse/core three vue zod
|
|
23
|
+
pnpm i genshin-world genshin-engine genshin-interface genshin-text @esposter/shared @tresjs/core @vueuse/core three vue zod
|
|
29
24
|
```
|
|
30
25
|
|
|
31
|
-
Mount `WorldScreen
|
|
26
|
+
1. Mount `WorldScreen`. It brings its own canvas.
|
|
27
|
+
2. Pass in only the values that your bundler and server decide.
|
|
28
|
+
3. Import the styles once, as shown:
|
|
32
29
|
|
|
33
30
|
```vue
|
|
34
31
|
<script setup lang="ts">
|
|
35
32
|
import { WorldScreen } from "genshin-world";
|
|
36
33
|
import TerrainTileWorker from "genshin-world/terrainTileWorker?worker";
|
|
34
|
+
import { QualityTier } from "genshin-engine";
|
|
35
|
+
import { ENGLISH_GAME_TEXT, GameLanguage } from "genshin-text";
|
|
37
36
|
import "genshin-interface/style.css";
|
|
38
37
|
import "genshin-world/style.css";
|
|
38
|
+
|
|
39
|
+
const isDevelopment = import.meta.env.DEV;
|
|
40
|
+
const qualityTier = QualityTier.High;
|
|
39
41
|
</script>
|
|
40
42
|
|
|
41
43
|
<template>
|
|
42
44
|
<WorldScreen
|
|
45
|
+
account-avatar-url="https://your-host.example/avatar.png"
|
|
43
46
|
:create-terrain-worker="() => new TerrainTileWorker()"
|
|
44
|
-
:
|
|
45
|
-
:
|
|
47
|
+
:game-text="ENGLISH_GAME_TEXT"
|
|
48
|
+
:is-paused="false"
|
|
49
|
+
:is-tuning="isDevelopment"
|
|
50
|
+
:language="GameLanguage.English"
|
|
51
|
+
:quality-tier="qualityTier"
|
|
52
|
+
:server-clock-offset-ms="0"
|
|
46
53
|
game-data-base-url="https://your-host.example/game-data"
|
|
47
54
|
region-data-base-url="genshin"
|
|
55
|
+
scene-export-base-url="https://your-host.example/scene-exports"
|
|
48
56
|
/>
|
|
49
57
|
</template>
|
|
50
58
|
```
|
|
51
59
|
|
|
52
|
-
|
|
60
|
+
Check: the screen opens once its names, tables and first view have loaded.
|
|
61
|
+
|
|
62
|
+
Your host must serve two sets of files:
|
|
63
|
+
|
|
64
|
+
- The region data, at `region-data-base-url`.
|
|
65
|
+
- Every game-data record, at `game-data-base-url`. Each object and index entry that `gameDataLock.json` names is served as `<base>/<sha256>.json`.
|
|
53
66
|
|
|
54
|
-
|
|
67
|
+
Allow CORS for your page's origin. Esposter's own accounts admit only Esposter's origins. Another host must publish its own copy.
|
|
55
68
|
|
|
56
|
-
## <a name="
|
|
69
|
+
## <a name="key-exports">🧩 Key Exports</a>
|
|
57
70
|
|
|
58
|
-
|
|
71
|
+
| Export | Kind | Purpose |
|
|
72
|
+
| ------------------- | ---------- | ----------------------------------------------------------------------------------------------------------- |
|
|
73
|
+
| `GameOpening` | component | The game's opening: its splash sequence, login screen and startup loading |
|
|
74
|
+
| `GenshinSave` | type | One player's whole Genshin save, with one key per system |
|
|
75
|
+
| `genshinSaveSchema` | schema | The Zod schema a save is parsed against, refusing one that is too large |
|
|
76
|
+
| `readCatalogue` | function | The catalogue of regions, areas and subareas, fetched by key and checked against its schema |
|
|
77
|
+
| `readGameData` | function | Reads one game-data record by key and parses it with the schema given |
|
|
78
|
+
| `readGenshinSave` | function | Reads a save into the world's systems, leaving derived ones to the rules that read them on load |
|
|
79
|
+
| `readStatTables` | function | The game's stat tables, fetched by key and checked against their schema |
|
|
80
|
+
| `useSky` | composable | Writes the sky at the game's clock into everything the sky lights, and drifts the clouds with the wind |
|
|
81
|
+
| `WorldScreen` | component | The whole world as one screen with its own canvas, opened once its names, tables and first view have loaded |
|
|
59
82
|
|
|
60
83
|
## <a name="license">⚖️ License</a>
|
|
61
84
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/models/character/Attribute.ts
|
|
2
|
+
let Attribute = /* @__PURE__ */ function(Attribute) {
|
|
3
|
+
Attribute["AllDamageBonus"] = "FIGHT_PROP_ADD_HURT";
|
|
4
|
+
Attribute["AnemoDamageBonus"] = "FIGHT_PROP_WIND_ADD_HURT";
|
|
5
|
+
Attribute["AnemoResistance"] = "FIGHT_PROP_WIND_SUB_HURT";
|
|
6
|
+
Attribute["Attack"] = "FIGHT_PROP_ATTACK";
|
|
7
|
+
Attribute["AttackPercent"] = "FIGHT_PROP_ATTACK_PERCENT";
|
|
8
|
+
Attribute["BaseAttack"] = "FIGHT_PROP_BASE_ATTACK";
|
|
9
|
+
Attribute["BaseDefense"] = "FIGHT_PROP_BASE_DEFENSE";
|
|
10
|
+
Attribute["BaseHealth"] = "FIGHT_PROP_BASE_HP";
|
|
11
|
+
Attribute["ChargedAttackDamageBonus"] = "FIGHT_PROP_CHARGED_ADD_HURT";
|
|
12
|
+
Attribute["CooldownReduction"] = "FIGHT_PROP_SKILL_CD_MINUS_RATIO";
|
|
13
|
+
Attribute["CriticalDamage"] = "FIGHT_PROP_CRITICAL_HURT";
|
|
14
|
+
Attribute["CriticalRate"] = "FIGHT_PROP_CRITICAL";
|
|
15
|
+
Attribute["CryoDamageBonus"] = "FIGHT_PROP_ICE_ADD_HURT";
|
|
16
|
+
Attribute["CryoResistance"] = "FIGHT_PROP_ICE_SUB_HURT";
|
|
17
|
+
Attribute["DamageReduction"] = "FIGHT_PROP_SUB_HURT";
|
|
18
|
+
Attribute["Defense"] = "FIGHT_PROP_DEFENSE";
|
|
19
|
+
Attribute["DefensePercent"] = "FIGHT_PROP_DEFENSE_PERCENT";
|
|
20
|
+
Attribute["DendroDamageBonus"] = "FIGHT_PROP_GRASS_ADD_HURT";
|
|
21
|
+
Attribute["DendroResistance"] = "FIGHT_PROP_GRASS_SUB_HURT";
|
|
22
|
+
Attribute["ElectroDamageBonus"] = "FIGHT_PROP_ELEC_ADD_HURT";
|
|
23
|
+
Attribute["ElectroResistance"] = "FIGHT_PROP_ELEC_SUB_HURT";
|
|
24
|
+
Attribute["ElementalMastery"] = "FIGHT_PROP_ELEMENT_MASTERY";
|
|
25
|
+
Attribute["EnergyRecharge"] = "FIGHT_PROP_CHARGE_EFFICIENCY";
|
|
26
|
+
Attribute["GeoDamageBonus"] = "FIGHT_PROP_ROCK_ADD_HURT";
|
|
27
|
+
Attribute["GeoResistance"] = "FIGHT_PROP_ROCK_SUB_HURT";
|
|
28
|
+
Attribute["HealingBonus"] = "FIGHT_PROP_HEAL_ADD";
|
|
29
|
+
Attribute["Health"] = "FIGHT_PROP_HP";
|
|
30
|
+
Attribute["HealthPercent"] = "FIGHT_PROP_HP_PERCENT";
|
|
31
|
+
Attribute["HydroDamageBonus"] = "FIGHT_PROP_WATER_ADD_HURT";
|
|
32
|
+
Attribute["HydroResistance"] = "FIGHT_PROP_WATER_SUB_HURT";
|
|
33
|
+
Attribute["IncomingHealingBonus"] = "FIGHT_PROP_HEALED_ADD";
|
|
34
|
+
Attribute["MovementSpeed"] = "FIGHT_PROP_MOVE_SPEED";
|
|
35
|
+
Attribute["NormalAttackDamageBonus"] = "FIGHT_PROP_NORMAL_ADD_HURT";
|
|
36
|
+
Attribute["NormalAttackSpeed"] = "FIGHT_PROP_NORMAL_ATTACK_SPEED";
|
|
37
|
+
Attribute["PhysicalDamageBonus"] = "FIGHT_PROP_PHYSICAL_ADD_HURT";
|
|
38
|
+
Attribute["PhysicalResistance"] = "FIGHT_PROP_PHYSICAL_SUB_HURT";
|
|
39
|
+
Attribute["PlungingAttackDamageBonus"] = "FIGHT_PROP_PLUNGING_ATTACK_ADD_HURT";
|
|
40
|
+
Attribute["PyroDamageBonus"] = "FIGHT_PROP_FIRE_ADD_HURT";
|
|
41
|
+
Attribute["PyroResistance"] = "FIGHT_PROP_FIRE_SUB_HURT";
|
|
42
|
+
Attribute["ShieldStrength"] = "FIGHT_PROP_SHIELD_COST_MINUS_RATIO";
|
|
43
|
+
Attribute["StellarGlimmerReactionDamageBonus"] = "FIGHT_PROP_STELLAR_GLIMMER_ADD_HURT";
|
|
44
|
+
return Attribute;
|
|
45
|
+
}({});
|
|
46
|
+
const Attributes = Object.values(Attribute);
|
|
47
|
+
export { Attributes as n, Attribute as t };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/models/combat/AuraType.ts
|
|
2
|
+
let AuraType = /* @__PURE__ */ function(AuraType) {
|
|
3
|
+
AuraType["Burning"] = "Burning";
|
|
4
|
+
AuraType["Cryo"] = "Cryo";
|
|
5
|
+
AuraType["Dendro"] = "Dendro";
|
|
6
|
+
AuraType["Electro"] = "Electro";
|
|
7
|
+
AuraType["Freeze"] = "Freeze";
|
|
8
|
+
AuraType["Hydro"] = "Hydro";
|
|
9
|
+
AuraType["Pyro"] = "Pyro";
|
|
10
|
+
AuraType["Quicken"] = "Quicken";
|
|
11
|
+
return AuraType;
|
|
12
|
+
}({});
|
|
13
|
+
export { AuraType as t };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
|
|
2
|
+
// src/services/kit/effects/addKitStatus.ts
|
|
3
|
+
const addKitStatus = (kitEffectState, characterId, status) => {
|
|
4
|
+
addKitEffect(kitEffectState, {
|
|
5
|
+
characterId,
|
|
6
|
+
kind: "status",
|
|
7
|
+
...status
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export { addKitStatus as t };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
|
+
import { buffKitMember, castKitSummon, elementalMasteryMultiplier, getMoonsignLevel, queueKitPassiveHit, startKitCooldown } from "./index.js";
|
|
3
|
+
import "./save-D-IcGqEm.js";
|
|
3
4
|
import "./KitEventKind-DinObjiq.js";
|
|
5
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
6
|
+
import { t as castKitField } from "./castKitField-B4qvtyqk.js";
|
|
7
|
+
import { t as checkIsKitStatusActive } from "./checkIsKitStatusActive-DXqQEIWV.js";
|
|
4
8
|
import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
|
|
5
|
-
import { t as
|
|
6
|
-
import { t as castKitField } from "./castKitField-BhB1fy3l.js";
|
|
7
|
-
import { buffKitMember, castKitSummon, checkIsKitStatusActive, elementalMasteryMultiplier, getMoonsignLevel, queueKitPassiveHit, startKitCooldown } from "./index.js";
|
|
9
|
+
import { t as gainPartyMemberEnergy } from "./gainPartyMemberEnergy-DUbIxe6i.js";
|
|
8
10
|
// src/services/kit/characters/ainoKit.ts
|
|
9
11
|
const ASCENSION_4 = 4;
|
|
10
12
|
const ASCENSION_1 = 1;
|
|
@@ -25,6 +27,17 @@ const CONSTELLATION_2_COOLDOWN_ID = "aino-constellation-2-cooldown";
|
|
|
25
27
|
const CONSTELLATION_2_COOLDOWN_SECONDS = 5;
|
|
26
28
|
const CONSTELLATION_2_RADIUS = 1.5;
|
|
27
29
|
const BURST_FIELD_ID = "aino-precision-hydronic-cooler";
|
|
30
|
+
const CONSTELLATION_6 = 6;
|
|
31
|
+
const CONSTELLATION_6_DAMAGE_BONUS = .15;
|
|
32
|
+
const CONSTELLATION_6_SECONDS = 15;
|
|
33
|
+
const CONSTELLATION_6_STATUS_ID = "aino-constellation-6";
|
|
34
|
+
const CONSTELLATION_6_REACTION_TYPES = /* @__PURE__ */ new Set([
|
|
35
|
+
"LunarBloom",
|
|
36
|
+
"LunarCharged",
|
|
37
|
+
"LunarCrystallize",
|
|
38
|
+
"Bloom",
|
|
39
|
+
"ElectroCharged"
|
|
40
|
+
]);
|
|
28
41
|
const createAinoKitBehaviour = ({ kit, readHit, readParameter, readSeconds }) => {
|
|
29
42
|
const masteryShare = readParameter("ascension4MasteryShare");
|
|
30
43
|
const burstFirstTickSeconds = readSeconds("burstStart");
|
|
@@ -62,16 +75,26 @@ const createAinoKitBehaviour = ({ kit, readHit, readParameter, readSeconds }) =>
|
|
|
62
75
|
id: BURST_FIELD_ID,
|
|
63
76
|
isFollowing: true,
|
|
64
77
|
nextTickSeconds: burstFirstTickSeconds,
|
|
65
|
-
onTick: ({ kitEffectState: tickKitEffectState }) =>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
onTick: ({ kitEffectState: tickKitEffectState }) => {
|
|
79
|
+
castKitSummon(tickKitEffectState, {
|
|
80
|
+
facing,
|
|
81
|
+
height,
|
|
82
|
+
position: burstField.centre
|
|
83
|
+
}, combatant, [isAscendantBurst ? ascendantWaterBall : waterBall], { attackTag: "ElementalBurst" });
|
|
84
|
+
},
|
|
70
85
|
radius: burstRadius,
|
|
71
86
|
secondsRemaining: burstFirstTickSeconds + burstSeconds,
|
|
72
87
|
tickIntervalSeconds: isAscendantBurst ? ASCENSION_1_WATER_BALL_INTERVAL_SECONDS : burstTickIntervalSeconds
|
|
73
88
|
});
|
|
89
|
+
if (combatant.constellationCount >= CONSTELLATION_6) addKitStatus(kitEffectState, combatant.characterId, {
|
|
90
|
+
id: CONSTELLATION_6_STATUS_ID,
|
|
91
|
+
secondsRemaining: CONSTELLATION_6_SECONDS
|
|
92
|
+
});
|
|
74
93
|
} },
|
|
94
|
+
getPartyReactionBonus: (member, { combatant, reactionType }, { activeCombatant, characterIdCombatantMap, kitEffectState, party }) => {
|
|
95
|
+
if (!CONSTELLATION_6_REACTION_TYPES.has(reactionType) || combatant.characterId !== activeCombatant.characterId || !checkIsKitStatusActive(kitEffectState.effects, member.characterId, CONSTELLATION_6_STATUS_ID)) return {};
|
|
96
|
+
return { damageBonus: getMoonsignLevel(characterIdCombatantMap, party) === "AscendantGleam" ? .35 : CONSTELLATION_6_DAMAGE_BONUS };
|
|
97
|
+
},
|
|
75
98
|
onKitEvent: (event, context, combatant) => {
|
|
76
99
|
const { activeCombatant, kitEffectState, party } = context;
|
|
77
100
|
if (combatant.constellationCount >= CONSTELLATION_1 && (event.kind === "SkillUsed" || event.kind === "BurstUsed") && event.characterId === combatant.characterId) {
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
3
|
-
import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
|
+
import { buffKitMember, buffKitTeam, castKitSummon, checkIsInKitField, createAheadBody, createKitBody, findStandingKitSummon, startKitCooldown } from "./index.js";
|
|
4
3
|
import "./KitEventKind-DinObjiq.js";
|
|
4
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
5
|
+
import { t as checkIsKitShieldLive } from "./checkIsKitShieldLive-DEn8yb0C.js";
|
|
6
|
+
import { t as checkIsKitStatusActive } from "./checkIsKitStatusActive-DXqQEIWV.js";
|
|
5
7
|
import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
|
|
6
|
-
import { t as
|
|
7
|
-
import {
|
|
8
|
+
import { t as getBuffedCombatant } from "./getBuffedCombatant-DGjgyKdW.js";
|
|
9
|
+
import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
|
|
8
10
|
// src/services/kit/characters/albedoKit.ts
|
|
9
11
|
const SOLAR_ISOTOMA_ID = "albedo-solar-isotoma";
|
|
10
12
|
const TRANSIENT_BLOSSOM_COOLDOWN_STATUS_ID = "albedo-transient-blossom-cooldown";
|
|
@@ -22,6 +24,10 @@ const CONSTELLATION_4_SECONDS = 1;
|
|
|
22
24
|
const CONSTELLATION_4_CHECK_SECONDS = .3;
|
|
23
25
|
const CONSTELLATION_4_CHECK_STATUS_ID = "albedo-constellation-4-check";
|
|
24
26
|
const CONSTELLATION_4_SOURCE = "albedo-constellation-4";
|
|
27
|
+
const ALBEDO_CONSTELLATION_6 = 6;
|
|
28
|
+
const CONSTELLATION_6_DAMAGE_BONUS = .17;
|
|
29
|
+
const CONSTELLATION_6_SECONDS = 1;
|
|
30
|
+
const CONSTELLATION_6_SOURCE = "albedo-constellation-6";
|
|
25
31
|
const TRANSIENT_BLOSSOM_ENERGY = 1.2;
|
|
26
32
|
const SOLAR_ISOTOMA_DEFENSE_PERCENT = .5;
|
|
27
33
|
const SOLAR_ISOTOMA_DEFENSE_SECONDS = 20;
|
|
@@ -93,20 +99,28 @@ const createAlbedoKitBehaviour = ({ readHit, readHits, readParameter, readSecond
|
|
|
93
99
|
const member = getPartyMember(party, characterId);
|
|
94
100
|
member.energy = Math.min(combatant.kit.burstEnergyCost, member.energy + TRANSIENT_BLOSSOM_ENERGY);
|
|
95
101
|
},
|
|
96
|
-
onStep: ({ activeCombatant, body, kitEffectState }, combatant) => {
|
|
102
|
+
onStep: ({ activeCombatant, body, kitEffectState, party }, combatant) => {
|
|
97
103
|
if (combatant.constellationCount < ALBEDO_CONSTELLATION_4) return;
|
|
98
104
|
if (!startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_4_CHECK_STATUS_ID, CONSTELLATION_4_CHECK_SECONDS)) return;
|
|
99
105
|
const solarIsotoma = findStandingKitSummon(kitEffectState.effects, SOLAR_ISOTOMA_ID, combatant.characterId);
|
|
100
|
-
if (!solarIsotoma || solarIsotoma.secondsRemaining <= 0
|
|
106
|
+
if (!solarIsotoma || solarIsotoma.secondsRemaining <= 0) return;
|
|
107
|
+
const field = {
|
|
101
108
|
centre: solarIsotoma.body.position,
|
|
102
109
|
radius: solarIsotomaRadius
|
|
103
|
-
}
|
|
110
|
+
};
|
|
111
|
+
if (!checkIsInKitField(field, body.position)) return;
|
|
104
112
|
buffKitMember(kitEffectState, activeCombatant.characterId, {
|
|
105
113
|
amount: CONSTELLATION_4_PLUNGING_ATTACK_BONUS,
|
|
106
114
|
attribute: "FIGHT_PROP_PLUNGING_ATTACK_ADD_HURT",
|
|
107
115
|
secondsRemaining: CONSTELLATION_4_SECONDS,
|
|
108
116
|
source: CONSTELLATION_4_SOURCE
|
|
109
117
|
});
|
|
118
|
+
if (combatant.constellationCount >= ALBEDO_CONSTELLATION_6 && (kitEffectState.effects.some((effect) => checkIsKitShieldLive(effect) && effect.isCrystallize === true) || party.lunarCrystallize.moondrifts.some((moondrift) => checkIsInKitField(field, moondrift.position)))) buffKitMember(kitEffectState, activeCombatant.characterId, {
|
|
119
|
+
amount: CONSTELLATION_6_DAMAGE_BONUS,
|
|
120
|
+
attribute: "FIGHT_PROP_ADD_HURT",
|
|
121
|
+
secondsRemaining: CONSTELLATION_6_SECONDS,
|
|
122
|
+
source: CONSTELLATION_6_SOURCE
|
|
123
|
+
});
|
|
110
124
|
},
|
|
111
125
|
skill: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) => {
|
|
112
126
|
if (combatant.constellationCount >= ALBEDO_CONSTELLATION_1) buffKitMember(kitEffectState, combatant.characterId, {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
|
+
import { buffKitMember, castKitSummon, changeKitSkillCooldown, elementalMasteryMultiplier, scheduleKitTask, startKitCooldown } from "./index.js";
|
|
3
|
+
import "./save-D-IcGqEm.js";
|
|
3
4
|
import "./KitEventKind-DinObjiq.js";
|
|
4
5
|
import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
|
|
6
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
7
|
+
import { t as castKitField } from "./castKitField-B4qvtyqk.js";
|
|
5
8
|
import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as castKitField } from "./castKitField-BhB1fy3l.js";
|
|
8
|
-
import { buffKitMember, castKitSummon, changeKitSkillCooldown, elementalMasteryMultiplier, scheduleKitTask, startKitCooldown } from "./index.js";
|
|
9
|
+
import { t as getDeployedCharacterIds } from "./getDeployedCharacterIds-TuIRCNKb.js";
|
|
9
10
|
import { takeOne } from "@esposter/shared";
|
|
10
11
|
// src/services/kit/characters/alhaithamKit.ts
|
|
11
12
|
const ASCENSION_1 = 1;
|
|
@@ -172,11 +173,19 @@ const createAlhaithamKitBehaviour = ({ kit, readHits, readParameter, readSeconds
|
|
|
172
173
|
if (count === 0 || !startKitCooldown(kitEffectState, characterId, PROJECTION_ICD_STATUS_ID, projectionCooldownSeconds)) return;
|
|
173
174
|
castKitSummon(kitEffectState, body, combatant, takeOne(projectionAttacks, count - 1), { attackTag: "ElementalSkill" });
|
|
174
175
|
};
|
|
175
|
-
const strikeHitBehaviour = { onStrike: (context, strike) =>
|
|
176
|
-
|
|
176
|
+
const strikeHitBehaviour = { onStrike: (context, strike) => {
|
|
177
|
+
triggerProjection(context, strike, false);
|
|
178
|
+
} };
|
|
179
|
+
const mirrorSourceHitBehaviour = { onStrike: (context, strike) => {
|
|
180
|
+
triggerProjection(context, strike, true);
|
|
181
|
+
} };
|
|
177
182
|
const createSkillBehaviour = (mirrorSeconds) => ({
|
|
178
183
|
hits: [{ additiveBaseDamageBonus: (striker) => elementalMasteryMultiplier(striker, skillElementalMasteryShare) }],
|
|
179
|
-
onStart: ({ activeCombatant: combatant, body, kitEffectState }) =>
|
|
184
|
+
onStart: ({ activeCombatant: combatant, body, kitEffectState }) => {
|
|
185
|
+
scheduleKitTask(kitEffectState, combatant.characterId, mirrorSeconds, (tick) => {
|
|
186
|
+
gainMirrors(tick.kitEffectState, body, combatant, getSkillMirrorGain(tick.kitEffectState.effects, combatant.characterId));
|
|
187
|
+
});
|
|
188
|
+
}
|
|
180
189
|
});
|
|
181
190
|
return {
|
|
182
191
|
burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState, party }) => {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import "./
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
|
+
import "./save-D-IcGqEm.js";
|
|
2
3
|
import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
|
|
3
|
-
import { t as addKitStatus } from "./addKitStatus-
|
|
4
|
-
import { t as spendKitResource } from "./spendKitResource-CC5kZDgu.js";
|
|
5
|
-
import { t as gainKitResource } from "./gainKitResource-3F1z8Aco.js";
|
|
4
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
6
5
|
import { buffKitMember, buffKitTeam, checkHasKitStatus, scheduleKitTask } from "./index.js";
|
|
6
|
+
import { t as gainKitResource } from "./gainKitResource-CNEFzX4H.js";
|
|
7
|
+
import { t as spendKitResource } from "./spendKitResource-CC5kZDgu.js";
|
|
7
8
|
// src/services/kit/characters/aloyKit.ts
|
|
8
9
|
const COIL_RUSHING_ICE_STACKS = 4;
|
|
9
10
|
const COIL_RESOURCE_ID = "aloy-coil";
|
|
11
|
+
const CHILLWATER_BOMBLET_COUNT = 6;
|
|
10
12
|
const RUSHING_ICE_STATUS_ID = "aloy-rushing-ice";
|
|
11
13
|
const ASCENSION_1 = 1;
|
|
12
14
|
const ASCENSION_1_ATTACK_SHARE = .08;
|
|
@@ -17,15 +19,21 @@ const ASCENSION_4 = 4;
|
|
|
17
19
|
const ASCENSION_4_CRYO_SHARE_PER_STACK = .035;
|
|
18
20
|
const ASCENSION_4_MAX_STACKS = 10;
|
|
19
21
|
const ASCENSION_4_SOURCE = "aloy-ascension-4";
|
|
20
|
-
const addCryoStacks = (kitEffectState, characterId, stacks, secondsRemaining) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const addCryoStacks = (kitEffectState, characterId, stacks, secondsRemaining) => {
|
|
23
|
+
buffKitMember(kitEffectState, characterId, {
|
|
24
|
+
amount: Math.min(stacks, ASCENSION_4_MAX_STACKS) * ASCENSION_4_CRYO_SHARE_PER_STACK,
|
|
25
|
+
attribute: "FIGHT_PROP_ICE_ADD_HURT",
|
|
26
|
+
secondsRemaining,
|
|
27
|
+
source: ASCENSION_4_SOURCE
|
|
28
|
+
});
|
|
29
|
+
};
|
|
26
30
|
const createAloyKitBehaviour = ({ readSeconds }) => {
|
|
27
31
|
const rushingIceSeconds = readSeconds("rushingIceDuration");
|
|
28
|
-
const
|
|
32
|
+
const countedCoilStrikes = /* @__PURE__ */ new WeakSet();
|
|
33
|
+
const addCoilStack = ({ kitEffectState, party }, strike) => {
|
|
34
|
+
if (countedCoilStrikes.has(strike)) return;
|
|
35
|
+
countedCoilStrikes.add(strike);
|
|
36
|
+
const { combatant } = strike;
|
|
29
37
|
if (checkHasKitStatus(kitEffectState.effects, combatant.characterId, RUSHING_ICE_STATUS_ID)) return;
|
|
30
38
|
if (gainKitResource(kitEffectState, combatant.characterId, COIL_RESOURCE_ID, 1, COIL_RUSHING_ICE_STACKS) < COIL_RUSHING_ICE_STACKS) return;
|
|
31
39
|
spendKitResource(kitEffectState, combatant.characterId, COIL_RESOURCE_ID);
|
|
@@ -55,12 +63,10 @@ const createAloyKitBehaviour = ({ readSeconds }) => {
|
|
|
55
63
|
}
|
|
56
64
|
if (combatant.ascension < ASCENSION_4) return;
|
|
57
65
|
addCryoStacks(kitEffectState, combatant.characterId, 1, rushingIceSeconds);
|
|
58
|
-
for (let second = 1; second < ASCENSION_4_MAX_STACKS; second++) scheduleKitTask(kitEffectState, combatant.characterId, second, ({ kitEffectState: tickKitEffectState }) =>
|
|
66
|
+
for (let second = 1; second < ASCENSION_4_MAX_STACKS; second++) scheduleKitTask(kitEffectState, combatant.characterId, second, ({ kitEffectState: tickKitEffectState }) => {
|
|
67
|
+
addCryoStacks(tickKitEffectState, combatant.characterId, second + 1, rushingIceSeconds - second);
|
|
68
|
+
});
|
|
59
69
|
};
|
|
60
|
-
return { skill: { hits: [
|
|
61
|
-
{},
|
|
62
|
-
{ onStrike: addCoilStack },
|
|
63
|
-
{ onStrike: addCoilStack }
|
|
64
|
-
] } };
|
|
70
|
+
return { skill: { hits: [{}, ...Array.from({ length: CHILLWATER_BOMBLET_COUNT }, () => ({ onStrike: addCoilStack }))] } };
|
|
65
71
|
};
|
|
66
72
|
export { createAloyKitBehaviour };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
2
|
import { buffKitTeam, castKitSummon, castKitTaunt, createConstellationSkillChargeBonus, getKitMaxHealth, queueKitPassiveHit } from "./index.js";
|
|
3
3
|
// src/services/kit/characters/amberKit.ts
|
|
4
4
|
const EVERY_ARROW_FINDS_ITS_TARGET_ASCENSION = 1;
|
|
@@ -75,11 +75,13 @@ const createAmberKitBehaviour = ({ readHit, readHits, readParameter, readSeconds
|
|
|
75
75
|
},
|
|
76
76
|
getSkillChargeBonus: createConstellationSkillChargeBonus(CONSTELLATION_4),
|
|
77
77
|
getSkillCooldownMultiplier: ({ activeCombatant }) => activeCombatant.constellationCount >= CONSTELLATION_4 ? CONSTELLATION_4_SKILL_COOLDOWN_MULTIPLIER : 1,
|
|
78
|
-
skill: { onStart: ({ activeCombatant: combatant, body, characterIdCombatantMap, kitEffectState, party }) =>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
skill: { onStart: ({ activeCombatant: combatant, body, characterIdCombatantMap, kitEffectState, party }) => {
|
|
79
|
+
castKitTaunt(kitEffectState, body, combatant, {
|
|
80
|
+
explosion: bunnyExplosion,
|
|
81
|
+
health: bunnyMaxHealthShare * getKitMaxHealth(combatant, kitEffectState.effects, party, characterIdCombatantMap),
|
|
82
|
+
secondsRemaining: bunnySeconds
|
|
83
|
+
});
|
|
84
|
+
} }
|
|
83
85
|
};
|
|
84
86
|
};
|
|
85
87
|
export { createAmberKitBehaviour };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "./Attribute-FE76VuWb.js";
|
|
2
|
+
import { scheduleKitTask, startKitCooldown, toKitSeconds } from "./index.js";
|
|
3
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
4
|
+
import { t as checkIsKitStatusActive } from "./checkIsKitStatusActive-DXqQEIWV.js";
|
|
5
|
+
import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
|
|
6
|
+
// src/services/kit/characters/arlecchinoKit.ts
|
|
7
|
+
const PYRO_DAMAGE_BONUS = .4;
|
|
8
|
+
const BURST_SKILL_RESET_FRAMES = 107;
|
|
9
|
+
const CONSTELLATION_6 = 6;
|
|
10
|
+
const CONSTELLATION_6_CRITICAL_RATE = .1;
|
|
11
|
+
const CONSTELLATION_6_CRITICAL_DAMAGE = .7;
|
|
12
|
+
const CONSTELLATION_6_SECONDS = 20;
|
|
13
|
+
const CONSTELLATION_6_COOLDOWN_SECONDS = 15;
|
|
14
|
+
const CONSTELLATION_6_COOLDOWN_ID = "arlecchino-constellation-6-cooldown";
|
|
15
|
+
const CONSTELLATION_6_STATUS_ID = "arlecchino-constellation-6";
|
|
16
|
+
const CONSTELLATION_6_ATTACK_TAGS = /* @__PURE__ */ new Set(["ElementalBurst", "NormalAttack"]);
|
|
17
|
+
const checkIsConstellation6Strike = (strike, effects) => strike.attackTag !== void 0 && CONSTELLATION_6_ATTACK_TAGS.has(strike.attackTag) && checkIsKitStatusActive(effects, strike.combatant.characterId, CONSTELLATION_6_STATUS_ID);
|
|
18
|
+
const createArlecchinoKitBehaviour = () => ({
|
|
19
|
+
burst: { onStart: ({ activeCombatant: combatant, kitEffectState }) => {
|
|
20
|
+
scheduleKitTask(kitEffectState, combatant.characterId, toKitSeconds(BURST_SKILL_RESET_FRAMES), ({ party }) => {
|
|
21
|
+
getPartyMember(party, combatant.characterId).skillCooldownSeconds = 0;
|
|
22
|
+
});
|
|
23
|
+
} },
|
|
24
|
+
getPassiveBonuses: () => [{
|
|
25
|
+
amount: PYRO_DAMAGE_BONUS,
|
|
26
|
+
attribute: "FIGHT_PROP_FIRE_ADD_HURT"
|
|
27
|
+
}],
|
|
28
|
+
getStrikeCriticalDamageBonus: (strike, _enemy, _party, effects) => checkIsConstellation6Strike(strike, effects) ? CONSTELLATION_6_CRITICAL_DAMAGE : 0,
|
|
29
|
+
getStrikeCriticalRateBonus: (strike, _enemy, _party, effects) => checkIsConstellation6Strike(strike, effects) ? CONSTELLATION_6_CRITICAL_RATE : 0,
|
|
30
|
+
skill: { onStart: ({ activeCombatant: combatant, kitEffectState }) => {
|
|
31
|
+
if (combatant.constellationCount >= CONSTELLATION_6 && startKitCooldown(kitEffectState, combatant.characterId, CONSTELLATION_6_COOLDOWN_ID, CONSTELLATION_6_COOLDOWN_SECONDS)) addKitStatus(kitEffectState, combatant.characterId, {
|
|
32
|
+
id: CONSTELLATION_6_STATUS_ID,
|
|
33
|
+
secondsRemaining: CONSTELLATION_6_SECONDS
|
|
34
|
+
});
|
|
35
|
+
} }
|
|
36
|
+
});
|
|
37
|
+
export { createArlecchinoKitBehaviour };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "./
|
|
1
|
+
import { castKitSummon, changeKitSkillCooldown, startKitCooldown } from "./index.js";
|
|
2
|
+
import "./save-D-IcGqEm.js";
|
|
2
3
|
import { t as addKitEffect } from "./addKitEffect-DEhZUuxo.js";
|
|
4
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
3
5
|
import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
|
|
4
|
-
import { t as addKitStatus } from "./addKitStatus-CecgwPmO.js";
|
|
5
|
-
import { castKitSummon, changeKitSkillCooldown, startKitCooldown } from "./index.js";
|
|
6
6
|
// src/services/kit/characters/ayakaKit.ts
|
|
7
7
|
const BLIZZARD_BLADE_SEKI_NO_TO_CONSTELLATION = 2;
|
|
8
8
|
const SENHO_INFUSION_SECONDS = 5;
|
|
@@ -66,12 +66,14 @@ const createAyakaKitBehaviour = ({ kit, readHits }) => {
|
|
|
66
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
67
|
},
|
|
68
68
|
normalAttacks: kit.normalAttacks.map(({ hits }) => ({ hits: hits.map(() => snowsweptSakuraHit) })),
|
|
69
|
-
onSprint: ({ activeCombatant: combatant, kitEffectState }) =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
onSprint: ({ activeCombatant: combatant, kitEffectState }) => {
|
|
70
|
+
addKitEffect(kitEffectState, {
|
|
71
|
+
characterId: combatant.characterId,
|
|
72
|
+
element: "Ice",
|
|
73
|
+
kind: "infusion",
|
|
74
|
+
secondsRemaining: SENHO_INFUSION_SECONDS
|
|
75
|
+
});
|
|
76
|
+
},
|
|
75
77
|
skill: { onStart: ({ activeCombatant: combatant, kitEffectState }) => {
|
|
76
78
|
if (combatant.ascension < ASCENSION_1) return;
|
|
77
79
|
addKitStatus(kitEffectState, combatant.characterId, {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
|
|
1
|
+
import { castKitSummon, enterKitStance, scheduleKitTask } from "./index.js";
|
|
3
2
|
import "./KitEventKind-DinObjiq.js";
|
|
3
|
+
import { t as addKitStatus } from "./addKitStatus-D3DgePzt.js";
|
|
4
|
+
import { t as castKitField } from "./castKitField-B4qvtyqk.js";
|
|
4
5
|
import { t as findKitStatus } from "./findKitStatus-Dj_zauGj.js";
|
|
5
|
-
import { t as
|
|
6
|
-
import { t as
|
|
7
|
-
import { castKitSummon, enterKitStance, scheduleKitTask } from "./index.js";
|
|
6
|
+
import { t as gainPartyMemberEnergy } from "./gainPartyMemberEnergy-DUbIxe6i.js";
|
|
7
|
+
import { t as getPartyMember } from "./getPartyMember-BAb9wUiz.js";
|
|
8
8
|
import { takeOne } from "@esposter/shared";
|
|
9
9
|
// src/services/kit/characters/ayatoKit.ts
|
|
10
10
|
const SOUKAI_KANKA_SECONDS = 6;
|
|
@@ -79,17 +79,21 @@ const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, r
|
|
|
79
79
|
const gardenOfPurity = castKitField(kitEffectState, combatant.characterId, position, {
|
|
80
80
|
isFollowing: true,
|
|
81
81
|
nextTickSeconds: bloomwaterBladeFirstTickSeconds,
|
|
82
|
-
onTick: ({ kitEffectState: tickKitEffectState }) =>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
onTick: ({ kitEffectState: tickKitEffectState }) => {
|
|
83
|
+
castKitSummon(tickKitEffectState, {
|
|
84
|
+
facing,
|
|
85
|
+
height,
|
|
86
|
+
position: gardenOfPurity.centre
|
|
87
|
+
}, combatant, [bloomwaterBlade], { attackTag: "ElementalBurst" });
|
|
88
|
+
},
|
|
87
89
|
secondsRemaining: bloomwaterBladeFirstTickSeconds + gardenOfPuritySeconds,
|
|
88
90
|
tickIntervalSeconds: bloomwaterBladeIntervalSeconds
|
|
89
91
|
});
|
|
90
92
|
};
|
|
91
93
|
return {
|
|
92
|
-
burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) =>
|
|
94
|
+
burst: { onStart: ({ activeCombatant: combatant, body, kitEffectState }) => {
|
|
95
|
+
castGardenOfPurity(kitEffectState, body, combatant);
|
|
96
|
+
} },
|
|
93
97
|
getStrikeDamageBonus: ({ attackTag, combatant }, enemy) => combatant.constellationCount >= CONSTELLATION_1 && attackTag === "NormalAttack" && enemy.health / enemy.maxHealth <= CONSTELLATION_1_HEALTH_SHARE ? CONSTELLATION_1_DAMAGE_BONUS : 0,
|
|
94
98
|
onKitEvent: (event, { kitEffectState }, combatant) => {
|
|
95
99
|
if (event.kind !== "CharacterSwapped") return;
|
|
@@ -109,11 +113,13 @@ const createAyatoKitBehaviour = ({ kit, readHit, readHitFields, readParameter, r
|
|
|
109
113
|
secondsRemaining: HELD_UNTIL_SWAP_SECONDS,
|
|
110
114
|
stacks: ASCENSION_1_CAST_STACKS
|
|
111
115
|
});
|
|
112
|
-
scheduleKitTask(kitEffectState, characterId, illusionSeconds, ({ kitEffectState: effectState }) =>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
scheduleKitTask(kitEffectState, characterId, illusionSeconds, ({ kitEffectState: effectState }) => {
|
|
117
|
+
addKitStatus(effectState, characterId, {
|
|
118
|
+
id: NAMISEN_STATUS_ID,
|
|
119
|
+
secondsRemaining: HELD_UNTIL_SWAP_SECONDS,
|
|
120
|
+
stacks: getNamisenStacksMax(combatant)
|
|
121
|
+
});
|
|
122
|
+
});
|
|
117
123
|
}
|
|
118
124
|
if (combatant.constellationCount >= CONSTELLATION_6) addKitStatus(kitEffectState, characterId, {
|
|
119
125
|
id: CONSTELLATION_6_STATUS_ID,
|