feat: support resolving multi-element characters

This commit is contained in:
2026-03-21 18:39:32 +07:00 Unverified
parent d01783c27f
commit b144018947
2 changed files with 28 additions and 4 deletions
+12
View File
@@ -57,6 +57,18 @@ export type ElementType =
| "Ice" | "Ice"
| "Grass"; | "Grass";
export const ElementList = [
"None",
"Fire",
"Water",
"Grass",
"Electric",
"Ice",
"Physical",
"Wind",
"Rock",
];
export type WeaponType = export type WeaponType =
| "WEAPON_SWORD_ONE_HAND" | "WEAPON_SWORD_ONE_HAND"
| "WEAPON_CLAYMORE" | "WEAPON_CLAYMORE"
+16 -4
View File
@@ -28,7 +28,7 @@ import { cardErrorLocs } from "@/lib/locs";
import { createLogger } from "@/lib/logger"; import { createLogger } from "@/lib/logger";
import { mockData } from "@/lib/mock"; import { mockData } from "@/lib/mock";
import { buildDisplayRows } from "@/lib/rows"; import { buildDisplayRows } from "@/lib/rows";
import { SubstatOrder } from "@/type/enka"; import { ElementList, SubstatOrder } from "@/type/enka";
import { PercentageFightProp } from "@/type/fightPropMap"; import { PercentageFightProp } from "@/type/fightPropMap";
import { ErrorPage } from "./error"; import { ErrorPage } from "./error";
@@ -136,7 +136,19 @@ export function card(app: App) {
); );
if (!char) return error(400, errorLoc.notInShowcase); if (!char) return error(400, errorLoc.notInShowcase);
const avatar = avatarStore[char.avatar.avatarId]; const avatar =
Object.entries(avatarStore).find(
([avatarId, avatar]) =>
avatarId.split("-")[0] === `${char.avatar.avatarId}` &&
avatar.Element ===
ElementList[
(
data.playerInfo.showAvatarInfoList.find(
(e) => e.avatar.avatarId === char.avatar.avatarId,
) as { energyType: number } | undefined
)?.energyType ?? 0
],
)?.[1] || avatarStore[char.avatar.avatarId];
if (!avatar) return error(400, errorLoc.unsupported); if (!avatar) return error(400, errorLoc.unsupported);
if (!char.equipList) if (!char.equipList)
@@ -376,7 +388,7 @@ export function card(app: App) {
{/* constellation */} {/* constellation */}
<div <div
tw="flex align-start flex-col text-[1.12em]" tw="flex align-start flex-col text-[1.12em]"
className={`${char.avatar.element} locked`} className={`${avatar.Element} locked`}
> >
{avatar.Consts.map((c, i) => ( {avatar.Consts.map((c, i) => (
<div <div
@@ -428,7 +440,7 @@ export function card(app: App) {
return ( return (
<div tw="mt-[.6em] relative"> <div tw="mt-[.6em] relative">
<TalentSvg <TalentSvg
tw={`Talents ${char.avatar.element} w-[3.6em] opacity-60 text-black`} tw={`Talents ${avatar.Element} w-[3.6em] opacity-60 text-black`}
/> />
<img <img
key={key} key={key}