Files
gunshiz b3bc4c3bb4
CI / verify (push) Successful in 59s
CI / build-and-deploy (push) Successful in 1m38s
feat : add import from buzz guide
2026-09-20 00:41:02 +07:00

72 lines
2.8 KiB
TypeScript

import { createBuild } from "./translator/build";
import { translateRotation } from "./translator/rotation";
import type { Catalog, Team } from "./translator/types";
export interface TeamGuideMember {
position: number;
characterId: string;
weaponId: string;
artifactOneId: string;
artifactTwoId: string | null;
constellation: number;
refinement: number;
}
export interface TeamGuideTeam {
id: string;
title: string;
conditionName: string | null;
combo: string;
members: TeamGuideMember[];
}
export interface TeamGuide {
id: string;
characterId: string;
name: string;
teams: TeamGuideTeam[];
}
export type GuideImportResult = { team: Team; error?: never } | { team?: never; error: string };
export function importGuideTeam(source: TeamGuideTeam, catalog: Catalog): GuideImportResult {
const builds = [] as Team["builds"];
for (const member of source.members) {
const character = catalog.characters.find((item) => item.id === member.characterId);
const weapon = catalog.weapons.find((item) => item.id === member.weaponId);
const artifactOne = catalog.artifacts.find((item) => item.id === member.artifactOneId);
const artifactTwo = member.artifactTwoId ? catalog.artifacts.find((item) => item.id === member.artifactTwoId) : undefined;
if (!character) return { error: `Character ${member.characterId} is missing from the catalog.` };
if (!weapon) return { error: `Weapon ${member.weaponId} is missing from the catalog.` };
if (!artifactOne) return { error: `Artifact ${member.artifactOneId} is missing from the catalog.` };
if (member.artifactTwoId && !artifactTwo) return { error: `Artifact ${member.artifactTwoId} is missing from the catalog.` };
if (character.weaponType && weapon.weaponType !== character.weaponType) return { error: `${weapon.name} is not compatible with ${character.name}.` };
const build = createBuild(catalog, character, `guide-build-${source.id}-${member.position}`);
builds.push({
...build,
weaponId: weapon.id,
weaponKey: weapon.key,
weaponName: weapon.name,
refinement: member.refinement,
constellation: member.constellation,
artifactMode: artifactTwo ? "2+2" : "4pc",
artifactOneId: artifactOne.id,
artifactOneKey: artifactOne.key,
artifactOneName: artifactOne.name,
artifactTwoId: artifactTwo?.id ?? "",
artifactTwoKey: artifactTwo?.key ?? "",
artifactTwoName: artifactTwo?.name ?? "",
});
}
if (!builds.length) return { error: "This guide team has no characters." };
const team: Team = { id: `guide-team-${source.id}`, name: source.title, builds };
const combo = source.combo.trim();
if (combo && combo !== "-") {
team.rotation = { enabled: true, text: combo, repeat: false };
if (translateRotation(team).error) team.rotation.enabled = false;
}
return { team };
}