+ {weapon.name}
+
+
+
+
+
+
+ {weapon.description}
+
+
+ {getWeaponTypeLabel(weapon.type)}
+
+
+ ATK : {Math.floor(weapon.attackBase + weapon.attackAdd * (weapon.maxLv - 1))} / CRT :{' '}
+ {Math.floor(weapon.criticalBase + weapon.criticalAdd * (weapon.maxLv - 1))} (at Max Lv {weapon.maxLv})
+
+
+
+ Skills
+
+ {weapon.skills.map(skill => {
+ return (
+
+
+
+ {skill.name}
+
+
+
+
+ {formatSubSkillInfo({
+ info: skill.info,
+ maxLv: weapon.maxLv,
+ paramBase1: skill.param1,
+ paramBase2: skill.param2,
+ paramBase3: skill.param3,
+ paramAdd1: skill.param1Add,
+ paramAdd2: skill.param2Add,
+ paramAdd3: skill.param3Add
+ })}
+
+
+
+ )
+ })}
+
+ {/* {JSON.stringify(weapon, null, 2)} */}
+
+ )
+}
+
+export default WeaponShowPage
+
+export async function getStaticProps({ locale, params }: NextPageContext & { params: { weaponId: string } }) {
+ const rootWeapon = loadWeaponData(params.weaponId)
+
+ return {
+ props: { rootWeapon }
+ }
+}
+
+export async function getStaticPaths() {
+ const weaponCatalog = loadWeaponCatalog()
+
+ return {
+ paths: weaponCatalog.map(catalogItem => {
+ return {
+ params: { weaponId: catalogItem.id }
+ }
+ }),
+ fallback: false
+ }
+}
+
+interface SkillTagBoxProps {
+ tag: SkillTagItem
+}
+
+const SkillTagItem = ({ tag }: SkillTagBoxProps) => {
+ return