miao-plugin/models/profile-lib/CharArtis.js

108 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { usefulAttr } from '../../resources/meta/artifact/artis-mark.js'
import { Data } from '../../components/index.js'
import fs from 'fs'
let charCfg = {}
async function init () {
let charPath = process.cwd() + '/plugins/miao-plugin/resources/meta/character'
let chars = fs.readdirSync(charPath)
for (let char of chars) {
if (fs.existsSync(`${charPath}/${char}/artis.js`)) {
charCfg[char] = await Data.importModule(`resources/meta/character/${char}/artis.js`)
}
// 允许自定义配置文件,会覆盖喵喵版评分规则
if (fs.existsSync(`${charPath}/${char}/artis_user.js`)) {
charCfg[char] = await Data.importModule(`resources/meta/character/${char}/artis_user.js`)
}
}
}
await init()
const CharArtis = {
reduceWeight (weight, key, plus, max) {
let original = weight[key] || 0
if (original < max) {
weight[key] = Math.max(original + plus, max)
return true
}
return false
},
getCharArtisCfg (char, profile, artis) {
let { attr, weapon } = profile
let rule = function (title, attrWeight) {
return {
title,
attrWeight
}
}
let def = function (attrWeight) {
let title = []
let weight = attrWeight || usefulAttr[char.name] || { atk: 75, cp: 100, cd: 100 }
let check = (key, max = 75, maxPlus = 75, isWeapon = true) => {
let original = weight[key] || 0
if (original < max) {
let plus = isWeapon ? maxPlus * (1 + weapon.affix / 5) / 2 : maxPlus
weight[key] = Math.min(Math.round(original + plus), max)
return true
}
return false
}
let wn = weapon.name
// 增加攻击力或直接伤害类武器判定
const weaponCfg = {
磐岩结绿: {
attr: 'hp',
abbr: '绿剑'
},
赤角石溃杵: {
attr: 'def',
abbr: '赤角'
},
猎人之径: {
attr: 'mastery'
},
薙草之稻光: {
attr: 'recharge',
abbr: '薙刀'
}
}
if (weight.atk > 0 && weaponCfg[wn]) {
let wCfg = weaponCfg[wn]
if (check(wCfg.attr, wCfg.max || 75, wCfg.plus || 75)) {
title.push(wCfg.abbr || wn)
}
}
// 不与攻击力挂钩的武器判定
if (wn === '辰砂之纺锤' && check('def')) {
title.push('纺锤')
}
// 圣遗物判定如果是绝缘4将充能权重拉高至沙漏圣遗物当前最高权重齐平
let maxWeight = Math.max(weight.atk || 0, weight.hp || 0, weight.def || 0, weight.mastery || 0)
if (artis.is('绝缘4') && check('recharge', maxWeight, 75, false)) {
title.push('绝缘4')
}
title = title.length > 0 ? title.join('') : '通用'
return {
title: `${char.abbr}-${title}`,
attrWeight: weight
}
}
let charRule = charCfg[char.name]?.default || function ({ def }) {
return def(usefulAttr[char.name] || { atk: 75, cp: 100, cd: 100 })
}
if (charRule) {
return charRule({ attr, artis, rule, def, weapon, cons: profile.cons })
}
}
}
export default CharArtis