135 lines
3.1 KiB
TypeScript
135 lines
3.1 KiB
TypeScript
import { BattlesuitSkill } from './types'
|
|
|
|
export function formatSkillInfo(skill: BattlesuitSkill) {
|
|
let param1 = 0
|
|
let param2 = 0
|
|
let param3 = 0
|
|
if (skill.paramSubId1 !== 0) {
|
|
const subSkill = skill.subSkills.find(subSkill => subSkill.id === skill.paramSubId1.toString())
|
|
if (subSkill != null) {
|
|
param1 = calculateParams(subSkill).param1
|
|
}
|
|
}
|
|
if (skill.paramSubId2 !== 0) {
|
|
const subSkill = skill.subSkills.find(subSkill => subSkill.id === skill.paramSubId2.toString())
|
|
if (subSkill != null) {
|
|
param2 = calculateParams(subSkill).param2
|
|
}
|
|
}
|
|
if (skill.paramSubId3 !== 0) {
|
|
const subSkill = skill.subSkills.find(subSkill => subSkill.id === skill.paramSubId1.toString())
|
|
if (subSkill != null) {
|
|
param1 = calculateParams(subSkill).param3
|
|
}
|
|
}
|
|
const params = {
|
|
param1,
|
|
param2,
|
|
param3
|
|
}
|
|
|
|
return replaceParams(replaceNewLine(skill.info), params)
|
|
}
|
|
|
|
export function formatSubSkillInfo({
|
|
info,
|
|
maxLv,
|
|
paramBase1,
|
|
paramBase2,
|
|
paramBase3,
|
|
paramAdd1,
|
|
paramAdd2,
|
|
paramAdd3
|
|
}: {
|
|
info: string
|
|
maxLv: number
|
|
paramBase1: number
|
|
paramBase2: number
|
|
paramBase3: number
|
|
paramAdd1: number
|
|
paramAdd2: number
|
|
paramAdd3: number
|
|
}) {
|
|
return replaceParams(
|
|
replaceNewLine(info),
|
|
calculateParams({
|
|
maxLv,
|
|
paramBase1,
|
|
paramBase2,
|
|
paramBase3,
|
|
paramAdd1,
|
|
paramAdd2,
|
|
paramAdd3
|
|
})
|
|
)
|
|
}
|
|
|
|
export function replaceNewLine(value: string) {
|
|
if (value == null) {
|
|
return ''
|
|
}
|
|
return value.replace(/\\n/g, '\n')
|
|
}
|
|
|
|
function convertToPercentage(value: number) {
|
|
return value * 100
|
|
}
|
|
|
|
function trimValue(value: number, precision: number = 1): string {
|
|
if (precision === 0) {
|
|
return Math.round(value).toString()
|
|
}
|
|
|
|
const rounded = Math.round(value * Math.pow(10, precision)).toString()
|
|
|
|
return `${rounded.slice(0, -1 * precision) || '0'}.${rounded.slice(-1 * precision)}`
|
|
}
|
|
|
|
function calculateParams(params: {
|
|
maxLv: number
|
|
paramBase1: number
|
|
paramBase2: number
|
|
paramBase3: number
|
|
paramAdd1: number
|
|
paramAdd2: number
|
|
paramAdd3: number
|
|
}): {
|
|
param1: number
|
|
param2: number
|
|
param3: number
|
|
} {
|
|
return {
|
|
param1: params.paramBase1 + (params.maxLv - 1) * params.paramAdd1,
|
|
param2: params.paramBase2 + (params.maxLv - 1) * params.paramAdd2,
|
|
param3: params.paramBase3 + (params.maxLv - 1) * params.paramAdd3
|
|
}
|
|
}
|
|
|
|
const paramRegex = /#([123])\[f([0-9])\](%)?/
|
|
function replaceParams(
|
|
text: string,
|
|
params: {
|
|
param1: number
|
|
param2: number
|
|
param3: number
|
|
}
|
|
): string {
|
|
const result = paramRegex.exec(text)
|
|
if (result == null) {
|
|
return text
|
|
}
|
|
const paramNumber = result[1]
|
|
const precision = parseInt(result[2], 10)
|
|
const asPercentage = result[3]!!
|
|
|
|
const value = paramNumber === '1' ? params.param1 : paramNumber === '2' ? params.param2 : params.param3
|
|
|
|
const valueString = asPercentage
|
|
? trimValue(convertToPercentage(value), precision) + '%'
|
|
: trimValue(value, precision)
|
|
|
|
const replacedText = text.replace(paramRegex, '<color=#23B2E3FF>' + valueString + '</color>')
|
|
|
|
return replaceParams(replacedText, params)
|
|
}
|