2022-10-06 22:20:46 +00:00
|
|
|
|
/*
|
|
|
|
|
* 角色资料数据相关
|
|
|
|
|
* */
|
2022-09-04 21:03:23 +00:00
|
|
|
|
import lodash from 'lodash'
|
|
|
|
|
import { Material } from '../index.js'
|
2023-03-07 17:52:11 +00:00
|
|
|
|
import { Format } from '#miao'
|
2022-09-04 21:03:23 +00:00
|
|
|
|
|
2022-09-03 21:08:57 +00:00
|
|
|
|
// 角色排序
|
|
|
|
|
export const charPosIdx = {
|
|
|
|
|
1: '宵宫,雷神,胡桃,甘雨,优菈,一斗,公子,绫人,魈,可莉,迪卢克,凝光,刻晴,辛焱,烟绯,雷泽',
|
|
|
|
|
2: '夜兰,八重,九条,行秋,香菱,安柏,凯亚,丽莎,北斗,菲谢尔,重云,罗莎莉亚,埃洛伊',
|
|
|
|
|
3: '申鹤,莫娜,早柚,云堇,久岐忍,五郎,砂糖,万叶,温迪',
|
|
|
|
|
4: '班尼特,心海,琴,芭芭拉,七七,迪奥娜,托马,空,荧,阿贝多,钟离'
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-04 21:03:23 +00:00
|
|
|
|
export const baseAttrName = {
|
|
|
|
|
hp: '基础生命',
|
|
|
|
|
atk: '基础攻击',
|
|
|
|
|
def: '基础防御'
|
|
|
|
|
}
|
|
|
|
|
export const growAttrName = {
|
|
|
|
|
atkPct: '大攻击',
|
|
|
|
|
hpPct: '大生命',
|
|
|
|
|
defPct: '大防御',
|
|
|
|
|
cpct: '暴击',
|
|
|
|
|
cdmg: '爆伤',
|
|
|
|
|
recharge: '充能',
|
|
|
|
|
mastery: '精通',
|
|
|
|
|
heal: '治疗',
|
|
|
|
|
phy: '物伤'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const mKeys = [{
|
|
|
|
|
key: 'gem',
|
2022-09-10 19:59:45 +00:00
|
|
|
|
num: '1/9/9/6'
|
2022-09-04 21:03:23 +00:00
|
|
|
|
}, {
|
|
|
|
|
key: 'boss',
|
|
|
|
|
num: '46',
|
|
|
|
|
check: (char) => !char.isTraveler
|
|
|
|
|
}, {
|
|
|
|
|
key: 'normal',
|
|
|
|
|
num: '18/30/36'
|
|
|
|
|
}, {
|
|
|
|
|
key: 'specialty',
|
|
|
|
|
num: '168'
|
|
|
|
|
}, {
|
|
|
|
|
key: 'talent'
|
|
|
|
|
}, {
|
|
|
|
|
key: 'weekly',
|
|
|
|
|
star: 5
|
|
|
|
|
}]
|
|
|
|
|
|
2022-09-21 19:28:33 +00:00
|
|
|
|
let item = (type, lv, num) => {
|
|
|
|
|
return { type, lv, num }
|
|
|
|
|
}
|
|
|
|
|
let gem = (lv = 1, num = 1) => item('gem', lv, num)
|
|
|
|
|
let sp = (num) => item('specialty', 1, num)
|
|
|
|
|
let normal = (lv, num) => item('normal', lv, num)
|
|
|
|
|
let boss = (num) => item('boss', 1, num)
|
|
|
|
|
let money = (num) => item('money', 1, num)
|
|
|
|
|
const lvKeys = [{
|
|
|
|
|
lv: '1'
|
|
|
|
|
}, {
|
|
|
|
|
lv: '20'
|
|
|
|
|
}, {
|
|
|
|
|
lv: '20+',
|
|
|
|
|
items: [gem(1, 1), sp(3), normal(1, 3), money(2)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '40',
|
|
|
|
|
total: [gem(1, 1), sp(3), normal(1, 3), money(2)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '40+',
|
|
|
|
|
items: [gem(2, 3), boss(2), sp(10), normal(1, 15), money(4)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '50',
|
|
|
|
|
total: [gem(1, 1), gem(2, 3), boss(2), sp(13), normal(1, 18), money(6)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '50+',
|
|
|
|
|
items: [gem(2, 6), boss(4), sp(20), normal(2, 12), money(6)],
|
|
|
|
|
}, {
|
|
|
|
|
lv: '60',
|
|
|
|
|
total: [gem(1, 1), gem(2, 9), boss(6), sp(33), normal(1, 18), normal(2, 12), money(12)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '60+',
|
|
|
|
|
items: [gem(3, 3), boss(8), sp(30), normal(2, 18), money(8)],
|
|
|
|
|
}, {
|
|
|
|
|
lv: '70',
|
|
|
|
|
total: [gem(1, 1), gem(2, 9), gem(3, 3), boss(14), sp(63), normal(1, 18), normal(2, 30), money(20)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '70+',
|
|
|
|
|
items: [gem(3, 6), boss(12), sp(45), normal(3, 12), money(10)],
|
|
|
|
|
}, {
|
|
|
|
|
lv: '80',
|
|
|
|
|
total: [gem(1, 1), gem(2, 9), gem(3, 9), boss(26), sp(108), normal(1, 18), normal(2, 30), normal(3, 12), money(30)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '80+',
|
|
|
|
|
items: [gem(4, 6), boss(20), sp(60), normal(3, 24), money(12)]
|
|
|
|
|
}, {
|
|
|
|
|
lv: '90',
|
|
|
|
|
total: [gem(1, 1), gem(2, 9), gem(3, 9), gem(4, 6), boss(46), sp(168), normal(1, 18), normal(2, 30), normal(3, 36), money(42)]
|
|
|
|
|
}]
|
|
|
|
|
|
2022-09-04 21:03:23 +00:00
|
|
|
|
const CharMeta = {
|
|
|
|
|
getAttrList (base, grow, elem = '') {
|
|
|
|
|
let ret = []
|
|
|
|
|
lodash.forEach(base, (v, k) => {
|
|
|
|
|
ret.push({
|
|
|
|
|
title: baseAttrName[k],
|
|
|
|
|
value: Format.comma(v, 1)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
ret.push({
|
|
|
|
|
title: '成长·' + (grow.key === 'dmg' ? `${elem}伤` : growAttrName[grow.key]),
|
2022-09-05 17:05:06 +00:00
|
|
|
|
value: grow.value.toString().length > 10 ? Format.comma(grow.value, 1) : grow.value
|
2022-09-04 21:03:23 +00:00
|
|
|
|
})
|
|
|
|
|
return ret
|
|
|
|
|
},
|
2022-10-07 13:13:46 +00:00
|
|
|
|
getMaterials (char, type = 'all') {
|
2023-10-22 18:22:58 +00:00
|
|
|
|
let ds = char.materials
|
2022-09-04 21:03:23 +00:00
|
|
|
|
let ret = []
|
|
|
|
|
lodash.forEach(mKeys, (cfg) => {
|
|
|
|
|
let title = ds[cfg.key]
|
|
|
|
|
let mat = Material.get(title)
|
|
|
|
|
if (!mat) {
|
2022-10-07 13:13:46 +00:00
|
|
|
|
return true
|
2022-09-04 21:03:23 +00:00
|
|
|
|
}
|
|
|
|
|
if (cfg.check && !cfg.check(char)) {
|
2022-10-07 13:13:46 +00:00
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
if (type !== 'all' && mat.type !== type) {
|
|
|
|
|
return true
|
2022-09-04 21:03:23 +00:00
|
|
|
|
}
|
|
|
|
|
ret.push({
|
|
|
|
|
...mat.getData('label,star,icon,type'),
|
2023-12-06 20:58:41 +00:00
|
|
|
|
num: cfg.num || mat.source || ''
|
2022-09-04 21:03:23 +00:00
|
|
|
|
})
|
|
|
|
|
})
|
2022-10-07 13:13:46 +00:00
|
|
|
|
return type === 'all' ? ret : ret[0]
|
2022-09-05 03:32:33 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getDesc (desc) {
|
|
|
|
|
desc = desc.replace(/。$/, '')
|
|
|
|
|
desc = desc.replace('</br>', ',')
|
|
|
|
|
desc = desc.replace(/[。,]/g, ',')
|
|
|
|
|
desc = desc.replace('——', ',——')
|
|
|
|
|
let len = desc.length
|
|
|
|
|
if (len < 25) {
|
|
|
|
|
return desc
|
|
|
|
|
}
|
|
|
|
|
if (/-/.test(desc)) {
|
|
|
|
|
let idx = desc.indexOf('—')
|
|
|
|
|
return [desc.substr(0, idx), desc.substr(idx, desc.length)].join('</br>')
|
|
|
|
|
}
|
|
|
|
|
desc = desc.split(',')
|
|
|
|
|
return CharMeta.getDescLine(desc)
|
|
|
|
|
},
|
|
|
|
|
getDescLine (inputs) {
|
|
|
|
|
let lens = []
|
|
|
|
|
let len = 0
|
|
|
|
|
let descs = []
|
2022-09-05 03:48:45 +00:00
|
|
|
|
const maxChars = 26
|
2022-09-05 03:32:33 +00:00
|
|
|
|
for (let desc of inputs) {
|
2022-09-05 03:48:45 +00:00
|
|
|
|
if (len + desc.length < maxChars * 2) {
|
2022-09-05 03:32:33 +00:00
|
|
|
|
lens.push(desc.length)
|
|
|
|
|
descs.push(desc)
|
|
|
|
|
len += desc.length
|
|
|
|
|
} else {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-09-05 03:48:45 +00:00
|
|
|
|
if (len <= maxChars - 6) {
|
2022-09-05 03:32:33 +00:00
|
|
|
|
return descs.join(',')
|
|
|
|
|
}
|
2022-09-05 03:48:45 +00:00
|
|
|
|
let ret = [[], []]
|
2022-09-05 03:32:33 +00:00
|
|
|
|
let idx = 0
|
|
|
|
|
for (let desc of descs) {
|
2022-09-05 03:48:45 +00:00
|
|
|
|
if (ret[idx].join(' ').length + desc.length > maxChars) {
|
2022-09-05 03:32:33 +00:00
|
|
|
|
idx++
|
|
|
|
|
}
|
2022-09-05 03:48:45 +00:00
|
|
|
|
ret[idx] = ret[idx] || []
|
2022-09-05 03:32:33 +00:00
|
|
|
|
ret[idx].push(desc)
|
2022-09-05 03:48:45 +00:00
|
|
|
|
if (descs.length === 2) {
|
|
|
|
|
idx++
|
|
|
|
|
}
|
2022-09-05 03:32:33 +00:00
|
|
|
|
}
|
|
|
|
|
return ret[0].join(',') + '</br>' + ret[1].join(',')
|
2022-09-04 21:03:23 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export default CharMeta
|