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))
}