2023-03-04 14:30:13 +08:00
|
|
|
|
import base from './base.js'
|
|
|
|
|
import MysInfo from './mys/mysInfo.js'
|
|
|
|
|
import gsCfg from './gsCfg.js'
|
|
|
|
|
import lodash from 'lodash'
|
|
|
|
|
import moment from 'moment'
|
|
|
|
|
import fs from 'node:fs'
|
2023-11-07 03:56:44 +08:00
|
|
|
|
import { Character } from '#miao.models'
|
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let dsz = '待实装'
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let imgFile = {}
|
|
|
|
|
|
|
|
|
|
export default class RoleIndex extends base {
|
2024-01-25 12:31:37 +08:00
|
|
|
|
constructor(e) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
super(e)
|
|
|
|
|
this.model = 'roleIndex'
|
|
|
|
|
this.other = gsCfg.getdefSet('role', 'other')
|
|
|
|
|
this.wother = gsCfg.getdefSet('weapon', 'other')
|
2023-08-29 21:02:57 +08:00
|
|
|
|
this.lable = gsCfg.getdefSet('role', 'index')
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
this.area = {
|
|
|
|
|
蒙德: 1,
|
|
|
|
|
璃月: 2,
|
|
|
|
|
雪山: 3,
|
|
|
|
|
稻妻: 4,
|
|
|
|
|
渊下宫: 5,
|
|
|
|
|
层岩巨渊: 6,
|
|
|
|
|
层岩地下: 7,
|
2023-08-21 03:01:22 +08:00
|
|
|
|
须弥: 8,
|
2024-02-01 23:30:18 +08:00
|
|
|
|
枫丹: 9,
|
|
|
|
|
沉玉谷: 10,
|
|
|
|
|
来歆山: 11,
|
|
|
|
|
沉玉谷·南陵: 12,
|
2024-04-24 17:51:52 +08:00
|
|
|
|
沉玉谷·上谷: 13,
|
|
|
|
|
旧日之海: 14
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
this.all_chest = 0
|
|
|
|
|
lodash.forEach(this.lable, (v, i) => {
|
|
|
|
|
if (i.includes('_chest')) this.all_chest += v
|
|
|
|
|
})
|
|
|
|
|
|
2023-03-04 14:30:13 +08:00
|
|
|
|
this.areaName = lodash.invert(this.area)
|
|
|
|
|
|
|
|
|
|
this.headIndexStyle = `<style> .head_box { background: url(${this.screenData.pluResPath}img/roleIndex/namecard/${lodash.random(1, 8)}.png) #f5f5f5; background-position-x: 30px; background-repeat: no-repeat; border-radius: 15px; font-family: tttgbnumber; padding: 10px 20px; position: relative; background-size: auto 101%; }</style>`
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
static async get(e) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let roleIndex = new RoleIndex(e)
|
|
|
|
|
return await roleIndex.getIndex()
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
async getIndex() {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let ApiData = {
|
|
|
|
|
index: '',
|
|
|
|
|
spiralAbyss: { schedule_type: 1 },
|
|
|
|
|
character: '',
|
|
|
|
|
basicInfo: ''
|
|
|
|
|
}
|
|
|
|
|
let res = await MysInfo.get(this.e, ApiData)
|
|
|
|
|
|
|
|
|
|
if (!res || res[0].retcode !== 0 || res[2].retcode !== 0) return false
|
|
|
|
|
|
|
|
|
|
let ret = []
|
|
|
|
|
res.forEach(v => ret.push(v.data))
|
|
|
|
|
|
|
|
|
|
/** 截图数据 */
|
|
|
|
|
let data = {
|
|
|
|
|
quality: 80,
|
|
|
|
|
...this.screenData,
|
|
|
|
|
...this.dealData(ret)
|
|
|
|
|
}
|
|
|
|
|
// console.log(...this.dealData(ret))
|
|
|
|
|
return data
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
dealData(data) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let [resIndex, resAbyss, resDetail, basicInfo] = data
|
|
|
|
|
|
|
|
|
|
let avatars = resDetail.avatars || []
|
|
|
|
|
let roleArr = avatars
|
|
|
|
|
|
|
|
|
|
for (let i in avatars) {
|
|
|
|
|
let rarity = avatars[i].rarity
|
|
|
|
|
let liveNum = avatars[i].actived_constellation_num
|
|
|
|
|
let level = avatars[i].level
|
|
|
|
|
let id = avatars[i].id - 10000000
|
|
|
|
|
|
|
|
|
|
if (rarity >= 5) {
|
|
|
|
|
rarity = 5
|
|
|
|
|
}
|
|
|
|
|
// 埃洛伊排到最后
|
|
|
|
|
if (rarity > 5) {
|
|
|
|
|
id = 0
|
|
|
|
|
}
|
|
|
|
|
// 增加神里排序
|
|
|
|
|
if (avatars[i].id == 10000002) {
|
|
|
|
|
id = 50
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (avatars[i].id == 10000005) {
|
|
|
|
|
avatars[i].name = '空'
|
|
|
|
|
liveNum = 0
|
|
|
|
|
level = 0
|
|
|
|
|
} else if (avatars[i].id == 10000007) {
|
|
|
|
|
avatars[i].name = '荧'
|
|
|
|
|
liveNum = 0
|
|
|
|
|
level = 0
|
|
|
|
|
}
|
|
|
|
|
avatars[i].sortLevel = level
|
|
|
|
|
// id倒序,最新出的角色拍前面
|
|
|
|
|
avatars[i].sort = rarity * 100000 + liveNum * 10000 + level * 100 + id
|
|
|
|
|
|
|
|
|
|
avatars[i].weapon.showName = this.wother.sortName[avatars[i].weapon.name] ?? avatars[i].weapon.name
|
|
|
|
|
|
|
|
|
|
avatars[i].costumesLogo = ''
|
|
|
|
|
if (avatars[i].costumes && avatars[i].costumes.length >= 1) {
|
|
|
|
|
for (let val of avatars[i].costumes) {
|
|
|
|
|
if (this.other.costumes.includes(val.name)) {
|
|
|
|
|
avatars[i].costumesLogo = 2
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let stats = resIndex.stats || {}
|
2023-08-29 21:02:57 +08:00
|
|
|
|
|
|
|
|
|
let percentage = lodash.round(
|
|
|
|
|
((stats.precious_chest_number +
|
2024-01-25 12:31:37 +08:00
|
|
|
|
stats.luxurious_chest_number +
|
|
|
|
|
stats.exquisite_chest_number +
|
|
|
|
|
stats.common_chest_number +
|
|
|
|
|
stats.magic_chest_number) /
|
|
|
|
|
this.all_chest) *
|
2023-08-29 21:02:57 +08:00
|
|
|
|
100,
|
|
|
|
|
1
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
let afterPercentage =
|
|
|
|
|
(percentage < 60
|
|
|
|
|
? 'D'
|
|
|
|
|
: percentage < 70
|
|
|
|
|
? 'C'
|
|
|
|
|
: percentage < 80
|
|
|
|
|
? 'B'
|
|
|
|
|
: percentage < 90
|
|
|
|
|
? 'A'
|
|
|
|
|
: 'S') + `[${percentage}%]`
|
|
|
|
|
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let line = [
|
|
|
|
|
[
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '成就', num: stats.achievement_number, extra: this.lable.achievement },
|
|
|
|
|
{ lable: '角色数', num: stats.avatar_number, extra: this.lable.avatar },
|
|
|
|
|
{ lable: '等级', num: resIndex?.role?.level ?? 0, extra: this.lable.level },
|
2023-03-04 14:30:13 +08:00
|
|
|
|
{
|
|
|
|
|
lable: '总宝箱',
|
|
|
|
|
num:
|
2023-08-21 03:13:42 +08:00
|
|
|
|
stats.precious_chest_number +
|
|
|
|
|
stats.luxurious_chest_number +
|
|
|
|
|
stats.exquisite_chest_number +
|
|
|
|
|
stats.common_chest_number +
|
2023-08-29 21:02:57 +08:00
|
|
|
|
stats.magic_chest_number,
|
2024-01-25 12:31:37 +08:00
|
|
|
|
extra: this.all_chest
|
2023-08-29 21:02:57 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
lable: '获取率',
|
|
|
|
|
num: afterPercentage,
|
|
|
|
|
color:
|
|
|
|
|
afterPercentage.substr(0, 1) == 'D'
|
|
|
|
|
? '#12a182'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'C'
|
|
|
|
|
? '#2775b6'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'B'
|
|
|
|
|
? '#806d9e'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'A'
|
|
|
|
|
? '#c04851'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'S'
|
|
|
|
|
? '#f86b1d'
|
|
|
|
|
: '',
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
[
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '华丽宝箱', num: stats.luxurious_chest_number, extra: this.lable.luxurious_chest },
|
|
|
|
|
{ lable: '珍贵宝箱', num: stats.precious_chest_number, extra: this.lable.precious_chest },
|
|
|
|
|
{ lable: '精致宝箱', num: stats.exquisite_chest_number, extra: this.lable.exquisite_chest },
|
|
|
|
|
{ lable: '普通宝箱', num: stats.common_chest_number, extra: this.lable.common_chest }
|
2023-03-04 14:30:13 +08:00
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
|
2023-08-21 03:13:42 +08:00
|
|
|
|
// 尘歌壶
|
|
|
|
|
let homesLevel = 0
|
|
|
|
|
// let homesItem = 0
|
|
|
|
|
if (resIndex.homes && resIndex.homes.length > 0) {
|
|
|
|
|
homesLevel = resIndex.homes[0].level
|
|
|
|
|
// homesItem = resIndex.homes[0].item_num
|
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
let worldExplorations = lodash.keyBy(resIndex.world_explorations, 'id')
|
|
|
|
|
|
|
|
|
|
let explor = []
|
|
|
|
|
let explor2 = []
|
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let expArr = ['枫丹', '须弥', '层岩巨渊', '渊下宫', '稻妻']
|
|
|
|
|
let expArr2 = ['雪山', '璃月', '蒙德']
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
for (let val of expArr) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let tmp = {
|
|
|
|
|
lable: val,
|
|
|
|
|
num: `${(worldExplorations[this.area[val]]?.exploration_percentage ?? 0) / 10}%`
|
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
explor.push(tmp)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (let val of expArr2) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let tmp = {
|
|
|
|
|
lable: val,
|
|
|
|
|
num: `${(worldExplorations[this.area[val]]?.exploration_percentage ?? 0) / 10}%`
|
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
explor2.push(tmp)
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
explor2.push({ lable: '家园等级', num: homesLevel })
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
line.push(explor)
|
|
|
|
|
line.push(explor2)
|
|
|
|
|
|
|
|
|
|
if (avatars.length > 0) {
|
2023-08-21 03:13:42 +08:00
|
|
|
|
// 重新排序
|
2023-03-04 14:30:13 +08:00
|
|
|
|
avatars = lodash.chain(avatars).orderBy(['sortLevel'], ['desc'])
|
|
|
|
|
if (this.e.msg.includes('角色')) {
|
|
|
|
|
avatars = avatars.slice(0, 12)
|
|
|
|
|
}
|
|
|
|
|
avatars = avatars.orderBy(['sort'], ['desc']).value()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 深渊
|
|
|
|
|
let abyss = this.abyssAll(roleArr, resAbyss)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
uid: this.e.uid,
|
|
|
|
|
saveId: this.e.uid,
|
|
|
|
|
activeDay: this.dayCount(stats.active_day_number),
|
|
|
|
|
line,
|
|
|
|
|
basicInfo,
|
|
|
|
|
avatars,
|
|
|
|
|
abyss,
|
|
|
|
|
headIndexStyle: this.headIndexStyle
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理深渊数据
|
2024-01-25 12:31:37 +08:00
|
|
|
|
abyssAll(roleArr, resAbyss) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let abyss = {}
|
|
|
|
|
|
|
|
|
|
if (roleArr.length <= 0) {
|
|
|
|
|
return abyss
|
|
|
|
|
}
|
|
|
|
|
if (resAbyss?.total_battle_times <= 0) {
|
|
|
|
|
return abyss
|
|
|
|
|
}
|
|
|
|
|
if (resAbyss?.reveal_rank.length <= 0) {
|
|
|
|
|
return abyss
|
|
|
|
|
}
|
|
|
|
|
// 打了三层才放出来
|
|
|
|
|
if (resAbyss?.floors.length <= 2) {
|
|
|
|
|
return abyss
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let startTime = moment(resAbyss.startTime)
|
|
|
|
|
let time = Number(startTime.month()) + 1
|
|
|
|
|
if (startTime.day() >= 15) {
|
|
|
|
|
time = time + '月下'
|
|
|
|
|
} else {
|
|
|
|
|
time = time + '月上'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let totalStar = 0
|
|
|
|
|
let star = []
|
|
|
|
|
for (let val of resAbyss.floors) {
|
|
|
|
|
if (val.index < 9) {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
totalStar += val.star
|
|
|
|
|
star.push(val.star)
|
|
|
|
|
}
|
|
|
|
|
totalStar = totalStar + '(' + star.join('-') + ')'
|
|
|
|
|
|
|
|
|
|
let dataName = ['damage', 'take_damage', 'defeat', 'normal_skill', 'energy_skill']
|
|
|
|
|
let data = []
|
|
|
|
|
let tmpRole = []
|
|
|
|
|
for (let val of dataName) {
|
|
|
|
|
if (resAbyss[`${val}_rank`].length <= 0) {
|
|
|
|
|
resAbyss[`${val}_rank`] = [
|
|
|
|
|
{
|
|
|
|
|
value: 0,
|
|
|
|
|
avatar_id: 10000007
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
data[val] = {
|
|
|
|
|
num: resAbyss[`${val}_rank`][0].value,
|
|
|
|
|
name: gsCfg.roleIdToName(resAbyss[`${val}_rank`][0].avatar_id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data[val].num > 1000) {
|
|
|
|
|
data[val].num = (data[val].num / 10000).toFixed(1)
|
|
|
|
|
data[val].num += ' w'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tmpRole.length < 4 && !tmpRole.includes(resAbyss[`${val}_rank`][0].avatar_id)) {
|
|
|
|
|
tmpRole.push(resAbyss[`${val}_rank`][0].avatar_id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let list = []
|
|
|
|
|
|
|
|
|
|
let avatar = lodash.keyBy(roleArr, 'id')
|
|
|
|
|
|
|
|
|
|
for (let val of resAbyss.reveal_rank) {
|
|
|
|
|
if (avatar[val.avatar_id]) {
|
|
|
|
|
val.life = avatar[val.avatar_id].actived_constellation_num
|
|
|
|
|
} else {
|
|
|
|
|
val.life = 0
|
|
|
|
|
}
|
|
|
|
|
val.name = gsCfg.roleIdToName(val.avatar_id)
|
|
|
|
|
list.push(val)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
time,
|
|
|
|
|
max_floor: resAbyss.max_floor,
|
|
|
|
|
totalStar,
|
|
|
|
|
list,
|
|
|
|
|
total_battle_times: resAbyss.total_battle_times,
|
|
|
|
|
...data
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
dayCount(num) {
|
2023-09-07 23:59:03 +08:00
|
|
|
|
let daysDifference = Math.floor((new Date() - new Date('2020-09-15')) / (1000 * 60 * 60 * 24)) + 1
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let days = Math.floor(num)
|
|
|
|
|
let msg = '活跃天数:' + days + `/${daysDifference}天`
|
2023-03-04 14:30:13 +08:00
|
|
|
|
return msg
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
async roleCard() {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
this.model = 'roleCard'
|
|
|
|
|
let res = await MysInfo.get(this.e, 'index')
|
|
|
|
|
|
|
|
|
|
if (!res || res.retcode !== 0) return false
|
|
|
|
|
|
|
|
|
|
return this.roleCardData(res.data)
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
roleCardData(res) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
this.initFile()
|
|
|
|
|
|
|
|
|
|
let stats = res.stats
|
|
|
|
|
let line = [
|
|
|
|
|
[
|
|
|
|
|
{ lable: '活跃天数', num: stats.active_day_number },
|
|
|
|
|
{ lable: '成就', num: stats.achievement_number },
|
|
|
|
|
{ lable: '角色数', num: stats.avatar_number },
|
|
|
|
|
{ lable: '等级', num: res?.role?.level ?? 0 },
|
|
|
|
|
{
|
|
|
|
|
lable: '总宝箱',
|
|
|
|
|
num:
|
|
|
|
|
stats.precious_chest_number +
|
|
|
|
|
stats.luxurious_chest_number +
|
|
|
|
|
stats.exquisite_chest_number +
|
|
|
|
|
stats.common_chest_number +
|
|
|
|
|
stats.magic_chest_number
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
{ lable: '华丽宝箱', num: stats.luxurious_chest_number },
|
|
|
|
|
{ lable: '珍贵宝箱', num: stats.precious_chest_number },
|
|
|
|
|
{ lable: '精致宝箱', num: stats.exquisite_chest_number },
|
|
|
|
|
{ lable: '普通宝箱', num: stats.common_chest_number },
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '奇馈宝箱', num: stats.magic_chest_number },
|
|
|
|
|
{ lable: '传送点', num: stats.way_point_number },
|
2023-03-04 14:30:13 +08:00
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
let explor1 = []
|
|
|
|
|
let explor2 = []
|
|
|
|
|
|
|
|
|
|
res.world_explorations = lodash.orderBy(res.world_explorations, ['id'], ['desc'])
|
|
|
|
|
|
|
|
|
|
for (let val of res.world_explorations) {
|
|
|
|
|
val.name = this.areaName[val.id] ? this.areaName[val.id] : lodash.truncate(val.name, { length: 6 })
|
|
|
|
|
|
|
|
|
|
let tmp = { lable: val.name, num: `${val.exploration_percentage / 10}%` }
|
|
|
|
|
|
|
|
|
|
if (explor1.length < 5) {
|
|
|
|
|
explor1.push(tmp)
|
|
|
|
|
} else {
|
|
|
|
|
explor2.push(tmp)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
explor2 = explor2.concat([
|
2023-08-31 04:02:36 +08:00
|
|
|
|
{ lable: '水神瞳', num: stats.hydroculus_number },
|
2023-08-21 03:01:22 +08:00
|
|
|
|
{ lable: '草神瞳', num: stats.dendroculus_number },
|
2023-03-04 14:30:13 +08:00
|
|
|
|
{ lable: '雷神瞳', num: stats.electroculus_number },
|
|
|
|
|
{ lable: '岩神瞳', num: stats.geoculus_number },
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '风神瞳', num: stats.anemoculus_number },
|
|
|
|
|
{ lable: '秘境', num: stats.domain_number }
|
2023-03-04 14:30:13 +08:00
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
line.push(explor1)
|
|
|
|
|
line.push(explor2.slice(0, 5))
|
|
|
|
|
|
|
|
|
|
let avatars = res.avatars
|
|
|
|
|
avatars = avatars.slice(0, 8)
|
|
|
|
|
|
|
|
|
|
let element = gsCfg.getdefSet('element', 'role')
|
|
|
|
|
for (let i in avatars) {
|
|
|
|
|
if (avatars[i].id == 10000005) {
|
|
|
|
|
avatars[i].name = '空'
|
|
|
|
|
}
|
|
|
|
|
if (avatars[i].id == 10000007) {
|
|
|
|
|
avatars[i].name = '荧'
|
|
|
|
|
}
|
|
|
|
|
avatars[i].element = element[avatars[i].name]
|
2023-11-07 03:56:44 +08:00
|
|
|
|
let char = Character.get(avatars[i].name)
|
|
|
|
|
avatars[i].img = char.imgs?.gacha
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
saveId: this.e.uid,
|
|
|
|
|
uid: this.e.uid,
|
|
|
|
|
name: this.e.sender.card.replace(this.e.uid, '').trim(),
|
|
|
|
|
user_id: this.e.user_id,
|
|
|
|
|
line,
|
|
|
|
|
avatars,
|
|
|
|
|
bg: lodash.random(1, 3),
|
|
|
|
|
...this.screenData
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
async roleExplore() {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
this.model = 'roleExplore'
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let ApiData = {
|
|
|
|
|
index: '',
|
|
|
|
|
basicInfo: ''
|
|
|
|
|
}
|
|
|
|
|
let res = await MysInfo.get(this.e, ApiData)
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
if (!res || res[0].retcode !== 0) return false
|
|
|
|
|
|
|
|
|
|
let ret = []
|
|
|
|
|
res.forEach((v) => ret.push(v.data))
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
return this.roleExploreData(ret)
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
async roleExploreData(res) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let [resIndex, basicInfo] = res
|
|
|
|
|
|
|
|
|
|
let stats = resIndex.stats
|
|
|
|
|
let percentage = lodash.round(
|
|
|
|
|
((stats.precious_chest_number +
|
2024-01-25 12:31:37 +08:00
|
|
|
|
stats.luxurious_chest_number +
|
|
|
|
|
stats.exquisite_chest_number +
|
|
|
|
|
stats.common_chest_number +
|
|
|
|
|
stats.magic_chest_number) *
|
2023-08-29 21:02:57 +08:00
|
|
|
|
100) /
|
2024-01-25 12:31:37 +08:00
|
|
|
|
this.all_chest,
|
2023-08-29 21:02:57 +08:00
|
|
|
|
2
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
let afterPercentage =
|
|
|
|
|
percentage < 60
|
|
|
|
|
? 'D'
|
|
|
|
|
: (percentage < 70
|
2024-01-25 12:31:37 +08:00
|
|
|
|
? 'C'
|
|
|
|
|
: percentage < 80
|
|
|
|
|
? 'B'
|
|
|
|
|
: percentage < 90
|
|
|
|
|
? 'A'
|
|
|
|
|
: 'S') + `[${percentage}%]`
|
2023-08-29 21:02:57 +08:00
|
|
|
|
|
2023-09-07 23:59:03 +08:00
|
|
|
|
let daysDifference = Math.floor((new Date() - new Date('2020-09-15')) / (1000 * 60 * 60 * 24)) + 1
|
2023-08-29 21:02:57 +08:00
|
|
|
|
|
2023-03-04 14:30:13 +08:00
|
|
|
|
let line = [
|
|
|
|
|
[
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '角色数', num: stats.avatar_number, extra: this.lable.avatar },
|
|
|
|
|
{ lable: '传送点', num: stats.way_point_number, extra: this.lable.way_point },
|
|
|
|
|
{ lable: '秘境', num: stats.domain_number, extra: this.lable.domain },
|
|
|
|
|
{ lable: '成就', num: stats.achievement_number, extra: this.lable.achievement },
|
|
|
|
|
{ lable: '活跃天数', num: stats.active_day_number, extra: `${daysDifference}` }
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
{ lable: '深境螺旋', num: stats.spiral_abyss },
|
2023-03-04 14:30:13 +08:00
|
|
|
|
{
|
2023-08-29 21:02:57 +08:00
|
|
|
|
lable: '宝箱总数',
|
2023-03-04 14:30:13 +08:00
|
|
|
|
num:
|
2023-08-21 03:13:42 +08:00
|
|
|
|
stats.precious_chest_number +
|
|
|
|
|
stats.luxurious_chest_number +
|
|
|
|
|
stats.exquisite_chest_number +
|
|
|
|
|
stats.common_chest_number +
|
2023-08-29 21:02:57 +08:00
|
|
|
|
stats.magic_chest_number,
|
2024-01-25 12:31:37 +08:00
|
|
|
|
extra: this.all_chest
|
2023-08-29 21:02:57 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
lable: '宝箱获取率',
|
|
|
|
|
num: afterPercentage,
|
|
|
|
|
color:
|
|
|
|
|
afterPercentage.substr(0, 1) == 'D'
|
|
|
|
|
? '#12a182'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'C'
|
|
|
|
|
? '#2775b6'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'B'
|
|
|
|
|
? '#806d9e'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'A'
|
|
|
|
|
? '#c04851'
|
|
|
|
|
: afterPercentage.substr(0, 1) == 'S'
|
|
|
|
|
? '#f86b1d'
|
|
|
|
|
: '',
|
|
|
|
|
},
|
|
|
|
|
{ lable: '普通宝箱', num: stats.common_chest_number, extra: this.lable.common_chest },
|
|
|
|
|
{ lable: '精致宝箱', num: stats.exquisite_chest_number, extra: this.lable.exquisite_chest },
|
2023-03-04 14:30:13 +08:00
|
|
|
|
],
|
|
|
|
|
[
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '珍贵宝箱', num: stats.precious_chest_number, extra: this.lable.precious_chest },
|
|
|
|
|
{ lable: '华丽宝箱', num: stats.luxurious_chest_number, extra: this.lable.luxurious_chest },
|
|
|
|
|
{ lable: '奇馈宝箱', num: stats.magic_chest_number, extra: this.lable.magic_chest },
|
|
|
|
|
{ lable: '风神瞳', num: stats.anemoculus_number, extra: this.lable.anemoculus },
|
|
|
|
|
{ lable: '岩神瞳', num: stats.geoculus_number, extra: this.lable.geoculus }
|
2023-03-04 14:30:13 +08:00
|
|
|
|
],
|
|
|
|
|
[
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '雷神瞳', num: stats.electroculus_number, extra: this.lable.electroculus },
|
|
|
|
|
{ lable: '草神瞳', num: stats.dendroculus_number, extra: this.lable.dendroculus },
|
|
|
|
|
{ lable: '水神瞳', num: stats.hydroculus_number, extra: this.lable.hydroculus },
|
|
|
|
|
{ lable: '火神瞳', num: `${dsz}`, extra: 0 },
|
|
|
|
|
{ lable: '冰神瞳', num: `${dsz}`, extra: 0 }
|
2023-08-21 03:01:22 +08:00
|
|
|
|
],
|
2023-03-04 14:30:13 +08:00
|
|
|
|
]
|
|
|
|
|
// 尘歌壶
|
2023-08-29 21:02:57 +08:00
|
|
|
|
if (resIndex.homes && resIndex.homes.length > 0) {
|
2023-08-21 03:13:42 +08:00
|
|
|
|
line.push([
|
2023-08-29 21:02:57 +08:00
|
|
|
|
{ lable: '家园等级', num: resIndex.homes[0].level },
|
|
|
|
|
{ lable: '最高仙力', num: resIndex.homes[0].comfort_num },
|
|
|
|
|
{ lable: '洞天名称', num: resIndex.homes[0].comfort_level_name },
|
|
|
|
|
{ lable: '获得摆设', num: resIndex.homes[0].item_num },
|
|
|
|
|
{ lable: '历史访客', num: resIndex.homes[0].visit_num }
|
2023-08-21 03:13:42 +08:00
|
|
|
|
])
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
resIndex.world_explorations = lodash.orderBy(resIndex.world_explorations, ['id'], ['desc'])
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
let explor = []
|
2023-08-29 21:02:57 +08:00
|
|
|
|
for (let val of resIndex.world_explorations) {
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if ([7, 11, 12, 13].includes(val.id)) continue
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
val.name = this.areaName[val.id] ? this.areaName[val.id] : lodash.truncate(val.name, { length: 6 })
|
|
|
|
|
|
|
|
|
|
let tmp = {
|
|
|
|
|
name: val.name,
|
|
|
|
|
line: [
|
|
|
|
|
{
|
|
|
|
|
name: val.name,
|
|
|
|
|
text: `${val.exploration_percentage / 10}%`
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if (val.id == 10) tmp.line = []
|
|
|
|
|
|
2023-11-07 03:56:44 +08:00
|
|
|
|
if (['蒙德', '璃月', '稻妻', '须弥', '枫丹'].includes(val.name)) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
tmp.line.push({ name: '声望', text: `${val.level}级` })
|
2023-11-07 03:56:44 +08:00
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if ([6, 10].includes(val.id)) {
|
|
|
|
|
let oidArr = [7]
|
|
|
|
|
if (val.id == 10) oidArr = [13, 12, 11]
|
|
|
|
|
for (let oid of oidArr) {
|
|
|
|
|
let underground = lodash.find(resIndex.world_explorations, function (o) {
|
|
|
|
|
return o.id == oid
|
2023-03-04 14:30:13 +08:00
|
|
|
|
})
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if (underground) {
|
|
|
|
|
tmp.line.push({
|
|
|
|
|
name: this.areaName[underground.id],
|
|
|
|
|
text: `${underground.exploration_percentage / 10}%`
|
|
|
|
|
})
|
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if (['雪山', '稻妻', '层岩巨渊', '须弥', '枫丹', '沉玉谷'].includes(val.name)) {
|
2023-11-07 03:56:44 +08:00
|
|
|
|
if (val.offerings[0].name.includes('流明石')) {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
val.offerings[0].name = '流明石'
|
2023-11-07 03:56:44 +08:00
|
|
|
|
}
|
2023-08-29 21:02:57 +08:00
|
|
|
|
|
2023-11-07 03:56:44 +08:00
|
|
|
|
if (val.offerings[0].name.includes('露景泉')) {
|
2023-08-21 03:13:42 +08:00
|
|
|
|
val.offerings[0].name = '露景泉'
|
2023-11-07 03:56:44 +08:00
|
|
|
|
}
|
2023-08-29 21:02:57 +08:00
|
|
|
|
|
2024-02-01 23:30:18 +08:00
|
|
|
|
if (val.offerings[0].name == '桓那兰那的梦之树') {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
val.offerings[0].name = '梦之树'
|
2023-11-07 03:56:44 +08:00
|
|
|
|
}
|
2023-03-04 14:30:13 +08:00
|
|
|
|
|
|
|
|
|
tmp.line.push({
|
|
|
|
|
name: val.offerings[0].name,
|
|
|
|
|
text: `${val.offerings[0].level}级`
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
explor.push(tmp)
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-29 21:02:57 +08:00
|
|
|
|
let avatar = ''
|
2023-11-07 03:56:44 +08:00
|
|
|
|
if (this.e.member?.getAvatarUrl) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
avatar = await this.e.member.getAvatarUrl()
|
2023-11-07 03:56:44 +08:00
|
|
|
|
} else if (this.e.friend?.getAvatarUrl) {
|
2023-08-29 21:02:57 +08:00
|
|
|
|
avatar = await this.e.friend.getAvatarUrl()
|
2023-11-07 03:56:44 +08:00
|
|
|
|
} else {
|
2023-09-01 12:20:01 +08:00
|
|
|
|
avatar = resIndex.role.game_head_icon
|
2023-11-07 03:56:44 +08:00
|
|
|
|
}
|
2023-09-07 23:59:03 +08:00
|
|
|
|
|
2023-03-04 14:30:13 +08:00
|
|
|
|
return {
|
|
|
|
|
saveId: this.e.uid,
|
|
|
|
|
uid: this.e.uid,
|
|
|
|
|
activeDay: this.dayCount(stats.active_day_number),
|
|
|
|
|
line,
|
|
|
|
|
explor,
|
2023-08-29 21:02:57 +08:00
|
|
|
|
basicInfo,
|
2023-03-04 14:30:13 +08:00
|
|
|
|
headIndexStyle: this.headIndexStyle,
|
2023-08-29 21:02:57 +08:00
|
|
|
|
...this.screenData,
|
|
|
|
|
gamename: resIndex?.role?.nickname ?? 0,
|
|
|
|
|
avatar,
|
|
|
|
|
gameavatar: resIndex?.role?.avatar ?? 0,
|
|
|
|
|
gamelevel: resIndex?.role?.level ?? 0,
|
|
|
|
|
gamefwq: resIndex?.role?.region
|
2023-03-04 14:30:13 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-25 12:31:37 +08:00
|
|
|
|
initFile() {
|
2023-03-04 14:30:13 +08:00
|
|
|
|
if (imgFile['刻晴']) return imgFile
|
|
|
|
|
let path = './plugins/genshin/resources/img/gacha/'
|
|
|
|
|
let character = fs.readdirSync(path + 'character/')
|
|
|
|
|
let weapon = fs.readdirSync(path + 'weapon/')
|
|
|
|
|
|
|
|
|
|
let nameSet = (v) => {
|
|
|
|
|
let name = v.split('.')
|
|
|
|
|
imgFile[name[0]] = v
|
|
|
|
|
}
|
|
|
|
|
character.forEach(v => nameSet(v))
|
|
|
|
|
weapon.forEach(v => nameSet(v))
|
|
|
|
|
return imgFile
|
|
|
|
|
}
|
|
|
|
|
}
|