武器、圣遗物资源采用webp格式,资源引用逻辑更新
@ -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时,使用本地面板数据展示练度信息
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
})
|
||||
|
@ -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) => {
|
||||
|
@ -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
@ -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 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]
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
})
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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'
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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">
|
||||
|
@ -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 {
|
||||
|
@ -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>
|
||||
|
@ -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 {
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
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 |