武器、圣遗物资源采用webp格式,资源引用逻辑更新

This commit is contained in:
yoimiya-kokomi 2022-09-24 20:19:59 +08:00
parent 1e17954f05
commit 8935bd57b8
377 changed files with 1248 additions and 3291 deletions

View File

@ -1,9 +1,10 @@
# 2.0 Alpha.6
# 2.0 Alpha.7
* 武器、圣遗物资源采用webp格式
* 资源引用逻辑更新,可能会导致一些展示异常,如遇问题请反馈
* 一些已知Bug修复
* `#面板练度统计` 样式微调
# 2.0 Alpha.1~5
# 2.0 Alpha.1~6
* `#面板练度统计` 功能调整
* 在未绑定CK时使用本地面板数据展示练度信息

View File

@ -1,7 +1,7 @@
import lodash from 'lodash'
import { autoRefresh } from './profile-common.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 = {}) {
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)
if (!profile || !profile.hasData) {
if (await refresh()) {
return true
@ -30,6 +31,7 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
}
return true
}
let avatar = new Avatar(profile)
char = profile.char || char
let a = profile.attr
let c = Format.comma
@ -86,11 +88,9 @@ export async function renderProfile (e, char, mode = 'profile', params = {}) {
return await Common.render('character/profile-detail', {
save_id: uid,
uid,
data: profile.getData('cons,level,weapon,dataSource,updateTime'),
data: avatar.getData('name,cons,level,weapon,talent,dataSource,updateTime'),
attr,
name: char.name,
elem: char.elem,
talent: char.getAvatarTalent(profile.talent, profile.cons),
dmgData,
dmgMsg,
dmgRet: dmgCalc.dmgRet || false,

View File

@ -1,7 +1,7 @@
import HutaoApi from '../stat/HutaoApi.js';
import lodash from 'lodash';
import { Format } from '../../components/index.js';
import { Artifact, Weapon } from '../../models/index.js';
import { Artifact, ArtifactSet, Weapon } from '../../models/index.js';
let CharWiki = {
// 命座持有
@ -46,22 +46,21 @@ let CharWiki = {
let au = (await HutaoApi.getArtisUsage()).data || {}
let artis = []
if (au[id]) {
let sets = {}
lodash.forEach(au[id], (ds) => {
let names = []
let imgs = []
let abbrs = []
let ss = ds.sets.split(',')
lodash.forEach(ss, (t) => {
t = t.split(':')
let tmp = Artifact.getArtiBySet(t[0])
if (tmp) {
names.push(tmp)
abbrs.push(Artifact.getAbbrBySet(t[0]) + (ss.length === 1 ? t[1] : ''))
let artiSet = ArtifactSet.get(t[0])
if (artiSet) {
imgs.push(artiSet.img)
abbrs.push(artiSet.abbr + (ss.length === 1 ? t[1] : ''))
}
})
artis.push({
sets: names,
imgs,
title: abbrs.join('+'),
value: ds.value
})

View File

@ -11,7 +11,7 @@ export const artiIdx = {
理之冠: 5
}
let relis = Data.readJSON('resources/meta/reliquaries/data.json')
let relis = Data.readJSON('resources/meta/artifact/data.json')
let setMap = {}
lodash.forEach(relis, (ds) => {

View File

@ -1,51 +1,63 @@
import { attrMap } from '../resources/meta/reliquaries/artis-mark.js'
import lodash from 'lodash'
import { Data } from '../components/index.js'
import Base from './Base.js'
import { ArtifactSet } from './index.js'
import { abbr, artiMap, attrMap } from '../resources/meta/artifact/index.js'
let artisMap = {}
const abbr = await Data.importDefault('resources/meta/reliquaries/abbr.js')
class Artifact extends Base {
constructor (name) {
super()
let cache = this._getCache(`arti:${name}`)
if (cache) {
return cache
}
let data = artiMap[name]
if (!data) {
return false
}
this.name = name
this.meta = data
return this._cache()
}
async function init () {
let artis = Data.readJSON('resources/meta/reliquaries/data.json')
get artiSet () {
return ArtifactSet.get(this.set)
}
lodash.forEach(artis, (ds) => {
artisMap[ds.name] = ds
})
}
get setName () {
return this.set
}
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]
}
}
static get (name) {
if (artiMap[name]) {
return new Artifact(name)
}
return false
},
}
// 获取指定圣遗物套装指定位置的名字
getArtiBySet (name, idx = 1) {
let set = artisMap[name]
if (!set) {
return ''
get img () {
return `meta/artifact/${this.setName}/${this.idx}.webp`
}
static getSetNameByArti (name) {
let arti = Artifact.get(name)
if (arti) {
return arti.setName
}
return set.sets[`arti${idx}`].name
},
return ''
}
getAbbrBySet (name) {
return abbr[name] || name.split(0, 2)
},
getMeta () {
static getMeta () {
return {
attrMap
}
}
}
// 根据圣遗物名称获取套装
// getSetByArti
// 获取指定圣遗物套装指定位置的名字
// getArtiBySet
// getAbbrBySet
// getMeta
export default Artifact

60
models/ArtifactSet.js Normal file
View 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

View File

@ -5,7 +5,7 @@
import Base from './Base.js'
import lodash from 'lodash'
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'
const charKey = 'name,abbr,sName,star,imgs,face,side,weaponType,elem'.split(',')
@ -79,25 +79,19 @@ export default class Avatar extends Base {
get artis () {
let ret = {}
if (!this.isProfile) {
const posIdx = {
生之花: 1,
死之羽: 2,
时之沙: 3,
空之杯: 4,
理之冠: 5
}
lodash.forEach(this.meta.reliquaries, (ds) => {
let idx = posIdx[ds.pos_name]
ret[idx] = {
name: ds.name,
set: Artifact.getSetByArti(ds.name),
let arti = Artifact.get(ds.name)
ret[arti.idx] = {
name: arti.name,
set: arti.setName,
img: arti.img,
level: ds.level
}
})
return ret
}
if (this.profile && this.profile?.artis) {
return this.profile.artis.toJSON()
return this.profile.artis.getArtisData()
}
return false
}
@ -175,7 +169,7 @@ export default class Avatar extends Base {
let artis = this.artis
let setCount = {}
lodash.forEach(artis, (arti, idx) => {
let set = arti?.set?.name
let set = arti?.set
if (set) {
setCount[set] = (setCount[set] || 0) + 1
}
@ -184,20 +178,23 @@ export default class Avatar extends Base {
let names = []
let abbrs = []
let abbrs2 = []
let imgs = []
for (let set in setCount) {
if (setCount[set] >= 2) {
sets[set] = setCount[set] >= 4 ? 4 : 2
names.push(Artifact.getArtiBySet(set))
let value = setCount[set] >= 4 ? 4 : 2
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 = {
sets,
names,
abbrs: [...abbrs, ...abbrs2],
imgs,
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
}
}

View File

@ -3,10 +3,10 @@
* */
import lodash from 'lodash'
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 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'
export default class ProfileArtis extends Base {
@ -33,8 +33,8 @@ export default class ProfileArtis extends Base {
setArtis (idx = 1, ds = {}) {
idx = idx.toString().replace('arti', '')
let ret = {}
ret.name = ds.name || Artifact.getArtiBySet(ds.set, idx) || ''
ret.set = ds.set || Artifact.getSetByArti(ret.title) || ''
ret.name = ds.name || ArtifactSet.getArtiNameBySet(ds.set, idx) || ''
ret.set = ds.set || Artifact.getSetNameByArti(ret.title) || ''
ret.level = ds.level || 1
ret.main = ArtisMark.formatAttr(ds.main || {})
ret.attrs = []
@ -128,6 +128,19 @@ export default class ProfileArtis extends Base {
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 () {
if (this._setData) {
return this._setData
@ -138,21 +151,24 @@ export default class ProfileArtis extends Base {
})
let sets = {}
let names = []
let imgs = []
let abbrs = []
let abbrs2 = []
for (let set in setCount) {
if (setCount[set] >= 2) {
sets[set] = setCount[set] >= 4 ? 4 : 2
names.push(Artifact.getArtiBySet(set))
let count = setCount[set] >= 4 ? 4 : 2
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 = {
sets,
names,
imgs,
abbrs: [...abbrs, ...abbrs2],
name: abbrs.length > 1 ? abbrs.join('+') : abbrs2[0]
}
@ -217,9 +233,11 @@ export default class ProfileArtis extends Base {
markClass: ArtisMark.getMarkClass(mark)
}
} else {
let artifact = Artifact.get(arti.name)
artis[idx] = {
name: arti.name,
set: arti.set,
name: artifact.name,
set: artifact.setName,
img: artifact.img,
level: arti.level,
_mark: mark,
mark: Format.comma(mark, 1),
@ -231,10 +249,13 @@ export default class ProfileArtis extends Base {
})
let sets = {}
let names = []
let imgs = []
for (let set in setCount) {
if (setCount[set] >= 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
@ -246,6 +267,7 @@ export default class ProfileArtis extends Base {
artis,
sets,
names,
imgs,
classTitle: charCfg.classTitle
}
if (withDetail) {

View File

@ -1,19 +1,13 @@
import lodash from 'lodash'
import Base from './Base.js'
import { Data } from '../components/index.js'
let data = Data.readJSON('resources/meta/weapons/data.json')
let abbr = await Data.importDefault('resources/meta/weapon/abbr.js')
let wData = {}
lodash.forEach(data, (ds) => {
wData[ds.name] = ds
})
let data = {}
let abbr = {}
class Weapon extends Base {
constructor (name) {
super(name)
let meta = wData[name]
let meta = data[name]
if (!meta) {
return false
}
@ -37,7 +31,7 @@ class Weapon extends Base {
}
get img () {
return `meta/weapons/icon/${this.name}.png`
return `meta/weapon/${this.type}/${this.name}/icon.webp`
}
get icon () {
@ -46,10 +40,17 @@ class Weapon extends Base {
}
Weapon.get = function (name) {
if (wData[name]) {
if (data[name]) {
return new Weapon(name)
}
return false
}
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
})

View File

@ -1,6 +1,7 @@
import Base from './Base.js'
import Character from './Character.js'
import Artifact from './Artifact.js'
import ArtifactSet from './ArtifactSet.js'
import Avatar from './Avatar.js'
import AvatarList from './AvatarList.js'
import Abyss from './Abyss.js'
@ -19,6 +20,7 @@ export {
Abyss,
Character,
Artifact,
ArtifactSet,
Avatar,
AvatarList,
ProfileServ,

View File

@ -1,6 +1,6 @@
import lodash from 'lodash'
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 = {
formatAttr (ds) {

View File

@ -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 fs from 'fs'

View File

@ -68,8 +68,8 @@ let DmgBuffs = {
async function init () {
const _path = `file://${process.cwd()}/plugins/miao-plugin/resources/meta`
weaponBuffs = (await import(`${_path}/weapons/calc.js`)).weapons || {}
artisBuffs = (await import(`${_path}/reliquaries/calc.js`)).buffs || {}
weaponBuffs = {} || (await import(`${_path}/weapon/index.js`)).calc || {}
artisBuffs = (await import(`${_path}/artifact/calc.js`)).buffs || {}
}
await init()

View File

@ -17,7 +17,7 @@
<img src="{{_res_path}}{{ds.side}}" onerror="whenError(this)"/>
</div>
<div class="arti-icon">
<img src="{{_res_path}}/meta/reliquaries/icon/{{ds.name}}.png"/>
<img src="{{_res_path}}/{{ds.img}}"/>
</div>
<div class="head">
<strong>{{ds.name}}</strong>

View File

@ -41,7 +41,7 @@
<div class="item arti {{idx}}">
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
<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>
</div>
<div class="head">

View File

@ -8,91 +8,90 @@
{{block 'main'}}
<div>
<div class="char-title">
<div class="char-name">
<strong>{{data.sName||data.name}}</strong>
{{if data.fetter}} <span class="fetter fetter{{data.fetter}}"></span> {{/if}}
{{if typeof(data.cons)!=='undefined'}} <span class="cons cons-{{data.cons}}">{{data.cons}}命</span> {{/if}}
</div>
<div class="char-lv">
<span>Uid:{{uid}}</span>
{{if data.level}}<span>Lv.{{data.level}}</span>{{/if}}
</div>
<div class="char-title">
<div class="char-name">
<strong>{{data.sName||data.name}}</strong>
{{if data.fetter}} <span class="fetter fetter{{data.fetter}}"></span> {{/if}}
{{if typeof(data.cons)!=='undefined'}} <span class="cons cons-{{data.cons}}">{{data.cons}}命</span> {{/if}}
</div>
{{if data.level}}
{{set w = data.weapon }}
<div class="char-lv">
<span>Uid:{{uid}}</span>
{{if data.level}}<span>Lv.{{data.level}}</span>{{/if}}
</div>
</div>
{{if data.level}}
{{set w = data.weapon }}
<div class="char-detail cont">
<div class="char-detail cont">
<div class="cont weapon-cont left-line">
<img class="img" src="{{_res_path}}{{w.img}}"/>
<div class="weapon-info">
<strong>{{w.name.length > 4 ? (w.abbr||w.name) : w.name}}</strong>
<div class="star star-{{w.star}}"></div>
<span>Lv.{{w.leve || w.level}} <span
class="affix affix-{{w.affix}}">精{{w.affix}}</span></span>
</div>
</div>
<div class="cont weapon-cont left-line">
<img class="img" src="{{_res_path}}{{w.img}}"/>
<div class="weapon-info">
<strong>{{w.name.length > 4 ? (w.abbr||w.name) : w.name}}</strong>
<div class="star star-{{w.star}}"></div>
<span>Lv.{{w.leve || w.level}} <span
class="affix affix-{{w.affix}}">精{{w.affix}}</span></span>
</div>
</div>
{{set talent = data.talent }}
{{set keys = ['a','e','q'] }}
{{ if talent && talent.a && talent.a.level}}
<div class="cont talent-cont elem-{{data.elem}}">
{{each keys key}}
<div class="talent-item">
<div class="talent-icon
{{set talent = data.talent }}
{{set keys = ['a','e','q'] }}
{{ if talent && talent.a && talent.a.level}}
<div class="cont talent-cont elem-{{data.elem}}">
{{each keys key}}
<div class="talent-item">
<div class="talent-icon
{{talent[key].level > talent[key].original ? `talent-plus`:``}}
{{talent[key].original >= 10 ? `talent-crown`:``}}">
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{data.imgs[key]}})"></div>
<span>{{talent[key].level}}</span>
</div>
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{data.imgs[key]}})"></div>
<span>{{talent[key].level}}</span>
</div>
</div>
{{/each}}
</div>
{{/each}}
</div>
{{else}}
<div class="cont notice-cont">
请绑定CK以获取天赋信息
</div>
{{/if}}
<div class="cont artis-cont right-line">
{{set idxs = [1,2,3,4,5] }}
<div class="artis-list">
{{each idxs idx}}
{{if data.artis && data.artis[idx]}}
{{set arti = data.artis[idx]}}
<div class="item">
<div class="item-icon" style="background-image:url({{_res_path}}{{arti.img}})"></div>
<span class="lv">{{arti.level}}</span>
</div>
{{else}}
<div class="cont notice-cont">
请绑定CK以获取天赋信息
</div>
<div class="item no-item"></div>
{{/if}}
<div class="cont artis-cont right-line">
{{set idxs = [1,2,3,4,5] }}
<div class="artis-list">
{{each idxs idx}}
{{if data.artis && data.artis[idx]}}
{{set arti = data.artis[idx]}}
<div class="item">
<div class="item-icon"
style="background-image:url({{_res_path}}meta/reliquaries/icon/{{arti.name}}.png)"></div>
<span class="lv">{{arti.level}}</span>
</div>
{{else}}
<div class="item no-item"></div>
{{/if}}
{{/each}}
</div>
<div class="artis-sets">{{data.artisSet?.name||'圣遗物'}}</div>
</div>
{{/each}}
</div>
<div class="artis-sets">{{data.artisSet?.name||'圣遗物'}}</div>
</div>
<div class="copyright data-source">
数据源:{{data.dataSourceName}} {{data.updateTime}}
</div>
{{else}}
{{if custom}}
<div class="no-info">自定义角色暂无角色信息</div>
{{else}}
<div class="no-info">未能获取到角色信息,请将角色放置在米游社角色展柜中</div>
{{/if}}
{{/if}}
<div><img src="{{_res_path}}{{bg.img}}" title="{{name}}" class="bg"></div>
</div>
<div class="copyright data-source">
数据源:{{data.dataSourceName}} {{data.updateTime}}
</div>
{{else}}
{{if custom}}
<div class="no-info">自定义角色暂无角色信息</div>
{{else}}
<div class="no-info">未能获取到角色信息,请将角色放置在米游社角色展柜中</div>
{{/if}}
{{/if}}
<div><img src="{{_res_path}}{{bg.img}}" title="{{name}}" class="bg"></div>
</div>

View File

@ -421,9 +421,12 @@ body {
font-size: 12px;
display: block;
}
.artis .item .arti-icon img {
.artis .item .arti-icon .img {
width: 60px;
height: 60px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.artis .head {
color: #fff;
@ -543,13 +546,16 @@ body {
overflow: hidden;
height: 97px;
}
.artis .weapon img {
.artis .weapon .img {
width: 100px;
height: 100px;
top: 0;
left: 0;
position: absolute;
z-index: 2;
background-position: center;
background-size: contain;
background-repeat: no-repeat;
}
.artis .weapon .head {
position: absolute;

View File

@ -13,18 +13,19 @@
<div class="main-pic"
style="background-image:url({{_res_path}}{{imgs.splash}})"></div>
<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}}
<span class="cons cons-{{data.cons}}">{{data.cons}}命</span></div>
<div class="char-talents">
{{each talentMap tName key}}
{{set talent = data.talent[key] || {} }}
<div class="talent-item">
<div class="talent-icon
{{talent[key].level > talent[key].original ? `talent-plus`:``}}
{{talent[key].original >= 10 ? `talent-crown`:``}}">
{{talent.level > talent.original ? `talent-plus`:``}}
{{talent.original >= 10 ? `talent-crown`:``}}">
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{imgs[key]}})"></div>
<span>{{talent[key].level}}</span>
<span>{{talent.level}}</span>
</div>
</div>
{{/each}}
@ -66,7 +67,7 @@
<div class="artis">
<div>
<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">
<strong>{{weapon.name}}</strong>
<div class="star star-{{weapon.star}}"></div>
@ -86,7 +87,7 @@
<div class="item arti">
{{if ds && ds.name && ds.main && ds.main.title && ds.main.title!="undefined"}}
<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>
</div>
<div class="head">
@ -127,7 +128,7 @@
<div class="artis input-mode">
<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">
<strong>{{weapon.name}}</strong>
<div class="star star-{{weapon.star}}"></div>
@ -140,7 +141,7 @@
<div class="item arti">
{{if ds && ds.name }}
<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>
</div>
<div class="head">

View File

@ -506,9 +506,12 @@ body {
display: block;
}
.arti-icon img {
.arti-icon .img {
width: 60px;
height: 60px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
}
@ -671,13 +674,16 @@ body {
height: 97px;
}
.artis .weapon img {
.artis .weapon .img {
width: 100px;
height: 100px;
top: 0;
left: 0;
position: absolute;
z-index: 2;
background-position: center;
background-size: contain;
background-repeat: no-repeat;
}
.artis .weapon .head {

View File

@ -63,7 +63,7 @@
<span class="cons weapon cons-{{weapon.affix+1}} star{{weapon.star}}">{{weapon.affix}}</span>
<div class="item-icon weapon-icon">
<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>
<span class="item-name">{{weapon.abbr}}</span>
@ -71,15 +71,14 @@
{{/if}}
</div>
{{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="item item-banner avatar-artis artis{{names.length}}">
<div class="artis item-icon {{names.length>0?'star5':'no-artis'}}">
{{each names name}}
<span class="img"
style="background-image:url({{_res_path}}/meta/reliquaries/icon/{{name}}.png)"></span>
<div class="item item-banner avatar-artis artis{{imgs.length}}">
<div class="artis item-icon {{imgs.length>0?'star5':'no-artis'}}">
{{each imgs img}}
<div class="img" style="background-image:url({{_res_path}}{{img}})"></div>
{{/each}}
{{if names.length === 0}}
{{if imgs.length === 0}}
<span class="img no-artis"></span>
{{/if}}
</div>

View File

@ -29,8 +29,9 @@
.item-card .item-bg {
width: 100%;
padding: 100% 0 0;
background-size: cover;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
margin: 0;
}
.item-card .bg1 {

View File

@ -27,15 +27,14 @@
<div class="avatar-detail">
<div class="item avatar-weapon">
<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>
</div>
</div>
<div class="item avatar-artis artis{{avatar.artisSet?.names?.length}}">
<div class="artis item-icon">
{{each avatar.artisSet?.names name}}
<span class="img"
style="background-image:url({{_res_path}}/meta/reliquaries/icon/{{name}}.png)"></span>
{{each avatar.artisSet?.imgs img}}
<div class="img" style="background-image:url({{_res_path}}{{img}})"></div>
{{/each}}
</div>
</div>

View File

@ -34,8 +34,9 @@
.item-bg {
width: 100%;
padding: 100% 0 0;
background-size: cover;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
margin: 0;
}

View 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 }

View 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(',')

View File

@ -1,39 +0,0 @@
export default {
炽烈的炎之魔女: '魔女',
昔日宗室之仪: '宗室',
翠绿之影: '风套',
千岩牢固: '千岩',
流浪大地的乐团: '乐团',
绝缘之旗印: '绝缘',
被怜爱的少女: '少女',
沉沦之心: '水套',
角斗士的终幕礼: '角斗',
冰风迷途的勇士: '冰套',
逆飞的流星: '逆飞',
苍白之火: '苍白',
华馆梦醒形骸记: '华馆',
战狂: '战狂',
悠古的磐岩: '岩套',
渡过烈火的贤人: '渡火',
游医: '游医',
教官: '教官',
冒险家: '冒险',
追忆之注连: '追忆',
海染砗磲: '海染',
如雷的盛怒: '如雷',
染血的骑士道: '染血',
平息鸣雷的尊者: '平雷',
流放者: '流放',
学士: '学士',
行者之心: '行者',
幸运儿: '幸运',
勇士之心: '勇士',
守护之心: '守护',
武人: '武人',
赌徒: '赌徒',
奇迹: '奇迹',
辰砂往生录: '辰砂',
来歆余响: '余响',
深林的记忆: '草套',
饰金之梦: '饰金'
}

View File

@ -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 }
}

View File

@ -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: '苍白42层提高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
}
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Some files were not shown because too many files have changed in this diff Show More