调整部分角色的流派权重,增加武器判定

This commit is contained in:
yoimiya-kokomi 2022-09-15 03:31:10 +08:00
parent 4654d99f7a
commit e410642bb1
13 changed files with 115 additions and 73 deletions

View File

@ -23,7 +23,7 @@ export default new ProfileServ({
// 处理服务返回
async response (data, req) {
if (!data.playerInfo) {
if(data.error) {
if (data.error) {
console.log(`Enka ReqErr: ${data.error}`)
}
return req.err('error', 60)

View File

@ -86,9 +86,9 @@ export const characters = {
duizhang: ['卡皮塔诺', '队长'],
nahida: ['纳西妲', '草神', '小吉祥', '小吉祥草王', '花神', '草萝莉'],
alhaitham: ['艾尔海森', '海哥', '埃尔海森'],
dixiya: ['迪希雅'],
daiyin: ['戴因斯雷布', '戴因', '男派蒙'],
tianli: ['天理']
dixiya: ['迪希雅', '迪希亚', '迪希娅', '迪西雅', '迪西亚'],
daiyin: ['戴因斯雷布', '戴因', '男派蒙', '大派蒙', '末光之剑', '拾枝者'],
tianli: ['天理', '天理维系者', '维系者']
}
export const wifeData = {

View File

@ -155,47 +155,36 @@ export default class ProfileArtis extends Base {
getCharCfg () {
let char = Character.get(this.charid)
// let { attrWeight, title } = char.getArtisMarkCfg(this.profile, this)
let { attrWeight, title } = CharArtis.getCharArtisCfg(char, this.profile, this)
let attrMark = {}
let attrs = {}
let baseAttr = char.baseAttr || { hp: 14000, atk: 230, def: 700 }
lodash.forEach(attrWeight, (weight, attr) => {
attrMark[attr] = weight / attrValue[attr]
})
// let baseAttr = [400, 500, 300];
if (attrMark.hp) {
attrMark.hpPlus = attrMark.hp / baseAttr.hp * 100
}
if (attrMark.atk) {
// 以520作为武器白值均值计算
attrMark.atkPlus = attrMark.atk / (baseAttr.atk * 1 + 520) * 100
}
if (attrMark.def) {
attrMark.defPlus = attrMark.def / baseAttr.def * 100
}
let maxMark = ArtisMark.getMaxMark(attrWeight)
let titleMark = {}
let titleWeight = {}
lodash.forEach(attrMark, (mark, attr) => {
let aTitle = attrMap[attr].title
if (/小/.test(aTitle)) {
return
lodash.forEach(attrMap, (attr, key) => {
let k = attr.base || ''
let weight = attrWeight[k || key]
if (!weight || weight * 1 === 0) {
return true
}
titleMark[aTitle] = mark
titleWeight[aTitle] = attrWeight[attr] || 0
if (/大/.test(aTitle)) {
let sTitle = aTitle.replace('大', '小')
titleWeight[sTitle] = titleWeight[aTitle]
let ret = {
...attr,
weight,
fixWeight: weight,
mark: weight / attrValue[key]
}
if (!k) {
ret.mark = weight / attrValue[key]
} else {
let plus = k === 'atk' ? 520 : 0
ret.mark = weight / attrValue[k] / (baseAttr[k] + plus) * 100
ret.fixWeight = weight * attr.value / attrMap[k].value / (baseAttr[k] + plus) * 100
}
attrs[key] = ret
})
let maxMark = ArtisMark.getMaxMark(attrs)
return {
attrs,
classTitle: title,
weight: attrWeight,
mark: attrMark,
titleMap: titleMark,
titleWeight,
mark: lodash.mapValues(attrs, (ds) => ds.mark),
maxMark
}
}
@ -204,7 +193,10 @@ export default class ProfileArtis extends Base {
let charCfg = this.getCharCfg()
let artis = {}
let setCount = {}
let usefulMark = charCfg.titleWeight
let usefulMark = {}
lodash.forEach(charCfg.attrs, (ds) => {
usefulMark[ds.title] = ds.weight
})
let totalMark = 0
this.forEach((arti, idx) => {
let mark = ArtisMark.getMark(charCfg, idx, arti.main, arti.attrs)

View File

@ -69,9 +69,9 @@ export default class ProfileReq extends Base {
params.timeout = params.timeout || 1000 * 20
let req = await fetch(reqParam.url, params)
data = await req.text()
if(data[0] === '<'){
if (data[0] === '<') {
let titleRet = /<title>(.+)<\/title>/.exec(data)
if(titleRet && titleRet[1]) {
if (titleRet && titleRet[1]) {
data = { error: titleRet[1] }
} else {
return this.err('error', 60)

View File

@ -49,7 +49,7 @@ export default class ProfileServ extends Base {
return {
url: param.api || api,
params: param.params || {}
params: param.params || {}
}
}

View File

@ -117,7 +117,7 @@ let ArtisMark = {
let val = ds.value || ds[1]
return (attrMark[attr] || 0) * val
},
getMaxMark (attrWeight) {
getMaxMark (attrs) {
let ret = {}
for (let idx = 1; idx <= 5; idx++) {
let totalMark = 0
@ -128,26 +128,26 @@ let ArtisMark = {
} else if (idx === 2) {
mAttr = 'atkPlus'
} else if (idx >= 3) {
mAttr = ArtisMark.getMaxAttr(attrWeight, mainAttr[idx])[0]
mMark = attrWeight[mAttr]
totalMark += attrWeight[mAttr] * 2
mAttr = ArtisMark.getMaxAttr(attrs, mainAttr[idx])[0]
mMark = attrs[mAttr].fixWeight
totalMark += attrs[mAttr].fixWeight * 2
}
let sAttr = ArtisMark.getMaxAttr(attrWeight, subAttr, 4, mAttr)
let sAttr = ArtisMark.getMaxAttr(attrs, subAttr, 4, mAttr)
lodash.forEach(sAttr, (attr, aIdx) => {
totalMark += attrWeight[attr] * (aIdx === 0 ? 6 : 1)
totalMark += attrs[attr].fixWeight * (aIdx === 0 ? 6 : 1)
})
ret[idx] = totalMark
ret['m' + idx] = mMark
}
return ret
},
getMaxAttr (charAttr = {}, list2 = [], maxLen = 1, banAttr = '') {
getMaxAttr (attrs = {}, list2 = [], maxLen = 1, banAttr = '') {
let tmp = []
lodash.forEach(list2, (attr) => {
if (attr === banAttr) return
if (!charAttr[attr]) return
tmp.push({ attr, mark: charAttr[attr] })
if (!attrs[attr]) return
tmp.push({ attr, mark: attrs[attr].fixWeight })
})
tmp = lodash.sortBy(tmp, 'mark')
tmp = tmp.reverse()

View File

@ -20,8 +20,16 @@ async function init () {
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 } = profile
let { attr, weapon } = profile
let rule = function (title, attrWeight) {
return {
@ -31,12 +39,55 @@ const CharArtis = {
}
let def = function (attrWeight) {
let title = '通用'
let title = []
let weight = attrWeight || usefulAttr[char.name] || { atk: 75, cp: 100, cd: 100 }
if (artis.is('绝缘4') && weight.recharge < 75) {
weight.recharge = 75
title = '绝缘4'
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('纺锤')
}
// 圣遗物判定
if (artis.is('绝缘4') && check('recharge', 75, 45, false)) {
title.push('绝缘4')
}
title = title.length > 0 ? title.join('') : '通用'
return {
title: `${char.abbr}-${title}`,
attrWeight: weight
@ -48,7 +99,7 @@ const CharArtis = {
}
if (charRule) {
return charRule({ attr, artis, rule, def, weapon: profile.weapon, cons: profile.cons })
return charRule({ attr, artis, rule, def, weapon, cons: profile.cons })
}
}
}

View File

@ -1,7 +1,7 @@
export default function ({ attr, rule, def }) {
// 优菈核爆
if (attr.cpct < 30 && attr.cdmg > 150) {
if (attr.cpct < 15 && attr.cdmg > 200) {
return rule('优菈-核爆', { atk: 100, cd: 100, phy: 100 })
}
return def({ atk: 75, cp: 100, cd: 100, phy: 100, recharge: 55 })
}
}

View File

@ -1,7 +1,6 @@
export default function ({ attr, weapon, rule, def }) {
// 蒸发可莉,具体数值待定
if (attr.mastery < 80) {
return rule('可莉-纯火', { atk: 75, cp: 100, cd: 100, dmg: 100, recharge: 30 })
if (attr.mastery < 50 && attr.cp * 2 + attr.cd > 320) {
return rule('可莉-纯火', { atk: 85, cp: 100, cd: 100, dmg: 100, recharge: 55 })
}
return def({ atk: 75, cp: 100, cd: 100, mastery: 75, dmg: 100, recharge: 30 })
}
}

View File

@ -1,9 +1,9 @@
export default function ({ attr, rule, def }) {
export default function ({ attr, artis, rule, def }) {
// 宵宫纯色流派
if (attr.mastery < 80) {
return rule('宵宫-纯色', { atk: 75, cp: 100, cd: 100, dmg: 100 })
if (attr.mastery < 50 && attr.cp * 2 + attr.cd > 320) {
return rule('宵宫-纯火', { atk: 85, cp: 100, cd: 100, dmg: 100 })
}
if (attr.mastery > 200) {
if (attr.mastery > 200 && artis.is('mastery', 3)) {
return rule('宵宫-精通', { atk: 75, cp: 100, cd: 100, mastery: 100, dmg: 100 })
}
return def({ atk: 75, cp: 100, cd: 100, mastery: 75, dmg: 100 })

View File

@ -1,6 +1,6 @@
export default function ({ artis, rule, def }) {
if (artis.is('冰套4')) {
return rule('甘雨-永冻', { atk: 75, cp: 100, cd: 100, dmg: 100, recharge: 75 })
return rule('甘雨-永冻', { atk: 75, cp: 100, cd: 100, dmg: 100, recharge: 55 })
}
return def({ atk: 75, cp: 100, cd: 100, mastery: 75, dmg: 100 })
}

View File

@ -1,7 +1,7 @@
export default function ({ attr, rule, def }) {
// 核爆胡桃,具体数值待定
if (attr.cpct < 30 && attr.cdmg > 200) {
return rule('胡桃-核爆', { hp: 85, atk: 50, cd: 100, mastery: 85, dmg: 100 })
// 核爆胡桃
if (attr.cpct < 15 && attr.cdmg > 280) {
return rule('胡桃-核爆', { hp: 90, atk: 50, cd: 100, mastery: 90, dmg: 100 })
}
return def({ hp: 80, atk: 50, cp: 100, cd: 100, mastery: 75, dmg: 100 })
}

View File

@ -12,11 +12,11 @@ export const attrValue = {
}
export const attrMap = {
atk: { title: '大攻击', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
atkPlus: { title: '小攻击', format: 'comma', type: 'plus' },
atkPlus: { title: '小攻击', format: 'comma', type: 'plus', base: 'atk', value: 15.56 },
def: { title: '大防御', format: 'pct', type: 'normal', value: 7.29, text: '7.29%' },
defPlus: { title: '小防御', format: 'comma', type: 'plus' },
defPlus: { title: '小防御', format: 'comma', type: 'plus', base: 'def', value: 18.52 },
hp: { title: '大生命', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
hpPlus: { title: '小生命', format: 'comma', type: 'plus' },
hpPlus: { title: '小生命', format: 'comma', type: 'plus', base: 'hp', value: 239.0 },
cp: { title: '暴击率', format: 'pct', type: 'normal', value: 3.89, text: '3.89%' },
cd: { title: '暴击伤害', format: 'pct', type: 'normal', value: 7.77, text: '7.77%' },
mastery: { title: '元素精通', format: 'comma', type: 'normal', value: 23.31, text: '23.31' },