变更部分星铁面板素材图

This commit is contained in:
Kokomi 2023-05-19 04:23:19 +08:00
parent 9ee1aa28a9
commit 2a21366e1a
41 changed files with 881 additions and 643 deletions

View File

@ -131,13 +131,15 @@ let ProfileDetail = {
let a = profile.attr
let base = profile.base
let attr = {}
lodash.forEach(['hp', 'def', 'atk', 'mastery'], (key) => {
let game = char.game
lodash.forEach((game === 'gs' ? 'hp,def,atk,mastery' : 'hp,def,atk,speed').split(','), (key) => {
let fn = (n) => Format.comma(n, key === 'hp' ? 0 : 1)
attr[key] = fn(a[key])
attr[`${key}Base`] = fn(base[key])
attr[`${key}Plus`] = fn(a[key] - base[key])
})
lodash.forEach(['cpct', 'cdmg', 'recharge', 'dmg'], (key) => {
lodash.forEach((game === 'gs' ? 'cpct,cdmg,recharge,dmg' : 'cpct,cdmg,recharge,dmg,effPct,stance').split(','), (key) => {
let fn = Format.pct
let key2 = key
if (key === 'dmg' && a.phy > a.dmg) {
@ -148,7 +150,7 @@ let ProfileDetail = {
attr[`${key}Plus`] = fn(a[key2] - base[key2])
})
let weapon = Weapon.get(profile.weapon.name, char.game)
let weapon = Weapon.get(profile.weapon.name, game)
let w = profile.weapon
let wCfg = {}
if (mode === 'weapon') {
@ -167,10 +169,11 @@ let ProfileDetail = {
}
let artisDetail = profile.getArtisMark()
let artisKeyTitle = ProfileArtis.getArtisKeyTitle()
let artisKeyTitle = ProfileArtis.getArtisKeyTitle(game)
let renderData = {
save_id: uid,
uid,
game,
data: profile.getData('name,abbr,cons,level,weapon,talent,dataSource,updateTime,imgs,costumeSplash'),
attr,
elem: char.elem,

View File

@ -12,20 +12,32 @@ const elemAlias = {
}
const elemAliasSR = {
fire: '火',
ice: '冰',
wind: '风',
elec: '雷',
phy: '物理',
quantum: '量子',
imaginary: '虚数'
}
// 元素属性映射, 名称=>elem
let elemMap = {}
let elemMapSR = {}
// 标准元素名
let elemTitleMap = {}
let elemTitleMapSR = elemAliasSR
lodash.forEach(elemAlias, (txt, key) => {
elemMap[key] = key
elemTitleMap[key] = txt[0]
Data.eachStr(txt, (t) => (elemMap[t] = key))
})
lodash.forEach(elemAliasSR, (txt, key) => {
elemMapSR[key] = key
elemMapSR[txt] = key
})
const Elem = {
// 根据名称获取元素key
@ -56,8 +68,8 @@ const Elem = {
return ''
},
eachElem (fn) {
lodash.forEach(elemTitleMap, (title, key) => {
eachElem (fn, game = 'gs') {
lodash.forEach(game === 'gs' ? elemTitleMap : elemTitleMapSR, (title, key) => {
fn(key, title)
})
},

View File

@ -37,7 +37,7 @@ class Artifact extends Base {
}
get img () {
return this.isGs ? `meta/artifact/imgs/${this.setName}/${this.idx}.webp` : `meta-sr/artifact/imgs/${this.setName}/arti-${this.idx}.webp`
return this.isGs ? `meta/artifact/imgs/${this.setName}/${this.idx}.webp` : `meta-sr/artifact/${this.setName}/arti-${this.idx}.webp`
}
static get (name, game = 'gs') {
@ -110,15 +110,17 @@ class Artifact extends Base {
return this.meta.ids[id] || ''
}
getAttrData (mainId, attrData, level = 1, star = 5) {
getAttrData (mainId, attrData, level = 1, star = 5, idx = 1) {
let mainKey = metaDataSR.mainIdx[idx][mainId]
let starCfg = metaDataSR.starData[star]
let mainCfg = starCfg.main[mainId]
let mainCfg = starCfg.main[mainKey]
if (!mainId || !mainCfg) {
return false
}
let main = {
id: mainId,
key: mainCfg.key,
key: mainKey,
value: mainCfg.base + mainCfg.step * level
}
let attrs = []

View File

@ -46,8 +46,8 @@ export default class AvatarArtis extends Base {
})
}
static getArtisKeyTitle () {
return ArtisMark.getKeyTitleMap()
static getArtisKeyTitle (game = 'gs') {
return ArtisMark.getKeyTitleMap(game)
}
setArtisData (ds = {}, isProfile = false) {
@ -77,7 +77,7 @@ export default class AvatarArtis extends Base {
arti.star = artiObj.getStarById(ds.id) || arti.star || 5
if (ds.mainId && ds.attrs) {
let attr = artiObj.getAttrData(ds.mainId, ds.attrs, arti.level, arti.star)
let attr = artiObj.getAttrData(ds.mainId, ds.attrs, arti.level, arti.star, idx)
if (attr) {
arti.mainId = ds.mainId
arti.main = attr.main || arti.main || {}
@ -129,7 +129,6 @@ export default class AvatarArtis extends Base {
forEach (fn) {
lodash.forEach(this.artis, (ds, idx) => {
console.log(ds, this.game, ds.mainId, ds.main)
if (ds.name) {
fn(ds, idx)
}

View File

@ -300,12 +300,13 @@ class Character extends Base {
return {}
}
const path = this.isSr ? 'resources/meta-sr/character' : 'resources/meta/character'
const file = this.isSr ? 'data' : 'detail'
try {
if (this.isTraveler) {
this._detail = Data.readJSON(`${path}/旅行者/${this.elem}/detail.json`, 'miao')
this._detail = Data.readJSON(`${path}/旅行者/${this.elem}/${file}.json`, 'miao')
} else {
this._detail = Data.readJSON(`${path}/${this.name}/detail.json`, 'miao')
this._detail = Data.readJSON(`${path}/${this.name}/${file}.json`, 'miao')
}
} catch (e) {
console.log(e)
@ -327,6 +328,31 @@ class Character extends Base {
}
return this._artisRule
}
/**
* 获取等级属性
* @param level
* @param promote
* @returns {{}|boolean}
*/
getLvAttr (level, promote) {
let metaAttr = this.detail?.attr
if (!metaAttr) {
return false
}
if (this.isSr) {
let lvAttr = metaAttr[promote]
let ret = {}
lodash.forEach(lvAttr.attrs, (v, k) => {
ret[k] = v * 1
})
lodash.forEach(lvAttr.grow, (v, k) => {
ret[k] = ret[k] * 1 + v * (level - 1)
})
return ret
}
}
}
Character.CharId = CharId

View File

@ -71,11 +71,11 @@ export default class ProfileArtis extends AvatarArtis {
let totalVaild = 0
this.forEach((arti, idx) => {
let mark = ArtisMark.getMark(charCfg, idx, arti.main, arti.attrs, this.elem)
let crit = ArtisMark.getCritMark(charCfg, idx, arti.main, arti.attrs, this.elem)
let vaild = ArtisMark.getValidMark(charCfg, idx, arti.main, arti.attrs, this.elem)
// let crit = ArtisMark.getCritMark(charCfg, idx, arti.main, arti.attrs, this.elem)
// let vaild = ArtisMark.getValidMark(charCfg, idx, arti.main, arti.attrs, this.elem)
totalMark += mark
totalCrit += crit
totalVaild += vaild
// totalCrit += crit
// totalVaild += vaild
setCount[arti.set] = (setCount[arti.set] || 0) + 1
if (!withDetail) {
artis[idx] = {
@ -84,8 +84,9 @@ export default class ProfileArtis extends AvatarArtis {
markClass: ArtisMark.getMarkClass(mark)
}
} else {
let artifact = Artifact.get(arti.name)
console.log(arti.main, arti.mainId, arti)
let artifact = Artifact.get(arti.name, this.game)
// console.log('artifact', artifact, arti)
// console.log(`arti idx ${idx} ${artifact.name}\n\n\n`)
artis[idx] = {
name: artifact.name,
set: artifact.setName,
@ -115,10 +116,10 @@ export default class ProfileArtis extends AvatarArtis {
let ret = {
mark: Format.comma(totalMark, 1),
_mark: totalMark,
crit: Format.comma(totalCrit, 1),
/* crit: Format.comma(totalCrit, 1),
_crit: totalCrit,
valid: Format.comma(totalVaild, 1),
_valid: totalVaild,
_valid: totalVaild, */
markClass: ArtisMark.getMarkClass(totalMark / 5),
artis,
sets,

View File

@ -88,7 +88,6 @@ export default class ProfileData extends AvatarData {
// 获取当前profileData的圣遗物评分withDetail=false仅返回简略信息
getArtisMark (withDetail = true) {
if (this.hasData) {
console.log(this.game)
return this.artis.getMarkDetail(withDetail)
}
return {}

View File

@ -34,7 +34,7 @@ class Weapon extends Base {
}
get img () {
return `meta/${this.isGs ? 'meta' : 'meta-sr'}/${this.type}/${this.name}/icon.webp`
return `${this.isGs ? 'meta' : 'meta-sr'}/weapon/${this.type}/${this.name}/icon.webp`
}
get imgs () {
@ -46,9 +46,9 @@ class Weapon extends Base {
}
} else {
return {
icon: `meta/weapon-sr/${this.type}/${this.name}/icon.webp`,
icon2: `meta/weapon-sr/${this.type}/${this.name}/icon-s.webp`,
gacha: `meta/weapon-sr/${this.type}/${this.name}/splash.webp`
icon: `meta-sr/weapon/${this.type}/${this.name}/icon.webp`,
icon2: `meta-sr/weapon/${this.type}/${this.name}/icon-s.webp`,
gacha: `meta-sr/weapon/${this.type}/${this.name}/splash.webp`
}
}
}
@ -108,9 +108,10 @@ class Weapon extends Base {
if (this._detail) {
return this._detail
}
const path = this.isGs ? 'resources/meta/weapon' : 'resources/meta/weapon-sr'
const path = this.isGs ? 'resources/meta/weapon' : 'resources/meta-sr/weapon'
try {
this._detail = Data.readJSON(`${path}/${this.type}/${this.name}/data.json`, 'miao')
console.log(`${path}/${this.type}/${this.name}/data.json`)
} catch (e) {
console.log(e)
}
@ -118,6 +119,22 @@ class Weapon extends Base {
}
calcAttr (level, promote = -1) {
let metaAttr = this.detail?.attr
if (!metaAttr) {
return false
}
if (this.isSr) {
let lvAttr = metaAttr[promote]
let ret = {}
lodash.forEach(lvAttr.attrs, (v, k) => {
ret[k] = v * 1
})
lodash.forEach(this.detail?.growAttr, (v, k) => {
ret[k] = ret[k] * 1 + v * (level - 1)
})
return ret
}
let lvLeft = 1
let lvRight = 20
let lvStep = [1, 20, 40, 50, 60, 70, 80, 90]

View File

@ -8,6 +8,8 @@ import mggApi from './MggApi.js'
import hutaoApi from './HutaoApi.js'
import luluApi from './LuluApi.js'
import lodash from 'lodash'
let { diyCfg } = await Data.importCfg('profile')
const Profile = {
@ -95,9 +97,7 @@ const Profile = {
},
isProfile (avatar) {
console.log('is Sr', avatar.isSr, avatar._source)
if (avatar.isSr) {
return true
}
// 检查数据源
@ -106,7 +106,7 @@ const Profile = {
}
// 检查武器及天赋
if (!avatar.weapon || !avatar.talent) {
if (!avatar.weapon || lodash.isUndefined(avatar.weapon.promote) || !avatar.talent) {
return false
}
// 检查圣遗物词条是否完备

View File

@ -7,19 +7,19 @@ import {
let ArtisMark = {
// 根据Key获取标题
getKeyByTitle (title, dmg = false, game = 'gs') {
getKeyByTitle (title, game = 'gs') {
if (/元素伤害加成/.test(title) || Format.isElem(title)) {
let elem = Format.matchElem(title)
return dmg ? 'dmg' : elem
return elem
} else if (title === '物理伤害加成') {
return 'phy'
}
return (game === 'gs' ? attrNameMap : attrNameMapSR)[title]
return (game === 'gs' ? attrNameMap : attrMap)[title]
},
getKeyTitleMap (game = 'gs') {
let ret = {}
lodash.forEach(attrMap, (ds, key) => {
lodash.forEach(game === 'gs' ? attrMap : attrMapSR, (ds, key) => {
ret[key] = ds.title
})
Format.eachElem((key, name) => {
@ -28,13 +28,13 @@ let ArtisMark = {
return ret
},
formatAttr (ds) {
formatAttr (ds, game = 'gs') {
if (!ds) {
return {}
}
if (lodash.isArray(ds) && ds[0] && ds[1]) {
return {
key: ArtisMark.getKeyByTitle(ds[0]),
key: ArtisMark.getKeyByTitle(ds[0], game),
value: ds[1]
}
}
@ -42,7 +42,7 @@ let ArtisMark = {
return {}
}
return {
key: ds.key || ArtisMark.getKeyByTitle(ds.title || ds.name || ds.key || ds.id || ''),
key: ds.key || ArtisMark.getKeyByTitle(ds.title || ds.name || ds.key || ds.id || '', game),
value: ds.value || ''
}
},
@ -52,58 +52,32 @@ let ArtisMark = {
* @param ds
* @param charAttrCfg
* @param isMain
* @param game
* @returns {{title: *, value: string}|*[]}
*/
formatArti (ds, charAttrCfg = false, isMain = false, game = 'gs') {
// 若为attr数组
if (ds[0] && (ds[0].title || ds[0].key)) {
let ret = []
let totalUpNum = 0
let ltArr = []
let isIdAttr = false
lodash.forEach(ds, (d) => {
isIdAttr = !d.isCalcNum
let arti = ArtisMark.formatArti(d, charAttrCfg, isMain, game)
ret.push(arti)
if (isIdAttr) {
return true
}
totalUpNum += arti.upNum
if (arti.hasLt) {
ltArr.push(arti)
}
delete arti.hasLt
delete arti.hasGt
})
if (!isIdAttr) {
ltArr = lodash.sortBy(ltArr, 'upNum').reverse()
for (let arti of ltArr) {
if (totalUpNum > 9) {
arti.upNum = arti.upNum - 1
totalUpNum--
} else {
break
}
}
}
return ret
}
let key = ds.key
let title = ds.title || ds[0]
if (!key) {
key = ArtisMark.getKeyByTitle(title)
key = ArtisMark.getKeyByTitle(title, game)
}
let isDmg = Format.isElem(key)
let val = ds.value || ds[1]
let value = val
let num = ds.value || ds[1]
if (!key || key === 'undefined') {
return {}
}
let arrCfg = (game === 'gs' ? attrMap : attrMapSR)[isDmg ? 'dmg' : key]
console.log(key, arrCfg)
val = Format[arrCfg?.format || 'comma'](val, 1)
let ret = {
key,
@ -111,14 +85,6 @@ let ArtisMark = {
upNum: ds.upNum || 0,
eff: ds.eff || 0
}
/* if (!isMain && !ret.upNum) {
let incRet = ArtisMark.getIncNum(key, value)
ret.upNum = incRet.num
ret.eff = incRet.eff
ret.hasGt = incRet.hasGt
ret.hasLt = incRet.hasLt
ret.isCalcNum = true
}*/
if (charAttrCfg) {
let mark = charAttrCfg[key]?.mark * num || 0
@ -133,27 +99,6 @@ let ArtisMark = {
return ret
},
// 获取升级次数
getIncNum (key, value) {
let cfg = attrMap[key]
if (!value || !cfg || !cfg.value || !cfg.valueMin) {
return { num: 0 }
}
let maxNum = Math.min(5, Math.floor((value / cfg.valueMin).toFixed(1) * 1))
let minNum = Math.max(1, Math.ceil((value / cfg.value).toFixed(1) * 1))
// 相等时直接返回
if (maxNum === minNum) {
return { num: minNum, eff: value / cfg.value }
}
let avg = Math.round(value / (cfg.value + cfg.valueMin) * 2)
return {
num: avg,
eff: value / cfg.value,
hasGt: maxNum > avg,
hasLt: minNum < avg
}
},
// 获取评分档位
getMarkClass (mark) {
let pct = mark
@ -292,7 +237,8 @@ let ArtisMark = {
for (let idx = 1; idx <= 5; idx++) {
let ds = artis[idx]
if (ds) {
if (!ds.name || !ds.main || !ds.attrs || !ds?.main?.key) {
// 不再支持非id格式的面板
if (!ds.name || !ds.main || !ds.attrs || !ds?.main?.key || !ds.mainId) {
return false
}
}

View File

@ -13,7 +13,7 @@ class AttrCalc {
constructor (profile) {
this.profile = profile
this.char = profile.char
this.game = profile.game
this.game = this.char.game
}
get isGs () {
@ -57,18 +57,18 @@ class AttrCalc {
* @returns {{}}
*/
calc () {
console.log('calc,hahahaha')
this.attr = ProfileAttr.create({}, this.game)
if (this.isGs) {
this.addAttr('recharge', 100, true)
this.addAttr('cpct', 5, true)
this.addAttr('cdmg', 50, true)
} else {
}
this.setCharAttr()
this.setWeaponAttr()
this.setArtisAttr()
return this.attr.getAttr()
}
getBase () {
@ -77,6 +77,9 @@ class AttrCalc {
addAttr (key, val, isBase = false) {
if (key === 'cpct') {
console.log('isCpct', val, isBase)
}
this.attr.addAttr(key, val, isBase)
}
@ -85,11 +88,19 @@ class AttrCalc {
* @param affix
*/
setCharAttr (affix = '') {
if (this.isGs) {
return
}
let { char, level, promote } = this.profile
let metaAttr = char.detail?.attr || {}
let self = this
if (this.isSr) {
// 星铁面板属性
let attr = char.getLvAttr(level, promote)
lodash.forEach(attr, (v, k) => {
k = k + (['hp', 'atk', 'def'].includes(k) ? 'Base' : '')
self.addAttr(k, v, true)
})
return
}
let { keys = {}, details = {} } = metaAttr
let lvLeft = 0
let lvRight = 0
@ -139,12 +150,19 @@ class AttrCalc {
* 计算武器属性
*/
setWeaponAttr () {
if (this.isGs) {
return
}
let wData = this.profile?.weapon || {}
let weapon = Weapon.get(wData?.name || wData?.id, this.game)
let wCalcRet = weapon.calcAttr(wData.level, wData.promote)
let self = this
if (this.isSr) {
// 星铁面板属性
lodash.forEach(wCalcRet, (v, k) => {
k = k + (['hp', 'atk', 'def'].includes(k) ? 'Base' : '')
self.addAttr(k, v, true)
})
return
}
if (wCalcRet) {
this.addAttr('atkBase', wCalcRet.atkBase)
@ -172,15 +190,12 @@ class AttrCalc {
* 计算圣遗物属性
*/
setArtisAttr () {
if (this.isGs) {
return
}
let artis = this.profile?.artis
// 计算圣遗物词条
artis.forEach((arti) => {
this.calcArtisAttr(arti.main, this.char)
lodash.forEach(arti.attrs, (ds) => {
this.calcArtisAttr(ds)
this.calcArtisAttr(ds, this.char)
})
})
// 计算圣遗物静态加成
@ -201,6 +216,8 @@ class AttrCalc {
/**
* 计算单条圣遗物词缀
* @param ds
* @param char
* @param autoPct
* @returns {boolean}
*/
calcArtisAttr (ds, char) {
@ -214,6 +231,7 @@ class AttrCalc {
if (!key) {
return false
}
console.log(key, ds.value)
if (['atk', 'hp', 'def'].includes(key)) {
key = key + 'Pct'
}

View File

@ -821,4 +821,15 @@ body {
line-height: 20px;
color: #bbb;
}
.game-sr .char-talents {
transform: scale(0.8);
transform-origin: top left;
margin: -8px 0 -14px;
}
.game-sr .char-talents .talent-item {
margin: 0 -3px;
}
.game-sr .artis-weapon {
display: none;
}
/*# sourceMappingURL=profile-detail.css.map */

View File

@ -7,265 +7,271 @@
{{set weapon = data.weapon}}
{{set dataSource = data.dataSource}}
{{set talentMap = {a: '普攻', e: '战技', q: '爆发'} }}
{{set talentMap = game === 'sr' ? {a: '普攻', e: '战技', t:'天赋', q: '爆发'} : {a: '普攻', e: '战技', q: '爆发'} }}
{{set {imgs, costumeSplash} = data }}
{{set imgs = imgs || {} }}
{{block 'main'}}
<div class="basic">
<div class="main-pic"
style="background-image:url({{_res_path}}{{costumeSplash||imgs?.splash}})"></div>
<div class="detail">
<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>
{{if mode !== 'weapon'}}
<div class="char-talents">
{{each talentMap tName key}}
{{set talent = data.talent[key] || {} }}
<div class="talent-item">
<div class="talent-icon
<div class="game-{{game}}">
<div class="basic">
<div class="main-pic"
style="background-image:url({{_res_path}}{{costumeSplash||imgs?.splash}})"></div>
<div class="detail">
<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>
{{if mode !== 'weapon'}}
<div class="char-talents">
{{each talentMap tName key}}
{{set talent = data.talent[key] || {} }}
<div class="talent-item">
<div class="talent-icon
{{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.level}}</span>
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{imgs[key]}})"></div>
<span>{{talent.level}}</span>
</div>
</div>
{{/each}}
</div>
<ul class="char-attr">
{{set attrMap = game === 'sr' ? {
hp:'生命值',atk:'攻击力',def:'防御力',speed:'速度',cpct:'暴击率',cdmg:'暴击伤害',dmg:'伤害加成',stance:'击破特效',effPct:'效果命中'
}:{
hp:'生命值',atk:'攻击力',def:'防御力',mastery:'元素精通',cpct:'暴击率',cdmg:'暴击伤害',recharge:'元素充能',dmg:'伤害加成'
} }}
{{set cw = artisDetail?.charWeight || {} }}
{{each attrMap title key}}
<li>
<div class="icon"><i class="i-{{key}}"></i></div>
<div class="title">{{title}}</div>
<div class="weight">
{{if cw[key]}}
<span class="{{cw[key]>=80?'gold':'normal'}}">{{cw[key]}}</span>
{{/if}}
</div>
<div class="value">
{{attr[key]}}
</div>
<div class="value2">
<span class="base">{{attr[key+'Base']}}</span>
<span class="plus">+{{attr[key+'Plus']}}</span>
</div>
</li>
{{/each}}
</ul>
{{else}}
<div class="char-weapon">
<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>
<span>Lv.{{weapon.leve || weapon.level}} <span
class="affix affix-{{weapon.affix}}">精{{weapon.affix}}</span></span>
</div>
</div>
{{/each}}
</div>
<ul class="char-attr">
{{set attrMap = {hp:'生命值',atk:'攻击力',def:'防御力',mastery:'元素精通',cpct:'暴击率',cdmg:'暴击伤害',recharge:'元素充能',dmg:'伤害加成'} }}
{{set cw = artisDetail?.charWeight || {} }}
{{each attrMap title key}}
<li>
<div class="icon"><i class="i-{{key}}"></i></div>
<div class="title">{{title}}</div>
<div class="weight">
{{if cw[key]}}
<span class="{{cw[key]>=80?'gold':'normal'}}">{{cw[key]}}</span>
{{/if}}
</div>
<div class="value">
{{attr[key]}}
</div>
<div class="value2">
<span class="base">{{attr[key+'Base']}}</span>
<span class="plus">+{{attr[key+'Plus']}}</span>
</div>
</li>
{{/each}}
</ul>
{{else}}
<div class="char-weapon">
<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>
<span>Lv.{{weapon.leve || weapon.level}} <span
class="affix affix-{{weapon.affix}}">精{{weapon.affix}}</span></span>
</div>
</div>
{{/if}}
</div>
</div>
<div class="char-cons">
{{set cons = [1,2,3,4,5,6]}}
{{each cons idx}}
<div class="cons-item">
<div class="talent-icon {{idx * 1 > data.cons * 1 ? 'off' : '' }}">
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{imgs[`cons${idx}`]}})"></div>
</div>
</div>
{{/each}}
</div>
<div class="data-info">
{{if data.dataSource}}
<span>数据源:{{ {change:"面板变换"}[data.dataSource]||data.dataSource }}</span>
{{/if}}
{{if data.updateTime}}
<span class="time">{{data.updateTime}}</span>
{{/if}}
</div>
</div>
{{if changeProfile}}
<div class="cont">
<div class="cont-footer dmg-desc">
<strong>该面板为非实际数据。当前替换命令:</strong> {{changeProfile}}
</div>
</div>
{{/if}}
<!-- 【 武器+圣遗物列表】 -->
<div>
{{if mode === "profile"}}
{{set ad = artisDetail}}
<div class="artis">
<div>
<div class="item weapon">
<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>
<span>Lv.{{weapon.leve || weapon.level}} <span
class="affix affix-{{weapon.affix}}">精{{weapon.affix}}</span></span>
</div>
</div>
<div class="item arti-stat">
<div class="arti-class-title">评分规则:{{ad.classTitle}}</div>
<div class="arti-stat-ret">
<div><strong class="mark-{{ad.markClass}}">{{ad.markClass}}</strong><span>圣遗物评级</span></div>
<div><strong>{{ad.mark}}</strong><span>圣遗物总分</span></div>
</div>
</div>
</div>
{{each ad.artis ds idx}}
<div class="item arti">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
<span>+{{ds.level}}</span>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main"><span class="title">{{artisKeyTitle[ds.main?.key]}}</span><span class="val">+{{ds.main.value}}</span>
</li>
{{each ds.attrs attr}}
{{if attr && attr.key}}
<li class="{{ad.charWeight[attr.key]*1 > 79.9 ?`great`:(ad.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}">
<span class="title">{{if attr.eff}}<i class="eff">{{attr.eff || ''}}</i>{{/if}}{{if attr.upNum}}<i class="up-num up-{{attr.upNum}}"></i>{{/if}}{{artisKeyTitle[attr.key]}}</span>
<span class="val">+{{attr.value}}</span>
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="char-cons">
{{set cons = [1,2,3,4,5,6]}}
{{each cons idx}}
<div class="cons-item">
<div class="talent-icon {{idx * 1 > data.cons * 1 ? 'off' : '' }}">
<div class="talent-icon-img"
style="background-image:url({{_res_path}}{{imgs[`cons${idx}`]}})"></div>
</div>
</div>
{{/each}}
</div>
<div class="data-info">
{{if data.dataSource}}
<span>数据源:{{ {change:"面板变换"}[data.dataSource]||data.dataSource }}</span>
{{/if}}
{{if data.updateTime}}
<span class="time">{{data.updateTime}}</span>
{{/if}}
</div>
{{/each}}
</div>
{{/if}}
</div>
<!-- 【 伤害表格 】 -->
{{ set {dmgRet, dmgCfg, enemyLv, enemyName, dmgMsg, dmgData} = dmgCalc }}
<div>
{{if mode === "profile"}}
{{if changeProfile}}
<div class="cont">
<div class="cont-footer dmg-desc">
当前评分为<strong>喵喵版评分规则</strong>,分值仅供参考与娱乐。可使用<strong>#{{data.abbr}}圣遗物</strong>来查看评分详情
<div class="cont-footer dmg-desc">
<strong>该面板为非实际数据。当前替换命令:</strong> {{changeProfile}}
</div>
</div>
{{/if}}
{{if dmgData?.length > 0}}
<div class="dmg-cont dmg-list cont">
<div class="cont-title">
伤害计算<span>目标为{{enemyLv}}级{{enemyName||'小宝'}},如需调整等级可使用 #敌人等级{{enemyLv}} 来进行设置</span>
</div>
<div class="cont-table">
<div class="tr thead">
<div class="title dmg-idx">#</div>
<div class="title dmg-title">伤害类型</div>
<div>暴击伤害</div>
<div>平均伤害(计算暴击率)</div>
<!-- 【 武器+圣遗物列表】 -->
<div>
{{if mode === "profile"}}
{{set ad = artisDetail}}
<div class="artis">
<div class="artis-weapon">
<div class="item weapon">
<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>
<span>Lv.{{weapon.leve || weapon.level}} <span
class="affix affix-{{weapon.affix}}">精{{weapon.affix}}</span></span>
</div>
</div>
<div class="item arti-stat">
<div class="arti-class-title">评分规则:{{ad.classTitle}}</div>
<div class="arti-stat-ret">
<div><strong class="mark-{{ad.markClass}}">{{ad.markClass}}</strong><span>圣遗物评级</span></div>
<div><strong>{{ad.mark}}</strong><span>圣遗物总分</span></div>
</div>
</div>
</div>
{{each dmgData dmg idx}}
<div class="dmg tr">
<div class="title dmg-idx">{{idx+1}}</div>
<div class="title dmg-title">{{dmg.title}}</div>
{{if dmg.dmg === "NaN"}}
<div class="value value-full">{{dmg.avg}}{{dmg.unit}}</div>
<div class="value value-none"></div>
{{else}}
<div class="value">{{dmg.dmg}}{{dmg.unit}}</div>
<div class="value">{{dmg.avg}}{{dmg.unit}}</div>
{{each ad.artis ds idx}}
<div class="item arti">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
<span>+{{ds.level}}</span>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main"><span class="title">{{artisKeyTitle[ds.main?.key]}}</span><span class="val">+{{ds.main.value}}</span>
</li>
{{each ds.attrs attr}}
{{if attr && attr.key}}
<li class="{{ad.charWeight[attr.key]*1 > 79.9 ?`great`:(ad.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}">
<span class="title">{{if attr.eff}}<i class="eff">{{attr.eff || ''}}</i>{{/if}}{{if attr.upNum}}<i
class="up-num up-{{attr.upNum}}"></i>{{/if}}{{artisKeyTitle[attr.key] || attr.key}}</span>
<span class="val">+{{attr.value}}</span>
</li>
{{/if}}
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</div>
<div class="cont-footer dmg-desc">
使用命令<strong>#{{data.abbr}}伤害</strong>可以查看伤害详情,使用命令<strong>#角色面板帮助</strong>可查看帮助说明
</div>
{{/if}}
</div>
{{/if}}
</div>
<!-- 【 伤害变化详情 】 -->
<div>
{{if mode === "dmg"}}
{{if dmgCfg && dmgCfg.attr && dmgCfg.attr.length>0 && dmgRet}}
<div class="dmg-calc dmg-cont cont">
<div class="cont-title">
词条伤害计算<span>#{{data.abbr}}伤害{{dmgCfg.userIdx+1}}: 当前计算为[{{dmgCfg.title}}]</span>
<!-- 【 伤害表格 】 -->
{{ set {dmgRet, dmgCfg, enemyLv, enemyName, dmgMsg, dmgData} = dmgCalc }}
<div>
{{if mode === "profile"}}
<div class="cont">
<div class="cont-footer dmg-desc">
当前评分为<strong>喵喵版评分规则</strong>,分值仅供参考与娱乐。可使用<strong>#{{data.abbr}}圣遗物</strong>来查看评分详情
</div>
</div>
<div class="cont-table">
<div class="tr thead ">
<div class="td">词条变化</div>
{{each dmgCfg.attr attr}}
<div class="td">
<strong>{{attr.title}}</strong>
<span>+{{attr.text}}</span>
{{/if}}
{{if dmgData?.length > 0}}
<div class="dmg-cont dmg-list cont">
<div class="cont-title">
伤害计算<span>目标为{{enemyLv}}级{{enemyName||'小宝'}},如需调整等级可使用 #敌人等级{{enemyLv}} 来进行设置</span>
</div>
<div class="cont-table">
<div class="tr thead">
<div class="title dmg-idx">#</div>
<div class="title dmg-title">伤害类型</div>
<div>暴击伤害</div>
<div>平均伤害(计算暴击率)</div>
</div>
{{each dmgData dmg idx}}
<div class="dmg tr">
<div class="title dmg-idx">{{idx+1}}</div>
<div class="title dmg-title">{{dmg.title}}</div>
{{if dmg.dmg === "NaN"}}
<div class="value value-full">{{dmg.avg}}{{dmg.unit}}</div>
<div class="value value-none"></div>
{{else}}
<div class="value">{{dmg.dmg}}{{dmg.unit}}</div>
<div class="value">{{dmg.avg}}{{dmg.unit}}</div>
{{/if}}
</div>
{{/each}}
</div>
{{each dmgRet row rowIdx}}
<div class="tr">
<div class="title">
<strong>{{dmgCfg.attr[rowIdx].title}}</strong>
<span>-{{dmgCfg.attr[rowIdx].text}}</span>
</div>
{{each row cell colIdx}}
{{if cell.type === "na"}}
<div class="td na">
<strong>-</strong>
<span>{{dmgCfg.basicRet.avg}}{{dmgCfg.basicRet.dmg!="NaN"?`/${dmgCfg.basicRet.dmg}`:''}}</span>
</div>
{{else}}
<div class="td {{cell.type}}">
<strong>{{cell.val}}</strong>
<div class="cont-footer dmg-desc">
使用命令<strong>#{{data.abbr}}伤害</strong>可以查看伤害详情,使用命令<strong>#角色面板帮助</strong>可查看帮助说明
</div>
</div>
{{/if}}
</div>
<span>{{cell.avg}}{{cell.dmg!="NaN"?`/${cell.dmg}`:''}}</span>
<!-- 【 伤害变化详情 】 -->
<div>
{{if mode === "dmg"}}
{{if dmgCfg && dmgCfg.attr && dmgCfg.attr.length>0 && dmgRet}}
<div class="dmg-calc dmg-cont cont">
<div class="cont-title">
词条伤害计算<span>#{{data.abbr}}伤害{{dmgCfg.userIdx+1}}: 当前计算为[{{dmgCfg.title}}]</span>
</div>
<div class="cont-table">
<div class="tr thead ">
<div class="td">词条变化</div>
{{each dmgCfg.attr attr}}
<div class="td">
<strong>{{attr.title}}</strong>
<span>+{{attr.text}}</span>
</div>
{{/each}}
</div>
{{each dmgRet row rowIdx}}
<div class="tr">
<div class="title">
<strong>{{dmgCfg.attr[rowIdx].title}}</strong>
<span>-{{dmgCfg.attr[rowIdx].text}}</span>
</div>
{{each row cell colIdx}}
{{if cell.type === "na"}}
<div class="td na">
<strong>-</strong>
<span>{{dmgCfg.basicRet.avg}}{{dmgCfg.basicRet.dmg!="NaN"?`/${dmgCfg.basicRet.dmg}`:''}}</span>
</div>
{{else}}
<div class="td {{cell.type}}">
<strong>{{cell.val}}</strong>
<span>{{cell.avg}}{{cell.dmg!="NaN"?`/${cell.dmg}`:''}}</span>
</div>
{{/if}}
{{/each}}
</div>
{{/if}}
{{/each}}
</div>
{{/each}}
</div>
<div class="cont-footer dmg-desc">
<ul>
<li>大数字的含义为圣遗物副词条置换后<strong>平均伤害</strong>的变化,下方的详情数字为<strong>平均伤害</strong>/<strong>暴击伤害</strong></li>
<li>关于<strong>平均伤害</strong>:是将暴击率计算在内的伤害期望,能反映综合的输出能力,不等于实际伤害数字。</li>
<li>可用于评估当前面板下圣遗物副词条的侧重方向。实际游戏情况更加复杂,结果供参考~</li>
<li>如需更换计算的伤害类型,可使用命令 <strong>#{{data.abbr}}伤害+序号</strong>来切换,序号参见伤害计算板块</li>
</ul>
</div>
</div>
{{/if}}
<div class="dmg-cont dmg-msg cont">
<div class="cont-title">Buff列表<span>部分Buff的触发条件以及层数可能影响实际伤害结果</span></div>
<div class="cont-table">
{{each dmgMsg msg}}
<div class="tr">
<div class="th">{{msg[0]}}</div>
<div class="td">{{msg[1]}}</div>
<div class="cont-footer dmg-desc">
<ul>
<li>大数字的含义为圣遗物副词条置换后<strong>平均伤害</strong>的变化,下方的详情数字为<strong>平均伤害</strong>/<strong>暴击伤害</strong></li>
<li>关于<strong>平均伤害</strong>:是将暴击率计算在内的伤害期望,能反映综合的输出能力,不等于实际伤害数字。</li>
<li>可用于评估当前面板下圣遗物副词条的侧重方向。实际游戏情况更加复杂,结果供参考~</li>
<li>如需更换计算的伤害类型,可使用命令 <strong>#{{data.abbr}}伤害+序号</strong>来切换,序号参见伤害计算板块</li>
</ul>
</div>
{{/each}}
</div>
</div>
{{/if}}
</div>
{{/if}}
<div class="dmg-cont dmg-msg cont">
<div class="cont-title">Buff列表<span>部分Buff的触发条件以及层数可能影响实际伤害结果</span></div>
<div class="cont-table">
{{each dmgMsg msg}}
<div class="tr">
<div class="th">{{msg[0]}}</div>
<div class="td">{{msg[1]}}</div>
</div>
{{/each}}
</div>
</div>
{{/if}}
</div>
</div>
{{/block}}

View File

@ -1029,4 +1029,21 @@ body {
font-size: 13px;
line-height: 20px;
color: #bbb;
}
.game-sr {
.char-talents {
transform: scale(.8);
transform-origin: top left;
margin: -8px 0 -14px;
.talent-item {
margin: 0 -3px;
}
}
.artis-weapon {
display: none;
}
}

View File

@ -1,21 +1,22 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="shortcut icon" href="#"/>
<link rel="preload" href="{{_miao_path}}common/font/HYWH-65W.woff" as="font" type="font/woff">
<link rel="preload" href="{{_miao_path}}common/font/NZBZ.woff" as="font" type="font/woff">
<link rel="preload" href="{{_miao_path}}common/font/tttgbnumber.woff" as="font" type="font/woff">
<link rel="stylesheet" type="text/css" href="{{_miao_path}}common/common.css"/>
<title>miao-plugin</title>
{{block 'css'}}
{{/block}}
</head>
<body class="elem-{{element||elem||`hydro`}} {{displayMode || mode || `default`}}-mode {{bodyClass}}" {{sys.scale}}>
<div class="container elem-bg" id="container">
{{block 'main'}}{{/block}}
<div class="copyright">{{@copyright || sys?.copyright}}</div>
</div>
</body>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="shortcut icon" href="#"/>
<link rel="preload" href="{{_miao_path}}common/font/HYWH-65W.woff" as="font" type="font/woff">
<link rel="preload" href="{{_miao_path}}common/font/NZBZ.woff" as="font" type="font/woff">
<link rel="preload" href="{{_miao_path}}common/font/tttgbnumber.woff" as="font" type="font/woff">
<link rel="stylesheet" type="text/css" href="{{_miao_path}}common/common.css"/>
<title>miao-plugin</title>
{{block 'css'}}
{{/block}}
</head>
{{set elemCls = {火:'pyro',冰:'cryo',风:'anemo',雷:'electro',量子:'electro',虚数:'geo',物理:'hydro', }[element||elem] || element || elem || 'hydro' }}
<body class="elem-{{elemCls}} {{displayMode || mode || `default`}}-mode {{bodyClass}}" {{sys.scale}}>
<div class="container elem-bg" id="container">
{{block 'main'}}{{/block}}
<div class="copyright">{{@copyright || sys?.copyright}}</div>
</div>
</body>
</html>

View File

@ -1,130 +1,175 @@
{
"mainIdx": {
"1": [
"hp"
],
"2": [
"atk"
],
"3": [
"hpPct",
"atkPct",
"defPct",
"cpct",
"cdmg",
"heal",
"effPct"
],
"4": [
"hpPct",
"atkPct",
"defPct",
"speed"
],
"5": [
"hpPct",
"atkPct",
"defPct",
"phy",
"fire",
"ice",
"elec",
"wind",
"quantum",
"imaginary"
],
"6": [
"stance",
"recharge",
"hpPct",
"atkPct",
"defPct"
]
"1": {
"1": "hpPlus"
},
"2": {
"1": "atkPlus"
},
"3": {
"1": "hp",
"2": "atk",
"3": "def",
"4": "cpct",
"5": "cdmg",
"6": "heal",
"7": "effPct"
},
"4": {
"1": "hp",
"2": "atk",
"3": "def",
"4": "speed"
},
"5": {
"1": "hp",
"2": "atk",
"3": "def",
"4": "phy",
"5": "fire",
"6": "ice",
"7": "elec",
"8": "wind",
"9": "quantum",
"10": "imaginary"
},
"6": {
"1": "stance",
"2": "recharge",
"3": "hp",
"4": "atk",
"5": "def"
}
},
"starData": {
"2": {
"main": {
"1": {
"key": "stance",
"base": 0.04147200076840818,
"step": 0.014515000162646174
"hpPlus": {
"id": "1",
"base": 45.158399999840185,
"step": 15.805440000956878
},
"2": {
"key": "recharge",
"base": 0.01244200044311583,
"step": 0.004355000331997871
"atkPlus": {
"id": "1",
"base": 22.579200000036508,
"step": 7.902720001293346
},
"3": {
"key": "hpPct",
"base": 0.027648000279441476,
"step": 0.009677000343799591
"hp": {
"id": "3",
"base": 2.7648000279441476,
"step": 0.9677000343799591
},
"4": {
"key": "atkPct",
"base": 0.027648000279441476,
"step": 0.009677000343799591
"atk": {
"id": "4",
"base": 2.7648000279441476,
"step": 0.9677000343799591
},
"5": {
"key": "defPct",
"base": 0.03456000052392483,
"step": 0.012096000602468848
"def": {
"id": "5",
"base": 3.4560000523924828,
"step": 1.2096000602468848
},
"6": {
"key": "ice",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"cpct": {
"id": "4",
"base": 2.0736000733450055,
"step": 0.7258000085130334
},
"7": {
"key": "elec",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"cdmg": {
"id": "5",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"8": {
"key": "wind",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"heal": {
"id": "6",
"base": 2.2118000080808997,
"step": 0.7741000270470977
},
"9": {
"key": "quantum",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"effPct": {
"id": "7",
"base": 2.7648000279441476,
"step": 0.9677000343799591
},
"10": {
"key": "imaginary",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"speed": {
"id": "4",
"base": 1.6128000009339303,
"step": 1
},
"phy": {
"id": "4",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"fire": {
"id": "5",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"ice": {
"id": "6",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"elec": {
"id": "7",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"wind": {
"id": "8",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"quantum": {
"id": "9",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"imaginary": {
"id": "10",
"base": 2.4883000878617167,
"step": 0.8708999957889318
},
"stance": {
"id": "1",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"recharge": {
"id": "2",
"base": 1.244200044311583,
"step": 0.43550003319978714
}
},
"sub": {
"1": {
"key": "hp",
"key": "hpPlus",
"base": 13.548016000073403,
"step": 1.693502000765875
},
"2": {
"key": "atk",
"key": "atkPlus",
"base": 6.774008000502363,
"step": 0.8467510011978447
},
"3": {
"key": "def",
"key": "defPlus",
"base": 6.774008000502363,
"step": 0.8467510011978447
},
"4": {
"key": "hpPct",
"base": 0.013824000488966703,
"step": 0.0017280005849897861
"key": "hp",
"base": 1.3824000488966703,
"step": 0.17280005849897861
},
"5": {
"key": "atkPct",
"base": 0.013824000488966703,
"step": 0.0017280005849897861
"key": "atk",
"base": 1.3824000488966703,
"step": 0.17280005849897861
},
"6": {
"key": "defPct",
"base": 0.017280000261962414,
"step": 0.002160000381991267
"key": "def",
"base": 1.7280000261962414,
"step": 0.21600003819912672
},
"7": {
"key": "speed",
@ -133,114 +178,159 @@
},
"8": {
"key": "cpct",
"base": 0.010368000715970993,
"step": 0.001296000787988305
"base": 1.0368000715970993,
"step": 0.1296000787988305
},
"9": {
"key": "cdmg",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"10": {
"key": "effPct",
"base": 0.013824000488966703,
"step": 0.0017280005849897861
"base": 1.3824000488966703,
"step": 0.17280005849897861
},
"11": {
"key": "effDef",
"base": 0.013824000488966703,
"step": 0.0017280005849897861
"base": 1.3824000488966703,
"step": 0.17280005849897861
},
"12": {
"key": "stance",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"base": 2.0736000733450055,
"step": 0.2592000877484679
}
}
},
"3": {
"main": {
"1": {
"key": "stance",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"hpPlus": {
"id": "1",
"base": 67.73760000057518,
"step": 23.70816000062041
},
"2": {
"key": "recharge",
"base": 0.018662000307813287,
"step": 0.006532000144943595
"atkPlus": {
"id": "1",
"base": 33.868800000753254,
"step": 11.854080001125112
},
"3": {
"key": "hpPct",
"base": 0.04147200076840818,
"step": 0.014515000162646174
"hp": {
"id": "3",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"4": {
"key": "atkPct",
"base": 0.04147200076840818,
"step": 0.014515000162646174
"atk": {
"id": "4",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"5": {
"key": "defPct",
"base": 0.05184000078588724,
"step": 0.018143999855965376
"def": {
"id": "5",
"base": 5.184000078588724,
"step": 1.8143999855965376
},
"6": {
"key": "ice",
"base": 0.037324999924749136,
"step": 0.01306400028988719
"cpct": {
"id": "4",
"base": 3.1104000052437186,
"step": 1.0886001167818904
},
"7": {
"key": "elec",
"base": 0.037324999924749136,
"step": 0.01306400028988719
"cdmg": {
"id": "5",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"8": {
"key": "wind",
"base": 0.037324999924749136,
"step": 0.01306400028988719
"heal": {
"id": "6",
"base": 3.3178000478073955,
"step": 1.1612000409513712
},
"9": {
"key": "quantum",
"base": 0.037324999924749136,
"step": 0.01306400028988719
"effPct": {
"id": "7",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"10": {
"key": "imaginary",
"base": 0.037324999924749136,
"step": 0.01306400028988719
"speed": {
"id": "4",
"base": 2.4191999998874962,
"step": 1
},
"phy": {
"id": "4",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"fire": {
"id": "5",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"ice": {
"id": "6",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"elec": {
"id": "7",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"wind": {
"id": "8",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"quantum": {
"id": "9",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"imaginary": {
"id": "10",
"base": 3.7324999924749136,
"step": 1.306400028988719
},
"stance": {
"id": "1",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"recharge": {
"id": "2",
"base": 1.8662000307813287,
"step": 0.6532000144943595
}
},
"sub": {
"1": {
"key": "hp",
"key": "hpPlus",
"base": 20.32202300033532,
"step": 2.540253001032397
},
"2": {
"key": "atk",
"key": "atkPlus",
"base": 10.161012000171468,
"step": 1.2701260005123913
},
"3": {
"key": "def",
"key": "defPlus",
"base": 10.161012000171468,
"step": 1.2701260005123913
},
"4": {
"key": "hpPct",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"key": "hp",
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"5": {
"key": "atkPct",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"key": "atk",
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"6": {
"key": "defPct",
"base": 0.02592000039294362,
"step": 0.0032400002237409353
"key": "def",
"base": 2.592000039294362,
"step": 0.32400002237409353
},
"7": {
"key": "speed",
@ -249,114 +339,159 @@
},
"8": {
"key": "cpct",
"base": 0.015552000375464559,
"step": 0.0019440008327364922
"base": 1.5552000375464559,
"step": 0.19440008327364922
},
"9": {
"key": "cdmg",
"base": 0.031104000052437186,
"step": 0.0038880009669810534
"base": 3.1104000052437186,
"step": 0.38880009669810534
},
"10": {
"key": "effPct",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"11": {
"key": "effDef",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"12": {
"key": "stance",
"base": 0.031104000052437186,
"step": 0.0038880009669810534
"base": 3.1104000052437186,
"step": 0.38880009669810534
}
}
},
"4": {
"main": {
"1": {
"key": "stance",
"base": 0.08294400083832443,
"step": 0.029029999626800418
"hpPlus": {
"id": "1",
"base": 90.31680000037886,
"step": 31.610880001680925
},
"2": {
"key": "recharge",
"base": 0.024883000878617167,
"step": 0.008708999957889318
"atkPlus": {
"id": "1",
"base": 45.158399999840185,
"step": 15.805440000956878
},
"3": {
"key": "hpPct",
"base": 0.05529600055888295,
"step": 0.01935399998910725
"hp": {
"id": "3",
"base": 5.529600055888295,
"step": 1.9353999989107251
},
"4": {
"key": "atkPct",
"base": 0.05529600055888295,
"step": 0.01935399998910725
"atk": {
"id": "4",
"base": 5.529600055888295,
"step": 1.9353999989107251
},
"5": {
"key": "defPct",
"base": 0.0691199996508658,
"step": 0.024192000506445765
"def": {
"id": "5",
"base": 6.911999965086579,
"step": 2.4192000506445765
},
"6": {
"key": "ice",
"base": 0.04976600036025047,
"step": 0.017417999915778637
"cpct": {
"id": "4",
"base": 4.147200076840818,
"step": 1.4515000162646174
},
"7": {
"key": "elec",
"base": 0.04976600036025047,
"step": 0.017417999915778637
"cdmg": {
"id": "5",
"base": 8.294400083832443,
"step": 2.902999962680042
},
"8": {
"key": "wind",
"base": 0.04976600036025047,
"step": 0.017417999915778637
"heal": {
"id": "6",
"base": 4.423700016923249,
"step": 1.5483000548556447
},
"9": {
"key": "quantum",
"base": 0.04976600036025047,
"step": 0.017417999915778637
"effPct": {
"id": "7",
"base": 5.529600055888295,
"step": 1.9353999989107251
},
"10": {
"key": "imaginary",
"base": 0.04976600036025047,
"step": 0.017417999915778637
"speed": {
"id": "4",
"base": 3.225600000238046,
"step": 1.1000000000931323
},
"phy": {
"id": "4",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"fire": {
"id": "5",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"ice": {
"id": "6",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"elec": {
"id": "7",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"wind": {
"id": "8",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"quantum": {
"id": "9",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"imaginary": {
"id": "10",
"base": 4.976600036025047,
"step": 1.7417999915778637
},
"stance": {
"id": "1",
"base": 8.294400083832443,
"step": 2.902999962680042
},
"recharge": {
"id": "2",
"base": 2.4883000878617167,
"step": 0.8708999957889318
}
},
"sub": {
"1": {
"key": "hp",
"key": "hpPlus",
"base": 27.09603099990636,
"step": 3.3870039999019355
},
"2": {
"key": "atk",
"key": "atkPlus",
"base": 13.548016000073403,
"step": 1.693502000765875
},
"3": {
"key": "def",
"key": "defPlus",
"base": 13.548016000073403,
"step": 1.693502000765875
},
"4": {
"key": "hpPct",
"base": 0.027648000279441476,
"step": 0.0034560004714876413
"key": "hp",
"base": 2.7648000279441476,
"step": 0.34560004714876413
},
"5": {
"key": "atkPct",
"base": 0.027648000279441476,
"step": 0.0034560004714876413
"key": "atk",
"base": 2.7648000279441476,
"step": 0.34560004714876413
},
"6": {
"key": "defPct",
"base": 0.03456000052392483,
"step": 0.0043200000654906034
"key": "def",
"base": 3.4560000523924828,
"step": 0.43200000654906034
},
"7": {
"key": "speed",
@ -365,114 +500,159 @@
},
"8": {
"key": "cpct",
"base": 0.020736000733450055,
"step": 0.0025920008774846792
"base": 2.0736000733450055,
"step": 0.2592000877484679
},
"9": {
"key": "cdmg",
"base": 0.04147200076840818,
"step": 0.0051840003579854965
"base": 4.147200076840818,
"step": 0.5184000357985497
},
"10": {
"key": "effPct",
"base": 0.027648000279441476,
"step": 0.0034560004714876413
"base": 2.7648000279441476,
"step": 0.34560004714876413
},
"11": {
"key": "effDef",
"base": 0.027648000279441476,
"step": 0.0034560004714876413
"base": 2.7648000279441476,
"step": 0.34560004714876413
},
"12": {
"key": "stance",
"base": 0.04147200076840818,
"step": 0.0051840003579854965
"base": 4.147200076840818,
"step": 0.5184000357985497
}
}
},
"5": {
"main": {
"1": {
"key": "stance",
"base": 0.10368000087328255,
"step": 0.03628800041042268
"hpPlus": {
"id": "1",
"base": 112.89600000041537,
"step": 39.513600000645965
},
"2": {
"key": "recharge",
"base": 0.031104000052437186,
"step": 0.010886001167818904
"atkPlus": {
"id": "1",
"base": 56.44799999985844,
"step": 19.756800000788644
},
"3": {
"key": "hpPct",
"base": 0.0691199996508658,
"step": 0.024192000506445765
"hp": {
"id": "3",
"base": 6.911999965086579,
"step": 2.4192000506445765
},
"4": {
"key": "atkPct",
"base": 0.0691199996508658,
"step": 0.024192000506445765
"atk": {
"id": "4",
"base": 6.911999965086579,
"step": 2.4192000506445765
},
"5": {
"key": "defPct",
"base": 0.08639999991282821,
"step": 0.030240000458434224
"def": {
"id": "5",
"base": 8.63999999128282,
"step": 3.0240000458434224
},
"6": {
"key": "ice",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"cpct": {
"id": "4",
"base": 5.184000078588724,
"step": 1.8143999855965376
},
"7": {
"key": "elec",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"cdmg": {
"id": "5",
"base": 10.368000087328255,
"step": 3.6288000410422683
},
"8": {
"key": "wind",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"heal": {
"id": "6",
"base": 5.529600055888295,
"step": 1.9353999989107251
},
"9": {
"key": "quantum",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"effPct": {
"id": "7",
"base": 6.911999965086579,
"step": 2.4192000506445765
},
"10": {
"key": "imaginary",
"base": 0.06220800010487437,
"step": 0.02177300094626844
"speed": {
"id": "4",
"base": 4.031999999890104,
"step": 1.400000000372529
},
"phy": {
"id": "4",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"fire": {
"id": "5",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"ice": {
"id": "6",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"elec": {
"id": "7",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"wind": {
"id": "8",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"quantum": {
"id": "9",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"imaginary": {
"id": "10",
"base": 6.220800010487437,
"step": 2.177300094626844
},
"stance": {
"id": "1",
"base": 10.368000087328255,
"step": 3.6288000410422683
},
"recharge": {
"id": "2",
"base": 3.1104000052437186,
"step": 1.0886001167818904
}
},
"sub": {
"1": {
"key": "hp",
"key": "hpPlus",
"base": 33.870039001107216,
"step": 4.23375500086695
},
"2": {
"key": "atk",
"key": "atkPlus",
"base": 16.935019000666216,
"step": 2.1168770007789135
},
"3": {
"key": "def",
"key": "defPlus",
"base": 16.935019000666216,
"step": 2.1168770007789135
},
"4": {
"key": "hpPct",
"base": 0.03456000052392483,
"step": 0.0043200000654906034
"key": "hp",
"base": 3.4560000523924828,
"step": 0.43200000654906034
},
"5": {
"key": "atkPct",
"base": 0.03456000052392483,
"step": 0.0043200000654906034
"key": "atk",
"base": 3.4560000523924828,
"step": 0.43200000654906034
},
"6": {
"key": "defPct",
"base": 0.043199999956414104,
"step": 0.005399999907240272
"key": "def",
"base": 4.31999999564141,
"step": 0.5399999907240272
},
"7": {
"key": "speed",
@ -481,28 +661,28 @@
},
"8": {
"key": "cpct",
"base": 0.02592000039294362,
"step": 0.0032400002237409353
"base": 2.592000039294362,
"step": 0.32400002237409353
},
"9": {
"key": "cdmg",
"base": 0.05184000078588724,
"step": 0.006480000447481871
"base": 5.184000078588724,
"step": 0.6480000447481871
},
"10": {
"key": "effPct",
"base": 0.03456000052392483,
"step": 0.0043200000654906034
"base": 3.4560000523924828,
"step": 0.43200000654906034
},
"11": {
"key": "effDef",
"base": 0.03456000052392483,
"step": 0.0043200000654906034
"base": 3.4560000523924828,
"step": 0.43200000654906034
},
"12": {
"key": "stance",
"base": 0.05184000078588724,
"step": 0.006480000447481871
"base": 5.184000078588724,
"step": 0.6480000447481871
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 KiB

After

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 870 KiB

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 KiB

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 KiB

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 707 KiB

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 KiB

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 KiB

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 802 KiB

After

Width:  |  Height:  |  Size: 477 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 874 KiB

After

Width:  |  Height:  |  Size: 545 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 KiB

After

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 KiB

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 KiB

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 KiB

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 KiB

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 656 KiB

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 KiB

After

Width:  |  Height:  |  Size: 432 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 KiB

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 KiB

After

Width:  |  Height:  |  Size: 450 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 KiB

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 KiB

After

Width:  |  Height:  |  Size: 343 KiB