mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-16 04:35:42 +00:00
#角色面板
、#圣遗物列表
使用新的圣遗物评分逻辑计算评分
* 新的圣遗物评分规针对角色进行了细化,同时将得分进行了拉齐 * 根据角色使用不同词条权重计算。感谢@糖炒栗子 @秋声 @49631073 等的权重梳理 * 会在后续提供单独命令,供查看角色圣遗物及计算逻辑与计算逻辑 * 因为计分逻辑变更,所以【分数值及档位】相较于升级之前可能有所变化。如有不合理计算请反馈给 @喵喵 * 如需临时关闭新版评分,可编辑喵喵 lib/app/character.js, const isNewScore = false;
This commit is contained in:
parent
e503488a7e
commit
876b39e561
16
CHANGELOG.md
16
CHANGELOG.md
@ -1,13 +1,19 @@
|
|||||||
# 1.7.2
|
# 1.7.3
|
||||||
|
|
||||||
* 为`#面板更新`命令增加uid合法性校验
|
* `#角色面板`、`#圣遗物列表` 使用新的圣遗物评分逻辑计算评分
|
||||||
* `#角色持有率`、`#深渊出场率` 页面细节样式调整
|
* 新的圣遗物评分规针对角色进行了细化,同时将得分进行了拉齐
|
||||||
|
* 根据角色使用不同词条权重计算。感谢@糖炒栗子 @秋声 @49631073 等的权重梳理
|
||||||
|
* 会在后续提供单独命令,供查看角色圣遗物及计算逻辑与计算逻辑
|
||||||
|
* 因为计分逻辑变更,所以【分数值及档位】相较于升级之前可能有所变化。如有不合理计算请反馈给 @喵喵
|
||||||
|
* 如需临时关闭新版评分,可编辑喵喵 lib/app/character.js, const isNewScore = false;
|
||||||
|
|
||||||
# 1.7.1
|
# 1.7.1~1.7.2
|
||||||
|
|
||||||
* `#更新面板` 功能fix
|
* `#更新面板` 功能升级及问题修正
|
||||||
* 修正武器类型、元素伤害字段导致的伤害计算问题
|
* 修正武器类型、元素伤害字段导致的伤害计算问题
|
||||||
* 夜兰 请在游戏内不出场状况下获取面板属性
|
* 夜兰 请在游戏内不出场状况下获取面板属性
|
||||||
|
* 为`#面板更新`命令增加uid合法性校验
|
||||||
|
* `#角色持有率`、`#深渊出场率` 页面细节样式调整
|
||||||
|
|
||||||
# 1.7.0
|
# 1.7.0
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import { Cfg } from "../components/index.js";
|
|||||||
import Profile from "../components/Profile.js";
|
import Profile from "../components/Profile.js";
|
||||||
import Format from "../components/Format.js"
|
import Format from "../components/Format.js"
|
||||||
import Reliquaries from "../components/models/Reliquaries.js";
|
import Reliquaries from "../components/models/Reliquaries.js";
|
||||||
|
import Reliquaries2 from "../components/models/Reliquaries2.js";
|
||||||
import Calc from "../components/Calc.js";
|
import Calc from "../components/Calc.js";
|
||||||
import fs from "fs";
|
|
||||||
import Common from "../components/Common.js";
|
import Common from "../components/Common.js";
|
||||||
|
|
||||||
|
|
||||||
@ -15,6 +15,8 @@ let nameID = "";
|
|||||||
let genshin = {};
|
let genshin = {};
|
||||||
await init();
|
await init();
|
||||||
|
|
||||||
|
const isNewScore = true;
|
||||||
|
|
||||||
const relationMap = {
|
const relationMap = {
|
||||||
wife: {
|
wife: {
|
||||||
keyword: "老婆,媳妇,妻子,娘子".split(","),
|
keyword: "老婆,媳妇,妻子,娘子".split(","),
|
||||||
@ -495,7 +497,7 @@ async function autoRefresh(e) {
|
|||||||
e.reply("请确认角色已在【游戏内】橱窗展示并开放了查看详情。设置完毕后请5分钟后使用 #面板更新 重新获取")
|
e.reply("请确认角色已在【游戏内】橱窗展示并开放了查看详情。设置完毕后请5分钟后使用 #面板更新 重新获取")
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
e.reply(`本次获取成功角色: ${ret.join(", ")} `)
|
// e.reply(`本次获取成功角色: ${ret.join(", ")} `)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -505,7 +507,6 @@ async function autoRefresh(e) {
|
|||||||
|
|
||||||
export async function getProfile(e, mode = "refresh") {
|
export async function getProfile(e, mode = "refresh") {
|
||||||
let uid = await getTargetUid(e);
|
let uid = await getTargetUid(e);
|
||||||
console.log('uid', uid)
|
|
||||||
if (!uid) {
|
if (!uid) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -742,28 +743,35 @@ export async function renderProfile(e, char, render, mode = "profile", params =
|
|||||||
dmgBonus: p(Math.max(a.dmgBonus * 1 || 0, a.phyBonus * 1 || 0))
|
dmgBonus: p(Math.max(a.dmgBonus * 1 || 0, a.phyBonus * 1 || 0))
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
let avatar = await getAvatar(e, char, MysApi);
|
|
||||||
let talent = await getTalent(e, avatar);
|
|
||||||
*/
|
|
||||||
|
|
||||||
let reliquaries = [], totalMark = 0, totalMaxMark = 0;
|
let reliquaries = [], totalMark = 0, totalMaxMark = 0;
|
||||||
|
|
||||||
let { titles: usefulTitles, mark: usefulMark } = Reliquaries.getUseful(char.name);
|
let newScore = Reliquaries2.getArtisMark(char.name, profile.artis);
|
||||||
|
|
||||||
lodash.forEach(profile.artis, (arti) => {
|
lodash.forEach(profile.artis, (arti, idx) => {
|
||||||
|
idx = idx.replace("arti", "");
|
||||||
let ds = arti;
|
let ds = arti;
|
||||||
let mark = Reliquaries.getMark(char.name, arti.attrs);
|
let mark = isNewScore ? newScore[idx] : Reliquaries.getMark(char.name, arti.attrs);
|
||||||
let maxMark = Reliquaries.getMaxMark(char.name, arti.main[0] || "");
|
let maxMark = Reliquaries.getMaxMark(char.name, arti.main[0] || "");
|
||||||
totalMark += mark;
|
totalMark += mark;
|
||||||
totalMaxMark += maxMark;
|
totalMaxMark += maxMark;
|
||||||
ds.mark = c(mark, 1);
|
ds.mark = c(mark, 1);
|
||||||
ds.markType = Reliquaries.getMarkScore(mark, maxMark);
|
ds.markType = isNewScore ? Reliquaries2.getMarkScore(mark) : Reliquaries.getMarkScore(mark, maxMark);
|
||||||
ds.main = Profile.formatArti(arti.main);
|
ds.main = Profile.formatArti(arti.main);
|
||||||
ds.attrs = Profile.formatArti(arti.attrs);
|
ds.attrs = Profile.formatArti(arti.attrs);
|
||||||
reliquaries.push(ds);
|
reliquaries.push(ds);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let markScore, usefulMark;
|
||||||
|
if (isNewScore) {
|
||||||
|
let charCfg = Reliquaries2.getCharCfg(char.name);
|
||||||
|
usefulMark = charCfg.titleWeight;
|
||||||
|
markScore = Reliquaries2.getMarkScore(totalMark / 5);
|
||||||
|
} else {
|
||||||
|
let usefulData = Reliquaries.getUseful(char.name);
|
||||||
|
usefulMark = usefulData.mark;
|
||||||
|
markScore = Reliquaries.getMarkScore(totalMark, totalMaxMark);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let enemyLv = await selfUser.getCfg(`char.enemyLv`, 91);
|
let enemyLv = await selfUser.getCfg(`char.enemyLv`, 91);
|
||||||
let dmgMsg = [], dmgData = [];
|
let dmgMsg = [], dmgData = [];
|
||||||
@ -816,9 +824,7 @@ export async function renderProfile(e, char, render, mode = "profile", params =
|
|||||||
enemyLv,
|
enemyLv,
|
||||||
enemyName: dmgCalc.enemyName || "小宝",
|
enemyName: dmgCalc.enemyName || "小宝",
|
||||||
totalMark: c(totalMark, 1),
|
totalMark: c(totalMark, 1),
|
||||||
totalMaxMark,
|
markScore,
|
||||||
markScore: Reliquaries.getMarkScore(totalMark, totalMaxMark),
|
|
||||||
usefulTitles,
|
|
||||||
usefulMark,
|
usefulMark,
|
||||||
talentMap: { a: "普攻", e: "战技", q: "爆发" },
|
talentMap: { a: "普攻", e: "战技", q: "爆发" },
|
||||||
bodyClass: `char-${char.name}`,
|
bodyClass: `char-${char.name}`,
|
||||||
@ -876,21 +882,25 @@ export async function getArtis(e, { render }) {
|
|||||||
|
|
||||||
lodash.forEach(profiles || [], (ds) => {
|
lodash.forEach(profiles || [], (ds) => {
|
||||||
let name = ds.name;
|
let name = ds.name;
|
||||||
if (!name) {
|
if (!name || name === "空" || name === "荧") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let { mark: usefulMark } = Reliquaries.getUseful(name);
|
let { mark: usefulMark } = Reliquaries.getUseful(name);
|
||||||
|
|
||||||
/* 处理圣遗物 */
|
/* 处理圣遗物 */
|
||||||
if (ds.artis) {
|
if (ds.artis) {
|
||||||
lodash.forEach(ds.artis, (arti) => {
|
let newScore = Reliquaries2.getArtisMark(name, ds.artis);
|
||||||
|
|
||||||
|
lodash.forEach(ds.artis, (arti, idx) => {
|
||||||
if (!arti.name) {
|
if (!arti.name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let mark = Reliquaries.getMark(name, arti.attrs);
|
idx = idx.replace("arti", "");
|
||||||
|
let mark = isNewScore ? newScore[idx] : Reliquaries.getMark(name, arti.attrs);
|
||||||
let maxMark = Reliquaries.getMaxMark(name, arti.main[0] || "");
|
let maxMark = Reliquaries.getMaxMark(name, arti.main[0] || "");
|
||||||
arti.mark = Format.comma(mark, 1);
|
arti.mark = Format.comma(mark, 1);
|
||||||
arti._mark = mark;
|
arti._mark = mark;
|
||||||
arti.markType = Reliquaries.getMarkScore(mark, maxMark);
|
arti.markType = isNewScore ? Reliquaries2.getMarkScore(mark) : Reliquaries.getMarkScore(mark, maxMark);
|
||||||
arti.main = Profile.formatArti(arti.main);
|
arti.main = Profile.formatArti(arti.main);
|
||||||
arti.attrs = Profile.formatArti(arti.attrs);
|
arti.attrs = Profile.formatArti(arti.attrs);
|
||||||
arti.usefulMark = usefulMark;
|
arti.usefulMark = usefulMark;
|
||||||
|
@ -42,7 +42,7 @@ let Profile = {
|
|||||||
e.reply("请求过快,请稍后重试..");
|
e.reply("请求过快,请稍后重试..");
|
||||||
return false;
|
return false;
|
||||||
} else if (inCd === 'pending') {
|
} else if (inCd === 'pending') {
|
||||||
e.reply("#ref距上次请求刷新成功间隔小于5分钟,请稍后重试..");
|
e.reply("距上次请求刷新成功间隔小于5分钟,请稍后重试..");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
await redis.set(`miao:role-all:${uid}`, 'loading', { EX: 20 });
|
await redis.set(`miao:role-all:${uid}`, 'loading', { EX: 20 });
|
||||||
|
157
components/models/Reliquaries2.js
Normal file
157
components/models/Reliquaries2.js
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
import {
|
||||||
|
attrValue,
|
||||||
|
attrNameMap,
|
||||||
|
attrMap,
|
||||||
|
mainAttr,
|
||||||
|
subAttr,
|
||||||
|
usefulAttr
|
||||||
|
} from "../../resources/meta/reliquaries/reliquaries-mark-new.js";
|
||||||
|
import { Character } from "../models.js";
|
||||||
|
import lodash from "lodash";
|
||||||
|
|
||||||
|
let charCfg = {};
|
||||||
|
let Reliquaries = {
|
||||||
|
getCharCfg(name) {
|
||||||
|
if (charCfg[name]) {
|
||||||
|
return charCfg[name]
|
||||||
|
}
|
||||||
|
let attrWeight = usefulAttr[name] || { atk: 75, cp: 100, cd: 100 };
|
||||||
|
let attrMark = {};
|
||||||
|
|
||||||
|
let char = Character.get(name);
|
||||||
|
let baseAttr = char.lvStat.detail['90'];
|
||||||
|
lodash.forEach(attrWeight, (weight, attr) => {
|
||||||
|
attrMark[attr] = weight / attrValue[attr];
|
||||||
|
});
|
||||||
|
|
||||||
|
// let baseAttr = [400, 500, 300];
|
||||||
|
if (attrMark.hp) {
|
||||||
|
attrMark.hpPlus = attrMark.hp / baseAttr[0] * 100;
|
||||||
|
}
|
||||||
|
if (attrMark.atk) {
|
||||||
|
attrMark.atkPlus = attrMark.atk / (baseAttr[1] + 400) * 100;
|
||||||
|
}
|
||||||
|
if (attrMark.def) {
|
||||||
|
attrMark.defPlus = attrMark.def / baseAttr[2] * 100;
|
||||||
|
}
|
||||||
|
let maxMark = Reliquaries.getMaxMark(attrWeight);
|
||||||
|
let titleMark = {}, titleWeight = {};
|
||||||
|
lodash.forEach(attrMark, (mark, attr) => {
|
||||||
|
titleMark[attrMap[attr]] = mark;
|
||||||
|
titleWeight[attrMap[attr]] = attrWeight[attr] || 0;
|
||||||
|
if (/大/.test(attrMap[attr])) {
|
||||||
|
let newAttr = attrMap[attr];
|
||||||
|
let newArr = newAttr.replace("大", "小");
|
||||||
|
titleWeight[newArr] = attrWeight[attr] || 0;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
charCfg[name] = {
|
||||||
|
weight: attrWeight,
|
||||||
|
mark: attrMark,
|
||||||
|
titleMap: titleMark,
|
||||||
|
titleWeight,
|
||||||
|
maxMark
|
||||||
|
};
|
||||||
|
return charCfg[name];
|
||||||
|
},
|
||||||
|
getMaxAttr(charAttr = {}, list2 = [], maxLen = 1, banAttr = "") {
|
||||||
|
let tmp = [];
|
||||||
|
lodash.forEach(list2, (attr) => {
|
||||||
|
if (attr === banAttr) return;
|
||||||
|
if (!charAttr[attr]) return;
|
||||||
|
tmp.push({ attr, mark: charAttr[attr] });
|
||||||
|
});
|
||||||
|
tmp = lodash.sortBy(tmp, "mark");
|
||||||
|
tmp = tmp.reverse();
|
||||||
|
let ret = [];
|
||||||
|
lodash.forEach(tmp, (ds) => ret.push(ds.attr));
|
||||||
|
return ret.slice(0, maxLen);
|
||||||
|
},
|
||||||
|
getMaxMark(attrWeight) {
|
||||||
|
let ret = {};
|
||||||
|
for (let idx = 1; idx <= 5; idx++) {
|
||||||
|
let totalMark = 0, mMark = 0;
|
||||||
|
let mAttr = "";
|
||||||
|
if (idx === 1) {
|
||||||
|
mAttr = "hpPlus";
|
||||||
|
} else if (idx === 2) {
|
||||||
|
mAttr = "atkPlus";
|
||||||
|
} else if (idx >= 3) {
|
||||||
|
mAttr = Reliquaries.getMaxAttr(attrWeight, mainAttr[idx])[0];
|
||||||
|
mMark = attrWeight[mAttr];
|
||||||
|
totalMark += attrWeight[mAttr] * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
let sAttr = Reliquaries.getMaxAttr(attrWeight, subAttr, 4, mAttr);
|
||||||
|
lodash.forEach(sAttr, (attr, aIdx) => {
|
||||||
|
totalMark += attrWeight[attr] * (aIdx === 0 ? 6 : 1)
|
||||||
|
});
|
||||||
|
ret[idx] = totalMark;
|
||||||
|
ret['m' + idx] = mMark;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
getAttr(ds) {
|
||||||
|
let title = ds[0]
|
||||||
|
let attr = attrNameMap[title];
|
||||||
|
if (/元素伤害/.test(title)) {
|
||||||
|
attr = "dmg";
|
||||||
|
} else if (/物理|物伤/.test(title)) {
|
||||||
|
attr = "phy"
|
||||||
|
}
|
||||||
|
return attr;
|
||||||
|
},
|
||||||
|
getAttrMark(attrMark, ds) {
|
||||||
|
if (!ds || !ds[1]) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
let attr = Reliquaries.getAttr(ds);
|
||||||
|
let val = ds[1];
|
||||||
|
return (attrMark[attr] || 0) * val;
|
||||||
|
},
|
||||||
|
getMark(charCfg, posIdx, mainAttr, subAttr) {
|
||||||
|
let ret = 0;
|
||||||
|
let { mark, maxMark, weight } = charCfg;
|
||||||
|
let mAttr = Reliquaries.getAttr(mainAttr);
|
||||||
|
|
||||||
|
let fixPct = 1;
|
||||||
|
if (posIdx >= 3) {
|
||||||
|
fixPct = Math.max(0, Math.min(1, (weight[mAttr] || 0) / (maxMark['m' + posIdx])));
|
||||||
|
ret += Reliquaries.getAttrMark(mark, mainAttr) / 4
|
||||||
|
}
|
||||||
|
|
||||||
|
lodash.forEach(subAttr, (ds) => {
|
||||||
|
ret += Reliquaries.getAttrMark(mark, ds)
|
||||||
|
});
|
||||||
|
|
||||||
|
return ret * (1 + fixPct) / 2 / maxMark[posIdx] * 66;
|
||||||
|
},
|
||||||
|
|
||||||
|
getArtisMark(charName = "", artis = {}) {
|
||||||
|
let total = 0;
|
||||||
|
let charCfg = Reliquaries.getCharCfg(charName);
|
||||||
|
let ret = {}
|
||||||
|
lodash.forEach(artis, (ds, idx) => {
|
||||||
|
idx = idx.replace("arti", "");
|
||||||
|
ret[idx] = Reliquaries.getMark(charCfg, idx, ds.main, ds.attrs)
|
||||||
|
});
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
getMarkScore(mark) {
|
||||||
|
let pct = mark;
|
||||||
|
let scoreMap = [["D", 10], ["C", 16.5], ["B", 23.1], ["A", 29.7], ["S", 36.3], ["SS", 42.9], ["SSS", 50], ["ACE", 56.1], ["ACE²", 66]];
|
||||||
|
for (let idx = 0; idx < scoreMap.length; idx++) {
|
||||||
|
if (pct < scoreMap[idx][1]) {
|
||||||
|
return scoreMap[idx][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getSet(name) {
|
||||||
|
for (let idx in meta) {
|
||||||
|
if (meta[idx].name === name) {
|
||||||
|
return meta[idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default Reliquaries;
|
@ -488,6 +488,9 @@ body {
|
|||||||
line-height: 26px;
|
line-height: 26px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
|
.artis ul.detail li.great span.title {
|
||||||
|
color: #ffe699;
|
||||||
|
}
|
||||||
.artis ul.detail li.nouse span {
|
.artis ul.detail li.nouse span {
|
||||||
color: #888;
|
color: #888;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
<li class="arti-main"><span class="title">{{ds.main[0]}}</span><span class="val">+{{ds.main[1]}}</span></li>
|
<li class="arti-main"><span class="title">{{ds.main[0]}}</span><span class="val">+{{ds.main[1]}}</span></li>
|
||||||
{{each ds.attrs attr}}
|
{{each ds.attrs attr}}
|
||||||
{{if attr[0]}}
|
{{if attr[0]}}
|
||||||
<li class="{{usefulMark[attr[0]] ? `useful`:`nouse`}}"><span class="title">{{attr[0]}}</span><span
|
<li class="{{usefulMark[attr[0]]*1 > 79.9 ?`great`:(usefulMark[attr[0]]*1>0 ? `useful`:`nouse`)}}"><span class="title">{{attr[0]}} </span><span
|
||||||
class="val">+{{attr[1]}}</span></li>
|
class="val">+{{attr[1]}}</span></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -601,6 +601,9 @@ body {
|
|||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.artis ul.detail li.great span.title {
|
||||||
|
color: #ffe699;
|
||||||
|
}
|
||||||
|
|
||||||
.artis ul.detail li.nouse span {
|
.artis ul.detail li.nouse span {
|
||||||
color: #888;
|
color: #888;
|
||||||
|
101
resources/meta/reliquaries/reliquaries-mark-new.js
Normal file
101
resources/meta/reliquaries/reliquaries-mark-new.js
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
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: "大攻击",
|
||||||
|
atkPlus: "小攻击",
|
||||||
|
def: "大防御",
|
||||||
|
defPlus: "小防御",
|
||||||
|
hp: "大生命",
|
||||||
|
hpPlus: "小生命",
|
||||||
|
cp: "暴击率",
|
||||||
|
cd: "暴击伤害",
|
||||||
|
mastery: "元素精通",
|
||||||
|
recharge: "充能效率",
|
||||||
|
dmg: "元素伤害",
|
||||||
|
phy: "物伤加成",
|
||||||
|
heal: "治疗加成",
|
||||||
|
};
|
||||||
|
let anMap = {};
|
||||||
|
for (let attr in attrMap) {
|
||||||
|
anMap[attrMap[attr]] = attr;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const attrNameMap = anMap;
|
||||||
|
/* 当前位置主词条不可能出现词缀*/
|
||||||
|
export const banAttr = {
|
||||||
|
1: "hpPlus,dmg,phy,heal".split(","),
|
||||||
|
2: "atkPlus,dmg,phy,heal".split(","),
|
||||||
|
3: "dmg,phy,heal".split(","),
|
||||||
|
4: "heal".split(","),
|
||||||
|
5: "dmg,phy".split(",")
|
||||||
|
};
|
||||||
|
|
||||||
|
export const mainAttr = {
|
||||||
|
3: "atk,def,hp,mastery,recharge".split(","),
|
||||||
|
4: "atk,def,hp,mastery,dmg,phy".split(","),
|
||||||
|
5: "atk,def,hp,mastery,recharge,heal,cp,cd".split(",")
|
||||||
|
};
|
||||||
|
|
||||||
|
export const subAttr = "atk,def,hp,mastery,recharge,cp,cd".split(",")
|
||||||
|
|
||||||
|
export const usefulAttr = {
|
||||||
|
'神里绫人': { hp: 40, atk: 75, def: 0, cp: 100, cd: 100, mastery: 25, dmg: 100, phy: 0, recharge: 20, heal: 0 },
|
||||||
|
'八重神子': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 50, dmg: 100, phy: 0, recharge: 50, heal: 0 },
|
||||||
|
'申鹤': { hp: 0, atk: 100, def: 0, cp: 75, cd: 75, mastery: 0, dmg: 100, phy: 0, recharge: 70, heal: 0 },
|
||||||
|
'云堇': { hp: 0, atk: 25, def: 100, cp: 50, cd: 50, mastery: 0, dmg: 25, phy: 0, recharge: 90, heal: 0 },
|
||||||
|
'荒泷一斗': { hp: 0, atk: 50, def: 90, 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: 90, atk: 30, def: 0, cp: 50, cd: 50, mastery: 0, dmg: 70, phy: 0, recharge: 80, heal: 100 },
|
||||||
|
'枫原万叶': { hp: 0, atk: 60, 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: 20, dmg: 75, phy: 0, recharge: 90, heal: 0 },
|
||||||
|
'行秋': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 20, dmg: 100, phy: 0, recharge: 65, heal: 0 },
|
||||||
|
'钟离': { hp: 80, atk: 70, 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: 30, dmg: 100, phy: 0, recharge: 20, heal: 0 },
|
||||||
|
'香菱': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 75, heal: 0 },
|
||||||
|
'胡桃': { hp: 80, atk: 30, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 35, heal: 0 },
|
||||||
|
'甘雨': { hp: 0, atk: 90, def: 0, cp: 100, cd: 100, mastery: 50, dmg: 100, phy: 0, recharge: 40, heal: 0 },
|
||||||
|
'温迪': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 60, dmg: 100, phy: 0, recharge: 80, heal: 0 },
|
||||||
|
'珊瑚宫心海': { hp: 100, atk: 50, def: 0, cp: 0, cd: 0, mastery: 0, dmg: 100, phy: 0, recharge: 65, heal: 100 },
|
||||||
|
'莫娜': { hp: 0, atk: 50, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 0, recharge: 80, heal: 0 },
|
||||||
|
'阿贝多': { hp: 0, atk: 30, def: 80, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 35, heal: 0 },
|
||||||
|
'迪奥娜': { hp: 85, atk: 50, def: 0, cp: 75, cd: 75, mastery: 0, dmg: 65, phy: 0, recharge: 55, heal: 100 },
|
||||||
|
'优菈': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 40, phy: 100, recharge: 45, heal: 0 },
|
||||||
|
'达达利亚': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 50, dmg: 100, phy: 0, recharge: 45, heal: 0 },
|
||||||
|
'魈': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 20, 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: 90, 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: 30, dmg: 100, phy: 60, recharge: 30, heal: 0 },
|
||||||
|
'罗莎莉亚': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 70, phy: 80, recharge: 40, heal: 0 },
|
||||||
|
'可莉': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 20, dmg: 100, phy: 0, recharge: 40, heal: 0 },
|
||||||
|
'凝光': { hp: 0, atk: 80, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 0, recharge: 40, heal: 0 },
|
||||||
|
'北斗': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 30, dmg: 100, phy: 0, recharge: 50, heal: 0 },
|
||||||
|
'刻晴': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 15, dmg: 100, phy: 100, recharge: 30, heal: 0 },
|
||||||
|
'托马': { hp: 75, atk: 50, def: 0, cp: 50, cd: 50, mastery: 0, dmg: 75, phy: 0, recharge: 55, heal: 40 },
|
||||||
|
'迪卢克': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 50, dmg: 100, phy: 0, recharge: 40, heal: 0 },
|
||||||
|
'芭芭拉': { hp: 80, atk: 50, def: 0, cp: 50, cd: 50, mastery: 15, dmg: 80, phy: 0, recharge: 55, heal: 100 },
|
||||||
|
'诺艾尔': { hp: 0, atk: 75, def: 100, 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: 0, dmg: 100, phy: 0, recharge: 70, heal: 0 },
|
||||||
|
'七七': { hp: 0, atk: 100, def: 0, cp: 75, cd: 75, mastery: 0, dmg: 60, phy: 70, recharge: 25, heal: 100 },
|
||||||
|
'凯亚': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 100, phy: 100, recharge: 40, heal: 10 },
|
||||||
|
'烟绯': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 40, dmg: 100, phy: 0, recharge: 40, heal: 0 },
|
||||||
|
'早柚': { hp: 0, atk: 60, def: 0, cp: 70, cd: 70, mastery: 100, dmg: 80, phy: 0, recharge: 70, heal: 100 },
|
||||||
|
'安柏': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 75, dmg: 100, phy: 100, recharge: 35, heal: 0 },
|
||||||
|
'丽莎': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 40, dmg: 100, phy: 0, recharge: 45, 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: 0, dmg: 50, phy: 100, recharge: 30, heal: 0 },
|
||||||
|
'砂糖': { hp: 0, atk: 60, def: 0, cp: 70, cd: 70, mastery: 100, dmg: 40, phy: 0, recharge: 70, heal: 0 },
|
||||||
|
'雷泽': { hp: 0, atk: 75, def: 0, cp: 100, cd: 100, mastery: 0, dmg: 50, phy: 100, recharge: 35, heal: 0 },
|
||||||
|
'夜兰': { hp: 80, atk: 0, def: 0, cp: 100, cd: 100, mastery: 25, dmg: 100, phy: 0, recharge: 75, heal: 0 },
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user