mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-27 18:01:23 +00:00
260 lines
6.1 KiB
JavaScript
260 lines
6.1 KiB
JavaScript
|
import abbr from './abbr.js'
|
|||
|
import lodash from 'lodash'
|
|||
|
import { Data } from '../../components/index.js'
|
|||
|
|
|||
|
let costumes = {
|
|||
|
琴: [200301], // 琴
|
|||
|
芭芭拉: [201401], // 芭芭拉
|
|||
|
刻晴: [204201], // 刻晴
|
|||
|
凝光: [202701], // 凝光
|
|||
|
迪卢克: [201601], // 迪卢克
|
|||
|
菲谢尔: [203101], // 菲谢尔
|
|||
|
}
|
|||
|
const fixData = {
|
|||
|
4: {
|
|||
|
id: 20000000,
|
|||
|
title: '异界的旅人',
|
|||
|
cncv: '宴宁/鹿喑',
|
|||
|
jpcv: '悠木碧/堀江瞬'
|
|||
|
},
|
|||
|
5: {
|
|||
|
title: '异界的旅人'
|
|||
|
},
|
|||
|
7: {
|
|||
|
title: '异界的旅人'
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
const elemMap = { Water: 'hydro', Grass: 'dendro', Ice: 'cryo', Fire: 'pyro', Stone: 'geo' }
|
|||
|
const weaponMap = { pole: 'polearm', sword_one_hand: 'sword' }
|
|||
|
|
|||
|
const CharData = {
|
|||
|
getBasic (ds) {
|
|||
|
let fe = ds.fetter || {}
|
|||
|
let w = Data.regRet(/WEAPON_(.*)$/, ds.weaponType, 1).toLowerCase()
|
|||
|
let ret = {
|
|||
|
id: ds.id,
|
|||
|
name: ds.name,
|
|||
|
abbr: abbr[ds.name] || ds.name,
|
|||
|
title: fe.title || '',
|
|||
|
star: ds.rank,
|
|||
|
elem: elemMap[ds.element] || ds.element,
|
|||
|
allegiance: fe.native || '',
|
|||
|
weapon: weaponMap[w] || w,
|
|||
|
birth: ds.birthday.join('-'),
|
|||
|
astro: fe.constellation || '',
|
|||
|
desc: fe.detail || '',
|
|||
|
cncv: fe.cv?.CHS || '',
|
|||
|
jpcv: fe.cv?.JP || '',
|
|||
|
costume: costumes[ds.name] || false,
|
|||
|
source: 'amber',
|
|||
|
ver: 1
|
|||
|
}
|
|||
|
ret.title = ret.title === '???' ? '' : ret.title
|
|||
|
ret.desc = ret.desc === '???' ? '测试角色' : ret.title
|
|||
|
return ret
|
|||
|
},
|
|||
|
|
|||
|
getDetailAttr (ds) {
|
|||
|
return {
|
|||
|
details: { 90: {} }
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
getDetail (ds) {
|
|||
|
let id = ds.id
|
|||
|
let name = ds.name
|
|||
|
|
|||
|
let talent = CharData.getTalents(ds)
|
|||
|
let passive = CharData.getPassive(ds)
|
|||
|
let cons = CharData.getCons(ds)
|
|||
|
let attr = CharData.getDetailAttr(ds)
|
|||
|
return {
|
|||
|
id,
|
|||
|
name,
|
|||
|
talent,
|
|||
|
cons,
|
|||
|
passive,
|
|||
|
attr
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 获取正文
|
|||
|
getDesc (dt) {
|
|||
|
dt = dt || ''
|
|||
|
dt = dt.replace(/<color=[^>]*>/g, '')
|
|||
|
dt = dt.replace(/<\/color(=?[^>])*>/g, '')
|
|||
|
dt = dt.replace(/<span class=[^>]*>/g, '<strong>')
|
|||
|
dt = dt.replace(/<\/span>/g, '</strong>')
|
|||
|
dt = dt.split('\\n')
|
|||
|
let desc = []
|
|||
|
let isEmpty = true
|
|||
|
lodash.forEach(dt, (txt, i) => {
|
|||
|
txt = lodash.trim(txt)
|
|||
|
if (!txt) {
|
|||
|
isEmpty = true
|
|||
|
return
|
|||
|
} else if (txt.length < 15 && isEmpty) {
|
|||
|
txt = `<h3>${txt}</h3>`
|
|||
|
}
|
|||
|
desc.push(txt)
|
|||
|
isEmpty = false
|
|||
|
})
|
|||
|
return desc
|
|||
|
},
|
|||
|
|
|||
|
// 获取单个天赋数据
|
|||
|
getTalent (ds) {
|
|||
|
|
|||
|
let name = ds.name
|
|||
|
let icon = ds.icon
|
|||
|
|
|||
|
// 说明
|
|||
|
let desc = CharData.getDesc(ds.description)
|
|||
|
|
|||
|
let ret = {}
|
|||
|
let titles = []
|
|||
|
let details = []
|
|||
|
|
|||
|
let formater = {
|
|||
|
F1P: (t) => (t * 100).toFixed(2) * 1 + '%',
|
|||
|
P: (t) => (t * 100).toFixed(2) * 1 + '%',
|
|||
|
F1: (t) => t.toFixed(1) * 1,
|
|||
|
F2: (t) => t.toFixed(2) * 1,
|
|||
|
I: (t) => parseInt(t)
|
|||
|
}
|
|||
|
|
|||
|
lodash.forEach(ds.promote, function (ds) {
|
|||
|
lodash.forEach(ds.description, (txt, idx) => {
|
|||
|
if (!txt) {
|
|||
|
return
|
|||
|
}
|
|||
|
let [title, tpl] = txt.split('|')
|
|||
|
if (!ret[title]) {
|
|||
|
ret[title] = []
|
|||
|
titles.push(title)
|
|||
|
}
|
|||
|
|
|||
|
let value = []
|
|||
|
if (tpl) {
|
|||
|
lodash.forEach(tpl.split('}'), (txt) => {
|
|||
|
if (txt.trim()) {
|
|||
|
let txtRet = /(.*){param(\d+):(F1P|F1|F2|I|P)/.exec(txt)
|
|||
|
if (txtRet) {
|
|||
|
let pIdx = txtRet[2] - 1
|
|||
|
let val = formater[txtRet[3]](ds.params[pIdx])
|
|||
|
value.push(txtRet[1] + val)
|
|||
|
} else {
|
|||
|
value.push(txt)
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
ret[title].push(value.join(''))
|
|||
|
})
|
|||
|
})
|
|||
|
|
|||
|
lodash.forEach(titles, (name) => {
|
|||
|
let values = []
|
|||
|
let values2 = []
|
|||
|
let isSame = true
|
|||
|
let unit = ''
|
|||
|
|
|||
|
lodash.forEach(ret[name], (val, i) => {
|
|||
|
let v = val.replace(/(生命值上限|最大生命值)/, 'HP')
|
|||
|
v = v.replace('/', ' / ').replace('+', ' + ').replace('*', ' * ')
|
|||
|
v = v.replace(/(防御力)/, '防御')
|
|||
|
values.push(v)
|
|||
|
if (i > 0 && values[0] !== val) {
|
|||
|
isSame = false
|
|||
|
}
|
|||
|
let ur = /^(.*)(生命值上限|防御力|最大生命值|攻击力|生命值上限 \/ 层|当前生命值| \/ 层)(\s*\*\s*\d)?$/.exec(val)
|
|||
|
if (ur && ur[1] && ur[2]) {
|
|||
|
values2.push(ur[1] + (ur[3] || ''))
|
|||
|
unit = ur[2]
|
|||
|
} else {
|
|||
|
ur = /^(每点元素能量|每个猫爪|每朵|每个)(.*)$/.exec(val)
|
|||
|
if (ur && ur[1] && ur[2]) {
|
|||
|
values2.push(ur[2])
|
|||
|
unit = ur[1]
|
|||
|
} else {
|
|||
|
ur = /^(每层)(.*)(攻击力)$/.exec(val)
|
|||
|
if (ur && ur[1] && ur[2] && ur[3]) {
|
|||
|
values2.push(ur[2])
|
|||
|
unit = ur[1] + ' ' + ur[3]
|
|||
|
} else {
|
|||
|
unit = ''
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
details.push({
|
|||
|
name,
|
|||
|
unit,
|
|||
|
isSame,
|
|||
|
values: unit ? values2 : values
|
|||
|
})
|
|||
|
})
|
|||
|
|
|||
|
return {
|
|||
|
name,
|
|||
|
desc,
|
|||
|
tables: details
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 获取天赋
|
|||
|
getTalents (ds) {
|
|||
|
return {
|
|||
|
a: CharData.getTalent(ds.talent[0]),
|
|||
|
e: CharData.getTalent(ds.talent[1]),
|
|||
|
q: CharData.getTalent(ds.talent[3])
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// 获取被动天赋
|
|||
|
getPassive (ds) {
|
|||
|
let ret = []
|
|||
|
|
|||
|
for (let idx in ds.talent) {
|
|||
|
if (idx < 4) {
|
|||
|
continue
|
|||
|
}
|
|||
|
let tmp = ds.talent[idx]
|
|||
|
ret.push({
|
|||
|
name: tmp.name,
|
|||
|
desc: CharData.getDesc(tmp.description)
|
|||
|
})
|
|||
|
}
|
|||
|
return ret
|
|||
|
},
|
|||
|
|
|||
|
// 获取命座数据
|
|||
|
getCons (ds) {
|
|||
|
let ret = {}
|
|||
|
lodash.forEach(ds.constellation, (tmp, idx) => {
|
|||
|
ret[idx * 1 + 1] = {
|
|||
|
name: tmp.name,
|
|||
|
desc: CharData.getDesc(tmp.description)
|
|||
|
}
|
|||
|
})
|
|||
|
return ret;
|
|||
|
},
|
|||
|
|
|||
|
// 获取命座加成天赋
|
|||
|
getConsTalent (talent, cons) {
|
|||
|
if (!talent || !cons) {
|
|||
|
return { e: 3, q: 5 }
|
|||
|
}
|
|||
|
let e = talent.e.name
|
|||
|
let q = talent.q.name
|
|||
|
let c3 = (cons['3']?.desc || []).join('')
|
|||
|
let c5 = (cons['5']?.desc || []).join('')
|
|||
|
return {
|
|||
|
e: c3.includes(e) ? 3 : 5,
|
|||
|
q: c5.includes(q) ? 5 : 3
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
export default CharData
|