From 1ee3e9df51a12b9f7a11b5e099181455ed5cdf81 Mon Sep 17 00:00:00 2001 From: Kokomi <102026640+yoimiya-kokomi@users.noreply.github.com> Date: Sun, 12 Feb 2023 03:51:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4Enka=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E5=9C=A3=E9=81=97=E7=89=A9=E5=82=A8=E5=AD=98=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E5=9C=A3=E9=81=97=E7=89=A9=E8=AF=8D=E6=9D=A1?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=AE=B0=E5=BD=95propIds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/Artifact.js | 55 +- models/AvatarArtis.js | 107 +-- models/ProfileData.js | 71 +- models/player-lib/EnkaData.js | 21 + models/player-lib/MiaoData.js | 1 + models/player-lib/ProfileMeta.js | 3 +- models/profile-lib/ArtisMark.js | 29 +- resources/meta/artifact/meta.js | 1141 ++++++++++++++++++++++++++++++ 8 files changed, 1333 insertions(+), 95 deletions(-) diff --git a/models/Artifact.js b/models/Artifact.js index 06f47247..029764f1 100644 --- a/models/Artifact.js +++ b/models/Artifact.js @@ -2,10 +2,14 @@ * 圣遗物 * */ import Base from './Base.js' +import { Format } from '../components/index.js' import { ArtifactSet } from './index.js' -import { artiMap, attrMap } from '../resources/meta/artifact/index.js' +import { artiMap, attrMap, mainIdMap, attrIdMap } from '../resources/meta/artifact/index.js' +import lodash from 'lodash' class Artifact extends Base { + static getAttrs + constructor (name) { super() let cache = this._getCache(`arti:${name}`) @@ -29,6 +33,10 @@ class Artifact extends Base { return this.set } + get img () { + return `meta/artifact/imgs/${this.setName}/${this.idx}.webp` + } + static get (name) { if (artiMap[name]) { return new Artifact(name) @@ -36,10 +44,6 @@ class Artifact extends Base { return false } - get img () { - return `meta/artifact/imgs/${this.setName}/${this.idx}.webp` - } - static getSetNameByArti (name) { let arti = Artifact.get(name) if (arti) { @@ -53,6 +57,47 @@ class Artifact extends Base { attrMap } } + + static getMainById (id, level = 20, star) { + let cfg = mainIdMap[id] + if (!cfg) { + return false + } + let attrCfg = attrMap[Format.isElem(cfg.key) ? 'dmg' : cfg.key] + let eff = ['hpPlus', 'atkPlus', 'defPlus'].includes(cfg.key) ? 2 : 1 + return { + key: cfg.key, + value: attrCfg.value * (1.2 + 0.34 * level) * eff + } + } + + static getAttrsByIds (ids) { + let ret = [] + let tmp = {} + lodash.forEach(ids, (id) => { + let cfg = attrIdMap[id] + if (!cfg) { + return true + } + let { key, eff } = cfg + if (!tmp[key]) { + tmp[key] = { + key, + eff: 0, + upNum: 0 + } + ret.push(tmp[key]) + } + tmp[key].eff += eff + tmp[key].upNum++ + }) + lodash.forEach(tmp, (ds, key) => { + if (attrMap[key]) { + ds.value = attrMap[key].value * ds.eff + } + }) + return ret + } } export default Artifact diff --git a/models/AvatarArtis.js b/models/AvatarArtis.js index 067a30e0..07127af1 100644 --- a/models/AvatarArtis.js +++ b/models/AvatarArtis.js @@ -14,6 +14,38 @@ export default class AvatarArtis extends Base { this.artis = {} } + get sets () { + return this.getSetData().sets || {} + } + + get names () { + return this.getSetData().names || [] + } + + get hasArtis () { + return !lodash.isEmpty(this.artis) + } + + get hasAttr () { + return ArtisMark.hasAttr(this.artis) + } + + static _eachArtisSet (sets, fn) { + lodash.forEach(sets || [], (v, k) => { + let artisSet = ArtifactSet.get(k) + if (artisSet) { + if (v >= 4) { + fn(artisSet, 2) + } + fn(artisSet, v) + } + }) + } + + static getArtisKeyTitle () { + return ArtisMark.getKeyTitleMap() + } + setArtisData (ds = {}, profile = false) { // let force = !this.hasArtis || ArtisMark.hasAttr(ds) || !ArtisMark.hasAttr(this.artis) if (!profile || (profile && ArtisMark.hasAttr(ds))) { @@ -33,16 +65,30 @@ export default class AvatarArtis extends Base { arti.name = ds._name || ds.name || arti.name || '' arti.set = ds._set || Artifact.getSetNameByArti(arti._name) || ds.set || '' arti.level = ds._level || ds.level || 1 - } else { - arti.name = ds.name || arti.name || '' - arti.set = ds.set || Artifact.getSetNameByArti(arti.name) || '' - arti.level = ds.level || 1 + arti.star = ds._star || ds.star || 5 + arti.main = ds.main + arti.attrs = ds.attrs + return true } - // 存在面板数据,更新面板数据 - if (ds.main && ds.attrs) { + arti.name = ds.name || arti.name || '' + arti.set = ds.set || Artifact.getSetNameByArti(arti.name) || '' + arti.level = ds.level || 1 + arti.star = ds.star || 5 + + if (ds.mainId || ds.main) { arti._name = ds.name || arti.name arti._set = ds.set || Artifact.getSetNameByArti(arti.name) || arti.set || '' arti._level = ds.level || arti.level + arti._star = ds.star || arti.star || 5 + } + + // 存在面板数据,更新面板数据 + if (ds.mainId && ds.attrIds) { + arti.mainId = ds.mainId + arti.attrIds = ds.attrIds + arti.main = Artifact.getMainById(ds.mainId, arti._level, arti._star) + arti.attrs = Artifact.getAttrsByIds(ds.attrIds) + } else if (ds.main && ds.attrs) { arti.main = ArtisMark.formatAttr(ds.main || {}) arti.attrs = [] for (let attrIdx in ds.attrs || []) { @@ -79,11 +125,20 @@ export default class AvatarArtis extends Base { if (ds) { let tmp = { name: ds.name || '', - level: ds.level || 1 + level: ds.level || 1, + star: ds.star || 5 } - if (ds.main && ds.attrs) { - tmp._name = ds._name || null - tmp._level = ds._level || null + if ((ds.mainId && ds.attrIds) || (ds.main && ds.attrs)) { + if ((ds._name && ds._name !== ds.name) || (ds._level && ds._level !== ds.level) || (ds._star && ds._star !== ds.star)) { + tmp._name = ds._name || null + tmp._level = ds._level || null + tmp._star = ds._star || null + } + } + if (ds.mainId && ds.attrIds) { + tmp.mainId = ds.mainId || null + tmp.attrIds = ds.attrIds + } else if (ds.main && ds.attrs) { tmp.main = ds.main || null tmp.attrs = [] for (let attrIdx in ds.attrs || []) { @@ -123,22 +178,6 @@ export default class AvatarArtis extends Base { return ret } - get sets () { - return this.getSetData().sets || {} - } - - get names () { - return this.getSetData().names || [] - } - - get hasArtis () { - return !lodash.isEmpty(this.artis) - } - - get hasAttr () { - return ArtisMark.hasAttr(this.artis) - } - mainAttr (idx = '') { if (!idx) { let ret = {} @@ -223,23 +262,7 @@ export default class AvatarArtis extends Base { } } - static _eachArtisSet (sets, fn) { - lodash.forEach(sets || [], (v, k) => { - let artisSet = ArtifactSet.get(k) - if (artisSet) { - if (v >= 4) { - fn(artisSet, 2) - } - fn(artisSet, v) - } - }) - } - eachArtisSet (fn) { AvatarArtis._eachArtisSet(this.sets, fn) } - - static getArtisKeyTitle () { - return ArtisMark.getKeyTitleMap() - } } diff --git a/models/ProfileData.js b/models/ProfileData.js index c019563c..a413628e 100644 --- a/models/ProfileData.js +++ b/models/ProfileData.js @@ -12,37 +12,6 @@ export default class ProfileData extends AvatarData { } } - initArtis () { - this.artis = new ProfileArtis(this.id, this.elem) - } - - static create (ds) { - let profile = new ProfileData(ds) - if (!profile) { - return false - } - return profile - } - - setAttr (ds) { - this.attr = lodash.extend(Data.getData(ds, 'atk,atkBase,def,defBase,hp,hpBase,mastery,recharge'), { - heal: ds.heal || ds.hInc || 0, - cpct: ds.cpct || ds.cRate, - cdmg: ds.cdmg || ds.cDmg, - dmg: ds.dmg || ds.dmgBonus || 0, - phy: ds.phy || ds.phyBonus || 0 - }) - } - - calcAttr () { - this._attr = AttrCalc.create(this) - this.attr = this._attr.calc() - } - - setArtis (ds = false) { - this.artis?.setProfile(this, ds.artis?.artis || ds.artis || ds) - } - // 判断当前profileData是否具有有效数据 get hasData () { return this.isProfile @@ -60,6 +29,42 @@ export default class ProfileData extends AvatarData { return [costume, 'normal'] } + get hasDmg () { + return this.hasData && !!ProfileDmg.dmgRulePath(this.name) + } + + static create (ds) { + let profile = new ProfileData(ds) + if (!profile) { + return false + } + return profile + } + + initArtis () { + this.artis = new ProfileArtis(this.id, this.elem) + } + + setAttr (ds) { + this.attr = lodash.extend(Data.getData(ds, 'atk,atkBase,def,defBase,hp,hpBase,mastery,recharge'), { + heal: ds.heal || ds.hInc || 0, + cpct: ds.cpct || ds.cRate, + cdmg: ds.cdmg || ds.cDmg, + dmg: ds.dmg || ds.dmgBonus || 0, + phy: ds.phy || ds.phyBonus || 0 + }) + } + + calcAttr () { + this._attr = AttrCalc.create(this) + this.attr = this._attr.calc() + } + + setArtis (ds = false) { + console.log('ds', ds.artis?.artis[1]) + this.artis?.setProfile(this, ds.artis?.artis || ds.artis || ds) + } + // 获取当前profileData的圣遗物评分,withDetail=false仅返回简略信息 getArtisMark (withDetail = true) { if (this.hasData) { @@ -68,10 +73,6 @@ export default class ProfileData extends AvatarData { return {} } - get hasDmg () { - return this.hasData && !!ProfileDmg.dmgRulePath(this.name) - } - // 计算当前profileData的伤害信息 async calcDmg ({ enemyLv = 91, mode = 'profile', dmgIdx = 0 }) { if (!this.dmg) { diff --git a/models/player-lib/EnkaData.js b/models/player-lib/EnkaData.js index f7cfb023..9abac60e 100644 --- a/models/player-lib/EnkaData.js +++ b/models/player-lib/EnkaData.js @@ -66,6 +66,27 @@ let EnkaData = { }, getArtifact (data) { + let ret = {} + lodash.forEach(data, (ds) => { + let flat = ds.flat || {} + let re = ds.reliquary + let idx = artisIdxMap[flat.equipType] + if (!idx) { + return + } + let setName = idsMap[flat.setNameTextMapHash] || '' + ret[idx] = { + name: ArtifactSet.getArtiNameBySet(setName, idx), + level: Math.min(20, ((re.level) || 1) - 1), + star: flat.rankLevel || 5, + mainId: re.mainPropId, + attrIds: re.appendPropIdList + } + }) + return ret + }, + + getArtifactBak (data) { let ret = {} let get = function (d) { if (!d) { diff --git a/models/player-lib/MiaoData.js b/models/player-lib/MiaoData.js index b1cd5e67..7e2667cf 100644 --- a/models/player-lib/MiaoData.js +++ b/models/player-lib/MiaoData.js @@ -84,6 +84,7 @@ let MiaoData = { ret[idx] = { name: ds.name, level: ds.level, + star: ds.rank, main: get(ds.mainAffix), attrs: [ get(sub[0]), diff --git a/models/player-lib/ProfileMeta.js b/models/player-lib/ProfileMeta.js index b04c1a81..1ee4940b 100644 --- a/models/player-lib/ProfileMeta.js +++ b/models/player-lib/ProfileMeta.js @@ -1,3 +1,4 @@ +// Enka IdsMap export const idsMap = { 20848859: '黑岩斩刀', 33330467: '元素熟练', @@ -509,4 +510,4 @@ export const artisIdxMap = { 时之沙: 3, 空之杯: 4, 理之冠: 5 -} \ No newline at end of file +} diff --git a/models/profile-lib/ArtisMark.js b/models/profile-lib/ArtisMark.js index 8c551872..3afc9a99 100644 --- a/models/profile-lib/ArtisMark.js +++ b/models/profile-lib/ArtisMark.js @@ -67,23 +67,31 @@ let ArtisMark = { let ret = [] let totalUpNum = 0 let ltArr = [] + let isIdAttr = false + lodash.forEach(ds, (d) => { + isIdAttr = !!d.eff let arti = ArtisMark.formatArti(d, charAttrCfg) + ret.push(arti) + if (isIdAttr) { + return true + } totalUpNum += arti.upNum if (arti.hasLt) { ltArr.push(arti) } - ret.push(arti) delete arti.hasLt delete arti.hasGt }) - ltArr = lodash.sortBy(ltArr, 'upNum').reverse() - for (let arti of ltArr) { - if (totalUpNum > 9) { - arti.upNum = arti.upNum - 1 - totalUpNum-- - } else { - break + 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 @@ -103,16 +111,13 @@ let ArtisMark = { if (!key || key === 'undefined') { return {} } - let arrCfg = attrMap[isDmg ? 'dmg' : key] - val = Format[arrCfg.format](val, 1) - let ret = { key, value: val } - if (!isMain) { + if (!isMain && !ret.eff) { let incRet = ArtisMark.getIncNum(key, value) ret.upNum = incRet.num ret.hasGt = incRet.hasGt diff --git a/resources/meta/artifact/meta.js b/resources/meta/artifact/meta.js index 53440ebb..8fbe4c18 100644 --- a/resources/meta/artifact/meta.js +++ b/resources/meta/artifact/meta.js @@ -86,3 +86,1144 @@ export const mainAttr = { } export const subAttr = 'atk,atkPlus,def,defPlus,hp,hpPlus,mastery,recharge,cpct,cdmg'.split(',') + +export const mainIdMap = { + 10001: { + depotId: 1000, + key: 'hpPlus' + }, + 10002: { + depotId: 1000, + key: 'hp', + weight: 1334 + }, + 10003: { + depotId: 1000, + key: 'atkPlus' + }, + 10004: { + depotId: 1000, + key: 'atk', + weight: 1333 + }, + 10005: { + depotId: 1000, + key: 'defPlus' + }, + 10006: { + depotId: 1000, + key: 'def', + weight: 1333 + }, + 10007: { + depotId: 1000, + key: 'recharge', + weight: 500 + }, + 10008: { + depotId: 1000, + key: 'mastery', + weight: 500 + }, + 12001: { + depotId: 2000, + key: 'atkPlus', + weight: 1000 + }, + 13001: { + depotId: 3000, + key: 'hpPlus' + }, + 13002: { + depotId: 3000, + key: 'hp', + weight: 1100 + }, + 13003: { + depotId: 3000, + key: 'atkPlus' + }, + 13004: { + depotId: 3000, + key: 'atk', + weight: 1100 + }, + 13005: { + depotId: 3000, + key: 'defPlus' + }, + 13006: { + depotId: 3000, + key: 'def', + weight: 1100 + }, + 13007: { + depotId: 3000, + key: 'cpct', + weight: 500 + }, + 13008: { + depotId: 3000, + key: 'cdmg', + weight: 500 + }, + 13009: { + depotId: 3000, + key: 'heal', + weight: 500 + }, + 13010: { + depotId: 3000, + key: 'mastery', + weight: 200 + }, + 14001: { + depotId: 4000, + key: 'hpPlus', + weight: 1000 + }, + 15001: { + depotId: 5000, + key: 'hpPlus' + }, + 15002: { + depotId: 5000, + key: 'hp', + weight: 850 + }, + 15003: { + depotId: 5000, + key: 'atkPlus' + }, + 15004: { + depotId: 5000, + key: 'atk', + weight: 850 + }, + 15005: { + depotId: 5000, + key: 'defPlus' + }, + 15006: { + depotId: 5000, + key: 'def', + weight: 800 + }, + 15007: { + depotId: 5000, + key: 'mastery', + weight: 100 + }, + 15008: { + depotId: 5000, + key: 'pyro', + weight: 200 + }, + 15009: { + depotId: 5000, + key: 'electro', + weight: 200 + }, + 15010: { + depotId: 5000, + key: 'cryo', + weight: 200 + }, + 15011: { + depotId: 5000, + key: 'hydro', + weight: 200 + }, + 15012: { + depotId: 5000, + key: 'anemo', + weight: 200 + }, + 15013: { + depotId: 5000, + key: 'geo', + weight: 200 + }, + 15014: { + depotId: 5000, + key: 'dendro' + }, + 15015: { + depotId: 5000, + key: 'phy', + weight: 200 + }, + 10990: { + depotId: 1099, + key: 'atk', + weight: 999 + }, + 10980: { + depotId: 1098, + key: 'hp', + weight: 999 + }, + 10970: { + depotId: 1097, + key: 'def', + weight: 999 + }, + 10960: { + depotId: 1096, + key: 'recharge', + weight: 999 + }, + 10950: { + depotId: 1095, + key: 'mastery', + weight: 999 + }, + 30990: { + depotId: 3099, + key: 'atk', + weight: 999 + }, + 30980: { + depotId: 3098, + key: 'hp', + weight: 999 + }, + 30970: { + depotId: 3097, + key: 'def', + weight: 999 + }, + 30960: { + depotId: 3096, + key: 'cpct', + weight: 999 + }, + 30950: { + depotId: 3095, + key: 'cdmg', + weight: 999 + }, + 30940: { + depotId: 3094, + key: 'heal', + weight: 999 + }, + 30930: { + depotId: 3093, + key: 'mastery', + weight: 999 + }, + 50990: { + depotId: 5099, + key: 'atk', + weight: 999 + }, + 50980: { + depotId: 5098, + key: 'hp', + weight: 999 + }, + 50970: { + depotId: 5097, + key: 'def', + weight: 999 + }, + 50960: { + depotId: 5096, + key: 'pyro', + weight: 999 + }, + 50950: { + depotId: 5095, + key: 'electro', + weight: 999 + }, + 50940: { + depotId: 5094, + key: 'cryo', + weight: 999 + }, + 50930: { + depotId: 5093, + key: 'hydro', + weight: 999 + }, + 50920: { + depotId: 5092, + key: 'anemo', + weight: 999 + }, + 50910: { + depotId: 5091, + key: 'geo', + weight: 999 + }, + 50900: { + depotId: 5090, + key: 'dendro', + weight: 999 + }, + 50890: { + depotId: 5089, + key: 'phy', + weight: 999 + }, + 50880: { + depotId: 5088, + key: 'mastery', + weight: 999 + } +} + +export const attrIdMap = { + 101021: { + key: 'hpPlus', + eff: 0.7998661408903833, + position: 1 + }, + 101022: { + key: 'hpPlus', + eff: 1, + position: 2 + }, + 101031: { + key: 'hp', + eff: 0.8013698223808419, + position: 1 + }, + 101032: { + key: 'hp', + eff: 1, + position: 2 + }, + 101051: { + key: 'atkPlus', + eff: 0.799999951093626, + position: 1 + }, + 101052: { + key: 'atkPlus', + eff: 1, + position: 2 + }, + 101061: { + key: 'atk', + eff: 0.8013698223808419, + position: 1 + }, + 101062: { + key: 'atk', + eff: 1, + position: 2 + }, + 101081: { + key: 'defPlus', + eff: 0.800865831025008, + position: 1 + }, + 101082: { + key: 'defPlus', + eff: 1, + position: 2 + }, + 101091: { + key: 'def', + eff: 0.8021977881396791, + position: 1 + }, + 101092: { + key: 'def', + eff: 1, + position: 2 + }, + 101201: { + key: 'cpct', + eff: 0.8041236658084417, + position: 1 + }, + 101202: { + key: 'cpct', + eff: 1, + position: 2 + }, + 101221: { + key: 'cdmg', + eff: 0.7989690355415727, + position: 1 + }, + 101222: { + key: 'cdmg', + eff: 1, + position: 2 + }, + 101231: { + key: 'recharge', + eff: 0.8024691315440212, + position: 1 + }, + 101232: { + key: 'recharge', + eff: 1, + position: 2 + }, + 101241: { + key: 'mastery', + eff: 0.7993138779408093, + position: 1 + }, + 101242: { + key: 'mastery', + eff: 1, + position: 2 + }, + 201021: { + key: 'hpPlus', + eff: 0.700000010640718, + position: 1 + }, + 201022: { + key: 'hpPlus', + eff: 0.8500697818291011, + position: 2 + }, + 201023: { + key: 'hpPlus', + eff: 1, + position: 3 + }, + 201031: { + key: 'hp', + eff: 0.6995708401537059, + position: 1 + }, + 201032: { + key: 'hp', + eff: 0.8497854200768529, + position: 2 + }, + 201033: { + key: 'hp', + eff: 1, + position: 3 + }, + 201051: { + key: 'atkPlus', + eff: 0.700214117238633, + position: 1 + }, + 201052: { + key: 'atkPlus', + eff: 0.8501070586193165, + position: 2 + }, + 201053: { + key: 'atkPlus', + eff: 1, + position: 3 + }, + 201061: { + key: 'atk', + eff: 0.6995708401537059, + position: 1 + }, + 201062: { + key: 'atk', + eff: 0.8497854200768529, + position: 2 + }, + 201063: { + key: 'atk', + eff: 1, + position: 3 + }, + 201081: { + key: 'defPlus', + eff: 0.6996403138377545, + position: 1 + }, + 201082: { + key: 'defPlus', + eff: 0.8489208343106637, + position: 2 + }, + 201083: { + key: 'defPlus', + eff: 1, + position: 3 + }, + 201091: { + key: 'def', + eff: 0.7010309324542161, + position: 1 + }, + 201092: { + key: 'def', + eff: 0.8522336763160644, + position: 2 + }, + 201093: { + key: 'def', + eff: 1, + position: 3 + }, + 201201: { + key: 'cpct', + eff: 0.7032258250586824, + position: 1 + }, + 201202: { + key: 'cpct', + eff: 0.8516129125293411, + position: 2 + }, + 201203: { + key: 'cpct', + eff: 1, + position: 3 + }, + 201221: { + key: 'cdmg', + eff: 0.7009646525642665, + position: 1 + }, + 201222: { + key: 'cdmg', + eff: 0.8488746119364413, + position: 2 + }, + 201223: { + key: 'cdmg', + eff: 1, + position: 3 + }, + 201231: { + key: 'recharge', + eff: 0.6988417152242902, + position: 1 + }, + 201232: { + key: 'recharge', + eff: 0.8494208216537456, + position: 2 + }, + 201233: { + key: 'recharge', + eff: 1, + position: 3 + }, + 201241: { + key: 'mastery', + eff: 0.6998928470745912, + position: 1 + }, + 201242: { + key: 'mastery', + eff: 0.8499463979833213, + position: 2 + }, + 201243: { + key: 'mastery', + eff: 1, + position: 3 + }, + 301021: { + key: 'hpPlus', + eff: 0.700000010640718, + position: 1 + }, + 301022: { + key: 'hpPlus', + eff: 0.8000000425628723, + position: 2 + }, + 301023: { + key: 'hpPlus', + eff: 0.9000000212814362, + position: 3 + }, + 301024: { + key: 'hpPlus', + eff: 1, + position: 4 + }, + 301031: { + key: 'hp', + eff: 0.699999978712627, + position: 1 + }, + 301032: { + key: 'hp', + eff: 0.800000021287373, + position: 2 + }, + 301033: { + key: 'hp', + eff: 0.9000000106436865, + position: 3 + }, + 301034: { + key: 'hp', + eff: 1, + position: 4 + }, + 301051: { + key: 'atkPlus', + eff: 0.700214117238633, + position: 1 + }, + 301052: { + key: 'atkPlus', + eff: 0.7997858317081389, + position: 2 + }, + 301053: { + key: 'atkPlus', + eff: 0.8993575461776449, + position: 3 + }, + 301054: { + key: 'atkPlus', + eff: 1, + position: 4 + }, + 301061: { + key: 'atk', + eff: 0.699999978712627, + position: 1 + }, + 301062: { + key: 'atk', + eff: 0.800000021287373, + position: 2 + }, + 301063: { + key: 'atk', + eff: 0.9000000106436865, + position: 3 + }, + 301064: { + key: 'atk', + eff: 1, + position: 4 + }, + 301081: { + key: 'defPlus', + eff: 0.7002700675271825, + position: 1 + }, + 301082: { + key: 'defPlus', + eff: 0.8001800736312134, + position: 2 + }, + 301083: { + key: 'defPlus', + eff: 0.9000900368156067, + position: 3 + }, + 301084: { + key: 'defPlus', + eff: 1, + position: 4 + }, + 301091: { + key: 'def', + eff: 0.7002288624079749, + position: 1 + }, + 301092: { + key: 'def', + eff: 0.8009153643849788, + position: 2 + }, + 301093: { + key: 'def', + eff: 0.8993134980229961, + position: 3 + }, + 301094: { + key: 'def', + eff: 1, + position: 4 + }, + 301201: { + key: 'cpct', + eff: 0.6995708401537059, + position: 1 + }, + 301202: { + key: 'cpct', + eff: 0.7982832806729697, + position: 2 + }, + 301203: { + key: 'cpct', + eff: 0.9012875594807361, + position: 3 + }, + 301204: { + key: 'cpct', + eff: 1, + position: 4 + }, + 301221: { + key: 'cdmg', + eff: 0.6995708401537059, + position: 1 + }, + 301222: { + key: 'cdmg', + eff: 0.8004292397881477, + position: 2 + }, + 301223: { + key: 'cdmg', + eff: 0.9012875594807361, + position: 3 + }, + 301224: { + key: 'cdmg', + eff: 1, + position: 4 + }, + 301231: { + key: 'recharge', + eff: 0.6992288170077031, + position: 1 + }, + 301232: { + key: 'recharge', + eff: 0.7994858620441655, + position: 2 + }, + 301233: { + key: 'recharge', + eff: 0.8997429549635376, + position: 3 + }, + 301234: { + key: 'recharge', + eff: 1, + position: 4 + }, + 301241: { + key: 'mastery', + eff: 0.6997855698371146, + position: 1 + }, + 301242: { + key: 'mastery', + eff: 0.7998570238353141, + position: 2 + }, + 301243: { + key: 'mastery', + eff: 0.8999285460018005, + position: 3 + }, + 301244: { + key: 'mastery', + eff: 1, + position: 4 + }, + 401021: { + key: 'hpPlus', + eff: 0.7000000127688611, + position: 1 + }, + 401022: { + key: 'hpPlus', + eff: 0.7999999872311389, + position: 2 + }, + 401023: { + key: 'hpPlus', + eff: 0.9000000255377223, + position: 3 + }, + 401024: { + key: 'hpPlus', + eff: 1, + position: 4 + }, + 401031: { + key: 'hp', + eff: 0.6995708401537059, + position: 1 + }, + 401032: { + key: 'hp', + eff: 0.8004292397881477, + position: 2 + }, + 401033: { + key: 'hp', + eff: 0.9012875594807361, + position: 3 + }, + 401034: { + key: 'hp', + eff: 1, + position: 4 + }, + 401051: { + key: 'atkPlus', + eff: 0.6998714684861824, + position: 1 + }, + 401052: { + key: 'atkPlus', + eff: 0.8001285008687569, + position: 2 + }, + 401053: { + key: 'atkPlus', + eff: 0.899742906327304, + position: 3 + }, + 401054: { + key: 'atkPlus', + eff: 1, + position: 4 + }, + 401061: { + key: 'atk', + eff: 0.6995708401537059, + position: 1 + }, + 401062: { + key: 'atk', + eff: 0.8004292397881477, + position: 2 + }, + 401063: { + key: 'atk', + eff: 0.9012875594807361, + position: 3 + }, + 401064: { + key: 'atk', + eff: 1, + position: 4 + }, + 401081: { + key: 'defPlus', + eff: 0.6997840020416457, + position: 1 + }, + 401082: { + key: 'defPlus', + eff: 0.800215946464062, + position: 2 + }, + 401083: { + key: 'defPlus', + eff: 0.9001079732320311, + position: 3 + }, + 401084: { + key: 'defPlus', + eff: 1, + position: 4 + }, + 401091: { + key: 'def', + eff: 0.6998285024582124, + position: 1 + }, + 401092: { + key: 'def', + eff: 0.799313882035583, + position: 2 + }, + 401093: { + key: 'def', + eff: 0.9005145565239961, + position: 3 + }, + 401094: { + key: 'def', + eff: 1, + position: 4 + }, + 401201: { + key: 'cpct', + eff: 0.7009646525642665, + position: 1 + }, + 401202: { + key: 'cpct', + eff: 0.8006431216735538, + position: 2 + }, + 401203: { + key: 'cpct', + eff: 0.900321590782841, + position: 3 + }, + 401204: { + key: 'cpct', + eff: 1, + position: 4 + }, + 401221: { + key: 'cdmg', + eff: 0.6993569082725104, + position: 1 + }, + 401222: { + key: 'cdmg', + eff: 0.7990353773817976, + position: 2 + }, + 401223: { + key: 'cdmg', + eff: 0.900321590782841, + position: 3 + }, + 401224: { + key: 'cdmg', + eff: 1, + position: 4 + }, + 401231: { + key: 'recharge', + eff: 0.70077217786434, + position: 1 + }, + 401232: { + key: 'recharge', + eff: 0.7992277861772604, + position: 2 + }, + 401233: { + key: 'recharge', + eff: 0.8996138571302306, + position: 3 + }, + 401234: { + key: 'recharge', + eff: 1, + position: 4 + }, + 401241: { + key: 'mastery', + eff: 0.7002681333376832, + position: 1 + }, + 401242: { + key: 'mastery', + eff: 0.8000000204541412, + position: 2 + }, + 401243: { + key: 'mastery', + eff: 0.9002681640188951, + position: 3 + }, + 401244: { + key: 'mastery', + eff: 1, + position: 4 + }, + 501021: { + key: 'hpPlus', + eff: 0.7000167527458159, + position: 1 + }, + 501022: { + key: 'hpPlus', + eff: 0.8, + position: 2 + }, + 501023: { + key: 'hpPlus', + eff: 0.9000167527458159, + position: 3 + }, + 501024: { + key: 'hpPlus', + eff: 1, + position: 4 + }, + 501031: { + key: 'hp', + eff: 0.6998285024582124, + position: 1 + }, + 501032: { + key: 'hp', + eff: 0.799313882035583, + position: 2 + }, + 501033: { + key: 'hp', + eff: 0.9005145565239961, + position: 3 + }, + 501034: { + key: 'hp', + eff: 1, + position: 4 + }, + 501051: { + key: 'atkPlus', + eff: 0.700257036056831, + position: 1 + }, + 501052: { + key: 'atkPlus', + eff: 0.7999999901935807, + position: 2 + }, + 501053: { + key: 'atkPlus', + eff: 0.9002570458632503, + position: 3 + }, + 501054: { + key: 'atkPlus', + eff: 1, + position: 4 + }, + 501061: { + key: 'atk', + eff: 0.6998285024582124, + position: 1 + }, + 501062: { + key: 'atk', + eff: 0.799313882035583, + position: 2 + }, + 501063: { + key: 'atk', + eff: 0.9005145565239961, + position: 3 + }, + 501064: { + key: 'atk', + eff: 1, + position: 4 + }, + 501081: { + key: 'defPlus', + eff: 0.6997840617661291, + position: 1 + }, + 501082: { + key: 'defPlus', + eff: 0.8000000329563484, + position: 2 + }, + 501083: { + key: 'defPlus', + eff: 0.8997840288097807, + position: 3 + }, + 501084: { + key: 'defPlus', + eff: 1, + position: 4 + }, + 501091: { + key: 'def', + eff: 0.6995884908250543, + position: 1 + }, + 501092: { + key: 'def', + eff: 0.7997256775838287, + position: 2 + }, + 501093: { + key: 'def', + eff: 0.8998628643426032, + position: 3 + }, + 501094: { + key: 'def', + eff: 1, + position: 4 + }, + 501201: { + key: 'cpct', + eff: 0.6992288170077031, + position: 1 + }, + 501202: { + key: 'cpct', + eff: 0.7994858620441655, + position: 2 + }, + 501203: { + key: 'cpct', + eff: 0.8997429549635376, + position: 3 + }, + 501204: { + key: 'cpct', + eff: 1, + position: 4 + }, + 501221: { + key: 'cdmg', + eff: 0.7001287406686748, + position: 1 + }, + 501222: { + key: 'cdmg', + eff: 0.8005148188410904, + position: 2 + }, + 501223: { + key: 'cdmg', + eff: 0.8996139218275844, + position: 3 + }, + 501224: { + key: 'cdmg', + eff: 1, + position: 4 + }, + 501231: { + key: 'recharge', + eff: 0.6990740469264689, + position: 1 + }, + 501232: { + key: 'recharge', + eff: 0.7993827171139947, + position: 2 + }, + 501233: { + key: 'recharge', + eff: 0.8996913298124741, + position: 3 + }, + 501234: { + key: 'recharge', + eff: 1, + position: 4 + }, + 501241: { + key: 'mastery', + eff: 0.7001287030773611, + position: 1 + }, + 501242: { + key: 'mastery', + eff: 0.800085802051574, + position: 2 + }, + 501243: { + key: 'mastery', + eff: 0.900042901025787, + position: 3 + }, + 501244: { + key: 'mastery', + eff: 1, + position: 4 + } +}