diff --git a/CHANGELOG.md b/CHANGELOG.md index 90bd16d0..2488ad3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,14 @@ -# 1.6.4 +# 1.6.5 +* `#更新全部面板` 一些已知问题修复 + * 目前可正确获取圣遗物名称了,`#圣遗物列表`如有错误重新获角色信息后即正常 + * 雷神、莫娜的元素伤害字段数据错误fix + * 由于服务逻辑与之前数据不一致,部分角色的属性及伤害计算可能会不准确,如有发现请反馈给喵喵 * `#更新全部面板` 功能暂时恢复 - * 目前可直接使用,无需token - * 部分网络可能无法请求,等待后续服务更新 - * 由于服务逻辑与之前数据不一致,部分角色的属性及伤害计算可能会不准确,如有发现请反馈给喵喵 + * 目前可直接使用,无需token + * 服务来自enka.shinshin.moe,部分网络可能无法请求,请使用科学处理 -# 1.6.1 ~ 1.6.3 +# 1.6.1 ~ 1.6.4 * 增加`#喵喵面板设置`命令,可更精细的设置是否允许好友/临时对话/群使用面板功能 * 增加`#录入夜兰面板` 命令,可在更新服务不可用时手工录入角色面板信息 diff --git a/apps/character.js b/apps/character.js index 061ad131..1f00250c 100644 --- a/apps/character.js +++ b/apps/character.js @@ -493,9 +493,7 @@ export async function getProfile(e, mode = "refresh") { return true; } let leftMsg = ""; - if (!lodash.isUndefined(data.leftCount)) { - leftMsg = `今日剩余${data.leftCount}次请求机会。` - } + if (!data.chars) { e.reply("获取角色面板数据失败,请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~"); } else { @@ -832,6 +830,9 @@ export async function getArtis(e, { render }) { /* 处理圣遗物 */ if (ds.artis) { lodash.forEach(ds.artis, (arti) => { + if (!arti.name) { + return; + } let mark = Reliquaries.getMark(name, arti.attrs); let maxMark = Reliquaries.getMaxMark(name, arti.main[0] || ""); arti.mark = Format.comma(mark, 1); @@ -846,7 +847,6 @@ export async function getArtis(e, { render }) { } }); - if (artis.length === 0) { e.reply("请先获取角色面板数据后再查看圣遗物列表..."); await profileHelp(e); diff --git a/components/Profile.js b/components/Profile.js index 40236e4a..1656ed50 100644 --- a/components/Profile.js +++ b/components/Profile.js @@ -5,19 +5,18 @@ import Format from "./Format.js"; import Character from "./models/Character.js"; import Reliquaries from "./models/Reliquaries.js"; +import Data from "./data/enka.js"; + const _path = process.cwd(); const cfgPath = `${_path}/plugins/miao-plugin/config.js`; let config = {}; -//try { + if (fs.existsSync(cfgPath)) { let fileData = await import (`file://${cfgPath}`); if (fileData && fileData.config) { config = fileData.config; } } -//} catch (e) { -// do nth -//} const userPath = `${_path}/data/UserData/`; @@ -25,368 +24,11 @@ if (!fs.existsSync(userPath)) { fs.mkdirSync(userPath); } -const artifactMap = { - '生命值': { - title: "小生命" - }, - '生命值_百分比': { - title: "大生命", - pct: true - }, - '暴击率': { - title: "暴击率", - pct: true - }, - '暴击伤害': { - title: "暴击伤害", - pct: true - }, - '防御力': { - title: "小防御" - }, - '防御力_百分比': { - title: "大防御", - pct: true - }, - '攻击力': { - title: "小攻击" - }, - '攻击力_百分比': { - title: "大攻击", - pct: true - }, - '元素精通': { - title: "元素精通" - }, - '元素充能效率': { - title: "充能效率", - pct: true - }, - '治疗加成': { - title: "治疗加成", - pct: true - } -} - - -let posIdx = { - "生之花": { - idx: 1 - }, - "死之羽": { - idx: 2 - }, - "时之沙": { - idx: 3 - }, - "空之杯": { - idx: 4 - }, - "理之冠": { - idx: 5 - } -}; function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } -let Data = { - getData(uid, data) { - let ret = { - uid, - chars: {} - }; - - lodash.forEach({ - name: "角色名称", - avatar: "头像ID", - lv: "冒险等阶" - }, (title, key) => { - ret[key] = data[title] || ""; - }) - - lodash.forEach(data.items, (ds) => { - let char = Data.getAvatar(ds); - ret.chars[char.id] = char; - }); - - return ret; - - }, - getAvatar(data) { - let char = Character.get(data["英雄Id"]); - return { - id: data["英雄Id"], - name: char ? char.name : "", - lv: data['等级'], - attr: Data.getAttr(data), - // weapon: Data.getWeapon(data), - artis: Data.getArtifact(data), - //cons: data["命之座数量"] * 1 || 0, - //talent: Data.getTalent(data) - }; - }, - getAttr(data) { - let ret = {}; - let attrKey = { - atk: "攻击力_总", - atkBase: "属性攻击力", - def: "防御力_总", - defBase: "属性防御力", - hp: "生命值上限_总", - hpBase: "属性生命值上限", - mastery: "属性元素精通", - cRate: { - title: "属性暴击率", - pct: true - }, - cDmg: { - title: "属性暴击伤害", - pct: true - }, - hInc: { - title: "属性治疗加成", - pct: true - }, - recharge: { - title: "属性元素充能效率", - pct: true - } - }; - lodash.forEach(attrKey, (cfg, key) => { - if (typeof (cfg) === "string") { - cfg = {title: cfg}; - } - let val = data[cfg.title] || ""; - if (cfg.pct) { - val = (val * 100).toFixed(2) - } - ret[key] = val; - }); - let maxDmg = 0; - lodash.forEach("火水草雷风冰岩".split(""), (key) => { - maxDmg = Math.max(data[`属性${key}元素伤害加成`] * 1, maxDmg); - }); - ret.dmgBonus = (maxDmg * 100).toFixed(2); - ret.phyBonus = (data[`属性物理伤害加成`] * 100).toFixed(2); - - return ret; - }, - getWeapon(data) { - return { - name: data['武器名称'], - lv: data['武器等级'], - refine: data["武器精炼"] - } - }, - getArtifact(data) { - let ret = {}; - let get = function (idx, key) { - let v = data[`圣遗物${idx}${key}`]; - let ret = /^([^\d]*)([\d\.\-]*)$/.exec(v); - if (ret && ret[1]) { - let title = ret[1], val = ret[2]; - if (artifactMap[title]) { - if (artifactMap[title].pct) { - val = (val * 100).toFixed(2); - } - title = artifactMap[title].title; - } - return [title, val]; - } - return []; - } - - for (let idx = 1; idx <= 5; idx++) { - ret[`arti${idx}`] = { - name: data[`圣遗物${idx}名称`], - type: data[`圣遗物${idx}类型`], - main: get(idx, "主词条"), - attrs: [ - get(idx, "副词条1"), - get(idx, "副词条2"), - get(idx, "副词条3"), - get(idx, "副词条4"), - ] - }; - } - return ret; - }, - getTalent(data) { - let ret = {}; - lodash.forEach({ - a: 1, - e: 2, - q: 3 - }, (idx, key) => { - let val = data[`天赋主动名称${idx}`] - let regRet = /等级(\d*)$/.exec(val); - if (regRet && regRet[1]) { - ret[key] = regRet[1] * 1 || 1 - } else { - ret[key] = 1; - } - }) - return ret; - } -} - -let Data2 = { - getData(uid, data) { - - let ret = { - uid, - chars: {} - } - - lodash.forEach({ - name: "nickname", - avatar: "profilePicture.avatarId", - lv: "level" - }, (src, key) => { - ret[key] = lodash.get(data.playerInfo, src, ""); - }) - - lodash.forEach(data.avatarInfoList, (ds) => { - let char = Data2.getAvatar(ds); - ret.chars[char.id] = char; - }) - - return ret; - - }, - getAvatar(data) { - let char = Character.get(data.avatarId); - return { - id: data["avatarId"], - name: char ? char.name : "", - dataSource: "shin", - lv: data.propMap['4001'].val * 1, - attr: Data2.getAttr(data.fightPropMap), - // weapon: Data.getWeapon(data), - artis: Data2.getArtifact(data.equipList), - //cons: data["命之座数量"] * 1 || 0, - //talent: Data.getTalent(data) - }; - }, - getAttr(data) { - let ret = {}; - let attrKey = { - // atk: 2001, - atkBase: 4, - def: 2002, - defBase: 7, - hp: 2000, - hpBase: 1, - mastery: 28, - cRate: { - src: 20, - pct: true - }, - cDmg: { - src: 22, - pct: true - }, - hInc: { - src: 26, - pct: true - }, - recharge: { - src: 23, - pct: true - } - }; - lodash.forEach(attrKey, (cfg, key) => { - if (!lodash.isObject(cfg)) { - cfg = {src: cfg}; - } - let val = data[cfg.src] || 0; - if (cfg.pct) { - val = val * 100 - } - ret[key] = val; - }); - ret.atk = data['4'] * (1 + data['6']) + data['5']; - let maxDmg = 0; - // 火40 水42 风44 岩45 冰46 雷46 - // 41 雷 - lodash.forEach("40,41,42,43,44,45,45,46".split(","), (key) => { - maxDmg = Math.max(data[key] * 1, maxDmg); - }); - // phy 30 - ret.dmgBonus = maxDmg * 100; - ret.phyBonus = data['30'] * 100; - - return ret; - }, - - getArtifact(data) { - let ret = {}; - - let artiIdx = { - EQUIP_BRACER: 1, - EQUIP_NECKLACE: 2, - EQUIP_SHOES: 3, - EQUIP_RING: 4, - EQUIP_DRESS: 5 - } - let attrMap = { - HP: "小生命", - HP_PERCENT: "大生命", - ATTACK: "小攻击", - ATTACK_PERCENT: "大攻击", - DEFENSE: "小防御", - DEFENSE_PERCENT: "大防御", - FIRE_ADD_HURT: "火元素伤害加成", - ICE_ADD_HURT: "冰元素伤害加成", - ROCK_ADD_HURT: "岩元素伤害加成", - ELEC_ADD_HURT: "雷元素伤害加成", - WIND_ADD_HURT: "风元素伤害加成", - WATER_ADD_HURT: "水元素伤害加成", - PHYSICAL_ADD_HURT: "物理伤害加成", - HEAL_ADD: "治疗加成", - ELEMENT_MASTERY: "元素精通", - CRITICAL: "暴击率", - CRITICAL_HURT: "暴击伤害", - CHARGE_EFFICIENCY: "充能效率", - } - - let get = function (d) { - if (!d) { - return []; - } - let id = d.appendPropId || d.mainPropId || ""; - id = id.replace("FIGHT_PROP_", ""); - if (!attrMap[id]) { - return []; - } - return [attrMap[id], d.statValue]; - - } - lodash.forEach(data, (ds) => { - let flat = ds.flat || {}, sub = flat.reliquarySubstats || []; - let idx = artiIdx[flat.equipType]; - if (!idx) { - return; - } - - ret[`arti${idx}`] = { - name: "", - id: ds.itemId, - main: get(flat.reliquaryMainstat), - attrs: [ - get(sub[0]), - get(sub[1]), - get(sub[2]), - get(sub[3]) - ] - } - }) - return ret; - }, -}; - let Profile = { async request(uid, e) { let api = `https://enka.shinshin.moe/u/${uid}/__data.json`; @@ -395,7 +37,7 @@ let Profile = { e.reply("请求过快,请稍后重试.."); return false; } else if (inCd === 'pending') { - e.reply("距上次请求刷新成功间隔小于2分钟,请稍后重试.."); + e.reply("距上次请求刷新成功间隔小于5分钟,请稍后重试.."); return false; } await redis.set(`miao:role-all:${uid}`, 'loading', {EX: 20}); @@ -414,78 +56,29 @@ let Profile = { e.reply(`请打开角色展柜的显示详情`); return false; } + + // enka服务测冷却时间5分钟 + await redis.set(`miao:role-all:${uid}`, 'pending', {EX: 300}); + let userData = {}; + userData = Profile.save(uid, data, 'enka') + return userData; } catch (err) { + console.log(err); e.reply(`请求失败`); + return false; } - // 请求成功Bot侧对该uid冷却10分钟 - // 请勿将时间改短,10分钟之内若发起请求会命中服务侧的uid缓存,返回之前的数据,并导致服务侧重新计时 - await redis.set(`miao:role-all:${uid}`, 'pending', {EX: 120}); - - let userData = {}; - userData = Profile.save(uid, data, true) - - userData.leftCount = 99; - return userData; }, - async request_bak(uid, e) { - let cfg = config.miaoApi || {}; - if (!cfg.api) { - e.reply("该功能为小范围非公开功能,需具备Token才可使用~"); - return false; - } - if (!cfg.qq || !cfg.token || cfg.token.length !== 32) { - e.reply("Token错误,无法请求数据~"); - return false; - } - let inCd = await redis.get(`miao:role-all:${uid}`); - if (inCd === 'loading') { - e.reply("请求过快,请稍后重试.."); - return false; - } else if (inCd === 'pending') { - e.reply("距上次请求刷新成功间隔小于10分钟,请稍后重试.."); - return false; - } - await redis.set(`miao:role-all:${uid}`, 'loading', {EX: 20}); - e.reply("开始获取数据,可能会需要一定时间~"); - await sleep(1000); - - let api = `${cfg.api}?uid=${uid}&qq=${cfg.qq}&token=${cfg.token}`; - if (e.avatar) { - api += `&avatar=${e.avatar}`; - } - let req = await fetch(api); - let data = await req.json(); - if (data.status !== 0 || !data.data) { - e.reply(`请求失败:${data.msg || "未知错误"}`); - return false; - } - // 请求成功Bot侧对该uid冷却10分钟 - // 请勿将时间改短,10分钟之内若发起请求会命中服务侧的uid缓存,返回之前的数据,并导致服务侧重新计时 - await redis.set(`miao:role-all:${uid}`, 'pending', {EX: 600}); - let leftCount = data.leftCount; - data = data.data; - let userData = {}; - if (data && data["角色名称"]) { - userData = Profile.save(uid, data) - } - userData.leftCount = leftCount; - return userData; - }, - - save(uid, ds, isNewFormat = false) { + save(uid, ds, dataSource = 'enka') { let userData = {}; const userFile = `${userPath}/${uid}.json`; if (fs.existsSync(userFile)) { userData = JSON.parse(fs.readFileSync(userFile, "utf8")) || {}; } let data; - if (isNewFormat) { - data = Data2.getData(uid, ds); - } else { - data = Data.getData(uid, ds); - } + + data = Data.getData(uid, ds); lodash.assignIn(userData, lodash.pick(data, "uid,name,lv,avatar".split(","))); userData.chars = userData.chars || {}; diff --git a/components/data/enka.js b/components/data/enka.js new file mode 100644 index 00000000..ad9c67f6 --- /dev/null +++ b/components/data/enka.js @@ -0,0 +1,242 @@ +import lodash from "lodash"; +import Character from "../models/Character.js"; +import meta from "./enka_meta.js"; +import cmeta from "./enka_char.js"; +import _Data from "../Data.js"; + +let _path = process.cwd(); +let relis = _Data.readJSON(`${_path}/plugins/miao-plugin/resources/meta/reliquaries/`, "data.json") || {}; + +let relisMap = {} + +lodash.forEach(relis, (ds) => { + relisMap[ds.name] = ds; +}) + + +const artiIdx = { + EQUIP_BRACER: 1, + EQUIP_NECKLACE: 2, + EQUIP_SHOES: 3, + EQUIP_RING: 4, + EQUIP_DRESS: 5 +}; + +const attrMap = { + HP: "小生命", + HP_PERCENT: "大生命", + ATTACK: "小攻击", + ATTACK_PERCENT: "大攻击", + DEFENSE: "小防御", + DEFENSE_PERCENT: "大防御", + FIRE_ADD_HURT: "火元素伤害加成", + ICE_ADD_HURT: "冰元素伤害加成", + ROCK_ADD_HURT: "岩元素伤害加成", + ELEC_ADD_HURT: "雷元素伤害加成", + WIND_ADD_HURT: "风元素伤害加成", + WATER_ADD_HURT: "水元素伤害加成", + PHYSICAL_ADD_HURT: "物理伤害加成", + HEAL_ADD: "治疗加成", + ELEMENT_MASTERY: "元素精通", + CRITICAL: "暴击率", + CRITICAL_HURT: "暴击伤害", + CHARGE_EFFICIENCY: "充能效率", +}; + +let Data = { + getData(uid, data) { + let ret = { + uid, + chars: {} + } + + lodash.forEach({ + name: "nickname", + avatar: "profilePicture.avatarId", + lv: "level" + }, (src, key) => { + ret[key] = lodash.get(data.playerInfo, src, ""); + }) + + lodash.forEach(data.avatarInfoList, (ds) => { + let char = Data.getAvatar(ds); + ret.chars[char.id] = char; + }) + + return ret; + + }, + getAvatar(data) { + let char = Character.get(data.avatarId); + let ret = { + id: data["avatarId"], + name: char ? char.name : "", + dataSource: "enka", + lv: data.propMap['4001'].val * 1, + fetter: data.fetterInfo.expLevel, + attr: Data.getAttr(data.fightPropMap), + weapon: Data.getWeapon(data.equipList), + artis: Data.getArtifact(data.equipList), + cons: data.talentIdList ? data.talentIdList.length : 0, + talent: Data.getTalent(char.id, data.skillLevelMap, data.proudSkillExtraLevelMap || {}) + }; + return Data.dataFix(ret); + }, + getAttr(data) { + let ret = {}; + let attrKey = { + // atk: 2001, + atkBase: 4, + def: 2002, + defBase: 7, + hp: 2000, + hpBase: 1, + mastery: 28, + cRate: { + src: 20, + pct: true + }, + cDmg: { + src: 22, + pct: true + }, + hInc: { + src: 26, + pct: true + }, + recharge: { + src: 23, + pct: true + } + }; + lodash.forEach(attrKey, (cfg, key) => { + if (!lodash.isObject(cfg)) { + cfg = {src: cfg}; + } + let val = data[cfg.src] || 0; + if (cfg.pct) { + val = val * 100 + } + ret[key] = val; + }); + ret.atk = data['4'] * (1 + data['6']) + data['5']; + let maxDmg = 0; + // 火40 水42 风44 岩45 冰46 雷46 + // 41 雷 + lodash.forEach("40,41,42,43,44,45,45,46".split(","), (key) => { + maxDmg = Math.max(data[key] * 1, maxDmg); + }); + // phy 30 + ret.dmgBonus = maxDmg * 100; + ret.phyBonus = data['30'] * 100; + + return ret; + }, + + getArtifact(data) { + let ret = {}; + + let get = function (d) { + if (!d) { + return []; + } + let id = d.appendPropId || d.mainPropId || ""; + id = id.replace("FIGHT_PROP_", ""); + if (!attrMap[id]) { + return []; + } + return [attrMap[id], d.statValue]; + + } + lodash.forEach(data, (ds) => { + let flat = ds.flat || {}, sub = flat.reliquarySubstats || []; + let idx = artiIdx[flat.equipType]; + if (!idx) { + return; + } + + let setName = meta[flat.setNameTextMapHash] || ""; + let setCfg = relisMap[setName] || {name: "", sets: {}}, + artiCfg = setCfg.sets[`arti${idx}`] || {name: ""}; + + ret[`arti${idx}`] = { + name: artiCfg.name, + set: setCfg.name, + level: Math.min(20, ((ds.reliquary && ds.reliquary.level) || 1) - 1), + main: get(flat.reliquaryMainstat), + attrs: [ + get(sub[0]), + get(sub[1]), + get(sub[2]), + get(sub[3]) + ] + } + }) + return ret; + }, + getWeapon(data) { + let ds = {} + lodash.forEach(data, (temp) => { + if (temp.flat && temp.flat.itemType === "ITEM_WEAPON") { + ds = temp; + return false; + } + }) + let {weapon, flat} = ds; + return { + name: meta[flat.nameTextMapHash], + star: flat.rankLevel, + leve: weapon.level, + promote: weapon.promoteLevel, + affix: lodash.values(weapon.affixMap)[0] + } + }, + getTalent(charid, ds = {}, ext = {}) { + let cm = cmeta[charid] || {}; + let cn = cm.Skills || {}, ce = cm.ProudMap; + let idx = 1; + let idxMap = {1: 'a', 2: 'e', 3: 'q', 'a': 'a', 's': 'e', 'e': 'q'}; + lodash.forEach(cn, (n, id) => { + let nRet = /skill_(\w)/.exec(n.toLowerCase()); + idxMap[id] = nRet && nRet[1] ? idxMap[nRet[1]] : idxMap[idx]; + idx++; + }); + lodash.forEach(ce, (n, id) => { + idxMap[n] = idxMap[id]; + }) + let ret = {}; + lodash.forEach(ds, (lv, id) => { + let key = idxMap[id]; + ret[key] = { + level_original: lv, + level_current: lv + } + }) + lodash.forEach(ext, (lv, id) => { + let key = idxMap[id]; + if (ret[key]) { + ret[key].level_current = ret[key].level_current + lv; + } + }) + + return ret; + }, + dataFix(ret) { + + let {attr, id} = ret; + id = id * 1; + switch (id) { + case 10000052: + // 雷神被动加成fix + attr.dmgBonus = Math.min(0, attr.dmgBonus - (attr.recharge - 100) * 0.4) + break; + case 10000041: + // 莫娜被动fix + attr.dmgBonus = Math.min(0, attr.dmgBonus - attr.recharge * 0.2) + break; + } + return ret; + } +}; + +export default Data; \ No newline at end of file diff --git a/components/data/enka_char.js b/components/data/enka_char.js new file mode 100644 index 00000000..0a5b4e09 --- /dev/null +++ b/components/data/enka_char.js @@ -0,0 +1,1098 @@ +export default { + "10000002": { + Element: "Ice", + Consts: ["UI_Talent_S_Ayaka_01", "UI_Talent_S_Ayaka_02", "UI_Talent_U_Ayaka_02", "UI_Talent_S_Ayaka_03", "UI_Talent_U_Ayaka_01", "UI_Talent_S_Ayaka_04"], + SkillOrder: [10024, 10018, 10019], + Skills: { + "10018": "Skill_S_Ayaka_01", + "10019": "Skill_E_Ayaka", + "10024": "Skill_A_01" + }, + ProudMap: { + "10018": 232, + "10019": 239, + "10024": 231 + }, + NameTextMapHash: 1006042610, + SideIconName: "UI_AvatarIcon_Side_Ayaka", + QualityType: "QUALITY_ORANGE" + }, + "10000003": { + Element: "Wind", + Consts: ["UI_Talent_S_Qin_01", "UI_Talent_S_Qin_02", "UI_Talent_U_Qin_02", "UI_Talent_S_Qin_03", "UI_Talent_U_Qin_01", "UI_Talent_S_Qin_04"], + SkillOrder: [10031, 10033, 10034], + Skills: { + "10031": "Skill_A_01", + "10033": "Skill_S_Qin_02", + "10034": "Skill_E_Qin_01" + }, + ProudMap: { + "10031": 331, + "10033": 332, + "10034": 339 + }, + NameTextMapHash: 3221566250, + SideIconName: "UI_AvatarIcon_Side_Qin", + QualityType: "QUALITY_ORANGE", + Costumes: { + "200301": { + sideIconName: "UI_AvatarIcon_Side_QinCostumeSea", + icon: "UI_AvatarIcon_QinCostumeSea", + art: "UI_Costume_QinCostumeSea", + avatarId: 10000003 + }, + "200302": { + sideIconName: "UI_AvatarIcon_Side_QinCostumeWic", + icon: "UI_AvatarIcon_QinCostumeWic", + art: "UI_Costume_QinCostumeWic", + avatarId: 10000003 + } + } + }, + "10000005": { + Element: "Wind", + Consts: ["UI_Talent_S_PlayerWind_01", "UI_Talent_S_PlayerWind_02", "UI_Talent_U_PlayerWind_02", "UI_Talent_S_PlayerWind_03", "UI_Talent_U_PlayerWind_01", "UI_Talent_S_PlayerWind_04"], + SkillOrder: [100543, 10067, 10068], + Skills: { + "10067": "Skill_S_PlayerWind_01", + "10068": "Skill_E_PlayerWind_01", + "100543": "Skill_A_01" + }, + NameTextMapHash: 1533656818, + ProudMap: { + "10067": 732, + "10068": 739, + "100543": 730 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerBoy", + QualityType: "QUALITY_ORANGE" + }, + "10000006": { + Element: "Electric", + Consts: ["UI_Talent_S_Lisa_01", "UI_Talent_S_Lisa_02", "UI_Talent_U_Lisa_02", "UI_Talent_S_Lisa_03", "UI_Talent_U_Lisa_01", "UI_Talent_S_Lisa_04"], + SkillOrder: [10060, 10061, 10062], + Skills: { + "10060": "Skill_A_Catalyst_MD", + "10061": "Skill_S_Lisa_01", + "10062": "Skill_E_Lisa_01" + }, + ProudMap: { + "10060": 431, + "10061": 432, + "10062": 439 + }, + NameTextMapHash: 3344622722, + SideIconName: "UI_AvatarIcon_Side_Lisa", + QualityType: "QUALITY_PURPLE" + }, + "10000007": { + Element: "Wind", + Consts: ["UI_Talent_S_PlayerWind_01", "UI_Talent_S_PlayerWind_02", "UI_Talent_U_PlayerWind_02", "UI_Talent_S_PlayerWind_03", "UI_Talent_U_PlayerWind_01", "UI_Talent_S_PlayerWind_04"], + SkillOrder: [100553, 10067, 10068], + Skills: { + "10067": "Skill_S_PlayerWind_01", + "10068": "Skill_E_PlayerWind_01", + "100553": "Skill_A_01" + }, + NameTextMapHash: 3816664530, + ProudMap: { + "10067": 732, + "10068": 739, + "100553": 731 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerGirl", + QualityType: "QUALITY_ORANGE" + }, + "10000014": { + Element: "Water", + Consts: ["UI_Talent_S_Barbara_01", "UI_Talent_S_Barbara_02", "UI_Talent_U_Barbara_02", "UI_Talent_S_Barbara_03", "UI_Talent_U_Barbara_01", "UI_Talent_S_Barbara_04"], + SkillOrder: [10070, 10071, 10072], + Skills: { + "10070": "Skill_A_Catalyst_MD", + "10071": "Skill_S_Barbara_01", + "10072": "Skill_E_Barbara_01" + }, + ProudMap: { + "10070": 1431, + "10071": 1432, + "10072": 1439 + }, + NameTextMapHash: 3775299170, + SideIconName: "UI_AvatarIcon_Side_Barbara", + QualityType: "QUALITY_PURPLE", + Costumes: { + "201401": { + sideIconName: "UI_AvatarIcon_Side_BarbaraCostumeSummertime", + icon: "UI_AvatarIcon_BarbaraCostumeSummertime", + art: "UI_Costume_BarbaraCostumeSummertime", + avatarId: 10000014 + } + } + }, + "10000015": { + Element: "Ice", + Consts: ["UI_Talent_S_Kaeya_01", "UI_Talent_S_Kaeya_02", "UI_Talent_U_Kaeya_01", "UI_Talent_S_Kaeya_03", "UI_Talent_U_Kaeya_02", "UI_Talent_S_Kaeya_04"], + SkillOrder: [10073, 10074, 10075], + Skills: { + "10073": "Skill_A_01", + "10074": "Skill_S_Kaeya_01", + "10075": "Skill_E_Kaeya_01" + }, + ProudMap: { + "10073": 1531, + "10074": 1532, + "10075": 1539 + }, + NameTextMapHash: 4119663210, + SideIconName: "UI_AvatarIcon_Side_Kaeya", + QualityType: "QUALITY_PURPLE" + }, + "10000016": { + Element: "Fire", + Consts: ["UI_Talent_S_Diluc_01", "UI_Talent_S_Diluc_02", "UI_Talent_U_Diluc_01", "UI_Talent_S_Diluc_03", "UI_Talent_U_Diluc_02", "UI_Talent_S_Diluc_04"], + SkillOrder: [10160, 10161, 10165], + Skills: { + "10160": "Skill_A_04", + "10161": "Skill_S_Diluc_01_01", + "10165": "Skill_E_Diluc_01" + }, + ProudMap: { + "10160": 1631, + "10161": 1632, + "10165": 1639 + }, + NameTextMapHash: 3608180322, + SideIconName: "UI_AvatarIcon_Side_Diluc", + QualityType: "QUALITY_ORANGE" + }, + "10000020": { + Element: "Electric", + Consts: ["UI_Talent_S_Razor_01", "UI_Talent_S_Razor_02", "UI_Talent_U_Razor_02", "UI_Talent_S_Razor_03", "UI_Talent_U_Razor_01", "UI_Talent_S_Razor_04"], + SkillOrder: [10201, 10202, 10203], + Skills: { + "10201": "Skill_A_04", + "10202": "Skill_S_Razor_01", + "10203": "Skill_E_Razor_01" + }, + ProudMap: { + "10201": 2031, + "10202": 2032, + "10203": 2039 + }, + NameTextMapHash: 4160147242, + SideIconName: "UI_AvatarIcon_Side_Razor", + QualityType: "QUALITY_PURPLE" + }, + "10000021": { + Element: "Fire", + Consts: ["UI_Talent_S_Ambor_01", "UI_Talent_S_Ambor_02", "UI_Talent_U_Ambor_02", "UI_Talent_S_Ambor_03", "UI_Talent_U_Ambor_01", "UI_Talent_S_Ambor_04"], + SkillOrder: [10041, 10032, 10017], + Skills: { + "10017": "Skill_E_Ambor", + "10032": "Skill_S_Ambor_01", + "10041": "Skill_A_02" + }, + ProudMap: { + "10017": 2139, + "10032": 2132, + "10041": 2131 + }, + NameTextMapHash: 1966438658, + SideIconName: "UI_AvatarIcon_Side_Ambor", + QualityType: "QUALITY_PURPLE", + Costumes: { + "202101": { + sideIconName: "UI_AvatarIcon_Side_AmborCostumeWic", + icon: "UI_AvatarIcon_AmborCostumeWic", + art: "UI_Costume_AmborCostumeWic", + avatarId: 10000021 + } + } + }, + "10000022": { + Element: "Wind", + Consts: ["UI_Talent_S_Venti_01", "UI_Talent_S_Venti_02", "UI_Talent_U_Venti_02", "UI_Talent_S_Venti_03", "UI_Talent_U_Venti_01", "UI_Talent_S_Venti_04"], + SkillOrder: [10221, 10224, 10225], + Skills: { + "10221": "Skill_A_02", + "10224": "Skill_S_Venti_01", + "10225": "Skill_E_Venti_01" + }, + ProudMap: { + "10221": 2231, + "10224": 2232, + "10225": 2239 + }, + NameTextMapHash: 2466140362, + SideIconName: "UI_AvatarIcon_Side_Venti", + QualityType: "QUALITY_ORANGE" + }, + "10000023": { + Element: "Fire", + Consts: ["UI_Talent_S_Xiangling_01", "UI_Talent_S_Xiangling_02", "UI_Talent_U_Xiangling_02", "UI_Talent_S_Xiangling_03", "UI_Talent_U_Xiangling_01", "UI_Talent_S_Xiangling_04"], + SkillOrder: [10231, 10232, 10235], + Skills: { + "10231": "Skill_A_03", + "10232": "Skill_S_Xiangling_01", + "10235": "Skill_E_Xiangling_01" + }, + ProudMap: { + "10231": 2331, + "10232": 2332, + "10235": 2339 + }, + NameTextMapHash: 1130996346, + SideIconName: "UI_AvatarIcon_Side_Xiangling", + QualityType: "QUALITY_PURPLE" + }, + "10000024": { + Element: "Electric", + Consts: ["UI_Talent_S_Beidou_02", "UI_Talent_S_Beidou_01", "UI_Talent_U_Beidou_01", "UI_Talent_S_Beidou_03", "UI_Talent_U_Beidou_02", "UI_Talent_S_Beidou_04"], + SkillOrder: [10241, 10242, 10245], + Skills: { + "10241": "Skill_A_04", + "10242": "Skill_S_Beidou_01", + "10245": "Skill_E_Beidou_01" + }, + ProudMap: { + "10241": 2431, + "10242": 2432, + "10245": 2439 + }, + NameTextMapHash: 2646367730, + SideIconName: "UI_AvatarIcon_Side_Beidou", + QualityType: "QUALITY_PURPLE" + }, + "10000025": { + Element: "Water", + Consts: ["UI_Talent_S_Xingqiu_01", "UI_Talent_S_Xingqiu_02", "UI_Talent_U_Xingqiu_01", "UI_Talent_S_Xingqiu_03", "UI_Talent_U_Xingqiu_02", "UI_Talent_S_Xingqiu_04"], + SkillOrder: [10381, 10382, 10385], + Skills: { + "10381": "Skill_A_01", + "10382": "Skill_S_Xingqiu_01", + "10385": "Skill_E_Xingqiu_01" + }, + ProudMap: { + "10381": 2531, + "10382": 2532, + "10385": 2539 + }, + NameTextMapHash: 4197635682, + SideIconName: "UI_AvatarIcon_Side_Xingqiu", + QualityType: "QUALITY_PURPLE" + }, + "10000026": { + Element: "Wind", + Consts: ["UI_Talent_S_Xiao_01", "UI_Talent_S_Xiao_02", "UI_Talent_U_Xiao_01", "UI_Talent_S_Xiao_03", "UI_Talent_U_Xiao_02", "UI_Talent_S_Xiao_04"], + SkillOrder: [10261, 10262, 10265], + Skills: { + "10261": "Skill_A_03", + "10262": "Skill_S_Xiao_01", + "10265": "Skill_E_Xiao_01" + }, + ProudMap: { + "10261": 2631, + "10262": 2632, + "10265": 2639 + }, + NameTextMapHash: 1021947690, + SideIconName: "UI_AvatarIcon_Side_Xiao", + QualityType: "QUALITY_ORANGE" + }, + "10000027": { + Element: "Rock", + Consts: ["UI_Talent_S_Ningguang_01", "UI_Talent_S_Ningguang_05", "UI_Talent_U_Ningguang_02", "UI_Talent_S_Ningguang_03", "UI_Talent_U_Ningguang_01", "UI_Talent_S_Ningguang_04"], + SkillOrder: [10271, 10272, 10274], + Skills: { + "10271": "Skill_A_Catalyst_MD", + "10272": "Skill_S_Ningguang_01", + "10274": "Skill_E_Ningguang_01" + }, + ProudMap: { + "10271": 2731, + "10272": 2732, + "10274": 2739 + }, + NameTextMapHash: 4127888970, + SideIconName: "UI_AvatarIcon_Side_Ningguang", + QualityType: "QUALITY_PURPLE", + Costumes: { + "202701": { + sideIconName: "UI_AvatarIcon_Side_NingguangCostumeFloral", + icon: "UI_AvatarIcon_NingguangCostumeFloral", + art: "UI_Costume_NingguangCostumeFloral", + avatarId: 10000027 + } + } + }, + "10000029": { + Element: "Fire", + Consts: ["UI_Talent_S_Klee_01", "UI_Talent_S_Klee_02", "UI_Talent_U_Klee_01", "UI_Talent_S_Klee_03", "UI_Talent_U_Klee_02", "UI_Talent_S_Klee_04"], + SkillOrder: [10291, 10292, 10295], + Skills: { + "10291": "Skill_A_Catalyst_MD", + "10292": "Skill_S_Klee_01", + "10295": "Skill_E_Klee_01" + }, + ProudMap: { + "10291": 2931, + "10292": 2932, + "10295": 2939 + }, + NameTextMapHash: 3339083250, + SideIconName: "UI_AvatarIcon_Side_Klee", + QualityType: "QUALITY_ORANGE" + }, + "10000030": { + Element: "Rock", + Consts: ["UI_Talent_S_Zhongli_01", "UI_Talent_S_Zhongli_02", "UI_Talent_U_Zhongli_01", "UI_Talent_S_Zhongli_03", "UI_Talent_U_Zhongli_02", "UI_Talent_S_Zhongli_04"], + SkillOrder: [10301, 10302, 10303], + Skills: { + "10301": "Skill_A_03", + "10302": "Skill_S_Zhongli_01", + "10303": "Skill_E_Zhongli_01" + }, + ProudMap: { + "10301": 3031, + "10302": 3032, + "10303": 3039 + }, + NameTextMapHash: 3862787418, + SideIconName: "UI_AvatarIcon_Side_Zhongli", + QualityType: "QUALITY_ORANGE" + }, + "10000031": { + Element: "Electric", + Consts: ["UI_Talent_S_Fischl_01", "UI_Talent_S_Fischl_02", "UI_Talent_U_Fischl_01", "UI_Talent_S_Fischl_03", "UI_Talent_U_Fischl_02", "UI_Talent_S_Fischl_04"], + SkillOrder: [10311, 10312, 10313], + Skills: { + "10311": "Skill_A_02", + "10312": "Skill_S_Fischl_01", + "10313": "Skill_E_Fischl_01" + }, + ProudMap: { + "10311": 3131, + "10312": 3132, + "10313": 3139 + }, + NameTextMapHash: 3277782506, + SideIconName: "UI_AvatarIcon_Side_Fischl", + QualityType: "QUALITY_PURPLE" + }, + "10000032": { + Element: "Fire", + Consts: ["UI_Talent_S_Bennett_01", "UI_Talent_S_Bennett_02", "UI_Talent_U_Bennett_01", "UI_Talent_S_Bennett_03", "UI_Talent_U_Bennett_02", "UI_Talent_S_Bennett_04"], + SkillOrder: [10321, 10322, 10323], + Skills: { + "10321": "Skill_A_01", + "10322": "Skill_S_Bennett_01", + "10323": "Skill_E_Bennett_01" + }, + ProudMap: { + "10321": 3231, + "10322": 3232, + "10323": 3239 + }, + NameTextMapHash: 968893378, + SideIconName: "UI_AvatarIcon_Side_Bennett", + QualityType: "QUALITY_PURPLE" + }, + "10000033": { + Element: "Water", + Consts: ["UI_Talent_S_Tartaglia_01", "UI_Talent_S_Tartaglia_02", "UI_Talent_U_Tartaglia_01", "UI_Talent_S_Tartaglia_05", "UI_Talent_U_Tartaglia_02", "UI_Talent_S_Tartaglia_04"], + SkillOrder: [10331, 10332, 10333], + Skills: { + "10331": "Skill_A_02", + "10332": "Skill_S_Tartaglia_01", + "10333": "Skill_E_Tartaglia_01" + }, + ProudMap: { + "10331": 3331, + "10332": 3332, + "10333": 3339 + }, + NameTextMapHash: 3847143266, + SideIconName: "UI_AvatarIcon_Side_Tartaglia", + QualityType: "QUALITY_ORANGE" + }, + "10000034": { + Element: "Rock", + Consts: ["UI_Talent_S_Noel_01", "UI_Talent_S_Noel_02", "UI_Talent_U_Noel_01", "UI_Talent_S_Noel_03", "UI_Talent_U_Noel_02", "UI_Talent_S_Noel_04"], + SkillOrder: [10341, 10342, 10343], + Skills: { + "10341": "Skill_A_04", + "10342": "Skill_S_Noel_01", + "10343": "Skill_E_Noel_01" + }, + ProudMap: { + "10341": 3431, + "10342": 3432, + "10343": 3439 + }, + NameTextMapHash: 1921418842, + SideIconName: "UI_AvatarIcon_Side_Noel", + QualityType: "QUALITY_PURPLE" + }, + "10000035": { + Element: "Ice", + Consts: ["UI_Talent_S_Qiqi_01", "UI_Talent_S_Qiqi_02", "UI_Talent_U_Qiqi_01", "UI_Talent_S_Qiqi_03", "UI_Talent_U_Qiqi_02", "UI_Talent_S_Qiqi_04"], + SkillOrder: [10351, 10352, 10353], + Skills: { + "10351": "Skill_A_01", + "10352": "Skill_S_Qiqi_01", + "10353": "Skill_E_Qiqi_01" + }, + ProudMap: { + "10351": 3531, + "10352": 3532, + "10353": 3539 + }, + NameTextMapHash: 168956722, + SideIconName: "UI_AvatarIcon_Side_Qiqi", + QualityType: "QUALITY_ORANGE" + }, + "10000036": { + Element: "Ice", + Consts: ["UI_Talent_S_Chongyun_01", "UI_Talent_S_Chongyun_02", "UI_Talent_U_Chongyun_01", "UI_Talent_S_Chongyun_03", "UI_Talent_U_Chongyun_02", "UI_Talent_S_Chongyun_04"], + SkillOrder: [10401, 10402, 10403], + Skills: { + "10401": "Skill_A_04", + "10402": "Skill_S_Chongyun_01", + "10403": "Skill_E_Chongyun_01" + }, + ProudMap: { + "10401": 3631, + "10402": 3632, + "10403": 3639 + }, + NameTextMapHash: 2876340530, + SideIconName: "UI_AvatarIcon_Side_Chongyun", + QualityType: "QUALITY_PURPLE" + }, + "10000037": { + Element: "Ice", + Consts: ["UI_Talent_S_Ganyu_01", "UI_Talent_S_Ganyu_02", "UI_Talent_U_Ganyu_01", "UI_Talent_S_Ganyu_03", "UI_Talent_U_Ganyu_02", "UI_Talent_S_Ganyu_04"], + SkillOrder: [10371, 10372, 10373], + Skills: { + "10371": "Skill_A_02", + "10372": "Skill_S_Ganyu_01", + "10373": "Skill_E_Ganyu_01" + }, + ProudMap: { + "10371": 3731, + "10372": 3732, + "10373": 3739 + }, + NameTextMapHash: 2679781122, + SideIconName: "UI_AvatarIcon_Side_Ganyu", + QualityType: "QUALITY_ORANGE" + }, + "10000038": { + Element: "Rock", + Consts: ["UI_Talent_S_Albedo_01", "UI_Talent_S_Albedo_02", "UI_Talent_U_Albedo_01", "UI_Talent_S_Albedo_03", "UI_Talent_U_Albedo_02", "UI_Talent_S_Albedo_04"], + SkillOrder: [10386, 10387, 10388], + Skills: { + "10386": "Skill_A_01", + "10387": "Skill_S_Albedo_01", + "10388": "Skill_E_Albedo_01" + }, + ProudMap: { + "10386": 3831, + "10387": 3832, + "10388": 3839 + }, + NameTextMapHash: 4108620722, + SideIconName: "UI_AvatarIcon_Side_Albedo", + QualityType: "QUALITY_ORANGE" + }, + "10000039": { + Element: "Ice", + Consts: ["UI_Talent_S_Diona_01", "UI_Talent_S_Diona_02", "UI_Talent_U_Diona_01", "UI_Talent_S_Diona_03", "UI_Talent_U_Diona_02", "UI_Talent_S_Diona_04"], + SkillOrder: [10391, 10392, 10395], + Skills: { + "10391": "Skill_A_02", + "10392": "Skill_S_Diona_01", + "10395": "Skill_E_Diona_01" + }, + ProudMap: { + "10391": 3931, + "10392": 3932, + "10395": 3939 + }, + NameTextMapHash: 1468367538, + SideIconName: "UI_AvatarIcon_Side_Diona", + QualityType: "QUALITY_PURPLE" + }, + "10000041": { + Element: "Water", + Consts: ["UI_Talent_S_Mona_01", "UI_Talent_S_Mona_02", "UI_Talent_U_Mona_01", "UI_Talent_S_Mona_03", "UI_Talent_U_Mona_02", "UI_Talent_S_Mona_04"], + SkillOrder: [10411, 10412, 10415], + Skills: { + "10411": "Skill_A_Catalyst_MD", + "10412": "Skill_S_Mona_01", + "10415": "Skill_E_Mona_01" + }, + ProudMap: { + "10411": 4131, + "10412": 4132, + "10415": 4139 + }, + NameTextMapHash: 1113306282, + SideIconName: "UI_AvatarIcon_Side_Mona", + QualityType: "QUALITY_ORANGE", + Costumes: { + "204101": { + sideIconName: "UI_AvatarIcon_Side_MonaCostumeWic", + icon: "UI_AvatarIcon_MonaCostumeWic", + art: "UI_Costume_MonaCostumeWic", + avatarId: 10000041 + } + } + }, + "10000042": { + Element: "Electric", + Consts: ["UI_Talent_S_Keqing_01", "UI_Talent_S_Keqing_02", "UI_Talent_U_Keqing_01", "UI_Talent_S_Keqing_03", "UI_Talent_U_Keqing_02", "UI_Talent_S_Keqing_04"], + SkillOrder: [10421, 10422, 10425], + Skills: { + "10421": "Skill_A_01", + "10422": "Skill_S_Keqing_01", + "10425": "Skill_E_Keqing_01" + }, + ProudMap: { + "10421": 4231, + "10422": 4232, + "10425": 4239 + }, + NameTextMapHash: 1864015138, + SideIconName: "UI_AvatarIcon_Side_Keqing", + QualityType: "QUALITY_ORANGE", + Costumes: { + "204201": { + sideIconName: "UI_AvatarIcon_Side_KeqingCostumeFeather", + icon: "UI_AvatarIcon_KeqingCostumeFeather", + art: "UI_Costume_KeqingCostumeFeather", + avatarId: 10000042 + } + } + }, + "10000043": { + Element: "Wind", + Consts: ["UI_Talent_S_Sucrose_01", "UI_Talent_S_Sucrose_02", "UI_Talent_U_Sucrose_01", "UI_Talent_S_Sucrose_03", "UI_Talent_U_Sucrose_02", "UI_Talent_S_Sucrose_04"], + SkillOrder: [10431, 10432, 10435], + Skills: { + "10431": "Skill_A_Catalyst_MD", + "10432": "Skill_S_Sucrose_01", + "10435": "Skill_E_Sucrose_01" + }, + ProudMap: { + "10431": 4331, + "10432": 4332, + "10435": 4339 + }, + NameTextMapHash: 1053433018, + SideIconName: "UI_AvatarIcon_Side_Sucrose", + QualityType: "QUALITY_PURPLE" + }, + "10000044": { + Element: "Fire", + Consts: ["UI_Talent_S_Xinyan_01", "UI_Talent_S_Xinyan_02", "UI_Talent_U_Xinyan_01", "UI_Talent_S_Xinyan_03", "UI_Talent_U_Xinyan_02", "UI_Talent_S_Xinyan_04"], + SkillOrder: [10441, 10442, 10443], + Skills: { + "10441": "Skill_A_04", + "10442": "Skill_S_Xinyan_01", + "10443": "Skill_E_Xinyan_01" + }, + ProudMap: { + "10441": 4431, + "10442": 4432, + "10443": 4439 + }, + NameTextMapHash: 4273845410, + SideIconName: "UI_AvatarIcon_Side_Xinyan", + QualityType: "QUALITY_PURPLE" + }, + "10000045": { + Element: "Ice", + Consts: ["UI_Talent_S_Rosaria_01", "UI_Talent_S_Rosaria_02", "UI_Talent_U_Rosaria_01", "UI_Talent_S_Rosaria_03", "UI_Talent_U_Rosaria_02", "UI_Talent_S_Rosaria_04"], + SkillOrder: [10451, 10452, 10453], + Skills: { + "10451": "Skill_A_03", + "10452": "Skill_S_Rosaria_01", + "10453": "Skill_E_Rosaria_01" + }, + ProudMap: { + "10451": 4531, + "10452": 4532, + "10453": 4539 + }, + NameTextMapHash: 4260733330, + SideIconName: "UI_AvatarIcon_Side_Rosaria", + QualityType: "QUALITY_PURPLE", + Costumes: { + "204501": { + sideIconName: "UI_AvatarIcon_Side_RosariaCostumeWic", + icon: "UI_AvatarIcon_RosariaCostumeWic", + art: "UI_Costume_RosariaCostumeWic", + avatarId: 10000045 + } + } + }, + "10000046": { + Element: "Fire", + Consts: ["UI_Talent_S_Hutao_03", "UI_Talent_S_Hutao_01", "UI_Talent_U_Hutao_01", "UI_Talent_S_Hutao_02", "UI_Talent_U_Hutao_02", "UI_Talent_S_Hutao_04"], + SkillOrder: [10461, 10462, 10463], + Skills: { + "10461": "Skill_A_03", + "10462": "Skill_S_Hutao_01", + "10463": "Skill_E_Hutao_01" + }, + ProudMap: { + "10461": 4631, + "10462": 4632, + "10463": 4639 + }, + NameTextMapHash: 1940919994, + SideIconName: "UI_AvatarIcon_Side_Hutao", + QualityType: "QUALITY_ORANGE" + }, + "10000047": { + Element: "Wind", + Consts: ["UI_Talent_S_Kazuha_01", "UI_Talent_S_Kazuha_02", "UI_Talent_U_Kazuha_01", "UI_Talent_S_Kazuha_03", "UI_Talent_U_Kazuha_02", "UI_Talent_S_Kazuha_04"], + SkillOrder: [10471, 10472, 10475], + Skills: { + "10471": "Skill_A_01", + "10472": "Skill_S_Kazuha_01", + "10475": "Skill_E_Kazuha_01" + }, + ProudMap: { + "10471": 4731, + "10472": 4732, + "10475": 4739 + }, + NameTextMapHash: 88505754, + SideIconName: "UI_AvatarIcon_Side_Kazuha", + QualityType: "QUALITY_ORANGE" + }, + "10000048": { + Element: "Fire", + Consts: ["UI_Talent_S_Feiyan_01", "UI_Talent_S_Feiyan_02", "UI_Talent_U_Feiyan_01", "UI_Talent_S_Feiyan_03", "UI_Talent_U_Feiyan_02", "UI_Talent_S_Feiyan_04"], + SkillOrder: [10481, 10482, 10485], + Skills: { + "10481": "Skill_A_Catalyst_MD", + "10482": "Skill_S_Feiyan_01", + "10485": "Skill_E_Feiyan_01" + }, + ProudMap: { + "10481": 4831, + "10482": 4832, + "10485": 4839 + }, + NameTextMapHash: 697277554, + SideIconName: "UI_AvatarIcon_Side_Feiyan", + QualityType: "QUALITY_PURPLE" + }, + "10000049": { + Element: "Fire", + Consts: ["UI_Talent_S_Yoimiya_01", "UI_Talent_S_Yoimiya_02", "UI_Talent_U_Yoimiya_01", "UI_Talent_S_Yoimiya_03", "UI_Talent_U_Yoimiya_02", "UI_Talent_S_Yoimiya_04"], + SkillOrder: [10491, 10492, 10495], + Skills: { + "10491": "Skill_A_02", + "10492": "Skill_S_Yoimiya_01", + "10495": "Skill_E_Yoimiya_01" + }, + ProudMap: { + "10491": 4931, + "10492": 4932, + "10495": 4939 + }, + NameTextMapHash: 2504399314, + SideIconName: "UI_AvatarIcon_Side_Yoimiya", + QualityType: "QUALITY_ORANGE" + }, + "10000050": { + Element: "Fire", + Consts: ["UI_Talent_S_Tohma_01", "UI_Talent_S_Tohma_02", "UI_Talent_U_Tohma_01", "UI_Talent_S_Tohma_03", "UI_Talent_U_Tohma_02", "UI_Talent_S_Tohma_04"], + SkillOrder: [10501, 10502, 10505], + Skills: { + "10501": "Skill_A_03", + "10502": "Skill_S_Tohma_01", + "10505": "Skill_E_Tohma_01" + }, + ProudMap: { + "10501": 5031, + "10502": 5032, + "10505": 5039 + }, + NameTextMapHash: 3555115602, + SideIconName: "UI_AvatarIcon_Side_Tohma", + QualityType: "QUALITY_PURPLE" + }, + "10000051": { + Element: "Ice", + Consts: ["UI_Talent_S_Eula_02", "UI_Talent_S_Eula_01", "UI_Talent_U_Eula_01", "UI_Talent_S_Eula_03", "UI_Talent_U_Eula_02", "UI_Talent_S_Eula_04"], + SkillOrder: [10511, 10512, 10515], + Skills: { + "10511": "Skill_A_04", + "10512": "Skill_S_Eula_01", + "10515": "Skill_E_Eula_01" + }, + ProudMap: { + "10511": 5131, + "10512": 5132, + "10515": 5139 + }, + NameTextMapHash: 3717667418, + SideIconName: "UI_AvatarIcon_Side_Eula", + QualityType: "QUALITY_ORANGE" + }, + "10000052": { + Element: "Electric", + Consts: ["UI_Talent_S_Shougun_01", "UI_Talent_S_Shougun_03", "UI_Talent_U_Shougun_02", "UI_Talent_S_Shougun_02", "UI_Talent_U_Shougun_01", "UI_Talent_S_Shougun_04"], + SkillOrder: [10521, 10522, 10525], + Skills: { + "10521": "Skill_A_03", + "10522": "Skill_S_Shougun_01", + "10525": "Skill_E_Shougun_01" + }, + ProudMap: { + "10521": 5231, + "10522": 5232, + "10525": 5239 + }, + NameTextMapHash: 3024507506, + SideIconName: "UI_AvatarIcon_Side_Shougun", + QualityType: "QUALITY_ORANGE" + }, + "10000053": { + Element: "Wind", + Consts: ["UI_Talent_S_Sayu_01", "UI_Talent_S_Sayu_02", "UI_Talent_U_Sayu_02", "UI_Talent_S_Sayu_03", "UI_Talent_U_Sayu_01", "UI_Talent_S_Sayu_04"], + SkillOrder: [10531, 10532, 10535], + Skills: { + "10531": "Skill_A_04", + "10532": "Skill_S_Sayu_01", + "10535": "Skill_E_Sayu_01" + }, + ProudMap: { + "10531": 5331, + "10532": 5332, + "10535": 5339 + }, + NameTextMapHash: 2388785242, + SideIconName: "UI_AvatarIcon_Side_Sayu", + QualityType: "QUALITY_PURPLE" + }, + "10000054": { + Element: "Water", + Consts: ["UI_Talent_S_Kokomi_01", "UI_Talent_S_Kokomi_02", "UI_Talent_U_Kokomi_02", "UI_Talent_S_Kokomi_03", "UI_Talent_U_Kokomi_01", "UI_Talent_S_Kokomi_04"], + SkillOrder: [10541, 10542, 10545], + Skills: { + "10541": "Skill_A_Catalyst_MD", + "10542": "Skill_S_Kokomi_01", + "10545": "Skill_E_Kokomi_01" + }, + ProudMap: { + "10541": 5431, + "10542": 5432, + "10545": 5439 + }, + NameTextMapHash: 3914045794, + SideIconName: "UI_AvatarIcon_Side_Kokomi", + QualityType: "QUALITY_ORANGE" + }, + "10000055": { + Element: "Rock", + Consts: ["UI_Talent_S_Gorou_01", "UI_Talent_S_Gorou_02", "UI_Talent_U_Gorou_01", "UI_Talent_S_Gorou_03", "UI_Talent_U_Gorou_02", "UI_Talent_S_Gorou_04"], + SkillOrder: [10551, 10552, 10555], + Skills: { + "10551": "Skill_A_02", + "10552": "Skill_S_Gorou_01", + "10555": "Skill_E_Gorou_01" + }, + ProudMap: { + "10551": 5531, + "10552": 5532, + "10555": 5539 + }, + NameTextMapHash: 3400133546, + SideIconName: "UI_AvatarIcon_Side_Gorou", + QualityType: "QUALITY_PURPLE" + }, + "10000056": { + Element: "Electric", + Consts: ["UI_Talent_S_Sara_05", "UI_Talent_S_Sara_02", "UI_Talent_U_Sara_02", "UI_Talent_S_Sara_03", "UI_Talent_U_Sara_01", "UI_Talent_S_Sara_04"], + SkillOrder: [10561, 10562, 10565], + Skills: { + "10561": "Skill_A_02", + "10562": "Skill_S_Sara_01", + "10565": "Skill_E_Sara_01" + }, + ProudMap: { + "10561": 5631, + "10562": 5632, + "10565": 5639 + }, + NameTextMapHash: 1483922610, + SideIconName: "UI_AvatarIcon_Side_Sara", + QualityType: "QUALITY_PURPLE" + }, + "10000057": { + Element: "Rock", + Consts: ["UI_Talent_S_Itto_01", "UI_Talent_S_Itto_02", "UI_Talent_U_Itto_01", "UI_Talent_S_Itto_03", "UI_Talent_U_Itto_02", "UI_Talent_S_Itto_04"], + SkillOrder: [10571, 10572, 10575], + Skills: { + "10571": "Skill_A_04", + "10572": "Skill_S_Itto_01", + "10575": "Skill_E_Itto_01" + }, + ProudMap: { + "10571": 5731, + "10572": 5732, + "10575": 5739 + }, + NameTextMapHash: 3068316954, + SideIconName: "UI_AvatarIcon_Side_Itto", + QualityType: "QUALITY_ORANGE" + }, + "10000058": { + Element: "Electric", + Consts: ["UI_Talent_S_Yae_01", "UI_Talent_S_Yae_02", "UI_Talent_U_Yae_01", "UI_Talent_S_Yae_03", "UI_Talent_U_Yae_02", "UI_Talent_S_Yae_04"], + SkillOrder: [10581, 10582, 10585], + Skills: { + "10581": "Skill_A_Catalyst_MD", + "10582": "Skill_S_Yae_01", + "10585": "Skill_E_Yae_01" + }, + ProudMap: { + "10581": 5831, + "10582": 5832, + "10585": 5839 + }, + NameTextMapHash: 2713453234, + SideIconName: "UI_AvatarIcon_Side_Yae", + QualityType: "QUALITY_ORANGE" + }, + "10000060": { + Element: "Water", + Consts: ["UI_Talent_S_Yelan_01", "UI_Talent_S_Yelan_02", "UI_Talent_U_Yelan_01", "UI_Talent_S_Yelan_03", "UI_Talent_U_Yelan_02", "UI_Talent_S_Yelan_04"], + SkillOrder: [10606, 10607, 10610], + Skills: { + "10606": "Skill_A_02", + "10607": "Skill_S_Yelan_01", + "10610": "Skill_E_Yelan_01" + }, + ProudMap: { + "10606": 6031, + "10607": 6032, + "10610": 6039 + }, + NameTextMapHash: 2848374378, + SideIconName: "UI_AvatarIcon_Side_Yelan", + QualityType: "QUALITY_ORANGE" + }, + "10000062": { + Element: "Ice", + Consts: ["UI_Talent_S_Aloy_Lock", "UI_Talent_S_Aloy_Lock", "UI_Talent_S_Aloy_Lock", "UI_Talent_S_Aloy_Lock", "UI_Talent_S_Aloy_Lock", "UI_Talent_S_Aloy_Lock"], + SkillOrder: [10621, 10622, 10625], + Skills: { + "10621": "Skill_A_02", + "10622": "Skill_S_Aloy_01", + "10625": "Skill_E_Aloy_01" + }, + ProudMap: { + "10621": 6231, + "10622": 6232, + "10625": 6239 + }, + NameTextMapHash: 3689108098, + SideIconName: "UI_AvatarIcon_Side_Aloy", + QualityType: "QUALITY_ORANGE_SP" + }, + "10000063": { + Element: "Ice", + Consts: ["UI_Talent_S_Shenhe_02", "UI_Talent_S_Shenhe_01", "UI_Talent_U_Shenhe_01", "UI_Talent_S_Shenhe_03", "UI_Talent_U_Shenhe_02", "UI_Talent_S_Shenhe_04"], + SkillOrder: [10631, 10632, 10635], + Skills: { + "10631": "Skill_A_03", + "10632": "Skill_S_Shenhe_01", + "10635": "Skill_E_Shenhe_01" + }, + ProudMap: { + "10631": 6331, + "10632": 6332, + "10635": 6339 + }, + NameTextMapHash: 334242634, + SideIconName: "UI_AvatarIcon_Side_Shenhe", + QualityType: "QUALITY_ORANGE" + }, + "10000064": { + Element: "Rock", + Consts: ["UI_Talent_S_Yunjin_01", "UI_Talent_S_Yunjin_02", "UI_Talent_U_Yunjin_01", "UI_Talent_S_Yunjin_03", "UI_Talent_U_Yunjin_02", "UI_Talent_S_Yunjin_04"], + SkillOrder: [10641, 10642, 10643], + Skills: { + "10641": "Skill_A_03", + "10642": "Skill_S_Yunjin_01", + "10643": "Skill_E_Yunjin_01" + }, + ProudMap: { + "10641": 6431, + "10642": 6432, + "10643": 6439 + }, + NameTextMapHash: 655825874, + SideIconName: "UI_AvatarIcon_Side_Yunjin", + QualityType: "QUALITY_PURPLE" + }, + "10000065": { + Element: "Electric", + Consts: ["UI_Talent_S_Shinobu_01", "UI_Talent_S_Shinobu_02", "UI_Talent_U_Shinobu_01", "UI_Talent_S_Shinobu_03", "UI_Talent_U_Shinobu_02", "UI_Talent_S_Shinobu_04"], + SkillOrder: [10651, 10652, 10655], + Skills: { + "10651": "Skill_A_01", + "10652": "Skill_S_Shinobu_01", + "10655": "Skill_E_Shinobu_01" + }, + ProudMap: { + "10651": 6531, + "10652": 6532, + "10655": 6539 + }, + NameTextMapHash: 1940821986, + SideIconName: "UI_AvatarIcon_Side_Shinobu", + QualityType: "QUALITY_PURPLE" + }, + "10000066": { + Element: "Water", + Consts: ["UI_Talent_S_Ayato_01", "UI_Talent_S_Ayato_02", "UI_Talent_U_Ayato_02", "UI_Talent_S_Ayato_03", "UI_Talent_U_Ayato_01", "UI_Talent_S_Ayato_04"], + SkillOrder: [10661, 10662, 10665], + Skills: { + "10661": "Skill_A_01", + "10662": "Skill_S_Ayato_01", + "10665": "Skill_E_Ayato_01" + }, + ProudMap: { + "10661": 6631, + "10662": 6632, + "10665": 6639 + }, + NameTextMapHash: 1588620330, + SideIconName: "UI_AvatarIcon_Side_Ayato", + QualityType: "QUALITY_ORANGE" + }, + "10000005-501": {}, + "10000005-502": {}, + "10000005-503": {}, + "10000005-504": { + Element: "Wind", + Consts: ["UI_Talent_S_PlayerWind_01", "UI_Talent_S_PlayerWind_02", "UI_Talent_U_PlayerWind_02", "UI_Talent_S_PlayerWind_03", "UI_Talent_U_PlayerWind_01", "UI_Talent_S_PlayerWind_04"], + SkillOrder: [100543, 10067, 10068], + Skills: { + "10067": "Skill_S_PlayerWind_01", + "10068": "Skill_E_PlayerWind_01", + "100543": "Skill_A_01" + }, + NameTextMapHash: 1533656818, + ProudMap: { + "10067": 732, + "10068": 739, + "100543": 730 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerBoy", + QualityType: "QUALITY_ORANGE" + }, + "10000005-505": {}, + "10000005-506": { + Element: "Rock", + Consts: ["UI_Talent_S_PlayerRock_01", "UI_Talent_S_PlayerRock_02", "UI_Talent_U_PlayerRock_02", "UI_Talent_S_PlayerRock_03", "UI_Talent_U_PlayerRock_01", "UI_Talent_S_PlayerRock_04"], + SkillOrder: [100545, 10077, 10078], + Skills: { + "10077": "Skill_S_PlayerRock_01", + "10078": "Skill_E_PlayerRock_01", + "100545": "Skill_A_01" + }, + NameTextMapHash: 1533656818, + ProudMap: { + "10077": 932, + "10078": 939, + "100545": 730 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerBoy", + QualityType: "QUALITY_ORANGE" + }, + "10000005-507": { + Element: "Electric", + Consts: ["UI_Talent_S_PlayerElectric_01", "UI_Talent_S_PlayerElectric_02", "UI_Talent_U_PlayerElectric_01", "UI_Talent_S_PlayerElectric_03", "UI_Talent_U_PlayerElectric_02", "UI_Talent_S_PlayerElectric_04"], + SkillOrder: [100546, 10602, 10605], + Skills: { + "10602": "Skill_S_PlayerElectric_01", + "10605": "Skill_E_PlayerElectric_01", + "100546": "Skill_A_01" + }, + NameTextMapHash: 1533656818, + ProudMap: { + "10602": 1032, + "10605": 1039, + "100546": 1030 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerBoy", + QualityType: "QUALITY_ORANGE" + }, + "10000007-701": {}, + "10000007-702": {}, + "10000007-703": {}, + "10000007-704": { + Element: "Wind", + Consts: ["UI_Talent_S_PlayerWind_01", "UI_Talent_S_PlayerWind_02", "UI_Talent_U_PlayerWind_02", "UI_Talent_S_PlayerWind_03", "UI_Talent_U_PlayerWind_01", "UI_Talent_S_PlayerWind_04"], + SkillOrder: [100553, 10067, 10068], + Skills: { + "10067": "Skill_S_PlayerWind_01", + "10068": "Skill_E_PlayerWind_01", + "100553": "Skill_A_01" + }, + NameTextMapHash: 3816664530, + ProudMap: { + "10067": 732, + "10068": 739, + "100553": 731 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerGirl", + QualityType: "QUALITY_ORANGE" + }, + "10000007-705": {}, + "10000007-706": { + Element: "Rock", + Consts: ["UI_Talent_S_PlayerRock_01", "UI_Talent_S_PlayerRock_02", "UI_Talent_U_PlayerRock_02", "UI_Talent_S_PlayerRock_03", "UI_Talent_U_PlayerRock_01", "UI_Talent_S_PlayerRock_04"], + SkillOrder: [100555, 10077, 10078], + Skills: { + "10077": "Skill_S_PlayerRock_01", + "10078": "Skill_E_PlayerRock_01", + "100555": "Skill_A_01" + }, + NameTextMapHash: 3816664530, + ProudMap: { + "10077": 932, + "10078": 939, + "100555": 731 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerGirl", + QualityType: "QUALITY_ORANGE" + }, + "10000007-707": { + Element: "Electric", + Consts: ["UI_Talent_S_PlayerElectric_01", "UI_Talent_S_PlayerElectric_02", "UI_Talent_U_PlayerElectric_01", "UI_Talent_S_PlayerElectric_03", "UI_Talent_U_PlayerElectric_02", "UI_Talent_S_PlayerElectric_04"], + SkillOrder: [100556, 10602, 10605], + Skills: { + "10602": "Skill_S_PlayerElectric_01", + "10605": "Skill_E_PlayerElectric_01", + "100556": "Skill_A_01" + }, + NameTextMapHash: 3816664530, + ProudMap: { + "10602": 1032, + "10605": 1039, + "100556": 1031 + }, + SideIconName: "UI_AvatarIcon_Side_PlayerGirl", + QualityType: "QUALITY_ORANGE" + } +}; \ No newline at end of file diff --git a/components/data/enka_meta.js b/components/data/enka_meta.js new file mode 100644 index 00000000..538a871e --- /dev/null +++ b/components/data/enka_meta.js @@ -0,0 +1,387 @@ +export default { + 20848859: "黑岩斩刀", + 33330467: "元素熟练", + 37147251: "匣里日月", + 43015699: "待定", + 54857595: "止水息雷", + 83115355: "被怜爱的少女", + 85795635: "专注", + 88505754: "枫原万叶", + 135182203: "止水息雷", + 147298547: "流浪大地的乐团", + 156294403: "沉沦之心", + 160493219: "暗铁剑", + 168956722: "七七", + 197755235: "贯虹之槊", + 212557731: "祭雷之人", + 240385755: "破浪", + 246984427: "踏火息雷", + 262428003: "祭冰之人", + 270124867: "护国的无垢之心", + 287454963: "祭风之人", + 288666635: "无垢之心", + 302691299: "琥珀玥", + 303155515: "离簇不归", + 310247243: "神乐之真意", + 334242634: "申鹤", + 339931171: "乘胜追击", + 342097547: "辰砂之纺锤", + 346510395: "衔珠海皇", + 368014203: "斩裂晴空的龙脊", + 391273955: "斫断黑翼的利齿", + 411685275: "钢轮弓", + 479076483: "冷刃", + 481755219: "黑岩刺枪", + 486287579: "余热", + 500612819: "「旗杆」", + 500987603: "(test)穿模测试", + 506630267: "顺风而行", + 514784907: "踏火止水", + 521221323: "护国的无垢之心", + 540938627: "掠食者", + 566772267: "御伽大王御伽话", + 577103787: "能量沐浴", + 578575283: "流月针", + 597991835: "白夜皓月", + 613846163: "降世", + 618786571: "钺矛", + 623494555: "摧坚", + 623534363: "西风秘典", + 630452219: "樱之斋宫", + 646100491: "千岩诀·同心", + 650049651: "风花之颂", + 655825874: "云堇", + 656120259: "神射手之誓", + 680510411: "白影剑", + 688991243: "息灾", + 693354267: "尘世之锁", + 697277554: "烟绯", + 716252627: "千岩长枪", + 729851187: "冰之川与雪之砂", + 735056795: "西风大剑", + 807607555: "天空之卷", + 824949859: "嘟嘟!大冒险", + 828711395: "阿莫斯之弓", + 836208539: "炊金", + 850802171: "白铁大剑", + 855894507: "战狂", + 862591315: "苍白之火", + 877751435: "宗室大剑", + 902264035: "风鹰剑", + 902282051: "收割", + 909145139: "护国的无垢之心", + 930640955: "钟剑", + 933076627: "冰风迷途的勇士", + 942758755: "专注", + 944332883: "斫峰之刃", + 949506483: "海洋的胜利", + 968378595: "西风之鹰的抗争", + 968893378: "班尼特", + 991968139: "非时之梦·常世灶食", + 1006042610: "神里绫华", + 1021898539: "弹弓", + 1021947690: "魈", + 1028735635: "抗争的践行之歌", + 1053433018: "砂糖", + 1072884907: "万国诸海图谱", + 1075647299: "松籁响起之时", + 1082448331: "微光的海渊民", + 1089950259: "天空之傲", + 1097898243: "沉重", + 1103732675: "幸运儿", + 1113306282: "莫娜", + 1114777131: "和弦", + 1119368259: "旅程", + 1130996346: "香菱", + 1133599347: "矢志不忘", + 1148024603: "「渔获」", + 1154009435: "试作星镰", + 1163263227: "流浪乐章", + 1163616891: "霜葬", + 1182966603: "佣兵重剑", + 1186209435: "赌徒", + 1212345779: "角斗士的终幕礼", + 1217552947: "白刃流转", + 1240067179: "西风猎弓", + 1319974859: "激励", + 1321135667: "匣里龙吟", + 1337666507: "千岩牢固", + 1344953075: "顺风而行", + 1345343763: "磐岩结绿", + 1383639611: "奇迹", + 1388004931: "飞天御剑", + 1390797107: "白缨枪", + 1404688115: "别离的思念之歌", + 1406746947: "异世界行记", + 1414366819: "金璋皇极", + 1437658243: "螭骨剑", + 1438974835: "逆飞的流星", + 1455107995: "四风原典", + 1468367538: "迪奥娜", + 1479961579: "铁影阔剑", + 1483922610: "九条裟罗", + 1485303435: "注能之刺", + 1492752155: "气定神闲", + 1499235563: "乘胜追击", + 1499817443: "苍翠之风", + 1516554699: "石英大剑", + 1522029867: "踏火息雷", + 1524173875: "炽烈的炎之魔女", + 1533656818: "旅行者", + 1541919827: "染血的骑士道", + 1545992315: "「正义」", + 1558036915: "辰砂往生录", + 1562601179: "翠绿之影", + 1588620330: "神里绫人", + 1595734083: "(test)穿模测试", + 1600275315: "波乱月白经津", + 1608953539: "黎明神剑", + 1610242915: "传承", + 1628928163: "风花之愿", + 1632377563: "渡过烈火的贤人", + 1651985379: "极昼的先兆者", + 1660598451: "岩藏之胤", + 1675686363: "祭礼大剑", + 1706534267: "有话直说", + 1722706579: "止水融冰", + 1745286795: "名士振舞", + 1745712907: "驭浪的海祇民", + 1751039235: "昔日宗室之仪", + 1756609915: "海染砗磲", + 1771603299: "金璋皇极", + 1773425155: "降临之剑", + 1789612403: "回响", + 1820235315: "无矢之歌", + 1836628747: "叛逆的守护者", + 1860795787: "曚云之月", + 1864015138: "刻晴", + 1873342283: "平息鸣雷的尊者", + 1890163363: "不灭月华", + 1901973075: "冬极白星", + 1921418842: "诺艾尔", + 1932742643: "灭却之戒法", + 1934830979: "无尽的渴慕", + 1940821986: "久岐忍", + 1940919994: "胡桃", + 1966438658: "安柏", + 1982136171: "专注", + 1990641987: "祭礼剑", + 1990820123: "天目影打刀", + 1991707099: "试作斩岩", + 1997709467: "和璞鸢", + 2006422931: "千岩古剑", + 2009975571: "(test)穿模测试", + 2017033267: "气定神闲", + 2025598051: "顺风而行", + 2040573235: "悠古的磐岩", + 2060049099: "祭火之人", + 2108574027: "碎石", + 2109571443: "专注", + 2125206395: "银剑", + 2149411851: "金璋皇极", + 2172529947: "乘胜追击", + 2176134843: "专注", + 2190368347: "决", + 2191797987: "冒险家", + 2195665683: "祭礼残章", + 2242027395: "黑檀弓", + 2276480763: "绝缘之旗印", + 2279290283: "魔导绪论", + 2297485451: "速射弓斗", + 2312640651: "气定神闲", + 2317820211: "注能之针", + 2322648115: "粉碎", + 2324146259: "白辰之环", + 2340970067: "历练的猎弓", + 2359799475: "恶王丸", + 2364208851: "行者之心", + 2365025043: "街巷游侠", + 2375993851: "宗室长剑", + 2383998915: "驭浪的海祇民", + 2384519283: "弹弓", + 2388785242: "早柚", + 2400012995: "祭礼弓", + 2410593283: "无锋剑", + 2417717595: "暗巷猎手", + 2425414923: "落霞", + 2433755451: "揭旗的叛逆之歌", + 2440850563: "回响长天的诗歌", + 2466140362: "温迪", + 2469300579: "乘胜追击", + 2470306939: "飞雷御执", + 2474354867: "西风剑", + 2476346187: "踏火止水", + 2491797315: "喜多院十文字", + 2504399314: "宵宫", + 2512309395: "如雷的盛怒", + 2521338131: "试作金珀", + 2534304035: "雾切御腰物", + 2539208459: "证誓之明瞳", + 2546254811: "华馆梦醒形骸记", + 2556914683: "绝弦", + 2587614459: "忍冬之果", + 2614170427: "飞天大御剑", + 2646367730: "北斗", + 2664629131: "匣里灭辰", + 2666951267: "训练大剑", + 2673337443: "注能之矢", + 2679781122: "甘雨", + 2684365579: "登场乐", + 2705029563: "口袋魔导书", + 2713453234: "八重神子", + 2719832059: "(test)穿模测试", + 2743659331: "激流", + 2749508387: "金璋皇极", + 2749853923: "腐殖之剑", + 2753539619: "雪葬的星银", + 2764598579: "流放者", + 2792766467: "无工之剑", + 2796697027: "新手长枪", + 2832648187: "宗室长弓", + 2834803571: "金璋皇极", + 2848374378: "夜兰", + 2853296811: "穿刺高天的利齿", + 2871793795: "锐利", + 2876340530: "重云", + 2890909531: "武人", + 2893964243: "飞矢传书", + 2915865819: "渊中霞彩", + 2918525947: "飞雷之弦振", + 2935286715: "宗室猎枪", + 2947140987: "暗巷闪光", + 2949448555: "苍古自由之誓", + 2963220587: "翡玉法球", + 3001782875: "气定神闲", + 3018479371: "船歌", + 3024507506: "雷电将军", + 3063488107: "强力攻击", + 3068316954: "荒泷一斗", + 3070169307: "铁尖枪", + 3079462611: "驭浪的海祇民", + 3090373787: "暗巷的酒与诗", + 3097441915: "以理服人", + 3112448011: "决心", + 3112679155: "终末嗟叹之诗", + 3156385731: "昭心", + 3169209451: "弓藏", + 3192689683: "霜葬", + 3221566250: "琴", + 3235324891: "护摩之杖", + 3252085691: "顺风而行", + 3258658763: "嗜魔", + 3265161211: "注能之锋", + 3273999011: "黑岩绯玉", + 3277782506: "菲谢尔", + 3302787771: "霜葬", + 3305772819: "奔袭战术", + 3314157803: "克柔", + 3337185491: "浅濑之弭", + 3337249451: "过载", + 3339083250: "可莉", + 3344622722: "丽莎", + 3364338659: "无边际的眷顾", + 3371922315: "神樱神游神乐舞", + 3378007475: "黑岩长剑", + 3400133546: "五郎", + 3406113971: "顺风而行", + 3421967235: "吃虎鱼刀", + 3439749859: "苍翠猎弓", + 3443142923: "龙脊长枪", + 3447737235: "黑岩战弓", + 3456986819: "嘟嘟可故事集", + 3465493459: "精准", + 3500935003: "讨龙英杰谭", + 3535784755: "勇士之心", + 3541083923: "角斗士", + 3555115602: "托马", + 3584825427: "学徒笔记", + 3587062891: "千岩诀·同心", + 3587621259: "笛剑", + 3600623979: "猎弓", + 3608180322: "迪卢克", + 3618167299: "学士", + 3625393819: "试作澹月", + 3626268211: "来歆余响", + 3673792067: "旅行剑", + 3684723963: "雨裁", + 3689108098: "埃洛伊", + 3717667418: "优菈", + 3717849275: "薙草之稻光", + 3719372715: "甲级宝珏", + 3722933411: "试作古华", + 3755004051: "西风长枪", + 3762437019: "(test)穿模测试", + 3775299170: "芭芭拉", + 3782508715: "游医", + 3796702635: "变化万端", + 3796905611: "黑剑", + 3816664530: "旅行者", + 3827789435: "宗室秘法录", + 3832443723: "不屈", + 3836188467: "无羁的朱赤之蝶", + 3847143266: "达达利亚", + 3862787418: "钟离", + 3890292467: "教官", + 3898539027: "浮游四方的灵云", + 3914045794: "珊瑚宫心海", + 3914951691: "赤角石溃杵", + 3933622347: "天空之翼", + 3949653579: "幽夜华尔兹", + 3966753539: "洗濯诸类之形", + 3975746731: "鸦羽弓", + 3995710363: "狼的末路", + 3996017211: "收割", + 3999792907: "祭水之人", + 4000770243: "街巷伏击", + 4022012131: "乘胜追击", + 4049410651: "决斗之枪", + 4055003299: "天空之刃", + 4060235987: "日月辉", + 4080317355: "勇气", + 4082302819: "守护之心", + 4090429643: "沐浴龙血的剑", + 4103022435: "铁蜂刺", + 4103766499: "黑缨枪", + 4108620722: "阿贝多", + 4113638323: "昭理的鸢之枪", + 4119663210: "凯亚", + 4122509083: "断浪长鳍", + 4124851547: "雾切之回光", + 4127888970: "凝光", + 4137694339: "(test)竿测试", + 4139294531: "信使", + 4144069251: "追忆之注连", + 4158505619: "天空之脊", + 4160147242: "雷泽", + 4162981171: "(test)穿模测试", + 4186179883: "破魔之弓", + 4193089947: "桂木斩长正", + 4197635682: "行秋", + 4226083179: "名士振舞", + 4230231107: "若水", + 4245213187: "注能之卷", + 4258047555: "极夜二重奏", + 4260733330: "罗莎莉亚", + 4267718859: "反曲弓", + 4273845410: "辛焱", + 4275754179: "如狼般狩猎者", + FIGHT_PROP_ATTACK: "攻击力", + FIGHT_PROP_CHARGE_EFFICIENCY: "元素充能效率", + FIGHT_PROP_CRITICAL: "暴击率", + FIGHT_PROP_CRITICAL_HURT: "暴击伤害", + FIGHT_PROP_DEFENSE: "防御力", + FIGHT_PROP_ELEC_ADD_HURT: "雷元素伤害加成", + FIGHT_PROP_ELEMENT_MASTERY: "元素精通", + FIGHT_PROP_FIRE_ADD_HURT: "火元素伤害加成", + FIGHT_PROP_GRASS_ADD_HURT: "草元素伤害加成", + FIGHT_PROP_HEALED_ADD: "受治疗加成", + FIGHT_PROP_HEAL_ADD: "治疗加成", + FIGHT_PROP_ICE_ADD_HURT: "冰元素伤害加成", + FIGHT_PROP_MAX_HP: "生命值上限", + FIGHT_PROP_PHYSICAL_ADD_HURT: "物理伤害加成", + FIGHT_PROP_ROCK_ADD_HURT: "岩元素伤害加成", + FIGHT_PROP_SHIELD_COST_MINUS_RATIO: "护盾强效", + FIGHT_PROP_WATER_ADD_HURT: "水元素伤害加成", + FIGHT_PROP_WIND_ADD_HURT: "风元素伤害加成", + level: "等级", +} \ No newline at end of file diff --git a/components/data/miao.js b/components/data/miao.js new file mode 100644 index 00000000..7135c7ed --- /dev/null +++ b/components/data/miao.js @@ -0,0 +1,205 @@ +import lodash from "lodash"; +import Character from "../models/Character.js"; + +const artifactMap = { + '生命值': { + title: "小生命" + }, + '生命值_百分比': { + title: "大生命", + pct: true + }, + '暴击率': { + title: "暴击率", + pct: true + }, + '暴击伤害': { + title: "暴击伤害", + pct: true + }, + '防御力': { + title: "小防御" + }, + '防御力_百分比': { + title: "大防御", + pct: true + }, + '攻击力': { + title: "小攻击" + }, + '攻击力_百分比': { + title: "大攻击", + pct: true + }, + '元素精通': { + title: "元素精通" + }, + '元素充能效率': { + title: "充能效率", + pct: true + }, + '治疗加成': { + title: "治疗加成", + pct: true + } +} + + +let posIdx = { + "生之花": { + idx: 1 + }, + "死之羽": { + idx: 2 + }, + "时之沙": { + idx: 3 + }, + "空之杯": { + idx: 4 + }, + "理之冠": { + idx: 5 + } +}; + +let Data = { + getData(uid, data) { + let ret = { + uid, + chars: {} + }; + + lodash.forEach({ + name: "角色名称", + avatar: "头像ID", + lv: "冒险等阶" + }, (title, key) => { + ret[key] = data[title] || ""; + }) + + lodash.forEach(data.items, (ds) => { + let char = Data.getAvatar(ds); + ret.chars[char.id] = char; + }); + + return ret; + + }, + getAvatar(data) { + let char = Character.get(data["英雄Id"]); + return { + id: data["英雄Id"], + name: char ? char.name : "", + lv: data['等级'], + attr: Data.getAttr(data), + // weapon: Data.getWeapon(data), + artis: Data.getArtifact(data), + //cons: data["命之座数量"] * 1 || 0, + //talent: Data.getTalent(data) + }; + }, + getAttr(data) { + let ret = {}; + let attrKey = { + atk: "攻击力_总", + atkBase: "属性攻击力", + def: "防御力_总", + defBase: "属性防御力", + hp: "生命值上限_总", + hpBase: "属性生命值上限", + mastery: "属性元素精通", + cRate: { + title: "属性暴击率", + pct: true + }, + cDmg: { + title: "属性暴击伤害", + pct: true + }, + hInc: { + title: "属性治疗加成", + pct: true + }, + recharge: { + title: "属性元素充能效率", + pct: true + } + }; + lodash.forEach(attrKey, (cfg, key) => { + if (typeof (cfg) === "string") { + cfg = {title: cfg}; + } + let val = data[cfg.title] || ""; + if (cfg.pct) { + val = (val * 100).toFixed(2) + } + ret[key] = val; + }); + let maxDmg = 0; + lodash.forEach("火水草雷风冰岩".split(""), (key) => { + maxDmg = Math.max(data[`属性${key}元素伤害加成`] * 1, maxDmg); + }); + ret.dmgBonus = (maxDmg * 100).toFixed(2); + ret.phyBonus = (data[`属性物理伤害加成`] * 100).toFixed(2); + + return ret; + }, + getWeapon(data) { + return { + name: data['武器名称'], + lv: data['武器等级'], + refine: data["武器精炼"] + } + }, + getArtifact(data) { + let ret = {}; + let get = function (idx, key) { + let v = data[`圣遗物${idx}${key}`]; + let ret = /^([^\d]*)([\d\.\-]*)$/.exec(v); + if (ret && ret[1]) { + let title = ret[1], val = ret[2]; + if (artifactMap[title]) { + if (artifactMap[title].pct) { + val = (val * 100).toFixed(2); + } + title = artifactMap[title].title; + } + return [title, val]; + } + return []; + } + + for (let idx = 1; idx <= 5; idx++) { + ret[`arti${idx}`] = { + name: data[`圣遗物${idx}名称`], + type: data[`圣遗物${idx}类型`], + main: get(idx, "主词条"), + attrs: [ + get(idx, "副词条1"), + get(idx, "副词条2"), + get(idx, "副词条3"), + get(idx, "副词条4"), + ] + }; + } + return ret; + }, + getTalent(data) { + let ret = {}; + lodash.forEach({ + a: 1, + e: 2, + q: 3 + }, (idx, key) => { + let val = data[`天赋主动名称${idx}`] + let regRet = /等级(\d*)$/.exec(val); + if (regRet && regRet[1]) { + ret[key] = regRet[1] * 1 || 1 + } else { + ret[key] = 1; + } + }) + return ret; + } +} \ No newline at end of file diff --git a/components/models/Reliquaries.js b/components/models/Reliquaries.js index 2c47a0b4..a7f1ea67 100644 --- a/components/models/Reliquaries.js +++ b/components/models/Reliquaries.js @@ -1,6 +1,9 @@ import {attrMark, maxMark, attrMap, usefulAttr} from "../../resources/meta/reliquaries/reliquaries-mark.js"; import lodash from "lodash"; +//let meta = Data.readJSON("../../resources/meta/reliquaries", "data.json"); + + let Reliquaries = { getUseful(char) { let attrKey = usefulAttr[char] || ""; @@ -78,6 +81,14 @@ let Reliquaries = { return scoreMap[idx][0]; } } + }, + + getSet(name) { + for (let idx in meta) { + if (meta[idx].name === name) { + return meta[idx]; + } + } } } diff --git a/resources/meta/reliquaries/data.json b/resources/meta/reliquaries/data.json new file mode 100644 index 00000000..5b18e944 --- /dev/null +++ b/resources/meta/reliquaries/data.json @@ -0,0 +1,1137 @@ +{ + "10001": { + "id": "10001", + "name": "行者之心", + "sets": { + "arti1": { + "id": "51544", + "name": "故人之心" + }, + "arti2": { + "id": "51524", + "name": "归乡之羽" + }, + "arti3": { + "id": "51554", + "name": "逐光之石" + }, + "arti4": { + "id": "51514", + "name": "异国之盏" + }, + "arti5": { + "id": "51534", + "name": "感别之冠" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "重击的暴击率提升30%" + } + }, + "10002": { + "id": "10002", + "name": "勇士之心", + "sets": { + "arti1": { + "id": "52544", + "name": "勇士的勋章" + }, + "arti2": { + "id": "52524", + "name": "勇士的期许" + }, + "arti3": { + "id": "52554", + "name": "勇士的坚毅" + }, + "arti4": { + "id": "52514", + "name": "勇士的壮行" + }, + "arti5": { + "id": "52534", + "name": "勇士的冠冕" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "对生命值高于50%的敌人,造成的伤害增加30%" + } + }, + "10003": { + "id": "10003", + "name": "守护之心", + "sets": { + "arti1": { + "id": "23489", + "name": "守护之花" + }, + "arti2": { + "id": "23487", + "name": "守护徽印" + }, + "arti3": { + "id": "23490", + "name": "守护座钟" + }, + "arti4": { + "id": "23486", + "name": "守护之皿" + }, + "arti5": { + "id": "23488", + "name": "守护束带" + } + }, + "effect": { + "2": "防御力提高30%", + "4": "队伍里每有不同一种元素类型的自己的角色,自身获得30%相应的元素抗性" + } + }, + "10004": { + "id": "10004", + "name": "奇迹", + "sets": { + "arti1": { + "id": "54544", + "name": "奇迹之花" + }, + "arti2": { + "id": "54524", + "name": "奇迹之羽" + }, + "arti3": { + "id": "54554", + "name": "奇迹之沙" + }, + "arti4": { + "id": "54514", + "name": "奇迹之杯" + }, + "arti5": { + "id": "54534", + "name": "奇迹耳坠" + } + }, + "effect": { + "2": "所有元素抗性提高20%", + "4": "受到某个元素类型的伤害后,相应的抗性提升30%,持续10秒。该效果每10秒只能触发一次" + } + }, + "10005": { + "id": "10005", + "name": "战狂", + "sets": { + "arti1": { + "id": "23529", + "name": "战狂的蔷薇" + }, + "arti2": { + "id": "23527", + "name": "战狂的翎羽" + }, + "arti3": { + "id": "23530", + "name": "战狂的时计" + }, + "arti4": { + "id": "23526", + "name": "战狂的骨杯" + }, + "arti5": { + "id": "23528", + "name": "战狂的鬼面" + } + }, + "effect": { + "2": "暴击率提高12%", + "4": "生命值低于70%时,暴击率额外提升24%" + } + }, + "10006": { + "id": "10006", + "name": "武人", + "sets": { + "arti1": { + "id": "56544", + "name": "武人的红花" + }, + "arti2": { + "id": "56524", + "name": "武人的羽饰" + }, + "arti3": { + "id": "56554", + "name": "武人的水漏" + }, + "arti4": { + "id": "56514", + "name": "武人的酒杯" + }, + "arti5": { + "id": "56534", + "name": "武人的头巾" + } + }, + "effect": { + "2": "普通攻击与重击造成的伤害提高15%;", + "4": "施放元素战技后的8秒内,普通攻击和重击造成的伤害提升25%" + } + }, + "10007": { + "id": "10007", + "name": "教官", + "sets": { + "arti1": { + "id": "23519", + "name": "教官的胸花" + }, + "arti2": { + "id": "23517", + "name": "教官的羽饰" + }, + "arti3": { + "id": "23520", + "name": "教官的怀表" + }, + "arti4": { + "id": "23516", + "name": "教官的茶杯" + }, + "arti5": { + "id": "23518", + "name": "教官的帽子" + } + }, + "effect": { + "2": "元素精通提高80点", + "4": "触发元素反应后,队伍中所有角色的元素精通提高120点,持续8秒" + } + }, + "10008": { + "id": "10008", + "name": "赌徒", + "sets": { + "arti1": { + "id": "58544", + "name": "赌徒的胸花" + }, + "arti2": { + "id": "58524", + "name": "赌徒的羽饰" + }, + "arti3": { + "id": "58554", + "name": "赌徒的怀表" + }, + "arti4": { + "id": "58514", + "name": "赌徒的骰盅" + }, + "arti5": { + "id": "58534", + "name": "赌徒的耳环" + } + }, + "effect": { + "2": "元素战技造成的伤害提升20%", + "4": "击败敌人时,有100%概率清除元素战技的冷却时间。该效果每15秒至多触发一次" + } + }, + "10009": { + "id": "10009", + "name": "流放者", + "sets": { + "arti1": { + "id": "59544", + "name": "流放者之花" + }, + "arti2": { + "id": "59524", + "name": "流放者之羽" + }, + "arti3": { + "id": "59554", + "name": "流放者怀表" + }, + "arti4": { + "id": "59514", + "name": "流放者之杯" + }, + "arti5": { + "id": "59534", + "name": "流放者头冠" + } + }, + "effect": { + "2": "元素充能效率提高20%", + "4": "施放元素爆发后,每2秒为队伍中所有角色(不包括自己)恢复2点元素能量。该效果持续6秒,无法叠加" + } + }, + "10010": { + "id": "10010", + "name": "冒险家", + "sets": { + "arti1": { + "id": "60444", + "name": "冒险家之花" + }, + "arti2": { + "id": "60424", + "name": "冒险家尾羽" + }, + "arti3": { + "id": "60454", + "name": "冒险家怀表" + }, + "arti4": { + "id": "60414", + "name": "冒险家金杯" + }, + "arti5": { + "id": "60434", + "name": "冒险家头带" + } + }, + "effect": { + "2": "生命值上限提高1000点", + "4": "开启各类宝箱后的5秒内,持续恢复30%生命值" + } + }, + "10011": { + "id": "10011", + "name": "幸运儿", + "sets": { + "arti1": { + "id": "61444", + "name": "幸运儿绿花" + }, + "arti2": { + "id": "61424", + "name": "幸运儿鹰羽" + }, + "arti3": { + "id": "61454", + "name": "幸运儿沙漏" + }, + "arti4": { + "id": "61414", + "name": "幸运儿之杯" + }, + "arti5": { + "id": "61434", + "name": "幸运儿银冠" + } + }, + "effect": { + "2": "防御力提高100点", + "4": "拾取摩拉时,恢复300点生命值" + } + }, + "10012": { + "id": "10012", + "name": "学士", + "sets": { + "arti1": { + "id": "62544", + "name": "学士的书签" + }, + "arti2": { + "id": "62524", + "name": "学士的羽笔" + }, + "arti3": { + "id": "62554", + "name": "学士的时钟" + }, + "arti4": { + "id": "62514", + "name": "学士的墨杯" + }, + "arti5": { + "id": "62534", + "name": "学士的镜片" + } + }, + "effect": { + "2": "元素充能效率提高20%", + "4": "获得元素微粒或元素晶球时,队伍中所有弓箭和法器角色额外恢复3点元素能量。该效果每3秒只能触发一次" + } + }, + "10013": { + "id": "10013", + "name": "游医", + "sets": { + "arti1": { + "id": "63444", + "name": "游医的银莲" + }, + "arti2": { + "id": "63424", + "name": "游医的枭羽" + }, + "arti3": { + "id": "63454", + "name": "游医的怀钟" + }, + "arti4": { + "id": "63414", + "name": "游医的药壶" + }, + "arti5": { + "id": "63434", + "name": "游医的方巾" + } + }, + "effect": { + "2": "角色受到的治疗效果提高20%", + "4": "施放元素爆发时,恢复20%生命值" + } + }, + "14001": { + "id": "14001", + "name": "冰风迷途的勇士", + "sets": { + "arti1": { + "id": "23459", + "name": "历经风雪的思念" + }, + "arti2": { + "id": "23457", + "name": "摧冰而行的执望" + }, + "arti3": { + "id": "23460", + "name": "冰雪故园的终期" + }, + "arti4": { + "id": "23456", + "name": "遍结寒霜的傲骨" + }, + "arti5": { + "id": "23458", + "name": "破冰踏雪的回音" + } + }, + "effect": { + "2": "获得15%冰元素伤害加成", + "4": "攻击处于冰元素影响下的敌人时,暴击率提高20%;若敌人处于冻结状态下,则暴击率额外提高20%" + } + }, + "14002": { + "id": "14002", + "name": "平息鸣雷的尊者", + "sets": { + "arti1": { + "id": "23449", + "name": "平雷之心" + }, + "arti2": { + "id": "23447", + "name": "平雷之羽" + }, + "arti3": { + "id": "23450", + "name": "平雷之刻" + }, + "arti4": { + "id": "23446", + "name": "平雷之器" + }, + "arti5": { + "id": "23448", + "name": "平雷之冠" + } + }, + "effect": { + "2": "雷元素抗性提高40%", + "4": "对处于雷元素影响下的敌人造成的伤害提升35%" + } + }, + "14003": { + "id": "14003", + "name": "渡过烈火的贤人", + "sets": { + "arti1": { + "id": "23439", + "name": "渡火者的决绝" + }, + "arti2": { + "id": "23437", + "name": "渡火者的解脱" + }, + "arti3": { + "id": "23440", + "name": "渡火者的煎熬" + }, + "arti4": { + "id": "23436", + "name": "渡火者的醒悟" + }, + "arti5": { + "id": "23438", + "name": "渡火者的智慧" + } + }, + "effect": { + "2": "火元素抗性提高40%", + "4": "对处于火元素影响下的敌人造成的伤害提升35%" + } + }, + "14004": { + "id": "14004", + "name": "被怜爱的少女", + "sets": { + "arti1": { + "id": "23479", + "name": "远方的少女之心" + }, + "arti2": { + "id": "23477", + "name": "少女飘摇的思念" + }, + "arti3": { + "id": "23480", + "name": "少女苦短的良辰" + }, + "arti4": { + "id": "23476", + "name": "少女片刻的闲暇" + }, + "arti5": { + "id": "23478", + "name": "少女易逝的芳颜" + } + }, + "effect": { + "2": "角色造成的治疗效果提升15%", + "4": "施放元素战技或元素爆发后的10秒内,队伍中所有角色受治疗效果加成提高20%" + } + }, + "15001": { + "id": "15001", + "name": "角斗士的终幕礼", + "sets": { + "arti1": { + "id": "23419", + "name": "角斗士的留恋" + }, + "arti2": { + "id": "23417", + "name": "角斗士的归宿" + }, + "arti3": { + "id": "23420", + "name": "角斗士的希冀" + }, + "arti4": { + "id": "23416", + "name": "角斗士的酣醉" + }, + "arti5": { + "id": "23418", + "name": "角斗士的凯旋" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "装备该圣遗物套装的角色为单手剑、双手剑、长柄武器角色时,角色普通攻击造成的伤害提高35%" + } + }, + "15002": { + "id": "15002", + "name": "翠绿之影", + "sets": { + "arti1": { + "id": "23409", + "name": "野花记忆的绿野" + }, + "arti2": { + "id": "23407", + "name": "猎人青翠的箭羽" + }, + "arti3": { + "id": "23410", + "name": "翠绿猎人的笃定" + }, + "arti4": { + "id": "23406", + "name": "翠绿猎人的容器" + }, + "arti5": { + "id": "23408", + "name": "翠绿的猎人之冠" + } + }, + "effect": { + "2": "获得15%风元素伤害加成", + "4": "扩散反应造成的伤害提升60%。根据扩散的元素类型,降低受到影响的敌人40%的对应元素抗性,持续10秒" + } + }, + "15003": { + "id": "15003", + "name": "流浪大地的乐团", + "sets": { + "arti1": { + "id": "23399", + "name": "乐团的晨光" + }, + "arti2": { + "id": "23397", + "name": "琴师的箭羽" + }, + "arti3": { + "id": "23400", + "name": "终幕的时计" + }, + "arti4": { + "id": "23396", + "name": "吟游者之壶" + }, + "arti5": { + "id": "23398", + "name": "指挥的礼帽" + } + }, + "effect": { + "2": "元素精通提高80点", + "4": "装备该圣遗物套装的角色为法器、弓箭角色时,角色重击造成的伤害提高35%" + } + }, + "15004": { + "id": "15004", + "name": "冰之川与雪之砂", + "sets": { + "arti1": { + "id": "23389", + "name": "凛冬霜心" + }, + "arti2": { + "id": "23387", + "name": "雪藏之羽" + }, + "arti3": { + "id": "23390", + "name": "凝冰成砂" + }, + "arti4": { + "id": "23386", + "name": "北风之盏" + }, + "arti5": { + "id": "23388", + "name": "冰河之冠" + } + }, + "effect": { + "2": "获得15%冰元素伤害加成", + "4": "超导反应造成的伤害提升100%,融化反应的加成系数提高15%。施放元素爆发后的10秒内,冰元素伤害加成额外提升30%" + } + }, + "15005": { + "id": "15005", + "name": "如雷的盛怒", + "sets": { + "arti1": { + "id": "23379", + "name": "雷鸟的怜悯" + }, + "arti2": { + "id": "23377", + "name": "雷灾的孑遗" + }, + "arti3": { + "id": "23380", + "name": "雷霆的时计" + }, + "arti4": { + "id": "23376", + "name": "降雷的凶兆" + }, + "arti5": { + "id": "23378", + "name": "唤雷的头冠" + } + }, + "effect": { + "2": "获得15%雷元素伤害加成", + "4": "超载、感电、超导反应造成的伤害提升40%。触发这些元素反应时,元素战技冷却时间减少1秒。该效果每0.8秒最多触发一次" + } + }, + "15006": { + "id": "15006", + "name": "炽烈的炎之魔女", + "sets": { + "arti1": { + "id": "23369", + "name": "魔女的炎之花" + }, + "arti2": { + "id": "23367", + "name": "魔女常燃之羽" + }, + "arti3": { + "id": "23370", + "name": "魔女破灭之时" + }, + "arti4": { + "id": "23366", + "name": "魔女的心之火" + }, + "arti5": { + "id": "23368", + "name": "焦灼的魔女帽" + } + }, + "effect": { + "2": "获得15%火元素伤害加成", + "4": "超载、燃烧反应造成的伤害提升40%,蒸发、融化反应的加成系数提高15%。施放元素战技后的10秒内,2件套的效果提高50%,该效果最多叠加3次" + } + }, + "15007": { + "id": "15007", + "name": "昔日宗室之仪", + "sets": { + "arti1": { + "id": "23359", + "name": "宗室之花" + }, + "arti2": { + "id": "23357", + "name": "宗室之翎" + }, + "arti3": { + "id": "23360", + "name": "宗室时计" + }, + "arti4": { + "id": "23356", + "name": "宗室银瓮" + }, + "arti5": { + "id": "23358", + "name": "宗室面具" + } + }, + "effect": { + "2": "元素爆发造成的伤害提升20%", + "4": "施放元素爆发后,队伍中所有角色攻击力提升20%,持续12秒。该效果不可叠加" + } + }, + "15008": { + "id": "15008", + "name": "染血的骑士道", + "sets": { + "arti1": { + "id": "23349", + "name": "染血的铁之心" + }, + "arti2": { + "id": "23347", + "name": "染血的黑之羽" + }, + "arti3": { + "id": "23350", + "name": "骑士染血之时" + }, + "arti4": { + "id": "23346", + "name": "染血骑士之杯" + }, + "arti5": { + "id": "23348", + "name": "染血的铁假面" + } + }, + "effect": { + "2": "造成的物理伤害提高25%", + "4": "击败敌人后的10秒内,施放重击时不消耗体力,且重击造成的伤害提升50%" + } + }, + "15009": { + "id": "15009", + "name": "祭火之人", + "sets": { + "arti5": { + "id": "83534", + "name": "祭火礼冠" + } + }, + "effect": {} + }, + "15010": { + "id": "15010", + "name": "祭水之人", + "sets": { + "arti5": { + "id": "84534", + "name": "祭水礼冠" + } + }, + "effect": {} + }, + "15011": { + "id": "15011", + "name": "祭雷之人", + "sets": { + "arti5": { + "id": "85534", + "name": "祭雷礼冠" + } + }, + "effect": {} + }, + "15012": { + "id": "15012", + "name": "祭风之人", + "sets": { + "arti5": { + "id": "86534", + "name": "祭风礼冠" + } + }, + "effect": {} + }, + "15013": { + "id": "15013", + "name": "祭冰之人", + "sets": { + "arti5": { + "id": "87534", + "name": "祭冰礼冠" + } + }, + "effect": {} + }, + "15014": { + "id": "15014", + "name": "悠古的磐岩", + "sets": { + "arti1": { + "id": "23499", + "name": "磐陀裂生之花" + }, + "arti2": { + "id": "23497", + "name": "嵯峨群峰之翼" + }, + "arti3": { + "id": "23500", + "name": "星罗圭璧之晷" + }, + "arti4": { + "id": "23496", + "name": "巉岩琢塑之樽" + }, + "arti5": { + "id": "23498", + "name": "不动玄石之相" + } + }, + "effect": { + "2": "获得15%岩元素伤害加成", + "4": "获得结晶反应形成的晶片时,队伍中所有角色获得35%对应元素伤害加成,持续10秒。同时只能通过该效果获得一种元素伤害加成" + } + }, + "15015": { + "id": "15015", + "name": "逆飞的流星", + "sets": { + "arti1": { + "id": "23509", + "name": "夏祭之花" + }, + "arti2": { + "id": "23507", + "name": "夏祭终末" + }, + "arti3": { + "id": "23510", + "name": "夏祭之刻" + }, + "arti4": { + "id": "23506", + "name": "夏祭水玉" + }, + "arti5": { + "id": "23508", + "name": "夏祭之面" + } + }, + "effect": { + "2": "护盾强效提高35%", + "4": "处于护盾庇护下时,额外获得40%普通攻击和重击伤害加成" + } + }, + "15016": { + "id": "15016", + "name": "沉沦之心", + "sets": { + "arti1": { + "id": "23539", + "name": "饰金胸花" + }, + "arti2": { + "id": "23537", + "name": "追忆之风" + }, + "arti3": { + "id": "23540", + "name": "坚铜罗盘" + }, + "arti4": { + "id": "23536", + "name": "沉波之盏" + }, + "arti5": { + "id": "23538", + "name": "酒渍船帽" + } + }, + "effect": { + "2": "获得15%水元素伤害加成", + "4": "施放元素战技后的15秒内,普通攻击与重击造成的伤害提高30%" + } + }, + "15017": { + "id": "15017", + "name": "千岩牢固", + "sets": { + "arti1": { + "id": "23549", + "name": "勋绩之花" + }, + "arti2": { + "id": "23547", + "name": "昭武翎羽" + }, + "arti3": { + "id": "23550", + "name": "金铜时晷" + }, + "arti4": { + "id": "23546", + "name": "盟誓金爵" + }, + "arti5": { + "id": "23548", + "name": "将帅兜鍪" + } + }, + "effect": { + "2": "生命值提升20%", + "4": "元素战技命中敌人后,使队伍中附近的所有角色攻击力提升20%,护盾强效提升30%,持续3秒。该效果每0.5秒至多触发一次。装备此圣遗物套装的角色处于队伍后台时,依然能触发该效果" + } + }, + "15018": { + "id": "15018", + "name": "苍白之火", + "sets": { + "arti1": { + "id": "23559", + "name": "无垢之花" + }, + "arti2": { + "id": "23557", + "name": "贤医之羽" + }, + "arti3": { + "id": "23560", + "name": "停摆之刻" + }, + "arti4": { + "id": "23556", + "name": "超越之盏" + }, + "arti5": { + "id": "23558", + "name": "嗤笑之面" + } + }, + "effect": { + "2": "造成的物理伤害提高25%", + "4": "元素战技命中敌人后,攻击力提升9%。该效果持续7秒,至多叠加2层,每0.3秒至多触发一次。叠满2层时,2件套的效果提升100%" + } + }, + "15019": { + "id": "15019", + "name": "追忆之注连", + "sets": { + "arti1": { + "id": "23569", + "name": "羁缠之花" + }, + "arti2": { + "id": "23567", + "name": "思忆之矢" + }, + "arti3": { + "id": "23570", + "name": "朝露之时" + }, + "arti4": { + "id": "23566", + "name": "祈望之心" + }, + "arti5": { + "id": "23568", + "name": "无常之面" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "施放元素战技时,如果角色的元素能量高于或等于15点,则会流失15点元素能量,使接下来的10秒内,普通攻击、重击、下落攻击造成的伤害提高50%,持续期间内该效果不会再次触发" + } + }, + "15020": { + "id": "15020", + "name": "绝缘之旗印", + "sets": { + "arti1": { + "id": "23579", + "name": "明威之镡" + }, + "arti2": { + "id": "23577", + "name": "切落之羽" + }, + "arti3": { + "id": "23580", + "name": "雷云之笼" + }, + "arti4": { + "id": "23576", + "name": "绯花之壶" + }, + "arti5": { + "id": "23578", + "name": "华饰之兜" + } + }, + "effect": { + "2": "元素充能效率提高20%", + "4": "基于元素充能效率的25%,提高元素爆发造成的伤害。至多通过这种方式获得75%提升" + } + }, + "15021": { + "id": "15021", + "name": "华馆梦醒形骸记", + "sets": { + "arti1": { + "id": "23584", + "name": "荣花之期" + }, + "arti2": { + "id": "23582", + "name": "华馆之羽" + }, + "arti3": { + "id": "23585", + "name": "众生之谣" + }, + "arti4": { + "id": "23581", + "name": "梦醒之瓢" + }, + "arti5": { + "id": "23583", + "name": "形骸之笠" + } + }, + "effect": { + "2": "防御力提高30%", + "4": "装备此圣遗物套装的角色在以下情况下,将获得「问答」效果:在场上用岩元素攻击命中敌人后获得一层,每0.3秒至多触发一次;在队伍后台中,每3秒获得一层。问答至多叠加4层,每层能提供6%防御力与6%岩元素伤害加成。每6秒,若未获得问答效果,将损失一层" + } + }, + "15022": { + "id": "15022", + "name": "海染砗磲", + "sets": { + "arti1": { + "id": "23599", + "name": "海染之花" + }, + "arti2": { + "id": "23597", + "name": "渊宫之羽" + }, + "arti3": { + "id": "23600", + "name": "离别之贝" + }, + "arti4": { + "id": "23596", + "name": "真珠之笼" + }, + "arti5": { + "id": "23598", + "name": "海祇之冠" + } + }, + "effect": { + "2": "治疗加成提高15%", + "4": "装备此圣遗物套装的角色对队伍中的角色进行治疗时,将产生持续3秒的海染泡沫,记录治疗的生命值回复量(包括溢出值)。持续时间结束时,海染泡沫将会爆炸,对周围的敌人造成90%累计回复量的伤害(该伤害结算方式同感电、超导等元素反应,但不受元素精通、等级或反应伤害加成效果影响)。每3.5秒至多产生一个海染泡沫;海染泡沫至多记录30000点回复量,含溢出部分的治疗量;自己的队伍中同时至多存在一个海染泡沫。装备此圣遗物套装的角色处于队伍后台时,依然能触发该效果" + } + }, + "15023": { + "id": "15023", + "name": "辰砂往生录", + "sets": { + "arti1": { + "id": "97442", + "name": "生灵之华" + }, + "arti2": { + "id": "97422", + "name": "潜光片羽" + }, + "arti3": { + "id": "97452", + "name": "阳辔之遗" + }, + "arti4": { + "id": "97412", + "name": "结契之刻" + }, + "arti5": { + "id": "97432", + "name": "虺雷之姿" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "施放元素爆发后,将产生持续16秒的「潜光」效果:攻击力提升8%;并在角色的生命值降低时,攻击力进一步提升10%,至多通过这种方式提升4次,每0.8秒至多触发一次。「潜光」效果将在角色退场时消失;持续期间再次施放元素爆发,将移除原有的「潜光」" + } + }, + "15024": { + "id": "15024", + "name": "来歆余响", + "sets": { + "arti1": { + "id": "98442", + "name": "魂香之花" + }, + "arti2": { + "id": "98422", + "name": "垂玉之叶" + }, + "arti3": { + "id": "98452", + "name": "祝祀之凭" + }, + "arti4": { + "id": "98412", + "name": "涌泉之盏" + }, + "arti5": { + "id": "98432", + "name": "浮溯之珏" + } + }, + "effect": { + "2": "攻击力提高18%", + "4": "普通攻击命中敌人时,有36%概率触发「幽谷祝祀」:普通攻击造成的伤害提高,伤害提高值为攻击力的70%,该效果将在普通攻击造成伤害后的0.05秒后清除。普通攻击未触发「幽谷祝祀」时,会使下次触发概率提升20%;0.2秒内至多判定1次触发与否" + } + } +} \ No newline at end of file diff --git a/tools/reli-data-sprider.js b/tools/reli-data-sprider.js new file mode 100644 index 00000000..1527f209 --- /dev/null +++ b/tools/reli-data-sprider.js @@ -0,0 +1,141 @@ +import fs from "fs"; +import cheerio from "cheerio"; +import lodash from "lodash"; +import fetch from "node-fetch"; + +const _path = process.cwd(); + +const artiIdx = { + Flower: 1, + Plume: 2, + Sands: 3, + Goblet: 4, + Circlet: 5 +} + +let getCharData = async function (url, key, name = '') { + + url = "https://genshin.honeyhunterworld.com/" + url; + console.log('req' + key, url) + + let req = await fetch(url); + let txt = await req.text(); + + const $ = cheerio.load(txt); + let ret = getBasic($, name); + + name = ret.name; + + return ret; +} + +async function saveCharData(url, key, name) { + + let data = await getCharData(url, key, name); + + name = name || data.name; + + if (!name) { + console.log("角色名不存在" + url); + return; + } + + let charPath = `${_path}/plugins/miao-plugin/resources/meta/character/${data.name}/` + if (!fs.existsSync(charPath)) { + fs.mkdirSync(charPath); + } + + fs.writeFileSync(`${charPath}data.json`, JSON.stringify(data, "", "\t")); + console.log(data.name + "下载完成"); +} + +function getEffect(txt) { + let regRet = /(\d) Piece:/.exec(txt); + if (regRet) { + return [regRet[1], txt.replace(regRet[0], "").trim().replace(/。$/, "")] + } + return []; +} + +async function getSets(id) { + const url = `https://genshin.honeyhunterworld.com/db/art/family/a_${id}/?lang=CHS`; + let req = await fetch(url); + let txt = await req.text(); + fs.writeFileSync("./test.html", txt); + let $ = cheerio.load(txt); + + let sets = $(".wrappercont .add_stat_table:eq(0)"); + let ret = {} + + sets.find("td").each(function () { + let line = $(this); + let nRet = /\s*(.*?)\s+\(([^\s]+)/.exec(line.find("span").text()); + let idRet = /a_(\d+)/.exec(line.find("a").attr("href")); + if (nRet && idRet) { + ret[`arti${artiIdx[nRet[2]]}`] = { + id: idRet[1], + name: nRet[1] + } + } + }) + return ret; +} + +async function down() { + const url = "https://genshin.honeyhunterworld.com/db/artifact/?lang=CHS"; + let req = await fetch(url); + let txt = await req.text(); + let $ = cheerio.load(txt); + let char = $(".art_stat_table_new"); + + let ret = {} + let tmp = {}; + + char.each(function () { + let trs = $(this).find("tr:gt(0)"); + trs.each(function (idx) { + let self = $(this); + if (idx % 2 === 0) { + let na = self.find("td:eq(2) a") + let idRet = /a_(\d+)/.exec(na.attr("href")) + if (idRet) { + tmp = { + id: idRet[1], + name: na.text(), + sets: {}, + effect: {} + } + } else { + tmp = {effect: {}} + } + } + let et = getEffect(self.find(`td:eq(${idx % 2 === 0 ? 4 : 1})`).text()); + if (et && et[0]) { + tmp.effect[et[0]] = et[1]; + } + if (idx % 2 === 1 && tmp.id) { + ret[tmp.id] = tmp; + } + }) + }); + + for (let idx in ret) { + let ds = ret[idx]; + + ds.sets = await getSets(ds.id); + console.log(`arti ${ds.id}:${ds.name} Done`); + } + + let filePath = `${_path}/plugins/miao-plugin/resources/meta/reliquaries/` + fs.writeFileSync(`${filePath}data.json`, JSON.stringify(ret, "", "\t")); +} + +//await saveCharData("https://genshin.honeyhunterworld.com/db/char/ayaka/?lang=CHS", "ayaka"); + + +await down(); + + + + + diff --git a/tools/reli-img-download.js b/tools/reli-img-download.js new file mode 100644 index 00000000..054df0d2 --- /dev/null +++ b/tools/reli-img-download.js @@ -0,0 +1,89 @@ +import {Data} from "../components/index.js"; +import lodash from "lodash"; +import fs from "fs"; +import request from "request"; + +const _path = process.cwd() + "/plugins/miao-plugin/resources/meta/reliquaries/"; + +let relis = Data.readJSON(_path, 'data.json'); + + +for(let idx in relis){ + +} + + +lodash.forEach(readDir, (c) => { + + console.log(c); + + if (!fs.existsSync(`${_cRoot}/${c}/data.json`)) { + return; + } + + let char = Data.readJSON(`${_cRoot}/${c}/`, 'data.json'); + + if (char.name) { + // 正面 + + // 角色条 + img(char, char.imgs.profile, "profile.png"); + // 名片 + img(char, char.imgs.party, "party.png"); + // img(char, char.imgs.char, "char.png"); + // 立绘-竖版 + img(char, char.imgs.gacha_card, "gacha_card.png"); + // 立绘 + img(char, char.imgs.gacha_splash, "gacha_splash.png"); + // 正面像 + img(char, char.imgs.face, "face.png"); + img(char, char.imgs.side, "face.png"); + + // 天赋 + if (char.talent) { + img(char, char.talent.a.icon, "talent_a.png"); + img(char, char.talent.e.icon, "talent_e.png"); + img(char, char.talent.q.icon, "talent_q.png"); + } + // 被动天赋 + lodash.forEach(char.passive, (p, idx) => { + img(char, p.icon, `passive_${idx}.png`); + }); + + // 命座 + lodash.forEach(char.cons, (con, idx) => { + img(char, con.icon, `cons_${idx}.png`) + }); + + } +}) + +let cacheFile = async function () { + + let cacheFn = async function (file) { + if (fs.existsSync(`${_cRoot}/${file.file}`)) { + console.log(`已存在,跳过 ${file.file}`); + return true; + } + + try { + let stream = fs.createWriteStream(`${_cRoot}/${file.file}`); + await request("https://genshin.honeyhunterworld.com/" + file.url).pipe(stream); + + return new Promise((resolve) => { + stream.on('finish', resolve) + }); + } catch (e) { + return false; + } + console.log(`下载成功: ${file.file}`); + return true; + }; + + console.log('开始下载'); + await Data.asyncPool(5, imgs, cacheFn); + +} + +await cacheFile(); +console.log('下载成功');