您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
武神传说 MUD
当前为
// ==UserScript== // @name 额外工具 // @namespace ewgn // @version 24.4.12 // @date 16/2/2024 // @modified 16/2/2024 // @description 武神传说 MUD // @author Bob.cn, 初心, 白三三,HS // @match http://*.wsmud.com/* // @match http://*.wamud.com/* // @run-at document-end // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js // @grant unsafeWindow // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues // @grant GM_setClipboard // @license MIT // ==/UserScript== (function () { "use strict"; //***********************************************************************************\ var WG = undefined; //***********************************************************************************\ function AddContent(element) { $(".content-message pre").append(element); AutoScroll(".content-message"); return false; } function AutoScroll(name) { if (name) { let scrollTop = $(name)[0].scrollTop; let scrollHeight = $(name)[0].scrollHeight; let height = Math.ceil($(name).height()); if (scrollTop < scrollHeight - height) { let add = scrollHeight - height < 120 ? 1 : Math.ceil((scrollHeight - height) / 120); $(name)[0].scrollTop = scrollTop + add; setTimeout(function () { AutoScroll(name); }, 1000 / 120); } } } //滚动 function SendCommand(command) { if (command instanceof Array) { if (command.length === 0) return; let cmd1 = command[0]; let cmd2 = command.slice(1); if (typeof cmd1 === "number") { setTimeout(() => SendCommand(cmd2), cmd1); } else if (cmd1) { SendCommand(cmd1); SendCommand(cmd2); } } else if (typeof command === "string") { if (WG == null) { WG = unsafeWindow.WG; } WG.Send(command); } } //发送 function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } //延时 //***********************************************************************************\ async function tongji() { let map = new Map(); //背包数据 let 表格 = ""; //输出表格 let 残页回收 = ""; //对比数据 let 秘籍 = new Map(); let 绿色秘籍 = ["太祖长拳", "唐诗剑法", "五虎断门刀", "云龙鞭法", "意形步法", "神龙剑", "华山剑法", "混元一气", "飞檐走壁", "伏虎拳", "绝门棍", "猴拳", "云龙身法", "云龙心法", "秋风拂尘", "密宗心法", "密宗大手印", "冷月神功", "金雁功"]; let 蓝色秘籍 = ["神龙心法", "云龙剑", "神形百变", "蛇岛奇功", "化骨绵掌", "胡家刀法", "四象步法", "金蛇锥法", "八卦拳", "八卦棍法", "五毒神功", "恒山身法", "踏歌行", "穿云纵", "流云掌", "泰山拳法", "碧波神功", "蟾蜍步法", "摘星功", "飞星术", "青蝠身法", "绝情掌", "神剑诀", "鹰爪功", "圣火令法", "天南步", "身空行", "蒙古心法", "无常杖", "玉女身法"]; let 黄色秘籍 = ["金蛇剑法", "金蛇游身掌", "金蛇游身步", "五毒烟萝步", "五毒钩法", "千蛛万毒手", "白云心法", "恒山剑法", "天长掌法", "狂风快刀", "摧心掌", "松风剑法", "镇岳诀", "衡山五神剑", "泰山剑法", "磐石神功", "大嵩阳神掌", "嵩山剑法", "暗影浮香", "落英神剑", "三阴蜈蚣爪", "七伤拳", "移风剑法", "天羽奇剑", "圣火神功", "段家剑", "玉女心经", "银索金铃", "全真剑法", "中平枪法", "蒙古骑枪", "玉女素心剑"]; let 紫色秘籍 = ["寒冰真气", "弹指神通", "空明拳", "灵蛇杖法", "蛤蟆功", "化功大法", "移花接木", "明玉功", "参合指", "枯木神功", "神照经", "血海魔功", "一阳指", "玄虚步", "伏魔棍", "彼岸剑法", "圆月弯刀", "先天功"]; let 橙色秘籍 = ["斗转星移", "辟邪剑法", "葵花神功", "不老长春功", "九阳神功", "乾坤大挪移", "六脉神剑", "血刀", "黯然销魂掌", "玄铁剑法", "九阴神功", "太玄功", "无念禅功", "伏魔杖", "如来神掌", "真言手印", "灵犀步", "天地交征阴阳大悲赋", "龙象般若功"]; let 红色秘籍 = ["长生诀", "慈航剑典", "阴阳九转", "战神图录", "覆雨剑法", "天魔策", "逆天道"]; let 进阶秘籍 = ["太极拳进阶", "梯云纵进阶", "先天太极进阶", "太极剑法进阶", "混元天罡进阶", "逍遥游进阶", "打狗棒进阶", "降龙十八掌进阶", "劈石破玉拳进阶", "紫霞神功进阶", "狂风快剑进阶", "独孤九剑进阶", "九阴白骨爪进阶", "诸天化身步进阶", "临济十二庄进阶", "倚天剑法进阶", "一指禅进阶", "一苇渡江进阶", "燃木刀法进阶", "金刚不坏体进阶", "北冥神功进阶", "天山六阳掌进阶", "凌波微步进阶", "小无相功进阶", "穿心掌进阶", "杀生决进阶", "踏雪寻梅进阶", "漫天花雨进阶"]; 秘籍.set("绿色秘籍", 绿色秘籍).set("蓝色秘籍", 蓝色秘籍).set("黄色秘籍", 黄色秘籍).set("紫色秘籍", 紫色秘籍).set("橙色秘籍", 橙色秘籍).set("红色秘籍", 红色秘籍).set("进阶秘籍", 进阶秘籍); function mergeArrays(maps, DOMdatas) { for (const DOMdata of DOMdatas) { if (DOMdata.innerHTML == "") continue; let key = DOMdata.innerHTML.match(/<.*?>(.*?)</)[1]; let value = +(DOMdata.innerHTML.match(/<span class="obj-value">(\d*).*?</)[1] || "1"); maps.has(key) ? maps.set(key, maps.get(key) + value) : maps.set(key, value); } } let room = $(".room-name").text(); if (room == "住房-卧室") { WG.Send("store"); } else { SendCommand(YZC["打开仓库"]); } let ck; do { ck = document.querySelector(".dialog-title").innerHTML.indexOf("你的仓库中"); await sleep(500); } while (ck == -1); let bagdatas = document.querySelectorAll(".dialog-list .obj-item"); mergeArrays(map, bagdatas); SendCommand(["select ltvxd096a69", "sj"]); let sj; do { sj = document.querySelector(".dialog-title").innerHTML.indexOf("你的书架上"); await sleep(200); } while (sj == -1); let shujia = document.querySelectorAll(".dialog-list .obj-list:first-child>.obj-item"); mergeArrays(map, shujia); let changdu = []; for (let amount of 秘籍.values()) { amount.forEach((item) => { changdu.push(item.length); }); } let changmax = Math.max(...changdu) + 2; function jiakg(str, alength = changmax, kongge = "ㅤ") { let newstr = str; if (str.length < alength) { for (let i = 0; i < +alength - +str.length; i++) { newstr = kongge + newstr; } } return newstr; } 秘籍.forEach((value, key) => { 表格 += `<tr><th colspan="4">` + key + `</th></tr>`; value.forEach((item) => { const miji = item + "秘籍"; const mjsl = map.get(miji) || " " const canye = item + "残页"; const cysl = map.get(canye) || " " if ((map.get(miji) || 0) > 0 && key != "红色秘籍" && key != "进阶秘籍") { 残页回收 += canye + ","; } 表格 += `<tr> <td>${jiakg(miji)}</td> <td>${mjsl}</td> <td>${jiakg(canye)}</td> <td>${cysl}</td> </tr>`; }); }); let html = ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>秘籍残页详情</title> <style> body{background-color: black;} table{margin:0;padding:0;border-collapse:collapse;color: #00FF00;} th,td{border: 1px white solid;padding: 5px;} </style> </head><body> <table><tbody><tr><td>残页回收代码(在设置-高级里)</tr></td><tr><td>${残页回收}</tr></td></tbody></table> <table><tbody>${表格}</tbody></table> </body></html>`; let blob = new Blob([html], { type: "text/html" }); let url = URL.createObjectURL(blob); window.open(url, "_blank"); 残页回收 = ""; map.clear(); } //统计功能 let 稀有度 = [ ["<wht>", "</wht>"], ["<hig>", "</hig>"], ["<hic>", "</hic>"], ["<hiy>", "</hiy>"], ["<hiz>", "</hiz>"], ["<hio>", "</hio>"], ["<ord>", "</ord>"], ]; let 宝石排序 = ["碎裂的红宝石", "红宝石", "精致的红宝石", "完美的红宝石", "攻击之石", "朱雀之魂", "碎裂的黄宝石", "黄宝石", "精致的黄宝石", "完美的黄宝石", "气血之石", "玄武之魂", "碎裂的蓝宝石", "蓝宝石", "精致的蓝宝石", "完美的蓝宝石", "躲闪之石", "青龙之魂", "碎裂的绿宝石", "绿宝石", "精致的绿宝石", "完美的绿宝石", "命中之石", "白虎之魂", "碎裂的紫薇", "紫薇", "碎裂的破军", "破军", "碎裂的七杀", "七杀", "碎裂的贪狼", "贪狼"]; let 鱼排序 = ["鱼饵", "鲤鱼", "鲢鱼", "草鱼", "鲂鱼", "鳊鱼", "鲮鱼", "黄金鳉", "黄颡鱼", "太湖银鱼", "虹鳟", "反天刀", "孔雀鱼", "罗汉鱼", "黑龙鱼", "银龙鱼", "七星刀鱼", "巨骨舌鱼", "帝王老虎魟"]; let 药材排序 = ["芦荟", "当归", "山楂叶", "柴胡", "石楠叶", "金银花", "沉香", "茯苓", "熟地黄", "九香虫", "络石藤", "冬虫夏草", "人参", "何首乌", "凌霄花", "灵芝", "盘龙参", "天仙藤", "沉天叶", "凤鸣花", "龙鳞草", "轮回蛊", "神血藤"]; let 丹药排序 = ["冰心丹", "玄灵丹", "突破丹", "大还丹", "大力丸", "凝神丹", "归心散", "石龟丹", "风行散", "风雷丹", "赤火丹", "赤血丹", "玄武丹", "破军丹", "风神丹", "生机丸", "玄冰丹", "归元散", "风行丹", "造化丹", "无常丹", "清心丹", "蕴象丹", "顿悟丹", "金创药", "引气丹", "聚气丹"]; let 其他排序 = ["玄晶", "师门令牌", "喜宴:碧螺春卷", "喜宴:蝴蝶暇卷", "喜宴:佛手金卷", "喜宴:金丝酥雀", "喜宴:山珍刺龙芽", "鳄鱼皮", "火龙筋"]; let 物品排序 = [].concat(宝石排序, 鱼排序, 药材排序, 丹药排序, 其他排序); let 物品排序加颜色 = []; 物品排序.forEach((item) => { 稀有度.forEach((item1) => { 物品排序加颜色.push(item1[0] + item + item1[1]); }); }); function 取东西(物品代码, 数量) { let a物品代码 = "a" + 物品代码; let 定位 = ".right>.obj-list .obj-item[zdy=" + a物品代码 + "]"; let list = document.querySelector(定位); if (list.length == 0) { setTimeout(取东西(物品代码, 数量), 500); } else { if (数量 == 0) { 数量 = list.querySelector("input").value; } WG.Send("qu " + 数量 + " " + 物品代码); let 原数量 = +list.innerHTML.match(/<span>(\d*)<\/span>/)[1]; list.querySelector("span").innerHTML = 原数量 - 数量; } } function 关闭() { document.querySelector(".right>.obj-list").remove(); document.querySelector(".right>div.msg.chat").style = null; } async function 仓库排序() { let room = $(".room-name").text(); if (room == "住房-卧室") { WG.Send("store"); } else { SendCommand(YZC["打开仓库"]); } let ck; do { ck = document.querySelector(".dialog-title").innerHTML.indexOf("你的仓库中"); await sleep(500); } while (ck == -1); let bagDatas; while (1) { bagDatas = document.querySelectorAll(".dialog-list .obj-list:first-child>.obj-item"); if (bagDatas.length == 0) { await sleep(500); continue; } else break; } let right = document.querySelector(".right"); let list = document.querySelector(".right>.obj-list"); if (list) list.remove(); document.querySelector(".right>div.msg.chat").style.display = "none"; right.insertAdjacentHTML("afterbegin", `<div class="obj-list" style="overflow: auto;"><div class="obj-item"><button onclick="仓库排序()">刷新</button><button onclick="关闭()">关闭</button></div></div>`); right = document.querySelector(".right>.obj-list"); 物品排序加颜色.forEach((item) => { for (let a of bagDatas) { if (a.innerHTML != "") { let 物品名 = a.innerHTML.match(/([^ ]*?<\/.*?>)/)[1]; if (item == 物品名) { let 物品代码 = a.getAttribute("obj"); let 物品数量 = a.innerHTML.match(/<span class="obj-value">(\d*).*/); if (物品数量[1] == "") { 物品数量 = 1; } else { 物品数量 = 物品数量[1]; } right.insertAdjacentHTML("beforeend", `<div class="obj-item" zdy="${"a" + 物品代码}">${物品名}<span>${物品数量}</span><button onclick="取东西(${"'" + 物品代码 + "'"},1)">取一个</button><button onclick="取东西(${"'" + 物品代码 + "'"},10)">取十个</button><button onclick="取东西(${"'" + 物品代码 + "'"},0)">取</button><input type="text" style="width:50px;" value="${物品数量}"></div>`); } } } }); } //***********************************************************************************\ $(document).ready(function () { WG = unsafeWindow.WG; $(".right-bar").before($("<div></div>").append($(`<span class="span-btn"></span>`).append("功能").click(togn))); GM_addStyle(` .right>.obj-list{padding-top: 23px;} .right span{color:#f8f8f8} .right>.obj-list .obj-item{display: flex;align-items: center;} .right>.obj-list>:first-child{position: fixed;top: 0;} .right>.obj-list .obj-item>:nth-child(n+2){margin-left: auto;} .right>.obj-list .obj-item>:nth-child(n+3){margin-left: 0;} `); }); let togn = function () { AddContent( $("<div></div>").append( $(`<span class="span-btn"></span>`) .append("统计残页秘籍数量") .click(() => tongji()), $(`<span class="span-btn"></span>`) .append("仓库排序") .click(() => 仓库排序()), $(`<br>`) ) ); }; //***********************************************************************************\ let YZC = { 打开仓库: ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go north", "store"], 打开书架: ["stopstate", "jh fam 0 start", "go west", "go west", "go north", "go enter", "go north", "select ltvxd096a69", "sj"], }; unsafeWindow.取东西 = 取东西; unsafeWindow.仓库排序 = 仓库排序; unsafeWindow.关闭 = 关闭; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址