#神传说 MUD
// ==UserScript== // @name 秘籍残页 // @namespace mijicanye // @version 2024.6.23 // @date 2024/6/18 // @modified 2024/6/18 // @description #神传说 MUD // @author Bob.cn, 初心, 白三三,HS // @match http://*.wsmud.com/* // @match http://*.wamud.com/* // @run-at document-end // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.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"; let WG, G, messageAppend, messageClear = undefined; let 统计进行中 = false let 数据 = { 秘籍数据: new Map() .set("hig", ["绿色秘籍", "太祖长拳", "唐诗剑法", "五虎断门刀", "云龙鞭法", "意形步法", "神龙剑", "华山剑法", "混元一气", "飞檐走壁", "伏虎拳", "绝门棍", "猴拳", "云龙身法", "云龙心法", "秋风拂尘", "密宗心法", "密宗大手印", "冷月神功", "金雁功"]) .set("hic", ["蓝色秘籍", "神龙心法", "云龙剑", "神形百变", "蛇岛奇功", "化骨绵掌", "胡家刀法", "四象步法", "金蛇锥法", "八卦拳", "八卦棍法", "五毒神功", "恒山身法", "踏歌行", "穿云纵", "流云掌", "泰山拳法", "碧波神功", "蟾蜍步法", "摘星功", "飞星术", "青蝠身法", "绝情掌", "神剑诀", "鹰爪功", "圣火令法", "天南步", "身空行", "蒙古心法", "无常杖", "玉女身法"]) .set("hiy", ["黄色秘籍", "金蛇剑法", "金蛇游身掌", "金蛇游身步", "五毒烟萝步", "五毒钩法", "千蛛万毒手", "白云心法", "恒山剑法", "天长掌法", "狂风快刀", "摧心掌", "松风剑法", "镇岳诀", "衡山五神剑", "泰山剑法", "磐石神功", "大嵩阳神掌", "嵩山剑法", "暗影浮香", "落英神剑", "三阴蜈蚣爪", "七伤拳", "移风剑法", "天羽奇剑", "圣火神功", "段家剑", "玉女心经", "银索金铃", "全真剑法", "中平枪法", "蒙古骑枪", "玉女素心剑"]) .set("hiz", ["紫色秘籍", "寒冰真气", "弹指神通", "空明拳", "灵蛇杖法", "蛤蟆功", "化功大法", "移花接木", "明玉功", "参合指", "枯木神功", "神照经", "血海魔功", "一阳指", "玄虚步", "伏魔棍", "彼岸剑法", "圆月弯刀", "先天功"]) .set("hio", ["橙色秘籍", "斗转星移", "辟邪剑法", "葵花神功", "不老长春功", "九阳神功", "乾坤大挪移", "六脉神剑", "血刀", "黯然销魂掌", "玄铁剑法", "九阴神功", "太玄功", "无念禅功", "伏魔杖", "如来神掌", "真言手印", "灵犀步", "天地交征阴阳大悲赋", "龙象般若功"]) .set("ord", ["红色秘籍", "长生诀", "慈航剑典", "阴阳九转", "战神图录", "覆雨剑法", "天魔策", "逆天道"]), 进阶秘籍: new Map() .set("#当派", [["hiz", "太极拳进阶"], ["hiz", "梯云纵进阶"], ["hio", "太极剑法进阶"], ["hio", "先天太极进阶"], ["ord", "太极真义"]]) .set("少林派", [["hiz", "一苇渡江进阶"], ["hiz", "一指禅进阶"], ["hio", "燃木刀法进阶"], ["hio", "金刚不坏体进阶"], ["ord", "金刚不灭体"]]) .set("华山派", [["hiz", "劈石破玉拳进阶"], ["hiz", "紫霞神功进阶"], ["hio", "狂风快剑进阶"], ["hio", "独孤九剑进阶"], ["ord", "独孤剑诀"]]) .set("峨眉派", [["hiz", "九阴白骨爪进阶"], ["hiz", "诸天化身步进阶"], ["hio", "临济十二庄进阶"], ["hio", "倚天剑法进阶"], ["ord", "诸天剑诀"]]) .set("逍遥派", [["hiz", "北冥神功进阶"], ["hiz", "天山六阳掌进阶"], ["hio", "凌波微步进阶"], ["hio", "小无相功进阶"], ["ord", "神游太虚"]]) .set("丐帮", [["hiz", "混元天罡进阶"], ["hiz", "逍遥游进阶"], ["hio", "打狗棒进阶"], ["hio", "降龙十八掌进阶"], ["ord", "降龙掌"]]) .set("杀手楼", [["hiz", "穿心掌进阶"], ["hiz", "杀生决进阶"], ["hio", "踏雪寻梅进阶"], ["hio", "漫天花雨进阶"], ["ord", "天谕"]]) } async function 秘籍统计() { if (统计进行中) return 统计进行中 = true 数据.仓库数据 = {} 数据.仓库完成 = false 数据.书架数据 = {} 数据.书架完成 = false 数据.背包数据 = {} 数据.背包完成 = false 数据.多余残页回收 = []; 数据.表格 = ''; messageClear() WG.更新仓库或书架数据_hook = undefined; WG.更新仓库或书架数据_hook = WG.add_hook(['dialog', 'text'], (data) => { if (data.type == "dialog" && (data.dialog == 'list' || data.dialog == 'pack')) { let length = Object.keys(data).length if (length == 4) { messageAppend("<hio>仓库信息获取开始</hio>"); for (let store of data.stores) { 数据.仓库数据[store.name.toLowerCase()] = { id: store.id, count: store.count }; } 数据.仓库完成 = true WG.Send('sj') } else if (length == 5) { messageAppend("<hio>书架信息获取开始</hio>"); for (let store of data.stores) { 数据.书架数据[store.name.toLowerCase()] = { id: store.id, count: store.count }; } 数据.书架完成 = true WG.Send('pack') } else if (length == 6) { messageAppend("<hio>背包信息获取开始</hio>") for (let item of data.items) { 数据.背包数据[item.name.toLowerCase()] = { id: item.id, count: item.count }; } 数据.背包完成 = true WG.SendCmd('look3 1') } } else if (data.type == 'text' && data.msg == '没有这个玩家。' && 数据.仓库完成 == true && 数据.书架完成 == true && 数据.背包完成 == true) { messageAppend("<hio>信息获取完成</hio>"); $('.dialog-close').click(); WG.remove_hook(WG.更新仓库或书架数据_hook); WG.更新仓库或书架数据_hook = undefined; } }); await WG.Send('stopstate') if (G.room_name == '住房-卧室') WG.Send('store') else WG.go('住房-卧室'); await waitFor(500) 数据.秘籍数据.forEach((value, key) => { 数据.表格 += `<div class="member"><table><tr><th colspan="4"><${key}>${value[0]}</${key}></th></tr>`; value.forEach((item, index) => { if (index == 0) return let 秘籍名字 = `<${key}>${item}秘籍</${key}>`; let 秘籍数量 = 数据.仓库数据[秘籍名字]?.count || 0 + 数据.书架数据[秘籍名字]?.count || 0 + 数据.背包数据[秘籍名字]?.count || 0; let 残页名字 = `<${key}>${item}残页</${key}>`; let 残页数量 = 数据.仓库数据[残页名字]?.count || 0 + 数据.书架数据[残页名字]?.count || 0 + 数据.背包数据[残页名字]?.count || 0; if (秘籍数量 == 0) { if (key == 'hig' && 残页数量 >= 10 || key == 'hic' && 残页数量 >= 30 || key == 'hiy' && 残页数量 >= 50 || key == 'hiz' && 残页数量 >= 100 || key == 'hio' && 残页数量 >= 200 || key == 'ord' && 残页数量 >= 500 ) { 残页数量 = `<${key}>${残页数量}(可合成)</${key}>` } } else if (秘籍数量 > 0 && key != 'ord' && 残页数量 != 0) { 残页数量 = `<hiw>${残页数量}(可丢弃)<hiw>` } if (秘籍数量 > 0 && value[0] != "红色秘籍" && value[0] != "进阶秘籍") { 数据.多余残页回收.push(残页名字); } 数据.表格 += `<tr><td>${秘籍名字}</td><td>${秘籍数量 || ""}</td><td>${残页名字}</td><td>${残页数量 || ""}</td></tr>`; }); 数据.表格 += `</table></div>` }); 数据.多余残页回收 = 数据.多余残页回收.join(",") 数据.表格 += `<div>` 数据.进阶秘籍.forEach((value, key) => { 数据.表格 += `<div class="member"><table><tr><th colspan="4">${key}</th></tr>`; value.forEach((item, index) => { let 秘籍名字 = `<${item[0]}>${item[1]}秘籍</${item[0]}>`; let 秘籍数量 = 数据.仓库数据[秘籍名字]?.count || 0 + 数据.书架数据[秘籍名字]?.count || 0 + 数据.背包数据[秘籍名字]?.count || 0; let 残页名字 = `<${item[0]}>${item[1]}残页</${item[0]}>`; let 残页数量 = 数据.仓库数据[残页名字]?.count || 0 + 数据.书架数据[残页名字]?.count || 0 + 数据.背包数据[残页名字]?.count || 0; 数据.表格 += `<tr><td>${秘籍名字}</td><td>${秘籍数量 || ""}</td><td>${残页名字}</td><td>${残页数量 || ""}</td></tr>`; }) 数据.表格 += `</table></div>` }) 数据.表格 += `</div>` let html = ` <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>秘籍残页详情</title> <style> body{background-color: black;} .member{display: inline-block;vertical-align:top;margin-right: 10px;margin-top: 20px;} table{margin:0;padding:0;border-collapse:collapse;color: #00FF00;} th,td{border: 1px white solid;padding: 5px;} hig{color:#00FF00;} hic{color:#00FFFF;} hiy{color:#FFFF00;} hiz{color:#912CEE;} hio{color:#FFA500;} ord{color:#FF4500;} hiw{color:#FFFFFF;} </style> </head><body> <table> <tr><td>残页回收代码(在设置-高级里)</td></tr> <tr><td>${数据.多余残页回收}</td></tr> </table><p></p> ${数据.表格} </body></html>`; let blob = new Blob([html], { type: "text/html" }); let url = URL.createObjectURL(blob); window.open(url, "_blank"); 统计进行中 = false }; $(document).ready(function () { WG = unsafeWindow.WG; G = unsafeWindow.G; messageClear = unsafeWindow.messageClear; messageAppend = unsafeWindow.messageAppend; addButton(); }); function AddContent(element) { $(".content-message pre").append(element); $(".content-message")[0].scrollTop = $(".content-message")[0].scrollHeight }; function gn() { AddContent( $("<div></div>").append( $(`<span class="span-btn">统计残页秘籍数量</span>`).click(秘籍统计), //$(`<span class="span-btn"></span>`).append("仓库排序").click(仓库排序), ) ); }; function addButton() { const element = $('.sm_button'); if (element.length) { element.before($(`<span class='zdy-item ty_button'></span>`).append($(`<hio>功能</hio>`).click(gn))) } else { setTimeout(() => addButton(), 500); } }; async function waitFor(time) { console.log('等待数据获取中'); await WG.sleep(time) if (WG.更新仓库或书架数据_hook == undefined) return true else await waitFor(time) } })();