63 lines
No EOL
2.4 KiB
TypeScript
63 lines
No EOL
2.4 KiB
TypeScript
import { overMastery, aetherialMastery, type ItemSkill } from '$lib/data/overMastery'
|
|
import { getElementName, getOppositeElement } from './element'
|
|
|
|
// Helper to find the right mastery category for rings
|
|
export function getRingMasteryCategory(modifier: number): ItemSkill[] {
|
|
if (modifier <= 2) return overMastery.a // Primary (ATK, HP)
|
|
if (modifier <= 9) return overMastery.b // Secondary
|
|
return overMastery.c // Tertiary
|
|
}
|
|
|
|
// Helper to get ring stat
|
|
export function getRingStat(modifier: number): ItemSkill | undefined {
|
|
const category = getRingMasteryCategory(modifier)
|
|
return category.find(item => item.id === modifier)
|
|
}
|
|
|
|
// Helper to get earring stat
|
|
export function getEarringStat(modifier: number): ItemSkill | undefined {
|
|
return aetherialMastery.find(item => item.id === modifier)
|
|
}
|
|
|
|
// Helper to get earring stat with element substitution
|
|
export function getElementalizedEarringStat(
|
|
modifier: number,
|
|
characterElement?: number,
|
|
locale: 'en' | 'ja' = 'en'
|
|
): ItemSkill | undefined {
|
|
const stat = getEarringStat(modifier)
|
|
if (!stat) return undefined
|
|
|
|
// Deep clone to avoid mutation
|
|
const elementalizedStat = JSON.parse(JSON.stringify(stat)) as ItemSkill
|
|
|
|
// Handle element substitution for IDs 3 and 4
|
|
if (characterElement !== undefined && characterElement !== null) {
|
|
if (modifier === 3) {
|
|
// ID 3: Use character's element
|
|
const elementName = getElementName(characterElement, locale)
|
|
if (locale === 'en') {
|
|
elementalizedStat.name.en = elementalizedStat.name.en.replace('{Element}', elementName)
|
|
} else {
|
|
elementalizedStat.name.ja = elementalizedStat.name.ja.replace('{属性}', `${elementName}属性`)
|
|
}
|
|
// Update slug for icon purposes - using element ID for icon path
|
|
elementalizedStat.slug = `ele-${characterElement}`
|
|
} else if (modifier === 4) {
|
|
// ID 4: Use opposite element
|
|
const oppositeElementId = getOppositeElement(characterElement)
|
|
if (oppositeElementId !== undefined) {
|
|
const elementName = getElementName(oppositeElementId, locale)
|
|
if (locale === 'en') {
|
|
elementalizedStat.name.en = elementalizedStat.name.en.replace('{Element}', elementName)
|
|
} else {
|
|
elementalizedStat.name.ja = elementalizedStat.name.ja.replace('{属性}', `${elementName}属性`)
|
|
}
|
|
// Update slug for icon purposes - using element ID for icon path
|
|
elementalizedStat.slug = `ele-${oppositeElementId}`
|
|
}
|
|
}
|
|
}
|
|
|
|
return elementalizedStat
|
|
} |