2022-07-23 20:32:10 +00:00
|
|
|
|
import lodash from 'lodash'
|
|
|
|
|
import { autoRefresh } from './profile-common.js'
|
2022-08-18 10:13:42 +00:00
|
|
|
|
import { Common, Format, Profile } from '../../components/index.js'
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
export async function renderProfile (e, char, render, mode = 'profile', params = {}) {
|
2022-06-25 23:45:43 +00:00
|
|
|
|
let selfUser = await e.checkAuth({
|
2022-07-23 20:32:10 +00:00
|
|
|
|
auth: 'self'
|
2022-06-25 23:45:43 +00:00
|
|
|
|
})
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let { uid } = e
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
if (['荧', '空', '主角', '旅行者'].includes(char.name)) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('暂不支持主角的面板信息查看')
|
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-06-29 23:05:31 +00:00
|
|
|
|
if (char.isCustom) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply(`暂不支持自定义角色${char.name}的面板信息查看`)
|
|
|
|
|
return true
|
2022-06-29 23:05:31 +00:00
|
|
|
|
}
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
let refresh = async () => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let refreshRet = await autoRefresh(e)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (refreshRet) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
await renderProfile(e, char, render, mode, params)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return refreshRet
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 10:13:42 +00:00
|
|
|
|
let profile = Profile.get(uid, char.id)
|
2022-07-12 21:53:20 +00:00
|
|
|
|
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (!profile) {
|
|
|
|
|
if (await refresh()) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
} else {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply(`请确认${char.name}已展示在【游戏内】的角色展柜中,并打开了“显示角色详情”。然后请使用 #更新面板\n命令来获取${char.name}的面板详情`)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-08-18 23:08:16 +00:00
|
|
|
|
} else if (!profile.hasData) {
|
2022-07-12 21:53:20 +00:00
|
|
|
|
if (!await refresh()) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('由于数据Api变更,请重新获取面板信息后查看')
|
2022-07-12 21:53:20 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let a = profile.attr
|
|
|
|
|
let c = Format.comma
|
|
|
|
|
let p = Format.pct
|
2022-06-25 23:45:43 +00:00
|
|
|
|
let attr = {
|
|
|
|
|
hp: c(a.hp),
|
|
|
|
|
hpPlus: c(a.hp - a.hpBase),
|
|
|
|
|
atk: c(a.atk),
|
|
|
|
|
atkPlus: c(a.atk - a.atkBase),
|
|
|
|
|
def: c(a.def),
|
|
|
|
|
defPlus: c(a.def - a.defBase),
|
2022-08-18 10:13:42 +00:00
|
|
|
|
cpct: p(a.cpct),
|
|
|
|
|
cdmg: p(a.cdmg),
|
2022-06-25 23:45:43 +00:00
|
|
|
|
mastery: c(a.mastery),
|
|
|
|
|
recharge: p(a.recharge),
|
2022-08-18 10:13:42 +00:00
|
|
|
|
dmg: p(Math.max(a.dmg * 1 || 0, a.phy * 1 || 0))
|
2022-07-23 20:32:10 +00:00
|
|
|
|
}
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
2022-08-18 10:13:42 +00:00
|
|
|
|
let { artis, mark: totalMark, markClass: totalMarkClass, usefulMark } = profile.getArtisMark()
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let enemyLv = await selfUser.getCfg('char.enemyLv', 91)
|
|
|
|
|
let dmgMsg = []
|
|
|
|
|
let dmgData = []
|
2022-08-18 10:13:42 +00:00
|
|
|
|
let dmgCalc = await profile.calcDmg({
|
2022-06-25 23:45:43 +00:00
|
|
|
|
enemyLv,
|
|
|
|
|
mode,
|
|
|
|
|
...params
|
2022-07-23 20:32:10 +00:00
|
|
|
|
})
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (dmgCalc && dmgCalc.ret) {
|
|
|
|
|
lodash.forEach(dmgCalc.ret, (ds) => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
ds.dmg = Format.comma(ds.dmg, 0)
|
|
|
|
|
ds.avg = Format.comma(ds.avg, 0)
|
|
|
|
|
dmgData.push(ds)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
})
|
|
|
|
|
lodash.forEach(dmgCalc.msg, (msg) => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
msg.replace(':', ':')
|
|
|
|
|
dmgMsg.push(msg.split(':'))
|
2022-06-25 23:45:43 +00:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-08 21:16:37 +00:00
|
|
|
|
if (mode === 'dmg' && dmgCalc.dmgRet) {
|
|
|
|
|
let basic = dmgCalc?.dmgCfg?.basicRet
|
2022-06-25 23:45:43 +00:00
|
|
|
|
lodash.forEach(dmgCalc.dmgRet, (row) => {
|
|
|
|
|
lodash.forEach(row, (ds) => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
ds.val = (ds.avg > basic.avg ? '+' : '') + Format.comma(ds.avg - basic.avg)
|
|
|
|
|
ds.dmg = Format.comma(ds.dmg, 0)
|
|
|
|
|
ds.avg = Format.comma(ds.avg, 0)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
})
|
2022-07-23 20:32:10 +00:00
|
|
|
|
})
|
|
|
|
|
basic.dmg = Format.comma(basic.dmg)
|
|
|
|
|
basic.avg = Format.comma(basic.avg)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
// 渲染图像
|
|
|
|
|
return await Common.render('character/detail', {
|
2022-06-25 23:45:43 +00:00
|
|
|
|
save_id: uid,
|
2022-07-23 20:32:10 +00:00
|
|
|
|
uid,
|
2022-06-25 23:45:43 +00:00
|
|
|
|
data: profile,
|
|
|
|
|
attr,
|
|
|
|
|
cons: char.cons,
|
|
|
|
|
name: char.name,
|
|
|
|
|
elem: char.elem,
|
2022-06-29 20:40:06 +00:00
|
|
|
|
talent: char.getAvatarTalent(profile.talent, profile.cons),
|
2022-06-25 23:45:43 +00:00
|
|
|
|
dmgData,
|
|
|
|
|
dmgMsg,
|
2022-08-08 21:16:37 +00:00
|
|
|
|
dmgRet: dmgCalc.dmgRet || false,
|
|
|
|
|
dmgCfg: dmgCalc.dmgCfg || false,
|
2022-06-25 23:45:43 +00:00
|
|
|
|
artis,
|
|
|
|
|
enemyLv,
|
2022-07-23 20:32:10 +00:00
|
|
|
|
enemyName: dmgCalc.enemyName || '小宝',
|
2022-06-25 23:45:43 +00:00
|
|
|
|
totalMark: c(totalMark, 1),
|
|
|
|
|
totalMarkClass,
|
|
|
|
|
usefulMark,
|
2022-07-23 20:32:10 +00:00
|
|
|
|
talentMap: { a: '普攻', e: '战技', q: '爆发' },
|
2022-06-25 23:45:43 +00:00
|
|
|
|
bodyClass: `char-${char.name}`,
|
2022-07-23 20:32:10 +00:00
|
|
|
|
mode
|
|
|
|
|
}, { e, render, scale: 1.6 })
|
|
|
|
|
}
|