hensei-web/src/lib/utils/modificationFormatters.ts

109 lines
2.6 KiB
TypeScript

import type { SimpleAxSkill } from '$lib/types/api/entities'
import { getRingStat, getEarringStat, getElementalizedEarringStat } from './masteryUtils'
import { isWeaponSeriesRef, type WeaponSeriesRef } from '$lib/types/api/weaponSeries'
const AX_SKILL_NAMES: Record<number, string> = {
1: 'Attack',
2: 'HP',
3: 'Double Attack',
4: 'Triple Attack',
5: 'C.A. DMG',
6: 'C.A. DMG Cap',
7: 'Skill DMG',
8: 'Skill DMG Cap',
9: 'Stamina',
10: 'Enmity',
11: 'Critical Hit'
}
export function formatRingStat(
modifier: number,
strength: number,
locale: 'en' | 'ja' = 'en'
): string {
const stat = getRingStat(modifier)
if (!stat) return `Unknown +${strength}`
const statName = stat.name[locale]
return `${statName} +${strength}${stat.suffix}`
}
export function formatEarringStat(
modifier: number,
strength: number,
locale: 'en' | 'ja' = 'en',
characterElement?: number
): string {
// Use elementalized version if element is provided and it's an element-specific stat
const stat =
characterElement !== undefined && (modifier === 3 || modifier === 4)
? getElementalizedEarringStat(modifier, characterElement, locale)
: getEarringStat(modifier)
if (!stat) return `Unknown +${strength}`
const statName = stat.name[locale]
return `${statName} +${strength}${stat.suffix}`
}
export function formatAxSkill(ax: SimpleAxSkill): string {
const skillName = AX_SKILL_NAMES[ax.modifier] || `Unknown (${ax.modifier})`
const suffix = ax.modifier <= 2 ? '' : '%'
return `${skillName} +${ax.strength}${suffix}`
}
export function getWeaponKeyTitle(series?: WeaponSeriesRef | null): string {
if (!isWeaponSeriesRef(series)) {
return 'Weapon Keys'
}
switch (series.slug) {
case 'dark-opus':
return 'Pendulums & Chains'
case 'draconic':
case 'draconic-providence':
case 'superlative':
return 'Telumas'
case 'ultima':
return 'Ultima Keys'
case 'astral':
return 'Emblems'
default:
return 'Weapon Keys'
}
}
export function formatUncapLevel(level?: number | null): string {
if (level === undefined || level === null) return '0★'
return `${level}`
}
export function formatTranscendenceStep(step?: number | null): string {
if (!step || step === 0) return ''
return `Stage ${step}`
}
export function getStatModifierIcon(type: 'ring' | 'earring', modifier: number): string | null {
return null
}
export function getElementName(element?: number | null): string {
switch (element) {
case 0:
return 'Null'
case 1:
return 'Wind'
case 2:
return 'Fire'
case 3:
return 'Water'
case 4:
return 'Earth'
case 5:
return 'Dark'
case 6:
return 'Light'
default:
return 'Unknown'
}
}