mirror of
https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git
synced 2024-12-23 03:20:52 +08:00
225 lines
7.2 KiB
JavaScript
225 lines
7.2 KiB
JavaScript
import fs from "fs";
|
||
import {
|
||
Cfg, Data
|
||
} from "../components/index.js";
|
||
import lodash from 'lodash';
|
||
import Common from "../components/Common.js";
|
||
|
||
const _path = process.cwd();
|
||
let pathPlus = `${_path}/plugins/xiaoyao-cvs-plugin/resources/sr/`
|
||
|
||
export async function AtlasAlias(e, {render}) {
|
||
let data
|
||
data = await GetRoleData(e)
|
||
if (data?.url) return sendMsg(e, {render}, data.data, data.url)
|
||
data = await GetWeaPonData(e)
|
||
if (data?.url) return sendMsg(e, {render}, data.data, data.url)
|
||
return false
|
||
}
|
||
|
||
export async function sendMsg(e, {render}, data, url) {
|
||
await Common.render(url, {
|
||
...data
|
||
}, {
|
||
e,
|
||
render,
|
||
scale: 1.4
|
||
})
|
||
return true
|
||
}
|
||
|
||
|
||
export async function GetRoleData(e) {
|
||
let name = e.msg.replace(/\*|#|星铁|星穹铁道|图鉴/g, '')
|
||
|
||
let roleName = GetRole(name)?.name
|
||
if(!roleName){
|
||
return false
|
||
}
|
||
if(/开拓者/.test(name)){
|
||
// roleName = "开拓者 (火)"
|
||
e.reply("开拓者图鉴暂不支持查询")
|
||
return false
|
||
}
|
||
let data = Data.readJSON(pathPlus, `character/${roleName}/data.json`)
|
||
let items = Data.readJSON(pathPlus, 'items/data.json')
|
||
if(!data) return false
|
||
|
||
let baseAttr=[{key:'sp',name:'能量',num:data.sp}]
|
||
let baseObj={
|
||
atk:'攻击力',
|
||
hp:'生命值',
|
||
def: "防御力",
|
||
speed: "速度",
|
||
cpct: "暴击率",
|
||
cdmg: "暴击伤害",
|
||
aggro: "嘲讽"
|
||
}
|
||
for (const item of Object.keys(data.baseAttr)) {
|
||
baseAttr.push({
|
||
key:item,
|
||
name:baseObj[item],
|
||
num: parseInt(data.baseAttr[item])
|
||
})
|
||
}
|
||
let growObj={
|
||
atk:'攻击',
|
||
hp:'生命',
|
||
def: "防御",
|
||
speed: "速度",
|
||
cpct: "暴击率",
|
||
cdmg: "暴击伤害",
|
||
aggro: "嘲讽",
|
||
effect:"效果命中",
|
||
damage:"伤害",
|
||
resist:"效果抵抗"
|
||
}
|
||
let growAttr=[]
|
||
for (const item of Object.keys(data.growAttr)) {
|
||
growAttr.push({
|
||
name:growObj[item]+"强化",
|
||
key:item,
|
||
num: parseInt(lodash.sum(data.growAttr[item]))+"%"
|
||
})
|
||
}
|
||
let newMaterial = [{...items["213"],num:294},{...items["2"],num: data.rarity==5?89600:834400}]
|
||
for (const materialElement of data.materials) {
|
||
for (const newMaterialElement of materialElement) {
|
||
if([2].includes(newMaterialElement.id * 1)) continue
|
||
if (!lodash.map(newMaterial, 'id').includes(newMaterialElement.id)) {
|
||
newMaterial.push(newMaterialElement)
|
||
} else {
|
||
for (let v = 0; v < newMaterial.length; v++) {
|
||
if (newMaterial[v].id == newMaterialElement.id) {
|
||
newMaterial[v].num += newMaterialElement.num
|
||
}
|
||
newMaterial[v] = {...items[newMaterial[v].id], ...newMaterial[v]}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
data.skillMaterial=[]
|
||
for (const [index,item] of Object.entries(data.skill_tree)) {
|
||
let levelsMaterial=lodash.map(Object.values(item.levels), 'materials')
|
||
for (const levelsMaterialElement of levelsMaterial) {
|
||
for (const levelsMaterialElement1 of levelsMaterialElement) {
|
||
if (!lodash.map(data.skillMaterial, 'id').includes(levelsMaterialElement1.id)) {
|
||
data.skillMaterial.push(levelsMaterialElement1)
|
||
} else {
|
||
for (let v = 0; v < data.skillMaterial.length; v++) {
|
||
if (data.skillMaterial[v].id == levelsMaterialElement1.id) {
|
||
data.skillMaterial[v].num += levelsMaterialElement1.num
|
||
}
|
||
data.skillMaterial[v] = {...items[data.skillMaterial[v].id], ...data.skillMaterial[v]}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
for (const [i,item] of Object.entries(data.skillsData)) {
|
||
let newAttributeBuff=[]
|
||
if(item?.AttributeBuff&&item.AttributeBuff.length>0){
|
||
for (const item1 of item.AttributeBuff) {
|
||
let text = item1.replace(/:|:/,":").split(':')
|
||
newAttributeBuff.push({
|
||
key:text[0],
|
||
isType:text[0].includes('额外')?"extra":"attribute",
|
||
value:text[1]
|
||
})
|
||
}
|
||
}
|
||
|
||
data.skillsData[i].newAttributeBuff=newAttributeBuff
|
||
}
|
||
data.materials = newMaterial
|
||
data.baseAttr=baseAttr
|
||
data.growAttr=growAttr
|
||
return {data,url: 'sr/character/index'}
|
||
}
|
||
|
||
|
||
export async function GetWeaPonData(e) {
|
||
let name = e.msg.replace(/\*|#|星铁|(四|4)星|(五|5)星|星穹铁道|图鉴|专武/g, '')
|
||
let list = Data.readJSON(pathPlus, 'weapon/data.json')
|
||
let items = Data.readJSON(pathPlus, 'items/data.json')
|
||
let role = GetRole(name)
|
||
let isUp = false;
|
||
if (role) {
|
||
name = role.name
|
||
isUp = true
|
||
}
|
||
let roleData, roleList = [];
|
||
lodash.forEach(list, (v, k) => {
|
||
if (isUp && v.belongRole.includes(name)) {
|
||
roleList.push(v)
|
||
return
|
||
} else if ([v.name, ...v.names, ...v?.suitRole].includes(name) && !isUp) {
|
||
roleList.push(v)
|
||
return
|
||
}
|
||
})
|
||
let isUp4 = /4|四/.test(e.msg)
|
||
let isUp5 = /5|五/.test(e.msg)
|
||
if (roleList.length == 0) return false
|
||
roleData = roleList[0]
|
||
for (const role of roleList) {
|
||
if (isUp4 && role.star == 4) {
|
||
roleData = role
|
||
} else if (isUp5 && role.star == 5) {
|
||
roleData = role
|
||
} else if (!isUp4 && !isUp5 && roleData.star < role.star) {
|
||
roleData = role
|
||
}
|
||
}
|
||
if (roleData) {
|
||
let newMaterial = []
|
||
for (const materialElement of roleData.material) {
|
||
for (const newMaterialElement of materialElement) {
|
||
if (!lodash.map(newMaterial, 'id').includes(newMaterialElement.id) && ![2].includes(newMaterialElement.id * 1)) {
|
||
newMaterial.push(newMaterialElement)
|
||
} else {
|
||
|
||
for (let v = 0; v < newMaterial.length; v++) {
|
||
if (newMaterial[v].id == newMaterialElement.id) {
|
||
newMaterial[v].num += newMaterialElement.num
|
||
}
|
||
newMaterial[v] = {...items[newMaterial[v].id], ...newMaterial[v]}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
roleData.material = newMaterial
|
||
for (const item of Object.keys(roleData.fullValues)) {
|
||
let {base, stop} = roleData.fullValues[item]
|
||
roleData.fullValues[item] = {
|
||
base: parseInt(base), stop: parseInt(stop)
|
||
}
|
||
}
|
||
let suitRole = []
|
||
for (const item of roleData.suitRole) {
|
||
let list = GetRole(item)
|
||
if (roleData.belongRole.includes(item)) list.isUp = true
|
||
suitRole.push(list)
|
||
}
|
||
roleData.suitRole = suitRole
|
||
}
|
||
return {data: roleData, url: `sr/weapon/index`}
|
||
|
||
}
|
||
|
||
let GetRole = (name) => {
|
||
let list = Data.readJSON(pathPlus, 'character/data.json')
|
||
let role;
|
||
lodash.forEach(list, (v, k) => {
|
||
if ([v.name, ...v.names].includes(name)) {
|
||
role = v
|
||
}
|
||
})
|
||
return role
|
||
}
|
||
|
||
|