From 7248a3a612333a9d2aa68d9d6b23b385b55a694c Mon Sep 17 00:00:00 2001 From: xtaodada Date: Sat, 25 May 2024 21:26:05 +0800 Subject: [PATCH] :bug: Fix git ignore --- .gitignore | 2 +- compiler/hsr-optimizer-api/pnpm-lock.yaml | 19 - .../hsr-optimizer-api/src/lib/constants.ts | 708 +++ .../hsr-optimizer-api/src/lib/dataParser.js | 4639 +++++++++++++++++ .../src/lib/optimizer/sortOptions.ts | 161 + .../hsr-optimizer-api/src/lib/sortOptions.ts | 161 + 6 files changed, 5670 insertions(+), 20 deletions(-) create mode 100644 compiler/hsr-optimizer-api/src/lib/constants.ts create mode 100644 compiler/hsr-optimizer-api/src/lib/dataParser.js create mode 100644 compiler/hsr-optimizer-api/src/lib/optimizer/sortOptions.ts create mode 100644 compiler/hsr-optimizer-api/src/lib/sortOptions.ts diff --git a/.gitignore b/.gitignore index cdd5f11..445afd5 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ dist/ downloads/ eggs/ .eggs/ -lib/ +#lib/ lib64/ parts/ sdist/ diff --git a/compiler/hsr-optimizer-api/pnpm-lock.yaml b/compiler/hsr-optimizer-api/pnpm-lock.yaml index 0488916..01a4447 100644 --- a/compiler/hsr-optimizer-api/pnpm-lock.yaml +++ b/compiler/hsr-optimizer-api/pnpm-lock.yaml @@ -8,13 +8,6 @@ importers: .: dependencies: - '@hono/node-server': - specifier: ^1.11.1 - version: 1.11.1 - hono: - specifier: ^4.3.11 - version: 4.3.11 - devDependencies: '@types/node': specifier: ^20.11.17 version: 20.12.12 @@ -162,10 +155,6 @@ packages: cpu: [x64] os: [win32] - '@hono/node-server@1.11.1': - resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==, tarball: https://registry.npmmirror.com/@hono/node-server/-/node-server-1.11.1.tgz} - engines: {node: '>=18.14.1'} - '@types/node@20.12.12': resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==, tarball: https://registry.npmmirror.com/@types/node/-/node-20.12.12.tgz} @@ -182,10 +171,6 @@ packages: get-tsconfig@4.7.5: resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==, tarball: https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz} - hono@4.3.11: - resolution: {integrity: sha512-Hle1uNqJJKkebFkFEEWr3UAElJP922Xy0STfl8c+1PH1q+l6WrmhwAJFS6YH8ZWJY4z46qJtssbyVwwPm3dP5w==, tarball: https://registry.npmmirror.com/hono/-/hono-4.3.11.tgz} - engines: {node: '>=16.0.0'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, tarball: https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} @@ -268,8 +253,6 @@ snapshots: '@esbuild/win32-x64@0.20.2': optional: true - '@hono/node-server@1.11.1': {} - '@types/node@20.12.12': dependencies: undici-types: 5.26.5 @@ -307,8 +290,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - hono@4.3.11: {} - resolve-pkg-maps@1.0.0: {} tsx@4.11.0: diff --git a/compiler/hsr-optimizer-api/src/lib/constants.ts b/compiler/hsr-optimizer-api/src/lib/constants.ts new file mode 100644 index 0000000..d5f4754 --- /dev/null +++ b/compiler/hsr-optimizer-api/src/lib/constants.ts @@ -0,0 +1,708 @@ +// Represents the version of the latest info, which should be the beta leaks version +export const CURRENT_OPTIMIZER_VERSION = 'v2.3.3' + +export const Stats = { + ATK_P: 'ATK%', + ATK: 'ATK', + BE: 'Break Effect', + CD: 'CRIT DMG', + CR: 'CRIT Rate', + DEF_P: 'DEF%', + DEF: 'DEF', + EHR: 'Effect Hit Rate', + ERR: 'Energy Regeneration Rate', + Fire_DMG: 'Fire DMG Boost', + HP_P: 'HP%', + HP: 'HP', + Ice_DMG: 'Ice DMG Boost', + Imaginary_DMG: 'Imaginary DMG Boost', + Lightning_DMG: 'Lightning DMG Boost', + OHB: 'Outgoing Healing Boost', + Physical_DMG: 'Physical DMG Boost', + Quantum_DMG: 'Quantum DMG Boost', + RES: 'Effect RES', + SPD_P: 'SPD%', + SPD: 'SPD', + Wind_DMG: 'Wind DMG Boost', +} +export type StatsKeys = keyof typeof Stats +export type StatsValues = (typeof Stats)[StatsKeys] + +export const MainStats = [ + Stats.HP_P, + Stats.ATK_P, + Stats.DEF_P, + Stats.HP, + Stats.ATK, + Stats.SPD, + Stats.CR, + Stats.CD, + Stats.EHR, + Stats.BE, + Stats.OHB, + Stats.ERR, + Stats.Physical_DMG, + Stats.Fire_DMG, + Stats.Ice_DMG, + Stats.Lightning_DMG, + Stats.Wind_DMG, + Stats.Quantum_DMG, + Stats.Imaginary_DMG, +] +export type MainStats = typeof MainStats[number] + +export const MainStatsValues = { + [Stats.HP_P]: { + 5: { base: 6.912, increment: 2.4192 }, + 4: { base: 5.5296, increment: 1.9354 }, + 3: { base: 4.1472, increment: 1.4515 }, + 2: { base: 2.7648, increment: 0.9677 }, + }, + [Stats.ATK_P]: { + 5: { base: 6.912, increment: 2.4192 }, + 4: { base: 5.5296, increment: 1.9354 }, + 3: { base: 4.1472, increment: 1.4515 }, + 2: { base: 2.7648, increment: 0.9677 }, + }, + [Stats.DEF_P]: { + 5: { base: 8.64, increment: 3.024 }, + 4: { base: 6.912, increment: 2.4192 }, + 3: { base: 5.184, increment: 1.8144 }, + 2: { base: 3.456, increment: 1.2096 }, + }, + [Stats.HP]: { + 5: { base: 112.896, increment: 39.5136 }, + 4: { base: 90.3168, increment: 31.61088 }, + 3: { base: 67.7376, increment: 23.70816 }, + 2: { base: 45.1584, increment: 15.80544 }, + }, + [Stats.ATK]: { + 5: { base: 56.448, increment: 19.7568 }, + 4: { base: 45.1584, increment: 15.80544 }, + 3: { base: 33.8688, increment: 11.85408 }, + 2: { base: 22.5792, increment: 7.90272 }, + }, + [Stats.SPD]: { + 5: { base: 4.032, increment: 1.4 }, + 4: { base: 3.226, increment: 1.1 }, + 3: { base: 2.419, increment: 1.0 }, + 2: { base: 1.613, increment: 1.0 }, + }, + [Stats.CR]: { + 5: { base: 5.184, increment: 1.8144 }, + 4: { base: 4.1472, increment: 1.4515 }, + 3: { base: 3.1104, increment: 1.0886 }, + 2: { base: 2.0736, increment: 0.7258 }, + }, + [Stats.CD]: { + 5: { base: 10.368, increment: 3.6288 }, + 4: { base: 8.2944, increment: 2.9030 }, + 3: { base: 6.2208, increment: 2.1773 }, + 2: { base: 4.1472, increment: 1.4515 }, + }, + [Stats.EHR]: { + 5: { base: 6.912, increment: 2.4192 }, + 4: { base: 5.5296, increment: 1.9354 }, + 3: { base: 4.1472, increment: 1.4515 }, + 2: { base: 2.7648, increment: 0.9677 }, + }, + [Stats.BE]: { + 5: { base: 10.3680, increment: 3.6288 }, + 4: { base: 8.2944, increment: 2.9030 }, + 3: { base: 6.2208, increment: 2.1773 }, + 2: { base: 4.1472, increment: 1.4515 }, + }, + [Stats.ERR]: { + 5: { base: 3.1104, increment: 1.0886 }, + 4: { base: 2.4883, increment: 0.8709 }, + 3: { base: 1.8662, increment: 0.6532 }, + 2: { base: 1.2442, increment: 0.4355 }, + }, + [Stats.OHB]: { + 5: { base: 5.5296, increment: 1.9354 }, + 4: { base: 4.4237, increment: 1.5483 }, + 3: { base: 3.3178, increment: 1.1612 }, + 2: { base: 2.2118, increment: 0.7741 }, + }, + [Stats.Physical_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Fire_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Ice_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Lightning_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Wind_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Quantum_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, + [Stats.Imaginary_DMG]: { + 5: { base: 6.2208, increment: 2.1773 }, + 4: { base: 4.9766, increment: 1.7418 }, + 3: { base: 3.7325, increment: 1.3064 }, + 2: { base: 2.4883, increment: 0.8709 }, + }, +} + +export const SubStats = [ + Stats.HP_P, + Stats.ATK_P, + Stats.DEF_P, + Stats.HP, + Stats.ATK, + Stats.DEF, + Stats.SPD, + Stats.CR, + Stats.CD, + Stats.EHR, + Stats.RES, + Stats.BE, +] +export type SubStats = typeof SubStats[number] + +export const SubStatValues = { + [Stats.SPD]: { + 5: { high: 2.6, mid: 2.3, low: 2.0 }, + 4: { high: 2.0, mid: 1.8, low: 1.6 }, + 3: { high: 1.4, mid: 1.3, low: 1.2 }, + 2: { high: 1.2, mid: 1.1, low: 1.0 }, + }, + [Stats.HP]: { + 5: { high: 42.33751, mid: 38.103755, low: 33.87 }, + 4: { high: 33.87, mid: 30.483, low: 27.096 }, + 3: { high: 25.402506, mid: 22.862253, low: 20.322 }, + 2: { high: 16.935, mid: 15.2415, low: 13.548 }, + }, + [Stats.ATK]: { + 5: { high: 21.168754, mid: 19.051877, low: 16.935 }, + 4: { high: 16.935, mid: 15.2415, low: 13.548 }, + 3: { high: 10.161, mid: 11.431126, low: 12.701252 }, + 2: { high: 8.4675, mid: 7.62075, low: 6.774 }, + }, + [Stats.DEF]: { + 5: { high: 21.168754, mid: 19.051877, low: 16.935 }, + 4: { high: 16.935, mid: 15.2415, low: 13.548 }, + 3: { high: 10.161, mid: 11.431126, low: 12.701252 }, + 2: { high: 8.4675, mid: 7.62075, low: 6.774 }, + }, + [Stats.HP_P]: { + 5: { high: 4.32, mid: 3.888, low: 3.456 }, + 4: { high: 3.456, mid: 3.1104, low: 2.7648 }, + 3: { high: 2.592, mid: 2.3328, low: 2.0736 }, + 2: { high: 1.728, mid: 1.5552, low: 1.3824 }, + }, + [Stats.ATK_P]: { + 5: { high: 4.32, mid: 3.888, low: 3.456 }, + 4: { high: 3.456, mid: 3.1104, low: 2.7648 }, + 3: { high: 2.592, mid: 2.3328, low: 2.0736 }, + 2: { high: 1.728, mid: 1.5552, low: 1.3824 }, + }, + [Stats.DEF_P]: { + 5: { high: 5.4, mid: 4.86, low: 4.32 }, + 4: { high: 4.32, mid: 3.888, low: 3.456 }, + 3: { high: 2.592, mid: 2.916, low: 3.24 }, + 2: { high: 2.16, mid: 1.944, low: 1.728 }, + }, + [Stats.BE]: { + 5: { high: 6.48, mid: 5.832, low: 5.184 }, + 4: { high: 5.184, mid: 4.6656, low: 4.1472 }, + 3: { high: 3.888, mid: 3.4992, low: 3.1104 }, + 2: { high: 2.592, mid: 2.3328, low: 2.0736 }, + }, + [Stats.EHR]: { + 5: { high: 4.32, mid: 3.888, low: 3.456 }, + 4: { high: 3.456, mid: 3.1104, low: 2.7648 }, + 3: { high: 2.592, mid: 2.3328, low: 2.0736 }, + 2: { high: 1.728, mid: 1.5552, low: 1.3824 }, + }, + [Stats.RES]: { + 5: { high: 4.32, mid: 3.888, low: 3.456 }, + 4: { high: 3.456, mid: 3.1104, low: 2.7648 }, + 3: { high: 2.592, mid: 2.3328, low: 2.0736 }, + 2: { high: 1.728, mid: 1.5552, low: 1.3824 }, + }, + [Stats.CR]: { + 5: { high: 3.24, mid: 2.916, low: 2.592 }, + 4: { high: 2.592, mid: 2.3328, low: 2.0736 }, + 3: { high: 1.5552, mid: 1.7496, low: 1.944 }, + 2: { high: 1.296, mid: 1.1664, low: 1.0368 }, + }, + [Stats.CD]: { + 5: { high: 6.48, mid: 5.832, low: 5.184 }, + 4: { high: 5.184, mid: 4.6656, low: 4.1472 }, + 3: { high: 3.888, mid: 3.4992, low: 3.1104 }, + 2: { high: 2.592, mid: 2.3328, low: 2.0736 }, + }, +} + +export const StatsToReadable = { + [Stats.HP_P]: 'HP %', + [Stats.ATK_P]: 'ATK %', + [Stats.DEF_P]: 'DEF %', + [Stats.SPD_P]: 'SPD %', + [Stats.HP]: 'HP', + [Stats.ATK]: 'ATK', + [Stats.DEF]: 'DEF', + [Stats.SPD]: 'SPD', + [Stats.CR]: 'CRIT Rate', + [Stats.CD]: 'CRIT DMG', + [Stats.EHR]: 'Effect HIT', + [Stats.RES]: 'Effect RES', + [Stats.BE]: 'Break Effect', + [Stats.ERR]: 'Energy Regen', + [Stats.OHB]: 'Healing Boost', + [Stats.Physical_DMG]: 'Physical DMG', + [Stats.Fire_DMG]: 'Fire DMG', + [Stats.Ice_DMG]: 'Ice DMG', + [Stats.Lightning_DMG]: 'Lightning DMG', + [Stats.Wind_DMG]: 'Wind DMG', + [Stats.Quantum_DMG]: 'Quantum DMG', + [Stats.Imaginary_DMG]: 'Imaginary DMG', +} + +export const StatsToReadableShort = { + [Stats.HP_P]: 'HP %', + [Stats.ATK_P]: 'ATK %', + [Stats.DEF_P]: 'DEF %', + [Stats.SPD_P]: 'SPD %', + [Stats.HP]: 'HP', + [Stats.ATK]: 'ATK', + [Stats.DEF]: 'DEF', + [Stats.SPD]: 'SPD', + [Stats.CR]: 'CRIT Rate', + [Stats.CD]: 'CRIT DMG', + [Stats.EHR]: 'HIT', + [Stats.RES]: 'RES', + [Stats.BE]: 'Break', + [Stats.ERR]: 'Energy', + [Stats.OHB]: 'Healing', + [Stats.Physical_DMG]: 'Physical', + [Stats.Fire_DMG]: 'Fire', + [Stats.Ice_DMG]: 'Ice', + [Stats.Lightning_DMG]: 'Lightning', + [Stats.Wind_DMG]: 'Wind', + [Stats.Quantum_DMG]: 'Quantum', + [Stats.Imaginary_DMG]: 'Imaginary', +} + +export const StatsToShort = { + [Stats.HP_P]: 'HP%', + [Stats.ATK_P]: 'ATK%', + [Stats.DEF_P]: 'DEF%', + [Stats.SPD_P]: 'SPD%', + [Stats.HP]: 'HP', + [Stats.ATK]: 'ATK', + [Stats.DEF]: 'DEF', + [Stats.SPD]: 'SPD', + [Stats.CR]: 'CR', + [Stats.CD]: 'CD', + [Stats.EHR]: 'EHR', + [Stats.RES]: 'RES', + [Stats.BE]: 'BE', + [Stats.ERR]: 'ERR', + [Stats.OHB]: 'OHB', + [Stats.Physical_DMG]: 'Physical', + [Stats.Fire_DMG]: 'Fire', + [Stats.Ice_DMG]: 'Ice', + [Stats.Lightning_DMG]: 'Lightning', + [Stats.Wind_DMG]: 'Wind', + [Stats.Quantum_DMG]: 'Quantum', + [Stats.Imaginary_DMG]: 'Imaginary', +} + +export const StatsToShortSpaced = { + [Stats.HP_P]: 'HP %', + [Stats.ATK_P]: 'ATK %', + [Stats.DEF_P]: 'DEF %', + [Stats.SPD_P]: 'SPD %', + [Stats.HP]: 'HP', + [Stats.ATK]: 'ATK', + [Stats.DEF]: 'DEF', + [Stats.SPD]: 'SPD', + [Stats.CR]: 'CR', + [Stats.CD]: 'CD', + [Stats.EHR]: 'EHR', + [Stats.RES]: 'RES', + [Stats.BE]: 'BE', + [Stats.ERR]: 'ERR', + [Stats.OHB]: 'OHB', + [Stats.Physical_DMG]: 'Physical', + [Stats.Fire_DMG]: 'Fire', + [Stats.Ice_DMG]: 'Ice', + [Stats.Lightning_DMG]: 'Lightning', + [Stats.Wind_DMG]: 'Wind', + [Stats.Quantum_DMG]: 'Quantum', + [Stats.Imaginary_DMG]: 'Imaginary', +} + +export const Parts = { + Head: 'Head', + Hands: 'Hands', + Body: 'Body', + Feet: 'Feet', + PlanarSphere: 'PlanarSphere', + LinkRope: 'LinkRope', +} +export type Parts = typeof Parts[keyof typeof Parts] + +export const PartsToReadable = { + [Parts.Head]: 'Head', + [Parts.Hands]: 'Hands', + [Parts.Body]: 'Body', + [Parts.Feet]: 'Feet', + [Parts.PlanarSphere]: 'Sphere', + [Parts.LinkRope]: 'Rope', +} +export type PartsToReadable = typeof PartsToReadable[keyof typeof PartsToReadable] + +export const PartsMainStats = { + [Parts.Head]: [Stats.HP], + [Parts.Hands]: [Stats.ATK], + [Parts.Body]: [Stats.HP_P, Stats.ATK_P, Stats.DEF_P, Stats.CR, Stats.CD, Stats.OHB, Stats.EHR], + [Parts.Feet]: [Stats.HP_P, Stats.ATK_P, Stats.DEF_P, Stats.SPD], + [Parts.PlanarSphere]: [Stats.HP_P, Stats.ATK_P, Stats.DEF_P, Stats.Physical_DMG, Stats.Fire_DMG, Stats.Ice_DMG, Stats.Lightning_DMG, Stats.Wind_DMG, Stats.Quantum_DMG, Stats.Imaginary_DMG], + [Parts.LinkRope]: [Stats.HP_P, Stats.ATK_P, Stats.DEF_P, Stats.BE, Stats.ERR], +} + +export const SetsRelics = { + PasserbyOfWanderingCloud: 'Passerby of Wandering Cloud', + MusketeerOfWildWheat: 'Musketeer of Wild Wheat', + KnightOfPurityPalace: 'Knight of Purity Palace', + HunterOfGlacialForest: 'Hunter of Glacial Forest', + ChampionOfStreetwiseBoxing: 'Champion of Streetwise Boxing', + GuardOfWutheringSnow: 'Guard of Wuthering Snow', + FiresmithOfLavaForging: 'Firesmith of Lava-Forging', + GeniusOfBrilliantStars: 'Genius of Brilliant Stars', + BandOfSizzlingThunder: 'Band of Sizzling Thunder', + EagleOfTwilightLine: 'Eagle of Twilight Line', + ThiefOfShootingMeteor: 'Thief of Shooting Meteor', + WastelanderOfBanditryDesert: 'Wastelander of Banditry Desert', + LongevousDisciple: 'Longevous Disciple', + MessengerTraversingHackerspace: 'Messenger Traversing Hackerspace', + TheAshblazingGrandDuke: 'The Ashblazing Grand Duke', + PrisonerInDeepConfinement: 'Prisoner in Deep Confinement', + PioneerDiverOfDeadWaters: 'Pioneer Diver of Dead Waters', + WatchmakerMasterOfDreamMachinations: 'Watchmaker, Master of Dream Machinations', + IronCavalryAgainstScourge: 'Iron Cavalry Against Scourge', + TheWindSoaringValorous: 'The Wind-Soaring Valorous', +} +export type SetsRelics = typeof SetsRelics[keyof typeof SetsRelics] + +export const SetsOrnaments = { + SpaceSealingStation: 'Space Sealing Station', + FleetOfTheAgeless: 'Fleet of the Ageless', + PanCosmicCommercialEnterprise: 'Pan-Cosmic Commercial Enterprise', + BelobogOfTheArchitects: 'Belobog of the Architects', + CelestialDifferentiator: 'Celestial Differentiator', + InertSalsotto: 'Inert Salsotto', + TaliaKingdomOfBanditry: 'Talia: Kingdom of Banditry', + SprightlyVonwacq: 'Sprightly Vonwacq', + RutilantArena: 'Rutilant Arena', + BrokenKeel: 'Broken Keel', + FirmamentFrontlineGlamoth: 'Firmament Frontline: Glamoth', + PenaconyLandOfTheDreams: 'Penacony, Land of the Dreams', + SigoniaTheUnclaimedDesolation: 'Sigonia, the Unclaimed Desolation', + IzumoGenseiAndTakamaDivineRealm: 'Izumo Gensei and Takama Divine Realm', + DuranDynastyOfRunningWolves: 'Duran, Dynasty of Running Wolves', + ForgeOfTheKalpagniLantern: 'Forge of the Kalpagni Lantern', +} +export type SetsOrnaments = typeof SetsOrnaments[keyof typeof SetsOrnaments] + +export const Sets = { + ...SetsRelics, + ...SetsOrnaments, +} +export type Sets = typeof Sets[keyof typeof Sets] + +export const SetsRelicsNames = Object.values(SetsRelics) +export const SetsOrnamentsNames = Object.values(SetsOrnaments) + +export const OrnamentSetToIndex: { [key: string]: number } = {} +for (let i = 0; i < SetsOrnamentsNames.length; i++) { + OrnamentSetToIndex[SetsOrnamentsNames[i]] = i +} + +export const RelicSetToIndex: { [key: string]: number } = {} +for (let i = 0; i < SetsRelicsNames.length; i++) { + RelicSetToIndex[SetsRelicsNames[i]] = i +} + +export const RelicSetCount = Object.values(SetsRelics).length +export const OrnamentSetCount = Object.values(SetsOrnaments).length + +export const PathToClass = { + Abundance: 'Priest', + Destruction: 'Warrior', + Erudition: 'Mage', + Harmony: 'Shaman', + Hunt: 'Rogue', + Nihility: 'Warlock', + Preservation: 'Knight', +} +export const ClassToPath = { + Priest: 'Abundance', + Warrior: 'Destruction', + Mage: 'Erudition', + Shaman: 'Harmony', + Rogue: 'Hunt', + Warlock: 'Nihility', + Knight: 'Preservation', +} + +export const ElementToDamage = { + Physical: Stats.Physical_DMG, + Fire: Stats.Fire_DMG, + Ice: Stats.Ice_DMG, + Thunder: Stats.Lightning_DMG, + Wind: Stats.Wind_DMG, + Quantum: Stats.Quantum_DMG, + Imaginary: Stats.Imaginary_DMG, +} + +export const ElementToResPenType = { + Physical: 'PHYSICAL_RES_PEN', + Fire: 'FIRE_RES_PEN', + Ice: 'ICE_RES_PEN', + Thunder: 'LIGHTNING_RES_PEN', + Wind: 'WIND_RES_PEN', + Quantum: 'QUANTUM_RES_PEN', + Imaginary: 'IMAGINARY_RES_PEN', +} + +export const Constants = { + Sets, + Parts, + Stats, + MainStats, + MainStatsValues, + SubStats, + SetsOrnaments, + SetsRelics, + SetsRelicsNames, + SetsOrnamentsNames, + StatsToReadable, + PartsToReadable, + PartsMainStats, + RelicSetToIndex, + OrnamentSetToIndex, + // StatMaxes, + MAX_INT: 2147483647, + THREAD_BUFFER_LENGTH: 150000, +} + +export const levelOptions = (() => { + const options: { value: number; label: string }[] = [] + for (let i = 80; i >= 1; i--) { + options.push({ + value: i, + label: `Lv. ${i}`, + }) + } + + return options +})() + +export const enemyLevelOptions = (() => { + const options: { value: number; label: string; number: string }[] = [] + for (let i = 95; i >= 1; i--) { + options.push({ + value: i, + label: `Lv. ${i} - ${200 + 10 * i} DEF`, + number: `Lv. ${i}`, + }) + } + + return options +})() + +export const enemyCountOptions = (() => { + const options: { value: number; label: string }[] = [] + for (let i = 1; i <= 5; i += 2) { + options.push({ + value: i, + label: `${i} target${i > 1 ? 's' : ''}`, + }) + } + + return options +})() + +export const enemyResistanceOptions = (() => { + const options: { value: number; label: string }[] = [] + for (let i = 20; i <= 60; i += 20) { + options.push({ + value: i / 100, + label: `${i}% RES`, + }) + } + + return options +})() + +export const enemyMaxToughnessOptions = (() => { + const options: { value: number; label: string; number: string }[] = [] + for (let i = 720; i >= 1; i -= 30) { + options.push({ + value: i, + label: `${i} max toughness`, + number: `${i} tough`, + }) + } + + return options +})() + +export const superimpositionOptions = (() => { + return [ + { value: 1, label: 'S1' }, + { value: 2, label: 'S2' }, + { value: 3, label: 'S3' }, + { value: 4, label: 'S4' }, + { value: 5, label: 'S5' }, + ] +})() + +export const eidolonOptions = (() => { + return [ + { value: 0, label: 'E0' }, + { value: 1, label: 'E1' }, + { value: 2, label: 'E2' }, + { value: 3, label: 'E3' }, + { value: 4, label: 'E4' }, + { value: 5, label: 'E5' }, + { value: 6, label: 'E6' }, + ] +})() + +export const RelicSetFilterOptions = { + relic4Piece: '4 Piece', + relic2Plus2Piece: '2 + 2 Piece', + relic2PlusAny: '2 + Any', +} + +export const DEFAULT_STAT_DISPLAY = 'combat' +export const MAX_RESULTS = 2_000_000 + +export const BodyStatOptions = [ + { value: Stats.HP_P, short: 'HP%', label: 'HP%' }, + { value: Stats.ATK_P, short: 'ATK%', label: 'ATK%' }, + { value: Stats.DEF_P, short: 'DEF%', label: 'DEF%' }, + { value: Stats.CR, short: 'Crit Rate', label: 'CRIT Rate' }, + { value: Stats.CD, short: 'Crit DMG', label: 'CRIT DMG' }, + { value: Stats.EHR, short: 'EHR', label: 'Effect HIT Rate' }, + { value: Stats.OHB, short: 'Healing', label: 'Outgoing Healing Boost' }, +] + +export const FeetStatOptions = [ + { value: Stats.HP_P, short: 'HP%', label: 'HP%' }, + { value: Stats.ATK_P, short: 'ATK%', label: 'ATK%' }, + { value: Stats.DEF_P, short: 'DEF%', label: 'DEF%' }, + { value: Stats.SPD, short: 'SPD', label: 'Speed' }, +] + +export const LinkRopeStatOptions = [ + { value: Stats.HP_P, short: 'HP%', label: 'HP%' }, + { value: Stats.ATK_P, short: 'ATK%', label: 'ATK%' }, + { value: Stats.DEF_P, short: 'DEF%', label: 'DEF%' }, + { value: Stats.BE, short: 'Break', label: 'Break Effect' }, + { value: Stats.ERR, short: 'Energy', label: 'Energy Regeneration Rate' }, +] + +export const PlanarSphereStatOptions = [ + { value: Stats.HP_P, short: 'HP%', label: 'HP%' }, + { value: Stats.ATK_P, short: 'ATK%', label: 'ATK%' }, + { value: Stats.DEF_P, short: 'DEF%', label: 'DEF%' }, + { value: Stats.Physical_DMG, short: 'Physical', label: 'Physical DMG' }, + { value: Stats.Fire_DMG, short: 'Fire', label: 'Fire DMG' }, + { value: Stats.Ice_DMG, short: 'Ice', label: 'Ice DMG' }, + { value: Stats.Lightning_DMG, short: 'Lightning', label: 'Lightning DMG' }, + { value: Stats.Wind_DMG, short: 'Wind', label: 'Wind DMG' }, + { value: Stats.Quantum_DMG, short: 'Quantum', label: 'Quantum DMG' }, + { value: Stats.Imaginary_DMG, short: 'Imaginary', label: 'Imaginary DMG' }, +] + +export const CombatBuffs = { + ATK: { + title: 'ATK', + key: 'ATK', + percent: false, + }, + ATK_P: { + title: 'ATK %', + key: 'ATK_P', + percent: true, + }, + CR: { + title: 'Crit Rate %', + key: 'CR', + percent: true, + }, + CD: { + title: 'Crit Dmg %', + key: 'CD', + percent: true, + }, + SPD: { + title: 'SPD', + key: 'SPD', + percent: false, + }, + SPD_P: { + title: 'SPD %', + key: 'SPD_P', + percent: true, + }, + BE: { + title: 'BE %', + key: 'BE', + percent: true, + }, + DMG_BOOST: { + title: 'Dmg Boost %', + key: 'DMG_BOOST', + percent: true, + }, + DEF_SHRED: { + title: 'Def Shred %', + key: 'DEF_SHRED', + percent: true, + }, + RES_SHRED: { + title: 'RES Pen %', + key: 'RES_SHRED', + percent: true, + }, +} + +export const DamageKeys = ['BASIC', 'SKILL', 'ULT', 'FUA', 'DOT', 'BREAK'] + +export const DEFAULT_TEAM = 'Default' +export const CUSTOM_TEAM = 'Custom' +export const RESET_TEAM = 'Reset' + +export const SIMULATION_SCORE = 'Combat Simulation Score' +export const CHARACTER_SCORE = 'Character Score' diff --git a/compiler/hsr-optimizer-api/src/lib/dataParser.js b/compiler/hsr-optimizer-api/src/lib/dataParser.js new file mode 100644 index 0000000..82b4f4c --- /dev/null +++ b/compiler/hsr-optimizer-api/src/lib/dataParser.js @@ -0,0 +1,4639 @@ +import { Parts, Sets, SetsRelics, Stats, Constants } from 'lib/constants.ts' +import { SortOption } from 'lib/optimizer/sortOptions' + +export const PresetEffects = { + fnAshblazingSet: (stacks) => { + return (form) => { + form.setConditionals[Sets.TheAshblazingGrandDuke][1] = stacks + } + }, + fnPioneerSet: (value) => { + return (form) => { + form.setConditionals[Sets.PioneerDiverOfDeadWaters][1] = value + } + }, + PRISONER_SET: (form) => { + form.setConditionals[Sets.PrisonerInDeepConfinement][1] = 3 + }, + WASTELANDER_SET: (form) => { + form.setConditionals[Sets.PrisonerInDeepConfinement][1] = 2 + }, +} + +const RELICS_2P_BREAK_EFFECT_SPEED = [ + Sets.MessengerTraversingHackerspace, + Sets.ThiefOfShootingMeteor, + Sets.WatchmakerMasterOfDreamMachinations, + Sets.IronCavalryAgainstScourge, +] + +const SPREAD_RELICS_2P_GENERAL_CONDITIONALS = [ + [Sets.GeniusOfBrilliantStars, Sets.GeniusOfBrilliantStars], + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], +] + +const SPREAD_ORNAMENTS_2P_FUA = [ + Sets.DuranDynastyOfRunningWolves, + Sets.SigoniaTheUnclaimedDesolation, + Sets.InertSalsotto, +] + +const SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS = [ + Sets.FirmamentFrontlineGlamoth, + Sets.SigoniaTheUnclaimedDesolation, +] + +export function getScoringMetadata() { + return { + 1001: { // March 7th + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 1, + [Stats.DEF_P]: 1, + [Stats.HP]: 0.5, + [Stats.HP_P]: 0.5, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.DEF, + }, + 1002: { // Dan Heng + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 1, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnPioneerSet(4), + ], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1003: { // Himeko + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0.5, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 1, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + Stats.CR, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(4), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 3, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.TheAshblazingGrandDuke, Sets.TheAshblazingGrandDuke], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1112', // Topaz + lightCone: '23016', // Worrisome + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '23023', // Unjust destiny + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1004: { // Welt + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 1, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + Stats.CR, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.ERR, + ], + }, + presets: [ + PresetEffects.WASTELANDER_SET, + PresetEffects.fnPioneerSet(4), + ], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1308', // Acheron + lightCone: '23024', // Shore + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1106', // Pela + lightCone: '21015', // Pearls + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1005: { // Kafka + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0.5, + [Stats.CD]: 0.5, + [Stats.EHR]: 0.5, + [Stats.RES]: 0, + [Stats.BE]: 0.75, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 1, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.ATK_P, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.PRISONER_SET, + PresetEffects.fnAshblazingSet(6), + ], + sortOption: SortOption.DOT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.ATK_P, + Stats.ATK, + Stats.EHR, + Stats.CR, + Stats.CD, + ], + breakpoints: { + [Stats.EHR]: 0.282, + }, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 2, + DOT: 6, + BREAK: 0, + }, + relicSets: [ + [Sets.PrisonerInDeepConfinement, Sets.PrisonerInDeepConfinement], + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + ], + teammates: [ + { + characterId: '1307', // Swan + lightCone: '23022', // Reforged + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1006: { // Silver Wolf + stats: { + [Stats.ATK]: 0.5, + [Stats.ATK_P]: 0.5, + [Stats.DEF]: 0.25, + [Stats.DEF_P]: 0.25, + [Stats.HP]: 0.25, + [Stats.HP_P]: 0.25, + [Stats.SPD]: 1, + [Stats.CR]: 0.75, + [Stats.CD]: 0.75, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 0.75, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 1, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + Stats.CR, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Quantum_DMG, + Stats.ATK_P, + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [ + PresetEffects.fnPioneerSet(4), + ], + sortOption: SortOption.ULT, + }, + 1008: { // Arlan + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 1, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.BandOfSizzlingThunder, Sets.BandOfSizzlingThunder], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1009: { // Asta + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0.5, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 1, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.SPD, + }, + 1013: { // Herta + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 1, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(4), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 3, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.TheAshblazingGrandDuke, Sets.TheAshblazingGrandDuke], + [Sets.HunterOfGlacialForest, Sets.HunterOfGlacialForest], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1003', // Himeko + lightCone: '23000', // Milky way + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1101: { // Bronya + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 1, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.Wind_DMG, + Stats.Physical_DMG, + Stats.Fire_DMG, + Stats.Ice_DMG, + Stats.Lightning_DMG, + Stats.Quantum_DMG, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.CD, + }, + 1102: { // Seele + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 1, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [SetsRelics.GeniusOfBrilliantStars, SetsRelics.GeniusOfBrilliantStars], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1006', // SW + lightCone: '23007', // Rain + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1306', // Sparkle + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1103: { // Serval + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 1, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + Stats.CR, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.ATK_P, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.BandOfSizzlingThunder, Sets.BandOfSizzlingThunder], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1005', // Kafka + lightCone: '23006', // Patience + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1104: { // Gepard + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 1, + [Stats.DEF_P]: 1, + [Stats.HP]: 0.5, + [Stats.HP_P]: 0.5, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0.75, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.DEF, + }, + 1105: { // Natasha + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.OHB, + ], + [Parts.Feet]: [ + Stats.HP_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.EHP, + }, + 1106: { // Pela + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 1, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.EHR, + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.SPD, + }, + 1107: { // Clara + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(2), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 1, + ULT: 0, + FUA: 3, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.ChampionOfStreetwiseBoxing, Sets.ChampionOfStreetwiseBoxing], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1112', // Topaz + lightCone: '23016', // Worrisome + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '21016', // Trend + characterEidolon: 0, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1108: { // Sampo + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 1, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 1, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.ATK_P, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [ + PresetEffects.PRISONER_SET, + ], + sortOption: SortOption.DOT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.ATK_P, + Stats.EHR, + Stats.ATK, + Stats.CR, + Stats.CD, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 30, + BREAK: 0, + }, + relicSets: [ + [Sets.PrisonerInDeepConfinement, Sets.PrisonerInDeepConfinement], + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + ], + teammates: [ + { + characterId: '1005', // Kafka + lightCone: '23006', // Patience + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1109: { // Hook + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 1, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnPioneerSet(4), + ], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1110: { // Lynx + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.OHB, + ], + [Parts.Feet]: [ + Stats.HP_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.EHP, + }, + 1111: { // Luka + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 0.75, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.ATK_P, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [ + PresetEffects.PRISONER_SET, + ], + sortOption: SortOption.DOT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.BE, + Stats.ATK_P, + Stats.ATK, + Stats.EHR, + Stats.CR, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 1, + ULT: 1, + FUA: 0, + DOT: 2, + BREAK: 1, + }, + relicSets: [ + [Sets.PrisonerInDeepConfinement, Sets.PrisonerInDeepConfinement], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + RELICS_2P_BREAK_EFFECT_SPEED, + ], + ornamentSets: [ + Sets.TaliaKingdomOfBanditry, + Sets.FirmamentFrontlineGlamoth, + ], + teammates: [ + { + characterId: '1005', // Kafka + lightCone: '23006', // Patience + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1112: { // Topaz and Numby + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 1, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Fire_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(0), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 1, + ULT: 0, + FUA: 2, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.TheAshblazingGrandDuke, Sets.TheAshblazingGrandDuke], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1305', // Ratio + lightCone: '23020', // Baptism + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1309', // Robin + lightCone: '23026', // Nightglow + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '23023', // Unjust destiny + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1201: { // Qingque + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 1, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.BASIC, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 0, + ULT: 1, + FUA: 2, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.GeniusOfBrilliantStars, Sets.GeniusOfBrilliantStars], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1006', // SW + lightCone: '23007', // Rain + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1306', // Sparkle + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1202: { // Tingyun + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.SPD, + }, + 1203: { // Luocha + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.OHB, + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [ + PresetEffects.WASTELANDER_SET, + ], + sortOption: SortOption.SPD, + }, + 1204: { // Jing Yuan + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 1, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(8), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 1, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.TheAshblazingGrandDuke, Sets.TheAshblazingGrandDuke], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + Sets.RutilantArena, + ], + teammates: [ + { + characterId: '1306', // Sparkle + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1205: { // Blade + stats: { + [Stats.ATK]: 0.25, + [Stats.ATK_P]: 0.25, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 1, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + Stats.CR, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.HP_P, + ], + [Parts.PlanarSphere]: [ + Stats.Wind_DMG, + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + ], + }, + presets: [], + sortOption: SortOption.BASIC, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.HP_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.HP_P, + Stats.HP, + Stats.ATK_P, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 0, + ULT: 1, + FUA: 1, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.LongevousDisciple, Sets.LongevousDisciple], + ], + ornamentSets: [ + Sets.RutilantArena, + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1212', // Jingliu + lightCone: '23014', // I shall + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1203', // Luocha + lightCone: '20015', // Multi + characterEidolon: 0, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1206: { // Sushang + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0.5, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.CR, + Stats.CD, + Stats.ATK_P, + Stats.BE, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + [Sets.ChampionOfStreetwiseBoxing, Sets.ChampionOfStreetwiseBoxing], + [Sets.IronCavalryAgainstScourge, Sets.IronCavalryAgainstScourge], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + Sets.RutilantArena, + ], + teammates: [ + { + characterId: '8006', // Stelle + lightCone: '21004', // Memories + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1301', // Gallagher + lightCone: '20015', // Multi + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1207: { // Yukong + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 1, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.WASTELANDER_SET, + ], + sortOption: SortOption.ULT, + }, + 1208: { // Fu Xuan + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.EHP, + }, + 1209: { // Yanqing + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 1, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CR, + Stats.CD, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 2, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + [Sets.HunterOfGlacialForest, Sets.HunterOfGlacialForest], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1106', // Pela + lightCone: '21015', // Pearls + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1210: { // Guinaifen + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 0.75, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 1, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.PRISONER_SET, + ], + sortOption: SortOption.DOT, + }, + 1211: { // Bailu + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.OHB, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.HP_P, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.EHP, + }, + 1212: { // Jingliu + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 1, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.HunterOfGlacialForest, Sets.HunterOfGlacialForest], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1213: { // Dan Heng • Imbibitor Lunae + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 1, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.WASTELANDER_SET, + ], + sortOption: SortOption.BASIC, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 0, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.MusketeerOfWildWheat, Sets.MusketeerOfWildWheat], + [Sets.WastelanderOfBanditryDesert, Sets.WastelanderOfBanditryDesert], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1306', // Sparkle + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1202', // Tingyun + lightCone: '21018', // Dance + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1214: { // Xueyi + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 1, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 1, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Quantum_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(3), + ], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.BE, + Stats.ATK_P, + Stats.CR, + Stats.CD, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 3, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + [Sets.GeniusOfBrilliantStars, Sets.GeniusOfBrilliantStars], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.TaliaKingdomOfBanditry, + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '8006', // Stelle + lightCone: '21004', // Memories + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1301', // Gallagher + lightCone: '20015', // Multi + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1215: { // Hanya + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + Stats.HP_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.SPD, + }, + 1217: { // Huohuo + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 1, + [Stats.HP_P]: 1, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.OHB, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.HP_P, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + ], + [Parts.LinkRope]: [ + Stats.HP_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.EHP, + }, + 1301: { // Gallagher + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 1, + [Stats.ERR]: 1, + [Stats.OHB]: 1, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.OHB, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.BE, + }, + 1302: { // Argenti + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Physical_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.ChampionOfStreetwiseBoxing, Sets.ChampionOfStreetwiseBoxing], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + Sets.RutilantArena, + ], + teammates: [ + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1202', // Tingyun + lightCone: '21018', // Dance + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1303: { // Ruan Mei + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 1, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + Stats.HP_P, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.ERR, + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.BE, + }, + 1304: { // Aventurine + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 1, + [Stats.DEF_P]: 1, + [Stats.HP]: 0.5, + [Stats.HP_P]: 0.5, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 1, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Imaginary_DMG, + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(7), + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.DEF_P, + Stats.DEF, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 0, + ULT: 1, + FUA: 2, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + [Sets.KnightOfPurityPalace, Sets.KnightOfPurityPalace], + [Sets.TheAshblazingGrandDuke, Sets.KnightOfPurityPalace, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + Sets.BrokenKeel, + Sets.PenaconyLandOfTheDreams, + Sets.FleetOfTheAgeless, + ], + teammates: [ + { + characterId: '1112', // Topaz + lightCone: '23016', // Worrisome + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1309', // Robin + lightCone: '23026', // Nightglow + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1305', // Ratio + lightCone: '23020', // Baptism + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1305: { // Dr Ratio + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 1, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnAshblazingSet(1), + PresetEffects.fnPioneerSet(4), + PresetEffects.WASTELANDER_SET, + ], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 4, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1112', // Topaz + lightCone: '23016', // Worrisome + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1309', // Robin + lightCone: '23026', // Nightglow + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '23023', // Unjust destiny + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1306: { // Sparkle + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CD, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.Wind_DMG, + Stats.Physical_DMG, + Stats.Fire_DMG, + Stats.Ice_DMG, + Stats.Lightning_DMG, + Stats.Quantum_DMG, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.CD, + }, + 1307: { // Black Swan + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 1, + [Stats.RES]: 0, + [Stats.BE]: 0.5, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 1, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.SPD, + Stats.ATK_P, + ], + [Parts.PlanarSphere]: [ + Stats.Wind_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.PRISONER_SET, + ], + sortOption: SortOption.DOT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.ATK_P, + Stats.EHR, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Wind_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.ATK_P, + Stats.EHR, + Stats.ATK, + Stats.CR, + Stats.CD, + ], + breakpoints: { + [Stats.EHR]: 1.20, + }, + formula: { + BASIC: 2, + SKILL: 1, + ULT: 1, + FUA: 0, + DOT: 8, + BREAK: 0, + }, + relicSets: [ + [Sets.PrisonerInDeepConfinement, Sets.PrisonerInDeepConfinement], + ], + ornamentSets: [ + Sets.FirmamentFrontlineGlamoth, + Sets.PanCosmicCommercialEnterprise, + ], + teammates: [ + { + characterId: '1005', // Kafka + lightCone: '23006', // Patience + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1308: { // Acheron + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 1, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Lightning_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [ + PresetEffects.fnPioneerSet(4), + ], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Lightning_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 2, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.IzumoGenseiAndTakamaDivineRealm, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1106', // Pela + lightCone: '21015', // Pearls + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1006', // SW + lightCone: '23007', // Rain + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '21016', // Trend + characterEidolon: 0, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1309: { // Robin + stats: { + [Stats.ATK]: 1, + [Stats.ATK_P]: 1, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Constants.Parts.LinkRope]: [ + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.ATK, + }, + 1310: { // Firefly + stats: { + [Constants.Stats.ATK]: 1, + [Constants.Stats.ATK_P]: 1, + [Constants.Stats.DEF]: 0, + [Constants.Stats.DEF_P]: 0, + [Constants.Stats.HP]: 0, + [Constants.Stats.HP_P]: 0, + [Constants.Stats.SPD]: 1, + [Constants.Stats.CR]: 0, + [Constants.Stats.CD]: 0, + [Constants.Stats.EHR]: 0, + [Constants.Stats.RES]: 0, + [Constants.Stats.BE]: 1, + [Constants.Stats.ERR]: 0, + [Constants.Stats.OHB]: 0, + [Constants.Stats.Physical_DMG]: 0, + [Constants.Stats.Fire_DMG]: 1, + [Constants.Stats.Ice_DMG]: 0, + [Constants.Stats.Lightning_DMG]: 0, + [Constants.Stats.Wind_DMG]: 0, + [Constants.Stats.Quantum_DMG]: 0, + [Constants.Stats.Imaginary_DMG]: 0, + }, + parts: { + [Constants.Parts.Body]: [ + Constants.Stats.ATK_P, + ], + [Constants.Parts.Feet]: [ + Constants.Stats.ATK_P, + Constants.Stats.SPD, + ], + [Constants.Parts.PlanarSphere]: [ + Constants.Stats.ATK_P, + Constants.Stats.Fire_DMG, + ], + [Constants.Parts.LinkRope]: [ + Constants.Stats.ATK_P, + Constants.Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Fire_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.BE, + Stats.ATK_P, + Stats.CR, + Stats.CD, + Stats.ATK, + ], + breakpoints: {}, + maxBonusRolls: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 2, + }, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 0, + FUA: 0, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + RELICS_2P_BREAK_EFFECT_SPEED, + [Sets.IronCavalryAgainstScourge, Sets.IronCavalryAgainstScourge], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.TaliaKingdomOfBanditry, + Sets.ForgeOfTheKalpagniLantern, + ], + teammates: [ + { + characterId: '8006', // Stelle + lightCone: '21004', // Memories + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1301', // Gallagher + lightCone: '20015', // Multi + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 1312: { // Misha + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 1, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.ULT, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Ice_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.PioneerDiverOfDeadWaters, Sets.PioneerDiverOfDeadWaters], + [Sets.HunterOfGlacialForest, Sets.HunterOfGlacialForest], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1106', // Pela + lightCone: '21015', // Pearls + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1314: { // Jade + stats: { + [Constants.Stats.ATK]: 0.75, + [Constants.Stats.ATK_P]: 0.75, + [Constants.Stats.DEF]: 0, + [Constants.Stats.DEF_P]: 0, + [Constants.Stats.HP]: 0, + [Constants.Stats.HP_P]: 0, + [Constants.Stats.SPD]: 1, + [Constants.Stats.CR]: 1, + [Constants.Stats.CD]: 1, + [Constants.Stats.EHR]: 0, + [Constants.Stats.RES]: 0, + [Constants.Stats.BE]: 0, + [Constants.Stats.ERR]: 0, + [Constants.Stats.OHB]: 0, + [Constants.Stats.Physical_DMG]: 0, + [Constants.Stats.Fire_DMG]: 0, + [Constants.Stats.Ice_DMG]: 0, + [Constants.Stats.Lightning_DMG]: 0, + [Constants.Stats.Wind_DMG]: 0, + [Constants.Stats.Quantum_DMG]: 1, + [Constants.Stats.Imaginary_DMG]: 0, + }, + parts: { + [Constants.Parts.Body]: [ + Constants.Stats.CR, + Constants.Stats.CD, + ], + [Constants.Parts.Feet]: [ + Constants.Stats.ATK_P, + Constants.Stats.SPD, + ], + [Constants.Parts.PlanarSphere]: [ + Constants.Stats.ATK_P, + Constants.Stats.Quantum_DMG, + ], + [Constants.Parts.LinkRope]: [ + Constants.Stats.ATK_P, + ], + }, + presets: [], + sortOption: SortOption.FUA, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Quantum_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 2, + SKILL: 0, + ULT: 1, + FUA: 2, + DOT: 0, + BREAK: 0, + }, + relicSets: [ + [Sets.GeniusOfBrilliantStars, Sets.GeniusOfBrilliantStars], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.InertSalsotto, + ...SPREAD_ORNAMENTS_2P_FUA, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + Sets.RutilantArena, + ], + teammates: [ + { + characterId: '1112', // Topaz + lightCone: '23016', // Worrisome + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1309', // Robin + lightCone: '23026', // Nightglow + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1304', // Aventurine + lightCone: '23023', // Unjust destiny + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 1315: { // Boothill + stats: { + [Stats.ATK]: 0.5, + [Stats.ATK_P]: 0.5, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 0.75, + [Stats.CD]: 0.75, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 1, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + Stats.ATK_P, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.Physical_DMG, + Stats.ATK_P, + ], + [Parts.LinkRope]: [ + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.BASIC, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.BE, + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 3, + SKILL: 0, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + RELICS_2P_BREAK_EFFECT_SPEED, + [Sets.IronCavalryAgainstScourge, Sets.IronCavalryAgainstScourge], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.TaliaKingdomOfBanditry, + ], + teammates: [ + { + characterId: '8006', // Stelle + lightCone: '21004', // Memories + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1301', // Gallagher + lightCone: '20015', // Multi + characterEidolon: 6, + lightConeSuperimposition: 5, + }, + ], + }, + }, + 8001: { // Physical Trailblazer M + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0.5, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + [Sets.ChampionOfStreetwiseBoxing, Sets.ChampionOfStreetwiseBoxing], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 8002: { // Physical Trailblazer F + stats: { + [Stats.ATK]: 0.75, + [Stats.ATK_P]: 0.75, + [Stats.DEF]: 0, + [Stats.DEF_P]: 0, + [Stats.HP]: 0, + [Stats.HP_P]: 0, + [Stats.SPD]: 1, + [Stats.CR]: 1, + [Stats.CD]: 1, + [Stats.EHR]: 0, + [Stats.RES]: 0, + [Stats.BE]: 0.5, + [Stats.ERR]: 0, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 1, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + presets: [], + sortOption: SortOption.SKILL, + simulation: { + parts: { + [Parts.Body]: [ + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.ATK_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.ATK_P, + Stats.Physical_DMG, + ], + [Parts.LinkRope]: [ + Stats.ATK_P, + Stats.BE, + ], + }, + substats: [ + Stats.CD, + Stats.CR, + Stats.ATK_P, + Stats.ATK, + ], + breakpoints: {}, + formula: { + BASIC: 0, + SKILL: 3, + ULT: 1, + FUA: 0, + DOT: 0, + BREAK: 1, + }, + relicSets: [ + [Sets.ChampionOfStreetwiseBoxing, Sets.ChampionOfStreetwiseBoxing], + ...SPREAD_RELICS_2P_GENERAL_CONDITIONALS, + ], + ornamentSets: [ + Sets.RutilantArena, + ...SPREAD_ORNAMENTS_2P_GENERAL_CONDITIONALS, + ], + teammates: [ + { + characterId: '1101', // Bronya + lightCone: '23003', // But the battle + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1303', // Ruan Mei + lightCone: '23019', // Past self + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + { + characterId: '1217', // Huohuo + lightCone: '23017', // Night of Fright + characterEidolon: 0, + lightConeSuperimposition: 1, + }, + ], + }, + }, + 8003: { // Fire Trailblazer M + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 1, + [Stats.DEF_P]: 1, + [Stats.HP]: 0.5, + [Stats.HP_P]: 0.5, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0.75, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.DEF, + }, + 8004: { // Fire Trailblazer F + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 1, + [Stats.DEF_P]: 1, + [Stats.HP]: 0.5, + [Stats.HP_P]: 0.5, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0.75, + [Stats.RES]: 0.75, + [Stats.BE]: 0, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.DEF_P, + ], + [Parts.Feet]: [ + Stats.DEF_P, + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.DEF_P, + ], + [Parts.LinkRope]: [ + Stats.DEF_P, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.DEF, + }, + 8005: { // Imaginary Trailblazer M + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 1, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.Wind_DMG, + Stats.Physical_DMG, + Stats.Fire_DMG, + Stats.Ice_DMG, + Stats.Lightning_DMG, + Stats.Quantum_DMG, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.BE, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.BE, + }, + 8006: { // Imaginary Trailblazer F + stats: { + [Stats.ATK]: 0, + [Stats.ATK_P]: 0, + [Stats.DEF]: 0.75, + [Stats.DEF_P]: 0.75, + [Stats.HP]: 0.75, + [Stats.HP_P]: 0.75, + [Stats.SPD]: 1, + [Stats.CR]: 0, + [Stats.CD]: 0, + [Stats.EHR]: 0, + [Stats.RES]: 0.75, + [Stats.BE]: 1, + [Stats.ERR]: 1, + [Stats.OHB]: 0, + [Stats.Physical_DMG]: 0, + [Stats.Fire_DMG]: 0, + [Stats.Ice_DMG]: 0, + [Stats.Lightning_DMG]: 0, + [Stats.Wind_DMG]: 0, + [Stats.Quantum_DMG]: 0, + [Stats.Imaginary_DMG]: 0, + }, + parts: { + [Parts.Body]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.CR, + Stats.CD, + ], + [Parts.Feet]: [ + Stats.SPD, + ], + [Parts.PlanarSphere]: [ + Stats.HP_P, + Stats.DEF_P, + Stats.ATK_P, + Stats.Wind_DMG, + Stats.Physical_DMG, + Stats.Fire_DMG, + Stats.Ice_DMG, + Stats.Lightning_DMG, + Stats.Quantum_DMG, + Stats.Imaginary_DMG, + ], + [Parts.LinkRope]: [ + Stats.BE, + Stats.ERR, + ], + }, + presets: [], + sortOption: SortOption.BE, + }, + } +} diff --git a/compiler/hsr-optimizer-api/src/lib/optimizer/sortOptions.ts b/compiler/hsr-optimizer-api/src/lib/optimizer/sortOptions.ts new file mode 100644 index 0000000..094c10f --- /dev/null +++ b/compiler/hsr-optimizer-api/src/lib/optimizer/sortOptions.ts @@ -0,0 +1,161 @@ +// This file tracks the mapping between various stat property references between the optimizer / worker / grid / buffer packer +// This sucks - clean up the discrepancies eventually +export const SortOption = { + ATK: { + key: 'ATK', + basicProperty: 'ATK', + combatProperty: 'ATK', + basicGridColumn: 'ATK', + combatGridColumn: 'xATK', + }, + DEF: { + key: 'DEF', + basicProperty: 'DEF', + combatProperty: 'DEF', + basicGridColumn: 'DEF', + combatGridColumn: 'xDEF', + }, + HP: { + key: 'HP', + basicProperty: 'HP', + combatProperty: 'HP', + basicGridColumn: 'HP', + combatGridColumn: 'xHP', + }, + SPD: { + key: 'SPD', + basicProperty: 'SPD', + combatProperty: 'SPD', + basicGridColumn: 'SPD', + combatGridColumn: 'xSPD', + }, + CR: { + key: 'CR', + basicProperty: 'CRIT Rate', + combatProperty: 'CRIT Rate', + basicGridColumn: 'CRIT Rate', + combatGridColumn: 'xCR', + }, + CD: { + key: 'CD', + basicProperty: 'CRIT DMG', + combatProperty: 'CRIT DMG', + basicGridColumn: 'CRIT DMG', + combatGridColumn: 'xCD', + }, + EHR: { + key: 'EHR', + basicProperty: 'Effect Hit Rate', + combatProperty: 'Effect Hit Rate', + basicGridColumn: 'Effect Hit Rate', + combatGridColumn: 'xEHR', + }, + RES: { + key: 'RES', + basicProperty: 'Effect RES', + combatProperty: 'Effect RES', + basicGridColumn: 'Effect RES', + combatGridColumn: 'xRES', + }, + BE: { + key: 'BE', + basicProperty: 'Break Effect', + combatProperty: 'Break Effect', + basicGridColumn: 'Break Effect', + combatGridColumn: 'xBE', + }, + OHB: { + key: 'OHB', + basicProperty: 'Outgoing Healing Boost', + combatProperty: 'Outgoing Healing Boost', + basicGridColumn: 'Outgoing Healing Boost', + combatGridColumn: 'xOHB', + }, + ERR: { + key: 'ERR', + basicProperty: 'Energy Regeneration Rate', + combatProperty: 'Energy Regeneration Rate', + basicGridColumn: 'Energy Regeneration Rate', + combatGridColumn: 'xERR', + }, + ELEMENTAL_DMG: { + key: 'ELEMENTAL_DMG', + basicProperty: 'ELEMENTAL_DMG', + combatProperty: 'ELEMENTAL_DMG', + basicGridColumn: 'ED', + combatGridColumn: 'xELEMENTAL_DMG', + isComputedRating: true, + }, + WEIGHT: { + key: 'WEIGHT', + basicProperty: 'WEIGHT', + combatProperty: 'WEIGHT', + basicGridColumn: 'WEIGHT', + combatGridColumn: 'WEIGHT', + isComputedRating: true, + }, + EHP: { + key: 'EHP', + basicProperty: 'EHP', + combatProperty: 'EHP', + basicGridColumn: 'EHP', + combatGridColumn: 'EHP', + isComputedRating: true, + }, + BASIC: { + key: 'BASIC', + basicProperty: 'BASIC_DMG', + combatProperty: 'BASIC_DMG', + basicGridColumn: 'BASIC', + combatGridColumn: 'BASIC', + isComputedRating: true, + }, + SKILL: { + key: 'SKILL', + basicProperty: 'SKILL_DMG', + combatProperty: 'SKILL_DMG', + basicGridColumn: 'SKILL', + combatGridColumn: 'SKILL', + isComputedRating: true, + }, + ULT: { + key: 'ULT', + basicProperty: 'ULT_DMG', + combatProperty: 'ULT_DMG', + basicGridColumn: 'ULT', + combatGridColumn: 'ULT', + isComputedRating: true, + }, + FUA: { + key: 'FUA', + basicProperty: 'FUA_DMG', + combatProperty: 'FUA_DMG', + basicGridColumn: 'FUA', + combatGridColumn: 'FUA', + isComputedRating: true, + }, + DOT: { + key: 'DOT', + basicProperty: 'DOT_DMG', + combatProperty: 'DOT_DMG', + basicGridColumn: 'DOT', + combatGridColumn: 'DOT', + isComputedRating: true, + }, + BREAK: { + key: 'BREAK', + basicProperty: 'BREAK_DMG', + combatProperty: 'BREAK_DMG', + basicGridColumn: 'BREAK', + combatGridColumn: 'BREAK', + isComputedRating: true, + }, + COMBO: { + key: 'COMBO', + basicProperty: 'COMBO_DMG', + combatProperty: 'COMBO_DMG', + basicGridColumn: 'COMBO', + combatGridColumn: 'COMBO', + isComputedRating: true, + }, +} diff --git a/compiler/hsr-optimizer-api/src/lib/sortOptions.ts b/compiler/hsr-optimizer-api/src/lib/sortOptions.ts new file mode 100644 index 0000000..094c10f --- /dev/null +++ b/compiler/hsr-optimizer-api/src/lib/sortOptions.ts @@ -0,0 +1,161 @@ +// This file tracks the mapping between various stat property references between the optimizer / worker / grid / buffer packer +// This sucks - clean up the discrepancies eventually +export const SortOption = { + ATK: { + key: 'ATK', + basicProperty: 'ATK', + combatProperty: 'ATK', + basicGridColumn: 'ATK', + combatGridColumn: 'xATK', + }, + DEF: { + key: 'DEF', + basicProperty: 'DEF', + combatProperty: 'DEF', + basicGridColumn: 'DEF', + combatGridColumn: 'xDEF', + }, + HP: { + key: 'HP', + basicProperty: 'HP', + combatProperty: 'HP', + basicGridColumn: 'HP', + combatGridColumn: 'xHP', + }, + SPD: { + key: 'SPD', + basicProperty: 'SPD', + combatProperty: 'SPD', + basicGridColumn: 'SPD', + combatGridColumn: 'xSPD', + }, + CR: { + key: 'CR', + basicProperty: 'CRIT Rate', + combatProperty: 'CRIT Rate', + basicGridColumn: 'CRIT Rate', + combatGridColumn: 'xCR', + }, + CD: { + key: 'CD', + basicProperty: 'CRIT DMG', + combatProperty: 'CRIT DMG', + basicGridColumn: 'CRIT DMG', + combatGridColumn: 'xCD', + }, + EHR: { + key: 'EHR', + basicProperty: 'Effect Hit Rate', + combatProperty: 'Effect Hit Rate', + basicGridColumn: 'Effect Hit Rate', + combatGridColumn: 'xEHR', + }, + RES: { + key: 'RES', + basicProperty: 'Effect RES', + combatProperty: 'Effect RES', + basicGridColumn: 'Effect RES', + combatGridColumn: 'xRES', + }, + BE: { + key: 'BE', + basicProperty: 'Break Effect', + combatProperty: 'Break Effect', + basicGridColumn: 'Break Effect', + combatGridColumn: 'xBE', + }, + OHB: { + key: 'OHB', + basicProperty: 'Outgoing Healing Boost', + combatProperty: 'Outgoing Healing Boost', + basicGridColumn: 'Outgoing Healing Boost', + combatGridColumn: 'xOHB', + }, + ERR: { + key: 'ERR', + basicProperty: 'Energy Regeneration Rate', + combatProperty: 'Energy Regeneration Rate', + basicGridColumn: 'Energy Regeneration Rate', + combatGridColumn: 'xERR', + }, + ELEMENTAL_DMG: { + key: 'ELEMENTAL_DMG', + basicProperty: 'ELEMENTAL_DMG', + combatProperty: 'ELEMENTAL_DMG', + basicGridColumn: 'ED', + combatGridColumn: 'xELEMENTAL_DMG', + isComputedRating: true, + }, + WEIGHT: { + key: 'WEIGHT', + basicProperty: 'WEIGHT', + combatProperty: 'WEIGHT', + basicGridColumn: 'WEIGHT', + combatGridColumn: 'WEIGHT', + isComputedRating: true, + }, + EHP: { + key: 'EHP', + basicProperty: 'EHP', + combatProperty: 'EHP', + basicGridColumn: 'EHP', + combatGridColumn: 'EHP', + isComputedRating: true, + }, + BASIC: { + key: 'BASIC', + basicProperty: 'BASIC_DMG', + combatProperty: 'BASIC_DMG', + basicGridColumn: 'BASIC', + combatGridColumn: 'BASIC', + isComputedRating: true, + }, + SKILL: { + key: 'SKILL', + basicProperty: 'SKILL_DMG', + combatProperty: 'SKILL_DMG', + basicGridColumn: 'SKILL', + combatGridColumn: 'SKILL', + isComputedRating: true, + }, + ULT: { + key: 'ULT', + basicProperty: 'ULT_DMG', + combatProperty: 'ULT_DMG', + basicGridColumn: 'ULT', + combatGridColumn: 'ULT', + isComputedRating: true, + }, + FUA: { + key: 'FUA', + basicProperty: 'FUA_DMG', + combatProperty: 'FUA_DMG', + basicGridColumn: 'FUA', + combatGridColumn: 'FUA', + isComputedRating: true, + }, + DOT: { + key: 'DOT', + basicProperty: 'DOT_DMG', + combatProperty: 'DOT_DMG', + basicGridColumn: 'DOT', + combatGridColumn: 'DOT', + isComputedRating: true, + }, + BREAK: { + key: 'BREAK', + basicProperty: 'BREAK_DMG', + combatProperty: 'BREAK_DMG', + basicGridColumn: 'BREAK', + combatGridColumn: 'BREAK', + isComputedRating: true, + }, + COMBO: { + key: 'COMBO', + basicProperty: 'COMBO_DMG', + combatProperty: 'COMBO_DMG', + basicGridColumn: 'COMBO', + combatGridColumn: 'COMBO', + isComputedRating: true, + }, +}