一些Bugfix

This commit is contained in:
Kokomi 2023-02-10 21:53:57 +08:00
parent a56e1cd81d
commit 7272da906d
4 changed files with 91 additions and 88 deletions

View File

@ -177,10 +177,10 @@ const ProfileChange = {
return source return source
} }
let cuid = cfg.uid || uid let cuid = cfg.uid || uid
let cPlayer = Player.create(uid)
let id = cfg.char || source.id let id = cfg.char || source.id
let key = cuid + ':' + id let key = cuid + ':' + id
if (!profiles[key]) { if (!profiles[key]) {
let cPlayer = Player.create(cuid)
profiles[key] = cPlayer.getProfile(id) || {} profiles[key] = cPlayer.getProfile(id) || {}
} }
return profiles[key]?.id ? profiles[key] : source return profiles[key]?.id ? profiles[key] : source

View File

@ -199,7 +199,7 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
let msgRes = await Common.render('character/profile-detail', { let msgRes = await Common.render('character/profile-detail', {
save_id: uid, save_id: uid,
uid, uid,
data: avatar.getData('name,abbr,cons,level,weapon,talent,dataSource,updateTime'), data: profile.getData('name,abbr,cons,level,weapon,talent,dataSource,updateTime'),
attr, attr,
elem: char.elem, elem: char.elem,
dmgData, dmgData,

View File

@ -9,7 +9,7 @@ import Profile from './player-lib/Profile.js'
const charKey = 'name,abbr,sName,star,imgs,face,side,gacha,weaponTypeName'.split(',') const charKey = 'name,abbr,sName,star,imgs,face,side,gacha,weaponTypeName'.split(',')
export default class AvatarData extends Base { export default class AvatarData extends Base {
constructor (ds = {}, source) { constructor(ds = {}, source) {
super() super()
let char = Character.get({ id: ds.id, elem: ds.elem }) let char = Character.get({ id: ds.id, elem: ds.elem })
if (!char) { if (!char) {
@ -21,11 +21,75 @@ export default class AvatarData extends Base {
this.setAvatar(ds, source) this.setAvatar(ds, source)
} }
initArtis () { /**
this.artis = new AvatarArtis(this.id) * 当前数据是否需要更新天赋
* @returns {boolean}
*/
get needRefreshTalent() {
// 不存在天赋数据
if (!this.hasTalent) {
return true
}
// 超过2个小时的天赋数据进行请求
return (new Date() * 1) - this._talent > 3600 * 2 * 1000
} }
static create (ds, source) { get hasTalent() {
return this.talent && !lodash.isEmpty(this.talent) && !!this._talent
}
get name() {
return this.char?.name || ''
}
// 是否是合法面板数据
get isProfile() {
return Profile.isProfile(this)
}
get costume() {
let costume = this._costume
if (lodash.isArray(costume)) {
costume = costume[0]
}
return costume
}
get originalTalent() {
return lodash.mapValues(this.talent, (ds) => ds.original)
}
/**
* 获取圣遗物套装属性
* @returns {boolean|*|{imgs: *[], names: *[], sets: {}, abbrs: *[], sName: string, name: (string|*)}|{}}
*/
get artisSet() {
return this.artis.getSetData()
}
get dataSource() {
return {
enka: 'Enka.Network',
miao: '喵喵Api',
mys: '米游社'
}[this._source] || this._source
}
get updateTime() {
let time = this._time
if (!time) {
return ''
}
if (lodash.isString(time)) {
return moment(time).format('MM-DD HH:mm')
}
if (lodash.isNumber(time)) {
return moment(new Date(time)).format('MM-DD HH:mm')
}
return ''
}
static create(ds, source) {
let avatar = new AvatarData(ds) let avatar = new AvatarData(ds)
if (!avatar) { if (!avatar) {
return false return false
@ -33,13 +97,17 @@ export default class AvatarData extends Base {
return avatar return avatar
} }
_get (key) { initArtis() {
this.artis = new AvatarArtis(this.id)
}
_get(key) {
if (charKey.includes(key)) { if (charKey.includes(key)) {
return this.char[key] return this.char[key]
} }
} }
setAvatar (ds, source = '') { setAvatar(ds, source = '') {
this._now = new Date() * 1 this._now = new Date() * 1
this.setBasic(ds, source) this.setBasic(ds, source)
ds.weapon && this.setWeapon(ds.weapon) ds.weapon && this.setWeapon(ds.weapon)
@ -53,7 +121,7 @@ export default class AvatarData extends Base {
* @param ds * @param ds
* @param source * @param source
*/ */
setBasic (ds = {}, source = '') { setBasic(ds = {}, source = '') {
const now = this._now || (new Date()) * 1 const now = this._now || (new Date()) * 1
this.level = ds.lv || ds.level || this.level || 1 this.level = ds.lv || ds.level || this.level || 1
this.cons = ds.cons || this.cons || 0 this.cons = ds.cons || this.cons || 0
@ -79,21 +147,24 @@ export default class AvatarData extends Base {
} }
} }
setWeapon (ds = {}) { setWeapon(ds = {}) {
let w = Weapon.get(ds.name) || {} let w = Weapon.get(ds.name)
if (!w) {
return false
}
this.weapon = { this.weapon = {
name: ds.name, name: ds.name,
level: ds.level || ds.lv || 1, level: ds.level || ds.lv || 1,
promote: lodash.isUndefined(ds.promote) ? AttrCalc.calcPromote(ds.level || ds.lv || 1) : (ds.promote || 0), promote: lodash.isUndefined(ds.promote) ? AttrCalc.calcPromote(ds.level || ds.lv || 1) : (ds.promote || 0),
affix: ds.affix, affix: ds.affix,
...w?.getData('star,abbr,type,img') ...w.getData('star,abbr,type,img')
} }
if (this.weapon.level < 20) { if (this.weapon.level < 20) {
this.weapon.promote = 0 this.weapon.promote = 0
} }
} }
setTalent (ds = {}, mode = 'original', source = '') { setTalent(ds = {}, mode = 'original', source = '') {
const now = this._now || (new Date()) * 1 const now = this._now || (new Date()) * 1
let ret = this.char.getAvatarTalent(ds, this.cons, mode) let ret = this.char.getAvatarTalent(ds, this.cons, mode)
this.talent = ret || this.talent this.talent = ret || this.talent
@ -104,37 +175,11 @@ export default class AvatarData extends Base {
} }
} }
/** setArtis(ds, source) {
* 当前数据是否需要更新天赋
* @returns {boolean}
*/
get needRefreshTalent () {
// 不存在天赋数据
if (!this.hasTalent) {
return true
}
// 超过2个小时的天赋数据进行请求
return (new Date() * 1) - this._talent > 3600 * 2 * 1000
}
setArtis (ds, source) {
this.artis.setArtisData(ds.artis, source) this.artis.setArtisData(ds.artis, source)
} }
get hasTalent () { getProfile() {
return this.talent && !lodash.isEmpty(this.talent) && !!this._talent
}
get name () {
return this.char?.name || ''
}
// 是否是合法面板数据
get isProfile () {
return Profile.isProfile(this)
}
getProfile () {
if (!this.isProfile) { if (!this.isProfile) {
return false return false
} }
@ -142,24 +187,12 @@ export default class AvatarData extends Base {
} }
// 判断当前profileData是否具备有效圣遗物信息 // 判断当前profileData是否具备有效圣遗物信息
hasArtis () { hasArtis() {
return this.isProfile && this.artis.length > 0 return this.isProfile && this.artis.length > 0
} }
get costume () {
let costume = this._costume
if (lodash.isArray(costume)) {
costume = costume[0]
}
return costume
}
get originalTalent () {
return lodash.mapValues(this.talent, (ds) => ds.original)
}
// toJSON 供保存使用 // toJSON 供保存使用
toJSON () { toJSON() {
return { return {
...this.getData('name,id,elem,level,promote,fetter,costume,cons,talent:originalTalent'), ...this.getData('name,id,elem,level,promote,fetter,costume,cons,talent:originalTalent'),
weapon: Data.getData(this.weapon, 'name,level,promote,affix'), weapon: Data.getData(this.weapon, 'name,level,promote,affix'),
@ -167,41 +200,11 @@ export default class AvatarData extends Base {
} }
} }
getDetail (keys = '') { getDetail(keys = '') {
return this.getData(keys || 'id,name,level,star,cons,fetter,elem,face,side,gacha,abbr,weapon,talent,artisSet') || {} return this.getData(keys || 'id,name,level,star,cons,fetter,elem,face,side,gacha,abbr,weapon,talent,artisSet') || {}
} }
/** getArtisDetail() {
* 获取圣遗物套装属性
* @returns {boolean|*|{imgs: *[], names: *[], sets: {}, abbrs: *[], sName: string, name: (string|*)}|{}}
*/
get artisSet () {
return this.artis.getSetData()
}
getArtisDetail () {
return this.artis.getDetail() return this.artis.getDetail()
} }
get dataSource () {
return {
enka: 'Enka.Network',
miao: '喵喵Api',
mys: '米游社'
}[this._source] || this._source
}
get updateTime () {
let time = this._time
if (!time) {
return ''
}
if (lodash.isString(time)) {
return moment(time).format('MM-DD HH:mm')
}
if (lodash.isNumber(time)) {
return moment(new Date(time)).format('MM-DD HH:mm')
}
return ''
}
} }

View File

@ -482,7 +482,7 @@ export const attrMap = {
ATTACK_PERCENT: 'atk', ATTACK_PERCENT: 'atk',
DEFENSE: 'defPlus', DEFENSE: 'defPlus',
DEFENSE_PERCENT: 'def', DEFENSE_PERCENT: 'def',
FIRE_ADD_HURT: '', FIRE_ADD_HURT: 'pyro',
ICE_ADD_HURT: 'cryo', ICE_ADD_HURT: 'cryo',
ROCK_ADD_HURT: 'geo', ROCK_ADD_HURT: 'geo',
ELEC_ADD_HURT: 'electro', ELEC_ADD_HURT: 'electro',