diff --git a/src/components/v2-pre/BattlesuitSmallIcon.tsx b/src/components/v2-pre/BattlesuitSmallIcon.tsx new file mode 100644 index 00000000..b4ba3b71 --- /dev/null +++ b/src/components/v2-pre/BattlesuitSmallIcon.tsx @@ -0,0 +1,95 @@ +import { Box, Flex, Image } from 'theme-ui' +import { assetsBucketBaseUrl } from '../../lib/consts' +import { AttributeType, BattlesuitCatalogItem } from '../../lib/v2-pre/data/types' + +interface BattlesuitAvatarIconProps { + battlesuit: BattlesuitCatalogItem + ratio?: number +} + +const width = 136 +const height = 120 + +const BattlesuitSmallIcon = ({ battlesuit, ratio = 1 }: BattlesuitAvatarIconProps) => { + const targetWidth = 136 * ratio + const targetHeight = height * ratio + return ( + + + + + + + + + + + ) + return ( + + + + ) +} + +export default BattlesuitSmallIcon + +function getAttributeBgImageSrc(attrId: AttributeType) { + switch (attrId) { + case 'bio': + return `${assetsBucketBaseUrl}/raw/avataricon/AttrShengWu1.png` + case 'psy': + return `${assetsBucketBaseUrl}/raw/avataricon/AttrYiNeng1.png` + case 'mech': + return `${assetsBucketBaseUrl}/raw/avataricon/AttrJiXie1.png` + case 'qua': + return `${assetsBucketBaseUrl}/raw/avataricon/AttrLiangZi1.png` + case 'img': + return `${assetsBucketBaseUrl}/raw/avataricon/AttrXuShu1.png` + case 'none': + default: + return `${assetsBucketBaseUrl}/raw/avataricon/AttrDefault.png` + } +} + +function getBattlesuitCardIconSrc(battlesuit: BattlesuitCatalogItem) { + return `${assetsBucketBaseUrl}/raw/avatarcardicons/${ + battlesuit.id.length > 3 ? `6${battlesuit.id}` : `60${battlesuit.id}` + }.png` +} diff --git a/src/components/v2-pre/MaterialIcon.tsx b/src/components/v2-pre/MaterialIcon.tsx new file mode 100644 index 00000000..75c446cb --- /dev/null +++ b/src/components/v2-pre/MaterialIcon.tsx @@ -0,0 +1,15 @@ +import { assetsBucketBaseUrl } from '../../lib/consts' +import SquareImage from './SquareImage' + +interface MaterialIconProps { + materialId: string + size?: number +} + +const MaterialIcon = ({ materialId, size = 50 }: MaterialIconProps) => { + return ( + + ) +} + +export default MaterialIcon diff --git a/src/lib/v2-pre/data/types.ts b/src/lib/v2-pre/data/types.ts index f38772b8..9a92b286 100644 --- a/src/lib/v2-pre/data/types.ts +++ b/src/lib/v2-pre/data/types.ts @@ -275,6 +275,14 @@ export interface ErBattlesuit { abilities: ErBattlesuitAbility[] signets: ErSignet[] } + +export interface ErSupportBattlesuit { + battlesuit: string + name: string + desc: string + cd: number +} + export interface ErBattlesuitCatalogItem { battlesuit: string } @@ -291,3 +299,11 @@ export interface ErSignetGroup { name: string icon: string } + +export interface ErSigil { + id: string + name: string + desc: string + unlockHint: string + type: number +} diff --git a/src/lib/v2-pre/server/compileData/compileGodWarData.ts b/src/lib/v2-pre/server/compileData/compileGodWarData.ts index 024e720f..905a881d 100644 --- a/src/lib/v2-pre/server/compileData/compileGodWarData.ts +++ b/src/lib/v2-pre/server/compileData/compileGodWarData.ts @@ -1,15 +1,18 @@ -import { ErBattlesuit, ErBattlesuitAbility, ErSignet, ErSignetGroup } from '../../data/types' +import { ErBattlesuit, ErBattlesuitAbility, ErSigil, ErSignet, ErSupportBattlesuit } from '../../data/types' import { getRawGodWarAvatarAbilityMap } from '../raw/godWarAvatarAbility' import { getRawGodWarBuffMap } from '../raw/godWarBuff' -import { getRawGodWarBuffSuitMap } from '../raw/godWarBuffSuit' +import { getRawGodWarExtraItemMap } from '../raw/godWarExxtraItem' import { getRawGodWarMainAvatarMap } from '../raw/godWarMainAvatar' +import { getRawGodWarSupportAvatarMap } from '../raw/godWarSupportAvatar' import { getText } from './utils' export function compileGodWarData() { const rawMainAvatarMap = getRawGodWarMainAvatarMap()['1'] const rawGodWarAvatarAbilityMap = getRawGodWarAvatarAbilityMap() const rawGodWarBuffMap = getRawGodWarBuffMap() - const rawGodWarBuffSuitMap = getRawGodWarBuffSuitMap() + const rawGodWarSupportAvatarMap = getRawGodWarSupportAvatarMap()['1'] + const rawGodWarExtraItemMap = getRawGodWarExtraItemMap() + const battlesuitIdRawBuffListMap = new Map() const buffSuitBuffListMap = new Map() @@ -76,8 +79,29 @@ export function compileGodWarData() { } }) + const supportAvatarList = Object.entries(rawGodWarSupportAvatarMap).map(([id, rawData]) => { + return { + battlesuit: id, + name: getText(rawData.SkillName), + desc: getText(rawData.SkillDesc), + cd: rawData.CD + } + }) + + const sigilList = Object.entries(rawGodWarExtraItemMap).map(([id, rawData]) => { + return { + id, + name: getText(rawData.ExtraItemName), + desc: getText(rawData.ExtraItemSkill), + type: rawData.ExtraItemType, + unlockHint: getText(rawData.UnlockExtraItemHint) + } + }) + return { buffSuitBuffListMap, - mainAvatarList + mainAvatarList, + supportAvatarList, + sigilList } } diff --git a/src/lib/v2-pre/server/loadData.ts b/src/lib/v2-pre/server/loadData.ts index e5239ebd..207f64a4 100644 --- a/src/lib/v2-pre/server/loadData.ts +++ b/src/lib/v2-pre/server/loadData.ts @@ -5,7 +5,9 @@ import { BattlesuitCatalogItem, ErBattlesuit, ErBattlesuitCatalogItem, + ErSigil, ErSignet, + ErSupportBattlesuit, RootStigma, StigmataCatalogItem, StigmataSet, @@ -30,7 +32,8 @@ export const stigmataSetCatalogPath = path.join(dataDir, 'stigmata-set-catalog.y export const erBattlesuitCatalogPath = path.join(dataDir, 'er-battlesuits-catalog.yaml') export const erBattlesuitsDir = path.join(dataDir, 'er-battlesuits') export const erSignetsDir = path.join(dataDir, 'er-signets') -export const erSignetGroupsPath = path.join(dataDir, 'er-signet-groups.yaml') +export const erSupportsPath = path.join(dataDir, 'er-supports.yaml') +export const erSigilsPath = path.join(dataDir, 'er-sigils.yaml') export function loadBattlesuitCatalog(): BattlesuitCatalogItem[] { return readYamlFile(battlesuitCatalogPath) @@ -82,6 +85,14 @@ export function loadErSignets(id: string): ErSignet[] { return readYamlFile(erSignetsPath) } +export function loadErSupports(): ErSupportBattlesuit[] { + return readYamlFile(erSupportsPath) +} + +export function loadErSigils(): ErSigil[] { + return readYamlFile(erSigilsPath) +} + function readYamlFile(pathname: string) { return YAML.parse(fs.readFileSync(pathname).toString()) } diff --git a/src/lib/v2-pre/server/raw/godWarExxtraItem.ts b/src/lib/v2-pre/server/raw/godWarExxtraItem.ts new file mode 100644 index 00000000..e02d17ef --- /dev/null +++ b/src/lib/v2-pre/server/raw/godWarExxtraItem.ts @@ -0,0 +1,24 @@ +import { loadRawData } from './loadRawData' + +export function getRawGodWarExtraItemMap(): RawGodWarExtraItemMap { + return loadRawData('GodWarExtraItem.json') +} + +export type RawGodWarExtraItemMap = { + [key: string]: RawGodWarExtraItemData +} + +export interface RawGodWarExtraItemData { + GodWarID: number + ExtraItemSkillType: number + AbilityName: string + ParamList: string[] + ExtraItemStar: number + ExtraItemName: number + ExtraItemSkillOverall: number + ExtraItemIcon: string // 'SpriteOutput/Rogue/MaterialFigures/119301' + UnlockExtraItemHint: number + ExtraItemSkill: number + ExtraItemType: number + ExtraItemSuitID: number +} diff --git a/src/lib/v2-pre/server/raw/godWarSupportAvatar.ts b/src/lib/v2-pre/server/raw/godWarSupportAvatar.ts new file mode 100644 index 00000000..83861b13 --- /dev/null +++ b/src/lib/v2-pre/server/raw/godWarSupportAvatar.ts @@ -0,0 +1,23 @@ +import { loadRawData } from './loadRawData' + +export function getRawGodWarSupportAvatarMap(): RawGodWarSupportAvataMap { + return loadRawData('GodWarSupportAvatar.json') +} + +export type RawGodWarSupportAvataMap = { + [key: string]: { + [key: string]: RawGodWarSupportAvatarData + } +} + +export interface RawGodWarSupportAvatarData { + SkillFunctionName: string + AbilityName: string + ParamList: string[] + CD: number + SkillName: number + SkillDesc: number + SkillIcon: string + UnlockSupportAvatarHint: number + IsSkillChange: boolean +} diff --git a/src/pages/v2-pre/er/index.tsx b/src/pages/v2-pre/er/index.tsx index 310843e8..5fde569c 100644 --- a/src/pages/v2-pre/er/index.tsx +++ b/src/pages/v2-pre/er/index.tsx @@ -1,26 +1,36 @@ /** @jsxImportSource theme-ui */ import { Box, Heading, Flex, Link, Card } from '@theme-ui/components' import { NextPageContext } from 'next' -import { loadBattlesuitCatalog, loadErBattlesuitCatalog } from '../../../lib/v2-pre/server/loadData' +import { + loadBattlesuitCatalog, + loadErBattlesuitCatalog, + loadErSigils, + loadErSupports +} from '../../../lib/v2-pre/server/loadData' import { BattlesuitCatalogItem, ErBattlesuitCatalogItem } from '../../../lib/v2-pre/data/types' import { useMemo } from 'react' import BattlesuitCatalogItemCard from '../../../components/v2-pre/BattlesuitCatalogItemCard' import { assetsBucketBaseUrl } from '../../../lib/consts' import SquareImage from '../../../components/v2-pre/SquareImage' import { signetGroups } from '../../../lib/v2-pre/data/er' +import BattlesuitSmallIcon from '../../../components/v2-pre/BattlesuitSmallIcon' +import MaterialIcon from '../../../components/v2-pre/MaterialIcon' interface ErPageProps { erBattlesuitCatalog: ErBattlesuitCatalogItem[] battlesuitCatalog: BattlesuitCatalogItem[] + erSupports: string[] + erSigils: { id: string; name: string }[] } -const ErPage = ({ erBattlesuitCatalog, battlesuitCatalog }: ErPageProps) => { +const ErPage = ({ erBattlesuitCatalog, battlesuitCatalog, erSupports, erSigils }: ErPageProps) => { const battlesuitCatalogMap = useMemo(() => { return battlesuitCatalog.reduce((map, item) => { map.set(item.id, item) return map }, new Map()) }, [battlesuitCatalog]) + return (

Elysian Realm

@@ -59,6 +69,39 @@ const ErPage = ({ erBattlesuitCatalog, battlesuitCatalog }: ErPageProps) => { Supports + + + {erSupports.map(support => { + const battlesuit = battlesuitCatalogMap.get(support)! + return ( + + + + + + {battlesuit.fullName} + + + {/* */} + + + ) + })} + + + Sigils + + + {erSigils.map(sigil => { + return ( + + + + + + ) + })} +
) } @@ -68,8 +111,18 @@ export default ErPage export async function getStaticProps({ locale }: NextPageContext) { const erBattlesuitCatalog = loadErBattlesuitCatalog() const battlesuitCatalog = loadBattlesuitCatalog() + const erSupports = loadErSupports().map(support => { + return support.battlesuit + }) + + const erSigils = loadErSigils().map(sigil => { + return { + id: sigil.id, + name: sigil.name + } + }) return { - props: { erBattlesuitCatalog, battlesuitCatalog } + props: { erBattlesuitCatalog, battlesuitCatalog, erSupports, erSigils } } } diff --git a/src/pages/v2-pre/er/sigils.tsx b/src/pages/v2-pre/er/sigils.tsx new file mode 100644 index 00000000..393701d7 --- /dev/null +++ b/src/pages/v2-pre/er/sigils.tsx @@ -0,0 +1,53 @@ +import { NextPageContext } from 'next' +import { Box, Card, Flex, Heading } from 'theme-ui' +import MaterialIcon from '../../../components/v2-pre/MaterialIcon' +import { ErSigil } from '../../../lib/v2-pre/data/types' +import { loadErSigils } from '../../../lib/v2-pre/server/loadData' + +interface SigilsPageProps { + erSigils: ErSigil[] +} + +const SigilsPage = ({ erSigils }: SigilsPageProps) => { + return ( + + ER Sigils + + + {erSigils.map(sigil => { + return ( + + + + + + + {sigil.name} + + {sigil.desc} + + + ) + })} + + + ) +} + +export default SigilsPage + +export async function getStaticProps({ locale }: NextPageContext) { + const erSigils = loadErSigils() + + return { + props: { erSigils } + } +} diff --git a/src/pages/v2-pre/er/supports.tsx b/src/pages/v2-pre/er/supports.tsx new file mode 100644 index 00000000..3ae60459 --- /dev/null +++ b/src/pages/v2-pre/er/supports.tsx @@ -0,0 +1,63 @@ +import { NextPageContext } from 'next' +import { useMemo } from 'react' +import { Box, Card, Flex, Heading } from 'theme-ui' +import BattlesuitSmallIcon from '../../../components/v2-pre/BattlesuitSmallIcon' +import { BattlesuitCatalogItem, ErSupportBattlesuit } from '../../../lib/v2-pre/data/types' +import { loadBattlesuitCatalog, loadErSupports } from '../../../lib/v2-pre/server/loadData' + +interface SupportsPageProps { + battlesuitCatalog: BattlesuitCatalogItem[] + erSupports: ErSupportBattlesuit[] +} + +const SupportsPage = ({ + battlesuitCatalog, + + erSupports +}: SupportsPageProps) => { + const battlesuitCatalogMap = useMemo(() => { + return battlesuitCatalog.reduce((map, item) => { + map.set(item.id, item) + return map + }, new Map()) + }, [battlesuitCatalog]) + return ( + + ER Supports + + + {erSupports.map(support => { + const battlesuit = battlesuitCatalogMap.get(support.battlesuit)! + return ( + + + + + + + + {support.name} + + + (CD {support.cd}s) + + {support.desc} + + + ) + })} + + + ) +} + +export default SupportsPage + +export async function getStaticProps({ locale }: NextPageContext) { + const battlesuitCatalog = loadBattlesuitCatalog() + const erSupports = loadErSupports() + + return { + props: { battlesuitCatalog, erSupports } + } +} diff --git a/src/scripts/compileRawData.ts b/src/scripts/compileRawData.ts index c3b2984c..a0d9eeac 100644 --- a/src/scripts/compileRawData.ts +++ b/src/scripts/compileRawData.ts @@ -9,7 +9,9 @@ import { dataDir, erBattlesuitCatalogPath, erBattlesuitsDir, + erSigilsPath, erSignetsDir, + erSupportsPath, stigmataCatalogPath, stigmataDir, stigmataSetCatalogPath, @@ -133,7 +135,7 @@ function writeStigmataData() { } function writeErData() { - const { buffSuitBuffListMap, mainAvatarList } = compileGodWarData() + const { buffSuitBuffListMap, mainAvatarList, supportAvatarList, sigilList } = compileGodWarData() const erBattlesuitCatalog = mainAvatarList.map(mainAvatar => { return { battlesuit: mainAvatar.battlesuit } @@ -152,4 +154,7 @@ function writeErData() { const erSignetsPath = path.join(erSignetsDir, `${buffSuit}.yaml`) fs.writeFileSync(erSignetsPath, YAML.stringify(list)) } + + fs.writeFileSync(erSupportsPath, YAML.stringify(supportAvatarList)) + fs.writeFileSync(erSigilsPath, YAML.stringify(sigilList)) }