1. 将#老婆命令使用新版卡片进行渲染

2. 增加卡片的命座展示
This commit is contained in:
yoimiya-kokomi 2022-03-27 21:12:00 +08:00
parent cce76ea8f2
commit 83479c3589
6 changed files with 238 additions and 56 deletions

View File

@ -14,7 +14,6 @@ await init();
export async function init(isUpdate = false) { export async function init(isUpdate = false) {
let _path = "file://" + process.cwd(); let _path = "file://" + process.cwd();
console.log(_path + "config/gen");
let version = isUpdate ? new Date().getTime() : 0; let version = isUpdate ? new Date().getTime() : 0;
genshin = await import(_path + `/config/genshin/roleId.js?version=${version}`); genshin = await import(_path + `/config/genshin/roleId.js?version=${version}`);
@ -23,19 +22,14 @@ export async function init(isUpdate = false) {
// 查看当前角色 // 查看当前角色
export async function character(e, { render, MysApi, User }) { export async function character(e, { render, MysApi, User }) {
if (!e.msg) { if (!e.msg) {
return; return;
} }
let name = e.msg.replace(/#?|老婆|老公|[1|2|5][0-9]{8}/g, "").trim(); let name = e.msg.replace(/#?|老婆|老公|[1|2|5][0-9]{8}/g, "").trim();
let char = Character.get(name); let char = Character.get(name);
if (!char) { if (!char) {
return false; return false;
} }
let check = await User.checkAuth(e, "bind", { let check = await User.checkAuth(e, "bind", {
action: "查询角色详情" action: "查询角色详情"
}); });
@ -96,7 +90,7 @@ export async function character(e, { render, MysApi, User }) {
avatars = avatars[roleId]; avatars = avatars[roleId];
let talent = await getTalent(e, uid, avatars); let talent = await getTalent(e, uid, avatars, MysApi);
let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length
let base64 = await render("miao-plugin", "character", { let base64 = await render("miao-plugin", "character", {
_plugin: true, _plugin: true,
@ -117,54 +111,176 @@ export async function character(e, { render, MysApi, User }) {
return true; //事件结束不再往下 return true; //事件结束不再往下
} }
//#老婆
export async function wife(e, { render, MysApi, User }) {
let msg = e.msg;
if (!msg) {
return;
}
let check = await User.checkAuth(e, "bind", {
action: "查询角色详情"
});
if (!check) {
return true;
}
msg = msg.replace(/#|\w/g, "");
let i = 0;
if (["老婆", "媳妇", "妻子", "娘子", "女朋友", "女友", "女神"].includes(msg)) {
i = 0;
} else if (["老公", "丈夫", "夫君", "郎君", "男朋友", "男友", "男神"].includes(msg)) {
i = 1;
} else if (["女儿"].includes(msg)) {
i = 2;
} else if (["儿子"].includes(msg)) {
e.reply("暂无正太角色");
return true;
} else {
return true;
}
let { selfUser, targetUser } = e;
if (!targetUser.uid) {
e.reply("暂未查询到角色信息");
return true;
}
let uid = targetUser.uid;
let res = await MysApi.requestData(e, uid, "character");
if (res.retcode == "-1") {
return true;
}
if (checkRetcode(res, uid, e)) {
return true;
}
let avatars = res.data.avatars;
if (avatars.length <= 0) {
return true;
}
let list = [];
for (let val of avatars) {
if (!genshin.wifeData[i].includes(Number(val.id))) {
continue;
}
if (val.rarity > 5) {
val.rarity = 5;
}
//等级+好感*10+命座*5+五星*20
val.sort = val.level + val.fetter * 10 + val.actived_constellation_num * 5 * (val.rarity - 3) + (val.rarity - 4) * 20;
//超过80级的每级*5
if (val.level > 80) {
val.sort += (val.level - 80) * 5;
}
//武器 等级+五星*25+精炼*5
val.sort += val.weapon.level + (val.weapon.rarity - 4) * 25 + val.weapon.affix_level * 5;
//武器超过80级的每级*5
if (val.weapon.level > 80) {
val.sort += (val.weapon.level - 80) * 5;
}
//圣遗物等级
for (let rel of val.reliquaries) {
val.sort += rel.level * 1.2;
}
list.push(val);
}
if (list.length <= 0) {
return true;
}
//limitSet(e);
list = lodash.orderBy(list, ["sort"], ["desc"]);
avatars = lodash.sample(list.slice(0, 5));
let talent = await getTalent(e, uid, avatars, MysApi);
let char = Character.get(avatars.name);
let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length
let base64 = await render("miao-plugin", "character", {
_plugin: true,
save_id: uid,
uid: uid,
talent,
crownNum,
talentMap: { a: "普攻", e: "战技", q: "爆发" },
bg: getCharacterImg(char.name),
...getCharacterData(avatars),
ds: char.getData("name,id,title,desc"),
}, "png");
if (base64) {
e.reply(segment.image(`base64://${base64}`));
}
return true;
}
// 设置角色图像 // 设置角色图像
export async function setCharacterImg(e, render) { export async function setCharacterImg(e, render) {
} }
//获取角色技能数据 //获取角色技能数据
async function getTalent(e, uid, avatars) { async function getTalent(e, uid, avatars, MysApi) {
let skill = {}; let skill = {};
if (NoteCookie && NoteCookie[e.user_id] && NoteCookie[e.user_id].uid == uid && NoteCookie[e.user_id].cookie.includes("cookie_token")) {
let skillres = await mysApi(e, uid, "detail", { let skillres = await MysApi.requestData(e, uid, "detail", {
role_id: uid, avatar_id: avatars.id,
server: getServer(uid), });
avatar_id: avatars.id, if (skillres.retcode == 0 && skillres.data && skillres.data.skill_list) {
}); skill.id = avatars.id;
if (skillres.retcode == 0 && skillres.data && skillres.data.skill_list) { let skill_list = lodash.orderBy(skillres.data.skill_list, ["id"], ["asc"]);
skill.id = avatars.id; for (let val of skill_list) {
let skill_list = lodash.orderBy(skillres.data.skill_list, ["id"], ["asc"]); val.level_original = val.level_current;
for (let val of skill_list) { if (val.name.includes("普通攻击")) {
val.level_original = val.level_current; skill.a = val;
if (val.name.includes("普通攻击")) { continue;
skill.a = val;
continue;
}
if (val.max_level >= 10 && !skill.e) {
skill.e = val;
continue;
}
if (val.max_level >= 10 && !skill.q) {
skill.q = val;
continue;
}
} }
if (avatars.actived_constellation_num >= 3) { if (val.max_level >= 10 && !skill.e) {
if (avatars.constellations[2].effect.includes(skill.e.name)) { skill.e = val;
skill.e.level_current += 3; continue;
} else if (avatars.constellations[2].effect.includes(skill.q.name)) {
skill.q.level_current += 3;
}
} }
if (avatars.actived_constellation_num >= 5) { if (val.max_level >= 10 && !skill.q) {
if (avatars.constellations[4].effect.includes(skill.e.name)) { skill.q = val;
skill.e.level_current += 3; continue;
} else if (avatars.constellations[4].effect.includes(skill.q.name)) {
skill.q.level_current += 3;
}
} }
} }
if (avatars.actived_constellation_num >= 3) {
if (avatars.constellations[2].effect.includes(skill.e.name)) {
skill.e.level_current += 3;
} else if (avatars.constellations[2].effect.includes(skill.q.name)) {
skill.q.level_current += 3;
}
}
if (avatars.actived_constellation_num >= 5) {
if (avatars.constellations[4].effect.includes(skill.e.name)) {
skill.e.level_current += 3;
} else if (avatars.constellations[4].effect.includes(skill.q.name)) {
skill.q.level_current += 3;
}
}
} }
return skill; return skill;
@ -530,10 +646,20 @@ function getDayEnd() {
} }
function getCharacterImg(name) { function getCharacterImg(name) {
if (!fs.existsSync(`./plugins/miao-plugin/resources/characterImg/${name}/`)) {
fs.mkdirSync(`./plugins/miao-plugin/resources/characterImg/${name}/`);
}
let imgs = fs.readdirSync(`./plugins/miao-plugin/resources/characterImg/${name}/`); let imgs = fs.readdirSync(`./plugins/miao-plugin/resources/characterImg/${name}/`);
imgs = imgs.filter((img) => /\.(png|jpg|webp)/.test(img)); imgs = imgs.filter((img) => /\.(png|jpg|webp)/.test(img));
let img = lodash.sample(imgs); let img = lodash.sample(imgs);
if (!img) {
name = "刻晴";
img = "01.jpg";
}
let ret = sizeOf(`./plugins/miao-plugin/resources/characterImg/${name}/${img}`); let ret = sizeOf(`./plugins/miao-plugin/resources/characterImg/${name}/${img}`);
ret.img = `/characterImg/${name}/${img}`; ret.img = `/characterImg/${name}/${img}`;
ret.mode = ret.width > ret.height ? "left" : "bottom"; ret.mode = ret.width > ret.height ? "left" : "bottom";

View File

@ -1,5 +0,0 @@
export default {
apps: {
character: true, // 查询角色
}
}

View File

@ -1,3 +0,0 @@
export default{
}

View File

@ -5,6 +5,11 @@ export const rule = {
priority: 208, priority: 208,
describe: "【#刻晴】角色详情", describe: "【#刻晴】角色详情",
}, },
wife: {
reg: "^#(老婆|妻子|媳妇|娘子|女朋友|女友|女神|老公|丈夫|夫君|郎君|男朋友|男友|男神|女儿|儿子)(1|2)*$",
priority: 206,
describe: "【#老婆,#老公,#女儿】角色详情",
},
setCharacterImg: { setCharacterImg: {
prehash: true, prehash: true,
reg: "^#(添加|更新)(.*)图片(#.*)?(上|右|下|左)?$", reg: "^#(添加|更新)(.*)图片(#.*)?(上|右|下|左)?$",
@ -23,7 +28,7 @@ export const rule = {
}; };
import { character, setCharacterImg } from "./apps/character.js"; import { character, setCharacterImg, wife } from "./apps/character.js";
import { userStat, rebuildCookie } from "./apps/admin.js"; import { userStat, rebuildCookie } from "./apps/admin.js";
export { character, setCharacterImg, userStat, rebuildCookie }; export { character, setCharacterImg, userStat, rebuildCookie, wife };

View File

@ -80,6 +80,7 @@ body {
position: absolute; position: absolute;
top: -60px; top: -60px;
left: 20px; left: 20px;
white-space: nowrap;
} }
.char_name:after { .char_name:after {
@ -106,6 +107,49 @@ body {
letter-spacing: 0; letter-spacing: 0;
} }
.char_name .cons {
display: inline-block;
width: 55px;
height: 35px;
line-height: 35px;
border-radius: 10px;
font-size: 20px;
vertical-align: middle;
text-align: center;
letter-spacing: 0px;
font-family: tttgbnumber;
box-shadow: 0px 0px 3px 0px #000;
text-shadow: 0 0 3px #000;
}
.cons_0 {
background: #666;
}
.cons_1 {
background-color: #62a8ea;
}
.cons_2 {
background-color: #62a8ea;
}
.cons_3 {
background-color: #45b97c;
}
.cons_4 {
background-color: #45b97c;
}
.cons_5 {
background-color: #ff5722;
}
.cons_6 {
background-color: #ff5722;
}
.crown { .crown {
width: 35px; width: 35px;
height: 35px; height: 35px;
@ -351,6 +395,16 @@ body.bottom_mode {
width: 500px; width: 500px;
} }
.bottom_mode .cons {
position: absolute;
left: 5px;
top: -30px;
}
.bottom_mode .uid {
left: 70px;
}
.bottom_mode .info { .bottom_mode .info {
padding-left: 150px; padding-left: 150px;
} }

View File

@ -10,7 +10,8 @@
<div class="info"> <div class="info">
<div class="char_name"> <div class="char_name">
<div class="uid">ID:{{uid}}</div> <div class="uid">ID:{{uid}}</div>
<span>{{ds.name}}</span> <span>{{ds.name}} <span
class="cons cons_{{actived_constellation_num}}">{{actived_constellation_num}}命</span></span>
</div> </div>
<div class="detail"> Lv.{{level}} ❤{{fetter}} <div class="detail"> Lv.{{level}} ❤{{fetter}}
<span class="crown crown_{{crownNum}}"></span> <span class="crown crown_{{crownNum}}"></span>
@ -35,11 +36,15 @@
<div class="talent_{{key}}"> {{name}}<span>{{ talent[key].level_current}}</span></div> <div class="talent_{{key}}"> {{name}}<span>{{ talent[key].level_current}}</span></div>
{{/each}} {{/each}}
</div> </div>
{{else}}
<div class="talent">
<div class="talent_{{key}}">暂无天赋信息</div>
</div>
{{/if}} {{/if}}
<div class="equiv_info"> <div class="equiv_info">
<div class="text">{{text1}}</div> <div class="text">{{text1|| "-"}}</div>
<div class="text">{{text2}}</div> <div class="text">{{text2 || "-"}}</div>
</div> </div>
</div> </div>
<div> <div>