武器、圣遗物资源采用webp格式,资源引用逻辑更新
@ -1,9 +1,10 @@
|
|||||||
# 2.0 Alpha.6
|
# 2.0 Alpha.7
|
||||||
|
|
||||||
|
* 武器、圣遗物资源采用webp格式
|
||||||
|
* 资源引用逻辑更新,可能会导致一些展示异常,如遇问题请反馈
|
||||||
* 一些已知Bug修复
|
* 一些已知Bug修复
|
||||||
* `#面板练度统计` 样式微调
|
|
||||||
|
|
||||||
# 2.0 Alpha.1~5
|
# 2.0 Alpha.1~6
|
||||||
|
|
||||||
* `#面板练度统计` 功能调整
|
* `#面板练度统计` 功能调整
|
||||||
* 在未绑定CK时,使用本地面板数据展示练度信息
|
* 在未绑定CK时,使用本地面板数据展示练度信息
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import { autoRefresh } from './profile-common.js'
|
import { autoRefresh } from './profile-common.js'
|
||||||
import { Common, Format, Profile } from '../../components/index.js'
|
import { Common, Format, Profile } from '../../components/index.js'
|
||||||
import { MysApi } from '../../models/index.js'
|
import { MysApi, Avatar } from '../../models/index.js'
|
||||||
|
|
||||||
export async function renderProfile (e, char, mode = 'profile', params = {}) {
|
export async function renderProfile (e, char, mode = 'profile', params = {}) {
|
||||||
let selfUser = await MysApi.initUser(e)
|
let selfUser = await MysApi.initUser(e)
|
||||||
@ -22,6 +22,7 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let profile = Profile.get(uid, char.id)
|
let profile = Profile.get(uid, char.id)
|
||||||
|
|
||||||
if (!profile || !profile.hasData) {
|
if (!profile || !profile.hasData) {
|
||||||
if (await refresh()) {
|
if (await refresh()) {
|
||||||
return true
|
return true
|
||||||
@ -30,6 +31,7 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
let avatar = new Avatar(profile)
|
||||||
char = profile.char || char
|
char = profile.char || char
|
||||||
let a = profile.attr
|
let a = profile.attr
|
||||||
let c = Format.comma
|
let c = Format.comma
|
||||||
@ -86,11 +88,9 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
|
|||||||
return await Common.render('character/profile-detail', {
|
return await Common.render('character/profile-detail', {
|
||||||
save_id: uid,
|
save_id: uid,
|
||||||
uid,
|
uid,
|
||||||
data: profile.getData('cons,level,weapon,dataSource,updateTime'),
|
data: avatar.getData('name,cons,level,weapon,talent,dataSource,updateTime'),
|
||||||
attr,
|
attr,
|
||||||
name: char.name,
|
|
||||||
elem: char.elem,
|
elem: char.elem,
|
||||||
talent: char.getAvatarTalent(profile.talent, profile.cons),
|
|
||||||
dmgData,
|
dmgData,
|
||||||
dmgMsg,
|
dmgMsg,
|
||||||
dmgRet: dmgCalc.dmgRet || false,
|
dmgRet: dmgCalc.dmgRet || false,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import HutaoApi from '../stat/HutaoApi.js';
|
import HutaoApi from '../stat/HutaoApi.js';
|
||||||
import lodash from 'lodash';
|
import lodash from 'lodash';
|
||||||
import { Format } from '../../components/index.js';
|
import { Format } from '../../components/index.js';
|
||||||
import { Artifact, Weapon } from '../../models/index.js';
|
import { Artifact, ArtifactSet, Weapon } from '../../models/index.js';
|
||||||
|
|
||||||
let CharWiki = {
|
let CharWiki = {
|
||||||
// 命座持有
|
// 命座持有
|
||||||
@ -46,22 +46,21 @@ let CharWiki = {
|
|||||||
let au = (await HutaoApi.getArtisUsage()).data || {}
|
let au = (await HutaoApi.getArtisUsage()).data || {}
|
||||||
let artis = []
|
let artis = []
|
||||||
if (au[id]) {
|
if (au[id]) {
|
||||||
let sets = {}
|
|
||||||
lodash.forEach(au[id], (ds) => {
|
lodash.forEach(au[id], (ds) => {
|
||||||
let names = []
|
let imgs = []
|
||||||
let abbrs = []
|
let abbrs = []
|
||||||
let ss = ds.sets.split(',')
|
let ss = ds.sets.split(',')
|
||||||
lodash.forEach(ss, (t) => {
|
lodash.forEach(ss, (t) => {
|
||||||
t = t.split(':')
|
t = t.split(':')
|
||||||
let tmp = Artifact.getArtiBySet(t[0])
|
let artiSet = ArtifactSet.get(t[0])
|
||||||
if (tmp) {
|
if (artiSet) {
|
||||||
names.push(tmp)
|
imgs.push(artiSet.img)
|
||||||
abbrs.push(Artifact.getAbbrBySet(t[0]) + (ss.length === 1 ? t[1] : ''))
|
abbrs.push(artiSet.abbr + (ss.length === 1 ? t[1] : ''))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
artis.push({
|
artis.push({
|
||||||
sets: names,
|
imgs,
|
||||||
title: abbrs.join('+'),
|
title: abbrs.join('+'),
|
||||||
value: ds.value
|
value: ds.value
|
||||||
})
|
})
|
||||||
|
@ -11,7 +11,7 @@ export const artiIdx = {
|
|||||||
理之冠: 5
|
理之冠: 5
|
||||||
}
|
}
|
||||||
|
|
||||||
let relis = Data.readJSON('resources/meta/reliquaries/data.json')
|
let relis = Data.readJSON('resources/meta/artifact/data.json')
|
||||||
let setMap = {}
|
let setMap = {}
|
||||||
|
|
||||||
lodash.forEach(relis, (ds) => {
|
lodash.forEach(relis, (ds) => {
|
||||||
|
@ -1,51 +1,63 @@
|
|||||||
import { attrMap } from '../resources/meta/reliquaries/artis-mark.js'
|
import Base from './Base.js'
|
||||||
import lodash from 'lodash'
|
import { ArtifactSet } from './index.js'
|
||||||
import { Data } from '../components/index.js'
|
import { abbr, artiMap, attrMap } from '../resources/meta/artifact/index.js'
|
||||||
|
|
||||||
let artisMap = {}
|
class Artifact extends Base {
|
||||||
const abbr = await Data.importDefault('resources/meta/reliquaries/abbr.js')
|
constructor (name) {
|
||||||
|
super()
|
||||||
async function init () {
|
let cache = this._getCache(`arti:${name}`)
|
||||||
let artis = Data.readJSON('resources/meta/reliquaries/data.json')
|
if (cache) {
|
||||||
|
return cache
|
||||||
lodash.forEach(artis, (ds) => {
|
|
||||||
artisMap[ds.name] = ds
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
await init()
|
|
||||||
|
|
||||||
let Artifact = {
|
|
||||||
|
|
||||||
// 根据圣遗物名称获取套装
|
|
||||||
getSetByArti (name) {
|
|
||||||
for (let idx in artisMap) {
|
|
||||||
for (let idx2 in artisMap[idx].sets) {
|
|
||||||
if (artisMap[idx].sets[idx2].name === name) {
|
|
||||||
return artisMap[idx]
|
|
||||||
}
|
}
|
||||||
|
let data = artiMap[name]
|
||||||
|
if (!data) {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
this.name = name
|
||||||
|
this.meta = data
|
||||||
|
return this._cache()
|
||||||
|
}
|
||||||
|
|
||||||
|
get artiSet () {
|
||||||
|
return ArtifactSet.get(this.set)
|
||||||
|
}
|
||||||
|
|
||||||
|
get setName () {
|
||||||
|
return this.set
|
||||||
|
}
|
||||||
|
|
||||||
|
static get (name) {
|
||||||
|
if (artiMap[name]) {
|
||||||
|
return new Artifact(name)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
},
|
}
|
||||||
|
|
||||||
// 获取指定圣遗物套装指定位置的名字
|
get img () {
|
||||||
getArtiBySet (name, idx = 1) {
|
return `meta/artifact/${this.setName}/${this.idx}.webp`
|
||||||
let set = artisMap[name]
|
}
|
||||||
if (!set) {
|
|
||||||
|
static getSetNameByArti (name) {
|
||||||
|
let arti = Artifact.get(name)
|
||||||
|
if (arti) {
|
||||||
|
return arti.setName
|
||||||
|
}
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
return set.sets[`arti${idx}`].name
|
|
||||||
},
|
|
||||||
|
|
||||||
getAbbrBySet (name) {
|
static getMeta () {
|
||||||
return abbr[name] || name.split(0, 2)
|
|
||||||
},
|
|
||||||
|
|
||||||
getMeta () {
|
|
||||||
return {
|
return {
|
||||||
attrMap
|
attrMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据圣遗物名称获取套装
|
||||||
|
// getSetByArti
|
||||||
|
|
||||||
|
// 获取指定圣遗物套装指定位置的名字
|
||||||
|
// getArtiBySet
|
||||||
|
|
||||||
|
// getAbbrBySet
|
||||||
|
// getMeta
|
||||||
export default Artifact
|
export default Artifact
|
||||||
|
60
models/ArtifactSet.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import Base from './Base.js'
|
||||||
|
import { abbr, artiMap, artiSetMap } from '../resources/meta/artifact/index.js'
|
||||||
|
import { Artifact } from './index.js'
|
||||||
|
|
||||||
|
class ArtifactSet extends Base {
|
||||||
|
constructor (name) {
|
||||||
|
super()
|
||||||
|
let cache = this._getCache(`arti-set:${name}`)
|
||||||
|
if (cache) {
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
let data = artiSetMap[name]
|
||||||
|
if (!data) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
this.meta = data
|
||||||
|
return this._cache()
|
||||||
|
}
|
||||||
|
|
||||||
|
get img () {
|
||||||
|
let arti = Artifact.get(this.sets[1])
|
||||||
|
return arti ? arti.img : ''
|
||||||
|
}
|
||||||
|
|
||||||
|
get abbr () {
|
||||||
|
return abbr[this.name] || this.name
|
||||||
|
}
|
||||||
|
|
||||||
|
static getByArti (name) {
|
||||||
|
if (artiMap[name]) {
|
||||||
|
return ArtifactSet.get(artiMap[name].set)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
static get (name) {
|
||||||
|
if (artiSetMap[name]) {
|
||||||
|
return new ArtifactSet(name)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
getArtiName (idx = 1) {
|
||||||
|
return this.sets[idx]
|
||||||
|
}
|
||||||
|
|
||||||
|
getArti (idx = 1) {
|
||||||
|
return Artifact.get(this.getArtiName(idx))
|
||||||
|
}
|
||||||
|
|
||||||
|
static getArtiNameBySet (set, idx = 1) {
|
||||||
|
let artiSet = ArtifactSet.get(set)
|
||||||
|
if (artiSet) {
|
||||||
|
return artiSet.getArti(idx)
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ArtifactSet
|
@ -5,7 +5,7 @@
|
|||||||
import Base from './Base.js'
|
import Base from './Base.js'
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import { Profile } from '../components/index.js'
|
import { Profile } from '../components/index.js'
|
||||||
import { Artifact, Character, Weapon } from './index.js'
|
import { Artifact, Character, Weapon, ArtifactSet } from './index.js'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
|
|
||||||
const charKey = 'name,abbr,sName,star,imgs,face,side,weaponType,elem'.split(',')
|
const charKey = 'name,abbr,sName,star,imgs,face,side,weaponType,elem'.split(',')
|
||||||
@ -79,25 +79,19 @@ export default class Avatar extends Base {
|
|||||||
get artis () {
|
get artis () {
|
||||||
let ret = {}
|
let ret = {}
|
||||||
if (!this.isProfile) {
|
if (!this.isProfile) {
|
||||||
const posIdx = {
|
|
||||||
生之花: 1,
|
|
||||||
死之羽: 2,
|
|
||||||
时之沙: 3,
|
|
||||||
空之杯: 4,
|
|
||||||
理之冠: 5
|
|
||||||
}
|
|
||||||
lodash.forEach(this.meta.reliquaries, (ds) => {
|
lodash.forEach(this.meta.reliquaries, (ds) => {
|
||||||
let idx = posIdx[ds.pos_name]
|
let arti = Artifact.get(ds.name)
|
||||||
ret[idx] = {
|
ret[arti.idx] = {
|
||||||
name: ds.name,
|
name: arti.name,
|
||||||
set: Artifact.getSetByArti(ds.name),
|
set: arti.setName,
|
||||||
|
img: arti.img,
|
||||||
level: ds.level
|
level: ds.level
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
if (this.profile && this.profile?.artis) {
|
if (this.profile && this.profile?.artis) {
|
||||||
return this.profile.artis.toJSON()
|
return this.profile.artis.getArtisData()
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -175,7 +169,7 @@ export default class Avatar extends Base {
|
|||||||
let artis = this.artis
|
let artis = this.artis
|
||||||
let setCount = {}
|
let setCount = {}
|
||||||
lodash.forEach(artis, (arti, idx) => {
|
lodash.forEach(artis, (arti, idx) => {
|
||||||
let set = arti?.set?.name
|
let set = arti?.set
|
||||||
if (set) {
|
if (set) {
|
||||||
setCount[set] = (setCount[set] || 0) + 1
|
setCount[set] = (setCount[set] || 0) + 1
|
||||||
}
|
}
|
||||||
@ -184,20 +178,23 @@ export default class Avatar extends Base {
|
|||||||
let names = []
|
let names = []
|
||||||
let abbrs = []
|
let abbrs = []
|
||||||
let abbrs2 = []
|
let abbrs2 = []
|
||||||
|
let imgs = []
|
||||||
for (let set in setCount) {
|
for (let set in setCount) {
|
||||||
if (setCount[set] >= 2) {
|
if (setCount[set] >= 2) {
|
||||||
sets[set] = setCount[set] >= 4 ? 4 : 2
|
let value = setCount[set] >= 4 ? 4 : 2
|
||||||
names.push(Artifact.getArtiBySet(set))
|
sets[set] = value
|
||||||
|
let artiSet = ArtifactSet.get(set)
|
||||||
|
names.push(artiSet.name)
|
||||||
|
abbrs.push(artiSet.abbr + value)
|
||||||
|
abbrs2.push(artiSet.name + value)
|
||||||
|
imgs.push(artiSet.img)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lodash.forEach(sets, (v, k) => {
|
|
||||||
abbrs.push(Artifact.getAbbrBySet(k) + v)
|
|
||||||
abbrs2.push(k + v)
|
|
||||||
})
|
|
||||||
this._artisSet = {
|
this._artisSet = {
|
||||||
sets,
|
sets,
|
||||||
names,
|
names,
|
||||||
abbrs: [...abbrs, ...abbrs2],
|
abbrs: [...abbrs, ...abbrs2],
|
||||||
|
imgs,
|
||||||
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
|
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
* */
|
* */
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import Base from './Base.js'
|
import Base from './Base.js'
|
||||||
import { Artifact, Character } from './index.js'
|
import { Artifact, ArtifactSet, Character } from './index.js'
|
||||||
import { Format, Data } from '../components/index.js'
|
import { Format, Data } from '../components/index.js'
|
||||||
import ArtisMark from './profile-lib/ArtisMark.js'
|
import ArtisMark from './profile-lib/ArtisMark.js'
|
||||||
import { attrMap, attrNameMap, attrValue } from '../resources/meta/reliquaries/artis-mark.js'
|
import { attrMap, attrNameMap, attrValue } from '../resources/meta/artifact/artis-mark.js'
|
||||||
import CharArtis from './profile-lib/CharArtis.js'
|
import CharArtis from './profile-lib/CharArtis.js'
|
||||||
|
|
||||||
export default class ProfileArtis extends Base {
|
export default class ProfileArtis extends Base {
|
||||||
@ -33,8 +33,8 @@ export default class ProfileArtis extends Base {
|
|||||||
setArtis (idx = 1, ds = {}) {
|
setArtis (idx = 1, ds = {}) {
|
||||||
idx = idx.toString().replace('arti', '')
|
idx = idx.toString().replace('arti', '')
|
||||||
let ret = {}
|
let ret = {}
|
||||||
ret.name = ds.name || Artifact.getArtiBySet(ds.set, idx) || ''
|
ret.name = ds.name || ArtifactSet.getArtiNameBySet(ds.set, idx) || ''
|
||||||
ret.set = ds.set || Artifact.getSetByArti(ret.title) || ''
|
ret.set = ds.set || Artifact.getSetNameByArti(ret.title) || ''
|
||||||
ret.level = ds.level || 1
|
ret.level = ds.level || 1
|
||||||
ret.main = ArtisMark.formatAttr(ds.main || {})
|
ret.main = ArtisMark.formatAttr(ds.main || {})
|
||||||
ret.attrs = []
|
ret.attrs = []
|
||||||
@ -128,6 +128,19 @@ export default class ProfileArtis extends Base {
|
|||||||
return check
|
return check
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getArtisData () {
|
||||||
|
let ret = {}
|
||||||
|
this.forEach((ds, idx) => {
|
||||||
|
let arti = Artifact.get(ds.name)
|
||||||
|
ret[idx] = {
|
||||||
|
...ds,
|
||||||
|
name: arti.name,
|
||||||
|
img: arti.img
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
getSetData () {
|
getSetData () {
|
||||||
if (this._setData) {
|
if (this._setData) {
|
||||||
return this._setData
|
return this._setData
|
||||||
@ -138,21 +151,24 @@ export default class ProfileArtis extends Base {
|
|||||||
})
|
})
|
||||||
let sets = {}
|
let sets = {}
|
||||||
let names = []
|
let names = []
|
||||||
|
let imgs = []
|
||||||
let abbrs = []
|
let abbrs = []
|
||||||
let abbrs2 = []
|
let abbrs2 = []
|
||||||
for (let set in setCount) {
|
for (let set in setCount) {
|
||||||
if (setCount[set] >= 2) {
|
if (setCount[set] >= 2) {
|
||||||
sets[set] = setCount[set] >= 4 ? 4 : 2
|
let count = setCount[set] >= 4 ? 4 : 2
|
||||||
names.push(Artifact.getArtiBySet(set))
|
sets[set] = count
|
||||||
|
let artiSet = ArtifactSet.get(set)
|
||||||
|
names.push(artiSet.name)
|
||||||
|
imgs.push(artiSet.img)
|
||||||
|
abbrs.push(artiSet.abbr + count)
|
||||||
|
abbrs2.push(artiSet.name + count)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lodash.forEach(sets, (v, k) => {
|
|
||||||
abbrs.push(Artifact.getAbbrBySet(k) + v)
|
|
||||||
abbrs2.push(k + v)
|
|
||||||
})
|
|
||||||
this._setData = {
|
this._setData = {
|
||||||
sets,
|
sets,
|
||||||
names,
|
names,
|
||||||
|
imgs,
|
||||||
abbrs: [...abbrs, ...abbrs2],
|
abbrs: [...abbrs, ...abbrs2],
|
||||||
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
|
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
|
||||||
}
|
}
|
||||||
@ -217,9 +233,11 @@ export default class ProfileArtis extends Base {
|
|||||||
markClass: ArtisMark.getMarkClass(mark)
|
markClass: ArtisMark.getMarkClass(mark)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
let artifact = Artifact.get(arti.name)
|
||||||
artis[idx] = {
|
artis[idx] = {
|
||||||
name: arti.name,
|
name: artifact.name,
|
||||||
set: arti.set,
|
set: artifact.setName,
|
||||||
|
img: artifact.img,
|
||||||
level: arti.level,
|
level: arti.level,
|
||||||
_mark: mark,
|
_mark: mark,
|
||||||
mark: Format.comma(mark, 1),
|
mark: Format.comma(mark, 1),
|
||||||
@ -231,10 +249,13 @@ export default class ProfileArtis extends Base {
|
|||||||
})
|
})
|
||||||
let sets = {}
|
let sets = {}
|
||||||
let names = []
|
let names = []
|
||||||
|
let imgs = []
|
||||||
for (let set in setCount) {
|
for (let set in setCount) {
|
||||||
if (setCount[set] >= 2) {
|
if (setCount[set] >= 2) {
|
||||||
sets[set] = setCount[set] >= 4 ? 4 : 2
|
sets[set] = setCount[set] >= 4 ? 4 : 2
|
||||||
names.push(Artifact.getArtiBySet(set))
|
let artiSet = ArtifactSet.get(set)
|
||||||
|
imgs.push(artiSet.img)
|
||||||
|
names.push(artiSet.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.mark = totalMark
|
this.mark = totalMark
|
||||||
@ -246,6 +267,7 @@ export default class ProfileArtis extends Base {
|
|||||||
artis,
|
artis,
|
||||||
sets,
|
sets,
|
||||||
names,
|
names,
|
||||||
|
imgs,
|
||||||
classTitle: charCfg.classTitle
|
classTitle: charCfg.classTitle
|
||||||
}
|
}
|
||||||
if (withDetail) {
|
if (withDetail) {
|
||||||
|
@ -1,19 +1,13 @@
|
|||||||
import lodash from 'lodash'
|
|
||||||
import Base from './Base.js'
|
import Base from './Base.js'
|
||||||
import { Data } from '../components/index.js'
|
import { Data } from '../components/index.js'
|
||||||
|
|
||||||
let data = Data.readJSON('resources/meta/weapons/data.json')
|
let data = {}
|
||||||
let abbr = await Data.importDefault('resources/meta/weapon/abbr.js')
|
let abbr = {}
|
||||||
|
|
||||||
let wData = {}
|
|
||||||
lodash.forEach(data, (ds) => {
|
|
||||||
wData[ds.name] = ds
|
|
||||||
})
|
|
||||||
|
|
||||||
class Weapon extends Base {
|
class Weapon extends Base {
|
||||||
constructor (name) {
|
constructor (name) {
|
||||||
super(name)
|
super(name)
|
||||||
let meta = wData[name]
|
let meta = data[name]
|
||||||
if (!meta) {
|
if (!meta) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -37,7 +31,7 @@ class Weapon extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get img () {
|
get img () {
|
||||||
return `meta/weapons/icon/${this.name}.png`
|
return `meta/weapon/${this.type}/${this.name}/icon.webp`
|
||||||
}
|
}
|
||||||
|
|
||||||
get icon () {
|
get icon () {
|
||||||
@ -46,10 +40,17 @@ class Weapon extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Weapon.get = function (name) {
|
Weapon.get = function (name) {
|
||||||
if (wData[name]) {
|
if (data[name]) {
|
||||||
return new Weapon(name)
|
return new Weapon(name)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Weapon
|
export default Weapon
|
||||||
|
|
||||||
|
// lazy load
|
||||||
|
setTimeout(async function init () {
|
||||||
|
let ret = await Data.importModule('resources/meta/weapon/index.js')
|
||||||
|
data = ret.data
|
||||||
|
abbr = ret.abbr
|
||||||
|
})
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Base from './Base.js'
|
import Base from './Base.js'
|
||||||
import Character from './Character.js'
|
import Character from './Character.js'
|
||||||
import Artifact from './Artifact.js'
|
import Artifact from './Artifact.js'
|
||||||
|
import ArtifactSet from './ArtifactSet.js'
|
||||||
import Avatar from './Avatar.js'
|
import Avatar from './Avatar.js'
|
||||||
import AvatarList from './AvatarList.js'
|
import AvatarList from './AvatarList.js'
|
||||||
import Abyss from './Abyss.js'
|
import Abyss from './Abyss.js'
|
||||||
@ -19,6 +20,7 @@ export {
|
|||||||
Abyss,
|
Abyss,
|
||||||
Character,
|
Character,
|
||||||
Artifact,
|
Artifact,
|
||||||
|
ArtifactSet,
|
||||||
Avatar,
|
Avatar,
|
||||||
AvatarList,
|
AvatarList,
|
||||||
ProfileServ,
|
ProfileServ,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
import { Format } from '../../components/index.js'
|
import { Format } from '../../components/index.js'
|
||||||
import { attrNameMap, mainAttr, subAttr } from '../../resources/meta/reliquaries/artis-mark.js'
|
import { attrNameMap, mainAttr, subAttr } from '../../resources/meta/artifact/artis-mark.js'
|
||||||
|
|
||||||
let ArtisMark = {
|
let ArtisMark = {
|
||||||
formatAttr (ds) {
|
formatAttr (ds) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { usefulAttr } from '../../resources/meta/reliquaries/artis-mark.js'
|
import { usefulAttr } from '../../resources/meta/artifact/artis-mark.js'
|
||||||
import { Data } from '../../components/index.js'
|
import { Data } from '../../components/index.js'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
|
||||||
|
@ -68,8 +68,8 @@ let DmgBuffs = {
|
|||||||
|
|
||||||
async function init () {
|
async function init () {
|
||||||
const _path = `file://${process.cwd()}/plugins/miao-plugin/resources/meta`
|
const _path = `file://${process.cwd()}/plugins/miao-plugin/resources/meta`
|
||||||
weaponBuffs = (await import(`${_path}/weapons/calc.js`)).weapons || {}
|
weaponBuffs = {} || (await import(`${_path}/weapon/index.js`)).calc || {}
|
||||||
artisBuffs = (await import(`${_path}/reliquaries/calc.js`)).buffs || {}
|
artisBuffs = (await import(`${_path}/artifact/calc.js`)).buffs || {}
|
||||||
}
|
}
|
||||||
|
|
||||||
await init()
|
await init()
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<img src="{{_res_path}}{{ds.side}}" onerror="whenError(this)"/>
|
<img src="{{_res_path}}{{ds.side}}" onerror="whenError(this)"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="arti-icon">
|
<div class="arti-icon">
|
||||||
<img src="{{_res_path}}/meta/reliquaries/icon/{{ds.name}}.png"/>
|
<img src="{{_res_path}}/{{ds.img}}"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<strong>{{ds.name}}</strong>
|
<strong>{{ds.name}}</strong>
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
<div class="item arti {{idx}}">
|
<div class="item arti {{idx}}">
|
||||||
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
|
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
|
||||||
<div class="arti-icon">
|
<div class="arti-icon">
|
||||||
<img src="{{_res_path}}/meta/reliquaries/icon/{{ds.name}}.png"/>
|
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
|
||||||
<span>+{{ds.level}}</span>
|
<span>+{{ds.level}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
|
@ -66,8 +66,7 @@
|
|||||||
{{if data.artis && data.artis[idx]}}
|
{{if data.artis && data.artis[idx]}}
|
||||||
{{set arti = data.artis[idx]}}
|
{{set arti = data.artis[idx]}}
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="item-icon"
|
<div class="item-icon" style="background-image:url({{_res_path}}{{arti.img}})"></div>
|
||||||
style="background-image:url({{_res_path}}meta/reliquaries/icon/{{arti.name}}.png)"></div>
|
|
||||||
<span class="lv">{{arti.level}}</span>
|
<span class="lv">{{arti.level}}</span>
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -421,9 +421,12 @@ body {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.artis .item .arti-icon img {
|
.artis .item .arti-icon .img {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
}
|
}
|
||||||
.artis .head {
|
.artis .head {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
@ -543,13 +546,16 @@ body {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 97px;
|
height: 97px;
|
||||||
}
|
}
|
||||||
.artis .weapon img {
|
.artis .weapon .img {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
background-position: center;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
.artis .weapon .head {
|
.artis .weapon .head {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -13,18 +13,19 @@
|
|||||||
<div class="main-pic"
|
<div class="main-pic"
|
||||||
style="background-image:url({{_res_path}}{{imgs.splash}})"></div>
|
style="background-image:url({{_res_path}}{{imgs.splash}})"></div>
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<div class="char-name">{{name}}</div>
|
<div class="char-name">{{data.name}}</div>
|
||||||
<div class="char-lv">UID {{uid}} - Lv.{{data.level}}
|
<div class="char-lv">UID {{uid}} - Lv.{{data.level}}
|
||||||
<span class="cons cons-{{data.cons}}">{{data.cons}}命</span></div>
|
<span class="cons cons-{{data.cons}}">{{data.cons}}命</span></div>
|
||||||
<div class="char-talents">
|
<div class="char-talents">
|
||||||
{{each talentMap tName key}}
|
{{each talentMap tName key}}
|
||||||
|
{{set talent = data.talent[key] || {} }}
|
||||||
<div class="talent-item">
|
<div class="talent-item">
|
||||||
<div class="talent-icon
|
<div class="talent-icon
|
||||||
{{talent[key].level > talent[key].original ? `talent-plus`:``}}
|
{{talent.level > talent.original ? `talent-plus`:``}}
|
||||||
{{talent[key].original >= 10 ? `talent-crown`:``}}">
|
{{talent.original >= 10 ? `talent-crown`:``}}">
|
||||||
<div class="talent-icon-img"
|
<div class="talent-icon-img"
|
||||||
style="background-image:url({{_res_path}}{{imgs[key]}})"></div>
|
style="background-image:url({{_res_path}}{{imgs[key]}})"></div>
|
||||||
<span>{{talent[key].level}}</span>
|
<span>{{talent.level}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -66,7 +67,7 @@
|
|||||||
<div class="artis">
|
<div class="artis">
|
||||||
<div>
|
<div>
|
||||||
<div class="item weapon">
|
<div class="item weapon">
|
||||||
<img src="{{_res_path}}/meta/weapons/icon/{{weapon.name}}.png"/>
|
<div class="img" style="background-image:url({{_res_path}}{{weapon.img}})"></div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<strong>{{weapon.name}}</strong>
|
<strong>{{weapon.name}}</strong>
|
||||||
<div class="star star-{{weapon.star}}"></div>
|
<div class="star star-{{weapon.star}}"></div>
|
||||||
@ -86,7 +87,7 @@
|
|||||||
<div class="item arti">
|
<div class="item arti">
|
||||||
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
|
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
|
||||||
<div class="arti-icon">
|
<div class="arti-icon">
|
||||||
<img src="{{_res_path}}/meta/reliquaries/icon/{{ds.name}}.png"/>
|
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
|
||||||
<span>+{{ds.level}}</span>
|
<span>+{{ds.level}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
@ -127,7 +128,7 @@
|
|||||||
<div class="artis input-mode">
|
<div class="artis input-mode">
|
||||||
|
|
||||||
<div class="item weapon">
|
<div class="item weapon">
|
||||||
<img src="{{_res_path}}/meta/weapons/icon/{{weapon.name}}.png"/>
|
<div class="img" style="background-image:url({{_res_path}}{{weapon.img}})"></div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<strong>{{weapon.name}}</strong>
|
<strong>{{weapon.name}}</strong>
|
||||||
<div class="star star-{{weapon.star}}"></div>
|
<div class="star star-{{weapon.star}}"></div>
|
||||||
@ -140,7 +141,7 @@
|
|||||||
<div class="item arti">
|
<div class="item arti">
|
||||||
{{if ds && ds.name }}
|
{{if ds && ds.name }}
|
||||||
<div class="arti-icon">
|
<div class="arti-icon">
|
||||||
<img src="{{_res_path}}/meta/reliquaries/icon/{{ds.name}}.png"/>
|
<div class="img" src="{{_res_path}}{{ds.img}}"></div>
|
||||||
<span>+{{ds.level}}</span>
|
<span>+{{ds.level}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
|
@ -506,9 +506,12 @@ body {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arti-icon img {
|
.arti-icon .img {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,13 +674,16 @@ body {
|
|||||||
height: 97px;
|
height: 97px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.artis .weapon img {
|
.artis .weapon .img {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
background-position: center;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.artis .weapon .head {
|
.artis .weapon .head {
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
<span class="cons weapon cons-{{weapon.affix+1}} star{{weapon.star}}">{{weapon.affix}}</span>
|
<span class="cons weapon cons-{{weapon.affix+1}} star{{weapon.star}}">{{weapon.affix}}</span>
|
||||||
<div class="item-icon weapon-icon">
|
<div class="item-icon weapon-icon">
|
||||||
<span class="img"
|
<span class="img"
|
||||||
style="background-image:url({{_res_path}}/meta/weapons/icon/{{weapon.name}}.png)"></span>
|
style="background-image:url({{_res_path}}{{weapon.img}})"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="item-name">{{weapon.abbr}}</span>
|
<span class="item-name">{{weapon.abbr}}</span>
|
||||||
@ -71,15 +71,14 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
{{set mark = avatar.artisMark || false }}
|
{{set mark = avatar.artisMark || false }}
|
||||||
{{set names = avatar?.artisMark?.names || avatar?.artisSet?.names || []}}
|
{{set imgs = avatar?.artisMark?.imgs || avatar?.artisSet?.imgs || []}}
|
||||||
<div class="td td-artis class-{{mark?.markClass||'D'}}">
|
<div class="td td-artis class-{{mark?.markClass||'D'}}">
|
||||||
<div class="item item-banner avatar-artis artis{{names.length}}">
|
<div class="item item-banner avatar-artis artis{{imgs.length}}">
|
||||||
<div class="artis item-icon {{names.length>0?'star5':'no-artis'}}">
|
<div class="artis item-icon {{imgs.length>0?'star5':'no-artis'}}">
|
||||||
{{each names name}}
|
{{each imgs img}}
|
||||||
<span class="img"
|
<div class="img" style="background-image:url({{_res_path}}{{img}})"></div>
|
||||||
style="background-image:url({{_res_path}}/meta/reliquaries/icon/{{name}}.png)"></span>
|
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{if names.length === 0}}
|
{{if imgs.length === 0}}
|
||||||
<span class="img no-artis"></span>
|
<span class="img no-artis"></span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,8 +29,9 @@
|
|||||||
.item-card .item-bg {
|
.item-card .item-bg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 100% 0 0;
|
padding: 100% 0 0;
|
||||||
background-size: cover;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.item-card .bg1 {
|
.item-card .bg1 {
|
||||||
|
@ -27,15 +27,14 @@
|
|||||||
<div class="avatar-detail">
|
<div class="avatar-detail">
|
||||||
<div class="item avatar-weapon">
|
<div class="item avatar-weapon">
|
||||||
<div class="item-icon star{{weapon.star}}">
|
<div class="item-icon star{{weapon.star}}">
|
||||||
<span class="img" style="background-image:url({{_res_path}}/meta/weapons/icon/{{weapon.name}}.png)"></span>
|
<span class="img" style="background-image:url({{_res_path}}{{weapon.img}})"></span>
|
||||||
<span class="cons cons-{{weapon.affix}}">{{weapon.affix}}</span>
|
<span class="cons cons-{{weapon.affix}}">{{weapon.affix}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item avatar-artis artis{{avatar.artisSet?.names?.length}}">
|
<div class="item avatar-artis artis{{avatar.artisSet?.names?.length}}">
|
||||||
<div class="artis item-icon">
|
<div class="artis item-icon">
|
||||||
{{each avatar.artisSet?.names name}}
|
{{each avatar.artisSet?.imgs img}}
|
||||||
<span class="img"
|
<div class="img" style="background-image:url({{_res_path}}{{img}})"></div>
|
||||||
style="background-image:url({{_res_path}}/meta/reliquaries/icon/{{name}}.png)"></span>
|
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -34,8 +34,9 @@
|
|||||||
.item-bg {
|
.item-bg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 100% 0 0;
|
padding: 100% 0 0;
|
||||||
background-size: cover;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
28
resources/meta/artifact/index.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { Data } from '../../../components/index.js'
|
||||||
|
import lodash from 'lodash'
|
||||||
|
import { abbr, attrMap } from './meta.js'
|
||||||
|
|
||||||
|
let artiSetMap = {}
|
||||||
|
let artiMap = {}
|
||||||
|
|
||||||
|
let artis = Data.readJSON('resources/meta/artifact/data.json')
|
||||||
|
|
||||||
|
lodash.forEach(artis, (ds) => {
|
||||||
|
let artiSet = {
|
||||||
|
name: ds.name,
|
||||||
|
effect: ds.effect,
|
||||||
|
sets: {}
|
||||||
|
}
|
||||||
|
artiSetMap[ds.name] = artiSet
|
||||||
|
lodash.forEach(ds.sets, (as, idx) => {
|
||||||
|
if (as.name) {
|
||||||
|
artiMap[as.name] = {
|
||||||
|
set: ds.name,
|
||||||
|
idx
|
||||||
|
}
|
||||||
|
artiSet.sets[idx] = as.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
export { abbr, artiMap, artiSetMap, attrMap }
|
82
resources/meta/artifact/meta.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
export const abbr = {
|
||||||
|
炽烈的炎之魔女: '魔女',
|
||||||
|
昔日宗室之仪: '宗室',
|
||||||
|
翠绿之影: '风套',
|
||||||
|
千岩牢固: '千岩',
|
||||||
|
流浪大地的乐团: '乐团',
|
||||||
|
绝缘之旗印: '绝缘',
|
||||||
|
被怜爱的少女: '少女',
|
||||||
|
沉沦之心: '水套',
|
||||||
|
角斗士的终幕礼: '角斗',
|
||||||
|
冰风迷途的勇士: '冰套',
|
||||||
|
逆飞的流星: '逆飞',
|
||||||
|
苍白之火: '苍白',
|
||||||
|
华馆梦醒形骸记: '华馆',
|
||||||
|
战狂: '战狂',
|
||||||
|
悠古的磐岩: '岩套',
|
||||||
|
渡过烈火的贤人: '渡火',
|
||||||
|
游医: '游医',
|
||||||
|
教官: '教官',
|
||||||
|
冒险家: '冒险',
|
||||||
|
追忆之注连: '追忆',
|
||||||
|
海染砗磲: '海染',
|
||||||
|
如雷的盛怒: '如雷',
|
||||||
|
染血的骑士道: '染血',
|
||||||
|
平息鸣雷的尊者: '平雷',
|
||||||
|
流放者: '流放',
|
||||||
|
学士: '学士',
|
||||||
|
行者之心: '行者',
|
||||||
|
幸运儿: '幸运',
|
||||||
|
勇士之心: '勇士',
|
||||||
|
守护之心: '守护',
|
||||||
|
武人: '武人',
|
||||||
|
赌徒: '赌徒',
|
||||||
|
奇迹: '奇迹',
|
||||||
|
辰砂往生录: '辰砂',
|
||||||
|
来歆余响: '余响',
|
||||||
|
深林的记忆: '草套',
|
||||||
|
饰金之梦: '饰金'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const attrValue = {
|
||||||
|
cp: 3.89,
|
||||||
|
cd: 7.77,
|
||||||
|
mastery: 23.31,
|
||||||
|
atk: 5.83,
|
||||||
|
hp: 5.83,
|
||||||
|
def: 7.29,
|
||||||
|
recharge: 6.48,
|
||||||
|
dmg: 5.825,
|
||||||
|
phy: 7.288,
|
||||||
|
heal: 4.487
|
||||||
|
}
|
||||||
|
export const attrMap = {
|
||||||
|
atk: { title: '大攻击', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
|
||||||
|
atkPlus: { title: '小攻击', format: 'comma', type: 'plus', base: 'atk', value: 15.56 },
|
||||||
|
def: { title: '大防御', format: 'pct', type: 'normal', value: 7.29, text: '7.29%' },
|
||||||
|
defPlus: { title: '小防御', format: 'comma', type: 'plus', base: 'def', value: 18.52 },
|
||||||
|
hp: { title: '大生命', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
|
||||||
|
hpPlus: { title: '小生命', format: 'comma', type: 'plus', base: 'hp', value: 239.0 },
|
||||||
|
cp: { title: '暴击率', format: 'pct', type: 'normal', value: 3.89, text: '3.89%' },
|
||||||
|
cd: { title: '暴击伤害', format: 'pct', type: 'normal', value: 7.77, text: '7.77%' },
|
||||||
|
mastery: { title: '元素精通', format: 'comma', type: 'normal', value: 23.31, text: '23.31' },
|
||||||
|
recharge: { title: '充能效率', format: 'pct', type: 'normal', value: 6.48, text: '6.48%' },
|
||||||
|
dmg: { title: '元素伤害', format: 'pct', type: 'normal', value: 5.825, text: '5.83%' },
|
||||||
|
phy: { title: '物伤加成', format: 'pct', type: 'normal', value: 7.288, text: '7.29%' },
|
||||||
|
heal: { title: '治疗加成', format: 'pct', type: 'normal', value: 4.487, text: '4.49%' }
|
||||||
|
}
|
||||||
|
|
||||||
|
let anMap = {}
|
||||||
|
for (let attr in attrMap) {
|
||||||
|
anMap[attrMap[attr].title] = attr
|
||||||
|
}
|
||||||
|
|
||||||
|
export const attrNameMap = anMap
|
||||||
|
|
||||||
|
export const mainAttr = {
|
||||||
|
3: 'atk,def,hp,mastery,recharge'.split(','),
|
||||||
|
4: 'atk,def,hp,mastery,dmg,phy'.split(','),
|
||||||
|
5: 'atk,def,hp,mastery,heal,cp,cd'.split(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
export const subAttr = 'atk,def,hp,mastery,recharge,cp,cd'.split(',')
|
@ -1,39 +0,0 @@
|
|||||||
export default {
|
|
||||||
炽烈的炎之魔女: '魔女',
|
|
||||||
昔日宗室之仪: '宗室',
|
|
||||||
翠绿之影: '风套',
|
|
||||||
千岩牢固: '千岩',
|
|
||||||
流浪大地的乐团: '乐团',
|
|
||||||
绝缘之旗印: '绝缘',
|
|
||||||
被怜爱的少女: '少女',
|
|
||||||
沉沦之心: '水套',
|
|
||||||
角斗士的终幕礼: '角斗',
|
|
||||||
冰风迷途的勇士: '冰套',
|
|
||||||
逆飞的流星: '逆飞',
|
|
||||||
苍白之火: '苍白',
|
|
||||||
华馆梦醒形骸记: '华馆',
|
|
||||||
战狂: '战狂',
|
|
||||||
悠古的磐岩: '岩套',
|
|
||||||
渡过烈火的贤人: '渡火',
|
|
||||||
游医: '游医',
|
|
||||||
教官: '教官',
|
|
||||||
冒险家: '冒险',
|
|
||||||
追忆之注连: '追忆',
|
|
||||||
海染砗磲: '海染',
|
|
||||||
如雷的盛怒: '如雷',
|
|
||||||
染血的骑士道: '染血',
|
|
||||||
平息鸣雷的尊者: '平雷',
|
|
||||||
流放者: '流放',
|
|
||||||
学士: '学士',
|
|
||||||
行者之心: '行者',
|
|
||||||
幸运儿: '幸运',
|
|
||||||
勇士之心: '勇士',
|
|
||||||
守护之心: '守护',
|
|
||||||
武人: '武人',
|
|
||||||
赌徒: '赌徒',
|
|
||||||
奇迹: '奇迹',
|
|
||||||
辰砂往生录: '辰砂',
|
|
||||||
来歆余响: '余响',
|
|
||||||
深林的记忆: '草套',
|
|
||||||
饰金之梦: '饰金'
|
|
||||||
}
|
|
@ -1,97 +0,0 @@
|
|||||||
export const attrValue = {
|
|
||||||
cp: 3.89,
|
|
||||||
cd: 7.77,
|
|
||||||
mastery: 23.31,
|
|
||||||
atk: 5.83,
|
|
||||||
hp: 5.83,
|
|
||||||
def: 7.29,
|
|
||||||
recharge: 6.48,
|
|
||||||
dmg: 5.825,
|
|
||||||
phy: 7.288,
|
|
||||||
heal: 4.487
|
|
||||||
}
|
|
||||||
export const attrMap = {
|
|
||||||
atk: { title: '大攻击', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
|
|
||||||
atkPlus: { title: '小攻击', format: 'comma', type: 'plus', base: 'atk', value: 15.56 },
|
|
||||||
def: { title: '大防御', format: 'pct', type: 'normal', value: 7.29, text: '7.29%' },
|
|
||||||
defPlus: { title: '小防御', format: 'comma', type: 'plus', base: 'def', value: 18.52 },
|
|
||||||
hp: { title: '大生命', format: 'pct', type: 'normal', value: 5.83, text: '5.83%' },
|
|
||||||
hpPlus: { title: '小生命', format: 'comma', type: 'plus', base: 'hp', value: 239.0 },
|
|
||||||
cp: { title: '暴击率', format: 'pct', type: 'normal', value: 3.89, text: '3.89%' },
|
|
||||||
cd: { title: '暴击伤害', format: 'pct', type: 'normal', value: 7.77, text: '7.77%' },
|
|
||||||
mastery: { title: '元素精通', format: 'comma', type: 'normal', value: 23.31, text: '23.31' },
|
|
||||||
recharge: { title: '充能效率', format: 'pct', type: 'normal', value: 6.48, text: '6.48%' },
|
|
||||||
dmg: { title: '元素伤害', format: 'pct', type: 'normal', value: 5.825, text: '5.83%' },
|
|
||||||
phy: { title: '物伤加成', format: 'pct', type: 'normal', value: 7.288, text: '7.29%' },
|
|
||||||
heal: { title: '治疗加成', format: 'pct', type: 'normal', value: 4.487, text: '4.49%' }
|
|
||||||
}
|
|
||||||
|
|
||||||
let anMap = {}
|
|
||||||
for (let attr in attrMap) {
|
|
||||||
anMap[attrMap[attr].title] = attr
|
|
||||||
}
|
|
||||||
|
|
||||||
export const attrNameMap = anMap
|
|
||||||
|
|
||||||
export const mainAttr = {
|
|
||||||
3: 'atk,def,hp,mastery,recharge'.split(','),
|
|
||||||
4: 'atk,def,hp,mastery,dmg,phy'.split(','),
|
|
||||||
5: 'atk,def,hp,mastery,heal,cp,cd'.split(',')
|
|
||||||
}
|
|
||||||
|
|
||||||
export const subAttr = 'atk,def,hp,mastery,recharge,cp,cd'.split(',')
|
|
||||||
|
|
||||||
export const usefulAttr = {
|
|
||||||
神里绫人: { hp: 50, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
八重神子: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
申鹤: { hp: 0, atk: 100, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
云堇: { hp: 0, atk: 0, def: 100, cp: 50, cd: 50, mastery: 0, dmg: 40, phy: 0, recharge: 90, heal: 0 },
|
|
||||||
荒泷一斗: { hp: 0, atk: 50, def: 100, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
五郎: { hp: 0, atk: 50, def: 100, cp: 50, cd: 50, mastery: 0, dmg: 25, phy: 0, recharge: 90, heal: 0 },
|
|
||||||
班尼特: { hp: 100, atk: 50, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 80, phy: 0, recharge: 55, heal: 100 },
|
|
||||||
枫原万叶: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 100, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
行秋: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 75, heal: 0 },
|
|
||||||
钟离: { hp: 80, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 50, recharge: 55, heal: 0 },
|
|
||||||
神里绫华: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
香菱: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
胡桃: { hp: 80, atk: 50, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
温迪: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
珊瑚宫心海: { hp: 100, atk: 50, def: 0, cp: 0, cd: 0, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 100 },
|
|
||||||
莫娜: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 75, heal: 0 },
|
|
||||||
阿贝多: { hp: 0, atk: 0, def: 100, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
迪奥娜: { hp: 100, atk: 50, def: 0, cp: 50, cd: 50, mastery: 0, dmg: 100, phy: 0, recharge: 90, heal: 100 },
|
|
||||||
优菈: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 40, phy: 100, recharge: 55, heal: 0 },
|
|
||||||
达达利亚: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
魈: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
宵宫: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
九条裟罗: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
琴: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 100, recharge: 55, heal: 100 },
|
|
||||||
菲谢尔: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 60, recharge: 0, heal: 0 },
|
|
||||||
罗莎莉亚: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 70, phy: 80, recharge: 30, heal: 0 },
|
|
||||||
可莉: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
凝光: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
北斗: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
刻晴: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 100, recharge: 0, heal: 0 },
|
|
||||||
托马: { hp: 100, atk: 50, def: 0, cp: 50, cd: 50, mastery: 0, dmg: 75, phy: 0, recharge: 90, heal: 0 },
|
|
||||||
迪卢克: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
诺艾尔: { hp: 0, atk: 50, def: 90, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 70, heal: 0 },
|
|
||||||
旅行者: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
重云: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
七七: { hp: 0, atk: 100, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 60, phy: 70, recharge: 55, heal: 100 },
|
|
||||||
凯亚: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 100, recharge: 30, heal: 0 },
|
|
||||||
烟绯: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
早柚: { hp: 0, atk: 50, def: 0, cp: 50, cd: 50, mastery: 100, dmg: 80, phy: 0, recharge: 55, heal: 100 },
|
|
||||||
安柏: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 100, recharge: 0, heal: 0 },
|
|
||||||
丽莎: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
埃洛伊: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 0, heal: 0 },
|
|
||||||
辛焱: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 50, phy: 100, recharge: 0, heal: 0 },
|
|
||||||
砂糖: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 100, dmg: 50, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
雷泽: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 50, phy: 100, recharge: 0, heal: 0 },
|
|
||||||
夜兰: { hp: 80, atk: 0, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
久岐忍: { hp: 100, atk: 50, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 100 },
|
|
||||||
鹿野院平藏: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
提纳里: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 90, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
柯莱: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 30, heal: 0 },
|
|
||||||
空: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 },
|
|
||||||
荧: { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 55, heal: 0 }
|
|
||||||
}
|
|
@ -1,220 +0,0 @@
|
|||||||
export const buffs = {
|
|
||||||
行者之心4: {
|
|
||||||
title: '行者4:重击的暴击率提高30%',
|
|
||||||
data: {
|
|
||||||
a2Cpct: 30
|
|
||||||
}
|
|
||||||
},
|
|
||||||
勇士之心4: {
|
|
||||||
title: '勇士4:对生命值高于50%的敌人,造成的伤害增加30%',
|
|
||||||
data: {
|
|
||||||
dmg: 30
|
|
||||||
}
|
|
||||||
},
|
|
||||||
武人2: {
|
|
||||||
title: '武人2: 普攻与重击造成的伤害提高15%',
|
|
||||||
data: {
|
|
||||||
aDmg: 15,
|
|
||||||
a2Dmg: 15
|
|
||||||
}
|
|
||||||
},
|
|
||||||
武人4: {
|
|
||||||
title: '武人4:施放元素战技后的8秒内,普攻和重击伤害提升25%',
|
|
||||||
data: {
|
|
||||||
aDmg: 25,
|
|
||||||
a2Dmg: 25
|
|
||||||
}
|
|
||||||
},
|
|
||||||
战狂4: {
|
|
||||||
title: '战狂4:生命值低于70%时,暴击率提升24%',
|
|
||||||
data: {
|
|
||||||
cpct: 24
|
|
||||||
}
|
|
||||||
},
|
|
||||||
染血的骑士道4: {
|
|
||||||
title: '染血4:击败敌人后的10秒内,重击造成的伤害提升50%',
|
|
||||||
data: {
|
|
||||||
a2Dmg: 50
|
|
||||||
}
|
|
||||||
},
|
|
||||||
角斗士的终幕礼4: {
|
|
||||||
check: ({ weaponType }) => ['单手剑', '双手剑', '长柄武器'].includes(weaponType),
|
|
||||||
title: '角斗4:角色普通攻击造成的伤害提高35%',
|
|
||||||
data: {
|
|
||||||
aDmg: 35
|
|
||||||
}
|
|
||||||
},
|
|
||||||
流浪大地的乐团4: {
|
|
||||||
check: ({ weaponType }) => ['法器', '弓'].includes(weaponType),
|
|
||||||
title: '乐团4:角色重击造成的伤害提高35%',
|
|
||||||
data: {
|
|
||||||
a2Dmg: 35
|
|
||||||
}
|
|
||||||
},
|
|
||||||
苍白之火4: {
|
|
||||||
title: '苍白4:2层提高18%攻击力,物理伤害额外提高25%',
|
|
||||||
data: {
|
|
||||||
atkPct: 18,
|
|
||||||
phy: 25
|
|
||||||
}
|
|
||||||
},
|
|
||||||
赌徒2: {
|
|
||||||
title: '赌徒2:元素战技造成的伤害提升20%',
|
|
||||||
data: {
|
|
||||||
eDmg: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
悠古的磐岩4: {
|
|
||||||
title: '磐岩4:获得元素反应晶片,对应元素伤害提高35%',
|
|
||||||
data: {
|
|
||||||
dmg: 35
|
|
||||||
}
|
|
||||||
},
|
|
||||||
炽烈的炎之魔女4: {
|
|
||||||
check: ({ element }) => element === '火',
|
|
||||||
title: '魔女4:蒸发、融化伤害提高15%,[buffCount]层额外提高[dmg]%火元素伤害加成',
|
|
||||||
data: {
|
|
||||||
zf: 15,
|
|
||||||
rh: 15,
|
|
||||||
dmg: ({ params }) => (params.monv || 1) * 7.5,
|
|
||||||
buffCount: ({ params }) => params.monv || 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
昔日宗室之仪2: {
|
|
||||||
title: '宗室2:元素爆发造成的伤害提升20%',
|
|
||||||
data: {
|
|
||||||
qDmg: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
昔日宗室之仪4: {
|
|
||||||
title: '宗室4:施放元素爆发后,攻击力提升20%',
|
|
||||||
check: ({ currentTalent }) => !currentTalent || currentTalent === 'q',
|
|
||||||
data: {
|
|
||||||
atkPct: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
冰风迷途的勇士4: {
|
|
||||||
check: ({ element }) => element === '冰',
|
|
||||||
title: '冰套4:攻击处于冰元素影响下的敌人时,暴击率提高20%',
|
|
||||||
data: {
|
|
||||||
cpct: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
沉沦之心4: {
|
|
||||||
title: '水套4:施放元素战技后,普攻与重击伤害提高30%',
|
|
||||||
data: {
|
|
||||||
aDmg: 30,
|
|
||||||
a2Dmg: 30
|
|
||||||
}
|
|
||||||
},
|
|
||||||
冰之川与雪之砂4: {
|
|
||||||
title: '冰雪4:融化加成提高15%,释放元素爆发后,冰伤提高30%',
|
|
||||||
data: {
|
|
||||||
rh: 15,
|
|
||||||
dmg: 30
|
|
||||||
}
|
|
||||||
},
|
|
||||||
追忆之注连4: {
|
|
||||||
title: '追忆4:施放元素战技后,普通攻击、重击、下落攻击造成的伤害提高50%',
|
|
||||||
data: {
|
|
||||||
aDmg: 50,
|
|
||||||
a2Dmg: 50,
|
|
||||||
a3Dmg: 50
|
|
||||||
}
|
|
||||||
},
|
|
||||||
逆飞的流星4: {
|
|
||||||
title: '逆飞4:处于护盾庇护下时,获得40%普攻和重击伤害加成',
|
|
||||||
data: {
|
|
||||||
aDmg: 40,
|
|
||||||
a2Dmg: 40
|
|
||||||
}
|
|
||||||
},
|
|
||||||
平息鸣雷的尊者4: {
|
|
||||||
check: ({ element }) => element === '雷',
|
|
||||||
title: '平雷4:对处于雷元素影响下的敌人造成的伤害提升35%',
|
|
||||||
data: {
|
|
||||||
dmg: 35
|
|
||||||
}
|
|
||||||
},
|
|
||||||
渡过烈火的贤人4: {
|
|
||||||
check: ({ element }) => element === '火',
|
|
||||||
title: '渡火4:对处于火元素影响下的敌人造成的伤害提升35%',
|
|
||||||
data: {
|
|
||||||
dmg: 35
|
|
||||||
}
|
|
||||||
},
|
|
||||||
教官4: {
|
|
||||||
title: '教官4:触发元素反应后,队伍中所有角色的元素精通提高120点',
|
|
||||||
data: {
|
|
||||||
mastery: 120,
|
|
||||||
masteryInc: 120
|
|
||||||
}
|
|
||||||
},
|
|
||||||
千岩牢固4: {
|
|
||||||
title: '千岩4:元素战技命中敌人后,攻击力提升20%',
|
|
||||||
data: {
|
|
||||||
atkPct: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
绝缘之旗印4: {
|
|
||||||
title: '绝缘4:基于元素充能效率提高元素爆发[qDmg]%伤害',
|
|
||||||
data: {
|
|
||||||
qDmg: ({ attr }) => Math.min(75, (attr.recharge.base + attr.recharge.plus) * 0.25)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
华馆梦醒形骸记4: {
|
|
||||||
title: '华馆4:满层获得24%防御及24%岩伤加成',
|
|
||||||
sort: 0,
|
|
||||||
data: {
|
|
||||||
defPct: 24,
|
|
||||||
dmg: 24
|
|
||||||
}
|
|
||||||
},
|
|
||||||
辰砂往生录4: {
|
|
||||||
title: '辰砂4:满层提高48%攻击力',
|
|
||||||
|
|
||||||
data: {
|
|
||||||
atkPct: 48
|
|
||||||
}
|
|
||||||
},
|
|
||||||
来歆余响4: {
|
|
||||||
title: '余响4:触发提高普攻[aPlus]伤害',
|
|
||||||
data: {
|
|
||||||
aPlus: ({ attr }) => (attr.atk.base + attr.atk.plus + attr.atk.pct * attr.atk.base / 100) * 0.7
|
|
||||||
}
|
|
||||||
},
|
|
||||||
被怜爱的少女4: {
|
|
||||||
title: '少女4:施放元素战技或元素爆发后,受治疗效果加成提高20%',
|
|
||||||
data: {
|
|
||||||
healInc: 20
|
|
||||||
}
|
|
||||||
},
|
|
||||||
翠绿之影4: {
|
|
||||||
title: '翠绿4:扩散反应造成的伤害提升60%,降低对应元素抗性40%',
|
|
||||||
sort: 5,
|
|
||||||
data: {
|
|
||||||
ks: 60,
|
|
||||||
fykx: 40
|
|
||||||
}
|
|
||||||
},
|
|
||||||
如雷的盛怒4: {
|
|
||||||
title: '如雷4:超载、感电、超导反应造成的伤害提升40%',
|
|
||||||
data: {
|
|
||||||
cz: 40,
|
|
||||||
gd: 40,
|
|
||||||
cd: 40
|
|
||||||
}
|
|
||||||
},
|
|
||||||
深林的记忆4: {
|
|
||||||
title: '元素战技或元素爆发命中敌人后,使命中目标的草元素抗性降低30%',
|
|
||||||
data: {
|
|
||||||
kx: 30
|
|
||||||
}
|
|
||||||
},
|
|
||||||
饰金之梦4: {
|
|
||||||
title: '队伍存在其他3个不同元素类型角色时,精通提高150',
|
|
||||||
data: {
|
|
||||||
mastery: 150
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 15 KiB |