miao-plugin/models/artis/Artis.js

136 lines
3.4 KiB
JavaScript
Raw Normal View History

2023-10-18 13:19:12 +00:00
/**
* 面板圣遗物
*/
import lodash from 'lodash'
import { Artifact, ArtifactSet, Character } from '#miao.models'
import { Data, Format } from '#miao'
import ArtisMark from './ArtisMark.js'
import { attrMap as attrMapGS } from '../../resources/meta/artifact/index.js'
import { attrMap as attrMapSR } from '../../resources/meta-sr/artifact/index.js'
2023-10-18 17:01:11 +00:00
import ArtisMarkCfg from './ArtisMarkCfg.js'
2023-10-18 13:19:12 +00:00
import ArtisBase from './ArtisBase.js'
import ArtisAttr from './ArtisAttr.js'
2023-10-18 13:19:12 +00:00
export default class Artis extends ArtisBase {
2023-10-18 17:01:11 +00:00
constructor (game = 'gs', isProfile = false) {
2023-10-18 13:19:12 +00:00
super(game)
this.isProfile = !!isProfile
}
// 有圣遗物词条
get hasAttr () {
return ArtisAttr.hasAttr(this)
2023-10-18 13:19:12 +00:00
}
getMarkDetail (profile, withDetail = true) {
return ArtisMark.getMarkDetail(profile, withDetail)
2023-10-18 13:19:12 +00:00
}
setArtis (idx = 1, ds = {}) {
2023-10-18 17:01:11 +00:00
idx = idx.toString().replace('arti', '') * 1 || 1
super.setArtis(idx, ds)
if (!this.isProfile) {
return
}
2023-10-18 13:19:12 +00:00
let arti = this.artis[idx]
if (!ds.attrIds || !ds.mainId) {
return false
}
arti.mainId = ds.mainId
arti.attrIds = ds.attrIds
2023-10-18 17:01:11 +00:00
let artiObj = Artifact.get(arti.id || arti.name, this.game)
2023-10-18 13:19:12 +00:00
if (!artiObj) {
return false
}
2023-10-18 17:01:11 +00:00
let attr = artiObj.getAttrData(arti, idx, this.game)
2023-10-18 13:19:12 +00:00
if (!attr) {
console.log('attr id error', ds.main, ds.mainId, idx, arti.level, arti.star)
return false
}
2023-10-18 17:01:11 +00:00
arti.main = attr.main
arti.attrs = attr.attrs
2023-10-18 13:19:12 +00:00
}
// 获取保存数据
toJSON () {
let ret = {}
this.eachIdx((ds, idx) => {
let tmp = this.isGs ? { name: ds.name } : { id: ds.id }
tmp.level = ds.level || 1
tmp.star = ds.star || 5
ret[idx] = tmp
// 如果不为面板数据则不保存mainId和attrIds
if (!this.isProfile) {
return true
}
2023-10-18 17:01:11 +00:00
tmp.mainId = ds.mainId || ds.main?.id
2023-10-18 13:19:12 +00:00
if (this.isSr) {
tmp.attrIds = []
lodash.forEach(ds.attrs, (as) => {
tmp.attrIds.push([as?.id || '', as?.count || 1, as?.step || 0].join(','))
})
} else {
tmp.attrIds = ds.attrIds
}
})
return ret
}
// 获取指定idx的主词条
getMainAttr (idx = '') {
if (!idx) {
let ret = {}
this.eachIdx((arti, idx) => {
ret[idx] = this.getMainAttr(idx)
})
return ret
}
let main = this.artis[idx]?.main
if (!main) {
return ''
}
return main.key || ''
}
is (check, pos = '') {
if (pos) {
return this.isAttr(check, pos)
}
let sets = this.getSetData()?.abbrs || []
let ret = false
Data.eachStr(check, (s) => {
if (sets.includes(s)) {
ret = true
return false
}
})
return ret
}
isAttr (attr, pos = '') {
let mainAttr = this.getMainAttr()
let check = true
pos = pos || this.isGs ? '3,4,5' : '3,4,5,6'
let dmgIdx = this.isGs ? 4 : 5
Data.eachStr(pos.toString(), (p) => {
let attrs = attr.split(',')
if (!attrs.includes(mainAttr[p]) && (p === dmgIdx && !attrs.includes('dmg') && Format.isElem(mainAttr[p]))) {
check = false
return false
}
})
return check
}
isSameArtis (target) {
let k = (ds) => [ds?.name || '', ds?.level || '', ds?.star || ''].join('|')
let ret = true
this.eachIdx((ds, idx) => {
if (k[ds] !== k(target[idx])) {
return ret = false
}
})
return ret
}
2023-10-18 13:19:12 +00:00
}