Update 6.5 data

This commit is contained in:
Sakura Knoll
2023-04-10 19:10:40 +09:00 Unverified
parent f6011456e4
commit d7733a0ff6
19 changed files with 2636 additions and 4127 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+58 -4
View File
@@ -1,3 +1,57 @@
- id: aladdin-top
version: '6.5'
name: 'Aladdin (T)'
krName: '알라딘 (상)'
type: top
rarity: 5
hp: 393
atk: 114
def: 50
crt: 0
set: aladdin
skill:
name: Street Rogue
krName: 거리의 도적
description: |-
Ultimate deals 20.0% more Physical DMG. When Ultimate deals Bleed DMG, it deals 60.0% more Total DMG.
krDescription: |-
물리 대미지가 20.0% 증가한다. 필살기가 출혈 대미지를 가할 시 가하는 모든 대미지가 60.0% 증가한다.
- id: aladdin-mid
version: '6.5'
name: 'Aladdin (M)'
krName: '알라딘 (중)'
type: mid
rarity: 5
hp: 490
atk: 0
def: 239
crt: 7
set: aladdin
skill:
name: Wishing Lamp
krName: 요술램프
description: |-
The team deals 20.0% more Physical DMG to bleeding enemies. The host's attacks inflict 25.0% more Bleed Trauma.
krDescription: |-
파티원이 출혈 상태의 적에게 가하는 물리 대미지가 20.0% 증가하고, 캐릭터의 공격이 누적하는 출혈 게이지가 25.0% 증가한다.
- id: aladdin-bot
version: '6.5'
name: 'Aladdin (B)'
krName: '알라딘 (하)'
type: bot
rarity: 5
hp: 434
atk: 61
def: 66
crt: 9
set: aladdin
skill:
name: Magic Carpet Ride
krName: 마법의 양탄자
description: |-
Increases Total DMG by 15.0%. All enemies take 20.0% more Bleed DMG.
krDescription: |-
모든 대미지가 15.0% 증가하고, 모든 적이 받는 출혈 대미지가 20.0% 증가한다.
- id: kiana-evening-invite-bot - id: kiana-evening-invite-bot
version: '6.4' version: '6.4'
name: 'Kiana: Evening Invite (B)' name: 'Kiana: Evening Invite (B)'
@@ -732,11 +786,11 @@
krName: 왕자의 복수 krName: 왕자의 복수
description: description:
Total DMG increases by 20.0%. Triggering Ultimate Evasion Skill or Total DMG increases by 20.0%. Triggering Ultimate Evasion Skill or
Retaliation Skill enhances host and boosts Total DMG by 20.0% for 15s. Retaliation Skill increases Total DMG by 20.0% for 15s.
Triggering it again resets the duration. Triggering it again resets the duration.
krDescription: krDescription: |-
'모든 대미지가 20.0% 증가한다. 극한 회피 또는 방어 반격 스킬 발동 시, 캐릭터는 강화를 획득해 모든 대미지가 모든 대미지가 20.0% 증가한다. 극한 회피 스킬 또는 방어 반격 스킬 발동 시, 캐릭터는 강화를 획득해 모든 대미지가
추가로 20.0% 증가한다. 지속 시간: 15초, 중복 발동 시 지속 시간 갱신다.' 추가로 20.0% 증가한다. 지속 시간: 15초, 중복 발동 시 지속 시간 갱신다.
- id: bianka-theatre-bot - id: bianka-theatre-bot
version: '5.5' version: '5.5'
name: 'Bianka: Theatre (B)' name: 'Bianka: Theatre (B)'
+20
View File
@@ -1,5 +1,25 @@
- previousVersion: '6.4'
version: '6.5'
name: 'Hot Sands Escapade'
krName: '뜨거운 모래의 대모험'
duration:
- 2023-04-06
- 2023-05-18
newBattlesuits:
- vq
newWeapons:
- twirling-glaze-lustrous-bloom
- twirling-glaze
newStigmataSets:
- aladdin
newFoundryStigmataSets: []
description: ''
superstring: []
ma: []
supplyEvents: []
- previousVersion: '6.3' - previousVersion: '6.3'
version: '6.4' version: '6.4'
nextVersion: '6.5'
name: 'From Finality, the Origin' name: 'From Finality, the Origin'
krName: '종언에서 기원으로' krName: '종언에서 기원으로'
duration: duration:
+620 -1114
View File
File diff suppressed because it is too large Load Diff
+36 -32
View File
@@ -1,64 +1,68 @@
export const erVersions = [ export const erVersions = [
{ {
version: '5.0', version: '5.0',
battlesuits: ['hfs', 'hot', 'hor', 'sn', 'aka', 'ri', 'vg', 'pv'], battlesuits: ['hfs', 'hot', 'hor', 'sn', 'aka', 'ri', 'vg', 'pv']
}, },
{ {
version: '5.1', version: '5.1',
battlesuits: ['mpe', 'bke', 'lk', 'stfu'], battlesuits: ['mpe', 'bke', 'lk', 'stfu']
}, },
{ {
version: '5.2', version: '5.2',
battlesuits: ['io', 'ma', 'nyx'], battlesuits: ['io', 'ma', 'nyx']
}, },
{ {
version: '5.3', version: '5.3',
battlesuits: ['sns', 'tp', 'hos'], battlesuits: ['sns', 'tp', 'hos']
}, },
{ {
version: '5.4', version: '5.4',
battlesuits: ['sw', 'da'], battlesuits: ['sw', 'da']
}, },
{ {
version: '5.5', version: '5.5',
battlesuits: ['pe', 'spa'], battlesuits: ['pe', 'spa']
}, },
{ {
version: '5.6', version: '5.6',
battlesuits: ['rc', 'fr'], battlesuits: ['rc', 'fr']
}, },
{ {
version: '5.7', version: '5.7',
battlesuits: ['aponia', 'eden'], battlesuits: ['aponia', 'eden']
}, },
{ {
version: '5.8', version: '5.8',
battlesuits: ['griseo', 'ft'], battlesuits: ['griseo', 'ft']
}, },
{ {
version: '5.9', version: '5.9',
battlesuits: ['vill-v', 'meme'], battlesuits: ['vill-v', 'meme']
}, },
{ {
version: '6.0', version: '6.0',
battlesuits: ['hoh', 'hov'], battlesuits: ['hoh', 'hov']
}, },
{ {
version: '6.1', version: '6.1',
battlesuits: ['jk'], battlesuits: ['jk']
}, },
{ {
version: '6.2', version: '6.2',
battlesuits: ['cn', 'vke'], battlesuits: ['cn', 'vke']
}, },
{ {
version: '6.3', version: '6.3',
battlesuits: ['hotr', '6s'], battlesuits: ['hotr', '6s']
}, },
{ {
version: '6.4', version: '6.4',
battlesuits: ['hof', 'hoo'], battlesuits: ['hof', 'hoo']
}, },
{
version: '6.4',
battlesuits: ['vq', 'sk']
}
].reverse() ].reverse()
export const erBattlesuits = erVersions.reduce<string[]>((list, version) => { export const erBattlesuits = erVersions.reduce<string[]>((list, version) => {
@@ -80,7 +84,7 @@ export const supportBattlesuitIds = [
'rc', 'rc',
'sa', 'sa',
'sn', 'sn',
'fr', 'fr'
] ]
export const remembranceSigilIds = [ export const remembranceSigilIds = [
@@ -128,7 +132,7 @@ export const remembranceSigilIds = [
'the-lonely-moon', 'the-lonely-moon',
'awakening', 'awakening',
'key-to-the-deep', 'key-to-the-deep',
'thorny-crown', 'thorny-crown'
] ]
export function isGeneralSigil(sigilId: string) { export function isGeneralSigil(sigilId: string) {
@@ -177,9 +181,9 @@ export const signetGroups = [
krName: '엘리시아', krName: '엘리시아',
altName: '■■', altName: '■■',
krAltName: '■■', krAltName: '■■',
setIds: erBattlesuits.map((battlesuitId) => { setIds: erBattlesuits.map(battlesuitId => {
return `elysia-${battlesuitId}` return `elysia-${battlesuitId}`
}), })
}, },
{ {
id: 'eden', id: 'eden',
@@ -187,7 +191,7 @@ export const signetGroups = [
krName: '에덴', krName: '에덴',
altName: 'Gold', altName: 'Gold',
krAltName: '황금', krAltName: '황금',
setIds: ['eden-normal', 'eden-nexus-1', 'eden-nexus-2'], setIds: ['eden-normal', 'eden-nexus-1', 'eden-nexus-2']
}, },
{ {
id: 'hua', id: 'hua',
@@ -195,7 +199,7 @@ export const signetGroups = [
krName: '화', krName: '화',
altName: 'Vicissitude', altName: 'Vicissitude',
krAltName: '부생', krAltName: '부생',
setIds: ['hua-normal', 'hua-nexus-1', 'hua-nexus-2'], setIds: ['hua-normal', 'hua-nexus-1', 'hua-nexus-2']
}, },
{ {
id: 'kalpas', id: 'kalpas',
@@ -203,7 +207,7 @@ export const signetGroups = [
krName: '칼파스', krName: '칼파스',
altName: 'Decimation', altName: 'Decimation',
krAltName: '오멸', krAltName: '오멸',
setIds: ['kalpas-normal', 'kalpas-nexus-1', 'kalpas-nexus-2'], setIds: ['kalpas-normal', 'kalpas-nexus-1', 'kalpas-nexus-2']
}, },
{ {
id: 'kevin', id: 'kevin',
@@ -211,7 +215,7 @@ export const signetGroups = [
krName: '케빈', krName: '케빈',
altName: 'Deliverance', altName: 'Deliverance',
krAltName: '구원', krAltName: '구원',
setIds: ['kevin-normal', 'kevin-nexus-1', 'kevin-nexus-2'], setIds: ['kevin-normal', 'kevin-nexus-1', 'kevin-nexus-2']
}, },
{ {
id: 'mobius', id: 'mobius',
@@ -219,7 +223,7 @@ export const signetGroups = [
krName: '뫼비우스', krName: '뫼비우스',
altName: 'Infinity', altName: 'Infinity',
krAltName: '무한', krAltName: '무한',
setIds: ['mobius-normal', 'mobius-nexus-1', 'mobius-nexus-2'], setIds: ['mobius-normal', 'mobius-nexus-1', 'mobius-nexus-2']
}, },
{ {
id: 'sakura', id: 'sakura',
@@ -227,7 +231,7 @@ export const signetGroups = [
krName: '사쿠라', krName: '사쿠라',
altName: 'Setsuna', altName: 'Setsuna',
krAltName: '찰나', krAltName: '찰나',
setIds: ['sakura-normal', 'sakura-nexus-1', 'sakura-nexus-2'], setIds: ['sakura-normal', 'sakura-nexus-1', 'sakura-nexus-2']
}, },
{ {
id: 'su', id: 'su',
@@ -235,7 +239,7 @@ export const signetGroups = [
krName: '수', krName: '수',
altName: 'Bodhi', altName: 'Bodhi',
krAltName: '천혜', krAltName: '천혜',
setIds: ['su-normal', 'su-nexus-1', 'su-nexus-2'], setIds: ['su-normal', 'su-nexus-1', 'su-nexus-2']
}, },
{ {
id: 'pardofelis', id: 'pardofelis',
@@ -243,7 +247,7 @@ export const signetGroups = [
krName: '파르도 필리스', krName: '파르도 필리스',
altName: 'Reverie', altName: 'Reverie',
krAltName: '환몽', krAltName: '환몽',
setIds: ['pardofelis-normal', 'pardofelis-nexus-1'], setIds: ['pardofelis-normal', 'pardofelis-nexus-1']
}, },
{ {
id: 'vill-v', id: 'vill-v',
@@ -251,7 +255,7 @@ export const signetGroups = [
krName: '빌-브이', krName: '빌-브이',
altName: 'Helix', altName: 'Helix',
krAltName: '나선', krAltName: '나선',
setIds: ['vill-v-normal', 'vill-v-nexus-1'], setIds: ['vill-v-normal', 'vill-v-nexus-1']
}, },
{ {
id: 'aponia', id: 'aponia',
@@ -259,7 +263,7 @@ export const signetGroups = [
krName: '아포니아', krName: '아포니아',
altName: 'Discipline', altName: 'Discipline',
krAltName: '계율', krAltName: '계율',
setIds: ['aponia-normal', 'aponia-nexus-1'], setIds: ['aponia-normal', 'aponia-nexus-1']
}, },
{ {
id: 'kosma', id: 'kosma',
@@ -267,7 +271,7 @@ export const signetGroups = [
krName: '코스마', krName: '코스마',
altName: 'Daybreak', altName: 'Daybreak',
krAltName: '욱광', krAltName: '욱광',
setIds: ['kosma-normal', 'kosma-nexus-1'], setIds: ['kosma-normal', 'kosma-nexus-1']
}, },
{ {
id: 'griseo', id: 'griseo',
@@ -275,8 +279,8 @@ export const signetGroups = [
krName: '그리세오', krName: '그리세오',
altName: 'Stars', altName: 'Stars',
krAltName: '번성', krAltName: '번성',
setIds: ['griseo-normal', 'griseo-nexus-1'], setIds: ['griseo-normal', 'griseo-nexus-1']
}, }
] ]
export function parseSignetId(id: string) { export function parseSignetId(id: string) {
@@ -1,13 +1,5 @@
/** @jsxImportSource theme-ui */ /** @jsxImportSource theme-ui */
import { import { Box, Card, Flex, Heading, Paragraph, Text, Image } from '@theme-ui/components'
Box,
Card,
Flex,
Heading,
Paragraph,
Text,
Image,
} from '@theme-ui/components'
import { NextPageContext } from 'next' import { NextPageContext } from 'next'
import React from 'react' import React from 'react'
import BattlesuitFeatureLabel from '../../../components/atoms/BattlesuitFeatureLabel' import BattlesuitFeatureLabel from '../../../components/atoms/BattlesuitFeatureLabel'
@@ -22,13 +14,10 @@ import {
battlesuitFeatures, battlesuitFeatures,
BattlesuitSkillGroup, BattlesuitSkillGroup,
battlesuitTypes, battlesuitTypes,
valkyries, valkyries
} from '../../../lib/honkai3rd/battlesuits' } from '../../../lib/honkai3rd/battlesuits'
import { generateI18NPaths, getI18NProps } from '../../../server/i18n' import { generateI18NPaths, getI18NProps } from '../../../server/i18n'
import { import { getBattlesuitById, listBattlesuits } from '../../../server/data/honkai3rd/battlesuits'
getBattlesuitById,
listBattlesuits,
} from '../../../server/data/honkai3rd/battlesuits'
import { translate, useTranslation } from '../../../lib/i18n' import { translate, useTranslation } from '../../../lib/i18n'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import Head from '../../../components/atoms/Head' import Head from '../../../components/atoms/Head'
@@ -51,44 +40,31 @@ interface BattlesuitShowPageProps {
stigmataMap: StigmataObjectMap stigmataMap: StigmataObjectMap
} }
const BattlesuitShowPage = ({ const BattlesuitShowPage = ({ battlesuit, weaponMap, stigmataMap }: BattlesuitShowPageProps) => {
battlesuit,
weaponMap,
stigmataMap,
}: BattlesuitShowPageProps) => {
const { t } = useTranslation() const { t } = useTranslation()
const { locale } = useRouter() const { locale } = useRouter()
const { label: valkyrieLabel, krLabel } = valkyries.find( const { label: valkyrieLabel, krLabel } = valkyries.find(aValkyrie => aValkyrie.value === battlesuit.valkyrie) || {
(aValkyrie) => aValkyrie.value === battlesuit.valkyrie label: battlesuit.valkyrie,
) || { label: battlesuit.valkyrie, krLabel: battlesuit.valkyrie } krLabel: battlesuit.valkyrie
}
const valkyrieName = translate(locale, { 'ko-KR': krLabel }, valkyrieLabel) const valkyrieName = translate(locale, { 'ko-KR': krLabel }, valkyrieLabel)
const battlesuitType = battlesuitTypes.find( const battlesuitType = battlesuitTypes.find(aType => aType.value === battlesuit.type)
(aType) => aType.value === battlesuit.type
)
const battlesuitTypeLabel = battlesuitType const battlesuitTypeLabel = battlesuitType
? translate( ? translate(locale, { 'ko-KR': battlesuitType.krLabel }, battlesuitType.label)
locale,
{ 'ko-KR': battlesuitType.krLabel },
battlesuitType.label
)
: capitalize(battlesuit.type) : capitalize(battlesuit.type)
return ( return (
<Honkai3rdLayout> <Honkai3rdLayout>
<Head <Head
title={`${battlesuit.name} - ${t('common.honkai-3rd')} - ${t( title={`${battlesuit.name} - ${t('common.honkai-3rd')} - ${t('common.abyss-lab')}`}
'common.abyss-lab'
)}`}
description={`${t('common.honkai-3rd')} ${t( description={`${t('common.honkai-3rd')} ${t(
'battlesuit-show.battlesuit' 'battlesuit-show.battlesuit'
)} / ${valkyrieName} / ${battlesuitTypeLabel} / ${battlesuit.features )} / ${valkyrieName} / ${battlesuitTypeLabel} / ${battlesuit.features
.map((feature) => { .map(feature => {
const featureData = battlesuitFeatures.find( const featureData = battlesuitFeatures.find(aFeature => aFeature.value === feature)
(aFeature) => aFeature.value === feature
)
if (featureData == null) { if (featureData == null) {
return feature return feature
} }
@@ -107,16 +83,16 @@ const BattlesuitShowPage = ({
{ href: '/honkai3rd', label: t('common.honkai-3rd') }, { href: '/honkai3rd', label: t('common.honkai-3rd') },
{ {
href: '/honkai3rd/battlesuits', href: '/honkai3rd/battlesuits',
label: t('common.battlesuits'), label: t('common.battlesuits')
}, },
{ {
href: `/honkai3rd/battlesuits/${battlesuit.id}`, href: `/honkai3rd/battlesuits/${battlesuit.id}`,
label: battlesuit.name, label: battlesuit.name
}, }
]} ]}
/> />
<Heading as='h1'>{battlesuit.name}</Heading> <Heading as="h1">{battlesuit.name}</Heading>
<Box mb={3}> <Box mb={3}>
<Box <Box
@@ -124,7 +100,7 @@ const BattlesuitShowPage = ({
position: 'relative', position: 'relative',
overflow: 'hidden', overflow: 'hidden',
width: '100%', width: '100%',
maxWidth: [300, 400], maxWidth: [300, 400]
}} }}
> >
<Image <Image
@@ -138,7 +114,7 @@ const BattlesuitShowPage = ({
<Card <Card
sx={{ sx={{
overflow: 'hidden', overflow: 'hidden'
}} }}
mb={3} mb={3}
> >
@@ -146,7 +122,7 @@ const BattlesuitShowPage = ({
<PageLink <PageLink
href={{ href={{
pathname: '/honkai3rd/battlesuits', pathname: '/honkai3rd/battlesuits',
query: { valkyrie: battlesuit.valkyrie }, query: { valkyrie: battlesuit.valkyrie }
}} }}
> >
<ValkyrieLabel valkyrie={battlesuit.valkyrie} /> <ValkyrieLabel valkyrie={battlesuit.valkyrie} />
@@ -156,20 +132,20 @@ const BattlesuitShowPage = ({
<PageLink <PageLink
href={{ href={{
pathname: '/honkai3rd/battlesuits', pathname: '/honkai3rd/battlesuits',
query: { valkyrie: battlesuit.type }, query: { valkyrie: battlesuit.type }
}} }}
> >
<TypeLabel type={battlesuit.type} /> <TypeLabel type={battlesuit.type} />
</PageLink> </PageLink>
</Box> </Box>
<Flex p={2} sx={{ flexWrap: 'wrap', rowGap: 1 }}> <Flex p={2} sx={{ flexWrap: 'wrap', rowGap: 1 }}>
{battlesuit.features.map((feature) => { {battlesuit.features.map(feature => {
return ( return (
<Box mr={2} key={feature}> <Box mr={2} key={feature}>
<PageLink <PageLink
href={{ href={{
pathname: '/honkai3rd/battlesuits', pathname: '/honkai3rd/battlesuits',
query: { feature: feature }, query: { feature: feature }
}} }}
> >
<BattlesuitFeatureLabel feature={feature} /> <BattlesuitFeatureLabel feature={feature} />
@@ -185,44 +161,30 @@ const BattlesuitShowPage = ({
sx={{ sx={{
mb: 3, mb: 3,
p: 2, p: 2,
overflow: 'hidden', overflow: 'hidden'
}} }}
> >
{battlesuit.equipment.map((equipmentItem) => { {battlesuit.equipment.map(equipmentItem => {
return ( return (
<Box key={equipmentItem.type}> <Box key={equipmentItem.type}>
<Heading <Heading
as='h3' as="h3"
sx={{ sx={{
mb: 1, mb: 1
}} }}
> >
{t(`battlesuit-show.equipmentTypes.${equipmentItem.type}`)} {t(`battlesuit-show.equipmentTypes.${equipmentItem.type}`)}
</Heading> </Heading>
<Flex sx={{ mx: -1 }}> <Flex sx={{ mx: -1 }}>
{equipmentItem.weapon != null && ( {equipmentItem.weapon != null && <WeaponCard size="sm" weapon={weaponMap[equipmentItem.weapon]} />}
<WeaponCard
size='sm'
weapon={weaponMap[equipmentItem.weapon]}
/>
)}
{equipmentItem.stigmataTop != null && ( {equipmentItem.stigmataTop != null && (
<StigmataCard <StigmataCard size="sm" stigmata={stigmataMap[equipmentItem.stigmataTop]} />
size='sm'
stigmata={stigmataMap[equipmentItem.stigmataTop]}
/>
)} )}
{equipmentItem.stigmataMid != null && ( {equipmentItem.stigmataMid != null && (
<StigmataCard <StigmataCard size="sm" stigmata={stigmataMap[equipmentItem.stigmataMid]} />
size='sm'
stigmata={stigmataMap[equipmentItem.stigmataMid]}
/>
)} )}
{equipmentItem.stigmataBot != null && ( {equipmentItem.stigmataBot != null && (
<StigmataCard <StigmataCard size="sm" stigmata={stigmataMap[equipmentItem.stigmataBot]} />
size='sm'
stigmata={stigmataMap[equipmentItem.stigmataBot]}
/>
)} )}
</Flex> </Flex>
</Box> </Box>
@@ -231,41 +193,20 @@ const BattlesuitShowPage = ({
</Card> </Card>
)} )}
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.leader')} skillGroup={battlesuit.leader} />
heading={t('battlesuit-show.leader')}
skillGroup={battlesuit.leader}
/>
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.passive')} skillGroup={battlesuit.passive} />
heading={t('battlesuit-show.passive')}
skillGroup={battlesuit.passive}
/>
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.evasion')} skillGroup={battlesuit.evasion} />
heading={t('battlesuit-show.evasion')}
skillGroup={battlesuit.evasion}
/>
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.special-attack')} skillGroup={battlesuit.special} />
heading={t('battlesuit-show.special-attack')}
skillGroup={battlesuit.special}
/>
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.ultimate')} skillGroup={battlesuit.ultimate} />
heading={t('battlesuit-show.ultimate')}
skillGroup={battlesuit.ultimate}
/>
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.basic-attack')} skillGroup={battlesuit.basic} />
heading={t('battlesuit-show.basic-attack')}
skillGroup={battlesuit.basic}
/>
{battlesuit.sp != null && ( {battlesuit.sp != null && (
<BattlesuitSkillGroupCard <BattlesuitSkillGroupCard heading={t('battlesuit-show.sp-skill')} skillGroup={battlesuit.sp} />
heading={t('battlesuit-show.sp-skill')}
skillGroup={battlesuit.sp}
/>
)} )}
</Box> </Box>
</Honkai3rdLayout> </Honkai3rdLayout>
@@ -274,10 +215,7 @@ const BattlesuitShowPage = ({
export default BattlesuitShowPage export default BattlesuitShowPage
export async function getStaticProps({ export async function getStaticProps({ params, locale }: NextPageContext & { params: { battlesuitId: string } }) {
params,
locale,
}: NextPageContext & { params: { battlesuitId: string } }) {
const battlesuit = getBattlesuitById(params.battlesuitId, locale)! const battlesuit = getBattlesuitById(params.battlesuitId, locale)!
const { weaponIds, stigmataIds } = (battlesuit.equipment || []).reduce<{ const { weaponIds, stigmataIds } = (battlesuit.equipment || []).reduce<{
weaponIds: string[] weaponIds: string[]
@@ -285,11 +223,7 @@ export async function getStaticProps({
}>( }>(
(acc, equipmentItem) => { (acc, equipmentItem) => {
acc.weaponIds.push(equipmentItem.weapon) acc.weaponIds.push(equipmentItem.weapon)
acc.stigmataIds.push( acc.stigmataIds.push(equipmentItem.stigmataTop, equipmentItem.stigmataMid, equipmentItem.stigmataBot)
equipmentItem.stigmataTop,
equipmentItem.stigmataMid,
equipmentItem.stigmataBot
)
return acc return acc
}, },
{ weaponIds: [], stigmataIds: [] } { weaponIds: [], stigmataIds: [] }
@@ -303,21 +237,21 @@ export async function getStaticProps({
battlesuit, battlesuit,
weaponMap, weaponMap,
stigmataMap, stigmataMap,
...(await getI18NProps(locale)), ...(await getI18NProps(locale))
}, }
} }
} }
export async function getStaticPaths() { export async function getStaticPaths() {
return { return {
paths: generateI18NPaths( paths: generateI18NPaths(
listBattlesuits().map((battlesuit) => { listBattlesuits().map(battlesuit => {
return { return {
params: { battlesuitId: battlesuit.id }, params: { battlesuitId: battlesuit.id }
} }
}) })
), ),
fallback: false, fallback: false
} }
} }
@@ -326,19 +260,16 @@ interface BattlesuitSkillGroupCardProps {
skillGroup: BattlesuitSkillGroup skillGroup: BattlesuitSkillGroup
} }
const BattlesuitSkillGroupCard = ({ const BattlesuitSkillGroupCard = ({ heading, skillGroup }: BattlesuitSkillGroupCardProps) => {
heading,
skillGroup,
}: BattlesuitSkillGroupCardProps) => {
return ( return (
<Card mb={3}> <Card mb={3}>
<Box <Box
sx={{ sx={{
p: 2, p: 2,
borderBottom: 'default', borderBottom: 'default'
}} }}
> >
<Heading as='h2' mb={1}> <Heading as="h2" mb={1}>
{skillGroup.core.name} {skillGroup.core.name}
</Heading> </Heading>
<SecondaryLabel>{heading}</SecondaryLabel> <SecondaryLabel>{heading}</SecondaryLabel>
@@ -348,26 +279,19 @@ const BattlesuitSkillGroupCard = ({
{skillGroup.core.description} {skillGroup.core.description}
</Paragraph> </Paragraph>
{skillGroup.subskills.map((subskill) => { {skillGroup.subskills.map(subskill => {
return ( return (
<React.Fragment key={subskill.name}> <React.Fragment key={subskill.name}>
<Heading as='h3' p={2} m={0} sx={{ borderBottom: 'default' }}> <Heading as="h3" p={2} m={0} sx={{ borderBottom: 'default' }}>
<Flex sx={{ alignItems: 'center' }}> <Flex sx={{ alignItems: 'center' }}>
<Text>{subskill.name}</Text> <Text>{subskill.name}</Text>
{subskill.requiredRank != null ? ( {subskill.requiredRank != null ? (
/^[0-9]/.test(subskill.requiredRank) ? ( /^[0-9]/.test(subskill.requiredRank) ? (
<Box <Box ml={2} sx={{ height: 30, lineHeight: '30px', fontSize: 2 }}>
ml={2}
sx={{ height: 30, lineHeight: '30px', fontSize: 2 }}
>
{subskill.requiredRank.slice(0, 1)} {subskill.requiredRank.slice(0, 1)}
</Box> </Box>
) : ( ) : (
<BattlesuitRankIcon <BattlesuitRankIcon rank={subskill.requiredRank} size={30} ml={2} />
rank={subskill.requiredRank}
size={30}
ml={2}
/>
) )
) : ( ) : (
<Box sx={{ height: 30 }} /> <Box sx={{ height: 30 }} />
@@ -380,7 +304,7 @@ const BattlesuitSkillGroupCard = ({
sx={{ sx={{
whiteSpace: 'pre-wrap', whiteSpace: 'pre-wrap',
borderBottom: 'default', borderBottom: 'default',
'&:last-child': { borderBottom: 'none' }, '&:last-child': { borderBottom: 'none' }
}} }}
> >
{subskill.description} {subskill.description}
@@ -14,10 +14,7 @@ import { getWeaponMapByIds } from '../../../../server/data/honkai3rd/weapons'
import { StigmataData } from '../../../../lib/honkai3rd/stigmata' import { StigmataData } from '../../../../lib/honkai3rd/stigmata'
import { getStigmataMapByIds } from '../../../../server/data/honkai3rd/stigmata' import { getStigmataMapByIds } from '../../../../server/data/honkai3rd/stigmata'
import { getSignetGroupById } from '../../../../server/data/honkai3rd/elysianRealm' import { getSignetGroupById } from '../../../../server/data/honkai3rd/elysianRealm'
import { import { erBattlesuits, SignetSet } from '../../../../lib/honkai3rd/elysianRealm'
erBattlesuits,
SignetSet,
} from '../../../../lib/honkai3rd/elysianRealm'
import SignetCard from '../../../../components/molecules/SignetCard' import SignetCard from '../../../../components/molecules/SignetCard'
type WeaponObjectMap = { [key: string]: WeaponData } type WeaponObjectMap = { [key: string]: WeaponData }
@@ -30,22 +27,15 @@ interface BattlesuitShowPageProps {
signetSet: SignetSet signetSet: SignetSet
} }
const BattlesuitShowPage = ({ const BattlesuitShowPage = ({ battlesuit, weaponMap, stigmataMap, signetSet }: BattlesuitShowPageProps) => {
battlesuit,
weaponMap,
stigmataMap,
signetSet,
}: BattlesuitShowPageProps) => {
const { t } = useTranslation() const { t } = useTranslation()
return ( return (
<Honkai3rdLayout> <Honkai3rdLayout>
<Head <Head
title={`${battlesuit.name} (${t('common.elysian-realm')}) - ${t( title={`${battlesuit.name} (${t('common.elysian-realm')}) - ${t('common.honkai-3rd')} - ${t(
'common.honkai-3rd' 'common.abyss-lab'
)} - ${t('common.abyss-lab')}`} )}`}
description={`${t('common.honkai-3rd')} ${t( description={`${t('common.honkai-3rd')} ${t('common.elysian-realm')} ${t('battlesuit-show.battlesuit')}`}
'common.elysian-realm'
)} ${t('battlesuit-show.battlesuit')}`}
canonicalHref={`/honkai3rd/elysian-realm/battlesuits/${battlesuit.id}`} canonicalHref={`/honkai3rd/elysian-realm/battlesuits/${battlesuit.id}`}
/> />
@@ -55,16 +45,16 @@ const BattlesuitShowPage = ({
{ href: '/honkai3rd', label: t('common.honkai-3rd') }, { href: '/honkai3rd', label: t('common.honkai-3rd') },
{ {
href: '/honkai3rd/elysian-realm', href: '/honkai3rd/elysian-realm',
label: t('common.elysian-realm'), label: t('common.elysian-realm')
}, },
{ {
href: `/honkai3rd/elysian-realm/battlesuits/${battlesuit.id}`, href: `/honkai3rd/elysian-realm/battlesuits/${battlesuit.id}`,
label: battlesuit.name, label: battlesuit.name
}, }
]} ]}
/> />
<Heading as='h1'>{battlesuit.name}</Heading> <Heading as="h1">{battlesuit.name}</Heading>
<Box mb={3}> <Box mb={3}>
<Box <Box
@@ -72,7 +62,7 @@ const BattlesuitShowPage = ({
position: 'relative', position: 'relative',
overflow: 'hidden', overflow: 'hidden',
width: '100%', width: '100%',
maxWidth: [300, 400], maxWidth: [300, 400]
}} }}
> >
<Image <Image
@@ -84,10 +74,10 @@ const BattlesuitShowPage = ({
</Box> </Box>
</Box> </Box>
<Heading as='h2'>{t('elysian-realm.exclusive-signets')}</Heading> <Heading as="h2">{t('elysian-realm.exclusive-signets')}</Heading>
<Box> <Box>
{signetSet.signets.map((signet) => { {signetSet.signets.map(signet => {
return <SignetCard key={signet.id} signet={signet} /> return <SignetCard key={signet.id} signet={signet} />
})} })}
</Box> </Box>
@@ -98,10 +88,7 @@ const BattlesuitShowPage = ({
export default BattlesuitShowPage export default BattlesuitShowPage
export async function getStaticProps({ export async function getStaticProps({ params, locale }: NextPageContext & { params: { battlesuitId: string } }) {
params,
locale,
}: NextPageContext & { params: { battlesuitId: string } }) {
try { try {
const battlesuit = getBattlesuitById(params.battlesuitId, locale)! const battlesuit = getBattlesuitById(params.battlesuitId, locale)!
const { weaponIds, stigmataIds } = (battlesuit.equipment || []).reduce<{ const { weaponIds, stigmataIds } = (battlesuit.equipment || []).reduce<{
@@ -110,11 +97,7 @@ export async function getStaticProps({
}>( }>(
(acc, equipmentItem) => { (acc, equipmentItem) => {
acc.weaponIds.push(equipmentItem.weapon) acc.weaponIds.push(equipmentItem.weapon)
acc.stigmataIds.push( acc.stigmataIds.push(equipmentItem.stigmataTop, equipmentItem.stigmataMid, equipmentItem.stigmataBot)
equipmentItem.stigmataTop,
equipmentItem.stigmataMid,
equipmentItem.stigmataBot
)
return acc return acc
}, },
{ weaponIds: [], stigmataIds: [] } { weaponIds: [], stigmataIds: [] }
@@ -124,7 +107,7 @@ export async function getStaticProps({
const stigmataMap = getStigmataMapByIds(stigmataIds) const stigmataMap = getStigmataMapByIds(stigmataIds)
const signetGroup = getSignetGroupById('elysia', locale) const signetGroup = getSignetGroupById('elysia', locale)
const signetSet = signetGroup.sets.find((set) => { const signetSet = signetGroup.sets.find(set => {
return set.id === `elysia-${params.battlesuitId}` return set.id === `elysia-${params.battlesuitId}`
}) })
@@ -134,8 +117,8 @@ export async function getStaticProps({
weaponMap, weaponMap,
stigmataMap, stigmataMap,
signetSet, signetSet,
...(await getI18NProps(locale)), ...(await getI18NProps(locale))
}, }
} }
} catch (error) { } catch (error) {
console.log(error) console.log(error)
@@ -145,12 +128,12 @@ export async function getStaticProps({
export async function getStaticPaths() { export async function getStaticPaths() {
return { return {
paths: generateI18NPaths( paths: generateI18NPaths(
erBattlesuits.map((battlesuitId) => { erBattlesuits.map(battlesuitId => {
return { return {
params: { battlesuitId: battlesuitId }, params: { battlesuitId: battlesuitId }
} }
}) })
), ),
fallback: false, fallback: false
} }
} }