// ==UserScript==
// @name rpg测试
// @namespace http://tampermonkey.net/
// @version 0.5
// @license GPL
// @description 配合酒馆游玩
// @author 从前跟你一样
// @grant unsafeWindow
// @match *://*/*
// @require https://code.jquery.com/jquery-3.4.1.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @require https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/dist/js-yaml.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.1.6/purify.min.js
// @connect vagrantup.com
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @connect sd则此处换成你的电脑域名ip、不需要带端口。
// @connect *
// @connect 192.168.10.2
// @connect 127.0.0.1
// @connect novelai.net
// @match *://*/*
// @description Save user settings
// @grant GM_setValue
// @grant GM_getValue
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
let rpgster = "";
let rpg = {};
rpg["rpg"] = false;
// 添加点击事件监听器到您的按钮或元素上
$(document).ready(function () {
rpgster = setInterval(addNewElement, 2000);
});
// 定义默认设置
const defaultSettings = {
say: "测试",
key: "测试"
};
let settings = {};
for (const [key, defaultValue] of Object.entries(defaultSettings)) {
settings[key] = GM_getValue(key, defaultValue);
// 如果没有读取到值,就使用默认值并保存
if (settings[key] === defaultValue) {
GM_setValue(key, defaultValue);
}
}
function addNewElement() {
const targetElement = document.querySelector('#option_toggle_AN');
if (targetElement) {
clearInterval(rpgster);
const newElement = document.createElement('a');
newElement.id = 'option_toggle_AN3';
const icon = document.createElement('i');
icon.className = 'fa-lg fa-solid fa-note-sticky';
newElement.appendChild(icon);
const span = document.createElement('span');
span.setAttribute('data-i18n', "打开设置");
span.textContent = '打开rpg工具';
newElement.appendChild(span);
// return true; // 表示操作成功完成
targetElement.parentNode.insertBefore(newElement, targetElement.nextSibling);
console.log("New element added successfully");
document.getElementById('option_toggle_AN3').addEventListener('click', showSettingsPanel);
}
}
function createrpgSettingsPanel() {
const panel = document.createElement('div');
panel.id = 'rpgsettings-panel';
panel.style.position = 'absolute';
panel.style.top = '50%';
panel.style.left = '50%';
panel.style.transform = 'translate(-50%, -50%)';
panel.style.backgroundColor = 'black'; // 设置背景为黑色
panel.style.color = 'white';// 设置字体为白色
panel.style.padding = '20px';
panel.style.border = '1px solid white';// 设置边框为白色
panel.style.zIndex = '10000';
panel.style.display = 'none';
panel.style.overflowY = 'auto';
panel.style.maxHeight = '80vh';
panel.innerHTML += `
`;
panel.innerHTML = `
设置面板
启用rpg
说明:
秘钥:
加密世界书
解密世界书
加密角色栏
解密角色栏
测试按钮
关闭
帮助
dc讨论
BY从前我跟你一样
`;
const style = document.createElement('style');
style.textContent = `
#rpgsettings-panel input {
background-color: black !important;
color: white;
border: none;
padding: 5px;
margin: 5px 0;
}
#rpgsettings-panel input, #settings-panel select {
background-color: #444;
color: white;
background-color: black;
border: none;
padding: 5px;
margin: 5px 0;
}
#rpgsettings-panel button {
background-color: #444;
color: white;
border: none;
padding: 5px 10px;
cursor: pointer;
}
#rpgsettings-panel button:hover {
background-color: #555;
}
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: .4s;
border-radius: 34px;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .slider {
background-color: #2196F3;
}
input:checked + .slider:before {
transform: translateX(26px);
}
`;
document.body.appendChild(panel);
document.head.appendChild(style);
document.getElementById('save-AESEword').addEventListener('click', aesEword);
document.getElementById('save-AESDword').addEventListener('click', aesDword);
document.getElementById('save-AESErole').addEventListener('click', aesErole);
document.getElementById('save-AESDrole').addEventListener('click', aesDrole);
document.getElementById('testbu').addEventListener('click', testbu);
document.getElementById('close-rpgsettings').addEventListener('click', hideSettingsPanel);
// 添加滑块切换事件监听器
const toggleCheckbox = document.getElementById('rpgscriptToggle');
toggleCheckbox.addEventListener('change', function () {
if (this.checked) {
rpg["rpg"] = true; // 如果复选框被选中,将变量值设置为true
} else {
rpg["rpg"] = false; // 如果复选框未被选中,将变量值设置为false
}
console.log('isToggled:', rpg["rpg"]); // 打印变量的当前值
});
return panel;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 加解密
// 定义加密函数
function aesEncrypt(plaintext, key, iv) {
const encrypted = CryptoJS.AES.encrypt(plaintext, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
// 定义解密函数
function aesDecrypt(ciphertext, key, iv) {
const decrypted = CryptoJS.AES.decrypt(ciphertext, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
let txt = "";
try {
txt = decrypted.toString(CryptoJS.enc.Utf8);
} catch (e) {
throw e;
}
return txt
}
const secretIv = '1234567890123456';
function aesEword() {
const key = document.getElementById("key");
let secretKey = key.value
// 使用 querySelectorAll 查找所有匹配的元素
const elements = document.querySelectorAll('[data-i18n="[placeholder]What this keyword should mean to the AI, sent verbatim"]');
let p = false;
if (!(elements.length > 0)) {
alert("未找到加密文111本")
return;
// 遍历找到的元素
}
elements.forEach(element => {
// 打印元素的 placeholder 属性值
if (p) {
return;
}
if (element.value == "") {
return;
}
if (isEncrypted(removeExplanation(element.value))) {
alert("已经加密")
p = true;
return;
}
let aesEtxt = "";
try {
aesEtxt = aesEncrypt(element.value, secretKey, secretIv);
} catch (e) {
alert("加密出错")
p = true;
return;
}
element.value = addExplanation(aesEtxt, document.getElementById("say").value);
element.dispatchEvent(new Event('input'));
});
if (!p) {
saveSettings()
alert("加密成功")
}
}
function aesErole() {
const key = document.getElementById("key");
let secretKey = key.value
const element2 = document.getElementById("description_textarea");
const element3 = document.getElementById("firstmessage_textarea");
// 使用 querySelectorAll 查找所有匹配的元素
if (!element2 || !element3) {
alert("未找到加密文本")
return;
}
if (element2.value != "") {
if (isEncrypted(removeExplanation(element2.value))) {
alert("已经加密")
} else {
let aesEtxt = "";
try {
aesEtxt = aesEncrypt(element2.value, secretKey, secretIv);
} catch (e) {
alert("加密出错")
return;
}
element2.value = addExplanation(aesEtxt, document.getElementById("say").value);
element2.dispatchEvent(new Event('input'));
}
}
if (element3.value != "") {
if (isEncrypted(removeExplanation(element3.value))) {
alert("已经加密")
} else {
let aesEtxt = "";
try {
aesEtxt = aesEncrypt(element3.value, secretKey, secretIv);
} catch (e) {
alert("加密出错")
return;
}
element3.value = addExplanation(aesEtxt, document.getElementById("say").value);
element3.dispatchEvent(new Event('input'));
}
}
saveSettings()
alert("加密成功")
}
function aesDword() {
const txt = document.getElementById("key");
let secretKey = txt.value
const elements = document.querySelectorAll('[data-i18n="[placeholder]What this keyword should mean to the AI, sent verbatim"]');
let p = false;
if (!(elements.length > 0)) {
alert("未找到加密文本")
return;
}
elements.forEach(element => {
// 打印元素的 placeholder 属性值
if (element.value == "") {
return;
}
let value = removeExplanation(element.value);
if (!isEncrypted(value)) {
p = true;
return;
}
try {
element.value = aesDecrypt(value, secretKey, secretIv);
} catch (e) {
if (p) {
return;
}
alert("秘钥错误")
p = true;
return;
}
element.dispatchEvent(new Event('input'));
console.log(element.value);
});
alert("解密成功")
}
function aesDrole() {
const key = document.getElementById("key");
let secretKey = key.value
const element2 = document.getElementById("description_textarea");
const element3 = document.getElementById("firstmessage_textarea");
// 使用 querySelectorAll 查找所有匹配的元素
if (!element2 || !element3) {
alert("未找到解密文本")
return;
}
if (element2.value != "") {
let value = removeExplanation(element2.value);
if (!isEncrypted(value)) {
} else {
let aesDtxt = "";
try {
aesDtxt = aesDecrypt(value, secretKey, secretIv);
} catch (e) {
alert("秘钥错误")
return;
}
element2.value = aesDtxt
element2.dispatchEvent(new Event('input'));
}
}
if (element3.value != "") {
let value = removeExplanation(element3.value);
if (!isEncrypted(value)) {
} else {
let aesDtxt = "";
try {
aesDtxt = aesDecrypt(value, secretKey, secretIv);
} catch (e) {
alert("秘钥错误")
return;
}
element3.value = aesDtxt
element3.dispatchEvent(new Event('input'));
}
}
alert("解密成功")
}
function isEncrypted(str) {
// 检查字符串是否只包含 Base64 字符
const base64Regex = /^[A-Za-z0-9+/=]+$/;
if (!base64Regex.test(str)) {
return false;
}
// 检查字符串长度是否为 4 的倍数
if (str.length % 4 !== 0) {
return false;
}
return true;
}
function saveSettings() {
for (const key of Object.keys(defaultSettings)) {
const element = document.getElementById(key);
if (element) {
settings[key] = element.value;
GM_setValue(key, element.value);
}
}
console.log('rpgSettings saved');
// hideSettingsPanel();
}
function closeSettings() {
hideSettingsPanel();
}
function showSettingsPanel() {
for (const key of Object.keys(defaultSettings)) {
const element = document.getElementById(key);
if (element) {
settings[key] = element.value;
GM_setValue(key, element.value);
}
}
console.log('Settings saved:', settings);
const panel = document.getElementById('rpgsettings-panel');
if (!panel) {
createrpgSettingsPanel();
}
document.getElementById('rpgsettings-panel').style.display = 'block';
}
function hideSettingsPanel() {
document.getElementById('rpgsettings-panel').style.display = 'none';
}
// Your code here...
// 函数1:在字符串中添加<说明>标签
function addExplanation(str, explanation) {
return "<说明>" + explanation + "说明>" + str;
}
// 函数2:去除字符串中的<说明>标签及其内容
function removeExplanation(str) {
return str.replace(/<说明>.*?<\/说明>/g, "");
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function testbu() {
renwu();
}
function gift(name) {
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//其他人物界面
function otherCharacters(name) {
let character = getOtherAttributes(name);
const inventory = document.createElement('div');
inventory.id = 'inventory';
inventory.style.position = 'absolute';
inventory.style.top = '50%';
inventory.style.left = '50%';
inventory.style.transform = 'translate(-50%, -50%)';
inventory.style.backgroundColor = 'black';
inventory.style.color = 'white';
inventory.style.padding = '20px';
inventory.style.border = '1px solid white';
inventory.style.zIndex = '10000';
inventory.style.display = 'block';
inventory.style.overflowY = 'auto';
inventory.style.borderRadius = '8px';
inventory.style.maxHeight = '80vh';
inventory.style.width = '80%';
inventory.style.maxWidth = '600px';
const closeButton = document.createElement('button');
closeButton.textContent = '关闭';
closeButton.style.position = 'absolute';
closeButton.style.top = '10px';
closeButton.style.right = '10px';
closeButton.addEventListener('click', () => {
inventory.style.display = 'none';
inventory.remove();
});
inventory.appendChild(closeButton);
const categories = ['人物信息'];
if (rpg[name][1]["角色"].hasOwnProperty("rpg属性json")) {
if (rpg[name][1]["角色"]["rpg属性json"].hasOwnProperty("可出售物品")) {
categories.push("商店");
}
if (rpg[name][1]["角色"]["rpg属性json"].hasOwnProperty("可制造物品")) {
categories.push("制造");
}
if (rpg[name][1]["角色"]["rpg属性json"].hasOwnProperty("可接任务")) {
categories.push("可接任务");
}
if (rpg[name][1]["角色"]["rpg属性json"].hasOwnProperty("可学习技能")) {
categories.push("可学习技能");
}
}
const buttons = categories.map(category => {
const button = document.createElement('button');
button.textContent = category;
button.style.marginRight = '10px';
button.addEventListener('click', () => {
showItems(category);
});
return button;
});
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
buttons.forEach(button => buttonContainer.appendChild(button));
inventory.appendChild(buttonContainer);
const itemList = document.createElement('ul');
itemList.style.listStyle = 'none';
itemList.style.padding = '0';
inventory.appendChild(itemList);
document.body.appendChild(inventory);
function showItems(category) {
if (category == "人物信息") {
var health = Number(character.health.split('/')[0]) / Number(character.health.split('/')[1]) * 100; //分割字符串
var mana = Number(character.mana.split('/')[0]) / Number(character.mana.split('/')[1]) * 100; //分割字符串
var xp = Number(character.xp.split('/')[0]) / Number(character.xp.split('/')[1]) * 100;
itemList.innerHTML = `
${safe(character.name)}
等级:
${safe(character.level)}
阵营:
${safe(character.camp)}
人物简介:
${safe(character.Biography)}
性别:
${safe(character.gender)}
血量:
${safe(character.health)}
攻击力:
${safe(character.attack)}
防御力:
${safe(character.defense)}
`;
}
if (category == "商店") {
const categories= ['装备', "可消耗物品", "材料"];
const buttons = categories.map(category => {
const button = document.createElement('button');
button.style.marginRight = '10px';
button.style.marginRight = '10px';
button.style.backgroundColor = '#007bff';
button.style.color = '#fff';
button.style.border = 'none';
button.style.borderRadius = '1px';
button.style.cursor = 'pointer';
button.textContent = category;
button.style.marginRight = '10px';
button.id=name;
button.addEventListener('click', (Event) => {
showshop(category,Event.target.id);
});
return button;
});
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
buttons.forEach(button => buttonContainer.appendChild(button));
// let nowgold=document.createElement('button');
// nowgold.style.marginRight = '10px';
// nowgold.textContent = `当前拥有金币:`;//${safe(rpg["用户"][1]["角色"]["拥有金币"]||"0")} ;
// nowgold.style.marginRight = '10px';
// nowgold.style.backgroundColor = '#007bff';
// nowgold.style.color = '#fff';
// nowgold.style.border = 'none';
// nowgold.style.borderRadius = '1px';
// nowgold.style.cursor = 'pointer';
// nowgold.style.marginRight = '10px';
// nowgold.id="nowgold";
// buttonContainer.appendChild(nowgold);
let nowgoldnumber=document.createElement('div');
nowgoldnumber.style.marginRight = '10px';
nowgoldnumber.textContent = `$10`;
nowgoldnumber.style.marginRight = '10px';
nowgoldnumber.style.border = 'none';
nowgoldnumber.style.borderRadius = '1px';
nowgoldnumber.width='100%';
nowgoldnumber.height='100%';
nowgoldnumber.style.marginRight = '10px';
nowgoldnumber.id="coinContainer";
nowgoldnumber.classList.add('coin');
const style = document.createElement('style');// line-height: 100px; // border-radius: 50%; // box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
style.textContent = `
.coin {
background: linear-gradient(45deg, #ffd700, #c79810);
display: inline-block;
margin: 10px;
text-align: center;
font-size: 18px;
color: #fff;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
}
`;
itemList.innerHTML='';
document.head.appendChild(style);
buttonContainer.appendChild(nowgoldnumber);
//出售按钮
const buttons2 = categories.map(category => {
const button = document.createElement('button');
button.style.marginRight = '10px';
button.style.marginRight = '10px';
button.style.backgroundColor = '#007bff';
button.style.color = '#fff';
button.style.border = 'none';
button.style.borderRadius = '1px';
button.style.cursor = 'pointer';
button.textContent = "卖"+category;
button.style.marginRight = '10px';
button.id=name;
button.addEventListener('click', (Event) => {
showshop("卖"+category,Event.target.id);
});
return button;
});
buttons2.forEach(button => buttonContainer.appendChild(button));
itemList.appendChild(buttonContainer);
const coinContainer = document.getElementById('coinContainer');
coinContainer.textContent = `$${safe(rpg["用户"][1]["角色"]["拥有金币"]||"0")}`;
const itemList2 = document.createElement('ul');
itemList2.style.listStyle = 'none';
itemList2.style.padding = '0';
itemList.appendChild(itemList2);
function showshop(category,name){ //商店
///////////买装备
let eqs=[];
let eqs2=[]
if (category == "装备") {
console.log("name",name)
let commodity = rpg[name][1]["角色"]["rpg属性json"]["可出售物品"];
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
if (eq.物品分类 != "装备") {
continue;
}
console.log("可出售物品",commodity)
for(let w=0;w < rpg[eq.物品分类][1]["json"].length;w++){
if(rpg[eq.物品分类][1]["json"][w].名称==eq.名称){
let 数量=eq.数量;
eq=rpg[eq.物品分类][1]["json"][w];
eq.数量=数量;
break;
}
}
console.log("eq", eq);
let price=Number(`${safe(eq.价值)}`)
let innerHTML="";
if (Object.keys(eq).length !== 0) {
innerHTML += `
${safe(eq.部位)}
名称:
${safe(eq.名称)}
简介:
${safe(eq.简介)}
攻击力:
${safe(eq.攻击力 || '无')}
防御:
${safe(eq.防御 || '无')}
价格:
${price}金币
数量:
${safe(eq.数量)}个
`
if (eq.hasOwnProperty("附带技能")&&Object.keys(eq.附带技能).length !== 0) {
innerHTML += `
附带技能:
${safe(eq.附带技能[名称] || '无')}
技能简介:
${safe(eq.附带技能[简介] || '无')}
`
}
innerHTML += `
购买
`
if(Number(eq.数量)>=10){
innerHTML += `
购买10个
`;
}
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}//for
}
if (category == "可消耗物品") {
console.log("name",name)
let commodity = rpg[name][1]["角色"]["rpg属性json"]["可出售物品"];
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
if (eq.物品分类 != "可消耗物品") {
continue;
}
console.log("可出售物品",commodity)
for(let w=0;w < rpg[eq.物品分类][1]["json"].length;w++){
if(rpg[eq.物品分类][1]["json"][w].名称==eq.名称){
let 数量=eq.数量;
eq=rpg[eq.物品分类][1]["json"][w];
eq.数量=数量;
break;
}
}
console.log("eq", eq);
let innerHTML="";
if (Object.keys(eq).length !== 0) {
innerHTML +=`
${safe(eq.名称)}
简介:
${safe(eq.简介)}
价格:
${safe(eq.价值)}金币
数量:
${safe(eq.数量)}个
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `|回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `|回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `|增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `|增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
购买
`
if(Number(eq.数量)>=10){
innerHTML += `
购买10个
`;
}
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}
}
if (category == "材料") {
console.log("name",name)
let commodity = rpg[name][1]["角色"]["rpg属性json"]["可出售物品"];
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
if (eq.物品分类 != "材料") {
continue;
}
console.log("材料",commodity)
for(let w=0;w < rpg[eq.物品分类][1]["json"].length;w++){
if(rpg[eq.物品分类][1]["json"][w].名称==eq.名称){
let 数量=eq.数量;
eq=rpg[eq.物品分类][1]["json"][w];
eq.数量=数量;
break;
}
}
console.log("eq", eq);
let innerHTML="";
if (Object.keys(eq).length !== 0) {
innerHTML +=`
${safe(eq.名称)}
简介:
${safe(eq.简介)}
价格:
${safe(eq.价值)}金币
数量:
${safe(eq.数量)}个
`
innerHTML += `
购买
`
if(Number(eq.数量)>=10){
innerHTML += `
购买10个
`;
}
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}
}
////////卖东西
if (category == "卖装备") {
console.log("name",name)
let commodity = rpg["用户背包"][1]["json"]["装备"]
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
let innerHTML="";
if (eq.物品分类 != "装备") {
continue;
}
if(rpg["用户"][1]["角色"]["战斗属性json"]["已装备"][eq.部位].名称==eq.名称){
continue;
}
console.log("装备",commodity)
for(let w=0;w < rpg[eq.物品分类][1]["json"].length;w++){
if(rpg[eq.物品分类][1]["json"][w].名称==eq.名称){
let 数量=eq.数量;
eq=rpg[eq.物品分类][1]["json"][w];
eq.数量=数量;
break;
}
}
console.log("eq", eq);
if (Object.keys(eq).length !== 0) {
innerHTML += `
${safe(eq.部位)}
名称:
${safe(eq.名称)}
简介:
${safe(eq.简介)}
攻击力:
${safe(eq.攻击力 || '无')}
防御:
${safe(eq.防御 || '无')}
价格:
${safe(Number(eq.价值)/100*80)}金币
数量:
${safe(eq.数量)}个
`
if (eq.hasOwnProperty("附带技能")&&Object.keys(eq.附带技能).length !== 0) {
innerHTML += `
附带技能:
${safe(eq.附带技能[名称] || '无')}
技能简介:
${safe(eq.附带技能[简介] || '无')}
`
}
innerHTML += `
出售
`
if(Number(eq.数量)>=10){
innerHTML += `
出售10个
`;
}
eqs2.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}
}
if (category == "卖可消耗物品") {
console.log("name",name)
let commodity = rpg["用户背包"][1]["json"]["可消耗物品"]
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
if (eq.物品分类 != "可消耗物品") {
continue;
}
let eqeq=rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"];
let go=false;
for(let w=0;w
${safe(eq.名称)}
简介:
${safe(eq.简介)}
价格:
${safe(Number(eq.价值)/100*80)}金币
数量:
${safe(eq.数量)}个
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `|回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `|回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `|增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `|增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
出售
`
if(Number(eq.数量)>=10){
innerHTML += `
出售10个
`;
}
eqs2.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}
}
if (category == "卖材料") {
console.log("name",name)
let commodity = rpg["用户背包"][1]["json"]["材料"]
itemList2.innerHTML = ``;
for (let i = 0; i < commodity.length; i++) {
let eq = commodity[i];
if (eq.物品分类 != "材料") {
continue;
}
console.log("材料",commodity)
for(let w=0;w < rpg[eq.物品分类][1]["json"].length;w++){
if(rpg[eq.物品分类][1]["json"][w].名称==eq.名称){
let 数量=eq.数量;
eq=rpg[eq.物品分类][1]["json"][w];
eq.数量=数量;
break;
}
}
console.log("eq", eq);
let innerHTML="";
if (Object.keys(eq).length !== 0) {
innerHTML +=`
${safe(eq.名称)}
简介:
${safe(eq.简介)}
价格:
${safe(Number(eq.价值)/100*80)}金币
数量:
${safe(eq.数量)}个
`
innerHTML += `
出售
`
if(Number(eq.数量)>=10){
innerHTML += `
出售10个
`;
}
eqs2.push(eq);
itemList2.innerHTML+=innerHTML;
} else {
itemList2.innerHTML += `
`
}
}
}
console.log("eqs",eqs)
for(let e=0;e
${safe(eq.部位)}
名称:
${safe(eq.名称)}
简介:
${safe(eq.简介)}
攻击力:
${safe(eq.攻击力 || '无')}
防御:
${safe(eq.防御 || '无')}
价格:
${price}金币
所需材料:
${safe(eq.所需材料)}个
`
if (eq.hasOwnProperty("附带技能")&&Object.keys(eq.附带技能).length !== 0) {
innerHTML += `
附带技能:
${safe(eq.附带技能[名称] || '无')}
技能简介:
${safe(eq.附带技能[简介] || '无')}
`
}
innerHTML += `
制作
`
innerHTML += `
制作10个
`;
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
}
if(Object.keys(eq).length !== 0&&eq.物品分类=="可消耗物品"){
innerHTML +=`
${safe(eq.物品分类)}
简介:
${safe(eq.名称)}
简介:
${safe(eq.简介)}
价格:
${safe(eq.价值)}金币
所需材料:
${safe(eq.所需材料)}个
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `|回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `|回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `|增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `|增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
制作
`
innerHTML += `
制作10个
`;
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
}
}//for
if(eqs.length>0){
for(let i=0;i
${safe(eq.名称)}
是否主动:
${safe(eq.是否主动)}
简介:
${safe(eq.简介)}
消耗蓝量:
${safe(eq.消耗蓝量)}
特殊效果:
${safe(eq.特殊效果)}
价格:
${safe(eq.价值)}
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `\n回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `\n回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `\n增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `\n增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
学习
`
eqs.push(eq);
itemList2.innerHTML+=innerHTML;
////////////////////////
}//内容
}//循环
if(eqs.length>0){
for(let i=0;i0){
cls2.push("1");
}
if(cnum<0){
alert("材料不足");
return false;
}
}
}
}
if(cls.length !== cls2.length){
alert("材料不足")
return;
}
for(let c=0;c0){
rpg["用户背包"][1]["json"]["材料"][c].数量=cnum;
}
if(cnum<0){
alert("材料不足");
return false;
}
}
}
}
}
let go=true;
for(let y=0;y0){
cls2.push("1");
}
if(cnum<0){
alert("材料不足");
return false;
}
}
}
}
if(cls.length !== cls2.length){
alert("材料不足")
return;
}
for(let c=0;c0){
rpg["用户背包"][1]["json"]["材料"][c].数量=cnum;
}
if(cnum<0){
alert("材料不足");
return false;
}
}
}
}
let go=true;
for(let y=0;y {
inventory.style.display = 'none';
inventory.remove();
});
inventory.appendChild(closeButton);
const categories = ['已接任务', "已完成任务"];
const buttons = categories.map(category => {
const button = document.createElement('button');
button.textContent = category;
button.style.marginRight = '10px';
button.addEventListener('click', () => {
showItems(category);
});
return button;
});
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
buttons.forEach(button => buttonContainer.appendChild(button));
inventory.appendChild(buttonContainer);
const itemList = document.createElement('ul');
itemList.style.listStyle = 'none';
itemList.style.padding = '0';
inventory.appendChild(itemList);
document.body.appendChild(inventory);
function showItems(category) {
itemList.innerHTML = '';
if (category == "已接任务") {
let character = rpg["用户"][1]["角色"]["rpg属性json"]["已接任务"];
itemList.innerHTML = "";
let innerHTML = '';
for (let i = 0; i < character.length; i++) {
let eq = character[i];
innerHTML += `
${safe(eq.名称)}
发布者:
${safe(eq.发布者)}
详情:
${safe(eq.详情)}
完成条件:
${safe(eq.完成条件)}
`
let textContent1 = ``;
for (let w = 0; w < eq.奖励.length; w++) {
if (eq.奖励[w] !== "0") {
textContent1 += `\n奖励${safe(eq.奖励[w]["物品分类"])}${safe(eq.奖励[w]["名称"])}${safe(eq.奖励[w]["数量"])}个`
}
}
innerHTML += `
奖励:
${safe(textContent1)}
`;
innerHTML += `
放弃任务
`;
console.log("innerHTML", innerHTML)
itemList.innerHTML = innerHTML;
let elements = document.getElementsByClassName("unloadmission");
if (elements.length > 0) {
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener("click", function (Event) {
unloadmission(Event.target.id);
})
}
}
}
}
}
function unloadmission(id) {
let character = rpg["用户"][1]["角色"]["rpg属性json"];
character["已接任务"].splice(id, 1);
alert("成功放弃任务");
showItems("已接任务");
}
showItems("已接任务");
}
//_______________________________________________________________________________________________________________________
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//人物
function renwu() {
const inventory = document.createElement('div');
inventory.id = 'inventory';
inventory.style.position = 'absolute';
inventory.style.top = '50%';
inventory.style.left = '50%';
inventory.style.transform = 'translate(-50%, -50%)';
inventory.style.backgroundColor = 'black';
inventory.style.color = 'white';
inventory.style.padding = '20px';
inventory.style.border = '1px solid white';
inventory.style.zIndex = '10000';
inventory.style.display = 'block';
inventory.style.overflowY = 'auto';
inventory.style.borderRadius = '8px';
inventory.style.maxHeight = '80vh';
inventory.style.width = '80%';
inventory.style.maxWidth = '600px';
const closeButton = document.createElement('button');
closeButton.textContent = '关闭';
closeButton.style.position = 'absolute';
closeButton.style.top = '10px';
closeButton.style.right = '10px';
closeButton.addEventListener('click', () => {
inventory.style.display = 'none';
inventory.remove();
});
inventory.appendChild(closeButton);
const categories = ['人物信息', '装备', '可消耗物品', "技能", 'buff'];
const buttons = categories.map(category => {
const button = document.createElement('button');
button.textContent = category;
button.style.marginRight = '10px';
button.addEventListener('click', () => {
showItems(category);
});
return button;
});
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
buttons.forEach(button => buttonContainer.appendChild(button));
inventory.appendChild(buttonContainer);
const itemList = document.createElement('ul');
itemList.style.listStyle = 'none';
itemList.style.padding = '0';
inventory.appendChild(itemList);
document.body.appendChild(inventory);
function showItems(category) {
if (category == "人物信息") {
let character = rpg["用户属性"];
var health = Number(character.health.split('/')[0]) / Number(character.health.split('/')[1]) * 100; //分割字符串
var mana = Number(character.mana.split('/')[0]) / Number(character.mana.split('/')[1]) * 100; //分割字符串
var xp = Number(character.xp.split('/')[0]) / Number(character.xp.split('/')[1]) * 100;
itemList.innerHTML = `
${safe(character.name)}
等级:
${safe(character.level)}
阵营:
${safe(character.camp)}
人物简介:
${safe(character.Biography)}
性别:
${safe(character.gender)}
血量:
${safe(character.health)}
攻击力:
${safe(character.attack)}
防御力:
${safe(character.defense)}
`;
}
if (category == "装备") {
let character = rpg["用户"][1]["角色"]["战斗属性json"]["已装备"];
itemList.innerHTML = "";
for (let [key, eq] of Object.entries(character)) {
console.log("eq", eq.附带技能);
if (Object.keys(eq).length !== 0) {
itemList.innerHTML += `
${safe(eq.部位)}
名称:
${safe(eq.名称)}
简介:
${safe(eq.简介)}
攻击力:
${safe(eq.攻击力 || '无')}
防御:
${safe(eq.防御 || '无')}
`
if (eq.hasOwnProperty("附带技能")&&Object.keys(eq.附带技能).length !== 0) {
itemList.innerHTML += `
附带技能:
${safe(eq.附带技能[名称] || '无')}
技能简介:
${safe(eq.附带技能[简介] || '无')}
`
}
itemList.innerHTML += `
卸下装备
`;
} else {
itemList.innerHTML += `
`
}
}
}
let elements = document.getElementsByClassName("unloadeq");
if (elements.length > 0) {
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener("click", function (Event) {
unloadeq(Event.target.id);
})
}
}
if (category == "可消耗物品") {
let character = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"];
itemList.innerHTML = "";
let innerHTML = '';
for (let i = 0; i < character.length; i++) {
let eq = character[i];
innerHTML += `
${safe(eq.名称)}
简介:
${safe(eq.简介)}
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `\n回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `\n回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `\n增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `\n增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
卸下可消耗物品
`;
console.log("innerHTML", innerHTML)
itemList.innerHTML = innerHTML;
let elements = document.getElementsByClassName("unloadwp");
if (elements.length > 0) {
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener("click", function (Event) {
unloadwp(Event.target.id);
})
}
}
}
}
if (category == "技能") {
let character = rpg["用户"][1]["角色"]["战斗属性json"]["技能"];
itemList.innerHTML = "";
let innerHTML = '';
for (let i = 0; i < character.length; i++) {
let eq = character[i];
innerHTML += `
${safe(eq.名称)}
是否主动:
${safe(eq.是否主动)}
简介:
${safe(eq.简介)}
消耗蓝量:
${safe(eq.消耗蓝量)}
特殊效果:
${safe(eq.特殊效果)}
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `\n回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `\n回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `\n增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `\n增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
卸下技能
`;
console.log("innerHTML", innerHTML)
itemList.innerHTML = innerHTML;
let elements = document.getElementsByClassName("unloadjineng");
if (elements.length > 0) {
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener("click", function (Event) {
unloadjineng(Event.target.id);
})
}
}
}
}
if (category == "buff") {
let character = rpg["用户"][1]["角色"]["战斗属性json"]["buff"];
itemList.innerHTML = "";
let innerHTML = '';
for (let i = 0; i < character.length; i++) {
let eq = character[i];
innerHTML += `
${safe(eq.名称)}
简介:
${safe(eq.简介)}
特殊效果:
${safe(eq.特殊效果 || "无")}
`
let textContent1 = ``;
for (let w = 0; w < eq.我方效果.length; w++) {
if (eq.我方效果[w] !== "0") {
switch (w) {
case 0:
textContent1 += `\n回复生命: ${safe(eq.我方效果[w])}`;
break;
case 1:
textContent1 += `\n回复蓝量: ${safe(eq.我方效果[w])}`;
break;
case 2:
textContent1 += `\n增加攻击力: ${safe(eq.我方效果[w])}`;
break;
case 3:
textContent1 += `\n增加防御: ${safe(eq.我方效果[w])}`;
break;
}
}
}
innerHTML += `
我方效果:
${safe(textContent1)}
`;
let textContent2 = ``;
for (let w = 0; w < eq.敌方效果.length; w++) {
if (eq.敌方效果[w] !== "0") {
switch (w) {
case 0:
textContent2 += `|造成伤害: ${safe(eq.敌方效果[w])}`;
break;
case 1:
textContent2 += `|损失蓝量: ${safe(eq.敌方效果[w])}`;
break;
case 2:
textContent2 += `|降低攻击力: ${safe(eq.敌方效果[w])}`;
break;
case 3:
textContent2 += `|降低防御: ${safe(eq.敌方效果[w])}`;
break;
}
}
}
innerHTML += `
敌方效果:
${safe(textContent2)}
`;
innerHTML += `
`;
console.log("innerHTML", innerHTML)
itemList.innerHTML = innerHTML;
}
}
}
function unloadeq(key) {
let character = rpg["用户"][1]["角色"]["战斗属性json"]["已装备"];
character[key] = "";
alert("成功卸下装备");
showItems("装备");
}
function unloadwp(id) {
let character = rpg["用户"][1]["角色"]["战斗属性json"];
character["可消耗物品"].splice(id, 1);
alert("成功卸下可消耗物品");
showItems("可消耗物品");
}
function unloadjineng(id) {
let character = rpg["用户"][1]["角色"]["战斗属性json"];
character["技能"].splice(id, 1);
alert("成功卸下技能");
showItems("技能");
}
showItems("人物信息");
}
//_______________________________________________________________________________________________________________________
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//背包
function beibao() {
//document.body.appendChild(stylebeibao);
const inventory = document.createElement('div');
inventory.id = 'inventory';
inventory.style.position = 'absolute';
inventory.style.top = '50%';
inventory.style.left = '50%';
inventory.style.transform = 'translate(-50%, -50%)';
inventory.style.backgroundColor = 'black';
inventory.style.color = 'white';
inventory.style.padding = '20px';
inventory.style.border = '1px solid white';
inventory.style.zIndex = '10000';
inventory.style.display = 'block';
inventory.style.overflowY = 'auto';
inventory.style.borderRadius = '8px';
inventory.style.maxHeight = '80vh';
inventory.style.width = '80%';
inventory.style.maxWidth = '600px';
const closeButton = document.createElement('button');
closeButton.textContent = '关闭';
closeButton.style.position = 'absolute';
closeButton.style.top = '10px';
closeButton.style.right = '10px';
closeButton.addEventListener('click', () => {
inventory.style.display = 'none';
inventory.remove();
});
inventory.appendChild(closeButton);
const categories = ['技能', '可消耗物品', '装备', '材料'];
const buttons = categories.map(category => {
const button = document.createElement('button');
button.textContent = category;
button.style.marginRight = '10px';
button.addEventListener('click', () => {
showItems(category);
});
return button;
});
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
buttons.forEach(button => buttonContainer.appendChild(button));
inventory.appendChild(buttonContainer);
const itemList = document.createElement('ul');
itemList.style.listStyle = 'none';
itemList.style.padding = '0';
inventory.appendChild(itemList);
document.body.appendChild(inventory);
function showItems(category) {
itemList.innerHTML = '';
const items = rpg["用户背包"][1]["json"][category];
console.log("items", items);
// const items = rpg["用户背包"];//data.filter(item => item.物品分类 === category);
for (var i = 0; i < items.length; i++) {
let item = items[i]
let ii = i;
const listItem = document.createElement('li');
listItem.style.marginBottom = '10px';
const name = document.createElement('div');
name.textContent = item.名称;
name.style.fontWeight = 'bold';
listItem.appendChild(name);
const intro = document.createElement('div');
intro.textContent = item.简介;
listItem.appendChild(intro);
if (item.物品分类 === '技能') {
const activeType = document.createElement('div');
activeType.textContent = `类型: ${safe(item.是否主动)}`;
listItem.appendChild(activeType);
const mpCost = document.createElement('div');
mpCost.textContent = `消耗蓝量: ${safe(item.消耗蓝量)}`;
listItem.appendChild(mpCost);
}
if (item.物品分类 === '技能' || item.物品分类 === '可消耗物品') {
const effect = document.createElement('div');
effect.textContent = `特殊效果: ${safe(item.特殊效果)}`;
listItem.appendChild(effect);
}
if (item.物品分类 === '可消耗物品' || item.物品分类 === '技能') {
const effect = document.createElement('div');
effect.textContent = `我方效果:`;
for (let w = 0; w < item.我方效果.length; w++) {
if (item.我方效果[w] !== "0") {
switch (w) {
case 0:
effect.textContent += `\n回复生命: ${safe(item.我方效果[w])}`;
break;
case 1:
effect.textContent += `\n回复蓝量: ${safe(item.我方效果[w])}`;
break;
case 2:
effect.textContent += `\n增加攻击力: ${safe(item.我方效果[w])}`;
break;
case 3:
effect.textContent += `\n增加防御: ${safe(item.我方效果[w])}`;
break;
}
}
}
listItem.appendChild(effect);
const effect2 = document.createElement('div');
effect2.textContent = `敌方效果:`;
for (let d = 0; d < item.敌方效果.length; d++) {
if (item.敌方效果[d] !== "0") {
switch (d) {
case 0:
effect2.textContent += `\n造成伤害: ${safe(item.敌方效果[0])}`;
break;
case 1:
effect2.textContent += `\n损失蓝量: ${safe(item.敌方效果[1])}`;
break;
case 2:
effect2.textContent += `\n降低攻击力: ${safe(item.敌方效果[2])}`;
break;
case 3:
effect2.textContent += `\n降低防御: ${safe(item.敌方效果[3])}`;
break;
}
}
}
listItem.appendChild(effect2);
}
if (item.物品分类 === "装备") {
const attack = document.createElement('div');
attack.textContent = `攻击力: ${safe(item.攻击力 || '无')}`;
listItem.appendChild(attack);
const buwei = document.createElement('div');
buwei.textContent = `部位: ${safe(item.部位 || '无')}`;
listItem.appendChild(buwei);
const defense = document.createElement('div');
defense.textContent = `防御: ${safe(item.防御 || '无')}`;
listItem.appendChild(defense);
}
const shuliang = document.createElement('div');
shuliang.textContent = `数量: ${safe(item.数量 || '无')}`;
listItem.appendChild(shuliang);
const buttonContainer = document.createElement('div');
buttonContainer.style.marginBottom = '10px';
if (item.物品分类 === "装备") { //装备按钮
const eqbutton = document.createElement('button');
eqbutton.style.marginRight = '10px';
eqbutton.textContent = '装备';
eqbutton.style.marginRight = '10px';
eqbutton.style.backgroundColor = '#007bff';
eqbutton.style.color = '#fff';
eqbutton.style.border = 'none';
eqbutton.style.borderRadius = '1px';
eqbutton.style.cursor = 'pointer';
if (item["名称"] == rpg["用户"][1]["角色"]["战斗属性json"]["已装备"][item.部位]["名称"]) {
eqbutton.textContent = '已装备';
eqbutton.disabled = true;
buttonContainer.appendChild(eqbutton);
} else {
eqbutton.addEventListener('click', (event) => {
console.log("item", item);
var a = eqeq(event.target, "用户", item, showItems);
});
const delbut = document.createElement('button');
delbut.id = Math.random().toString(36).substr(2, 9);
eqbutton.name = delbut.id;
buttonContainer.appendChild(eqbutton);
delbut.style.marginRight = '10px';
delbut.textContent = '丢弃';
delbut.style.marginRight = '10px';
// eqbutton.style.padding = '10px 20px';
delbut.style.backgroundColor = '#6c757d';
delbut.style.color = '#fff';
delbut.style.border = 'none';
delbut.style.borderRadius = '1px';
delbut.style.cursor = 'pointer';
delbut.addEventListener('click', (event) => {
var b = stylishConfirm("确定要丢弃吗").then((result) => {
if (result) {
console.log("丢弃", rpg["用户背包"][1]["json"]["装备"][ii]);
var num = Number(rpg["用户背包"][1]["json"]["装备"][ii]["数量"]) - 1;
if (num < 1) {
rpg["用户背包"][1]["json"]["装备"].splice(ii, 1);
} else {
rpg["用户背包"][1]["json"]["装备"][ii]["数量"] = num
}
showItems('装备');
return true;
} else {
return false;
}
})
});
buttonContainer.appendChild(delbut);
}
}
if (item.物品分类 === "技能") { //技能按钮
const eqbutton = document.createElement('button');
eqbutton.style.marginRight = '10px';
eqbutton.textContent = '装备';
eqbutton.style.marginRight = '10px';
eqbutton.style.backgroundColor = '#007bff';
eqbutton.style.color = '#fff';
eqbutton.style.border = 'none';
eqbutton.style.borderRadius = '1px';
eqbutton.style.cursor = 'pointer';
const eqbutton2 = document.createElement('button');
eqbutton2.style.marginRight = '10px';
eqbutton2.textContent = '使用';
eqbutton2.style.marginRight = '10px';
eqbutton2.style.backgroundColor = '#007bff';
eqbutton2.style.color = '#fff';
eqbutton2.style.border = 'none';
eqbutton2.style.borderRadius = '1px';
eqbutton2.style.cursor = 'pointer';
eqbutton2.addEventListener('click', (event) => {
var a = usejineng(event.target, "用户", item, showItems);
});
if (item["是否主动"] == "主动") {
buttonContainer.appendChild(eqbutton2);
}
var eqsjineng = rpg["用户"][1]["角色"]["战斗属性json"]["技能"]
for (var m = 0; m < eqsjineng.length; m++) {
if (eqsjineng[m]["名称"] == item["名称"]) {
eqbutton.disabled = true;
eqbutton.textContent = '已装备';
}
}
if (eqbutton.textContent == "已装备") {
buttonContainer.appendChild(eqbutton);
} else {
console.log("技能", eqbutton.textContent);
eqbutton.addEventListener('click', (event) => {
var a = eqjineng(event.target, "用户", item, showItems);
});
const delbut = document.createElement('button');
delbut.id = Math.random().toString(36).substr(2, 9);
eqbutton.name = delbut.id;
buttonContainer.appendChild(eqbutton);
delbut.style.marginRight = '10px';
delbut.textContent = '丢弃';
delbut.style.marginRight = '10px';
// eqbutton.style.padding = '10px 20px';
delbut.style.backgroundColor = '#6c757d';
delbut.style.color = '#fff';
delbut.style.border = 'none';
delbut.style.borderRadius = '1px';
delbut.style.cursor = 'pointer';
delbut.addEventListener('click', (event) => {
var b = stylishConfirm("确定要丢弃吗").then((result) => {
if (result) {
console.log("丢弃", rpg["用户背包"][1]["json"]["技能"][ii]);
var num = Number(rpg["用户背包"][1]["json"]["技能"][ii]["数量"]) - 1;
if (num < 1) {
rpg["用户背包"][1]["json"]["技能"].splice(ii, 1);
} else {
rpg["用户背包"][1]["json"]["技能"][ii]["数量"] = num
}
showItems('技能');
return true;
} else {
return false;
}
})
});
buttonContainer.appendChild(delbut);
}
}
if (item.物品分类 === "可消耗物品") { //可消耗物品按钮
const eqbutton = document.createElement('button');
eqbutton.style.marginRight = '10px';
eqbutton.textContent = '使用';
eqbutton.style.marginRight = '10px';
eqbutton.style.backgroundColor = '#007bff';
eqbutton.style.color = '#fff';
eqbutton.style.border = 'none';
eqbutton.style.borderRadius = '1px';
eqbutton.style.cursor = 'pointer';
const eqbutton2 = document.createElement('button');
eqbutton2.style.marginRight = '10px';
eqbutton2.textContent = '装备';
eqbutton2.style.marginRight = '10px';
eqbutton2.style.backgroundColor = '#007bff';
eqbutton2.style.color = '#fff';
eqbutton2.style.border = 'none';
eqbutton2.style.borderRadius = '1px';
eqbutton2.style.cursor = 'pointer';
let eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
for (var m = 0; m < eqswp.length; m++) {
if (eqswp[m]["名称"] == item["名称"]) {
eqbutton2.disabled = true;
eqbutton2.textContent = '已装备';
}
}
if (eqbutton.textContent == "已装备") {
} else {
eqbutton2.addEventListener('click', (event) => {
var a = eqwp(event.target, "用户", item, showItems);
});
console.log("可消耗物品", eqbutton.textContent);
eqbutton.addEventListener('click', (event) => {
var a = usewp(event.target, "用户", item, showItems);
});
const delbut = document.createElement('button');
if (eqbutton.textContent == "已装备") {
delbut.name = true;
} else {
delbut.name = false;
}
delbut.id = Math.random().toString(36).substr(2, 9);
eqbutton.name = delbut.id;
buttonContainer.appendChild(eqbutton);
delbut.style.marginRight = '10px';
delbut.textContent = '丢弃';
delbut.style.marginRight = '10px';
// eqbutton.style.padding = '10px 20px';
delbut.style.backgroundColor = '#6c757d';
delbut.style.color = '#fff';
delbut.style.border = 'none';
delbut.style.borderRadius = '1px';
delbut.style.cursor = 'pointer';
delbut.addEventListener('click', (event) => {
var b = stylishConfirm("确定要丢弃吗").then((result) => {
if (result) {
console.log("丢弃", rpg["用户背包"][1]["json"]["可消耗物品"][ii]);
let num = Number(rpg["用户背包"][1]["json"]["可消耗物品"][ii]["数量"]) - 1;
if (num < 1) {
rpg["用户背包"][1]["json"]["可消耗物品"].splice(ii, 1);
if (event.target.name) {
let eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
for (var eqd = 0; eqd < eqswp.length; eqd++) {
if (eqswp[eqd]["名称"] == item["名称"]) {
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"].splice(eqd, 1);
}
}
}
} else {
rpg["用户背包"][1]["json"]["可消耗物品"][ii]["数量"] = num
if (event.target.name) {
let eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
for (var eqd = 0; eqd < eqswp.length; eqd++) {
if (eqswp[eqd]["名称"] == item["名称"]) {
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"][eqd]["数量"] = num;
}
}
}
}
showItems('可消耗物品');
return true;
} else {
return false;
}
})
});
buttonContainer.appendChild(eqbutton);
buttonContainer.appendChild(eqbutton2);
buttonContainer.appendChild(delbut);
}
}
if (item.物品分类 === "材料") { //可消耗物品按钮
const delbut = document.createElement('button');
delbut.id = Math.random().toString(36).substr(2, 9);
delbut.style.marginRight = '10px';
delbut.textContent = '丢弃';
delbut.style.marginRight = '10px';
// eqbutton.style.padding = '10px 20px';
delbut.style.backgroundColor = '#6c757d';
delbut.style.color = '#fff';
delbut.style.border = 'none';
delbut.style.borderRadius = '1px';
delbut.style.cursor = 'pointer';
delbut.addEventListener('click', (event) => {
var b = stylishConfirm("确定要丢弃吗").then((result) => {
if (result) {
console.log("丢弃", rpg["用户背包"][1]["json"]["材料"][ii]);
var num = Number(rpg["用户背包"][1]["json"]["材料"][ii]["数量"]) - 1;
if (num < 1) {
rpg["用户背包"][1]["json"]["材料"].splice(ii, 1);
} else {
rpg["用户背包"][1]["json"]["材料"][ii]["数量"] = num
}
showItems('材料');
return true;
} else {
return false;
}
})
});
buttonContainer.appendChild(delbut);
}
listItem.appendChild(buttonContainer);
var __123 = document.createElement('div');
__123.textContent = `_____________________`;
listItem.appendChild(__123);
itemList.appendChild(listItem);
};
}
// 初始显示技能分类
showItems('技能');
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//使用技能
function usejineng(but, user, newjineng, showItems) {
var b = stylishConfirm("确定要使用吗").then((result) => {
if (result) {
let buff = rpg["用户"][1]["角色"]["战斗属性json"]["buff"][0];
let enemy = [];
if (Object.keys(user).includes("敌人")) {
enemy = rpg["敌人"]
} else {
if (!confirm("不存在敌人是否继续使用?")) {
return false;
}
}
for (let d = 0; d < newjineng.我方效果.length; d++) {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
let num = Number(buff["我方效果"][0]) + Number(newjineng.我方效果[0]);
if (num > 0) {
buff["我方效果"][0] = '0';
} else {
buff["我方效果"][0] = num;
}
rpg["用户属性"]["health"] = (Number(rpg["用户属性"]["health"].split("/")[0]) + Number(newjineng.我方效果[0])) + "/" + rpg["用户属性"]["health"].split("/")[1];
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
let num2 = Number(buff["我方效果"][1]) + Number(newjineng.我方效果[1]);
if (num2 > 0) {
buff["我方效果"][1] = '0';
} else {
buff["我方效果"][1] = num2;
}
rpg["用户属性"]["mana"] = (Number(rpg["用户属性"]["mana"].split("/")[0]) + Number(newjineng.我方效果[1])) + "/" + rpg["用户属性"]["mana"].split("/")[1];
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
let num3 = Number(buff["我方效果"][2]) + Number(newjineng.我方效果[2]);
if (num3 > 0) {
buff["我方效果"][2] = '0';
} else {
buff["我方效果"][2] = num3;
}
rpg["用户属性"]["attack"] = (Number(rpg["用户属性"]["attack"].split("/")[0]) + Number(newjineng.我方效果[2])) + "/" + (Number(rpg["用户属性"]["attack"].split("/")[1]) + Number(newjineng.我方效果[2]));
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
let num4 = Number(buff["我方效果"][3]) + Number(newjineng.我方效果[3]);
if (num4 > 0) {
buff["我方效果"][3] = '0';
} else {
buff["我方效果"][3] = num4;
}
rpg["用户属性"]["defense"] = Number(rpg["用户属性"]["defense"]) + Number(newjineng.我方效果[3]);
break;
}
}
if (Object.keys(user).includes("敌人")) {
for (let d = 0; d < newjineng.敌方效果.length; d++) {
if (newjineng.敌方效果[d] !== "0") {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
break;
}
}
}
}
showItems("技能");
updataAttributes();
}
});
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//使用物品
function usewp(but, user, newwp, showItems) {
var b = stylishConfirm("确定要使用吗").then((result) => {
if (result) {
let buff = rpg["用户"][1]["角色"]["战斗属性json"]["buff"][0];
let enemy = [];
if (Object.keys(user).includes("敌人")) {
enemy = rpg["敌人"]
} else {
if (!confirm("不存在敌人是否继续使用?")) {
return false;
}
}
for (let d = 0; d < newwp.我方效果.length; d++) {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
let num = Number(buff["我方效果"][0]) + Number(newwp.我方效果[0]);
if (num > 0) {
buff["我方效果"][0] = '0';
} else {
buff["我方效果"][0] = num;
}
rpg["用户属性"]["health"] = (Number(rpg["用户属性"]["health"].split("/")[0]) + Number(newwp.我方效果[0])) + "/" + rpg["用户属性"]["health"].split("/")[1];
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
let num2 = Number(buff["我方效果"][1]) + Number(newwp.我方效果[1]);
if (num2 > 0) {
buff["我方效果"][1] = '0';
} else {
buff["我方效果"][1] = num2;
}
rpg["用户属性"]["mana"] = (Number(rpg["用户属性"]["mana"].split("/")[0]) + Number(newwp.我方效果[1])) + "/" + rpg["用户属性"]["mana"].split("/")[1];
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
let num3 = Number(buff["我方效果"][2]) + Number(newwp.我方效果[2]);
if (num3 > 0) {
buff["我方效果"][2] = '0';
} else {
buff["我方效果"][2] = num3;
}
rpg["用户属性"]["attack"] = (Number(rpg["用户属性"]["attack"].split("/")[0]) + Number(newwp.我方效果[2])) + "/" + (Number(rpg["用户属性"]["attack"].split("/")[1]) + Number(newwp.我方效果[2]));
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
let num4 = Number(buff["我方效果"][3]) + Number(newwp.我方效果[3]);
if (num4 > 0) {
buff["我方效果"][3] = '0';
} else {
buff["我方效果"][3] = num4;
}
rpg["用户属性"]["defense"] = Number(rpg["用户属性"]["defense"]) + Number(newwp.我方效果[3]);
break;
}
}
if (Object.keys(user).includes("敌人")) {
for (let d = 0; d < neweq.敌方效果.length; d++) {
if (newwp.敌方效果[d] !== "0") {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
break;
}
}
}
}
let shuliang = Number(newwp.数量) - 1
if (shuliang < 1) {
let eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
for (let m = 0; m < eqswp.length; m++) {
if (eqswp[m]["名称"] == newwp["名称"]) {
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"].splice(m, 1);
}
}
let beibaowp = rpg["用户背包"][1]["json"]["可消耗物品"];
for (let m2 = 0; m2 < beibaowp.length; m2++) {
if (beibaowp[m2]["名称"] == newwp["名称"]) {
rpg["用户背包"][1]["json"]["可消耗物品"].splice(m2, 1);
}
}
} else {
let eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
for (let m3 = 0; m3 < eqswp.length; m3++) {
if (eqswp[m3]["名称"] == newwp["名称"]) {
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"][m3]["数量"] = shuliang;
}
}
let beibaowp = rpg["用户背包"][1]["json"]["可消耗物品"]
for (let m4 = 0; m4 < beibaowp.length; m4++) {
if (beibaowp[m4]["名称"] == newwp["名称"]) {
rpg["用户背包"][1]["json"]["可消耗物品"][m4]["数量"] = shuliang;
}
}
}
showItems("可消耗物品");
updataAttributes();
}
});
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//装上可消耗物品
function eqwp(but, user, neweq, showItems) {
var b = stylishConfirm("确定要装备吗").then((result) => {
if (result) {
var eqwp = JSON.parse(JSON.stringify(neweq));
var eqswp = rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"]
if (eqswp.length < 3) {
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"].push(eqwp);
showItems("可消耗物品");
} else {
eqwpConfirm(but, eqwp, eqswp, showItems);
}
return true;
} else {
return false;
}
})
if (b) {
return true;
} else {
return false;
}
}
//装备
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//装上技能
function eqjineng(but, user, neweq, showItems) {
var b = stylishConfirm("确定要装备吗").then((result) => {
if (result) {
var eqjineng = JSON.parse(JSON.stringify(neweq));
delete eqjineng.数量;
var eqsjineng = rpg["用户"][1]["角色"]["战斗属性json"]["技能"]
if (eqsjineng.length < 3) {
rpg["用户"][1]["角色"]["战斗属性json"]["技能"].push(eqjineng);
showItems("技能");
} else {
jinengConfirm(but, eqjineng, eqsjineng, showItems);
}
return true;
} else {
return false;
}
})
if (b) {
return true;
} else {
return false;
}
}
//装备
function eqeq(but, user, neweq, showItems) {
var b = stylishConfirm("确定要装备吗").then((result) => {
if (result) {
var neweq2 = JSON.parse(JSON.stringify(neweq));
delete neweq2.数量;
rpg[user][1]["角色"]["战斗属性json"]["已装备"][neweq["部位"]] = neweq2;
but.textContent = '已装备';
but.disabled = true;
document.getElementById(but.name).remove();
showItems("装备");
return true;
} else {
return false;
}
})
if (b) {
return true;
} else {
return false;
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//物品确认框
function eqwpConfirm(but, newwp, eqswp, showItems) {
return new Promise((resolve) => {
// 创建遮罩层
var message = "请选择替换的消耗品";
const overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = '0';
overlay.style.left = '0';
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
overlay.style.zIndex = '9999';
document.body.appendChild(overlay);
// 创建确认框
const confirmBox = document.createElement('div');
// confirmBox.style.position = 'fixed';
// confirmBox.style.top = '50%';
// confirmBox.style.left = '50%';
// confirmBox.style.transform = 'translate(-50%, -50%)';
confirmBox.style.position = 'absolute';
confirmBox.style.top = '50%';
confirmBox.style.left = '50%';
confirmBox.style.transform = 'translate(-50%, -50%)';
confirmBox.style.backgroundColor = '#fff';
confirmBox.style.padding = '20px';
confirmBox.style.borderRadius = '5px';
confirmBox.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.2)';
confirmBox.style.zIndex = '10000';
document.body.appendChild(confirmBox);
// 创建消息文本
const messageText = document.createElement('p');
messageText.textContent = message;
messageText.style.marginBottom = '20px';
messageText.style.color = '#333';
confirmBox.appendChild(messageText);
// 创建按钮容器
const buttonContainer = document.createElement('div');
//buttonContainer.style.textAlign = 'right';
buttonContainer.style.display = 'flex';
buttonContainer.style.justifyContent = 'center';
buttonContainer.style.marginTop = '3px';
confirmBox.appendChild(buttonContainer);
const buttonContainer2 = document.createElement('div');
buttonContainer2.style.display = 'flex';
buttonContainer2.style.justifyContent = 'center';
buttonContainer2.style.marginTop = '3px';
// buttonContainer2.style.textAlign = 'right';
confirmBox.appendChild(buttonContainer2);
const buttonContainer3 = document.createElement('div');
buttonContainer3.style.display = 'flex';
buttonContainer3.style.justifyContent = 'center';
buttonContainer3.style.marginTop = '3px';
// buttonContainer3.style.textAlign = 'right';
confirmBox.appendChild(buttonContainer3);
// 创建技能按钮
const cancelButton = document.createElement('button');
cancelButton.textContent = eqswp[0]["名称"];
cancelButton.style.marginRight = '10px';
cancelButton.style.padding = '10px 20px';
cancelButton.style.backgroundColor = '#6c757d';
cancelButton.style.color = '#fff';
cancelButton.style.border = 'none';
cancelButton.style.borderRadius = '5px';
cancelButton.style.cursor = 'pointer';
const cancelButton2 = document.createElement('button');
cancelButton2.textContent = eqswp[1]["名称"];
cancelButton2.style.marginRight = '10px';
cancelButton2.style.padding = '10px 20px';
cancelButton2.style.backgroundColor = '#6c757d';
cancelButton2.style.color = '#fff';
cancelButton2.style.border = 'none';
cancelButton2.style.borderRadius = '5px';
cancelButton2.style.cursor = 'pointer';
const cancelButton3 = document.createElement('button');
cancelButton3.textContent = eqswp[2]["名称"];
cancelButton3.style.marginRight = '10px';
cancelButton3.style.padding = '10px 20px';
cancelButton3.style.backgroundColor = '#6c757d';
cancelButton3.style.color = '#fff';
cancelButton3.style.border = 'none';
cancelButton3.style.borderRadius = '5px';
cancelButton3.style.cursor = 'pointer';
buttonContainer.appendChild(cancelButton);
buttonContainer2.appendChild(cancelButton2);
buttonContainer3.appendChild(cancelButton3);
// 创建确定按钮
// const confirmButton = document.createElement('button');
// confirmButton.textContent = '确定';
// confirmButton.style.padding = '10px 20px';
// confirmButton.style.backgroundColor = '#007bff';
// confirmButton.style.color = '#fff';
// confirmButton.style.border = 'none';
// confirmButton.style.borderRadius = '5px';
// confirmButton.style.cursor = 'pointer';
// buttonContainer.appendChild(confirmButton);
// 点击取消按钮关闭确认框并返回 false
cancelButton.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"][0] = newwp;
but.textContent = '已装备';
but.disabled = true;
// document.getElementById(but.name).remove();
showItems("可消耗物品");
resolve(false);
});
cancelButton2.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"][1] = newwp;
but.textContent = '已装备';
but.disabled = true;
// document.getElementById(but.name).remove();
showItems("可消耗物品");
resolve(false);
});
cancelButton3.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["可消耗物品"][2] = newwp;
but.textContent = '已装备';
but.disabled = true;
// document.getElementById(but.name).remove();
showItems("可消耗物品");
resolve(false);
});
// 点击确定按钮关闭确认框并返回 true
// confirmButton.addEventListener('click', () => {
// document.body.removeChild(overlay);
// document.body.removeChild(confirmBox);
// resolve(true);
// });
});
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//技能确认框
function jinengConfirm(but, neweq, eqsjineng, showItems) {
return new Promise((resolve) => {
// 创建遮罩层
var message = "请选择替换的技能";
const overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = '0';
overlay.style.left = '0';
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
overlay.style.zIndex = '9999';
document.body.appendChild(overlay);
// 创建确认框
const confirmBox = document.createElement('div');
// confirmBox.style.position = 'fixed';
// confirmBox.style.top = '50%';
// confirmBox.style.left = '50%';
// confirmBox.style.transform = 'translate(-50%, -50%)';
confirmBox.style.position = 'absolute';
confirmBox.style.top = '50%';
confirmBox.style.left = '50%';
confirmBox.style.transform = 'translate(-50%, -50%)';
confirmBox.style.backgroundColor = '#fff';
confirmBox.style.padding = '20px';
confirmBox.style.borderRadius = '5px';
confirmBox.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.2)';
confirmBox.style.zIndex = '10000';
document.body.appendChild(confirmBox);
// 创建消息文本
const messageText = document.createElement('p');
messageText.textContent = message;
messageText.style.marginBottom = '20px';
messageText.style.color = '#333';
confirmBox.appendChild(messageText);
// 创建按钮容器
const buttonContainer = document.createElement('div');
//buttonContainer.style.textAlign = 'right';
buttonContainer.style.display = 'flex';
buttonContainer.style.justifyContent = 'center';
buttonContainer.style.marginTop = '3px';
confirmBox.appendChild(buttonContainer);
const buttonContainer2 = document.createElement('div');
buttonContainer2.style.display = 'flex';
buttonContainer2.style.justifyContent = 'center';
buttonContainer2.style.marginTop = '3px';
// buttonContainer2.style.textAlign = 'right';
confirmBox.appendChild(buttonContainer2);
const buttonContainer3 = document.createElement('div');
buttonContainer3.style.display = 'flex';
buttonContainer3.style.justifyContent = 'center';
buttonContainer3.style.marginTop = '3px';
// buttonContainer3.style.textAlign = 'right';
confirmBox.appendChild(buttonContainer3);
// 创建技能按钮
const cancelButton = document.createElement('button');
cancelButton.textContent = eqsjineng[0]["名称"];
cancelButton.style.marginRight = '10px';
cancelButton.style.padding = '10px 20px';
cancelButton.style.backgroundColor = '#6c757d';
cancelButton.style.color = '#fff';
cancelButton.style.border = 'none';
cancelButton.style.borderRadius = '5px';
cancelButton.style.cursor = 'pointer';
const cancelButton2 = document.createElement('button');
cancelButton2.textContent = eqsjineng[1]["名称"];
cancelButton2.style.marginRight = '10px';
cancelButton2.style.padding = '10px 20px';
cancelButton2.style.backgroundColor = '#6c757d';
cancelButton2.style.color = '#fff';
cancelButton2.style.border = 'none';
cancelButton2.style.borderRadius = '5px';
cancelButton2.style.cursor = 'pointer';
const cancelButton3 = document.createElement('button');
cancelButton3.textContent = eqsjineng[2]["名称"];
cancelButton3.style.marginRight = '10px';
cancelButton3.style.padding = '10px 20px';
cancelButton3.style.backgroundColor = '#6c757d';
cancelButton3.style.color = '#fff';
cancelButton3.style.border = 'none';
cancelButton3.style.borderRadius = '5px';
cancelButton3.style.cursor = 'pointer';
buttonContainer.appendChild(cancelButton);
buttonContainer2.appendChild(cancelButton2);
buttonContainer3.appendChild(cancelButton3);
// 创建确定按钮
// const confirmButton = document.createElement('button');
// confirmButton.textContent = '确定';
// confirmButton.style.padding = '10px 20px';
// confirmButton.style.backgroundColor = '#007bff';
// confirmButton.style.color = '#fff';
// confirmButton.style.border = 'none';
// confirmButton.style.borderRadius = '5px';
// confirmButton.style.cursor = 'pointer';
// buttonContainer.appendChild(confirmButton);
// 点击取消按钮关闭确认框并返回 false
cancelButton.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["技能"][0] = neweq;
but.textContent = '已装备';
but.disabled = true;
document.getElementById(but.name).remove();
showItems("技能");
resolve(false);
});
cancelButton2.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["技能"][1] = neweq;
but.textContent = '已装备';
but.disabled = true;
document.getElementById(but.name).remove();
showItems("技能");
resolve(false);
});
cancelButton3.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
rpg["用户"][1]["角色"]["战斗属性json"]["技能"][2] = neweq;
but.textContent = '已装备';
but.disabled = true;
document.getElementById(but.name).remove();
showItems("技能");
resolve(false);
});
// 点击确定按钮关闭确认框并返回 true
// confirmButton.addEventListener('click', () => {
// document.body.removeChild(overlay);
// document.body.removeChild(confirmBox);
// resolve(true);
// });
});
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//确认框
function stylishConfirm(message) {
return new Promise((resolve) => {
// 创建遮罩层
const overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = '0';
overlay.style.left = '0';
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
overlay.style.zIndex = '9999';
document.body.appendChild(overlay);
// 创建确认框
const confirmBox = document.createElement('div');
// confirmBox.style.position = 'fixed';
// confirmBox.style.top = '50%';
// confirmBox.style.left = '50%';
// confirmBox.style.transform = 'translate(-50%, -50%)';
confirmBox.style.backgroundColor = '#fff';
confirmBox.style.padding = '20px';
confirmBox.style.borderRadius = '5px';
confirmBox.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.2)';
confirmBox.style.zIndex = '10000';
confirmBox.style.position = 'absolute';
confirmBox.style.top = '50%';
confirmBox.style.left = '50%';
confirmBox.style.transform = 'translate(-50%, -50%)';
document.body.appendChild(confirmBox);
// 创建消息文本
const messageText = document.createElement('p');
messageText.textContent = message;
messageText.style.marginBottom = '20px';
messageText.style.color = '#333';
confirmBox.appendChild(messageText);
// 创建按钮容器
const buttonContainer = document.createElement('div');
buttonContainer.style.textAlign = 'right';
confirmBox.appendChild(buttonContainer);
// 创建取消按钮
const cancelButton = document.createElement('button');
cancelButton.textContent = '取消';
cancelButton.style.marginRight = '10px';
cancelButton.style.padding = '10px 20px';
cancelButton.style.backgroundColor = '#6c757d';
cancelButton.style.color = '#fff';
cancelButton.style.border = 'none';
cancelButton.style.borderRadius = '5px';
cancelButton.style.cursor = 'pointer';
buttonContainer.appendChild(cancelButton);
// 创建确定按钮
const confirmButton = document.createElement('button');
confirmButton.textContent = '确定';
confirmButton.style.padding = '10px 20px';
confirmButton.style.backgroundColor = '#007bff';
confirmButton.style.color = '#fff';
confirmButton.style.border = 'none';
confirmButton.style.borderRadius = '5px';
confirmButton.style.cursor = 'pointer';
buttonContainer.appendChild(confirmButton);
// 点击取消按钮关闭确认框并返回 false
cancelButton.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
resolve(false);
});
// 点击确定按钮关闭确认框并返回 true
confirmButton.addEventListener('click', () => {
document.body.removeChild(overlay);
document.body.removeChild(confirmBox);
resolve(true);
});
});
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//动画
function donghua() {
// alert("111")
const mesTextElements = document.getElementsByClassName('mes_text');
const lastMesText = mesTextElements[mesTextElements.length - 1];
lastMesText.innerHTML = lastMesText.innerHTML + `
`
const style2 = document.createElement('style');
style2.textContent = `#container {
position: relative;
width: 400px;
height: 150px;
border: 1px solid black;
}
.character {
position: absolute;
width: 50px;
height: 50px;
}
#player {
background-color: red;
left: 50px;
top: 50px;
}
#enemy {
background-color: blue;
right: 50px;
top: 50px;
transition: transform 0.3s;
}
.shake {
animation: shake 0.5s;
}
@keyframes shake {
0% { transform: translateX(0); }
20% { transform: translateX(-10px); }
40% { transform: translateX(10px); }
60% { transform: translateX(-10px); }
80% { transform: translateX(10px); }
100% { transform: translateX(0); }
}`
document.head.appendChild(style2);
const player = document.getElementById('player');
const enemy = document.getElementById('enemy');
function attack() {
const playerInitialPosition = player.offsetLeft;
const enemyInitialPosition = enemy.offsetLeft;
const attackDistance = enemyInitialPosition - playerInitialPosition - 25;
player.animate([
{ transform: 'translateX(0)' },
{ transform: `translateX(${safe(attackDistance * 0.8)}px)`, offset: 0.6 },
{ transform: `translateX(${safe(attackDistance)}px)`, offset: 0.8 },
{ transform: `translateX(${safe(attackDistance)}px)`, offset: 0.9 },
{ transform: `translateX(${safe(attackDistance * 0.8)}px)`, offset: 0.95 },
{ transform: `translateX(${safe(attackDistance * 0.8)}px)` }
], {
duration: 600,
easing: 'ease-in-out',
fill: 'forwards'
});
setTimeout(() => {
player.animate([
{ transform: `translateX(${safe(attackDistance * 0.8)}px)` },
{ transform: 'translateX(0)' }
], {
duration: 400,
easing: 'ease-out',
fill: 'forwards'
});
}, 600);
setTimeout(() => {
enemy.classList.add('shake');
enemy.style.transform = 'translateX(50px)';
setTimeout(() => {
enemy.style.transform = '';
enemy.classList.remove('shake');
}, 500);
}, 500);
}
document.addEventListener('click', attack);
}
$(document).ready(function () {
});
function load() {
//选择世界书
if (Object.keys(rpg).includes("rpg世界世界书")) {
return;
}
replshijieshu();
// const elements = document.querySelectorAll('[data-i18n="[placeholder]What this keyword should mean to the AI,sent verbatim"]');
const elements = document.querySelectorAll('[data-i18n="[placeholder]What this keyword should mean to the AI, sent verbatim"]');
let p = false;
if (!(elements.length > 0)) {
//alert("未找到加密文本")
console.log("未找到世界书");
return;
}
var your_name = document.getElementById("your_name");
rpg["your_name"] = your_name.value;
console.log(rpg["your_name"]);
for (let i = 0; i < elements.length; i++) {
var element = elements[i];
let tx = element.value;
tx=safe(tx);
let name = "";
const regex = /^--- #(.*)/;
const match = tx.match(regex);
if (match) {
name = match[1].trim();
console.log(name);
} else {
console.log("No match found.");
}
try {
const data = jsyaml.load(tx);
console.log("data.", data);
if (!data) {
return;
}
// let keys = Object.keys(data);
for (var key in data) {
if (key == "角色") {
for (var key2 in data["角色"]) {
if (key2.includes('json')) {
let zdsx = JSON.parse(data["角色"][key2]);
data["角色"][key2] = zdsx;
}
}
}
if (key.includes('json')) {
let keyjson = JSON.parse(data[key]);
data[key] = keyjson;
}
}
rpg["rpg世界世界书"] = true;
rpg[name] = [element, data]
// if(keys.includes('分类')&&data['分类']=='用户'){
// console.log("战斗属性.",data["角色"]['战斗属性json']);
// let zdsx=JSON.parse(data["角色"]['战斗属性json']);
// console.log("zdsx.",zdsx);
// zdsx["人物简介"]=zdsx["人物简介"]+"1234"
// let zdsxtx= JSON.stringify(zdsx, null, 2);
// zdsxtx=`${safe(zdsxtx.replace(/\n/g, '\n '))}`;
// data["角色"]['战斗属性json']=zdsxtx;
// let jsdata=jsyaml.dump(data,{ lineWidth: -1 });
// jsdata="--- #"+name+"\n"+jsdata
// element.value=jsdata;
// }
} catch (e) {
console.error(e);
}
}
console.log("rpg属性.", rpg);
}
function sent() {
// ID of the target textarea
var textareaId = 'send_textarea';
// Get the textarea element
var textarea = document.getElementById(textareaId);
var send_but = document.getElementById("send_but");
send_but.addEventListener('click', function (event) {
console.log('Element clicked');
textarea.value = "11111" + textarea.value;
})
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//生成界面
function generaterpg() {
const mesTextElements = document.getElementsByClassName('mes_text');
const lastMesText = mesTextElements[mesTextElements.length - 1];
Array.from(mesTextElements).forEach(function (element) {
if (element == lastMesText) {
//console.log("lastMesText.","最后一个返回");
return;
}
if (element.innerHTML.includes('star
')) {
console.log("element", "包含myHiddenElement");
const regex = /([\s\S]*?)(star<\/div>)[\s\S]*?(
end<\/div>)([\s\S]*?)/;
const matches = element.innerHTML.match(regex);
if (matches) {
const [, beforeContent, , , afterContent] = matches;
element.innerHTML = beforeContent + afterContent;
console.log("element", "删除老的");
}
}
})
if (lastMesText.innerHTML.includes('
star
') || !lastMesText.innerHTML.includes('聊天模式')) {
return;
}
//聊天结算
if (lastMesText.innerHTML.includes("聊天结算")) {
// var regex = /<聊天结算>([\s\S]*)\}(?=\s*$)/;
var regex = /<聊天结算>([\s\S]*)\}/;
const txt = lastMesText.textContent.replace("json:", "").replace("json:", "").replace("\n","")
console.log("txt",txt)
const matches = txt.match(regex);
console.log("matches111111111",matches)
// console.log("聊天txt",txt);
// console.log("聊天结算",matches);
if (matches) {
var jsontx = matches[1];
jsontx=jsontx+'}';
jsontx=safe(jsontx);
var json = JSON.parse(jsontx)
Object.keys(json).forEach(key => {
rpg[key] = json[key];
})
}
}
const style2 = document.createElement('style');
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 设置style
let html3 = generatePage();
style2.textContent = `
.health-container {
display: flex;
align-items: center;
gap: 10px;
position: relative;
}
label {
flex-shrink: 0;
}
.mana-container {
display: flex;
align-items: center;
gap: 10px;
position: relative;
}
#container {
font-family: Arial, sans-serif;
background-color: #222;
padding: 5px;
max-width:1024px;
margin: 0 auto;
color: #fff;
}
#character-info, #other-character {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.image-container {
width: 60%;
height: 50%;
border-radius: 5px;
overflow: hidden;
margin-right: 3px;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
.info-box {
flex: 0.3;
padding: 5px;
background-color: #333;
border-radius: 5px;
}
/* 调整进度条样式,使其更加紧致 */
.health-bar {
width: 60%; /* 血条的总宽度 */
height: 15px; /* 血条的高度 */
background-color: #444; /* 血条的背景色 */
border-radius: 5px; /* 圆角效果 */
overflow: hidden; /* 超出部分隐藏 */
font-size: 13px;
line-height: 15px; /* 与血条的高度相同 */
position: relative;
}
.mana-bar {
width: 60%; /* 血条的总宽度 */
height: 15px; /* 血条的高度 */
background-color: #444; /* 血条的背景色 */
border-radius: 5px; /* 圆角效果 */
overflow: hidden; /* 超出部分隐藏 */
line-height: 15px; /* 与血条的高度相同 */
font-size: 13px;
position: relative;
}
.fill {
height: 100%; /* 填充部分的高度与血条一致 */
background-color: red; /* 填充部分的颜色为红色 */
transition: width 0.5s; /* 动画效果,宽度变化时平滑过渡 */
line-height: 15px; /* 与血条的高度相同 */
font-size: 13px;
position: absolute;
top: 0;
left: 0;
}
.mana {
height: 100%; /* 填充部分的高度与血条一致 */
background-color: blue; /* 填充部分的颜色为红色 */
transition: width 0.5s; /* 动画效果,宽度变化时平滑过渡 */
line-height: 15px; /* 与血条的高度相同 */
font-size: 13px;
position: absolute;
top: 0;
left: 0;
}
.mana-text {
position: absolute;
top: 50%;
left: 50%;
line-height: 15px; /* 与血条的高度相同 */
transform: translate(-100%, -50%);
font-size: 8px;
color: white;
white-space: nowrap;
}
.fill-text {
position: absolute;
line-height: 15px; /* 与血条的高度相同 */
top: 50%;
left: 50%;
transform: translate(-100%, -50%);
font-size: 8px;
color: white;
white-space: nowrap;
}
.progress-bar label {
margin-right: 1px;
width: 20px;
}
progress {
flex: 0.2;
height: 10px;
appearance: none;
border-radius: 2px;
overflow: hidden;
}
progress::-webkit-progress-bar {
background-color: #444;
}
progress::-webkit-progress-value {
background-color: #4CAF50;
}
#buttons, #other-buttons {
display: flex;
justify-content: center;
padding: 5px 0;
}
button {
padding: 5px 10px;
margin: 0 5px;
font-size: 13px;
border: none;
background-color: #4CAF50;
color: white;
border-radius: 2px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}`
style2.setAttribute('data-style2', '');
const style2Selector = 'style[data-style2]';
if (!document.querySelector(style2Selector)) {
document.head.appendChild(style2);
}
lastMesText.innerHTML = lastMesText.innerHTML + html3;
document.getElementById('inventory').addEventListener("click", function () {
beibao();
});
document.getElementById('character').addEventListener("click", function () {
renwu();
});
document.getElementById('quests').addEventListener("click", function () {
quests();
});
let otherCharactersElements = document.getElementsByClassName('otherCharacters')
for (let i = 0; i < otherCharactersElements.length; i++) {
otherCharactersElements[i].addEventListener("click", function (Event) {
otherCharacters(Event.target.id);
});
}
let giftElements = document.getElementsByClassName('gift')
for (let i = 0; i < giftElements.length; i++) {
giftElements[i].addEventListener("click", function (Event) {
gift(Event.target.id);
});
}
//
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 更换世界书
function replshijieshu() {
const selectElement = document.getElementById("world_editor_select");
const optionName = "rpg世界世界书"; // 替换为你要选中的选项名称
for (let i = 0; i < selectElement.options.length; i++) {
if (selectElement.options[i].text === optionName) {
selectElement.selectedIndex = i;
var event = new Event('change');
selectElement.dispatchEvent(event);
break;
}
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 主角色数据
//
//
//
function generateMainCharacterHTML(character) {
console.log("character", character);
var txt = "";
if (isMobileDevice()) {
txt = `
`
} else {
txt = `
`
}
var health = Number(character.health.split('/')[0]) / Number(character.health.split('/')[1]) * 100; //分割字符串
var mana = Number(character.mana.split('/')[0]) / Number(character.mana.split('/')[1]) * 100; //分割字符串
var xp = Number(character.xp.split('/')[0]) / Number(character.xp.split('/')[1]) * 100;
console.log("health", health);
console.log("mana", mana);
return txt + `
${safe(character.name)}
性别:
${safe(character.gender)}
血量:
${safe(character.health)}
攻击力:
${safe(character.attack)}
防御力:
${safe(character.defense)}
背包
人物
任务
`;
}
//
//
//
function generateOtherCharacterHTML(character) {
var txt = "";
if (isMobileDevice()) {
txt = `
`
} else {
txt = `
`
}
var affinity = Number(character.affinity.split('/')[0]) / Number(character.affinity.split('/')[1]) * 100;
txt += `
${safe(DOMPurify.sanitize(character.name))}
性别:
${safe(character.gender)}
种族:
${safe(DOMPurify.sanitize(character.race))}
`
;
txt += `人物 `
txt += `
赠送
`
return txt
}
function getuserAttributes() {
// 获取用户数据 属性计算
var includes = false;
if (Object.keys(rpg).includes("用户属性")) {
includes = true;
}
var user = rpg["用户"][1]["角色"];
var Attributes = {};
Attributes.name = rpg["your_name"];
Attributes.gender = user["性别"];
Attributes.image = user["照片"];
Attributes.race = user["种族"];
Attributes.xp = user["战斗属性json"]["经验条"];
Attributes.level = user["战斗属性json"]["等级"];
Attributes.camp = user["战斗属性json"]["阵营"];
Attributes.Biography = user["战斗属性json"]["人物简介"];
var sattack = Number(user["战斗属性json"]["攻击"].split('/')[0]);//最小攻击力
var dattack = Number(user["战斗属性json"]["攻击"].split('/')[1]);//最大攻击力
var equip = user["战斗属性json"]['已装备']
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("攻击力")) {
console.log("攻击力 ", equip[key]);
sattack = sattack + Number(equip[key]["攻击力"].split('/')[0]);
dattack = dattack + Number(equip[key]["攻击力"].split('/')[1]);
}
}
Attributes.attack = sattack + "/" + dattack;
var dhealth = Number(user["战斗属性json"]["血量"].split('/')[1]);
var dh = dhealth - Number(user["战斗属性json"]["血量"].split('/')[0]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("血量")) {
dhealth = dhealth + Number(equip[key]["血量"]);
}
}
Attributes.health = dhealth + "/" + dhealth;
var dmana = Number(user["战斗属性json"]["蓝量"].split('/')[1]);
var dm = dmana - Number(user["战斗属性json"]["蓝量"].split('/')[0]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("蓝量")) {
dmana = dmana + Number(equip[key]["蓝量"]);
}
}
Attributes.mana = dmana + "/" + dmana;
Attributes.defense = Number(user["战斗属性json"]["防御"]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("防御")) {
Attributes.defense = Attributes.defense + Number(equip[key]["防御"]);
}
}
Attributes.xp = user["战斗属性json"]["经验条"];
//-----------------------------------------------------------------------------------------
//buff!!!!!!!!!!!!!!!!!!!!!!!!!
let buff = rpg["用户"][1]["角色"]["战斗属性json"]["buff"];
for (let a = 0; a < buff.length; a++) {
for (let d = 0; d < buff[a].我方效果.length; d++) {
if (buff[a].我方效果[d] !== "0") {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
Attributes.health = (Number(Attributes.health.split('/')[0]) + Number(buff[a]["我方效果"][0])) + "/" + (Number(Attributes.health.split('/')[1]));
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
Attributes.mana = Number(Attributes.mana.split('/')[0]) + Number(buff[a]["我方效果"][1]) + "/" + (Number(Attributes.mana.split('/')[1]));
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
Attributes.attack = Number(Attributes.attack.split('/')[0]) + Number(buff[a]["我方效果"][2]) + "/" + (Number(Attributes.attack.split('/')[1]));
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
Attributes.defense = Number(Attributes.defense) + Number(buff[a]["我方效果"][3]);
break;
}
}
}
};
if (includes) {
if (Number(rpg["用户属性"]["mana"].split('/')[0]) < Number(Attributes.mana.split('/')[1])) {
Attributes.mana = rpg["用户属性"]["mana"].split('/')[0] + "/" + Number(Attributes.mana.split('/')[1]);
}
}
if (includes) {
if (Number(rpg["用户属性"]["health"].split('/')[0]) < Number(Attributes.health.split('/')[1])) {
Attributes.health = rpg["用户属性"]["health"].split('/')[0] + "/" + Number(Attributes.health.split('/')[1]);
}
}
rpg["用户属性"] = Attributes;
return Attributes;
}
//_______________________________________________________________________________________________________
//更新属性数据
function updataAttributes() {
let Attributes = getuserAttributes();
let mana = Number(Attributes.mana.split('/')[0]) / Number(Attributes.mana.split('/')[1]) * 100;
let health = Number(Attributes.health.split('/')[0]) / Number(Attributes.health.split('/')[1]) * 100;
document.getElementById("health-text").textContent = Attributes.health;
document.getElementById("health").style = `width: ${safe(health)}%`;
document.getElementById("mana").style = `width: ${safe(mana)}%`;
document.getElementById("mana-text").textContent = rpg["用户属性"]["mana"];
document.getElementById("attack-text").textContent = rpg["用户属性"]["attack"];
document.getElementById("defense-text").textContent = rpg["用户属性"]["defense"];
document.getElementById("xp").value = Number(rpg["用户属性"]["xp"].split('/')[0]) / Number(rpg["用户属性"]["xp"].split('/')[1]) * 100;
}
//弃用
function getotherCharactersAttributes(name) {
var Attributes = {};
console.log(name);
console.log(rpg[name]);
var Characters = rpg[name][1]["角色"]
console.log("角色", Characters);
Attributes.name = Characters["姓名"];
Attributes.age = Characters["年龄"];
Attributes.gender = Characters["性别"];
Attributes.race = Characters["种族"];
Attributes.affinity = Characters["战斗属性json"]["对{{user}}的好感度"]
Attributes.image = Characters["照片"];
Attributes.health = Characters["战斗属性json"]["血量"];
Attributes.attack = Characters["战斗属性json"]["攻击力"];
Attributes.defense = Characters["战斗属性json"]["防御"];
Attributes.mana = Characters["战斗属性json"]["蓝量"];
if (Characters["战斗属性json"]["经验条"] == "") {
Attributes.xp = 0;
} else {
Attributes.xp = Characters["战斗属性json"]["经验条"];
}
return Attributes;
}
//_______________________________________________________________________________________________________________
//获取其他角色信息
function getOtherAttributes(name) {
// 获取用户数据 属性计算
var includes = false;
if (!Object.keys(rpg).includes("其他人物属性")) {
rpg["其他人物属性"] = {};
}
if (Object.keys(rpg).includes("其他人物属性") && Object.keys(rpg["其他人物属性"]).includes(name)) {
includes = true;
}
var user = rpg[name][1]["角色"];
var Attributes = {};
Attributes.name = name;
Attributes.affinity = user["战斗属性json"]["对{{user}}的好感度"]
Attributes.gender = user["性别"];
Attributes.image = user["照片"];
Attributes.race = user["种族"];
Attributes.xp = user["战斗属性json"]["经验条"];
Attributes.level = user["战斗属性json"]["等级"];
Attributes.camp = user["战斗属性json"]["阵营"];
Attributes.Biography = user["战斗属性json"]["人物简介"];
var sattack = Number(user["战斗属性json"]["攻击"].split('/')[0]);//最小攻击力
var dattack = Number(user["战斗属性json"]["攻击"].split('/')[1]);//最大攻击力
var equip = user["战斗属性json"]['已装备']
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("攻击力")) {
console.log("攻击力 ", equip[key]);
sattack = sattack + Number(equip[key]["攻击力"].split('/')[0]);
dattack = dattack + Number(equip[key]["攻击力"].split('/')[1]);
}
}
Attributes.attack = sattack + "/" + dattack;
var dhealth = Number(user["战斗属性json"]["血量"].split('/')[1]);
var dh = dhealth - Number(user["战斗属性json"]["血量"].split('/')[0]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("血量")) {
dhealth = dhealth + Number(equip[key]["血量"]);
}
}
Attributes.health = dhealth + "/" + dhealth;
var dmana = Number(user["战斗属性json"]["蓝量"].split('/')[1]);
var dm = dmana - Number(user["战斗属性json"]["蓝量"].split('/')[0]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("蓝量")) {
dmana = dmana + Number(equip[key]["蓝量"]);
}
}
Attributes.mana = dmana + "/" + dmana;
Attributes.defense = Number(user["战斗属性json"]["防御"]);
for (let key in equip) {
// console.log(key + ": " + jsonObject[key]);
if (Object.keys(equip[key]).includes("防御")) {
Attributes.defense = Attributes.defense + Number(equip[key]["防御"]);
}
}
Attributes.xp = user["战斗属性json"]["经验条"];
//-----------------------------------------------------------------------------------------
//buff!!!!!!!!!!!!!!!!!!!!!!!!!
let buff = rpg["用户"][1]["角色"]["战斗属性json"]["buff"];
for (let a = 0; a < buff.length; a++) {
for (let d = 0; d < buff[a].我方效果.length; d++) {
if (buff[a].我方效果[d] !== "0") {
switch (d) {
case 0:
// effect2.textContent += `\n造成伤害: ${safe(neweq.敌方效果[0])}`;
Attributes.health = (Number(Attributes.health.split('/')[0]) + Number(buff[a]["我方效果"][0])) + "/" + (Number(Attributes.health.split('/')[1]));
break;
case 1:
// effect2.textContent += `\n损失蓝量: ${safe(neweq.敌方效果[1])}`;
Attributes.mana = Number(Attributes.mana.split('/')[0]) + Number(buff[a]["我方效果"][1]) + "/" + (Number(Attributes.mana.split('/')[1]));
break;
case 2:
// effect2.textContent += `\n降低攻击力: ${safe(neweq.敌方效果[2])}`;
Attributes.attack = Number(Attributes.attack.split('/')[0]) + Number(buff[a]["我方效果"][2]) + "/" + (Number(Attributes.attack.split('/')[1]));
break;
case 3:
// effect2.textContent += `\n降低防御: ${safe(neweq.敌方效果[3])}`;
Attributes.defense = Number(Attributes.defense) + Number(buff[a]["我方效果"][3]);
break;
}
}
}
};
if (includes) {
if (Number(rpg["其他人物属性"][name]["mana"].split('/')[0]) < Number(Attributes.mana.split('/')[1])) {
Attributes.mana = rpg["其他人物属性"][name]["mana"].split('/')[0] + "/" + Number(Attributes.mana.split('/')[1]);
}
}
if (includes) {
if (Number(rpg["其他人物属性"][name]["health"].split('/')[0]) < Number(Attributes.health.split('/')[1])) {
Attributes.health = rpg["其他人物属性"][name]["health"].split('/')[0] + "/" + Number(Attributes.health.split('/')[1]);
}
}
rpg["其他人物属性"][name] = Attributes;
return Attributes;
}
function generatePage() {
var mainCharacter = getuserAttributes();
// 其他角色数组
var nowCharacters = rpg["当前角色"];
var otherCharacters = [];
nowCharacters.forEach(function (character) {
if (character == rpg["your_name"] || !rpg.hasOwnProperty(character)) {
return;
}
otherCharacters.push(getOtherAttributes(character));
});
// 生成主角色HTML
var mainHTML = generateMainCharacterHTML(mainCharacter);
// 生成其他角色HTML
const otherCharactersHTML = otherCharacters.map(generateOtherCharacterHTML).join('');
// 添加其他角色的按钮
return '
star
' + mainHTML + otherCharactersHTML + '
end
'
}
function isMobileDevice() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
function rpgmain() {
if (checkSendBuClass()) {
return;
}
load();
console.log("rgp全部", rpg);
generaterpg();
}
function checkSendBuClass() {
const element = document.getElementById('send_but');
if (element && element.className.includes('displayNone')) {
return true;
}
if (!rpg["rpg"]) {
return true;
}
return false;
}
function safe(str) {
return DOMPurify.sanitize(str, {FORBID_TAGS: ['style']});
}
setInterval(rpgmain, 2000);
})();