miao-plugin/models/character/CharCfg.js

66 lines
2.0 KiB
JavaScript

import { Data } from '#miao'
import lodash from 'lodash'
import fs from 'node:fs'
import { miaoPath } from '#miao.path'
const charPath = `${miaoPath}/resources/meta-gs/character`
let cfgMap = {
char: {},
async init () {
let chars = fs.readdirSync(charPath)
for (let char of chars) {
cfgMap.char[char] = {}
let curr = cfgMap.char[char]
// 评分规则
if (cfgMap.exists(char, 'artis_user')) {
curr.artis = await cfgMap.getCfg(char, 'artis_user', 'default')
} else if (cfgMap.exists(char, 'artis')) {
curr.artis = await cfgMap.getCfg(char, 'artis', 'default')
}
// 伤害计算
if (cfgMap.exists(char, 'calc_user')) {
curr.calc = await cfgMap.getCfg(char, 'calc_user')
} else if (cfgMap.exists(char, 'calc')) {
curr.calc = await cfgMap.getCfg(char, 'calc')
}
}
},
exists (char, file) {
return fs.existsSync(`${charPath}/${char}/${file}.js`)
},
async getCfg (char, file, module = '') {
let cfg = await Data.importModule(`resources/meta-gs/character/${char}/${file}.js`, 'miao')
if (module) {
return cfg[module]
}
return cfg
}
}
await cfgMap.init()
/**
* 角色相关配置
*/
let CharCfg = {
// 获取角色伤害计算相关配置
getCalcRule (char) {
let cfg = cfgMap.char[char.isTraveler ? `旅行者/${char.elem}` : char.name]?.calc
if (!cfg || lodash.isEmpty(cfg)) {
return false
}
return {
details: cfg.details || false, // 计算详情
buffs: cfg.buffs || [], // 角色buff
defParams: cfg.defParams || {}, // 默认参数,一般为空
defDmgIdx: cfg.defDmgIdx || -1, // 默认详情index
defDmgKey: cfg.defDmgKey || '',
mainAttr: cfg.mainAttr || 'atk,cpct,cdmg', // 伤害属性
enemyName: cfg.enemyName || '小宝' // 敌人名称
}
},
getArtisCfg (char) {
return cfgMap.char[char.isTraveler ? '旅行者' : char.name]?.artis || false
}
}
export default CharCfg