Greasy Fork is available in English.
#神传说 MUD #神脚本 #神传说 脚本 qq群367657589
// ==UserScript== // @name wsmud_pluginss // @namespace cqv1 // @version 0.0.32.301 // @date 01/07/2018 // @modified 07/03/2024 // @homepage https://greasyfork.org/zh-CN/scripts/371372 // @description #神传说 MUD #神脚本 #神传说 脚本 qq群367657589 // @author fjcqv(源程序) & zhzhwcn(提供websocket监听)& knva(做了一些微小的贡#) &Bob.cn(raid.js作者) // @match http://*.wsmud.com/* // @match http://*.wamud.com/* // @run-at document-start // @require https://s4.zstatic.net/ajax/libs/vue/2.2.2/vue.min.js // @require https://s4.zstatic.net/ajax/libs/jquery/3.3.1/jquery.min.js // @require https://s4.zstatic.net/ajax/libs/store.js/2.0.12/store.modern.min.js // @require https://s4.zstatic.net/ajax/libs/jquery-contextmenu/3.0.0-beta.2/jquery.contextMenu.min.js // @grant unsafeWindow // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_setClipboard // @grant GM_deleteValue // @grant GM_registerMenuCommand // ==/UserScript== (function () { 'use strict'; Array.prototype.baoremove = function (dx) { if (isNaN(dx) || dx > this.length) { return false; } this.splice(dx, 1); }; Array.prototype.remove = function (val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }; String.prototype.replaceAll = function (s1, s2) { return this.replace(new RegExp(s1, "gm"), s2); }; var copyToClipboard = function (text) { var textarea = document.createElement('textarea'); textarea.value = text; document.body.appendChild(textarea); textarea.select(); document.execCommand("Copy"); textarea.parentNode.removeChild(textarea); }; function dateFormat(fmt, date) { let ret; const opt = { "Y+": date.getFullYear().toString(), // 年 "m+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "M+": date.getMinutes().toString(), // 分 "S+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } //滚动 -- fork from Suqing funny ---------------fixed function AutoScroll(name) { if (name) { if ($(name).length != 0) { 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); } } } } /** * 为数字加上单位:万或亿 * * 例如: * 1000.01 => 1000.01 * 10000 => 1万 * 99000 => 9.9万 * 566000 => 56.6万 * 5660000 => 566万 * 44440000 => 4444万 * 11111000 => 1111.1万 * 444400000 => 4.44亿 * 40000000,00000000,00000000 => 4000万亿亿 * 4,00000000,00000000,00000000 => 4亿亿亿 * * @param {number} number 输入数字. * @param {number} decimalDigit 小数点后最多位数,默认为2 * @return {string} 加上单位后的数字 */ function addWan(integer, number, mutiple, decimalDigit) { var digit = getDigit(integer); if (digit > 3) { var remainder = digit % 8; if (remainder >= 5) { // ‘十万’、‘百万’、‘千万’显示为‘万’ remainder = 4; } return Math.round(number / Math.pow(10, remainder + mutiple - decimalDigit)) / Math.pow(10, decimalDigit) + '万'; } else { return Math.round(number / Math.pow(10, mutiple - decimalDigit)) / Math.pow(10, decimalDigit); } } function getDigit(integer) { var digit = -1; while (integer >= 1) { digit++; integer = integer / 10; } return digit; } function addChineseUnit(number, decimalDigit) { decimalDigit = decimalDigit == null ? 2 : decimalDigit; var integer = Math.floor(number); var digit = getDigit(integer); // ['个', '十', '百', '千', '万', '十万', '百万', '千万']; var unit = []; if (digit > 3) { var multiple = Math.floor(digit / 8); if (multiple >= 1) { var tmp = Math.round(integer / Math.pow(10, 8 * multiple)); unit.push(addWan(tmp, number, 8 * multiple, decimalDigit)); for (var i = 0; i < multiple; i++) { unit.push('亿'); } return unit.join(''); } else { return addWan(integer, number, 0, decimalDigit); } } else { return number; } } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == variable) { return pair[1]; } } return (false); } var CanUse = false; if (WebSocket) { console.log('插件可正常运行,Plugins can run normally'); CanUse = true; function show_msg(msg) { ws_on_message({ type: "text", data: msg }); } var _ws = WebSocket, ws, ws_on_message; unsafeWindow.WebSocket = function (uri) { ws = new _ws(uri); //document.getElementsByClassName("signinfo")[0].innerHTML = "<HIR>#神传说SS插件正常运行! QQ群 367657589</HIR>" //$('.signinfo').on('click', function () { // ProConsole.init(); //}); }; unsafeWindow.WebSocket.prototype = { CONNECTING: _ws.CONNECTING, OPEN: _ws.OPEN, CLOSING: _ws.CLOSING, CLOSED: _ws.CLOSED, get url() { return ws.url; }, get protocol() { return ws.protocol; }, get readyState() { return ws.readyState; }, get bufferedAmount() { return ws.bufferedAmount; }, get extensions() { return ws.extensions; }, get binaryType() { return ws.binaryType; }, set binaryType(t) { ws.binaryType = t; }, get onopen() { return ws.onopen; }, set onopen(fn) { ws.onopen = fn; }, get onmessage() { return ws.onmessage; }, set onmessage(fn) { ws_on_message = fn; ws.onmessage = WG.receive_message; if (unsafeWindow.funny) { if (unsafeWindow.funny.API != null) { unsafeWindow.funny.API.ws_on_message = fn unsafeWindow.funny.API.websocket = ws } } }, get onclose() { return ws.onclose; }, set onclose(fn) { ws.onclose = (e) => { WG.online = false; G.connected = false; auto_relogin = GM_getValue(roleid + "_auto_relogin", auto_relogin); fn(e); if (auto_relogin == "开") { setTimeout(() => { console.log(new Date()); KEY.do_command("score"); }, 10000); } } }, get onerror() { return ws.onerror; }, set onerror(fn) { ws.onerror = fn; }, send: function (text) { if (G.cookie == undefined) { G.cookie = text; } if (text.indexOf(G.id) > -1 && !G.connected) { text = G.cookie + ' ' + G.id } if (G.cmd_echo) { show_msg('<hiy>' + text + '</hiy>'); } if (text[0] == "$") { WG.SendCmd(text); return; } if (text[0] == '@') { if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(text); return; } else { messageAppend("插件未安装,请访问 https://greasyfork.org/zh-CN/scripts/375851-wsmud-raid 下载并安装"); window.open("https://greasyfork.org/zh-CN/scripts/375851-wsmud-raid ", '_blank').location; } } if (text.indexOf('drop') == 0) { var itemids = text.split(' '); var itemid = itemids[itemids.length - 1]; WG.getItemNameByid(itemid, function (name) { if (lock_list.indexOf(name) >= 0) { messageAppend(`已锁物品${name},无法丢弃,请解锁后重试`); return; } else { ws.send(text); } }) return; } if (text.indexOf('jh ') == 0 || text.indexOf("go ") == 0) { if (auto_rewardgoto == "开") { WG.Send("tm " + text); } } switch (text) { case 'sm': T.sm(); break; case 'wk': WG.zdwk(); break; case 'backup': WG.make_config(); break; case 'load': WG.load_config(); break; default: ws.send(text); break; } }, close: function () { ws.close(); } }; var cmd_queue = [], cmd_busy = false, echo = false; var _send_cmd = function () { if (!ws || ws.readyState != 1) { cmd_busy = false; cmd_queue = [] } else if (cmd_queue.length > 0) { cmd_busy = true; var t = new Date().getTime(); for (var i = 0; i < cmd_queue.length; i++) { if (!cmd_queue[i].timestamp || cmd_queue[i].timestamp >= t - 1300) { cmd_queue.splice(0, i); break } } for (i = 0; i < Math.min(cmd_queue.length, 5); i++) { if (!cmd_queue[i].timestamp) { try { ws.send(cmd_queue[i].cmd); cmd_queue[i].timestamp = t } catch (e) { cmd_busy = false; cmd_queue = []; return } } } if (!cmd_queue[cmd_queue.length - 1].timestamp) { setTimeout(_send_cmd, 100) } else { cmd_busy = false } } else { cmd_busy = false } }; var send_cmd = function (cmd, no_queue) { if (ws && ws.readyState == 1) { cmd = cmd instanceof Array ? cmd : cmd.split(';'); if (no_queue) { for (var i = 0; i < cmd.length; i++) { if (G.cmd_echo) { show_msg('<hiy>' + cmd[i] + '</hiy>') } ws.send(cmd[i]) } } else { for (i = 0; i < cmd.length; i++) { cmd_queue.push({ cmd: cmd[i], timestamp: 0 }) } if (!cmd_busy) { _send_cmd() } } } }; } else { console.log("插件不可运行,请访问: https://greasyfork.org/zh-CN/forum/discussion/41547/x"); } var L = { msg: function (msg) { const interval = setInterval(() => { if (typeof layer !== 'undefined') { clearInterval(interval); layer.msg(msg, { offset: '50%', shift: 5 }); } else { var server = document.createElement('script'); server.setAttribute('src', 'https://s4.zstatic.net/ajax/libs/layer/2.3/layer.js'); document.head.appendChild(server); } }, 500); // 每500毫秒检查一次 }, isMobile: function () { var ua = navigator.userAgent; var ipad = ua.match(/(iPad).*OS\s([\d_]+)/), isIphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/), isAndroid = ua.match(/(Android)\s+([\d.]+)/), isMobile = isIphone || isAndroid; return isMobile; } }; var roomItemSelectIndex = -1; var timer = 0; var cnt = 0; var zb_npc; var zb_place; var next = 0; var roomData = []; var packData = []; // 背包数据 var storeData = [];// 仓库数据 var eqData = []; var store_list = []; var lock_list = []; var needfind = { "#当派-林间小径": ["go south"], "峨眉派-走廊": ["go north", "go south;go south", "go north;go east;go east"], "丐帮-暗道": ["go east", "go east;go east", "go east"], "逍遥派-林间小道": ["go west;go north", "go south;go south", "go north;go west"], "少林派-竹林": ["go north"], "逍遥派-地下石室": ["go up"], "逍遥派-木屋": ["go south;go south;go south;go south"] }; var pgoods = {}; var goods = { "米饭": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "包子": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "鸡腿": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "面条": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "扬州炒饭": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "米酒": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "花雕酒": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "女儿红": { "id": null, "type": "wht", "sales": "店小二", "place": "扬州城-醉仙楼" }, "醉仙酿": { "id": null, "type": "hig", "sales": "店小二", "place": "扬州城-醉仙楼" }, "神仙醉": { "id": null, "type": "hiy", "sales": "店小二", "place": "扬州城-醉仙楼" }, "布衣": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "钢刀": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "木棍": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "英雄巾": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "布鞋": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "铁戒指": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "簪子": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "长鞭": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "钓鱼竿": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "鱼饵": { "id": null, "type": "wht", "sales": "杂货铺老板 杨永福", "place": "扬州城-杂货铺" }, "铁剑": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "钢刀": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "铁棍": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "铁杖": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "铁镐": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "飞镖": { "id": null, "type": "wht", "sales": "铁匠铺老板 铁匠", "place": "扬州城-打铁铺" }, "hig金创药": { "id": null, "type": "hig", "sales": "药铺老板 平一指", "place": "扬州城-药铺" }, "hig引气丹": { "id": null, "type": "hig", "sales": "药铺老板 平一指", "place": "扬州城-药铺" }, }; var equip = { "铁镐": 0, }; var npcs = { "店小二": 0, "铁匠铺老板 铁匠": 0, "药铺老板 平一指": 0, "杂货铺老板 杨永福": 0 }; var place = { "住房": "jh fam 0 start;go west;go west;go north;go enter", "住房-卧室": "jh fam 0 start;go west;go west;go north;go enter;go north;store", "住房-小花园": "jh fam 0 start;go west;go west;go north;go enter;go northeast", "住房-炼药房": "jh fam 0 start;go west;go west;go north;go enter;go east", "住房-练功房": "jh fam 0 start;go west;go west;go north;go enter;go west", "扬州城-钱庄": "jh fam 0 start;go north;go west;store", "扬州城-广场": "jh fam 0 start", "扬州城-书院": "jh fam 0 start;go east;go north", "扬州城-醉仙楼": "jh fam 0 start;go north;go north;go east", "扬州城-杂货铺": "jh fam 0 start;go east;go south", "扬州城-打铁铺": "jh fam 0 start;go east;go east;go south", "扬州城-药铺": "jh fam 0 start;go east;go east;go north", "扬州城-衙门正厅": "jh fam 0 start;go west;go north;go north", "扬州城-镖局正厅": "jh fam 0 start;go west;go west;go south;go south", "扬州城-矿山": "jh fam 0 start;go west;go west;go west;go west", "扬州城-喜宴": "jh fam 0 start;go north;go north;go east;go up", "扬州城-擂台": "jh fam 0 start;go west;go south", "扬州城-当铺": "jh fam 0 start;go south;go east", "扬州城-帮派": "jh fam 0 start;go south;go south;go east", "扬州城-有间客栈": "jh fam 0 start;go north;go east", "扬州城-赌场": "jh fam 0 start;go south;go west", "帮会-大门": "jh fam 0 start;go south;go south;go east;go east", "帮会-大院": "jh fam 0 start;go south;go south;go east;go east;go east", "帮会-练功房": "jh fam 0 start;go south;go south;go east;go east;go east;go north", "帮会-聚义堂": "jh fam 0 start;go south;go south;go east;go east;go east;go east", "帮会-仓库": "jh fam 0 start;go south;go south;go east;go east;go east;go east;go north", "帮会-炼药房": "jh fam 0 start;go south;go south;go east;go east;go east;go south", "扬州城-扬州#馆": "jh fam 0 start;go south;go south;go west", "扬州城-#庙": "jh fam 0 start;go north;go north;go west", "#当派-广场": "jh fam 1 start;", "#当派-三清殿": "jh fam 1 start;go north", "#当派-石阶": "jh fam 1 start;go west", "#当派-练功房": "jh fam 1 start;go west;go west", "#当派-太子岩": "jh fam 1 start;go west;go northup", "#当派-桃园小路": "jh fam 1 start;go west;go northup;go north", "#当派-舍身崖": "jh fam 1 start;go west;go northup;go north;go east", "#当派-南岩峰": "jh fam 1 start;go west;go northup;go north;go west", "#当派-乌鸦岭": "jh fam 1 start;go west;go northup;go north;go west;go northup", "#当派-五老峰": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup", "#当派-虎头岩": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup", "#当派-朝天宫": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north", "#当派-三天门": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north;go north", "#当派-紫金城": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north;go north;go north", "#当派-林间小径": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north;go north;go north;go north;go north", "#当派-后山小院": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north;go north;go north;go north;go north;go north", "少林派-广场": "jh fam 2 start;", "少林派-山门殿": "jh fam 2 start;go north", "少林派-东侧殿": "jh fam 2 start;go north;go east", "少林派-西侧殿": "jh fam 2 start;go north;go west", "少林派-天王殿": "jh fam 2 start;go north;go north", "少林派-大雄宝殿": "jh fam 2 start;go north;go north;go northup", "少林派-钟楼": "jh fam 2 start;go north;go north;go northeast", "少林派-鼓楼": "jh fam 2 start;go north;go north;go northwest", "少林派-后殿": "jh fam 2 start;go north;go north;go northwest;go northeast", "少林派-练#场": "jh fam 2 start;go north;go north;go northwest;go northeast;go north", "少林派-罗汉堂": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go east", "少林派-般若堂": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go west", "少林派-方丈楼": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north", "少林派-戒律院": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north;go east", "少林派-达摩院": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north;go west", "少林派-竹林": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north;go north", "少林派-藏经阁": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north;go north;go west", "少林派-达摩洞": "jh fam 2 start;go north;go north;go northwest;go northeast;go north;go north;go north;go north;go north", "华山派-镇岳宫": "jh fam 3 start;", "华山派-苍龙岭": "jh fam 3 start;go eastup", "华山派-舍身崖": "jh fam 3 start;go eastup;go southup", "华山派-峭壁": "jh fam 3 start;go eastup;go southup;jumpdown", "华山派-山谷": "jh fam 3 start;go eastup;go southup;jumpdown;go southup", "华山派-山间平地": "jh fam 3 start;go eastup;go southup;jumpdown;go southup;go south", "华山派-林间小屋": "jh fam 3 start;go eastup;go southup;jumpdown;go southup;go south;go east", "华山派-玉女峰": "jh fam 3 start;go westup", "华山派-玉女祠": "jh fam 3 start;go westup;go west", "华山派-练#场": "jh fam 3 start;go westup;go north", "华山派-练功房": "jh fam 3 start;go westup;go north;go east", "华山派-客厅": "jh fam 3 start;go westup;go north;go north", "华山派-偏厅": "jh fam 3 start;go westup;go north;go north;go east", "华山派-寝室": "jh fam 3 start;go westup;go north;go north;go north", "华山派-玉女峰山路": "jh fam 3 start;go westup;go south", "华山派-玉女峰小径": "jh fam 3 start;go westup;go south;go southup", "华山派-思过崖": "jh fam 3 start;go westup;go south;go southup;go southup", "华山派-山洞": "jh fam 3 start;go westup;go south;go southup;go southup;break bi;go enter", "华山派-长空栈道": "jh fam 3 start;go westup;go south;go southup;go southup;break bi;go enter;go westup", "华山派-落雁峰": "jh fam 3 start;go westup;go south;go southup;go southup;break bi;go enter;go westup;go westup", "华山派-华山绝顶": "jh fam 3 start;go westup;go south;go southup;go southup;break bi;go enter;go westup;go westup;jumpup", "峨眉派-金顶": "jh fam 4 start", "峨眉派-庙门": "jh fam 4 start;go west", "峨眉派-广场": "jh fam 4 start;go west;go south", "峨眉派-走廊": "jh fam 4 start;go west;go south;go west", "峨眉派-休息室": "jh fam 4 start;go west;go south;go east;go south", "峨眉派-厨房": "jh fam 4 start;go west;go south;go east;go east", "峨眉派-练功房": "jh fam 4 start;go west;go south;go west;go west", "峨眉派-小屋": "jh fam 4 start;go west;go south;go west;go north;go north", "峨眉派-清修洞": "jh fam 4 start;go west;go south;go west;go south;go south", "峨眉派-大殿": "jh fam 4 start;go west;go south;go south", "峨眉派-睹光台": "jh fam 4 start;go northup", "峨眉派-华藏庵": "jh fam 4 start;go northup;go east", "逍遥派-青草坪": "jh fam 5 start", "逍遥派-林间小道": "jh fam 5 start;go east", "逍遥派-练功房": "jh fam 5 start;go east;go north", "逍遥派-木板路": "jh fam 5 start;go east;go south", "逍遥派-工匠屋": "jh fam 5 start;go east;go south;go south", "逍遥派-休息室": "jh fam 5 start;go west;go south", "逍遥派-木屋": "jh fam 5 start;go north;go north", "逍遥派-地下石室": "jh fam 5 start;go down;go down", "丐帮-树洞内部": "jh fam 6 start", "丐帮-树洞下": "jh fam 6 start;go down", "丐帮-暗道": "jh fam 6 start;go down;go east", "丐帮-破庙密室": "jh fam 6 start;go down;go east;go east;go east", "丐帮-土地庙": "jh fam 6 start;go down;go east;go east;go east;go up", "丐帮-林间小屋": "jh fam 6 start;go down;go east;go east;go east;go east;go east;go up", "杀手楼-大门": "jh fam 7 start", "杀手楼-大厅": "jh fam 7 start;go north", "杀手楼-暗阁": "jh fam 7 start;go north;go up", "杀手楼-铜楼": "jh fam 7 start;go north;go up;go up", "杀手楼-休息室": "jh fam 7 start;go north;go up;go up;go east", "杀手楼-银楼": "jh fam 7 start;go north;go up;go up;go up;go up", "杀手楼-练功房": "jh fam 7 start;go north;go up;go up;go up;go up;go east", "杀手楼-金楼": "jh fam 7 start;go north;go up;go up;go up;go up;go up;go up", "杀手楼-书房": "jh fam 7 start;go north;go up;go up;go up;go up;go up;go up;go west", "杀手楼-平台": "jh fam 7 start;go north;go up;go up;go up;go up;go up;go up;go up", "襄阳城-广场": "jh fam 8 start", "襄阳城-南城门": "jh fam 8 start;go south;go south;go south;go south", "襄阳城-北城门": "jh fam 8 start;go north;go north;go north;go north;", "襄阳城-西城门": "jh fam 8 start;go west;go west;go west;go west", "襄阳城-东城门": "jh fam 8 start;go east;go eastgo east;go east", "#道塔": "jh fam 9 start" }; var mpz_path = { "#当派": "jh fam 1 start;go west;go northup;go north;go west;go northup;go northup;go northup;go north;go north;go north;go north;go north", "华山派": "jh fam 3 start;go westup;go north", "少林派": "jh fam 2 start;go north;go north;go northwest;go northeast;go north", "峨眉派": "jh fam 4 start;go west;go south;go west;go south", "逍遥派": "jh fam 5 start;go west;go east;go down", "丐帮": "jh fam 6 start;go down;go east;go east;go east;go east;go east", }; var diff_colors = { 'normal': '', 'access': 'https://cdn.jsdelivr.net/gh/mapleobserver/wsmud-script/plugins/wsmud_color_accessibility.css', 'flat': 'https://cdn.jsdelivr.net/gh/mapleobserver/wsmud-script/plugins/wsmud_color_flat.css' }; var fb_path = []; var drop_list = []; var fenjie_list = []; //boss黑名单 var blacklist = ""; //pfm黑名单 var blackpfm = []; //角色 var role; var roleid; //门派 var family = null; //师门自动放弃 var sm_loser = "开"; //师门自动牌子 var sm_price = null; //师门自动取 var sm_getstore = null; //师门无视稀有程度 var sm_any = "开"; // var wudao_pfm = ""; //boss战斗前等待(ms) var ks_pfm = "2000"; //boss等待时间(s) var ks_wait = "120"; //自动婚宴 var automarry = null; //自动boss var autoKsBoss = null; //系列自动 var stopauto = false; //获得物品战士 var getitemShow = null; //自命令展示方式 var zmlshowsetting = 0; //背包已满提示方式 var bagFull = 0; //通知推送开关、方式、Token、Url var pushSwitch = "关"; var pushType = "0"; var pushToken = ""; // var pushUrl = "https://"; //停止后动作 var auto_command = null; //装备列表 var eqlist = {}; //{'unarmed':'','force':'','dodge':'','sword':'','blade':'','club':'','staff':'','whip':'','parry':''} var skilllist = {}; //自动施法黑名单 var unauto_pfm = ''; //自动施法开关 var auto_pfmswitch = "开"; // 自动施法模式 开:智能施法,关:顺序施法 var auto_pfm_mode = "开"; //自动转发路径 var auto_rewardgoto = "关"; //显示昏迷信息 var busy_info = "关"; //仓库位置 var saveAddr = "关"; //自动更新仓库数据 var auto_updateStore = "关"; //自动重连 var auto_relogin = "关"; var autoeq = ""; //自命令数组 type 0 原生 1 自命令 2js //[{"name":"name","zmlRun":"zzzz","zmlShow":"1","zmlType":"0"}] var zml = []; //自定义存取 var zdy_item_store = ''; //自定义存取 var zdy_item_store2 = ''; //自定义锁 var zdy_item_lock = ''; //自定义丢弃 var zdy_item_drop = ''; //自定义分解 var zdy_item_fenjie = ''; //状态监控 type 类型 ishave 0 =其他任何人 1= 本人 2 仅npc send 命令数组 //[{"name":"","type":"status","action":"remove","keyword":"busy","ishave":"0","send":"","isactive":"1","maxcount":10,"pname":"宋远桥","istip":"1"}] var ztjk_item = []; // 自定义技能开关 var zdyskills = "关"; var zdyskilllist = ""; //欢迎语 var welcome = ''; //屏蔽开关 var shieldswitch = "开" //屏蔽列表 var shield = ''; //屏蔽关键字列表 var shieldkey = ''; //当你学习,练习,打坐中断后,自动去挖矿或以下操作 var statehml = ''; //背景图片 var backimageurl = ''; //登录后执行 var loginhml = ''; //定时任务 //名称 类型 一次 1 每天 0 发送命令 触发时间 24小时制 //[{"name":"","type":"0","send":"","h":"","s":"","m":""}] var timequestion = []; //安静模式 var silence = '开'; //dps统计信息 var pfmnum = 0; var pfmdps = 0; var dpssakada = '开' var critical = 0; var criticalnum = 0; var dpslock = 0; var battletime = 0; var lastcri = 0, lastpfm = 0; //funny计算 var funnycalc = '关' //自定义btn //[{"name":名称,"send":""},] var inzdy_btn = false; var zdy_btnlist = []; //自动购买 var auto_buylist = ""; //自动回收残页清单 var auto_skillPaperSelllist = ""; //配色 var color_select = "normal"; //死亡提示 var die_str = "菜"; //快捷键功能 var exit1 = undefined; var exit2 = undefined; var exit3 = undefined; var KEY = { keys: [], roomItemSelectIndex: -1, init: function () { //添加快捷键说明 $("span[command=stopstate] span:eq(0)").html("S"); $("span[command=showcombat] span:eq(0)").html("A"); $("span[command=showtool] span:eq(0)").html("C"); $("span[command=pack] span:eq(0)").html("B"); $("span[command=tasks] span:eq(0)").html("L"); $("span[command=score] span:eq(0)").html("O"); $("span[command=jh] span:eq(0)").html("J"); $("span[command=skills] span:eq(0)").html("K"); $("span[command=message] span:eq(0)").html("U"); $("span[command=shop] span:eq(0)").html("P"); $("span[command=stats] span:eq(0)").html("I"); $("span[command=setting] span:eq(0)").html(","); $(document).on("keydown", this.e); this.add(27, function () { KEY.dialog_close(); }); this.add(192, function () { $(".map-icon").click(); }); this.add(32, function () { KEY.dialog_confirm(); }); this.add(83, function () { KEY.do_command("stopstate"); }); this.add(13, function () { KEY.do_command("showchat"); }); this.add(65, function () { KEY.do_command("showcombat"); }); this.add(67, function () { KEY.do_command("showtool"); }); this.add(66, function () { KEY.do_command("pack"); }); this.add(76, function () { KEY.do_command("tasks"); }); this.add(79, function () { KEY.do_command("score"); }); this.add(74, function () { KEY.do_command("jh"); }); this.add(75, function () { KEY.do_command("skills"); }); this.add(73, function () { KEY.do_command("stats"); }); this.add(85, function () { KEY.do_command("message"); }); this.add(80, function () { KEY.do_command("shop"); }); this.add(188, function () { KEY.do_command("setting"); }); this.add(81, function () { inzdy_btn ? WG.zdybtnfunc(0) : WG.sm_button(); }); this.add(87, function () { inzdy_btn ? WG.zdybtnfunc(1) : WG.go_yamen_task(); }); this.add(69, function () { inzdy_btn ? WG.zdybtnfunc(2) : WG.kill_all(); }); this.add(82, function () { inzdy_btn ? WG.zdybtnfunc(3) : WG.get_all(); }); this.add(84, function () { inzdy_btn ? WG.zdybtnfunc(4) : WG.sell_all(); }); this.add(89, function () { inzdy_btn ? WG.zdybtnfunc(5) : WG.zdwk(); }); this.add(9, function () { KEY.onRoomItemSelect(); return false; }); //方向 this.add(102, function () { // NumPad 6 等同于→ exit1 = G.exits.get("east"); exit2 = G.exits.get("eastup"); exit3 = G.exits.get("eastdown"); if (exit1) { WG.Send("go east") } else if (exit2) { { WG.Send("go eastup") } } else if (exit3) { { WG.Send("go eastdown") } } KEY.onChangeRoom(); }); this.add(39, function () { exit1 = G.exits.get("east"); exit2 = G.exits.get("eastup"); exit3 = G.exits.get("eastdown"); if (exit1) { WG.Send("go east") } else if (exit2) { { WG.Send("go eastup") } } else if (exit3) { { WG.Send("go eastdown") } } KEY.onChangeRoom(); }); this.add(100, function () { exit1 = G.exits.get("west"); exit2 = G.exits.get("westup"); exit3 = G.exits.get("westdown"); if (exit1) { WG.Send("go west") } else if (exit2) { { WG.Send("go westup") } } else if (exit3) { { WG.Send("go westdown") } } KEY.onChangeRoom(); }); this.add(37, function () { exit1 = G.exits.get("west"); exit2 = G.exits.get("westup"); exit3 = G.exits.get("westdown"); if (exit1) { WG.Send("go west") } else if (exit2) { { WG.Send("go westup") } } else if (exit3) { { WG.Send("go westdown") } } KEY.onChangeRoom(); }); this.add(98, function () { // NumPad 2 等同于↓ exit1 = G.exits.get("south"); exit2 = G.exits.get("southup"); exit3 = G.exits.get("southdown"); if (exit1) { WG.Send("go south") } else if (exit2) { { WG.Send("go southup") } } else if (exit3) { { WG.Send("go southdown") } } KEY.onChangeRoom(); }); this.add(40, function () { // Down Arrow↓ exit1 = G.exits.get("south"); exit2 = G.exits.get("southup"); exit3 = G.exits.get("southdown"); if (exit1) { WG.Send("go south") } else if (exit2) { { WG.Send("go southup") } } else if (exit3) { { WG.Send("go southdown") } } KEY.onChangeRoom(); }); this.add(101, function () { // NumPad 3 控制down,按住alt时为up WG.Send("go down"); }); this.add(101 + 512, function () { // NumPad 3 控制down,按住alt时为up WG.Send("go up"); }); this.add(104, function () { exit1 = G.exits.get("north"); exit2 = G.exits.get("northup"); exit3 = G.exits.get("northdown"); if (exit1) { WG.Send("go north") } else if (exit2) { { WG.Send("go northup") } } else if (exit3) { { WG.Send("go northdown") } } KEY.onChangeRoom(); }); this.add(38, function () { exit1 = G.exits.get("north"); exit2 = G.exits.get("northup"); exit3 = G.exits.get("northdown"); if (exit1) { WG.Send("go north") } else if (exit2) { { WG.Send("go northup") } } else if (exit3) { { WG.Send("go northdown") } } KEY.onChangeRoom(); }); this.add(99, function () { WG.Send("go southeast"); KEY.onChangeRoom(); }); this.add(97, function () { WG.Send("go southwest"); KEY.onChangeRoom(); }); this.add(105, function () { WG.Send("go northeast"); KEY.onChangeRoom(); }); this.add(103, function () { WG.Send("go northwest"); KEY.onChangeRoom(); }); this.add(49, function () { KEY.combat_commands(0); }); this.add(50, function () { KEY.combat_commands(1); }); this.add(51, function () { KEY.combat_commands(2); }); this.add(52, function () { KEY.combat_commands(3); }); this.add(53, function () { KEY.combat_commands(4); }); this.add(54, function () { KEY.combat_commands(5); }); this.add(55, function () {//7 KEY.combat_commands(6); }); this.add(56, function () {//8 KEY.combat_commands(7); }); this.add(57, function () {//9 KEY.combat_commands(8); }); this.add(48, function () {//0 KEY.combat_commands(9); }); this.add(45, function () {//- KEY.combat_commands(10); }); this.add(61, function () {//= KEY.combat_commands(11); }); //alt this.add(49 + 512, function () { KEY.onRoomItemAction(0); }); this.add(50 + 512, function () { KEY.onRoomItemAction(1); }); this.add(51 + 512, function () { KEY.onRoomItemAction(2); }); this.add(52 + 512, function () { KEY.onRoomItemAction(3); }); this.add(53 + 512, function () { KEY.onRoomItemAction(4); }); this.add(54 + 512, function () { KEY.onRoomItemAction(5); }); //ctrl this.add(49 + ####, function () { KEY.room_commands(0); }); this.add(50 + ####, function () { KEY.room_commands(1); }); this.add(51 + ####, function () { KEY.room_commands(2); }); this.add(52 + ####, function () { KEY.room_commands(3); }); this.add(53 + ####, function () { KEY.room_commands(4); }); this.add(54 + ####, function () { KEY.room_commands(5); }); }, add: function (k, c) { var tmp = { key: k, callback: c, }; this.keys.push(tmp); }, e: function (event) { if ($(".channel-box").is(":visible")) { KEY.chatModeKeyEvent(event); return; } if ($(".dialog-confirm").is(":visible") && ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105))) return; if ($('input').is(':focus') || $('textarea').is(':focus')) { return; } var kk = (event.ctrlKey || event.metaKey ? #### : 0) + (event.altKey ? 512 : 0) + event.keyCode; for (var k of KEY.keys) { if (k.key == kk) return k.callback(); } }, isallow: true, dialog_close: function () { $(".dialog-close").click(); }, dialog_confirm: function () { if ($(".dialog-confirm").attr("style").indexOf("block") >= 0) { if (this.isallow) { this.isallow = false $(".dialog-btn.btn-ok").click(); setTimeout(() => { this.isallow = true; }, 500); } } }, do_command: function (name) { $("span[command=" + name + "]").click(); }, room_commands: function (index) { $("div.combat-panel div.room-commands span:eq(" + index + ")").click(); }, combat_commands: function (index) { $("div.combat-panel div.combat-commands span.pfm-item:eq(" + index + ")").click(); }, chatModeKeyEvent: function (event) { if (event.keyCode == 27) { KEY.dialog_close(); } else if (event.keyCode == 13) { if ($(".sender-box").val().length) $(".sender-btn").click(); else KEY.dialog_close(); } }, onChangeRoom: function () { KEY.roomItemSelectIndex = -1; }, onRoomItemSelect: function () { if (KEY.roomItemSelectIndex != -1) { $(".room_items div.room-item:eq(" + KEY.roomItemSelectIndex + ")").css("background", "#000"); } KEY.roomItemSelectIndex = (KEY.roomItemSelectIndex + 1) % $(".room_items div.room-item").length; var curItem = $(".room_items div.room-item:eq(" + KEY.roomItemSelectIndex + ")"); curItem.css("background", "#444"); curItem.click(); }, onRoomItemAction: function (index) { //NPC下方按键 $(".room_items .item-commands span:eq(" + index + ")").click(); }, } function textBecomeImg(text, fontsize, fontcolor) { var canvas = document.createElement('canvas'); //小于32字加1 小于60字加2 小于80字加4 小于100字加6 var $buHeight = 0; if (fontsize <= 32) { $buHeight = 1; } else if (fontsize > 32 && fontsize <= 60) { $buHeight = 2; } else if (fontsize > 60 && fontsize <= 80) { $buHeight = 4; } else if (fontsize > 80 && fontsize <= 100) { $buHeight = 6; } else if (fontsize > 100) { $buHeight = 10; } //对于g j 等有时会有遮挡,这里增加一些高度 canvas.height = fontsize + $buHeight; var context = canvas.getContext('2d'); // 擦除(0,0)位置大小为200x200的矩形,擦除的意思是把该区域变为透明 context.clearRect(0, 0, canvas.width, canvas.height); context.fillStyle = fontcolor; context.font = fontsize + "px KaiTi"; //top(顶部对齐) hanging(悬挂) middle(中间对齐) bottom(底部对齐) alphabetic是默认值 context.textBaseline = 'middle'; context.fillText(text, 0, fontsize / 2) canvas.width = context.measureText(text).width; context.fillStyle = fontcolor; context.font = fontsize + "px KaiTi"; context.textBaseline = 'middle'; context.fillText(text, 0, fontsize / 2) var dataUrl = canvas.toDataURL('image/png');//注意这里背景透明的话,需要使用png return dataUrl; } function messageClear() { $(".WG_log pre").html(""); } var log_line = 0; function textShow(text) { imgShow(textBecomeImg(text, 90, 'red')) } function imgShow(url, t = 2000) { $('.container > .content-message').css('background', 'url(' + url + ') no-repeat center center') setTimeout(() => { $('.container > .content-message').css('background', '') }, t); } function messageAppend(m, t = 0, area = 0) { if (area) { var ap = m + "\n"; if (t == 1) { ap = "<hiy>" + ap + "</hiy>"; } else if (t == 2) { ap = "<hig>" + ap + "</hig>"; } else if (t == 3) { ap = "<hiw>" + ap + "</hiw>"; } else if (t == 4) { ap = "<hir>" + ap + "</hir>"; } $('.content-message pre').append(ap) } else { 100 < log_line && (log_line = 0, $(".WG_log pre").empty()); var ap = m + "\n"; if (t == 1) { ap = "<hiy>" + ap + "</hiy>"; } else if (t == 2) { ap = "<hig>" + ap + "</hig>"; } else if (t == 3) { ap = "<hiw>" + ap + "</hiw>"; } else if (t == 4) { ap = "<hir>" + ap + "</hir>"; } $(".WG_log pre").append(ap); log_line++; $(".WG_log")[0].scrollTop = 99999; } } var sm_array = { '#当': { "place": "#当派-三清殿", "npc": "#当派第二代弟子 #当首侠 宋远桥", "sxplace": "#当派-太子岩", "sx": "首席弟子" }, '华山': { "place": "华山派-镇岳宫", "npc": "市井豪杰 高根明", "sxplace": "华山派-练#场", "sx": "首席弟子" }, '少林': { "place": "少林派-天王殿", "npc": "少林寺第三十九代弟子 道觉禅师", "sxplace": "少林派-练#场", "sx": "大师兄" }, '逍遥': { "place": "逍遥派-青草坪", "npc": "聪辩老人 苏星河", "sxplace": "-jh fam 5 start;go west", "sx": "首席弟子" }, '丐帮': { "place": "丐帮-树洞下", "npc": "丐帮七袋弟子 左全", "sxplace": "丐帮-破庙密室", "sx": "首席弟子" }, '峨眉': { "place": "峨眉派-庙门", "npc": "峨眉派第五代弟子 苏梦清", "sxplace": "峨眉派-广场", "sx": "大师姐" }, '#馆': { "place": "扬州城-扬州#馆", "npc": "#馆教习", "sxplace": "扬州城-扬州#馆" }, '杀手楼': { "place": "杀手楼-大厅", "npc": "杀手教习 何小二", "sxplace": "杀手楼-练功房", "sx": "金牌杀手" }, }; var WG = { online: false, sm_state: -1, sm_item: null, sm_store: null, init: function () { $("li[command=SelectRole]").on("click", function () { WG.login(); }); }, inArray: function (val, arr) { for (let i = 0; i < arr.length; i++) { let item = arr[i]; if (item[0] == "<") { if (item == val) return true; } else { if (item != "") { if (val.indexOf(item) >= 0) return true; } } } return false; }, hasStr: function (val, arr) { if (arr.length == null) { for (let item in arr) { for (let i of arr[item]) { if (i == val) return true; } } } else { for (let i = 0; i < arr.length; i++) { let item = arr[i]; if (item == val) return true; } } return false; }, set_value(key, value) { return GM_setValue(key, value); }, get_value(key) { return GM_getValue(key); }, login: function () { role = $('.role-list .select').text().split(/[\s\n]/).pop(); roleid = $('.role-list .select').attr('roleid') GM_listValues().map(function (key) { if (key.indexOf(role + "_") == 0) { var tmpVal = key.split(role + "_")[1]; console.log(tmpVal) GM_setValue(roleid + "_" + tmpVal, GM_getValue(key, null)) GM_deleteValue(key) } }); $(".bottom-bar").append("<span class='item-commands' style='display:none'><span WG='WG' cmd=''></span></span>"); //命令行模块 var html = UI.wgui(); $(".content-message").after(html); $('.content-bottom').after("<div class='zdy-commands'></div>"); var css = `.zdy-item{ display: inline-block;border: solid 1px gray;color: gray;background-color: black; text-align: center;cursor: pointer;border-radius: 0.25em;min-width: 2.5em;margin-right: 0em; margin-left: 0.4em;position: relative;padding-left: 0.4em;padding-right: 0.4em;line-height: 24px;} .WG_log{flex: 1;overflow-y: auto;border: 1px solid #404000;max-height: 15em;width: calc(100% - 40px);} .WG_log > pre{margin: 0px; white-space: pre-line;} .WG_button { width: calc(100% - 40px); overflow-x: auto;display: block;line-height:2em;} .WG_button > .zdy-item:active {background-color: gray;color:black;} .item-plushp{display: inline-block;float: right;width: 100px;} .item-dps{display: inline-block;float: right;width: 100px;} .settingbox {margin-left: 0.625 em;border: 1px solid gray;background-color: transparent;color: unset;resize: none;width: 80% ;height: 3rem;} .runtest textarea{display:block;width:300px;height:160px;border:10px solid #F8F8F8;border-top-width:0;padding:10px;line-height:20px;overflow:auto;background-color:#3F3F3F;color:#eee;font-size:12px;font-family:Courier New} .layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box} .layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer} .layui-btn-normal{background-color:#1E9FFF} .layui-layer-moves{background-color:transparent} .switch2 {display: inline-block;position: relative;height: 1.25em;width: 3.125em;line-height: 1.25em; border-radius: 0.875em;background: #dedede;cursor: pointer;-ms-user-select: none;-moz-user-select: none; -webkit-user-select: none;user-select: none;vertical-align: middle;text-align: center;} .switch2 > .switch-button {position: absolute;left: 0px;height: 1.25em;width: 1.25em; border-radius: 0.875em;background: #fff;box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); transition: 0.3s;-webkit-transition: 0.3s;left: 0px;} .switch2 > .switch-text {color:#898989;margin-left: 0.625em;} .on>.switch-button {right:0px;left:auto;} .on>.switch-text {color:#ffffff;margin-right: 0.625em; margin-left: 0px;} .on {background-color:#008000;} .crit{ height:24px; position:relative; animation:myfirst 1s; -webkit-animation:myfirst 0.4s; /* Safari and Chrome */ } @keyframes myfirst { 0% {background:red; left:0px; top:0px;} 33% {background:red; left:0px; top:-14px;} 66% {background:red; left:0px; top:14px;} 100% {background:red; left:0px; top:0px;} } @-webkit-keyframes myfirst /* Safari and Chrome */ { 0% {background:red; left:0px; top:0px;} 33% {background:red; left:0px; top:-30px;} 100% {background:red; left:0px; top:0px;} } .rainbow-text{ color:red; background-image: repeating-linear-gradient(45deg, violet, indigo, blue, green, yellow, orange, red, violet); background-size:800% 800%; -webkit-background-clip: text; -webkit-text-fill-color: transparent; animation: rainbow 8s ease infinite; -webkit-animation: rainbow 8s ease infinite; } @keyframes rainbow { 0%{background-position:0% 50%} 50%{background-position:100% 25%} 100%{background-position:0% 50%} }`; GM_addStyle(css); npcs = GM_getValue("npcs", npcs); pgoods = GM_getValue("goods", goods); equip = GM_getValue(roleid + "_equip", equip); //初始化角色配置 GI.configInit(); if (backimageurl != '') { GM_addStyle(`body{background-color:rgb(0,0,0,.25)} div{ opacity:1;} html{background:rgba(255,255,255,0.25); background-image:url('${backimageurl}'); background-repeat:no-repeat; background-size:100% 100%; -moz-background-size:100% 100%;} `); } color_select = GM_getValue("color_select", color_select); let link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = diff_colors[color_select]; let head = document.getElementsByTagName("head")[0]; head.appendChild(link); setTimeout(() => { try { if (GM_registerMenuCommand) { GM_registerMenuCommand("初始化", WG.update_id_all) GM_registerMenuCommand("设 置", WG.setting) GM_registerMenuCommand("调 试", WG.cmd_echo_button) } } catch (e) { } role = role; roleid = roleid; var logintext = ''; document.title = role + "-MUD游戏-#神传说"; L.msg(`欢迎使用 ${welcome} 版本号${GM_info.script.version}`); KEY.do_command("showtool"); KEY.do_command("pack"); KEY.do_command("score"); WG.SendCmd("score2"); WG.SendCmd("party load"); setTimeout(() => { //bind settingbox KEY.do_command("score"); var rolep = role; if (G.level) { rolep = G.level + role; if (G.isGod()) { $('.zdy-item.zdwk').html("修炼(Y)"); } } rolep = welcome + "" + rolep; if (CanUse) { if (shieldswitch == "开" || silence == '开') { messageAppend('已注入屏蔽系统', 0, 1); } if (npcs['店小二'] == 0) { logintext = ` <hiy>欢迎${rolep},插件已加载!第一次使用,请在设置中,初始化ID,并且设置一下是否自动婚宴,自动传送boss 插件版本: ${GM_info.script.version} </hiy>`; } else { $.get("https://wsmud.ii74.com/hello/" + role, (r###lt) => { let tmp = ` <hiy>欢迎${rolep},插件已加载! 插件版本: ${GM_info.script.version} 更新日志: ${r###lt} </hiy>`; messageAppend(tmp); }); } WG.ztjk_func(); WG.zml_showp(); WG.dsj_func(); setTimeout(() => { WG.wsdelaytest(); }, 1000) if (G.level && G.isGod()) { WG.ytjk_func() } } else { logintext = ` <hiy>欢迎${role},插件未正常加载! 当前浏览器不支持自动喜宴自动boss,请使用centbrowser浏览器 谷歌系浏览器,请在network中勾选disable cache,多刷新几次,直至提示已加载! 多次刷新无法仍然出现本提示,请打开tampermonkey 插件设置 开启高级设置,在最下方实验 设置 “注入模式:即时”“严格模式:禁用” 实在不会用加群交流 插件版本: ${GM_info.script.version} </hiy>`; } messageAppend(logintext); }, 500); KEY.do_command("showcombat"); //执行记忆面板 var closeBorad = localStorage.getItem("closeBorad"); if (closeBorad === "true") { WG.showhideborad() } WG.runLoginhml(); //开启定时器 var systime = setInterval(() => { var myDate = new Date(); let timeTips = { data: JSON.stringify({ type: "time", h: myDate.getHours(), m: myDate.getMinutes(), s: myDate.getSeconds(), time: myDate.toTimeString() }) }; WG.receive_message(timeTips); }, 1000); }, 1000); }, update_goods_id: function () { var lists = $(".dialog-list > .obj-list:first"); var id; var name; var gtype; if (lists.length) { messageAppend("检测到商品清单"); for (var a of lists.children()) { a = $(a); id = a.attr("obj"); name = $(a.children()[0]).html(); gtype = a.children()[0].localName; if (name == "金创药" || name == "引气丹") { if (pgoods[gtype + name]) { pgoods[gtype + name].id = id; } else { pgoods[gtype + name] = { "id": id, "type": gtype, "sales": "药铺老板 平一指", "place": "扬州城-药铺" } } } else { pgoods[name].id = id; } messageAppend(`<${gtype}>${name}</${gtype}>:${id}`); } GM_setValue("goods", pgoods); return true; } else { messageAppend("未检测到商品清单"); return false; } }, update_npc_id: function () { var lists = $(".room_items .room-item"); for (var npc of lists) { if (npc.lastElementChild.innerText.indexOf("[") >= 0) { if (npc.lastElementChild.lastElementChild.lastElementChild.lastElementChild == null) { if (npc.lastElementChild.firstChild.nodeType == 3 && npc.lastElementChild.firstChild.nextSibling.tagName == "SPAN") { npcs[npc.lastElementChild.innerText.split('[')[0]] = $(npc).attr("itemid"); messageAppend(npc.lastElementChild.innerText.split('[')[0] + " 的ID:" + $(npc).attr("itemid")); } } } else { if (npc.lastElementChild.lastElementChild == null) { npcs[npc.lastElementChild.innerText] = $(npc).attr("itemid"); messageAppend(npc.lastElementChild.innerText + " 的ID:" + $(npc).attr("itemid")); } } } GM_setValue("npcs", npcs); }, update_id_all: function () { GM_setValue("goods", goods); WG.SendCmd("stopstate") var t = []; Object.keys(pgoods).forEach(function (key) { if (t[pgoods[key].place] == undefined) t[pgoods[key].place] = pgoods[key].sales; }); var keys = Object.keys(t); var i = 0; var state = 0; var place, sales; //获取 var timer = setInterval(() => { switch (state) { case 0: if (i >= keys.length) { messageAppend("初始化完成"); WG.go("#当派-广场"); clearInterval(timer); return; } place = keys[i]; sales = t[place]; WG.go(place); state = 1; break; case 1: WG.update_npc_id(); var id = npcs[sales]; WG.Send("list " + id); state = 2; break; case 2: if (WG.update_goods_id()) { state = 0; i++; } else state = 1; break; } }, 1000); }, clean_id_all: function (jm = true) { GM_setValue("goods", goods); pgoods = goods if (jm) { alert("清空完毕,请刷新一下页面") } }, update_store_hook: undefined, wsdelaytest: async function () { G.wsdelaySetTime = new Date().getTime(); G.wsdelaySetCount = 1; G.wsdelay = undefined; WG.SendCmd("test"); }, update_store: async function () { WG.update_store_hook = WG.add_hook(['dialog', 'text'], (data) => { if (data.dialog == 'list' && data.max_store_count) { messageAppend("<hio>仓库信息获取</hio>开始"); var stores = data.stores; store_list = []; for (let store of stores) { store_list.push(store.name.toLowerCase()); } zdy_item_store = store_list.join(','); $('#store_info').val(zdy_item_store); GM_setValue(roleid + "_zdy_item_store", zdy_item_store); } else if (data.type == 'text' && data.msg == '没有这个玩家。') { messageAppend("<hio>仓库信息获取</hio>完成"); $('.dialog-close').click(); WG.remove_hook(WG.update_store_hook); WG.update_store_hook = undefined; } }); WG.SendCmd("$to 扬州城-广场;$to 扬州城-钱庄;look3 1"); }, clean_dps: function () { if (dpslock && battletime != 0) { let allpfmnum = pfmnum + criticalnum; let alldps = pfmdps + critical; let battle_t = (new Date().getTime() - battletime.getTime()) / 1000; let real_dps = alldps / battle_t; let real_act = allpfmnum / battle_t; if (battle_t < 1) { real_dps = alldps; real_act = allpfmnum; } setTimeout(() => { messageAppend(`⚔️战斗过程分析: ⏱️战斗时长:${battle_t}秒 ⚔️普通攻击:${pfmnum}次 ⚔️普通伤害:${addChineseUnit(pfmdps)} 🌟暴击攻击:${criticalnum}次 🌟暴击伤害:${addChineseUnit(critical)} ⚔️总计攻击:${(allpfmnum)}次 ⚔️总计伤害:${addChineseUnit(alldps)} ⏱️每秒伤害:${addChineseUnit(real_dps)} ⏱️每秒攻击:${Math.round(real_act)}次`, 4); pfmdps = 0; pfmnum = 0; critical = 0; criticalnum = 0; dpslock = 0; }, 100); } }, Send: async function (cmd) { if (CanUse) { send_cmd(cmd, true); } else { if (cmd) { cmd = cmd instanceof Array ? cmd : cmd.split(';'); for (var c of cmd) { $("span[WG='WG']").attr("cmd", c).click(); }; } } }, SendStep: async function (cmd) { if (cmd) { cmd = cmd instanceof Array ? cmd : cmd.split(';'); for (var c of cmd) { WG.SendCmd(c); await WG.sleep(12000); }; } }, SendCmd: async function (cmd) { if (cmd) { if (cmd.indexOf(",") >= 0) { if (cmd instanceof Array) { cmd = cmd; } else { if (cmd.indexOf(";") >= 0) { cmd = cmd.split(";"); } else { cmd = cmd.split(","); } } } else { cmd = cmd instanceof Array ? cmd : cmd.split(';'); } let idx = 0; let cmds = ''; for (var c of cmd) { if (c.indexOf("$") >= 0) { if (c[0] == "$") { c = c.replace("$", ""); let p0 = c.split(" ")[0]; let p1 = c.split(" ")[1]; cmds = cmd.join(";"); eval("T." + p0 + "(" + idx + ",'" + p1 + "','" + cmds + "')"); return; } else { var p_c = c.split(" "); p_c = p_c[p_c.length - 1]; // buy $sitem from $snpc if (p_c) { if (p_c[0] == "$") { p_c = p_c.replace("$", ""); let patt = new RegExp(/\".*?\"/); let r###lt = patt.exec(p_c)[0]; cmds = cmd.join(";"); eval("T." + p_c.split('(')[0] + "(" + idx + "," + r###lt + ",'" + cmds + "')"); return; } else { p_c = c.split(" "); if (p_c[1].indexOf('$') >= 0) { p_c = p_c[1].replace("$", ""); let patt = new RegExp(/\".*?\"/); let r###lt = patt.exec(p_c)[0]; cmds = cmd.join(";"); eval("T." + p_c.split('(')[0] + "(" + idx + "," + r###lt + ",'" + cmds + "')"); return; } } } else { return; } } } //npc id解析 if (c.indexOf("%") >= 0) { var rep = c.match("\%([^%]+)\%"); if (npcs[rep[1]] != undefined) { var subStr = new RegExp('\%([^%]+)\%'); //创建正则表达式对象 c = c.replace(subStr, npcs[rep[1]]); } else { for (let item of roomData) { if (item != 0) { if (item.name.indexOf(rep[1]) >= 0) { var subStr = new RegExp('\%([^%]+)\%'); c = c.replace(subStr, item.id); break; } } } } } //商店 id解析 if (c.indexOf("*") >= 0) { var rep = c.match("\\*([^%]+)\\*"); if (pgoods[rep[1]] != undefined) { var subStr = new RegExp('\\*([^%]+)\\*'); c = c.replace(subStr, pgoods[rep[1]].id); } } WG.Send(c); idx = idx + 1; }; } }, sleep: function (time) { return new Promise((resolve) => setTimeout(resolve, time)); }, stopAllAuto: function () { stopauto = true; }, reSetAllAuto: function () { stopauto = false; }, go: async function (p) { if (saveAddr == '开' && p == '扬州城-钱庄') { p = '住房-卧室' } if (needfind[p] == undefined) { if (WG.at(p)) { return; } } if (place[p] != undefined) { G.ingo = true; await WG.SendCmd(place[p]); G.ingo = false; } }, at: function (p) { if (saveAddr == '开' && p == '扬州城-钱庄') { p = '住房-卧室' } var w = $(".room-name").html(); return w.indexOf(p) == -1 ? false : true; }, getIdByName: function (n) { for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf(n) >= 0) { return roomData[i].id; } } return null; }, smhook: undefined, ythook: undefined, ungetStore: false, kala_count: 0, doSmTask: async function (action) { return new Promise(async (resolve) => { try { switch (action) { case 0: //前往师门接收任务 WG.go(sm_array[family].place); WG.sm_state = 1; // 如果kala_count大于5,则重置id if (WG.kala_count > 2) { WG.clean_id_all(false); if (WG.kala_count > 5) { WG.kala_count = 0; WG.sm_state = 0; $(".sm_button").text("师门(Q)"); messageAppend('错误:师门任务错误,脚本将重试') } } resolve(); break; case 1: // 接受任务 var lists = $(".room_items .room-item"); var id = null; for (var npc of lists) { if (npc.lastElementChild.innerText.indexOf("[") >= 0) { if (npc.lastElementChild.lastElementChild.lastElementChild.lastElementChild == null) { if (npc.lastElementChild.firstChild.nodeType == 3 && npc.lastElementChild.firstChild.nextSibling.tagName == "SPAN") { if (npc.lastElementChild.innerText.split('[')[0] == sm_array[family].npc) id = $(npc).attr("itemid"); } } } else { if (npc.lastElementChild.lastElementChild == null) { if (npc.lastElementChild.innerText == sm_array[family].npc) { id = $(npc).attr("itemid"); } } } } if (id != undefined) { WG.Send("task sm " + id); WG.Send("task sm " + id); WG.sm_state = 2; } else { WG.update_npc_id(); WG.clean_id_all(false); WG.sm_state = 0; WG.kala_count = WG.kala_count + 1; } resolve(); break; case 2: // 获取师门任务物品 var mysm_loser = GM_getValue(roleid + "_sm_loser", sm_loser); //获取师门任务物品 var item = $("span[cmd$='giveup']:last").parent().prev(); if (item.length == 0) { WG.sm_state = 0; WG.kala_count = WG.kala_count + 1 }; var itemName = item.html(); let _gtype = item[0].localName; item = item[0].outerHTML; if (WG.ungetStore) { if (mysm_loser == "开") { $("span[cmd$='giveup']:last").click(); messageAppend("放弃任务"); WG.ungetStore = false; WG.sm_state = 0; WG.kala_count = 0; resolve() break; } else if (mysm_loser == "关") { WG.sm_state = -1; WG.kala_count = 0; $(".sm_button").text("师门(Q)"); resolve() break; } } //能上交直接上交 var tmpObj = $("span[cmd$='giveup']:last").prev(); for (let i = 0; i < 6; i++) { if (tmpObj.children().html()) { if (tmpObj.html().indexOf(item) >= 0) { tmpObj.click(); messageAppend("自动上交" + item); WG.sm_state = 0; WG.kala_count = 0; resolve() return; } tmpObj = tmpObj.prev(); } } //不能上交自动购买 if (itemName == "金创药" || itemName == "引气丹") { WG.sm_item = pgoods[_gtype + itemName]; } else { WG.sm_item = pgoods[itemName]; } if (item != undefined) { WG.sm_itemx = item; if (WG.inArray(item, store_list) && sm_getstore == "开") { if (item.indexOf("hiz") >= 0 || item.indexOf("hio") >= 0) { sm_any = GM_getValue(roleid + "_sm_any", sm_any); if (sm_any == "开") { messageAppend("自动仓库取" + item); WG.sm_store = item; WG.sm_state = 4; resolve() return; } else { var a = window.confirm("您确定要交稀有物品吗"); if (a) { messageAppend("自动仓库取" + item); WG.sm_store = item; WG.sm_state = 4; resolve() return; } } } else { messageAppend("自动仓库取" + item); WG.sm_store = item; WG.sm_state = 4; resolve() return; } } } if (WG.sm_item != undefined && item.indexOf(WG.sm_item.type) >= 0) { if (WG.smbuyNum == null) { WG.smbuyNum = 0; WG.kala_count = WG.kala_count + 1; } else if (WG.smbuyNum > 3) { WG.sm_state = 5; } WG.go(WG.sm_item.place); messageAppend("自动购买" + item); WG.sm_state = 3; } else { WG.sm_state = 5; } resolve(); break; case 3: // 前往商店购买任务物品 WG.go(WG.sm_item.place); if (WG.buy(WG.sm_item)) { WG.sm_state = 0; if (WG.smbuyNum == 0) { WG.lastBuy = WG.sm_item } if (WG.lastBuy == WG.sm_item) { WG.smbuyNum = WG.smbuyNum + 1; } } resolve(); break; case 4: // 前往钱庄取出仓库中的任务物品 var mysm_loser = GM_getValue(roleid + "_sm_loser", sm_loser); WG.go("扬州城-钱庄"); WG.qu(WG.sm_store, (res) => { if (res) { WG.sm_state = 0; } else { messageAppend("无法取" + WG.sm_store); if (WG.sm_item != undefined && WG.sm_store.indexOf(WG.sm_item.type) >= 0) { WG.go(WG.sm_item.place); messageAppend("自动购买" + WG.sm_store); WG.sm_state = 3; } else { if (mysm_loser == "开") { WG.ungetStore = true; WG.sm_state = 0; } else { WG.sm_state = 5; // $(".sm_button").text("师门(Q)"); } } } resolve(); }); break; case 5: // 判断是否需要上交牌子 var mysm_loser = GM_getValue(roleid + "_sm_loser", sm_loser); if (sm_price == "开") { let pz = [{}, {}, {}, {}, {}] tmpObj = $("span[cmd$='giveup']:last").prev(); for (let i = 0; i < 6; i++) { if (tmpObj.children().html()) { if (tmpObj.html().indexOf('放弃') == -1 && tmpObj.html().indexOf('令牌') >= 0) { if (tmpObj.html().indexOf('hig') >= 0) { pz[0] = tmpObj; } if (tmpObj.html().indexOf('hic') >= 0) { pz[1] = tmpObj; } if (tmpObj.html().indexOf('hiy') >= 0) { pz[2] = tmpObj; } if (tmpObj.html().indexOf('hiz') >= 0) { pz[3] = tmpObj; } if (tmpObj.html().indexOf('hio') >= 0) { pz[4] = tmpObj; } } } tmpObj = tmpObj.prev(); } let _p = false; for (let p of pz) { if (p.html != undefined) { p.click(); messageAppend("自动上交牌子"); WG.sm_state = 0; WG.kala_count = 0; _p = true; resolve() return; } } if (!_p) { messageAppend("没有牌子并且无法购买"); WG.smbuyNum = null; if (mysm_loser == "开") { $("span[cmd$='giveup']:last").click(); messageAppend("放弃任务"); WG.sm_state = 0; WG.kala_count = 0; resolve() return; } else { WG.sm_state = -1; $(".sm_button").text("师门(Q)"); resolve() return; } } } else { messageAppend("无法提交" + WG.sm_itemx); WG.smbuyNum = null; if (mysm_loser == "关") { WG.sm_state = -1; $(".sm_button").text("师门(Q)"); } else if (mysm_loser == "开") { $("span[cmd$='giveup']:last").click(); messageAppend("放弃任务"); WG.sm_state = 0; WG.kala_count = 0; } } resolve(); break; default: break; } } catch (e) { console.error(e); resolve(); } }); }, smTask: async function () { if (!WG.smhook) { WG.smhook = WG.add_hook('text', function (data) { if (data.msg.indexOf("辛苦了, 你先去休息") >= 0 || data.msg.indexOf("和本门毫无瓜葛") >= 0 || data.msg.indexOf("你没有") >= 0 ) { WG.Send("taskover signin"); WG.sm_state = -1; $(".sm_button").text("师门(Q)"); WG.remove_hook(WG.smhook); WG.smhook = undefined; } }); } while (WG.sm_state != -1) { try { await WG.doSmTask(WG.sm_state); await WG.sleep(1000); } catch (e) { console.error(e); break; } } }, sm_button: async function () { if (WG.sm_state >= 0) { WG.sm_state = -1; $(".sm_button").text("师门(Q)"); } else { WG.sm_state = 0; $(".sm_button").text("停止(Q)"); await WG.smTask() } }, buy: function (good) { var tmp = npcs[good.sales]; if (tmp == undefined) { WG.update_npc_id(); return false; } WG.Send("list " + tmp); WG.Send("buy 1 " + good.id + " from " + tmp); return true; }, qu_hook: undefined, qu: function (good, callback) { let storestatus = false; // $(".obj-item").each(function () { // if ($(this).html().toLowerCase().indexOf(good) != -1) { // storestatus = true; // var id = $(this).attr("obj") // WG.Send("qu 1 " + id); // return; // } // }) WG.qu_hook = WG.add_hook("dialog", async function (data) { if (data.dialog != undefined & data.stores != undefined) { for (let item of data.stores) { if (item.name.toLocaleLowerCase().indexOf(good) != -1) { storestatus = true; var id = item.id; WG.Send("qu 1 " + id); break; } } setTimeout(() => { callback(storestatus); }, 300); WG.remove_hook(WG.qu_hook) WG.qu_hook = undefined; } }); WG.SendCmd('store') }, Give: function (items) { var tmp = npcs["店小二"]; if (tmp == undefined) { WG.update_npc_id(); return false; } WG.Send("give " + tmp + " " + items); return true; }, eq: function (e) { WG.Send("eq " + equip[e]); }, ask: function (npc, i) { npc = npcs[npc]; npc != undefined ? WG.Send("ask" + i + " " + npc) : WG.update_npc_id(); }, yamen_lister: undefined, yamen_err_no: 0, go_yamen_task: async function () { if (!WG.yamen_lister) { WG.yamen_lister = WG.add_hook('text', function (data) { if (data.msg.indexOf("最近没有在逃的逃犯了,你先休息下吧。") >= 0) { clearInterval(WG.check_yamen_task); WG.check_yamen_task = 'over'; WG.remove_hook(WG.yamen_lister); WG.yamen_lister = undefined; WG.yamen_err_no = 0; } else if (data.msg.indexOf("没有这个人") >= 0) { WG.update_npc_id(); } }); } WG.go("扬州城-衙门正厅"); await WG.sleep(200); WG.update_npc_id(); WG.ask("扬州知府 程药发", 1); if (WG.check_yamen_task == 'over') { return; } window.setTimeout(WG.check_yamen_task, 1000); }, check_yamen_task: function () { if (WG.check_yamen_task == 'over') { return; } messageAppend("查找任务中"); var task = $(".task-desc:eq(-2)").text(); for (let idx = 3; idx < 10; idx++) { if (task.indexOf("扬州知府") == -1) { task = $(".task-desc:eq(-" + idx + ")").text(); } else { break; } } if (task.length == 0) { KEY.do_command("tasks"); window.setTimeout(WG.check_yamen_task, 1000); return; } try { zb_npc = task.match("犯:([^%]+),据")[1]; zb_place = task.match("在([^%]+)出")[1]; messageAppend("追捕任务:" + zb_npc + " 地点:" + zb_place); KEY.do_command("score"); WG.go(zb_place); window.setTimeout(WG.check_zb_npc, 1000); } catch (error) { messageAppend("查找衙门追捕失败"); if (WG.yamen_err_no < 4) { KEY.do_command("tasks"); window.setTimeout(WG.check_yamen_task, 1000); WG.yamen_err_no = WG.yamen_err_no + 1; } else { clearInterval(WG.check_yamen_task); WG.remove_hook(WG.yamen_lister); WG.yamen_lister = undefined; WG.yamen_err_no = 0; } } }, zb_next: 0, check_zb_npc: function () { var lists = $(".room_items .room-item"); var found = false; for (var npc of lists) { if (npc.innerText.indexOf(zb_npc) != -1) { found = true; WG.Send("kill " + $(npc).attr("itemid")); messageAppend("找到" + zb_npc + ",自动击杀!!!"); WG.zb_next = 0; return; } } var fj = needfind[zb_place]; if (!found && needfind[zb_place] != undefined && WG.zb_next < fj.length) { messageAppend("寻找附近"); WG.Send(fj[WG.zb_next]); WG.zb_next++; } if (!found) { window.setTimeout(WG.check_zb_npc, 1000); } }, kill_all: function () { var lists = $(".room_items .room-item"); for (var npc of lists) { if ($(npc).html().indexOf("尸体") == -1) { WG.Send("kill " + $(npc).attr("itemid")); } } }, get_all: function () { var lists = $(".room_items .room-item"); for (var npc of lists) { WG.Send("get all from " + $(npc).attr("itemid")); } }, clean_all: function () { WG.go("扬州城-打铁铺"); WG.Send("sell all"); }, sort_hook: undefined, sort_all: function () { var storeset = [ ]; if (WG.sort_hook) { messageAppend("<hio>仓库排序</hio>运行中"); messageAppend("<hio>仓库排序</hio>手动结束"); WG.remove_hook(WG.sort_hook); WG.sort_hook = undefined; return; } var sortCmd = ""; var getandstore = function (set) { var cmds = []; for (let s of set) { cmds.push("qu " + s.count + " " + s.id + ";$wait 350;"); } set = set.sort(function (a, b) { return a.name.length - b.name.length; }) for (let s of set) { cmds.push("store " + s.count + " " + s.id + ";$wait 350;"); } return cmds.join(""); } WG.sort_hook = WG.add_hook(['dialog', 'text'], (data) => { if (data.type == 'dialog' && data.dialog == 'list') { if (data.stores == undefined) { return; } const colorSet = ['wht', 'hig', 'hic', 'hiy', 'hiz', 'hio', 'red', 'hir', 'ord']; for (let store of data.stores) { let num = 0; for (let cx of colorSet) { if (store.name.toLocaleLowerCase().indexOf(cx) >= 0) { if (storeset[num]) { storeset[num].push(store); } else { storeset[num] = [store]; } } num++; } } for (let item of storeset) { if (item) { sortCmd += getandstore(item); } } sortCmd += "look3 1"; WG.SendCmd(sortCmd); } else if (data.type == 'text' && data.msg == '没有这个玩家。') { messageAppend("<hio>仓库排序</hio>完成"); WG.remove_hook(WG.sort_hook); WG.sort_hook = undefined; } }); messageAppend("<hio>仓库排序</hio>开始"); if (WG.at("扬州城-钱庄")) { WG.Send("store"); } else { WG.go("扬州城-钱庄"); } }, sort_all_bag: function () { var storeset = [ ]; if (WG.sort_hook) { messageAppend("<hio>背包排序</hio>运行中"); messageAppend("<hio>背包排序</hio>手动结束"); WG.remove_hook(WG.sort_hook); WG.sort_hook = undefined; return; } var sortCmd = ""; var getandstore = function (set) { var cmds = []; for (let s of set) { cmds.push("store " + s.count + " " + s.id + ";$wait 350;"); } set = set.sort(function (a, b) { return a.name.length - b.name.length; }) for (let s of set) { cmds.push("qu " + s.count + " " + s.id + ";$wait 350;"); } return cmds.join(""); } WG.sort_hook = WG.add_hook(['dialog', 'text'], (data) => { if (data.type == 'dialog' && data.dialog == 'pack') { if (data.items == undefined) { return; } const colorSet = ['wht', 'hig', 'hic', 'hiy', 'hiz', 'hio', 'red', 'hir', 'ord']; for (let store of data.items) { let num = 0; for (let cx of colorSet) { if (store.name.toLocaleLowerCase().indexOf(cx) >= 0) { if (storeset[num]) { storeset[num].push(store); } else { storeset[num] = [store]; } } num++; } } for (let item of storeset) { if (item) { sortCmd += getandstore(item); } } sortCmd += "look3 1"; WG.SendCmd(sortCmd); } else if (data.type == 'text' && data.msg == '没有这个玩家。') { messageAppend("<hio>背包排序</hio>完成,执行后请刷新并重新登录"); WG.remove_hook(WG.sort_hook); WG.sort_hook = undefined; } }); messageAppend("<hio>背包排序</hio>开始"); if (WG.at("扬州城-钱庄")) { WG.Send("pack"); KEY.dialog_close(); //WG.Send("store"); } else { WG.go("扬州城-钱庄"); } }, packup_listener: null, packup_ready: false, sell_all: function (store = 1, fenjie = 1, drop = 1) { if (WG.packup_listener) { messageAppend("<hio>包裹整理</hio>运行中"); messageAppend("<hio>包裹整理</hio>手动结束"); WG.packup_ready = false; WG.remove_hook(WG.packup_listener); WG.packup_listener = undefined; return; } let stores = []; WG.packup_listener = WG.add_hook(["dialog", "text"], (data) => { if (data.type == "dialog" && data.dialog == "list") { if (data.stores == undefined || WG.packup_ready) { return; } stores = []; //去重 for (let i = 0; i < data.stores.length; i++) { let s = null; for (let j = 0; j < stores.length; j++) { if (stores[j].name == data.stores[i].name.toLowerCase()) { s = stores[j]; break; } } if (s != null) { s.count += data.stores[i].count; } else { stores.push(data.stores[i]); } } } else if (data.type == "dialog" && data.dialog == "pack") { let cmds = []; let dropcmds = []; if (data.items == undefined || WG.packup_ready) { return; } for (var i = 0; i < data.items.length; i++) { //仓库 if (store_list.length != 0) { if (WG.inArray(data.items[i].name.toLowerCase(), store_list) && store) { if (data.items[i].can_eq) { //装备物品,不能叠加,计算总数 let store = null; for (let j = 0; j < stores.length; j++) { if (stores[j].name == data.items[i].name.toLowerCase()) { store = stores[j]; break; } } if (store != null) { if (store.count < 4) { store.count += data.items[i].count; cmds.push("store " + data.items[i].count + " " + data.items[i].id); cmds.push("$wait 350"); messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "储存到仓库"); } else { messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "超过设置的储存上限"); } } else { stores.push(data.items[i]); cmds.push("store " + data.items[i].count + " " + data.items[i].id); cmds.push("$wait 350"); messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "储存到仓库"); } } else { cmds.push("store " + data.items[i].count + " " + data.items[i].id); cmds.push("$wait 350"); messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "储存到仓库"); } } } //丢弃 if (WG.inArray(data.items[i].name.toLowerCase(), drop_list) && drop && (data.items[i].name.indexOf("★") == -1 || data.items[i].name.indexOf("☆") == -1)) { if (lock_list.indexOf(data.items[i].name.toLowerCase()) >= 0) { continue; } if (data.items[i].count == 1) { dropcmds.push("drop " + data.items[i].id); dropcmds.push("$wait 350"); } else { dropcmds.push("drop " + data.items[i].count + " " + data.items[i].id); dropcmds.push("$wait 350"); } messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "丢弃"); } //分解 if (fenjie_list.length && WG.inArray(data.items[i].name.toLowerCase(), fenjie_list) && data.items[i].name.indexOf("★") == -1 && fenjie) { cmds.push("fenjie " + data.items[i].id); cmds.push("$wait 350"); messageAppend("<hio>包裹整理</hio>" + data.items[i].name + "分解"); } } cmds.push("$wait 1000") cmds.push("$to 扬州城-杂货铺"); cmds.push("sell all"); cmds.push("$wait 1000"); cmds = cmds.concat(dropcmds); // cmds.push("$zxbuy"); cmds.push("look3 1"); if (cmds.length > 0 || WG.packup_ready) { WG.SendCmd(cmds); WG.packup_ready = true; } } else if (data.type == 'text' && data.msg == '没有这个玩家。') { messageAppend("<hio>包裹整理</hio>完成"); WG.packup_ready = false; WG.remove_hook(WG.packup_listener); WG.packup_listener = undefined; } }); messageAppend("<hio>包裹整理</hio>开始"); WG.go("扬州城-钱庄"); WG.Send("store;pack"); }, cmd_echo_button: function () { if (G.cmd_echo) { G.cmd_echo = false; messageAppend("<hio>命令代码关闭</hio>"); } else { G.cmd_echo = true; ProConsole.init(); messageAppend("<hio>命令代码显示</hio>"); } }, getItemNameByid: (id, callback) => { packData.forEach(function (item) { if (item != 0) { if (item.id == id) { callback(item.name); return; } } }) }, addstore: (itemname) => { if (zdy_item_store2 == "") { zdy_item_store2 = itemname; } else { zdy_item_store2 = zdy_item_store2 + "," + itemname; } GM_setValue(roleid + "_zdy_item_store2", zdy_item_store2); $('#store_info2').val(zdy_item_store2); if (zdy_item_store2) { store_list = zdy_item_store2.split(","); } messageAppend("添加存仓成功" + itemname); }, addlock: (itemname) => { if (zdy_item_lock == "") { zdy_item_lock = itemname; } else { zdy_item_lock = zdy_item_lock + "," + itemname; } GM_setValue(roleid + "_zdy_item_lock", zdy_item_lock); $('#lock_info').val(zdy_item_lock); if (zdy_item_lock) { lock_list = zdy_item_lock.split(","); } messageAppend("添加物品锁成功" + itemname); }, dellock: (itemname) => { lock_list.remove(itemname); zdy_item_lock = lock_list.join(','); GM_setValue(roleid + "_zdy_item_lock", zdy_item_lock); $('#lock_info').val(zdy_item_lock); messageAppend("解锁物品锁成功" + itemname); }, addfenjieid: (itemname) => { if (zdy_item_fenjie == "") { zdy_item_fenjie = itemname; } else { zdy_item_fenjie = zdy_item_fenjie + "," + itemname; } GM_setValue(roleid + "_zdy_item_fenjie", zdy_item_fenjie); if (zdy_item_fenjie) { fenjie_list = zdy_item_fenjie.split(","); } messageAppend("添加分解成功" + itemname); $('#store_fenjie_info').val(zdy_item_fenjie); }, adddrop: (itemname) => { if (itemname.indexOf("hio") >= 0 || itemname.indexOf("hir") >= 0 || itemname.indexOf("ord") >= 0) { messageAppend("高级物品,不添加整理时丢弃" + itemname); return; } if (zdy_item_drop == "") { zdy_item_drop = itemname; } else { zdy_item_drop = zdy_item_drop + "," + itemname; } GM_setValue(roleid + "_zdy_item_drop", zdy_item_drop); if (zdy_item_drop) { drop_list = zdy_item_drop.split(","); } messageAppend("添加丢弃成功" + itemname); $('#store_drop_info').val(zdy_item_drop); }, addzxbuy: (itemname) => { if (itemname.indexOf("hio") >= 0 || itemname.indexOf("hir") >= 0 || itemname.indexOf("ord") >= 0) { messageAppend("高级物品,不添加" + itemname); return; } if (auto_skillPaperSelllist == "") { auto_skillPaperSelllist = itemname; } else { auto_skillPaperSelllist = auto_skillPaperSelllist + "," + itemname; } GM_setValue(roleid + "_auto_skillPaperSelllist", auto_skillPaperSelllist); messageAppend("添加成功" + itemname); $('#autoSkillPaperSell').val(auto_skillPaperSelllist); }, zdwk: async function (v, x = true) { if (x) { if (G.level) { if (G.isGod()) { WG.go("住房-练功房"); WG.Send("xiulian"); return; } } } if (CanUse) { if (v == "remove") { if (G.wk_listener) { WG.remove_hook(G.wk_listener); G.wk_listener = undefined; } return; } if (G.wk_listener) return; let tiejiang_id; let wk_busy = false; G.wk_listener = WG.add_hook(["dialog", "text"], async function (data) { if (data.type == "dialog" && data.dialog == "pack") { //检查是否装备铁镐 let tiegao_id; if (data.name) { if (data.name == "<wht>铁镐</wht>") { WG.Send("eq " + data.id); await WG.sleep(2000); WG.go("扬州城-矿山"); WG.Send("wa"); WG.zdwk("remove", false); return; } } else if (data.items) { if (data.eqs[0] && data.eqs[0].name.indexOf("铁镐") > -1) { await WG.sleep(1000); WG.go("扬州城-矿山"); await WG.sleep(1000); WG.Send("wa"); WG.zdwk("remove", false); return; } else { for (let i = 0; i < data.items.length; i++) { let item = data.items[i]; if (item.name.indexOf("铁镐") > -1) { tiegao_id = item.id; break; } } if (tiegao_id) { WG.Send("eq " + tiegao_id); await WG.sleep(2000); WG.go("扬州城-矿山"); WG.Send("wa"); WG.zdwk("remove", false); return; } else { WG.go("扬州城-打铁铺"); WG.Send("look 1"); } } } } if (data.type == 'text' && data.msg == '你要看什么?') { let id = WG.getIdByName('铁匠'); if (id) { tiejiang_id = id; WG.Send('list ' + id); } else { messageAppend("<hio>自动挖矿</hio>未发现铁匠"); WG.zdwk("remove", false); } } else if (data.type == 'text') { if (data.msg == '你挥着铁镐开始认真挖矿。') WG.zdwk("remove"); else if ((data.msg == "你现在正忙。" || data.msg == "你正在战斗,待会再说。" || data.msg.indexOf("不要急") >= 0 || data.msg.indexOf("这个方向没有出路") >= 0) && wk_busy == false) { wk_busy = true; messageAppend('卡顿,五秒后再次尝试操作', 0, 1); setTimeout(() => { wk_busy = false; WG.zdwk("remove", false); WG.zdwk(); }, 5000); } } if (data.type == 'dialog' && data.dialog == 'list' && data.seller == tiejiang_id) { let item_id; for (let i = 0; i < data.selllist.length; i++) { let item = data.selllist[i]; if (item.name == "<wht>铁镐</wht>") { item_id = item.id; break; } } if (item_id) { WG.Send('buy 1 ' + item_id + ' from ' + tiejiang_id); await WG.sleep(2000); } else { messageAppend("<hio>自动挖矿</hio>无法购买<wht>铁镐</wht>"); WG.zdwk("remove", false); } } }); WG.Send("stopstate;pack"); } else { var t = $(".room_items .room-item:first .item-name").text(); t = t.indexOf("<挖矿"); if (t == -1) { messageAppend("当前不在挖矿状态"); if (timer == 0) { console.log(timer); WG.go("扬州城-矿山"); WG.eq("铁镐"); WG.Send("wa"); timer = setInterval(WG.zdwk, 5000); } } else { WG.timer_close(); } if (WG.at("扬州城-矿山") && t == -1) { //不能挖矿,自动买铁镐 WG.go("扬州城-打铁铺"); WG.buy(pgoods["铁镐"]); //买完等待下一次检查 messageAppend("自动买铁镐"); return; } if (WG.at("扬州城-打铁铺")) { var lists = $(".dialog-list > .obj-list:eq(1)"); var id; var name; if (lists.length) { messageAppend("查找铁镐ID"); for (var a of lists.children()) { a = $(a); id = a.attr("obj"); name = $(a.children()[0]).html(); if (name == "铁镐") { equip["铁镐"] = id; WG.eq("铁镐"); break; } } GM_setValue(roleid + "_equip", equip); WG.go("扬州城-矿山"); WG.Send("wa"); } return; } } }, timer_close: function () { if (timer) { clearInterval(timer); timer = 0; } }, wudao_hook: undefined, wudao_auto: function () { //创建定时器 if (timer == 0) { timer = setInterval(WG.wudao_auto, 1000); } if (!WG.at("#道塔")) { //进入#道塔 对于#神塔不知道咋操作 if (CanUse) { if (!WG.wudao_hook) { WG.wudao_hook = WG.add_hook("dialog", (data) => { var item = data.items for (var ii of item) { if (ii.id == "signin") { WG.go("#道塔"); //var pattern = "/-?[1-9]\d*/-?[1-9]\d*/", str = ii.desc;//写不来正则 var reg = new RegExp("进度([^%]+),<"); var wudaojindu = (ii.desc.match(reg))[1]; if (wudaojindu != null) { messageAppend("爬塔 : " + wudaojindu); var index = wudaojindu.indexOf('<'); var wudao = wudaojindu.substring(0, index).split('/') var wudaocongz = ii.desc.indexOf("#道塔可以重置") != -1; // messageAppend("测试结果 : "+wudaocongz+"__" + wudao [0]+ "__" + wudao [1] ); if (wudao[0] == wudao[1]) { messageAppend("爬塔完成! "); if (wudaocongz) { //重置 WG.ask("守门人", 1); messageAppend("爬塔重置完成! "); WG.Send("go enter"); } else { messageAppend("爬塔已经重置过了!"); WG.timer_close(); } } else { //没爬完 messageAppend("爬塔未完成!"); WG.Send("go enter"); } //messageAppend(" ii "+ wudaojindu +" ____" + wudaocongz); } else { messageAppend("获取爬塔信息失败 : " + ii.desc); } break; } } WG.remove_hook(WG.wudao_hook); WG.wudao_hook = undefined; }) } WG.Send("tasks"); } else { WG.go("#道塔"); WG.ask("守门人", 1); WG.Send("go enter"); } } else { //#道塔内处理 //messageAppend("#道塔"); var w = $(".room_items .room-item:last"); var t = w.text(); if (t.indexOf("守护者") != -1) { WG.Send("kill " + w.attr("itemid")); WG.wudao_autopfm(); } else { WG.Send("go up"); } } }, wudao_autopfm: function () { var pfm = wudao_pfm.split(','); for (var p of pfm) { if ($("div.combat-panel div.combat-commands span.pfm-item:eq(" + p + ") span").css("left") == "0px") $("div.combat-panel div.combat-commands span.pfm-item:eq(" + p + ") ").click(); } }, xue_auto: function () { var t = $(".room_items .room-item:first .item-name").text(); t = t.indexOf("<打坐") != -1 || t.indexOf("<学习") != -1 || t.indexOf("<练习") != -1; //创建定时器 if (timer == 0) { if (t == false) { messageAppend("当前不在打坐或学技能"); return; } timer = setInterval(WG.xue_auto, 1000); } if (t == false) { //学习状态中止,自动去挖矿 WG.timer_close(); WG.zdwk(); } else { messageAppend("自动打坐学技能"); } }, fbnum: 0, needGrove: 0, oncegrove: function () { this.fbnum += 1; messageAppend("第" + this.fbnum + "次"); WG.Send("cr yz/lw/shangu;cr over"); if (this.needGrove <= this.fbnum) { WG.Send("taskover signin"); messageAppend("<hiy>" + this.fbnum + "次副本小树林秒进秒退已完成</hiy>"); WG.remove_hook(WG.daily_hook); WG.daily_hook = undefined; this.timer_close(); //WG.zdwk(); this.needGrove = 0; this.fbnum = 0; } }, grove_ask_info: function () { return prompt("请输入需要秒进秒退的副本次数", ""); }, grove_auto: function (needG = null) { if (timer == 0) { if (needG == null) { this.needGrove = this.grove_ask_info(); } else { this.needGrove = needG; } if (this.needGrove) //如果返回的有内容 { if (parseFloat(this.needGrove).toString() == "NaN") { messageAppend("请输入数字"); return; } messageAppend("开始秒进秒退小树林" + this.needGrove + "次"); timer = setInterval(() => { this.oncegrove() }, 1000); } } }, showhideborad: function () { if ($('.WG_log').css('display') == 'none') { window.localStorage.setItem("closeBorad", "false") $('.WG_log').show(); } else { window.localStorage.setItem("closeBorad", "true") $('.WG_log').hide(); } }, showhidebtn: function () { if ($('.WG_button').css('display') == 'none') { window.localStorage.setItem("closeBtn", "false") $('.WG_button').show(); } else { window.localStorage.setItem("closeBtn", "true") $('.WG_button').hide(); } }, calc: function () { messageClear(); var html = UI.jsquivue; messageAppend(html); const jsqset = new Vue({ el: '.JsqVueUI', data: { status: 1 }, methods: { qnjs_btn: function () { WG.qnjs(); }, lxjs_btn: function () { WG.lxjs(); }, khjs_btn: function () { WG.khjs(); }, zcjs_btn: function () { WG.zcjs(); }, getskilljson: function () { WG.getPlayerSkill(); }, autoAddLianxi: function () { // 询问修炼到多少级 var level = prompt("请输入修炼到多少级", "1"); if (level == null) { return; } if (parseFloat(level).toString() == "NaN") { messageAppend("请输入数字"); return; } WG.selectLowKongfu(level); }, onekeydaily: function () { WG.SendCmd("$daily"); }, onekeypk: function () { WG.auto_fight(); }, onekeysansan: function () { let mlh = `//~silent // 导入三三懒人包流程,方便后续导入操作 // 自命令类型选 Raidjs流程 // 四区白三三 ($f_ss)={"name":"三三懒人包","source":"https://cdn.jsdelivr.net/gh/mapleobserver/wsmud-script/三三懒人包.flow.txt","finder":"根文件夹"} @js var time=Date.parse(new Date());var f=(f_ss);var n=f["name"];var s=f["source"];var fd=f["finder"];WorkflowConfig.removeWorkflow({"name":n,"type":"flow","finder":fd});$.get(s,{stamp:time},function(data,status){WorkflowConfig.createWorkflow(n,data,fd);}); @await 2000 tm 【三三懒人包】流程已导入,如果曾用早期版本的懒人包导入过流程,请先删除这些流程后再使用。`; if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(mlh); } else { messageAppend("请先安装Raid.js"); } }, onelddh: function () { let mlh = `// ($f_ss)={"name":"来点动画","source":"http://ii74.oss-cn-qingdao.aliyuncs.com/gif.txt","finder":"根文件夹"} @js var time=Date.parse(new Date());var f=(f_ss);var n=f["name"];var s=f["source"];var fd=f["finder"];WorkflowConfig.removeWorkflow({"name":n,"type":"flow","finder":fd});$.get(s,{stamp:time},function(data,status){WorkflowConfig.createWorkflow(n,data,fd);}); @awiat 2000 tm 来点动画已导入`; if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(mlh); } else { messageAppend("请先安装Raid.js"); } }, onekeystore: function () { WG.SendCmd("$store") }, onekeysell: function () { WG.SendCmd("$drop") }, onekeyfenjie: function () { WG.SendCmd("$fenjie") }, updatestore: function () { WG.update_store(); }, cleandps: function () { WG.clean_dps(); }, sortstore: function () { WG.sort_all(); }, sortbag: function () { WG.sort_all_bag(); }, dsrw: function () { WG.dsj(); }, zdybtnset: function () { WG.zdy_btnset(); }, cleankksboss: function () { GM_setValue(roleid + "_autoKsBoss", null); GM_setValue(roleid + "_automarry", null); L.msg("操作成功"); }, onekeydelaytest: function () { WG.wsdelaytest(); }, yuanshen: function () { //增加询问确实是否离开 layer.confirm('将要退出,确定吗?', function(index){ // do something // … window.location.href = 'https://ys.mihoyo.com/cloud/?utm_source=default#/' layer.close(index); }); }, onekeyyaota: function () { T.goyt(); } } }) }, dsj_hook: undefined, dsj_func: function () { if (WG.dsj_hook) { WG.remove_hook(WG.dsj_hook); } messageAppend("已注入定时任务", 0, 1); timequestion = GM_getValue(roleid + "_timequestion", timequestion); WG.dsj_hook = WG.add_hook("time", (data) => { if (data.type == 'time') { let i = 0; for (let p of timequestion) { if ((p.h == data.h && p.m == data.m && p.s == data.s) || (p.h == "" && p.m == data.m && p.s == data.s) || (p.h == "" && p.m == "" && p.s == data.s)) { messageAppend("已触发计划" + p.name, 1, 0); WG.SendCmd(p.send); if (p.type == 1) { messageAppend("一次性任务,已移除" + p.name, 1, 0); timequestion.baoremove(i); GM_setValue(roleid + "_timequestion", timequestion); } } i = i + 1; } } }) }, dsj: function () { WG.dsj_func(); messageClear(); var html = UI.timeoutui; messageAppend(html); $(".startQuest").off('click'); $(".removeQuest").off('click'); //[{"name":"","type":"0","send":"","h":"","s":"","m":""}] timequestion = GM_getValue(roleid + "_timequestion", timequestion); for (let q of timequestion) { let phtml = `<span class='addrun${q.name}'>编辑${q.name}</span> <span class='stoprun${q.name}'>删除${q.name}</span> <br/> ` $('.questlist').append(phtml); $("." + `addrun${q.name}`).on("click", () => { $("#questname").val(q.name); $("#rtype").val(q.type); $("#ht").val(q.h); $("#mt").val(q.m); $("#st").val(q.s); $("#zml_info").val(q.send); }); $("." + `stoprun${q.name}`).on("click", () => { let questname = q.name; let i = 0 for (let p of timequestion) { if (p.name == questname) { timequestion.baoremove(i); } i = i + 1; } GM_setValue(roleid + "_timequestion", timequestion); WG.dsj(); }); } $(".startQuest").on("click", () => { let questname = $("#questname").val(); let type = $("#rtype").val(); let h = $("#ht").val(); let m = $("#mt").val(); let s = $("#st").val(); let send = $("#zml_info").val(); questname = questname.replaceAll(" ", "_"); let item = { "name": questname, "type": type, "send": send, "h": h, "m": m, "s": s }; let i = 0; for (let p of timequestion) { if (questname == p.name) { timequestion[i] = item; GM_setValue(roleid + "_timequestion", timequestion); WG.dsj(); return; } i = i + 1; } timequestion.push(item); GM_setValue(roleid + "_timequestion", timequestion); WG.dsj(); }); $(".removeQuest").on("click", () => { let questname = $("#questname").val(); let i = 0 for (let p of timequestion) { if (p.name == questname) { timequestion.baoremove(i); return; } i = i + 1; } GM_setValue(roleid + "_timequestion", timequestion); WG.dsj(); }); }, qnjs: function () { messageClear(); var html = UI.qnjsui; messageAppend(html); const qnvue = new Vue({ el: ".QianNengCalc", data: { qnsx: { m: 0, c: 0, color: 0 } }, methods: { qnjscalc: function () { $.each(this.qnsx, (key, value) => { this.qnsx[key] = Number(value); }) messageAppend("需要潜能:" + WG.dian(this.qnsx.c, this.qnsx.m, this.qnsx.color)); } } }) }, lxjs: function () { messageClear(); var html = UI.lxjsui; messageAppend(html); const lxjsvue = new Vue({ el: ".StudyTimeCalc", data: { jsqsx: { xtwx: 0, htwx: 0, lxxl: 0, clevel: 0, mlevel: 0, color: 0 } }, created() { this.jsqsx.xtwx = G.score.int; this.jsqsx.htwx = G.score.int_add; this.jsqsx.lxxl = parseInt(G.score2.lianxi_per.replaceAll("%", "")); }, methods: { lxjscalc: function () { $.each(this.jsqsx, (key, value) => { this.jsqsx[key] = Number(value); }) const lxObj = WG.lx(this.jsqsx.xtwx, this.jsqsx.htwx, this.jsqsx.lxxl, this.jsqsx.clevel, this.jsqsx.mlevel, this.jsqsx.color); messageAppend("需要潜能:" + lxObj.qianneng + " 所需时间:" + lxObj.time); } } }) }, khjs: function () { messageClear(); var html = UI.khjsui; messageAppend(html); const khvue = new Vue({ el: ".KaihuaCalc", data: { khsx: { nl: 0, xg: 0, hg: 0 } }, created() { this.khsx.nl = G.score.max_mp; this.khsx.xg = G.score.con; this.khsx.hg = G.score.con_add; }, methods: { khjscalc: function () { $.each(this.khsx, (key, value) => { this.khsx[key] = Number(value); }) messageAppend("你的分值:" + WG.gen(this.khsx.nl, this.khsx.xg, this.khsx.hg)); } } }) }, zcjs: function () { messageClear(); var html = UI.zcjsui; messageAppend(html); const khvue = new Vue({ el: ".ZiChuangCalc", data: { zcsx: { level: 0, percentage: 0 } }, methods: { zcjscalc: function () { messageAppend("自创" + this.zcsx.level + "级,词条百分比:" + this.zcsx.percentage + " 需要词条等级:" + Math.ceil((this.zcsx.percentage - 4 - 2.5e-3 * this.zcsx.level) / this.zcsx.level / 2.5e-5)); } } }) }, switchReversal: function (e) { let p = e.hasClass("on"); if (!p) { return "开"; } return "关"; }, auto_preform_switch: function () { if (G.auto_preform) { G.auto_preform = false; messageAppend("<hio>自动施法</hio>关闭"); WG.auto_preform("stop"); } else { G.auto_preform = true; messageAppend("<hio>自动施法</hio>开启"); WG.auto_preform(); } }, forcebufskil: '', bufskill: {}, xubuf: null, pfmskill: null, is_free: function () { if (WG.hasStr("faint", G.selfStatus) || WG.hasStr("busy", G.selfStatus) || WG.hasStr("rash", G.selfStatus) || WG.hasStr("bss", G.selfStatus)) { return false; } else { return true; } }, is_zero_releasetime: function () { return G.score2.releasetime.indexOf('0秒') >= 0; }, auto_preform: function (v) { if (v == "stop") { G.selfStatus = []; WG.xubuf = null; WG.pfmskil = null; if (G.preform_timer) { clearInterval(G.preform_timer); G.preform_timer = undefined; $(".auto_perform").css("background", ""); WG.forcebufskil = '' WG.bufskill = {} } return; } if (G.preform_timer || G.auto_preform == false) return; $(".auto_perform").css("background", "#3E0000"); //出招时重新获取黑名单 unauto_pfm = GM_getValue(roleid + "_unauto_pfm", unauto_pfm); var unpfm = unauto_pfm.split(','); for (var pfmname of unpfm) { if (!WG.hasStr(pfmname, blackpfm)) blackpfm.push(pfmname); } // if (family.indexOf("逍遥") >= 0) { // if (!WG.hasStr("force.duo", blackpfm)) { // blackpfm.push('force.duo'); // } // } if (!WG.hasStr("force.tuoli", blackpfm)) { blackpfm.push('force.tuoli'); } // 如果 auto_pfm_mode 等于 true 则使用智能施法 if (G.auto_pfm_mode) { let force_buff_skill = ['force.cui', 'force.power', 'force.xi', 'force.xin', 'force.chu', 'force.ztd', 'force.zhen', 'force.busi', 'force.wang']; let buff_skill_dict = { "weapon": ['sword.wu', 'blade.shi', 'sword.yu'], "ztd": ["force.ztd"], "mingyu": ["force.wang"], "force": ["*"], "dodge": ["dodge.power", "dodge.fo", "dodge.gui", "dodge.lingbo", "dodge.zhui"] } WG.xubuf = null; WG.pfmskill = null G.preform_timer = setInterval(() => { if (G.in_fight == false) { WG.auto_preform("stop"); return; } var alreay_pfm = []; if (WG.xubuf == null) { WG.xubuf = setTimeout(async () => { for (var skill of G.skills) { if (WG.hasStr(skill.id, blackpfm)) { continue; } for (let buf in buff_skill_dict) { for (let ski of buff_skill_dict[buf]) { if (ski == skill.id) { if (!G.### && !G.cds.get(skill.id) && !WG.hasStr(buf, G.selfStatus)) { WG.Send("perform " + skill.id); // break; await WG.sleep(200); while (!G.cds.get(skill.id)) { if (G.in_fight == false) { WG.auto_preform("stop"); return; } if (!WG.is_free()) break; WG.Send("perform " + skill.id); await WG.sleep(200); } if (WG.hasStr(buf, G.selfStatus)) { console.log('buf技能' + skill.id) WG.bufskill[buf] = skill.id; } // alreay_pfm.push(skill.id) } // alreay_pfm.push(skill.id) break; } } } if (WG.hasStr(skill.id, force_buff_skill)) { if (!G.### && !G.cds.get(skill.id) && !WG.hasStr("force", G.selfStatus)) { WG.Send("perform " + skill.id); // break; await WG.sleep(200); while (!G.cds.get(skill.id) && !WG.hasStr("force", G.selfStatus)) { if (G.in_fight == false) { WG.auto_preform("stop"); return; } if (!WG.is_free()) break; WG.Send("perform " + skill.id); await WG.sleep(200); } if (WG.hasStr("force", G.selfStatus)) { console.log('内功buf技能' + skill.id) WG.forcebufskil = skill.id; } alreay_pfm.push(skill.id) } // alreay_pfm.push(skill.id) } } WG.xubuf = null; }, 10); } if (WG.pfmskill == null) { WG.pfmskill = setTimeout(async () => { for (var skill of G.skills) { if (WG.hasStr(skill.id, blackpfm)) { continue; } if (G.###) break; // console.log(skill); if (!G.### && !G.cds.get(skill.id) && !(WG.hasStr(skill.id, force_buff_skill) || WG.hasStr(skill.id, buff_skill_dict))) { WG.Send("perform " + skill.id); if (WG.is_zero_releasetime()) break; // 非0出招者只放一个技能 await WG.sleep(20); if (!WG.is_free()) break; } if (WG.forcebufskil != '') { if (!G.### && !G.cds.get(skill.id) && WG.hasStr(skill.id, force_buff_skill) && skill.id != WG.forcebufskil && !WG.hasStr(skill.id, buff_skill_dict['mingyu']) && !WG.hasStr(skill.id, buff_skill_dict['ztd'])) { console.log('使用无buf的内功技能' + skill.id) WG.Send("perform " + skill.id); if (!WG.is_free()) break; } } // if (WG.bufskill.hasOwnProperty('weapon') && WG.bufskill['weapon'] != '') { // if (!G.### && !G.cds.get(skill.id) && WG.hasStr(skill.id, buff_skill_dict) && skill.id != WG.bufskill['weapon'] && // !WG.hasStr(skill.id, buff_skill_dict['mingyu']) && !WG.hasStr(skill.id, buff_skill_dict['ztd'])) { // console.log('使用无buf的#器技能' + skill.id) // WG.Send("perform " + skill.id); // if (!WG.is_free()) break; // } // } } WG.pfmskill = null }, 10); } }, 300); } else { G.preform_timer = setInterval(() => { if (G.in_fight == false) WG.auto_preform("stop"); for (var skill of G.skills) { if (WG.inArray(skill.id, blackpfm)) { continue; } if (!G.### && !G.cds.get(skill.id)) { WG.Send("perform " + skill.id); break; } } }, 350); } }, formatCurrencyTenThou: function (num) { num = num.toString().replace(/\$|\,/g, ''); if (isNaN(num)) num = "0"; var sign = (num == (num = Math.abs(num))); num = Math.floor(num * 10 + 0.50000000001); //cents = num%10; num = Math.floor(num / 10).toString(); for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) { num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3)); } return (((sign) ? '' : '-') + num); }, gen: function (nl, xg, hg) { var jg = nl / 100 + xg * hg / 10; var sd = this.formatCurrencyTenThou(jg); return sd; }, dian: function (c, m, se) { var j = c + m; var jj = m - c; var jjc = jj / 2; var z = j * jjc * se * 5; var sd = this.formatCurrencyTenThou(z); return sd; }, lx: function (xtwx, htwx, lxxl, dqdj, mbdj, k) { var qianneng = (mbdj * mbdj - dqdj * dqdj) * 2.5 * k; var time = qianneng / (xtwx + htwx) / (1 + lxxl / 100 - xtwx / 100) / 12; var timeString = time < 60 ? `${parseInt(time)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`; return { qianneng: qianneng, time: timeString }; }, //找boss,boss不在,-1, findboss: function (data, bossname, callback) { for (let i = 0; i < data.items.length; i++) { if (data.items[i] != 0) { if (data.items[i].name.indexOf(bossname) >= 0) { callback(data.items[i].id); } } } callback(-1); }, ksboss: undefined, kksBoss: function (data) { var boss_place = data.content.match("出现在([^%]+)一带。")[1]; var boss_name = data.content.match("听说([^%]+)出现在")[1]; if (boss_name == null || boss_place == null) { return; } blacklist = GM_getValue(roleid + "_blacklist", blacklist); blacklist = blacklist instanceof Array ? blacklist : blacklist.split(","); if (WG.inArray(boss_name.replace("/<(.*?)>/g", ""), blacklist)) { messageAppend("黑名单boss,忽略!"); return; } autoKsBoss = GM_getValue(roleid + "_autoKsBoss", autoKsBoss); ks_pfm = GM_getValue(roleid + "_ks_pfm", ks_pfm); ks_wait = GM_getValue(roleid + "_ks_wait", ks_wait); autoeq = GM_getValue(roleid + "_auto_eq", autoeq); console.log("boss"); console.log(boss_place); var c = "<div class=\"item-commands\"><span id = 'closeauto'>关闭自动执行后命令</span></div>"; messageAppend("自动前往BOSS地点 " + c); $('#closeauto').off('click'); $('#closeauto').on('click', () => { if (timer != 0) { WG.timer_close(); messageAppend("已停止后命令"); } else { messageAppend("已经停止"); } }); WG.Send("stopstate"); WG.go(boss_place); WG.ksboss = WG.add_hook(["items", "itemadd", "die", "room"], function (data) { if (data.type == "items") { if (!WG.at(boss_place)) { return; } WG.findboss(data, boss_name, function (bid) { if (bid != -1) { next = 999; if (autoeq != "") { WG.eqhelper(autoeq); } setTimeout(() => { WG.Send("kill " + bid); //WG.Send("select " + bid); next = 0; }, Number(ks_pfm)); } else { if (next == 999) { console.log('found'); return; } let lj = needfind[boss_place]; if (needfind[boss_place] != undefined && next < lj.length) { setTimeout(() => { console.log(lj[next]); WG.Send(lj[next]); next++; }, 1000); } else { console.log("not found"); } } }); } if (data.type == "itemadd") { if (data.name.indexOf(boss_name) >= 0) { next = 0; WG.Send("get all from " + data.id); WG.remove_hook(this.index); } } if (data.type == "die") { next = 0; WG.Send('relive'); WG.remove_hook(this.index); } if (data.type == 'room') { if (next == 999) { next = 0; } } }); timer = setTimeout(() => { console.log("复活挖矿"); WG.Send('relive'); WG.remove_hook(this.ksboss); auto_command = GM_getValue(roleid + "_auto_command", auto_command); if (auto_command && auto_command != null && auto_command != "" && auto_command != "null") { WG.SendCmd(auto_command); } else { WG.zdwk(); } next = 0; WG.timer_close(); }, 1000 * ks_wait); }, marryhy: undefined, xiyan: async function () { var c = "<div class=\"item-commands\"><span id = 'closeauto'>关闭自动执行后命令</span></div>"; messageAppend("自动喜宴 " + c); $('#closeauto').off('click'); $('#closeauto').on('click', () => { if (timer != 0) { WG.timer_close(); messageAppend("已停止后命令"); } else { messageAppend("已经停止"); } }); WG.Send("stopstate"); WG.go("扬州城-喜宴"); WG.marryhy = WG.add_hook(['items', 'cmds', 'text', 'msg'], function (data) { if (data.type == 'items') { for (let idx = 0; idx < data.items.length; idx++) { if (data.items[idx] != 0) { if (data.items[idx].name.indexOf(">婚宴礼桌<") >= 0) { console.log("拾取"); WG.Send('get all from ' + data.items[idx].id); console.log("xy" + WG.marryhy); WG.remove_hook(WG.marryhy); break; } } } } else if (data.type == 'text') { if (data.msg == "你要给谁东西?") { console.log("没人"); } if (/^店小二拦住你说道:怎么又是你,每次都跑这么快,等下再进去。$/.test(data.msg)) { console.log("cd"); messageAppend("<hiy>你太勤快了, 1秒后回去挖矿</hiy>") } if (/^店小二拦住你说道:这位(.+),不好意思,婚宴宾客已经太多了。$/.test(data.msg)) { console.log("客满"); messageAppend("<hiy>你来太晚了, 1秒后回去挖矿</hiy>") } } else if (data.type == 'cmds') { for (let idx = 0; idx < data.items.length; idx++) { if (data.items[idx].name == '1金贺礼') { WG.SendCmd(data.items[idx].cmd + ';go up;$wait 2000;go down;go up'); console.log("交钱"); break; } } } }); timer = setTimeout(() => { console.log("挖矿"); WG.remove_hook(this.marryhy); if (auto_command && auto_command != null && auto_command != "" && auto_command != "null") { WG.SendCmd(auto_command); } else { WG.zdwk(); } next = 0; WG.timer_close(); }, 30000); }, saveRoomstate(data) { roomData = data.items; }, haspack: function (name, callback) { WG.Send('pack'); for (let item of packData) { if (item.name.indexOf(name) >= 0) { callback(item.id); return; } } callback(''); }, eqx: null, eqxp: null, eqhelper(type, enaskill = 0, realy = false) { var deepCopy = function (source) { var r###lt = {}; for (var key in source) { r###lt[key] = typeof source[key] === 'object' ? deepCopy(source[key]) : source[key]; } return r###lt; } if (type == undefined || type == 0 || type > eqlist.length) { return; } if (eqlist == null || eqlist[type] == null || eqlist[type] == "") { if (enaskill == 1) { return; } messageAppend("套装未保存,保存当前装备作为套装" + type + "!", 1); WG.eqx = WG.add_hook("dialog", (data) => { if (data.dialog == "pack" && data.eqs != undefined) { eqlist[type] = deepCopy(data.eqs); GM_setValue(roleid + "_eqlist", eqlist); messageAppend("套装" + type + "保存成功!", 1); WG.remove_hook(WG.eqx); WG.eqx = null; } }); WG.eqxp = WG.add_hook("dialog", (data) => { if (data.dialog == 'skills' && data.items != null) { var nowskill = { 'throwing': '', 'unarmed': '', 'force': '', 'dodge': '', 'sword': '', 'blade': '', 'club': '', 'staff': '', 'whip': '', 'parry': '' }; for (let item of data.items) { if (nowskill[item.id] != null) { if (item.enable_skill == null) { nowskill[item.id] = 'none'; } else { nowskill[item.id] = item.enable_skill; } } } skilllist[type] = nowskill; GM_setValue(roleid + "_skilllist", skilllist); messageAppend("技能" + type + "保存成功!", 1); WG.remove_hook(WG.eqxp); WG.eqxp = null; } }); WG.Send("cha"); WG.Send("pack"); } else { if (WG.eqx != null || WG.eqxp != null) { WG.remove_hook(WG.eqx); WG.remove_hook(WG.eqxp); WG.eqx = null; WG.eqxp = null; } eqlist = GM_getValue(roleid + "_eqlist", eqlist); skilllist = GM_getValue(roleid + "_skilllist", skilllist); if (realy) { var eqdata = "" if (enaskill == 0) { //从eqlist第一项开始遍历 for (let i = 1; i < 11; i++) { if (eqlist[type][i] != null && eqlist[type][i] != "") { eqdata += "eq " + eqlist[type][i].id + ";"; } } // 将eqlist第一项的id添加到eqdata eqdata += "eq " + eqlist[type][0].id + ";"; } else { //使用for in遍历skilllist 获取其中的id for (let i in skilllist[type]) { if (skilllist[type][i] != null && skilllist[type][i] != "") { eqdata += "enable " + i + " " + skilllist[type][i] + ";"; } } } copyToClipboard(eqdata); messageAppend(type + "已复制到剪贴板!", 1); return } var p_cmds = ""; // console.log(G.enable_skills) let mySkills = []; let myEqs = ""; for (let ski of G.eqs) { if (ski) { myEqs = myEqs + ski.id; } } let tsMsg = "套装" if (enaskill === 0) { for (let i = 1; i < 11; i++) { if (eqlist[type][i] != null && myEqs.indexOf(eqlist[type][i].id) < 0) { p_cmds += ("$wait 20;eq " + eqlist[type][i].id + ";"); } } if (eqlist[type][0] != null && myEqs.indexOf(eqlist[type][0].id) < 0) { p_cmds += ("$wait 40;eq " + eqlist[type][0].id + ";"); } } if (enaskill === 1) { for (var key in skilllist[type]) { for (let ski of G.enable_skills) { if (ski.name != skilllist[type][key] && ski.type == key) { p_cmds += (`$wait 40;enable ${key} ${skilllist[type][key]};`); break } } } tsMsg = "技能" $("span[command=skills]").click(); } p_cmds = p_cmds + '$wait 40;cha;look3 1'; WG.eqx = WG.add_hook('text', function (data) { if (data.type == 'text') { if (data.msg.indexOf('没有这个玩家') >= 0) { messageAppend(tsMsg + "装备成功" + type + "!", 1); if (enaskill == 1) { $("span[command=skills]").click(); } WG.remove_hook(WG.eqx); } } }); WG.SendCmd(p_cmds); } }, eqhelperdel: function (type) { eqlist = GM_getValue(roleid + "_eqlist", eqlist); skilllist = GM_getValue(roleid + "_skilllist", skilllist); delete eqlist[type]; delete skilllist[type]; GM_setValue(roleid + "_eqlist", eqlist); GM_setValue(roleid + "_skilllist", skilllist); messageAppend("清除套装 技能" + type + "设置成功!", 1); }, uneqall: function (isskill = "0") { if (isskill == "0") { this.eqx = WG.add_hook("dialog", (data) => { if (data.dialog == "pack" && data.eqs != undefined) { for (let i = 0; i < data.eqs.length; i++) { if (data.eqs[i] != null) { WG.Send("uneq " + data.eqs[i].id); } } WG.remove_hook(this.eqx); } }); WG.Send("pack"); messageAppend("取消所有装备成功!", 1); } else { const enaNone = "enable unarmed none;enable blade none;enable force none;enable parry none;enable dodge none;enable sword none;enable throwing none;enable whip none;enable club none;enable staff none"; const enalist = enaNone.split(";"); for (let i = 0; i < enalist.length; i++) { WG.sleep(10); WG.Send(enalist[i]); } messageAppend("取消所有技能成功!", 1); } }, eqloader: function () { let tmp_eqlist = GM_getValue(roleid + "_eqlist", null); var subItems = { }; for (let item in tmp_eqlist) { subItems[item] = { name: "装备" + item, icon: "fa-compress", callback: function () { WG.eqhelper(item, 0) } } subItems[item + "sk"] = { name: "技能" + item, icon: "fa-magic", callback: function () { WG.eqhelper(item, 1) } } subItems[item + "del"] = { name: "删除组" + item, icon: "fa-remove", callback: function () { WG.eqhelperdel(item) } } } subItems['setting'] = { name: "套装管理", icon: "edit", callback: function () { WG.eqhelperui() } } var dfd = jQuery.Deferred(); setTimeout(function () { dfd.resolve(subItems); }, 20); //setTimeout(function () { // dfd.reject(errorItems); //}, 1000); return dfd.promise(); }, eqhelperui: function () { messageClear(); var a = UI.skillsPanel; messageAppend(a); new Vue({ el: "#skillsPanelUI", data: { role: role, roleid: roleid, eqlist: {}, cpeqlist: {}, eqlistdel: {}, covereqlist: {}, eqskills_id: "none" }, created() { }, mounted() { this.eqlist = GM_getValue(this.roleid + "_eqlist", {}); }, methods: { eq: function (name) { WG.eqhelper(name, 0) }, eqs: function (name) { WG.eqhelper(name, 1) }, copyeq: function (name) { WG.eqhelper(name, 0, true) }, copyeqs: function (name) { WG.eqhelper(name, 1, true) }, save: function (name) { WG.eqhelper(name) setTimeout(() => { this.eqlist = GM_getValue(this.roleid + "_eqlist", {}); WG.eqhelperui() }, 300); }, covereq: function (name) { // var that = this; this.deleq(name) this.save(name) }, deleq: function (name) { WG.eqhelperdel(name) setTimeout(() => { WG.eqhelperui() }, 200); }, show: function () { WG.eqhelperui() }, saveUI: function () { var that = this layer.prompt({ title: '请输入套装名...', formType: 2 }, function (text, index) { layer.close(index); if (text != null) { that.save(text) } }); }, eqskills_opts_change: function (eqskills_id) { switch (eqskills_id) { case "save": this.saveUI(); break; case "copyeq": this.covereqlist = {} this.eqlist = {}; this.eqlistdel = {}; this.cpeqlist = GM_getValue(this.roleid + "_eqlist", {}); this.role = "<< 返回"; break case "delete": this.cpeqlist = {} this.eqlist = {}; this.covereqlist = {}; this.eqlistdel = GM_getValue(this.roleid + "_eqlist", {}); this.role = "<< 返回"; break; case "covereq": this.cpeqlist = {} this.eqlist = {}; this.eqlistdel = {}; this.covereqlist = GM_getValue(this.roleid + "_eqlist", {}); this.role = "<< 返回"; break; case "uneqall": WG.uneqall(); break; case "none": default: break; }; }, } }); }, fight_listener: undefined, auto_fight: function () { if (WG.fight_listener) { messageAppend("<hio>自动比试</hio>结束"); WG.remove_hook(WG.fight_listener); WG.fight_listener = undefined; return; } let name = prompt("请输入NPC名称,例如:\"高根明\""); let id = WG.find_item(name); if (id == null) return; WG.fight_listener = WG.add_hook(["text", "sc", "combat"], async function (data) { if (data.type == "combat" && data.end) { let item = G.items.get(G.id); if (item.mp / item.max_mp < 0.8) { WG.SendCmd("dazuo"); } WG.SendCmd("liaoshang"); } else if (data.type == "sc" && data.id == id) { let item = G.items.get(id); if (item.hp >= item.max_hp) { WG.Send("stopstate;fight " + id); } } else if (data.type == 'sc' && data.id == G.id) { if (data.hp >= data.max_hp) { WG.Send("stopstate;fight " + id); } } else if (data.type == 'text') { if (data.msg.indexOf("你先调整好自己的状态再来找别人比试吧") >= 0) { WG.SendCmd("liaoshang"); } if (data.msg.indexOf("你想趁人之危吗") >= 0) { WG.SendCmd("dazuo"); } if (data.msg.indexOf(">你疗伤完毕,深深吸了口气") >= 0) { WG.Send("stopstate;fight " + id); } } }); WG.Send("stopstate;fight " + id); messageAppend("<hio>自动比试</hio>开始"); }, find_item: function (name) { for (let [k, v] of G.items) { if (v.name == name) { return k; } } return null; }, recover: function (hp, mp, cd, callback) { //返回定时器 if (hp == 0) { if (WG.recover_timer) { clearTimeout(WG.recover_timer); WG.recover_timer = undefined; } return; } WG.Send("dazuo"); WG.recover_timer = setInterval(function () { //检查状态 let item = G.items.get(G.id); if (item.mp / item.max_mp < mp) { //内力控制 if (item.state != "打坐") { WG.Send("stopstate;dazuo"); } return; } if (item.hp / item.max_hp < hp) { //血满 if (item.state != "疗伤") { WG.Send("stopstate;liaoshang"); } return; } if (item.state) WG.Send("stopstate"); if (cd) { for (let [k, v] of G.cds) { if (k == "force.tu") continue; if (v) return; } } clearInterval(WG.recover_timer); callback(); }, 1000); }, useitem_hook: undefined, auto_useitem: async function () { var useflag = true; if (!WG.useitem_hook) { WG.useitem_hook = WG.add_hook("text", function (data) { if (data.msg.indexOf("你身上没有这个东西") >= 0 || data.msg.indexOf("太多") >= 0 || data.msg.indexOf("不能使用") >= 0) { useflag = false; WG.remove_hook(WG.useitem_hook); WG.useitem_hook = undefined; } }) } let name = prompt("请输入物品id,在背包中点击查看物品,即可在提示窗口看到物品id输出"); if (!name) { WG.remove_hook(WG.useitem_hook); WG.useitem_hook = undefined; return; } let num = prompt("请输入物品使用次数,例如:\"10\"", '10'); if (name) { if (name.length != 11) { L.msg('id不合法'); WG.remove_hook(WG.useitem_hook); WG.useitem_hook = undefined; return; } for (var i = 0; i < num; i++) { if (useflag) { WG.Send('use ' + name); await WG.sleep(1000); } else { WG.remove_hook(WG.useitem_hook); WG.useitem_hook = undefined; return; } } } WG.remove_hook(WG.useitem_hook); WG.useitem_hook = undefined; }, auto_Development_medicine: function () { messageClear(); var a = UI.lyui; messageAppend(a); const lianyaovue = new Vue({ el: "#LianYao", data: { level: 0, num: 1, info: "" }, created() { this.info = GM_getValue("lastmed", $('#medicint_info').val()); this.level = GM_getValue("lastmedlevel", $('#medicine_level').val()); }, methods: { startDev: function () { if (WG.at('住房-炼药房') || WG.at('帮会-炼药房')) { WG.auto_start_dev_med(this.info.replace(" ", ""), this.level, this.num); } else { L.msg("请先前往炼药房"); } }, stopDev: function () { WG.Send("stopstate"); } } }); }, findMedItems_hook: undefined, auto_start_dev_med: function (med_item, level, num) { GM_setValue("lastmed", med_item); GM_setValue("lastmedlevel", level); if (med_item) { if (med_item.split(",").length < 2) { L.msg("素材不足"); return; } } else { L.msg("素材不足"); return; } var tmpitme = med_item.split('|'); var med_items = []; for (let pitem of tmpitme) { //去除空格 pitem = pitem.replace(/(^\s*)|(\s*$)/g, ""); med_items.push(pitem.split(",")); } WG.findMedItems_hook = WG.add_hook("dialog", function (data) { if (data.dialog == "pack" && data.items != undefined && data.items.length >= 0) { let med_items_ids = []; let med_haves = []; for (let item of med_items) { let med_items_id = []; let med_have = []; for (let med_item of item) { if (JSON.stringify(data.items).indexOf(med_item) >= 0) { for (let pitem of data.items) { if (pitem.name.indexOf(med_item) >= 0) { med_items_id.push(pitem.id); med_have.push(med_item); } } } } med_haves.push(med_have); med_items_ids.push(med_items_id); } let idx = 0; for (let med_items_id of med_items_ids) { if (med_items_id.length != med_items[idx].length) { var temp = []; var temparray = []; for (var i = 0; i < med_haves[idx].length; i++) { temp[med_haves[idx][i]] = typeof med_haves[idx][i];; } for (var i = 0; i < med_items[idx].length; i++) { var type = typeof med_items[idx][i]; if (!temp[med_items[idx][i]]) { temparray.push(med_items[idx][i]); } else if (temp[med_items[idx][i]].indexOf(type) < 0) { temparray.push(med_items[idx][i]); } } let arr = []; for (const item of new Set(temparray)) { arr.push(item) } L.msg("素材不足,请检查背包是否存在" + arr.join('.')); WG.remove_hook(WG.findMedItems_hook); WG.findMedItems_hook = null; return; } idx = idx + 1; } var p_Cmd = WG.make_med_cmd(med_items_ids, level, num); console.log(p_Cmd); WG.SendStep(p_Cmd); WG.remove_hook(WG.findMedItems_hook); } }); WG.Send('pack'); }, make_med_cmd: function (medItem_ids, level, num) { let r###lt = ""; for (let medItem_id of medItem_ids) { for (let i = 0; i < parseInt(num); i++) { let startCmd = "lianyao2 start " + level + ";"; let endCmd = "lianyao2 stop;"; let midCmd = "lianyao2 add "; for (let medid of medItem_id) { r###lt += startCmd + midCmd + medid + ";" } r###lt += endCmd; } } return r###lt + "$syso 炼制完成;"; }, zmlfire: async function (zml) { if (zml) { messageAppend("运行" + zml.name, 2); if (zml.zmlType == 0 || zml.zmlType == "" || zml.zmlType == undefined) { await WG.SendCmd(zml.zmlRun); } else if (zml.zmlType == 1) { if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(zml.zmlRun); } } else if (zml.zmlType == 2) { eval(zml.zmlRun); } } }, zmlztjk: function () { zml = GM_getValue(roleid + "_zml", zml); if (! typeof zml instanceof Array) { zml = []; } messageClear(); var a = UI.zmlandztjkui; messageAppend(a); const zmlvue = new Vue({ el: "#zmlandztjk", data: { }, created() { this.zmldata = zml; }, methods: { run: function (v) { WG.zmlfire(v); }, zml: function () { WG.zml_edit(); }, ztjk: function () { WG.ztjk_edit(); }, startjk: function () { WG.ztjk_func(); }, stopjk: function () { if (WG.ztjk_hook) { WG.remove_hook(WG.ztjk_hook); WG.ztjk_hook = undefined; messageAppend("已取消注入", 2); return; } messageAppend("未注入", 2); } } }) }, zml_edit: function () { zml = GM_getValue(roleid + "_zml", zml); if (! typeof zml instanceof Array) { zml = []; } messageClear(); var edithtml = UI.zmlsetting; messageAppend(edithtml); const zmlvue = new Vue({ el: "#zmldialog", data: { singnalzml: { name: "", zmlType: "0", zmlRun: "" }, zmldata: zml }, created() { this.zmldata = zml; }, methods: { add: function () { let zmljson = { "name": this.singnalzml.name, "zmlRun": this.singnalzml.zmlRun, "zmlShow": 0, "zmlType": this.singnalzml.zmlType }; let _flag = true; for (let item of this.zmldata) { if (item.name == zmljson.name) { zmljson.zmlShow = item.zmlShow; item = zmljson; _flag = false; } } if (_flag) { this.zmldata.push(zmljson); } GM_setValue(roleid + "_zml", this.zmldata); L.msg("保存成功"); }, del: function () { this.zmldata.forEach((v, k) => { if (v.name == this.singnalzml.name) { this.zmldata.baoremove(k); GM_setValue(roleid + "_zml", this.zmldata); L.msg("删除成功"); } }); }, getShare: function () { var id = prompt("请输入分享码"); S.getShareJson(id, (res) => { let v = JSON.parse(res.json); if (v.zmlRun != undefined) { this.singnalzml = v; } else { L.msg("不合法") } }); }, edit: function (v) { this.singnalzml = v; }, showp: function (v) { zmlshowsetting = GM_getValue(roleid + "_zmlshowsetting", zmlshowsetting); //<span class="zdy-item act-item-zdy" zml="use j8ea35f34ce">大还丹</span> let a = $(".room-commands"); if (zmlshowsetting == 1) { a = $(".zdy-commands"); } for (let item of a.children()) { if (item.textContent == v.name) { item.remove(); v.zmlShow = 0; GM_setValue(roleid + "_zml", zml); messageAppend("删除快速使用" + v.name, 1); return; } } a.append("<span class=\"zdy-item act-item-zdy act-item\">" + v.name + "</span>") v.zmlShow = 1; GM_setValue(roleid + "_zml", zml); messageAppend("设置快速使用" + v.name, 0, 1); //绑定事件 $('.act-item-zdy').off('click'); $(".act-item-zdy").on('click', function () { T.usezml(0, this.textContent, ""); }); }, share: function (v) { S.shareJson(G.id, v); } } }) }, isseted: false, zml_showp: function () { $(".zdy-commands").empty(); $('.act-item-zdy').remove(); zmlshowsetting = GM_getValue(roleid + "_zmlshowsetting", zmlshowsetting); for (let zmlitem of zml) { let a = $(".room-commands"); if (zmlshowsetting == 1) { for (let item of a.children()) { if (item.textContent == zmlitem.name) { item.remove(); } } a = $(".zdy-commands"); if (!WG.isseted) { let px = $('.tool-bar.right-bar').css("bottom"); px.replace("px", ""); px = parseInt(px); px = px + 24; $('.tool-bar.right-bar').css("bottom", px + "px"); WG.isseted = true; } } else { for (let item of $(".zdy-commands").children()) { if (item.textContent == zmlitem.name) { item.remove(); } } } if (zmlitem.zmlShow == 1) { a.append("<span class=\"zdy-item act-item-zdy act-item\">" + zmlitem.name + "</span>") messageAppend("设置快速使用" + zmlitem.name, 0, 1); //绑定事件 $('.act-item-zdy').off('click'); $(".act-item-zdy").on('click', function () { T.usezml(0, this.textContent, ""); }); } } }, ztjk_edit: function () { //[{"name":"","type":"state","action":"remove","keyword":"busy","ishave":"0","send":""}] ztjk_item = GM_getValue(roleid + "_ztjk", ztjk_item); messageClear(); var edithtml = UI.ztjksetting; messageAppend(edithtml); $(".ztjk_sharedfind").on('click', () => { var id = prompt("请输入分享码"); S.getShareJson(id, (res) => { let v = JSON.parse(res.json); if (v.type != undefined) { $('#ztjk_name').val(v.name); $('#ztjk_type').val(v.type); $('#ztjk_action').val(v.action); $('#ztjk_keyword').val(v.keyword); $('#ztjk_ishave').val(v.ishave); $('#ztjk_send').val(v.send); $('#ztjk_senduser').val(v.senduser); $("#ztjk_maxcount").val(v.maxcount); $("#ztjk_istip").val(v.istip); } else { L.msg("不合法") } }); }); $('.ztjk_editadd').on("click", function () { var ztjk = { name: $('#ztjk_name').val(), type: $('#ztjk_type').val(), action: $('#ztjk_action').val(), keyword: $('#ztjk_keyword').val(), ishave: $('#ztjk_ishave').val(), send: $('#ztjk_send').val(), senduser: $('#ztjk_senduser').val(), isactive: 1, maxcount: $('#ztjk_maxcount').val(), istip: $('#ztjk_istip').val() }; let _flag = true; ztjk_item.forEach(function (v, k) { if (v.name == $('#ztjk_name').val()) { ztjk_item[k] = ztjk; _flag = false; } }); if (_flag) { ztjk_item.push(ztjk); } GM_setValue(roleid + "_ztjk", ztjk_item); WG.ztjk_edit(); messageAppend("保存成功", 2); WG.ztjk_func(); }); $(".ztjk_editdel").on('click', function () { let name = $('#ztjk_name').val(); ztjk_item.forEach(function (v, k) { if (v.name == name) { ztjk_item.baoremove(k); GM_setValue(roleid + "_ztjk", ztjk_item); WG.ztjk_edit(); messageAppend("删除成功", 2); WG.ztjk_func(); } }); }) ztjk_item.forEach(function (v, k) { var btn = "<span class='addrun" + k + "'>编辑" + v.name + "</span>"; $('#ztjk_show').append(btn); var tmptext = "注入"; if (v.isactive && v.isactive == 1) { tmptext = "暂停"; } var setbtn = "<span class='setaction" + k + "'>" + tmptext + v.name + "</span>"; $('#ztjk_set').append(setbtn); var btn3 = "<span class='shareztjk" + k + "'>分享" + v.name + "</span>"; $('#ztjk_show').append(btn3); }); ztjk_item.forEach(function (v, k) { $(".addrun" + k).on("click", function () { $('#ztjk_name').val(v.name); $('#ztjk_type').val(v.type); $('#ztjk_action').val(v.action); $('#ztjk_keyword').val(v.keyword); $('#ztjk_ishave').val(v.ishave); $('#ztjk_send').val(v.send); $('#ztjk_senduser').val(v.senduser); $("#ztjk_maxcount").val(v.maxcount); if (v.istip == null) { $("#ztjk_istip").val(1); } else { } $("#ztjk_istip").val(v.istip); }); $('.setaction' + k).on('click', function () { if (this.textContent.indexOf("暂停") >= 0) { ztjk_item[k].isactive = 0; } else { ztjk_item[k].isactive = 1; } GM_setValue(roleid + "_ztjk", ztjk_item); WG.ztjk_func(); WG.ztjk_edit(); }); $('.shareztjk' + k).on('click', function () { S.shareJson(G.id, v); }); }); }, ytjk_func: function () { WG.add_hook("room", async function (data) { if (G.yaotaFlag && data.path != 'zc/mu/shishenta') { $('.channel pre').append("<hig>【插件】" + "第 " + G.yaotaCount + " 次妖塔共获得 " + G.yaoyuan + " 点妖元,结束时间: " + dateFormat("YYYY-mm-dd HH:MM", new Date()) + "。<br><hig>") $('.tm').append("<hig>【插件】" + "第 " + G.yaotaCount + " 次妖塔共获得 " + G.yaoyuan + " 点妖元,结束时间: " + dateFormat("YYYY-mm-dd HH:MM", new Date()) + "。<br><hig>") setTimeout(async function () { while (!WG.is_free()) { await WG.sleep(1000) } if (G.yaoyuan == 261) { WG.SendCmd("tm 第 " + G.yaotaCount + " 次妖塔圆满完成,撒花~~~~~") } else { WG.SendCmd("tm 第 " + G.yaotaCount + " 次妖塔遗憾收场,撒花~~~~~") } $('#yt_prog').remove() G.yaotaFlag = false; G.yaoyuan = 0; }, 0) } if (data.path == 'zc/mu/shishenta') { $(`.state-bar`).before(`<div id=yt_prog>开始攻略妖塔</div>`) G.yaotaCount = G.yaotaCount + 1; $('.channel pre').append("<hig>【插件】" + "开始第 " + G.yaotaCount + " 次攻略妖塔,现在时间是:" + dateFormat("YYYY-mm-dd HH:MM", new Date()) + "。<br><hig>") $('.tm').append("<hig>【插件】" + "开始第 " + G.yaotaCount + " 次攻略妖塔,现在时间是:" + dateFormat("YYYY-mm-dd HH:MM", new Date()) + "。<br><hig>") G.yaoyuan = 0; G.yaotaFlag = true; } }) }, ztjk_hook: undefined, ztjk_func: function () { if (WG.ztjk_hook) { WG.remove_hook(WG.ztjk_hook); } WG.ztjk_hook = undefined; ztjk_item = GM_getValue(roleid + "_ztjk", ztjk_item); WG.ztjk_hook = WG.add_hook(["dispfm", "enapfm", "dialog", "room", "itemadd", "itemremove", "status", "text", "msg", "die", "combat", "sc"], function (data) { ztjk_item.forEach(function (v, k) { if (v.isactive != 1) { return; } if (data.type == v.type) { let keywords = v.keyword.split("|"); switch (v.type) { case "status": if (!data.name) { if (v.action == data.action) { for (var keyworditem of keywords) { if (data.sid.indexOf(keyworditem) >= 0) { if (v.ishave == "0" && data.id != G.id) { if (v.istip == "1") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } else if (v.ishave == "1" && data.id == G.id) { if (data.count != undefined && v.maxcount) { if (parseInt(data.count) < parseInt(v.maxcount)) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } else { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } } } } } else { if (v.action == data.action) { for (var keyworditem of keywords) { if (data.sid.indexOf(keyworditem) >= 0 || data.name.indexOf(keyworditem) >= 0) { if (v.ishave == "0" && data.id != G.id) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } else if (v.ishave == "1" && data.id == G.id) { if (data.count != undefined && v.maxcount) { if (parseInt(data.count) < parseInt(v.maxcount)) { messageAppend("当前层数" + data.count + ",已触发" + v.name, 1); if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } else { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } } } } } break; case "text": for (var keyworditem of keywords) { if (data.msg.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.msg) { let p = v.send.replace("{content}", data.msg.replaceAll("\n", "").replaceAll(",", "").replaceAll(";", "")); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } break; case "msg": if (!v.senduser || v.senduser == "" || v.senduser == null) { for (var keyworditem of keywords) { if (data.content.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.content) { let p = v.send.replace("{content}", data.content.replaceAll("\n", "").replaceAll(",", "").replaceAll(";", "")); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } return; } let sendusers = v.senduser.split("|"); for (let item of sendusers) { if (data.name == item) { for (var keyworditem of keywords) { if (data.content.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.content) { let p = v.send.replace("{content}", data.content); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } } else if ((item == "谣言" && data.ch == "rumor") || (item == "系统" && data.ch == 'sys') || (item == "门派" && data.ch == 'fam') || (item == "帮派" && data.ch == 'pty')) { for (var keyworditem of keywords) { if (data.content.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.content) { let p = v.send.replace("{content}", data.content); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } } // else if (item == "系统" && data.ch == 'sys') { // for (var keyworditem of keywords) { // if (data.content.indexOf(keyworditem) >= 0) { // messageAppend("已触发" + v.name, 1); // WG.SendCmd(v.send); // } // } // } } break; case "die": if (data.commands != null) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } break; case "itemadd": for (var keyworditem of keywords) { if (data.name.indexOf(keyworditem) >= 0) { if (v.ishave == 2) { if (data.p != null) { break } } if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } if (data.id) { let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } else { WG.SendCmd(v.send); } } } break; case "room": for (var keyworditem of keywords) { if (data.name.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } let p = v.send.replace("{name}", data.name); WG.SendCmd(p); return; } for (let roomItem of roomData) { if (roomItem == 0) { return; } if (roomItem.name.indexOf(keyworditem) >= 0 && roomItem.p == undefined) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } let p = v.send.replace("{name}", data.name); WG.SendCmd(p); return; } } } break; case "dialog": if (data.dialog && data.dialog == "pack") { for (var keyworditem of keywords) { if (data.name && data.name.indexOf(keyworditem) >= 0) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } let p = v.send.replace("{id}", data.id); WG.SendCmd(p); } } } break; case "combat": for (var keyworditem of keywords) { if (keyworditem == "start" && data.start == 1) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } else if (keyworditem == "end" && data.end == 1) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } } break; case "sc": let item = G.items.get(G.id); if (v.ishave == "0") { //查找id if (!v.senduser) { } let pid = WG.find_item(v.senduser); item = G.items.get(pid); } if (item && item.hp) { if ((item.hp / item.max_hp) * 100 < (parseInt(keywords[0]))) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } } if (item && item.mp) { if ((item.mp / item.max_mp) * 100 < (parseInt(keywords[1]))) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } } break; case "enapfm": for (let item of keywords) { if (item == data.id) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } } break; case "dispfm": for (let item of keywords) { if (item == data.id) { if (v.istip != "0") { messageAppend("已触发" + v.name, 1); } WG.SendCmd(v.send); } } break; default: break; } } }); }); messageAppend("已重新注入自动监控", 0, 1); }, daily_hook: undefined, oneKeyDaily: async function () { messageAppend("本脚本会自动执行师门及自动进退小树林,请确保精力足够再执行,请不要点击任务菜单", 1); var fbnums = 0; WG.daily_hook = WG.add_hook("dialog", async function (data) { if (data.dialog == "tasks") { if (data.items) { let dailylog = ""; let dailystate = ""; for (let item of data.items) { if (item.id == "signin") { dailylog = item.desc; dailystate = item.state; } } if (dailystate == 3) { messageAppend("日常已完成", 1); //WG.zdwk(); setTimeout(() => { WG.remove_hook(WG.daily_hook); WG.daily_hook = undefined; }, 1); return; } else { let str = dailylog; str = str.replace(/<(?!\/?p\b)[^>]+>/ig, ''); let str1 = str.split("精力消耗"); let n = str1[0].match(":([^%]+)/20")[1]; let n1 = str1[1].match(":([^%]+)/200")[1]; n = 20 - parseInt(n); fbnums = 20 - parseInt(n1) / 10; messageAppend("还需要" + n + "次师门任务," + fbnums + "次副本,才可签到"); if (n != 0) { //$(".sm_button").click(); $(".sm_button").text("停止(Q)"); WG.sm_state = 0; setTimeout(WG.smTask, 200); return } else { WG.sm_state = -1; } //WG.remove_hook(WG.daily_hook); //WG.daily_hook = undefined; } } } }); WG.SendCmd("tasks"); await WG.sleep(2000); while (WG.sm_state >= 0) { await WG.sleep(2000); } if (fbnums <= 0) { WG.Send("taskover signin"); messageAppend("<hiy>任务完成</hiy>"); WG.remove_hook(WG.daily_hook); WG.daily_hook = undefined; this.timer_close(); //WG.zdwk(); this.needGrove = 0; this.fbnum = 0; } else { WG.grove_auto(fbnums); } // var sxplace = sm_array[family].sxplace; // var sx = sm_array[family].sx; // if (sxplace.indexOf("-") == 0) { // WG.Send(sxplace.replace('-', '')); // } else { // WG.go(sxplace); // } // await WG.sleep(1000); // WG.SendCmd("ask2 $findPlayerByName(\"" + sx + "\")"); // await WG.sleep(1000); }, oneKeyQA: async function () { WG.Send("stopstate"); WG.sm_state = -1; var sxplace = sm_array[family].sxplace; var sx = sm_array[family].sx; if (sxplace.indexOf("-") == 0) { WG.Send(sxplace.replace('-', '')); } else { WG.go(sxplace); } await WG.sleep(2000); WG.SendCmd("select $findPlayerByName(\"" + sx + "\");$wait 200;ask2 $findPlayerByName(\"" + sx + "\")"); await WG.sleep(1000); }, sd_hook: undefined, oneKeySD: function () { var n = 0; messageAppend("本脚本自动执行购买扫荡符,进行追捕扫荡,请确保元宝足够,请不要点击任务菜单\n注意! 超过上限会自动放弃", 1); WG.sd_hook = WG.add_hook(["dialog", "text"], async function (data) { var id = 0; var loop = 2; if (data.type == 'text' && data.msg) { id = WG.getIdByName("程药发"); if (data.msg.indexOf("无法快速完") >= 0) { WG.Send("select " + id); await WG.sleep(200); WG.Send("ask1 " + id); await WG.sleep(200); WG.Send("ask2 " + id); await WG.sleep(200); while (loop) { loop--; console.log("ask3 " + id); WG.Send("ask3 " + id); await WG.sleep(1000); } //messageAppend("追捕已完成", 1); //WG.Send("ask3 " + id); //WG.zdwk(); //WG.remove_hook(WG.sd_hook); //WG.sd_hook = undefined; } //<hig>你的追捕任务完成了,目前完成20/20个,已连续完成40个。</hig> if (data.msg.indexOf("追捕任务完成了") >= 0) { let str = data.msg; str = str.replace(/<(?!\/?p\b)[^>]+>/ig, ''); n = str.match("目前完成([^%]+)/20")[1]; if (n == "20") { messageAppend("追捕已完成", 1); await WG.sleep(2000); WG.remove_hook(WG.sd_hook); WG.sd_hook = undefined; } } if (data.msg.indexOf("多历练一番") >= 0 || data.msg.indexOf("没有那么多元宝") >= 0) { messageAppend("等级太低无法接取追捕,自动取消", 1); WG.remove_hook(WG.sd_hook); WG.sd_hook = undefined; } if (data.msg.indexOf("你的追捕任务已经完成了") >= 0) { messageAppend("追捕已完成", 1); WG.remove_hook(WG.sd_hook); WG.sd_hook = undefined; } if (data.msg.indexOf("你的扫荡符不够。") >= 0) { id = WG.getIdByName("程药发"); messageAppend("还需要" + n + "次扫荡,自动购入" + n + "张扫荡符"); WG.Send("shop 0 " + n); await WG.sleep(1000); while (loop) { loop--; console.log("ask3 " + id); WG.Send("ask3 " + id); await WG.sleep(1000); } } } if (data.dialog == "tasks") { if (data.items) { let dailylog = ""; for (let item of data.items) { if (item.id == "yamen") { dailylog = item.desc; } } let str = dailylog; str = str.replace(/<(?!\/?p\b)[^>]+>/ig, ''); n = str.match("完成([^%]+)/20")[1]; n = 20 - parseInt(n); if (n == 0) { messageAppend("追捕已完成", 1); //WG.zdwk(); WG.remove_hook(WG.sd_hook); WG.sd_hook = undefined; return; } else { do { WG.go("扬州城-衙门正厅"); await WG.sleep(1000); } while (!WG.getIdByName("程药发")) WG.SendCmd("ask3 $pname(\"程药发\")"); } } } }); WG.Send("stopstate"); WG.SendCmd("tasks"); }, gpSkill_hook: undefined, getPlayerSkill: async function () { WG.gpSkill_hook = WG.add_hook("dialog", (data) => { if ((data.dialog && data.dialog == 'skills') && data.items && data.items != null) { var html = `<div class="item-commands "> <span class = "copycha" data-clipboard-target = ".target1" > 技能详情复制到剪贴板 </span></div> `; messageAppend(html); $(".copycha").on('click', () => { var dd = G.level.replace(/<\/?.+?>/g, ""); var dds = dd.replace(/ /g, ""); var copydata = { player: role, roleid: roleid, level: dds, family: G.pfamily, items: data.items }; copyToClipboard(JSON.stringify(copydata)); messageAppend("复制成功"); }); WG.remove_hook(WG.gpSkill_hook); WG.gpSkill_hook = undefined; } }); KEY.do_command("skills"); KEY.do_command("skills"); WG.Send("cha"); }, make_config: async function () { let _config = {}; let keys = GM_listValues(); keys.forEach(key => { if (key.indexOf(roleid) >= 0) { _config[key] = GM_getValue(key); } }); _config._shieldswitch = GM_getValue("_shieldswitch", shieldswitch); _config._shield = GM_getValue("_shield", shield); _config._shieldkey = GM_getValue("_shieldkey", shieldkey); _config._pushSwitch = GM_getValue("_pushSwitch", pushSwitch); _config._pushType = GM_getValue("_pushType", pushType); _config._pushToken = GM_getValue("_pushToken", pushToken); // _config._pushUrl = GM_getValue("_pushUrl", pushUrl); S.uploadUserConfig(G.id, _config, (res) => { if (res == "true") { L.msg("已成功上传"); } }); }, load_config: async function () { S.getUserConfig(G.id, (res) => { if (res != "") { let _config = JSON.parse(res); for (const key in _config) { GM_setValue(key, _config[key]); } GI.configInit(); WG.setting(); WG.ztjk_func(); WG.zml_showp(); WG.dsj_func(); L.msg("已成功加载"); } }); }, //设置 setting: function () { KEY.do_command("setting"); $('.footer-item')[$('.footer-item').length - 1].click(); // GI.configInit(); if ($('.dialog-custom .zdy_dialog').length == 0) { var a = UI.syssetting(); $(".dialog-custom").prepend(a); } $(".dialog-custom").off('click'); $("#family").off('change'); $('#wudao_pfm').off('focusout'); $(".savebtn").off('click') $('.clear_skillJson').off('click') $('.backup_btn').off('click') $('.clean_dps').off('click') $('.load_btn').off('click') $(".update_store").off('click') $(".update_id_all").off('click') $(".clean_id_all").off('click') $('#autobuy').off('change') $('#autoSkillPaperSell').off('change') $('#loginhml').off('change') $('#backimageurl').off('change') $('#statehml').off('change') $('#shieldkey').off('focusout'); $('#shield').off('focusout'); $('#funnycalc').off('click') $('#dpssakada').off('click') $('#silence').off('click') $('#zdyskilllist').off('change') $('#zdyskillsswitch').off('click') $('#shieldswitch').off('click') $('#welcome').off('focusout'); $('#die_str').off('focusout'); $('#blacklist').off('change') $('#auto_command').off('change') $('#store_fenjie_info').off('change') $('#store_drop_info').off('change') $('#lock_info').off('change') $('#store_info2').off('change') $('#store_info').off('change') $('#unauto_pfm').off('change') $('#getitemShow').off('click') $("#zmlshowsetting").off('change') $("#bagFull").off('change') $("pushSwitch").off('click'); $("pushType").off('change'); $("pushToken").off('change'); // $("pushUrl").off('change'); $('#autorelogin').off('click') $('#autoupdateStore').off('click') $('#saveAddr').off('click') $('#autorewardgoto').off('click') $('#autopfmswitch').off('click') $('#auto_eq').off('change') $('#ks_Boss').off('click') $('#marry_kiss').off('click') $('#ks_wait').off('focusout'); $('#ks_pfm').off('focusout'); $('#sm_getstore').off('click') $('#sm_price').off('click') $('#sm_any').off('click') $('#sm_loser').off('click') $(".dialog-custom").on("click", ".switch2", UI.switchClick); $("#family").change(function () { family = $("#family").val(); GM_setValue(roleid + "_family", family); }); $('#wudao_pfm').focusout(function () { wudao_pfm = $('#wudao_pfm').val(); GM_setValue(roleid + "_wudao_pfm", wudao_pfm); }); $('#sm_loser').click(function () { sm_loser = WG.switchReversal($(this)); GM_setValue(roleid + "_sm_loser", sm_loser); }); $('#sm_any').click(function () { sm_any = WG.switchReversal($(this)); GM_setValue(roleid + "_sm_any", sm_any); }); $('#sm_price').click(function () { sm_price = WG.switchReversal($(this)); GM_setValue(roleid + "_sm_price", sm_price); }); $('#sm_getstore').click(function () { sm_getstore = WG.switchReversal($(this)); GM_setValue(roleid + "_sm_getstore", sm_getstore); }); $('#ks_pfm').focusout(function () { ks_pfm = $('#ks_pfm').val(); GM_setValue(roleid + "_ks_pfm", ks_pfm); }); $('#ks_wait').focusout(function () { ks_wait = $('#ks_wait').val(); GM_setValue(roleid + "_ks_wait", ks_wait); }); $('#marry_kiss').click(function () { automarry = WG.switchReversal($(this)); GM_setValue(roleid + "_automarry", automarry); }); $('#ks_Boss').click(function () { autoKsBoss = WG.switchReversal($(this)); GM_setValue(roleid + "_autoKsBoss", autoKsBoss); }); $('#auto_eq').focusout(function () { autoeq = $('#auto_eq').val(); GM_setValue(roleid + "_auto_eq", autoeq); }); $('#autopfmswitch').click(function () { auto_pfmswitch = WG.switchReversal($(this)); GM_setValue(roleid + "_auto_pfmswitch", auto_pfmswitch); if (auto_pfmswitch == "开") { G.auto_preform = true; } else { G.auto_preform = false; } }); $('#autopfmmode').click(function () { auto_pfm_mode = WG.switchReversal($(this)); GM_setValue(roleid + "_auto_pfm_mode", auto_pfm_mode); if (auto_pfm_mode == "开") { G.auto_pfm_mode = true; } else { G.auto_pfm_mode = false; } }); $('#autorewardgoto').click(function () { auto_rewardgoto = WG.switchReversal($(this)); GM_setValue(roleid + "_auto_rewardgoto", auto_rewardgoto); }); $('#busyinfo').click(function () { busy_info = WG.switchReversal($(this)); GM_setValue(roleid + "_busy_info", busy_info); }); $('#saveAddr').click(function () { saveAddr = WG.switchReversal($(this)); GM_setValue(roleid + "_saveAddr", saveAddr); }); $('#autoupdateStore').click(function () { auto_updateStore = WG.switchReversal($(this)); GM_setValue(roleid + "_auto_updateStore", auto_updateStore); }); $('#autorelogin').click(function () { auto_relogin = WG.switchReversal($(this)); GM_setValue(roleid + "_auto_relogin", auto_relogin); }); $("#zmlshowsetting").change(function () { zmlshowsetting = $('#zmlshowsetting').val(); GM_setValue(roleid + "_zmlshowsetting", zmlshowsetting); WG.zml_showp(); }); $("#bagFull").change(function () { bagFull = $('#bagFull').val(); GM_setValue(roleid + "_bagFull", bagFull); }); $("#pushSwitch").click(function () { pushSwitch = WG.switchReversal($(this)); GM_setValue("_pushSwitch", pushSwitch); }); $("#pushType").change(function () { pushType = $('#pushType').val(); GM_setValue("_pushType", pushType); }); $("#pushToken").focusout(function () { pushToken = $('#pushToken').val(); GM_setValue("_pushToken", pushToken); }); // $("#pushUrl").focusout(function () { // pushUrl = $('#pushUrl').val(); // GM_setValue("_pushUrl", pushUrl); // }); $("#color_select").change(function () { color_select = $('#color_select').val(); GM_setValue("color_select", color_select); }); $('#getitemShow').click(function () { getitemShow = WG.switchReversal($(this)); GM_setValue(roleid + "_getitemShow", getitemShow); if (getitemShow == "开") { G.getitemShow = true; } else { G.getitemShow = false; } }); $('#unauto_pfm').change(function () { unauto_pfm = $('#unauto_pfm').val(); GM_setValue(roleid + "_unauto_pfm", unauto_pfm); var unpfm = unauto_pfm.split(','); blackpfm = []; for (var pfmname of unpfm) { if (pfmname) blackpfm.push(pfmname); } }); $('#store_info').change(function () { zdy_item_store = $('#store_info').val(); GM_setValue(roleid + "_zdy_item_store", zdy_item_store); store_list = zdy_item_store.split(","); store_list = store_list.concat(zdy_item_store2.split(",")); }); $('#store_info2').change(function () { zdy_item_store2 = $('#store_info2').val(); GM_setValue(roleid + "_zdy_item_store2", zdy_item_store2); store_list = zdy_item_store2.split(","); store_list = store_list.concat(zdy_item_store.split(",")); }); $('#lock_info').change(function () { zdy_item_lock = $('#lock_info').val(); GM_setValue(roleid + "_zdy_item_lock", zdy_item_lock); lock_list = zdy_item_lock.split(","); }); $('#store_drop_info').change(function () { zdy_item_drop = $('#store_drop_info').val(); GM_setValue(roleid + "_zdy_item_drop", zdy_item_drop); drop_list = zdy_item_drop.split(","); }); $('#store_fenjie_info').change(function () { zdy_item_fenjie = $('#store_fenjie_info').val(); GM_setValue(roleid + "_zdy_item_fenjie", zdy_item_fenjie); fenjie_list = zdy_item_fenjie.split(","); }); $('#auto_command').change(function () { auto_command = $('#auto_command').val(); GM_setValue(roleid + "_auto_command", auto_command); }); $('#blacklist').change(function () { blacklist = $('#blacklist').val(); GM_setValue(roleid + "_blacklist", blacklist); }); $('#welcome').focusout(function () { welcome = $('#welcome').val(); GM_setValue(roleid + "_welcome", welcome); }); $('#die_str').focusout(function () { die_str = $('#die_str').val(); GM_setValue(roleid + "_die_str", die_str); }); $('#shieldswitch').click(function () { shieldswitch = WG.switchReversal($(this)); GM_setValue("_shieldswitch", shieldswitch); if (shieldswitch == "开") { messageAppend('已注入屏蔽系统', 0, 1); } }); $('#zdyskillsswitch').click(function () { zdyskills = WG.switchReversal($(this)); GM_setValue(roleid + "_zdyskills", zdyskills); if (zdyskills == "开") { messageAppend('已开启自定义技能顺序,填写顺序后,请刷新游戏生效', 0, 1); } }); $('#zdyskilllist').change(function () { let x = JSON.parse($("#zdyskilllist").val()); if (!typeof x instanceof Array) { alert("无效的输入") return false; } else { zdyskilllist = $("#zdyskilllist").val(); GM_setValue(roleid + "_zdyskilllist", zdyskilllist); } }); $('#silence').click(function () { silence = WG.switchReversal($(this)); GM_setValue(roleid + "_silence", silence); if (silence == "开") { messageAppend('已开启安静模式', 0, 1); } }); $('#dpssakada').click(function () { dpssakada = WG.switchReversal($(this)); GM_setValue(roleid + "_dpssakada", dpssakada); if (dpssakada == "开") { messageAppend('已开启战斗统计', 0, 1); } }); $('#funnycalc').click(function () { funnycalc = WG.switchReversal($(this)); GM_setValue(roleid + "_funnycalc", funnycalc); if (funnycalc == "开") { messageAppend('已开启FUNNY计算', 0, 1); } }); $('#shield').focusout(function () { shield = $('#shield').val(); GM_setValue("_shield", shield); }); $('#shieldkey').focusout(function () { shieldkey = $('#shieldkey').val(); GM_setValue("_shieldkey", shieldkey); }); $('#statehml').change(function () { statehml = $('#statehml').val(); GM_setValue(roleid + "_statehml", statehml); }); $('#backimageurl').change(function () { backimageurl = $('#backimageurl').val(); GM_setValue(roleid + "_backimageurl", backimageurl); if (backimageurl != '') { WG.SendCmd("setting backcolor none"); GM_addStyle(`body{ background-color:rgb(0,0,0,.25) } div{ opacity:1; } html{ background:rgba(255,255,255,0.25); background-image:url('${backimageurl}'); background-repeat:no-repeat; background-size:100% 100%; -moz-background-size:100% 100%; } `); } }); $('#loginhml').change(function () { loginhml = $('#loginhml').val(); GM_setValue(roleid + "_loginhml", loginhml); }); $('#autobuy').change(function () { auto_buylist = $('#autobuy').val(); GM_setValue(roleid + "_auto_buylist", auto_buylist); }); $('#autoSkillPaperSell').change(function () { auto_skillPaperSelllist = $('#autoSkillPaperSell').val(); GM_setValue(roleid + "_auto_skillPaperSelllist", auto_skillPaperSelllist); }); $(".update_id_all").on("click", WG.update_id_all); $(".clean_id_all").on("click", WG.clean_id_all); $(".update_store").on("click", WG.update_store); $('.backup_btn').on('click', WG.make_config); $('.load_btn').on('click', WG.load_config); $('.clean_dps').on('click', WG.clean_dps); $('.clear_skillJson').on('click', () => { zdyskilllist == ""; messageAppend("已关闭自定义,请刷新重新获取技能数据!"); zdyskills = "关"; GM_setValue(roleid + "_zdyskilllist", ""); GM_setValue(roleid + "_zdyskills", zdyskills); }); $(".savebtn").on("click", function () { let tmp = []; for (let item of keyitem) { let zdybtnitem = { name: '无', send: '' }; let pname = $(`#name${item}`).val(); let psend = $(`#send${item}`).val(); if (pname != '') { zdybtnitem.name = pname; zdybtnitem.send = psend; } tmp.push(zdybtnitem); } zdy_btnlist = tmp; GM_setValue(roleid + "_zdy_btnlist", zdy_btnlist); messageAppend("保存自定义按钮成功"); WG.zdy_btnListInit(); }); $('#family').val(family); $('#wudao_pfm').val(wudao_pfm); $('#sm_loser').val(sm_loser); $('#sm_any').val(sm_any); $('#sm_price').val(sm_price); $('#sm_getstore').val(sm_getstore); $('#ks_pfm').val(ks_pfm); $("#ks_wait").val(ks_wait); $('#marry_kiss').val(automarry); $('#ks_Boss').val(autoKsBoss); $('#auto_eq').val(autoeq); $('#autopfmswitch').val(auto_pfmswitch); $('#autopfmmode').val(auto_pfm_mode); $('#autorewardgoto').val(auto_rewardgoto); $('#busyinfo').val(busy_info); $('#saveAddr').val(saveAddr); $('#autoupdateStore').val(auto_updateStore); $('#autorelogin').val(auto_relogin); $("#zmlshowsetting").val(zmlshowsetting); $("#bagFull").val(bagFull); $("#pushSwitch").val(pushSwitch); $("#pushType").val(pushType); $("#pushToken").val(pushToken); // $("#pushUrl").val(pushUrl); $("#color_select").val(color_select); $('#getitemShow').val(getitemShow); $('#unauto_pfm').val(unauto_pfm); $('#store_info').val(zdy_item_store); $('#store_info2').val(zdy_item_store2); $('#lock_info').val(zdy_item_lock); $('#store_drop_info').val(zdy_item_drop); $('#store_fenjie_info').val(zdy_item_fenjie); $('#auto_command').val(auto_command); $("#blacklist").val(blacklist); $('#welcome').val(welcome); $('#die_str').val(die_str); $('#shieldswitch').val(shieldswitch); $('#silence').val(silence); $('#dpssakada').val(dpssakada); $('#funnycalc').val(funnycalc); $('#shield').val(shield); $('#shieldkey').val(shieldkey); $('#statehml').val(statehml); $("#backimageurl").val(backimageurl); $("#loginhml").val(loginhml); $("#autobuy").val(auto_buylist); $("#autoSkillPaperSell").val(auto_skillPaperSelllist); $("#zdyskillsswitch").val(zdyskills); $("#zdyskilllist").val(zdyskilllist); //自定义按钮刷新 var keyitem = ["Q", "W", "E", "R", "T", "Y"]; let zdybtni = 0; for (let item of keyitem) { $(`#name${item}`).val(zdy_btnlist[zdybtni].name); $(`#send${item}`).val(zdy_btnlist[zdybtni].send); zdybtni = zdybtni + 1; } for (let w = $(".setting>.setting-item2"), t = 0; t < w.length; t++) { var s = $(w[t]), i = s.attr("for"); if (i) { var n = eval(i); switch (i) { default: "开" == n && (s.find(".switch2").addClass("on"), s.find(".switch-text").html("开")) } } } }, zdybtnfunc: function (type) { WG.SendCmd(zdy_btnlist[type].send); }, zdy_btnset: function () { zdy_btnlist = GM_getValue(roleid + "_zdy_btnlist", zdy_btnlist); messageClear(); let html = UI.zdyBtnsetui(); messageAppend(html); var keyitem = ["Q", "W", "E", "R", "T", "Y"]; let i = 0; for (let item of keyitem) { $(`#name${item}`).val(zdy_btnlist[i].name); $(`#send${item}`).val(zdy_btnlist[i].send); i = i + 1; } $(".savebtn").off('click'); $(".savebtn").on("click", function () { let tmp = []; for (let item of keyitem) { let zdybtnitem = { name: '无', send: '' }; let pname = $(`#name${item}`).val(); let psend = $(`#send${item}`).val(); if (pname != '') { zdybtnitem.name = pname; zdybtnitem.send = psend; } tmp.push(zdybtnitem); } zdy_btnlist = tmp; GM_setValue(roleid + "_zdy_btnlist", zdy_btnlist); messageAppend("保存成功"); WG.zdy_btnListInit(); }); }, zdy_btnListInit: function () { zdy_btnlist = GM_getValue(roleid + "_zdy_btnlist", zdy_btnlist); inzdy_btn = GM_getValue(roleid + "_inzdy_btn", inzdy_btn); if (zdy_btnlist.length == 0) { for (var i = 0; i < 6; i++) { zdy_btnlist.push({ "name": "无", "send": "" }); } GM_setValue(roleid + "_zdy_btnlist", zdy_btnlist); } if (inzdy_btn) { WG.zdy_btnshow(); } else { WG.zdy_btnshow('off'); } }, zdy_btnshow: function (type = 'on') { if (type == 'on') { inzdy_btn = true; var html = UI.zdybtnui(); $('.WG_button').remove(); $(".WG_log").after(html); let keyitem = ["Q", "W", "E", "R", "T", "Y"]; for (let i = 0; i < keyitem.length; i++) { $(`#keyin${keyitem[i]}`).on('click', function () { WG.zdybtnfunc(i); }); } $(".auto_perform").on("click", WG.auto_preform_switch); $(".cmd_echo").on("click", WG.cmd_echo_button); } else if (type == 'off') { inzdy_btn = false; var html = UI.btnui(); $('.WG_button').remove(); $(".WG_log").after(html); $(".sm_button").on("click", WG.sm_button); $(".go_yamen_task").on("click", WG.go_yamen_task); $(".kill_all").on("click", WG.kill_all); $(".get_all").on("click", WG.get_all); $(".sell_all").on("click", WG.sell_all); $(".zdwk").on("click", WG.zdwk); $(".auto_perform").on("click", WG.auto_preform_switch); $(".cmd_echo").on("click", WG.cmd_echo_button); if (G.isGod()) { $('.zdy-item.zdwk').html("修炼(Y)"); } } GM_setValue(roleid + "_inzdy_btn", inzdy_btn); }, runLoginhml: function () { WG.SendCmd(loginhml); }, tnBuy_hook: null, tnBuy: function () { WG.tnBuy_hook = WG.add_hook(["dialog", "text"], (data) => { let _seller; let _itemids = new Map(); let _sendcmd = "" if (data.type == 'dialog' && data.title != null && data.title.indexOf("唐楠正在贩卖") >= 0) { _seller = data.seller; for (let item of data.selllist) { if (WG.inArray(item.name, auto_buylist.split(","))) { _itemids.set(item.id, item.count); } } _itemids.forEach((val, key, map) => { _sendcmd = _sendcmd + "buy " + val + " " + key + " from " + _seller + ";"; _sendcmd = _sendcmd + "$wait 500;"; }); _sendcmd = _sendcmd + "look3 1;" WG.SendCmd(_sendcmd); } if (data.type == "text" && data.msg.indexOf("没有这个玩家") >= 0) { messageAppend("执行结束"); $(".dialog-close").click(); WG.remove_hook(WG.tnBuy_hook); } }); WG.SendCmd("$to 扬州城-广场;$wait 100;$to 扬州城-当铺;$wait 200;list %唐楠%"); }, zxBuy_hook: null, zxBuy: function () { WG.zxBuy_hook = WG.add_hook(["dialog", "text"], (data) => { let _seller = WG.getIdByName("朱熹") let _itemids = new Map(); let _sendcmd = "" if (data.type == 'dialog' && data.dialog == 'pack') { for (let item of data.items) { if (WG.inArray(item.name.toLowerCase(), auto_skillPaperSelllist.split(","))) { _itemids.set(item.id, item.count); } } _itemids.forEach((val, key, map) => { _sendcmd = _sendcmd + "sell " + val + " " + key + " to " + _seller + ";"; _sendcmd = _sendcmd + "$wait 500;"; }); _sendcmd = _sendcmd + "look3 1;" WG.SendCmd(_sendcmd); } if (data.type == "text" && data.msg.indexOf("没有这个玩家") >= 0) { //messageAppend("执行结束"); $(".dialog-close").click(); WG.remove_hook(WG.zxBuy_hook); } }); WG.SendCmd("$to 扬州城-广场;go east;go north;$wait 100;$wait 200;pack"); }, selectLowKongfu: function (n = 0) { WG.gpSkill_hook = WG.add_hook("dialog", (data) => { if ((data.dialog && data.dialog == 'skills') && data.items && data.items != null) { var lianxiCodeStart = "jh fam 0 start,go west,go west,go north,go enter,go west,"; var lianxiCode = ""; var lianxiCodeMin = ""; var lianxiCodeEnd = "wakuang"; if (G.isGod()) { lianxiCodeEnd = "xiulian"; } var __skillNameList = []; var __skillMinNameList = []; var maxSkill = n; if (n == 0 || isNaN(n)) { maxSkill = data.limit; } var nowCount = 0; var __enaSkill = []; for (let item of data.items) { if (nowCount > 5) { break; } if (item.enable_skill) { __enaSkill.push(item.enable_skill); } if (WG.inArray(item.id, __enaSkill) || item.name.indexOf("基本") >= 0) { if (parseInt(item.level) < parseInt(maxSkill)) { lianxiCode = lianxiCode + `lianxi ${item.id} ${maxSkill},` if (nowCount < 4) { lianxiCodeMin = lianxiCodeMin + `lianxi ${item.id} ${maxSkill},` __skillMinNameList.push(item.name); } __skillNameList.push(item.name); nowCount++; } } } var __code = `setting auto_work ${lianxiCodeStart}${lianxiCode}${lianxiCodeEnd}` if (__code.length <= 200) { WG.Send(`setting auto_work ${lianxiCodeStart}${lianxiCode}${lianxiCodeEnd}`); messageAppend(`添加` + __skillNameList.join(",") + `到${maxSkill}`); } else { WG.Send(`setting auto_work ${lianxiCodeStart}${lianxiCodeMin}${lianxiCodeEnd}`); messageAppend(`添加` + __skillMinNameList.join(",") + `到${maxSkill}`); } messageAppend("添加成功,数据刷新后显示"); WG.remove_hook(WG.gpSkill_hook); WG.gpSkill_hook = undefined; } }); KEY.do_command("skills"); KEY.do_command("skills"); WG.Send("cha"); }, hooks: [], hook_index: 0, add_hook: function (types, fn) { var hook = { 'index': WG.hook_index++, 'types': types, 'fn': fn }; WG.hooks.push(hook); return hook.index; }, remove_hook: function (hookindex) { var that = this; for (var i = 0; i < that.hooks.length; i++) { if (that.hooks[i].index == hookindex) { that.hooks.baoremove(i); } } }, run_hook: function (type, data) { //console.log(data); for (var i = 0; i < this.hooks.length; i++) { // if (this.hooks[i] !== undefined && this.hooks[i].type == type) { // this.hooks[i].fn(data); // } try { var listener = this.hooks[i]; if (listener.types == data.type || (listener.types instanceof Array && $ .inArray(data.type, listener.types) >= 0)) { listener.fn(data); } } catch (e) { console.error('hook error', e); } } }, receive_message: function (msg) { if (!msg || !msg.data) return; var data; var deepCopy = function (source) { var r###lt = {}; for (var key in source) { r###lt[key] = typeof source[key] === 'object' ? deepCopy(source[key]) : source[key]; } return r###lt; } if (msg.data[0] == '{' || msg.data[0] == '[') { var func = new Function("return " + msg.data + ";"); data = func(); } else { data = { type: 'text', msg: msg.data }; } if (G.cmd_echo && data.type != 'time') { console.log(data); } if (G.yaotaFlag && typeof (data.msg) == 'string') { let ytdata = data.msg; if (ytdata.indexOf("一股奇异的能量涌入你的体内,你获得") >= 0) { G.yaoyuan = G.yaoyuan + parseInt(ytdata.replace(/[^0-9]/ig, "")) $('#yt_prog').html("<hiy>目前已获得 " + G.yaoyuan + " 妖元</hiy>") if (G.yaoyuan == 261) { $('#yt_prog').html("<hiy>目前已获得 " + G.yaoyuan + " 妖元,boss出现!</hiy>") } } } if (silence == "开") { if (data.type == 'state') { if (data.silence == undefined) { if (data.desc != []) { data.desc = []; data.silence = 1; let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } } } if (data.type == 'text') { let pdata = data.msg; let a = pdata.split(/.*造成<wht>|.*造成<hir>|<\/wht>点|<\/hir>点/); if (a[2]) { let b = a[2].split(/伤害|\(|</); messageAppend(`造成<wht>${a[1]}</wht>点<hir>${b[0]}</hir>伤害!`, 0, 1); WG.run_hook(data.type, data); return; } } } if (data.type == 'msg') { if (shieldswitch == '开') { if (shield != undefined && (shield.indexOf(data.name) >= 0 || shield.indexOf(data.uid) >= 0)) return; var skey = shieldkey.split(","); for (let keyword of skey) { if (keyword != "" && data.content.indexOf(keyword) >= 0) { return; } } } } if (data.type == 'text') { if (shieldswitch == '开') { var skey = shieldkey.split(","); for (let keyword of skey) { if (keyword != "" && data.msg.indexOf(keyword) >= 0) { return; } } } } if (data.type == 'dialog' && data.t == 'fam' && data.k == undefined) { if (UI.toui[data.index] != undefined) { data.desc += "\n"; data.desc += UI.toui[data.index]; data.k = 'knva'; let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } } if (data.type == 'text' && data.msg == '什么?' && G.wsdelaySetTime != undefined) { if (G.wsdelaySetCount <= 3) { G.wsdelaySetCount += 1; if (G.wsdelay == undefined) { G.wsdelay = new Date().getTime() - G.wsdelaySetTime; } else { G.wsdelay = (new Date().getTime() - G.wsdelaySetTime + G.wsdelay) / 2 } G.wsdelaySetTime = new Date().getTime() WG.SendCmd("test") } else { G.wsdelay = (new Date().getTime() - G.wsdelaySetTime + G.wsdelay) / 2 WG.SendCmd("tm 服务器到本地来回延迟约 " + G.wsdelay + " 毫秒") G.wsdelaySetTime = undefined; G.wsdelaySetCount = undefined; setTimeout(() => { let content = $(".content-message pre").html(); content = content.replaceAll('什么?\n', ''); $(".content-message pre").html(content); }, 10); } } if (data.type == 'dialog' && data.t == 'fb' && data.k == undefined) { data.desc += "\n"; data.desc += UI.fbui(fb_path[data.index], data.is_multi, data.is_diffi) data.k = 'knva'; let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } if (data.type == 'dialog' && data.dialog == 'pack' && data.from == 'item' && data.k == undefined) { let itemname = data.desc.split("\n")[0]; data.desc += "\n"; data.desc += UI.itemui(itemname); data.k = 'knva'; let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } if (data.type == "perform") { if (zdyskills == "开") { zdyskilllist = GM_getValue(roleid + "_zdyskilllist", zdyskilllist); data.skills = JSON.parse(zdyskilllist); let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } } if (data.type == 'cmds') { if (unsafeWindow && unsafeWindow.ToRaid) { if (JSON.stringify(data.items).indexOf('进入副本') >= 0) { let cr_path = data.items[0].cmd let sd_path = '' if (cr_path.indexOf("1 0") >= 0) { sd_path = cr_path.replaceAll('1 0', '1') } else { sd_path = cr_path + " 0" } let cp = {} cp.name = '扫荡指定次数'; cp.cmd = `@js ($sdnum) =prompt("请输入次数,注意:若副本掉落物品过多,请不要输入超过50次,否则可能号没了","10") [if] (sdnum)!=null ${sd_path} (sdnum)`; data.items.push(cp); let toudu = {} toudu.name = '偷渡指定次数'; toudu.cmd = `@js ($sdnum) =prompt("请输入次数","10") [if] (sdnum)!=null [while] (sdnum) !=0 ($sdnum) = (sdnum)-1 ${cr_path} cr over`; data.items.push(toudu); let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); return; } } } //任务进度 -- fork from Suqing funny if (data.type == 'dialog' && data.dialog == 'tasks' && data.items) { let jl, fb, qa, wd, wd1, wd2, wd3, xy, mpb, boss, wdtz, syt, ys, sm1, sm2, ym1, ym2, yb1, yb2; data.items.forEach(task => { if (task.state === 2) WG.SendCmd(`taskover ${task.id}`);//自动完成 if (task.id === 'signin') { //精力消耗 const a = task.desc.match(/精力消耗:<...>(\d+)\/200<....>/); if (a) { jl = parseInt(a[1]) < 200 ? `<hig>${a[1]}</hig>` : a[1]; } //#道塔进度 const b = task.desc.match(/#道塔(.+),进度(\d+)\/(\d+)<....>/); if (b) { wd1 = b[2]; wd2 = b[3]; if (wd1 < wd2) wd1 = `<hig>${wd1}</hig>`; /可以重置/.test(b[1]) ? wd3 = "<hig>可以重置</hig>" : wd3 = "已经重置"; wd = wd1 + "/" + wd2 + " " + wd3 } else { wd = "只打塔主" } //首席请安 const c = task.desc.match(/<.+?>(.+)首席请安<.+?>/); if (c) { /已经/.test(c[1]) ? qa = "已经请安" : qa = "<hig>尚未请安</hig>"; } else { qa = "无需请安" } //今日副本次数 const d = task.desc.match(/今日副本完成次数:(\d+)。/); if (d) { fb = d[1]; } //襄阳 const e = task.desc.match(/尚未协助襄阳守城/); (e) ? xy = `<hig>0</hig>` : xy = 1; //门派BOSS const f = task.desc.match(/尚未挑战门派BOSS/); (f) ? mpb = `<hig>0</hig>` : mpb = 1; //#神BOSS const g = task.desc.match(/挑战(\d+)次#神BOSS/); if (g) { boss = 5 - parseInt(g[1]); boss = `<hig>${boss}</hig>`; } else { if (G.level && /#神|剑神|刀皇|兵主|战神/.test(G.level)) boss = 5; } //#道塔主 const h = task.desc.match(/尚未挑战#道塔塔主/); (h) ? wdtz = `<hig>0</hig>/1` : wdtz = `已打或未解锁`; //妖塔 const i = task.desc.match(/挑战弑妖塔(\d+)\/50/); if (i) { syt = i[1]; } //妖神 const j = task.desc.match(/尚未挑战妖神/); (j) ? ys = `<hig>0</hig>/1` : ys = `已打或未解锁`; } else if (task.id === 'sm') { //师门任务 let a = task.desc.match(/目前完成(.*)\/20个,共连续完成(.*)个。/); (parseInt(a[1]) < 20) ? sm1 = `<hig>${a[1]}</hig>` : sm1 = a[1]; sm2 = a[2]; } else if (task.id === 'yamen') { //追捕 let a = task.desc.match(/目前完成(.*)\/20个,共连续完成(.*)个。/); (parseInt(a[1]) < 20) ? ym1 = `<hig>${a[1]}</hig>` : ym1 = a[1]; ym2 = a[2]; } else if (task.id === 'yunbiao') { //运镖 let a = task.desc.match(/本周完成(.*)\/20个,共连续完成(.*)个。/); (parseInt(a[1]) < 20) ? yb1 = `<hig>${a[1]}</hig>` : yb1 = a[1]; yb2 = a[2]; } }); //合并生成进度数据 let taskprog = `门派请安 => ${qa}\n#道之塔 => ${wd}\n`; taskprog += `精力消耗 => ${jl}/200 副本次数 => ${fb}次\n师门任务 => ${sm1}/20 ${sm2}连\n`; taskprog += `衙门追捕 => ${ym1}/20 ${ym2}连\n每周运镖 => ${yb1}/20 ${yb2}连\n`; taskprog += `襄阳守城 => ${xy}/1 门派BOSS => ${mpb}/1\n`; taskprog += `#道塔主 => ${wdtz}\n`; if (boss) taskprog += `#神BOSS => ${boss}/5\n`; if (syt) taskprog += `挑战弑妖塔 => ${syt}/50 挑战妖神 => ${ys}\n`; $(".remove_taskprog").remove(); $(".content-message pre").append(`<span class="remove_taskprog">${taskprog}</span>`); AutoScroll(".content-message"); } //按指定顺序排序背包 -- fork from Suqing funny let ITEMS = [ "师门补给包", "背包扩充石", "小箱子", "随从礼包", "神魂碎片", "#道</hio>", "#道残页", "元晶", "帝魄碎片", "ord", "hir", "玄晶", "养精丹</hig>", "养精丹", "培元丹", "玫瑰花", "扫荡符", "天师符", "叛师符", "洗髓丹", "<hig>喜宴", "<hic>喜宴", "<hiy>喜宴", "师门令牌</hig>", "师门令牌</hic>", "师门令牌</hiy>", "师门令牌</HIZ>", "师门令牌</hio>",//师门令牌排序 "碎裂的红宝石", "碎裂的绿宝石", "碎裂的蓝宝石", "碎裂的黄宝石",//宝石排序 "红宝石</hic>", "绿宝石</hic>", "蓝宝石</hic>", "黄宝石</hic>", "精致的红宝石", "精致的绿宝石", "精致的蓝宝石", "精致的黄宝石", "完美的红宝石", "完美的绿宝石", "完美的蓝宝石", "完美的黄宝石", "聚气丹</hig>", "聚气丹</hic>", "聚气丹</hiy>", "聚气丹</HIZ>", "聚气丹</hio>",//聚气丹排序 "突破丹</hig>", "突破丹</hic>", "突破丹</hiy>", "突破丹</hiz>", "突破丹</hio>",//突破丹排序 "残页</hio>", "残页</HIZ>", "残页</hiy>", "残页</hic>", "残页</hig>",//残页排序 "鲤鱼", "草鱼", "鲢鱼", "鲮鱼", "鳊鱼", "鲂鱼", "黄金鳉", "黄颡鱼", "太湖银鱼", "虹鳟", "孔雀鱼", "反天刀",//鱼排序 "银龙鱼", "黑龙鱼", "罗汉鱼", "巨骨舌鱼", "七星刀鱼", "帝王老虎魟", "当归", "芦荟", "山楂叶", "柴胡", "金银花", "石楠叶", "茯苓", "沉香", "熟地黄", "九香虫", "络石藤", "冬虫夏草",//药材排序 "人参", "何首乌", "凌霄花", "灵芝", "天仙藤", "盘龙参", "秘籍</wht>", "秘籍", "四十二章经一", "四十二章经二", "四十二章经三", "四十二章经四", "四十二章经五", "四十二章经六", "四十二章经七", "四十二章经八", ]; if (data.type == 'dialog' && data.dialog == 'pack') { //生成快速使用按钮 -- fork from Suqing funny function autoUse(item) { if (/养精丹|朱果|潜灵果|背包扩充石|小箱子|师门补给包|随从礼包|技能重置包/.test(item.name)) { let cmd = ["stopstate"]; let count = item.count; let zl = "use"; if (/小箱子|师门补给包|随从礼包|技能重置包/.test(item.name)) zl = "open"; for (let i = 0; i < count; i++) { cmd.push(`$wait 250;${zl} ${item.id}`); } $(".content-message pre").append( $(`<div class="item-commands"><span class="autouse">使用 ${item.name} ${count}次</span></div>`).click(() => WG.SendCmd(cmd)), ); AutoScroll(".content-message"); } } //获得物品后检测生成快速使用按钮 -- fork from Suqing funny if (data.name) { autoUse(data); } //按指定顺序排序 -- fork from Suqing funny // if (data.items) { // let pack_items = []; // ITEMS.forEach(name => { // for (let i =0; i < data.items.length; i++) { // let item = data.items[i]; // if (item !==0 && item.name.includes(name)) { // pack_items.push(data.items[i]); // data.items[i] = 0; // } // } // }); // data.items.forEach(item => { // if (item !== 0) pack_items.push(item); // }); // pack_items.forEach(item => autoUse(item)); // data.type = "dialog"; // //data.dialog = "pack"; // data.items = pack_items; // let p = deepCopy(msg); // p.data = JSON.stringify(data); // WG.run_hook(data.type, data); // ws_on_message.apply(this, [p]); // return; // } } if (data.type == 'room') { if (!(/桃花岛|慈航静斋/).test(data.name)) { //精简房间描述、生成功能按钮 -- fork from Suqing funny let room_desc = data.desc; if (room_desc.length > 30) { let desc0 = room_desc.replace(/<([^<]+)>/g, ""); let desc1 = desc0.substr(0, 30); let desc2 = desc0.substr(30); data.desc = `<span id="show">${desc1} <hic>»»»</hic></span><span id="more" style="display:none">${desc0}</span><span id="hide" style="display:none"> <hiy>«««</hiy></span>` //data.desc = `${desc1}<span id="show"> <hic>»»»</hic></span><span id="more" style="display:none">${desc2}</span><span id="hide" style="display:none"> <hiy>«««</hiy></span>`; } if (room_desc.includes("cmd")) { room_desc = room_desc.replace("<hig>椅子</hig>", "椅子");//新手教程的椅子 room_desc = room_desc.replace("<CMD cmd='look men'>门(men)<CMD>", "<cmd cmd='look men'>门</cmd>");//兵营副本的门 room_desc = room_desc.replace(/span/g, "cmd"); //古墓里的画和古琴是<span>标签 room_desc = room_desc.replace(/"/g, "'"); // "" => '' room_desc = room_desc.replace(/\((.*?)\)/g, "");//去除括号和里面的英文单词 //console.log(room_desc); let cmds = room_desc.match(/<cmd cmd='([^']+)'>([^<]+)<\/cmd>/g); //console.log(cmds); cmds.forEach(cmd => { let x = cmd.match(/<cmd cmd='(.*)'>(.*)<\/cmd>/); data.commands.unshift({ cmd: x[1], name: `<hic>${x[2]}</hic>` }); }); // room_desc = room_desc.replace(/<([^<]+)>/g, ""); cmds.forEach(desc => data.desc = `<hic>${desc}</hic> ${data.desc}`); } let p = deepCopy(msg); p.data = JSON.stringify(data); WG.run_hook(data.type, data); ws_on_message.apply(this, [p]); $("#show").click(() => { $("#more").show(); $("#show").hide(); $("#hide").show(); }); $("#hide").click(() => { $("#more").hide(); $("#show").show(); $("#hide").hide(); }); return; } } WG.run_hook(data.type, data); ws_on_message.apply(this, arguments); if (unsafeWindow.funny) { if (unsafeWindow.funny.API != null) { unsafeWindow.funny.API.onmessage(msg); } } }, }; //助手函数 var T = { //private _recmd: function (cmds) { if (cmds) { cmds = cmds instanceof Array ? cmds : cmds.split(';'); cmds.baoremove(0); cmds = cmds.join(";"); return cmds; } else { return ""; } }, recmd: function (idx, cmds) { for (let i = 0; i < idx + 1; i++) { cmds = T._recmd(cmds); } return cmds; }, findhook: undefined, _findItem: async function (itemname, callback) { console.log("finditem" + itemname); T.findhook = WG.add_hook("dialog", async function (data) { if (data.items) { for (let item of data.items) { if (item.name == itemname) { callback(item.id); WG.remove_hook(T.findhook); } } callback(""); } WG.remove_hook(T.findhook); }); WG.Send("pack"); }, //public pname: function (idx = 0, n, cmds) { T.findPlayerByName(idx, n, cmds); }, findPlayerByName: function (idx = 0, n, cmds) { cmds = T.recmd(idx - 1, cmds); if (cmds.indexOf(",") >= 0) { cmds = cmds.split(","); } else { cmds = cmds.split(";"); } let p = cmds[0].split("$")[0]; cmds = T.recmd(0, cmds); p = p.replaceAll("-", " "); if (p[p.length - 1] == " ") { p = p.substring(0, p.length - 1) } console.log("findPlayerByName" + n); for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf(n) >= 0) { WG.Send(p + " " + roomData[i].id); } } WG.SendCmd(cmds); }, findItem: async function (idx = 0, n, cmds) { cmds = T.recmd(idx - 1, cmds); if (cmds.indexOf(",") >= 0) { cmds = cmds.split(","); } else { cmds = cmds.split(";"); } let p = cmds[0].split(" ")[0]; cmds = T.recmd(0, cmds); console.log("finditem" + n); WG.Send("pack"); // console.log(packData) for (let item of packData) { if (item.name == n) { if (p == "fenjie" || p == "drop") { if (item.name.indexOf("★") >= 0) { messageAppend("高级物品 ,不分解"); continue; } } WG.SendCmd(p + " " + item.id); } } WG.SendCmd(cmds); }, wait: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); console.log("延时:" + n + "ms,延时触发:" + cmds); await WG.sleep(parseInt(n)); WG.SendCmd(cmds); }, batwait: async function (idx = 0, n, cmds) { if (G.in_fight) { cmds = T.recmd(idx, cmds); console.log("延时:" + n + "ms,延时触发:" + cmds); await WG.sleep(parseInt(n)); WG.SendCmd(cmds); } }, goyt: async function () { WG.SendCmd("jh fam 9 start;go enter;go up;") await WG.sleep(1000); var ltId = ""; for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf("疯癫的老头") >= 0) { ltId = roomData[i].id } } WG.SendCmd("ggdl " + ltId + ";go north;go north;go north;go north;$wait 250;go north;go north;look shi;tiao1 shi;tiao3 shi;$wait 250;tiao1 shi;tiao3 shi;tiao2 shi;go north;") }, gogzm: async function () { WG.SendCmd("jh fam 9 start;go enter;go up;") await WG.sleep(1000); var ltId = ""; for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf("疯癫的老头") >= 0) { ltId = roomData[i].id } } WG.SendCmd("ggdl " + ltId + ";go north;go north;go north;go north;$wait 250;go north;go north;$wait 250;look shi;tiao1 shi;tiao1 shi;tiao2 shi;$wait 250;jumpdown;") }, godddb: async function () { WG.SendCmd("jh fam 9 start;go enter;go up;") await WG.sleep(1000); var ltId = ""; for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf("疯癫的老头") >= 0) { ltId = roomData[i].id } } WG.SendCmd("ggdl " + ltId + ";go north;go north;go north;go north;$wait 250;go north;go down;") }, killall: async function (idx = 0, n = null, cmds) { cmds = T.recmd(idx, cmds); console.log("叫杀"); WG.kill_all(); await WG.sleep(100); WG.SendCmd(cmds); }, getall: async function (idx = 0, n = null, cmds) { cmds = T.recmd(idx, cmds); console.log("拾取"); WG.get_all(); await WG.sleep(100); WG.SendCmd(cmds); }, cleanall: async function (idx = 0, n = null, cmds) { cmds = T.recmd(idx, cmds); console.log("清包"); WG.clean_all(); await WG.sleep(100); WG.SendCmd(cmds); }, to: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.go(n); await WG.sleep(100); WG.SendCmd(cmds); }, eq: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); if (n == "0") { WG.uneqall(); } else { WG.eqhelper(n); } await WG.sleep(100); WG.SendCmd(cmds); }, eqskill: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); if (n == "0") { WG.uneqall(1); } else { WG.eqhelper(n, 1); } await WG.sleep(100); WG.SendCmd(cmds); }, eqdel: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.eqhelperdel(n); await WG.sleep(100); WG.SendCmd(cmds); }, zdwk: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.zdwk(); await WG.sleep(100); WG.SendCmd(cmds); }, rzdwk: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.zdwk("", false); await WG.sleep(100); WG.SendCmd(cmds); }, killhook: undefined, killw: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); var killid = ""; for (let i = 0; i < roomData.length; i++) { if (roomData[i].name && roomData[i].name.indexOf(n) >= 0) { killid = roomData[i].id; } } T.killhook = WG.add_hook('itemremove', function (data) { if (data.id == killid) { WG.SendCmd(cmds); WG.remove_hook(T.killhook); T.killhook = undefined; } }); WG.SendCmd("kill " + killid); }, eqhook: undefined, eqw: async function (idx = 0, n, cmds) { var pcmds = T.recmd(idx, cmds); if (n.indexOf("<") >= 0) { T._findItem(n, async function (id) { let p_itemid = id; let p_flag = true; if (p_itemid == "") { p_flag = false; WG.SendCmd(pcmds); return; } T.eqhook = WG.add_hook('dialog', function (data) { if (data.eq == 0 && data.id == p_itemid) { p_flag = false; WG.SendCmd(pcmds); WG.remove_hook(T.eqhook); T.eqhook = undefined; } }); while (p_flag) { WG.Send("pack"); WG.SendCmd('eq ' + p_itemid); await WG.sleep(1000); } }); } else { let p_itemid = n; let p_flag = true; if (p_itemid == "") { p_flag = false; WG.SendCmd(pcmds); return; } T.eqhook = WG.add_hook(['text', 'dialog'], function (data) { if (data.type == 'dialog') { if (data.eq == 0 && data.id == p_itemid) { p_flag = false; WG.SendCmd(pcmds); WG.remove_hook(T.eqhook); T.eqhook = undefined; } } if (data.type == 'text') { if (data.msg.indexOf("你要装备什么") >= 0) { p_flag = false; WG.SendCmd(pcmds); WG.remove_hook(T.eqhook); T.eqhook = undefined; } } }); while (p_flag) { WG.Send("pack"); WG.SendCmd('eq ' + p_itemid); await WG.sleep(1000); } } }, usezml: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); zml = GM_getValue(roleid + "_zml", zml); for (var zmlitem of zml) { if (zmlitem.name == n) { await WG.zmlfire(zmlitem); } } await WG.sleep(100); WG.SendCmd(cmds); }, waitpfm: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); let _flag = true; let pfmnum = 0; while (_flag) { if (!G.### && !G.cds.get(n)) { WG.Send("perform " + n); pfmnum++; if (G.cds.get(n) && _flag) { _flag = false; WG.SendCmd(cmds); } if (!G.in_fight && _flag) { _flag = false; WG.SendCmd(cmds); } if (pfmnum >= 1 && _flag) { _flag = false; WG.SendCmd(cmds); } } pfmnum++; await WG.sleep(350); } }, startjk: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); ztjk_item = GM_getValue(roleid + "_ztjk", ztjk_item); for (var item of ztjk_item) { if (item.name == n) { item.isactive = 1; GM_setValue(roleid + "_ztjk", ztjk_item); WG.ztjk_func(); messageAppend("已注入" + item.name, 0, 1); break; } } await WG.sleep(100); WG.SendCmd(cmds); }, stopjk: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); ztjk_item = GM_getValue(roleid + "_ztjk", ztjk_item); for (var item of ztjk_item) { if (item.name == n) { item.isactive = 0; GM_setValue(roleid + "_ztjk", ztjk_item); WG.ztjk_func(); messageAppend("已暂停" + item.name); break; } } await WG.sleep(100); WG.SendCmd(cmds); }, sm: async function (idx = 0, n = 0, cmds = '') { cmds = T.recmd(idx, cmds); WG.sm_button(); while ($('.sm_button').text().indexOf("停止") >= 0) { await WG.sleep(1000); } await WG.sleep(100); WG.SendCmd(cmds); }, daily: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); KEY.do_command("tasks"); messageAppend("执行请安.", 1); await WG.oneKeyQA(); WG.oneKeyDaily(); await WG.sleep(2000); while (WG.daily_hook != undefined) { await WG.sleep(1000); } WG.Send('tasks'); await WG.sleep(1000); WG.oneKeySD(); while (WG.sd_hook) { await WG.sleep(1000); } await WG.sleep(100); WG.SendCmd(cmds); }, xiyan: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.xiyan(); await WG.sleep(1000); while (WG.marryhy) { await WG.sleep(1000); } await WG.sleep(100); WG.SendCmd(cmds); }, yamen: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.go_yamen_task(); await WG.sleep(1000); while (WG.yamen_lister) { await WG.sleep(1000); } await WG.sleep(100); WG.SendCmd(cmds); }, wudao: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.wudao_auto(); await WG.sleep(100); WG.SendCmd(cmds); }, boss: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.kksBoss({ content: "听说xxx出现在逍遥派-青草坪一带。" }); await WG.sleep(1000); while (WG.ksboss) { await WG.sleep(1000); } await WG.sleep(100); WG.SendCmd(cmds); }, stoppfm: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); if (G.auto_preform) { G.auto_preform = false; messageAppend("<hio>自动施法</hio>关闭"); WG.auto_preform("stop"); } await WG.sleep(100); WG.SendCmd(cmds); }, startpfm: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); if (!G.auto_preform) { G.auto_preform = true; messageAppend("<hio>自动施法</hio>开启"); WG.auto_preform(); } await WG.sleep(100); WG.SendCmd(cmds); }, stopautopfm: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); var dellist = n.split(","); for (let p of dellist) { if (!WG.inArray(p, blackpfm)) { blackpfm.push(p); } } console.log("当前自动施法黑名单为:" + blackpfm); await WG.sleep(100); WG.SendCmd(cmds); }, startautopfm: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); let dellist = n.split(","); for (var i = 0; i < blackpfm.length; i++) { for (var item of dellist) { if (item == blackpfm[i]) { blackpfm.baoremove(i); } } } console.log("当前自动施法黑名单为:" + blackpfm); await WG.sleep(100); WG.SendCmd(cmds); }, store: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); await WG.sell_all(1, 0, 0); while (WG.packup_listener) { await WG.sleep(200); } await WG.sleep(100); WG.SendCmd(cmds); }, fenjie: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); await WG.sell_all(0, 1, 0); while (WG.packup_listener) { await WG.sleep(200); } await WG.sleep(100); WG.SendCmd(cmds); }, drop: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); await WG.sell_all(0, 0, 1); while (WG.packup_listener) { await WG.sleep(200); } await WG.sleep(100); WG.SendCmd(cmds); }, sellall: async function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); await WG.sell_all(1, 1, 1); while (WG.packup_listener) { await WG.sleep(200); } await WG.sleep(100); WG.SendCmd(cmds); }, callcontextMenu: function (idx = 0, n, cmds) { $('.container').contextMenu({ x: 1, y: 1 }) }, stopallauto: function (idx = 0, n, cmds) { cmds = T.recmd(idx, cmds); WG.stopAllAuto(); messageAppend("暂停自动喜宴及自动BOSS", 0, 1); WG.SendCmd(cmds); }, startallauto: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.reSetAllAuto(); messageAppend("恢复自动喜宴及自动BOSS", 0, 1); WG.SendCmd(cmds); }, roll: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); if (n == 1) { WG.SendCmd("pty " + Math.random() * 100); } else if (n == 2) { WG.SendCmd("chat " + Math.random() * 100); } else if (n == 3) { WG.SendCmd("say " + Math.random() * 100); } WG.SendCmd(cmds); }, addstore: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.addstore(n); WG.SendCmd(cmds); }, addlock: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.addlock(n); WG.SendCmd(cmds); }, dellock: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.dellock(n); WG.SendCmd(cmds); }, tnbuy: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.tnBuy(); WG.SendCmd(cmds); }, zxbuy: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.zxBuy(); WG.SendCmd(cmds); }, atlx: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.selectLowKongfu(parseInt(n)); WG.SendCmd(cmds); }, addfenjieid: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.addfenjieid(n); WG.SendCmd(cmds); }, adddrop: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.adddrop(n); WG.SendCmd(cmds); }, addzxbuy: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.addzxbuy(n); WG.SendCmd(cmds); }, clsSakada: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.clean_dps(); WG.SendCmd(cmds); }, cls: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); messageClear(); WG.SendCmd(cmds); }, syso: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); messageAppend(n); WG.SendCmd(cmds); }, stop: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); WG.timer_close(); WG.SendCmd(cmds); }, tts: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); FakerTTS.playtts(n); WG.SendCmd(cmds); }, beep: async function (idx, n, cmds) { cmds = T.recmd(idx, cmds); Beep(); WG.SendCmd(cmds); }, music: function (idx, n, cmds) { cmds = T.recmd(idx, cmds); var music = new MusicBox({ loop: false, // 循环播放 musicText: '6 - - 5 - 3 2 - 1 - - - 3 - - 2 1 - ·6 ·5 - - - ·5 - ·6 - ·5 - ·6 - 1 - - 2 - 3 5 6 - - 3 2 1 - 2', // 绿色 autoplay: 6, // 自动弹奏速度 type: 'triangle', // 音色类型 sine|square|triangle|sawtooth duration: 2 // 键音延长时间 }); WG.SendCmd(cmds); } }; var ProConsole = { init: function () { //判断 if (!L.isMobile()) { layer.open({ type: 1, title: "运行命令", shade: false, offset: "rb", zIndex: 96####, success: function (layero, index) { $(".runtesta").show(); }, content: $(".runtest"), end: function () { $(".runtesta").off("click"); $(".runtesta").hide(); } }); var lastrun = GM_getValue("_lastrun", ""); if (lastrun != "") { $("#testmain").val(lastrun); } $(".runtesta").off("click"); $(".runtesta").on('click', function () { if ($('#testmain').val().split("\n")[0].indexOf("//") >= 0) { if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform($('#testmain').val()); } } else if ($('#testmain').val().split("\n")[0].indexOf("#js") >= 0) { var jscode = $('#testmain').val().split("\n"); jscode.baoremove(0) eval(jscode.join("")); } else { WG.SendCmd($('#testmain').val()); } }); $("#testmain").focusout(function () { GM_setValue("_lastrun", $('#testmain').val()); }) } else { layer.prompt({ title: '请输入...', formType: 2 }, function (text, index) { layer.close(index); if (text != null) { if (text.split("\n")[0].indexOf("//") >= 0) { if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(text); } } else if (text.split("\n")[0].indexOf("#js") >= 0) { var jscode = text.split("\n"); jscode.baoremove(0) eval(jscode.join("")); } else { WG.SendCmd(text); } } }); } }, close: function () { layer.close(); } } //UI var UI = { codeInput: `<div class="runtest layui-layer-wrap" style="display: none;"> <textarea class="site-demo-text" id="testmain" data-enpassusermodified="yes"> //<-第一行输入双斜杠即可运行流程命令 ,第一行输入#js 即可运行JS\n </textarea> <a class="layui-btn layui-btn-normal runtesta" style="position:absolute;right:20px;bottom:20px" >立即运行</a> </div>`, zdybtnui: function () { let ui = `<div class='WG_button'>`; let keyitem = ["Q", "W", "E", "R", "T", "Y"]; let i = 0; for (let item of zdy_btnlist) { ui = ui + ` <span class='zdy-item' id = 'keyin${keyitem[i]}'>${item.name}(${keyitem[i]})</span>`; i = i + 1; } return ui + `<span class="zdy-item auto_perform" style="float:right;"> 自动攻击 </span> <span class="zdy-item cmd_echo" style="float:right;">代码</span> </div>`; }, btnui: function () { return `<div class='WG_button'><span class='zdy-item sm_button'>师门(Q)</span> <span class='zdy-item go_yamen_task'>追捕(W)</span> <span class='zdy-item kill_all'>击杀(E)</span> <span class='zdy-item get_all'>拾取(R)</span> <span class='zdy-item sell_all'>清包(T)</span> <span class='zdy-item zdwk'>挖矿(Y)</span> <span class="zdy-item auto_perform" style="float:right;"> 自动攻击 </span> <span class="zdy-item cmd_echo" style="float:right;">代码</span> </div>` }, wgui: function () { let p; if (inzdy_btn) { p = UI.zdybtnui(); } else { p = UI.btnui(); } return ` <div class='WG_log'> <pre></pre> </div>` + p; }, zdyBtnsetui: function () { let ui = ''; let keyitem = ["Q", "W", "E", "R", "T", "Y"]; for (let item of keyitem) { ui = ui + `<div class="setting-item setting-item2 "> <div style='width:10%'>${item}:</div><span>名称:<input style='width:20%' id='name${item}' /></span> <span style='margin-left:5px'>命令:<input id='send${item}'/></span> </div>` } ui = ui + ` <div class="setting-item" > <div class="item-commands"><span class="savebtn">保存自定义按钮设置</span></div> </div> `; return ui; }, html_lninput: function (prop, title) { return ` <div class="setting-item" > <span><label for="${prop}">${title}</label><input id="${prop}" name="${prop}" type="text" style="width:80px" value> </span> </div> `; }, html_input: function (prop, title) { return ` <div class="setting-item" > <span><label for="${prop}"> ${title}</label> </span> </div> <textarea class="settingbox hide zdy-box" id="${prop}" name="${prop}" style="display: inline-block;"> </textarea> `; }, html_switch: function (prop, title, pfor) { return `<div class="setting-item setting-item2 " for="${pfor}" style='display: inline-block;'> <span class="title"> ${title}</span> <span class="switch2" id="${prop}" > <span class="switch-button"></span> <span class="switch-text">关</span> </span> </div> `; }, switchClick: function (e) { let t = $(this), s = t.parent().attr("for"); if (t.is(".on")) { t.removeClass("on"); t.find(".switch-text").html("关") } else { t.addClass("on"); t.find(".switch-text").html("开"); } }, syssetting: function () { return `<h3>插件</h3> <div class="setting-item zdy_dialog" > 有空的话请点个star,您的支持是我最大的动力<a href="https://github.com/knva/wsmud_plugins" target="_blank">https://github.com/knva/wsmud_plugins</a> </div> `+ UI.html_lninput("welcome", "欢迎语句: ") + UI.html_lninput("die_str", "死亡提示: ") + ` <div class="setting-item"> <span> <label for="color_select"> 界面配色: </label><select id="color_select" style="width:80px"> <option value="normal"> 原版 </option> <option value="flat"> flat模式 </option> <option value="access"> 色若模式</option> </select> *此功能刷新后生效 </span></div> <div class="setting-item" > <span><label for="family">门派选择:</label><select id="family" style="width:80px"> <option value="#当">#当</option> <option value="华山">华山</option> <option value="少林">少林</option> <option value="峨眉">峨眉</option> <option value="逍遥">逍遥</option> <option value="丐帮">丐帮</option> <option value="#馆">#馆</option> <option value="杀手楼">杀手楼</option> </select> </span> </div>` + UI.html_switch('autorelogin', '自动重连: ', 'auto_relogin') + UI.html_switch('shieldswitch', '聊天频道屏蔽开关: ', 'shieldswitch') + UI.html_switch('silence', '安静模式:', 'silence') + UI.html_switch('dpssakada', '战斗统计:', 'dpssakada') + UI.html_switch('funnycalc', 'funny计算:', 'funnycalc') + `<h3>屏蔽选项</h3>` + UI.html_lninput("shield", "屏蔽人物名(用半角逗号分隔):") + UI.html_lninput("shieldkey", "屏蔽关键字(用半角逗号分隔):") + `<h3>师门任务配置</h3>` + UI.html_switch('sm_loser', '师门自动放弃:', "sm_loser") + UI.html_switch('sm_any', '师门任务提交稀有:', "sm_any") + UI.html_switch('sm_price', '师门自动牌子:', 'sm_price') + UI.html_switch('sm_getstore', '师门自动仓库取:', "sm_getstore") + `<h3>自命令配置</h3> <div class="setting-item" > <span> <label for="zmlshowsetting"> 自命令显示位置: </label><select id="zmlshowsetting" style="width:80px"> <option value="0"> 物品栏 </option> <option value="1"> 技能栏下方 </option> </select> </span></div> ` + `<h3>#道塔配置</h3>` + UI.html_lninput("wudao_pfm", "#道释放技能(用半角逗号分隔):") + `<h3>杂项配置</h3>` + UI.html_switch('autorewardgoto', '开启转发路径:', 'auto_rewardgoto') + UI.html_switch('busyinfo', '显示昏迷信息:', 'busy_info') + UI.html_switch('saveAddr', '使用豪宅仓库:', "saveAddr") + UI.html_switch('getitemShow', '显示获得物品:', 'getitemShow') + UI.html_input("statehml", "当你各种状态中断后,自动以下操作(部分地点不执行):") + UI.html_input("backimageurl", "背景图片url(建议使用1920*1080分辨率图片):") + UI.html_input("loginhml", "登录后执行命令:") + ` <div class="setting-item"> <span> <label for="bagFull"> 背包已满提示: </label><select id="bagFull" style="width:80px"> <option value="0"> 文字提醒 </option> <option value="1"> 提示音 </option> <option value="2"> 语音提醒 </option> </select> </span></div>` + `<h3>推送配置</h3>` + UI.html_switch('pushSwitch', '远程通知推送开关(使用@push推送通知,语法参考@print):', 'pushSwitch') + ` <div class="setting-item"> <span> <label for="pushType"> 通知推送方式(使用方法加群看): </label><select id="pushType" style="width:80px"> <option value="0"> Server酱(限32字符) </option> <option value="1"> Bark iOS </option> <option value="2"> PushPlus.plus(支持html标签) </option> <option value="3"> 飞书机器人 </option> <option value="4"> Qmsg私聊 </option> <option value="5"> Qmsg群聊 </option> </select> </span></div> ` + UI.html_lninput("pushToken", "推送方式对应的Token或Key(只要Key不要填整个网址):") //+ UI.html_lninput("pushUrl", "推演方式对应的推送网址(末尾不要加斜杠/):") + `<h3>自动BOSS配置</h3>` + UI.html_switch('marry_kiss', '自动喜宴:', "automarry") + UI.html_switch('ks_Boss', '自动传到boss:', "autoKsBoss") + UI.html_lninput("auto_eq", "BOSS击杀时自动换装:") + UI.html_lninput("ks_pfm", "BOSS叫杀延时(ms): ") + UI.html_lninput("ks_wait", "BOSS击杀等待延迟(s): ") + UI.html_input("auto_command", "输入喜宴及boss后命令(留空为自动挖矿或修炼):") + UI.html_input("blacklist", "输入黑名单boss名称(黑名单boss不会去打,中文,用半角逗号分隔):") + `<h3>自动施法配置</h3>` + UI.html_input("unauto_pfm", "自动施法黑名单(填技能代码,使用半角逗号分隔):") + UI.html_switch('autopfmswitch', '自动施法开关:', 'auto_pfmswitch') + UI.html_switch('autopfmmode', 'AI施法模式:', 'auto_pfm_mode') + `<h3>仓库存储配置</h3>` + UI.html_switch('autoupdateStore', '自动更新仓库数据:', 'auto_updateStore') + UI.html_input("store_info", "自动存储的物品名称(自动获得的物品信息,随仓库内容更新):") + UI.html_input("store_info2", "手动添加的自动存仓物品信息(不会随仓库内容更新,使用半角逗号分隔):") + UI.html_input("lock_info", "已锁物品名称(锁定物品不会自动丢弃,使用半角逗号分隔):") + UI.html_input("store_drop_info", "输入自动丢弃的物品名称(使用半角逗号分隔):") + UI.html_input("store_fenjie_info", "输入自动分解的物品名称(使用半角逗号分隔):") + UI.html_input("autobuy", "自动当铺购买清单:(用半角逗号分隔)") + UI.html_input("autoSkillPaperSell", "自动回收残页清单:(用半角逗号分隔)") + `<h3>技能自定义</h3>` + UI.html_switch('zdyskillsswitch', '自定义技能顺序开关:', 'zdyskills') + UI.html_input("zdyskilllist", "自定义技能顺序json数组:") + ` <div class="setting-item" ><div class="item-commands"><span class="clear_skillJson">清空技能json数组</span></div></div>` + ` <div class="setting-item" > <div class="item-commands"><span class="update_id_all">初始化ID</span> <span class="clean_id_all">清空商品ID配置</span></div> </div> <div class="setting-item" > <div class="item-commands"><span class="update_store">更新存仓数据(覆盖)</span><span class="clean_dps">重置伤害统计</span></div> </div> <div class="setting-item" > <div class="item-commands"><span class="backup_btn">备份到云</span><span class="load_btn">加载云配置</span></div> </div> <h3>自定义按钮</h3>` + UI.zdyBtnsetui() + ` <h3>系统</h3> ` }, skillsPanel: `<div class="item-commands" style="text-align:center" id='skillsPanelUI'> <div style="margin-top:0.5em"> <div style="width:8em;float:left;text-align:left;padding:0px 0px 0px 2em;height:1.23em" id="wsmud_raid_left" @click='show'><wht>{{role}}</wht></div> <div style="width:calc(100% - 16em);float:left;height:1.23em"><hig>套装列表</hig></div> <div style="width:8em;float:left;text-align:right;padding:0px 2em 0px 0px;height:1.23em" id="wsmud_raid_right"> <select style="width:80px" id="eqskills-opts" @change="eqskills_opts_change(eqskills_id)" v-model="eqskills_id"> <option value="none">选择操作</option> <option value="save">新建套装</option> <option value="covereq">覆盖套装</option> <option value="copyeq">复制命令</option> <option value="delete">删除套装</option> <option value="uneqall">脱光装备</option> </select></div> </div> <br><br> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in eqlistdel" @click='deleq(index)' style="width: 120px;"> <div class="eqsname" style="width: 100%;">删除{{index}}</div> </span> </div> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in eqlist" @click='eq(index)' style="width: 120px;"> <div class="eqsname" style="width:100%;">装备套装:{{index}}</div> </span> </div> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in covereqlist" @click='covereq(index)' style="width: 120px;"> <div class="eqsname" style="width:100%;">覆盖套装:{{index}}</div> </span> </div> <br> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in eqlist" @click='eqs(index)' style="width: 120px;"> <div class="eqsname" style="width: 100%;">装备技能:{{index}}</div> </span> </div> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in cpeqlist" @click='copyeq(index)' style="width: 120px;"> <div class="eqsname" style="width:100%;">复制装备套装:{{index}}</div> </span> </div> <br> <div class="item-commands"> <span class="zdy-item" v-for="(item, index) in cpeqlist" @click='copyeqs(index)' style="width: 120px;"> <div class="eqsname" style="width: 100%;">复制装备技能:{{index}}</div> </span> </div> <br> </div> `, zmlsetting: `<div class='zdy_dialog' style='text-align:right;width:280px' id="zmldialog"> <div class="setting-item"><span><label for="zml_name"> 输入自定义命令名称:</label></span><span><input id="zml_name" style='width:80px' type="text" name="zml_name" value="" v-model="singnalzml.name"></span></div> <div class="setting-item"> <label for="zml_type"> 自命令类型: </label><select id="zml_type" style="width:80px" v-model="singnalzml.zmlType"> <option value="0"> 插件原生 </option> <option value="1"> Raidjs流程 </option> <option value="2"> JS原生 </option> </select> </div> <div class="setting-item"> <label for="zml_info"> 输入自定义命令(用半角分号(;)分隔):</label></div> <div class="setting-item"><textarea class="settingbox hide zdy-box" style="display: inline-block;" id='zml_info' v-model="singnalzml.zmlRun"></textarea></div> <div class="item-commands"><span class="getSharezml" @click="getShare"> 查询分享 </span> <span class="editadd" @click="add"> 保存 </span> <span class="editdel" @click="del"> 删除 </span> </div> <div class="item-commands" id="zml_show"> <span v-for="(item, index) in zmldata" @click="edit(item)"> 编辑{{item.name}} </span> <br /> <span v-for="(item, index) in zmldata" @click="showp(item)"> <label v-if="item.zmlShow == '1'">取消快速使用</label><label v-else>快速使用</label>{{item.name}} </span> <br /> <span v-for="(item, index) in zmldata" @click="share(item)"> 分享{{item.name}} </span> <br /> </div> </div> `, zmlandztjkui: `<div class='zdy_dialog' style='text-align:right;width:280px' id="zmlandztjk"> <div class="item-commands"> <span class="editzml" @click="zml"> 编辑自命令 </span> </div> <div class="item-commands"> <span class="editztjk" @click="ztjk"> 编辑自定义监控 </span> <div class="item-commands"> <span class="startzdjk" @click="startjk"> 注入所有监控 </span> <span class="stopzdjk" @click="stopjk"> 暂停所有监控 </span> </div> </div> <div class="item-commands" id="zml_show"> <span v-for="(item, index) in zmldata" @click="run(item)"> {{item.name}} </span> </div> </div>`, ztjksetting: `<div class='zdy_dialog' style='text-align:right;width:280px'> <div class="setting-item"> <label> 请打开插件首页,查看文档及例子,本人血量状态监控 请按如下规则输入关键字 90|90 这样监控的是hp 90% mp 90% 以下触发</label></div> <div class="setting-item"> <label for="ztjk_name"> 名称:</label><input id="ztjk_name" style='width:80px' type="text" name="ztjk_name" value=""></div> <div class="setting-item"><label for="ztjk_type"> 类型(type):</label><select style='width:80px' id="ztjk_type"> <option value="status"> 状态(status) </option> <option value="text"> 文本(text) </option> <option value="msg"> 聊天(msg) </option> <option value="die"> 死亡(die) </option> <option value="itemadd"> 人物刷新(itemadd) </option> <option value="room"> 地图名与房间人物(room) </option> <option value="dialog"> 背包监控(dialog) </option> <option value="combat"> 战斗状态(combat) </option> <option value="sc"> 血量状态(sc) </option> <option value="enapfm"> 技能监控(enapfm) </option> <option value="dispfm"> 技能监控(dispfm) </option> </select></div> <div class="setting-item"><span id='actionp' style='display:block'><label for="ztjk_action"> 动作(action):</label><input id="ztjk_action" style='width:80px' type="text" name="ztjk_action" value=""></span></div> <div class="setting-item"><span><label for="ztjk_keyword"> 关键字(使用半角 | 分割):</label><input id="ztjk_keyword" style='width:80px' type="text" name="ztjk_keyword" value=""></span></div> <div class="setting-item"><span><label for="ztjk_ishave"> 触发对象: </label><select style='width:80px' id="ztjk_ishave"> <option value="0"> 其他人 </option> <option value="1"> 本人 </option> <option value="2"> 仅NPC </option> </select></span></div> <div class="setting-item"> <span id='senduserp' style='display:block'><label for="ztjk_senduser"> MSG/其他人名称(使用半角 | 分割):</label><input id="ztjk_senduser" style="width:80px;" type="text" name="ztjk_senduser" value=""></span></div> <div class="setting-item"> <span style='display:block'><label> Buff层数:</label><input id="ztjk_maxcount" style="width:80px;" type="text" name="ztjk_maxcount" value=""></span></div> <div class="setting-item"> <span style='display:block'><label> 状态监控提示:</label><select style='width:80px' id="ztjk_istip"> <option value="1"> 提示 </option> <option value="0"> 不提示 </option> </select></span></div> <div class="setting-item"><span><label for="ztjk_send"> 输入自定义命令(用半角分号(;)分隔):</label></span></div> <div class="setting-item"> <textarea class="settingbox hide zdy-box" style="display: inline-block;" id='ztjk_send'></textarea></div> <div class="item-commands"><span class="ztjk_sharedfind"> 查询分享 </span> <span class="ztjk_editadd"> 保存 </span> <span class="ztjk_editdel"> 删除 </span></div> <div class="item-commands" id="ztjk_show"></div> <div class="item-commands" id="ztjk_set"></div> </div> `, jsquivue: ` <div class="JsqVueUI"> <div class="item-commands"> <span @click='qnjs_btn'>潜能计算</span> <span @click='lxjs_btn'>练习时间及潜能计算</span> <span @click='khjs_btn'>开花计算</span> <span @click='zcjs_btn'>自创等级计算</span> <span @click='getskilljson'>提取技能属性(可用于苏轻模拟器)</span> <span @click='autoAddLianxi'>自动将最低等级技能添加到离线练习</span> </div> <div class="item-commands"> <span @click='onekeydaily'>一键日常</span> <span @click='onekeypk'>自动比试</span> <span @click='onekeysansan'>导入白三三懒人包(依赖raid.js)</span> <span @click='onelddh'>来点动画(依赖raid.js)</span> </div> <div class="item-commands"> <span @click="onekeystore">存仓及贩卖</span> <span @click='onekeysell'>丢弃及贩卖</span> <span @click='onekeyfenjie'>分解及贩卖</span> </div> <div class="item-commands"> <span @click='updatestore'>更新仓库数据(覆盖)</span> <span @click='sortstore'>排序仓库</span> <span @click='sortbag'>排序背包</span> <span @click='dsrw'>定时任务</span> <span @click='cleandps'>清空伤害</span> <span @click='cleankksboss'>不再提示婚宴及boss传送信息</span> </div> <div class="item-commands"> <span @click='onekeyyaota'>一键妖塔</span> <span @click='onekeydelaytest'>延迟测试</span> <span @click='yuanshen'>原神</span> </div> </div>`, lxjsui: ` <div style="width:50%;float:left" class='StudyTimeCalc'> <div class="setting-item"> <span>练习时间计算器</span></div> <div class="setting-item">先天悟性:<input type="number" placeholder="先天悟性" style="width:50%" class="mui-input-speech" v-model=jsqsx.xtwx></div> <div class="setting-item">后天悟性:<input type="number" placeholder="后天悟性" style="width:50%" class="mui-input-speech" v-model=jsqsx.htwx></div> <div class="setting-item">练习效率:<input type="number" placeholder="练习效率" style="width:50%" class="mui-input-speech" v-model=jsqsx.lxxl></div> <div class="setting-item">初始等级:<input type="number" placeholder="初始等级" style="width:50%" class="mui-input-speech" v-model=jsqsx.clevel></div> <div class="setting-item"> 目标等级:<input type="number" placeholder="目标等级" style="width:50%" v-model=jsqsx.mlevel></div> <div class="setting-item">技能颜色: <select style="width:50%" v-model=jsqsx.color> <option value='0'>选择技能颜色</option> <option value='1' style="color: #c0c0c0;">白色</option> <option value='2' style="color:#00ff00;">绿色</option> <option value='3' style="color:#00ffff;">蓝色</option> <option value='4' style="color:#ffff00;">黄色</option> <option value='5' style="color:#912cee;">紫色</option> <option value='6' style="color: #ffa600;">橙色</option> <option value='7' style="color: #CC0000;">红色</option> </select></div> <div class="setting-item"> <div class="item-commands"><span @click="lxjscalc">计算</span></div> </div> </div>`, qnjsui: ` <div style="width:50%;float:left" class="QianNengCalc"> <div class="setting-item"> <span>潜能计算器</span></div> <div class="setting-item">初始等级:<input type="number" placeholder="初始等级" style="width:50%" class="mui-input-speech" v-model='qnsx.c'> </div> <div class="setting-item"> 目标等级:<input type="number" v-model='qnsx.m' placeholder="目标等级" style="width:50%"> </div> <div class="setting-item"> 技能颜色:<select id="se" style="width:50%" v-model='qnsx.color'> <option value='0'>选择技能颜色</option> <option value='1' style="color: #c0c0c0;">白色</option> <option value='2' style="color:#00ff00;">绿色</option> <option value='3' style="color:#00ffff;">蓝色</option> <option value='4' style="color:#ffff00;">黄色</option> <option value='5' style="color:#912cee;">紫色</option> <option value='6' style="color: #ffa600;">橙色</option> </select> </div> <div class="setting-item"> <div class="item-commands"><span @click="qnjscalc">计算</span></div> </div> </div>`, khjsui: `<div style="width:50%;float:left" class="KaihuaCalc"> <div class="setting-item"><span>开花计算器</span></div> <div class="setting-item"> 当前内力:<input type="number" placeholder="当前内力" style="width:50%" class="mui-input-speech" v-model="khsx.nl"></div> <div class="setting-item"> 先天根骨:<input type="number" placeholder="先天根骨" style="width:50%" v-model="khsx.xg"></div> <div class="setting-item"> 后天根骨:<input type="number" placeholder="后天根骨" style="width:50%" v-model="khsx.hg"></div> <div class="setting-item"> <div class="item-commands"><span @click="khjscalc" >计算</span></div></div> <div class="setting-item"> <label>人花分值:5000 地花分值:6500 天花分值:8000</label></div> </div>`, zcjsui: `<div style="width:50%;float:left" class="ZiChuangCalc"> <div class="setting-item"><span>自创等级计算器</span></div> <div class="setting-item"> 自创等级:<input type="number" placeholder="自创等级" style="width:50%" class="mui-input-speech" v-model="zcsx.level"></div> <div class="setting-item"> 目标属性百分比:<input type="number" placeholder="目标属性百分比" style="width:50%" v-model="zcsx.percentage"></div> <div class="setting-item"> <div class="item-commands"><span @click="zcjscalc" >计算</span></div></div> </div>`, lyui: `<div class='zdy_dialog' id="LianYao" style='text-align:right;width:280px'> 有空的话请点个star,您的支持是我最大的动力 <a target="_blank" href="https://github.com/knva/wsmud_plugins">https://github.com/knva/wsmud_plugins</a> 药方链接:<a target="_blank" href="https://emeisuqing.github.io/wsmud.old/yaofang/">https://emeisuqing.github.io/wsmud.old/yaofang/</a> <div class="setting-item"> <span> <label for="medicine_level"> 级别选择: </label><select style='width:80px' id="medicine_level" v-model="level"> <option value="1">绿色</option> <option value="2">蓝色</option> <option value="3">黄色</option> <option value="4">紫色</option> <option value="5">橙色</option> <option value="6">红色</option> </select></span></div> <div class="setting-item"> 数量:<span><input id="mednum" v-model="num" style="width:80px;" type="number" name="mednum" value="1"> </span></div> <div class="setting-item"> <span><label for="medicint_info"> 输入使用的顺序(使用半角逗号分隔,多配方使用 | 分割):</label></span></div> <div class="setting-item"><textarea v-model="info" class="settingbox hide zdy-box" style="display: inline-block;" id='medicint_info'>石楠叶,金银花,金银花,金银花,当归</textarea></div> <div class="item-commands"> <span class="startDev" @click="startDev"> 开始 </span><span class="stopDev" @click="stopDev"> 停止 </span> </div> </div>`, timeoutui: `<div class='zdy_dialog' style='text-align:right;width:280px'> 注意,可以留空的时或者分,这样就是每分钟/小时 的x秒触发任务,秒为必填项目 <div class="setting-item"> <span>任务名:<input type="text" id="questname" placeholder="任务名" style="width:50%"></span></div> <div class="setting-item"> <label for = "rtype"> 运行次数 </label><select style='width:80px' id="rtype"></div> <option value="1">一次</option> <option value="2">每天</option> </select></span></div> <div class="setting-item"> <span>时:<input type="number" id="ht" placeholder="时" style="width:50%"></span></div> <div class="setting-item"> <span>分:<input type="number" id="mt" placeholder="分" style="width:50%"></span></div> <div class="setting-item"> <span>秒:<input type="number" id="st" placeholder="秒" style="width:50%"></span></div> <div class="setting-item"> <span><label for="zml_info"> 输入自定义命令(用半角分号(;)分隔):</label></span></div> <div class="setting-item"> <textarea class = "settingbox hide zdy-box"style = "display: inline-block;"id = 'zml_info'></textarea></div> <div class = "item-commands"> <span class = "startQuest"> 开始 </span><span class = "removeQuest"> 删除 </span> </div> <div class='questlist item-commands'></div> </div>`, toui: [ `<div class='item-commands'><span cmd = "$to 扬州城-衙门正厅" > 衙门 </span> <span cmd = "$to 扬州城-当铺" > 当铺 </span> <span cmd = "$to 扬州城-醉仙楼" > 醉仙 </span> <span cmd = "$to 扬州城-杂货铺" > 杂货 </span> <span cmd = "$to 扬州城-打铁铺" > 打铁 </span> <span cmd = "$to 扬州城-钱庄" > 钱庄 </span> <span cmd = "$to 扬州城-药铺" > 药铺 </span> <span cmd = "$to 扬州城-扬州#馆" > #馆 </span> <span cmd = "$to 扬州城-镖局正厅" > 镖局 </span> <span cmd = "$to 住房" > 住房 </span> <span cmd = "$to 扬州城-#庙" > #庙 </span> <span cmd = "$to 帮会-大院" > 帮派 </span> <span cmd = "$to 扬州城-赌场" > 赌场 </span> <span cmd = "$to 扬州城-有间客栈" > 客栈 </span> <span cmd = "$to 扬州城-擂台" > 擂台 </span> <span cmd = "$to 扬州城-矿山" > 矿山 </span></div>`, `<div class='item-commands'><span cmd = "$to #当派-后山小院" >掌门</span> <span cmd = "$to #当派-石阶" >后勤</span> <span cmd = "$to #当派-三清殿" >三清殿</span></div>`, `<div class='item-commands'><span cmd = "$to 少林派-方丈楼" >掌门</span> <span cmd = "$to 少林派-山门殿" >后勤</span> <span cmd = "$to 少林派-天王殿" >天王殿</span></div>`, `<div class='item-commands'><span cmd = "$to 华山派-客厅" >掌门</span> <span cmd = "$to 华山派-练#场" >后勤</span> <span cmd = "$to 华山派-落雁峰" >落雁峰</span> <span cmd = "$to 华山派-林间小屋" >封不平</span></div>`, `<div class='item-commands'><span cmd = "$to 峨眉派-清修洞" >掌门</span> <span cmd = "$to 峨眉派-走廊" >后勤</span> <span cmd = "$to 峨眉派-小屋" >周芷若</span> <span cmd = "$to 峨眉派-大殿" >静心</span></div>`, `<div class='item-commands'><span cmd = "$to 逍遥派-地下石室" >掌门</span> <span cmd = "$to 逍遥派-林间小道" >后勤</span> <span cmd = "$to 逍遥派-木屋" >薛慕华</span> <span cmd = "$to 逍遥派-练功房" >木桩</span></div>`, `<div class='item-commands'><span cmd = "$to 丐帮-林间小屋" >掌门</span> <span cmd = "$to 丐帮-暗道;go east;" >后勤</span> <span cmd = "$to 丐帮-土地庙" >土地庙</span></div>`, `<div class='item-commands'><span cmd = "$to 杀手楼-书房" >掌门</span> <span cmd = "$to 杀手楼-休息室;" >后勤</span></div>`, `<div class='item-commands'><span cmd = "@call 自动襄阳" >自动襄阳</span></div>`, `<div class='item-commands'><span cmd = "@call 自动#道塔" >自动#道塔</span> <span cmd = "$goyt">妖塔</span> <span cmd = "$gogzm">古宗门</span> <span cmd = "$godddb">大殿底部</span></div>` ], fbui: function (name, mulit, diffi) { let ui = `<div class='item-commands'>`; if (unsafeWindow && unsafeWindow.ToRaid) { if (ToRaid.existAutoDungeon(`${name} 0`)) { ui = ui + `<span cmd = "@fb ${name} 0" >自动副本-${name}</span>`; } if (diffi) { if (ToRaid.existAutoDungeon(`${name} 1`)) { ui += `<span cmd = "@fb ${name} 1" >自动副本-${name}-困难</span>`; } } if (mulit) { if (ToRaid.existAutoDungeon(`${name} 2`)) { ui += `<span cmd = "@fb ${name} 2" >自动副本-${name}-组队</span>`; } } } else { ui += `未安装Raid.js插件`; } if (ui == `<div class='item-commands'>`) { return `<div>暂无自动副本脚本,欢迎共享。可以到三三仓库寻找更多脚本。</div>` } else { return ui + `</div>`; } }, itemui: function (itemname) { itemname = itemname.toLowerCase(); let ui = `<div class="item-commands "> <span class = "addstore" cmd='$addstore ${itemname}'> 添加到存仓 </span>`; if (lock_list.indexOf(itemname) >= 0) { ui = ui + `<span class = "dellock" cmd='$dellock ${itemname}'> 移除物品锁 </span>`; } else { ui = ui + `<span class = "addlock" cmd='$addlock ${itemname}'> 添加物品锁 </span>`; } if (itemname.indexOf("★") >= 0 || itemname.indexOf("☆") >= 0 || itemname.indexOf("hio") >= 0 || itemname.indexOf("hir") >= 0 || itemname.indexOf("ord") >= 0) { ui = ui + `</div>`; } else { if (itemname.indexOf("残页") >= 0 && itemname != "#道残页") { ui = ui + `<span class = "addzxbuy" cmd='$addzxbuy ${itemname}'> 添加到回收 </span>`; } else { ui = ui + `<span class = "addfenjieid" cmd='$addfenjieid ${itemname}'> 添加到分解 </span>`; } if (lock_list.indexOf(itemname) == -1) { ui = ui + `<span class = "adddrop" cmd='$adddrop ${itemname}'> 添加到丢弃 </span>`; } ui = ui + `</div>`; } return ui; }, } //全局变量 var G = { id: undefined, state: undefined, room_name: undefined, family: undefined, items: new Map(), stat_boss_success: 0, stat_boss_find: 0, stat_xiyan_success: 0, stat_xiyan_find: 0, cds: new Map(), in_fight: false, fight_id: "", auto_preform: false, auto_pfm_mode: false, can_auto: false, level: undefined, getitemShow: undefined, wk_listener: undefined, status: new Map(), score: undefined, party: '', yaoyuan: 0, yaotaFlag: false, yaotaCount: 0, jy: 0, qn: 0, selfStatus: [], wsdelaySetTime: undefined, wsdelaySetCount: undefined, wsdelay: undefined, enable_skills: [{ type: "unarmed", name: "none" }, { type: "force", name: "none" }, { type: "parry", name: "none" }, { type: "dodge", name: "none" }, { type: "sword", name: "none" }, { type: "throwing", name: "none" }, { type: "blade", name: "none" }, { type: "whip", name: "none" }, { type: "club", name: "none" }, { type: "staff", name: "none" },], eqs: [], isGod: function () { if (G.level != null) { if (G.level.indexOf('#帝') >= 0 || G.level.indexOf('#神') >= 0 || G.level.indexOf('剑神') >= 0 || G.level.indexOf('刀皇') >= 0 || G.level.indexOf('兵主') >= 0 || G.level.indexOf('战神') >= 0) { return true } else { return false } } else { return false } }, cookie: undefined, connected: false }; //GlobalInit var GI = { ###Thread: null, init: function () { WG.add_hook("items", function (data) { WG.saveRoomstate(data); }); var sendStore = false; WG.add_hook(['dialog', 'text'], function (data) { if (data.type == "dialog") { if (WG.packup_listener == null && data.id != null && data.store != null) { if (sendStore) { WG.SendCmd("store") sendStore = false; } } var stores = data.stores; if (stores != null) { store_list = []; for (let store of stores) { store_list.push(store.name.toLowerCase()); } zdy_item_store = store_list.join(','); $('#store_info').val(zdy_item_store); GM_setValue(roleid + "_zdy_item_store", zdy_item_store); store_list = store_list.concat(zdy_item_store2.split(",")); } } else { auto_updateStore = GM_getValue(roleid + "_auto_updateStore", auto_updateStore); if (WG.sort_hook == null && auto_updateStore == "开" && data.msg.indexOf("书架") < 0 && (/^你把(.+)存入仓库。$/.test(data.msg) || /^你从仓库里取出(.+)。$/.test(data.msg))) { sendStore = true; } } }); WG.add_hook("dialog", function (data) { if (data.dialog == "pack" && data.items != undefined) { packData = data.items; eqData = data.eqs; G.eqs = data.eqs } if (data.dialog == "pack" && data.uneq != undefined) { G.eqs[data.uneq] = null; } if (data.dialog == "pack" && data.eq != undefined) { G.eqs[data.eq] = { id: data.id, name: "" }; } if (data.dialog == "skills") { if (data.enable != null && zdyskills == "开") { zdyskilllist == ""; messageAppend("检测到更换技能,请刷新重新获取技能数据!"); zdyskills = "关"; GM_setValue(roleid + "_zdyskilllist", ""); GM_setValue(roleid + "_zdyskills", zdyskills); } if (data.items) { for (let item of data.items) { if (item.name.indexOf("基本") >= 0) { if (item.enable_skill) { for (let eitem of G.enable_skills) { if (eitem.type == item.id) { eitem.name = item.enable_skill break; } } } else { for (let eitem of G.enable_skills) { if (eitem.type == item.id) { eitem.name = 'none' break; } } // G.enable_skills.push({ name: 'none', type: item.id }) } } } } if (data.enable != undefined) { for (let item of G.enable_skills) { if (item.type == data.id) { item.name = data.enable break; } } } } if (data.dialog == 'party') { G.party = data.name; } }); WG.add_hook(["status", "login", "exits", "room", "items", "itemadd", "itemremove", "sc", "text", "state", "msg", "perform", "clearDistime", "dispfm", "combat", "die"], function (data) { switch (data.type) { case "login": G.id = data.id; G.connected = true; WG.online = true; break; case "exits": G.exits = new Map(); if (data.items["north"]) { G.exits.set("north", { exits: data.items["north"] }); } if (data.items["south"]) { G.exits.set("south", { exits: data.items["south"] }); } if (data.items["east"]) { G.exits.set("east", { exits: data.items["east"] }); } if (data.items["west"]) { G.exits.set("west", { exits: data.items["west"] }); } if (data.items["northup"]) { G.exits.set("northup", { exits: data.items["northup"] }); } if (data.items["southup"]) { G.exits.set("southup", { exits: data.items["southup"] }); } if (data.items["eastup"]) { G.exits.set("eastup", { exits: data.items["eastup"] }); } if (data.items["westup"]) { G.exits.set("westup", { exits: data.items["westup"] }); } if (data.items["northdown"]) { G.exits.set("northdown", { exits: data.items["northdown"] }); } if (data.items["southdown"]) { G.exits.set("southdown", { exits: data.items["southdown"] }); } if (data.items["eastdown"]) { G.exits.set("eastdown", { exits: data.items["eastdown"] }); } if (data.items["westdown"]) { G.exits.set("westdown", { exits: data.items["westdown"] }); } if (data.items["up"]) { G.exits.set("up", { exits: data.items["up"] }); } if (data.items["down"]) { G.exits.set("down", { exits: data.items["down"] }); } if (data.items["enter"]) { G.exits.set("enter", { exits: data.items["enter"] }); } if (data.items["out"]) { G.exits.set("out", { exits: data.items["out"] }); } break; case "room": let tmp = data.path.split("/"); G.map = tmp[0]; G.room = tmp[1]; if (G.map == 'home' || G.room == 'kuang') G.can_auto = true; else G.can_auto = false; G.room_name = data.name; //强制结束pfm if (G.in_fight) { G.in_fight = false; WG.auto_preform("stop"); WG.clean_dps(); } break; case "items": G.items = new Map(); for (var i = 0; i < data.items.length; i++) { let item = data.items[i]; if (item.id) { if (item.id == G.id && item.status != null) { G.selfStatus = [] for (var x = 0; x < item.status.length; x++) { G.selfStatus.push(item.status[x].sid) } } let n = $.trim($('<body>' + item.name + '</body>').text()); let i = n.lastIndexOf(' '); let j = n.lastIndexOf('<'); let t = ""; let s = ""; if (j >= 0) { s = n.substr(j + 1, 2); } if (i >= 0) { t = n.substr(0, i); n = n.substr(i + 1).replace(/<.*>/g, ''); } G.items.set(item.id, { name: n, title: t, state: s, max_hp: item.max_hp, max_mp: item.max_mp, hp: item.hp, mp: item.mp, p: item.p, damage: 0, status: item.status }); } } break; case "itemadd": if (data.id) { let n = $.trim($('<body>' + data.name + '</body>').text()); let i = n.lastIndexOf(' '); let j = n.lastIndexOf('<'); let t = ""; let s = ""; if (i >= 0) { t = n.substr(0, i); if (j >= 0) { s = n.substr(j + 1, 2); } n = n.substr(i + 1).replace(/<.*>/g, ''); } G.items.set(data.id, { name: n, title: t, state: s, max_hp: data.max_hp, max_mp: data.max_mp, hp: data.hp, mp: data.mp, p: data.p, damage: 0, status: data.status }); } break; case "itemremove": G.items.delete(data.id); break case "sc": let xitem = G.items.get(data.id); if (data.hp !== undefined) { xitem.hp = data.hp; if (data.id != G.id) { G.scid = data.id; //伤害统计需要 } // WG.showallhp(); } if (data.mp !== undefined) { xitem.mp = data.mp; } if (data.id != G.id) break; if (data.hp != null) G.hp = data.hp; if (data.max_hp != null) G.maxHp = data.max_hp; if (data.mp != null) G.mp = data.mp; if (data.max_mp != null) G.maxMp = data.max_mp; break case "perform": G.skills = data.skills; if (zdyskilllist == "") { zdyskilllist = JSON.stringify(data.skills); GM_setValue(roleid + "_zdyskilllist", zdyskilllist); } break case 'clearDistime': G.cds.forEach(function (v, k) { G.cds.set(k, false); }); case 'dispfm': if (data.id) { if (data.distime) { } G.cds.set(data.id, true); var _id = data.id; setTimeout(function () { G.cds.set(_id, false); //技能cd时间到 let pfmtimeTips = { data: JSON.stringify({ type: "enapfm", id: _id }) }; WG.receive_message(pfmtimeTips); }, data.distime); } if (data.rtime) { if (G.###) { clearTimeout(GI.###Thread); } G.### = true; GI.###Thread = setTimeout(function () { G.### = false; }, data.rtime); } break case "combat": if (data.start) { G.in_fight = true; battletime = new Date(); WG.auto_preform(); } if (data.end) { G.in_fight = false; WG.auto_preform("stop"); WG.clean_dps(); } break case "status": if (data.count != undefined) { G.status.set(data.id, { "sid": data.sid, "count": data.count }); } if (data.id == G.id) { if (data.action == 'add') { G.selfStatus.push(data.sid) if (data.duration) { setTimeout(() => { G.selfStatus.remove(data.sid); }, data.duration - (data.overtime || 0)); } } else if (data.action == 'remove') { let tmpbufflist = [] for (let i = 0; i < G.selfStatus.length; i++) { if (G.selfStatus[i] != data.sid) { tmpbufflist.push(G.selfStatus[i]) } } G.selfStatus = tmpbufflist; } else if (data.action == 'clear') { G.selfStatus = [] } } if (busy_info === '开') { if (data.id == G.id) { if (data.action == 'add') { if (data.sid == 'busy' || data.sid == 'faint') { var _id = data.id; messageAppend(`你被${data.name}了${data.duration / 1000}秒`, 2, 0); if (data.name == '绊字诀') return; } } } else { if (data.action == 'add') { if (data.sid == 'busy' || data.sid == 'faint' || data.sid == 'chidun' || data.sid == 'unarmed') { let npc = G.items.get(data.id) messageAppend(`${npc.name}被${data.name}了${data.duration / 1000}秒`, 2, 0); } } } } let item = G.items.get(data.id); if (item == null) { break; } if (data.action == 'add') { if (item.status == null) { item.status = []; } item.status.push({ sid: data.sid, name: data.name, duration: data.duration, overtime: 0 }); } else if (data.action == 'remove') { for (let i = 0; i < item.status.length; i++) { let s = item.status[i]; if (s.sid == data.sid) { item.status.splice(i, 1); break; } } } else if (data.action == 'clear') { for (let i = 0; i < item.status.length; i++) { item.status.splice(i, 1); } } break case "text": if (data.msg.indexOf("还没准备好,你还不能使用。") >= 0) { // let skillname = data.msg.replaceAll("还没准备好,你还不能使用。",""); // let skillid = G.skills.map(e => { return e['name'] == skillname ? e['id'] : '' }).join("") // if (skillid!=''){ // G.cds.set(skillid,true) // setTimeout(() => { // G.cds.set(skillid,false) // }, 1000); // } if (!G.###) { G.### = true; setTimeout(() => { G.### = false }, 500); } } if ((data.msg.indexOf("不要急") >= 0 || data.msg.indexOf("你现在手忙脚乱") >= 0 || data.msg.indexOf("你正在昏迷") >= 0 || data.msg.indexOf("你上个技能") >= 0) && G.auto_preform) { if (!G.###) { G.### = true; setTimeout(() => { G.### = false }, 500); } } break case 'die': // console.log('死亡,清除bf') G.selfStatus = [] if (die_str != '' && data.relive == null) { textShow(die_str) } break; default: break; } }); WG.add_hook("state", function (data) { console.dir(data); if (data.type == 'state' && data.state == undefined) { if (G.room_name.indexOf('副本') >= 0 || G.room_name.indexOf('襄阳') >= 0 || G.room_name.indexOf('矿山') >= 0 || G.room_name.indexOf('练功房') >= 0) { return; } statehml = GM_getValue(roleid + '_statehml', statehml); WG.SendCmd(statehml); } }); WG.add_hook("dialog", function (data) { //console.dir(data); if (data.dialog == "pack" && data.items != undefined && data.items.length >= 0) { //equip = for (var i = 0; i < data.items.length; i++) { if (data.items[i].name.indexOf("铁镐") >= 0) { equip["铁镐"] = data.items[i].id; //messageAppend("铁镐ID:" + data.items[i].id); } } for (var j = 0; j < data.eqs.length; j++) { if (data.eqs[j] != null && data.eqs[j].name.indexOf("铁镐") >= 0) { equip["铁镐"] = data.eqs[j].id; //messageAppend("铁镐ID:" + data.eqs[j].id); } } } else if (data.dialog == 'pack' && data.desc != undefined) { messageClear(); var itemname = data.desc.split("\n")[0]; var htmla = `<div class="item-commands "> <span class = "copyid" data-clipboard-target = ".target1" > ` + itemname + ":" + data.id + `复制到剪贴板 </span></div> `; messageAppend(htmla); $(".copyid").off("click"); $(".copyid").on('click', () => { var copydata = data.id; GM_setClipboard(copydata); messageAppend("复制成功"); }); } else if (data.dialog == 'pack' && data.name != null) { let item = { id: data.id, name: data.name, count: data.count } packData.push(item) } else if (data.dialog == 'list' && data.stores != null) { storeData = data.stores; // packData.push(item) } else if (data.dialog == 'list' && data.store != null) { let scan_store = true; let bag_remove_id = null; let store_remove_id = null; for (let i = 0; i < packData.length; i++) { let bag_item = packData[i]; if (bag_item == null) { continue; } if (bag_item.id == data.id) { // 道具存于背包时, 先判断数量 若数量为0 删除背包数据,若不为0 修改背包数据 scan_store = false; let over_num = bag_item.count - data.store; if (over_num == 0) { // packData.splice(i, 1) bag_remove_id = i; } else { packData[i].count = over_num; } break; } } if (scan_store) { // 如果不存在于背包时, 添加数据到背包,并判断仓库数量 for (let j = 0; j < storeData.length; j++) { let store_item = storeData[j]; if (store_item == null) { continue; } if (store_item.id == data.storeid) { let item = { id: data.id, name: store_item.name, count: Math.abs(data.store) } //更新背包 packData.push(item); break; } } } //计算仓库数据,若仓库存在该数据 修改其数量,若不存在 则添加,如果计算后数量为0 则删除该条数据 let found_store = true; for (let j = 0; j < storeData.length; j++) { let store_item = storeData[j]; if (store_item == null) { continue; } if (store_item.id == data.id) { found_store = false; let store_count = store_item.count + data.store; if (store_count === 0) { // storeData.splice(j, 1) store_remove_id = j; } else { storeData[j].count = store_count; } break; } } if (found_store) { for (let j = 0; j < packData.length; j++) { let store_item = packData[j]; if (store_item == null) { continue; } if (store_item.id === data.id) { let item = { id: data.stroeid, name: store_item.name, count: Math.abs(data.store) } //更新背包 storeData.push(item) break; } } } // 移除队列数据 if (bag_remove_id != null) { packData.splice(bag_remove_id, 1) } if (store_remove_id != null) { storeData.splice(store_remove_id, 1) } } else if (data.dialog == 'pack' && data.jldesc != undefined) { let jl = data.jldesc.match(/<(.*)>(.*)<\/.*><br\/>精炼<(hig|hic|hiy|hiz|hio|ord)>+(.*)\s</i); if (jl) { let l = jl[1]; let n = `<${l}>` + jl[2] + `</${l}>`; let j = parseInt(jl[4]); let c = 13 - j; //let cmd = `jinglian ${data.id} ok[${c}]` let cmd = []; for (let i = 0; i < c; i++) { cmd.push(`jinglian ${data.id} ok`); } $(".content-message pre").append( $(`<div class="item-commands"><span class="jinglian">精炼6星 => ${n}</span></div>`).click(() => WG.SendCmd(cmd)), ); AutoScroll(".content-message"); } } if (data.dialog == 'score') { console.log("score update"); if (!G.level && (data.level != null)) { G.level = data.level; console.log("欢迎" + G.level); } if (!G.family && (data.family != null)) { G.pfamily = data.family; G.family = data.family.replaceAll('派', ''); console.log(G.family); if (G.family == "无门无") { G.family = "#馆"; } family = G.family; G.score = data; GM_setValue(roleid + "_family", G.family); } else if (data.study_per != null) { G.score2 = data; } if (data.hp && data.mp && data.pot) { G.score = data; } } }); //师门id自动刷新 WG.add_hook(["dialog", "items"], (data) => { if (data.type == 'dialog') { if (data.selllist) { for (let item of data.selllist) { let realname = item.name.replace(/<[^>]+>/g, ""); //去尖括号 let _gtype = /<([^<>]*)>/.exec(item.name)[1] if (pgoods[realname] != undefined) { pgoods[realname].id = item.id; } if (pgoods[_gtype + realname] != undefined) { pgoods[_gtype + realname].id = item.id; } } GM_setValue("goods", pgoods); } } else if (data.type == 'items') { if (WG.at("扬州城-醉仙楼")) { for (let item of data.items) { if (item.name == '店小二') { npcs['店小二'] = item.id; GM_setValue("npcs", npcs); return; } } } else { for (let item of data.items) { if (item.name == '店小二') return; if (npcs[item.name] != undefined) { npcs[item.name] = item.id; GM_setValue("npcs", npcs); return; } } } } }); WG.add_hook("msg", function (data) { if (data.ch == "sys") { var automarry = GM_getValue(roleid + "_automarry", automarry); if (data.content.indexOf(",婚礼将在一分钟后开始。") >= 0) { console.dir(data); if (automarry == "开" && G.in_fight == false) { if (stopauto || WG.at('副本')) { let b = "<div class=\"item-commands\"><span id = 'onekeyjh'>参加喜宴</span></div>" messageClear(); messageAppend("<hiy>点击参加喜宴</hiy>"); messageAppend(b); $('#onekeyjh').on('click', function () { WG.xiyan(); }); } else { console.log("xiyan"); WG.xiyan(); } } else if (automarry == "关" || G.in_fight == true) { let b = "<div class=\"item-commands\"><span id = 'onekeyjh'>参加喜宴</span></div>" messageClear(); messageAppend("<hiy>点击参加喜宴,由于未开启自动传送,或者在战斗中,需要手动传送</hiy>"); messageAppend(b); $('#onekeyjh').on('click', function () { WG.xiyan(); }); } } } else if (data.ch == "rumor") { if (data.content.indexOf("听说") >= 0 && data.content.indexOf("出现在") >= 0 && data.content.indexOf("一带。") >= 0) { console.dir(data); if (autoKsBoss == "开" && G.in_fight == false) { if (stopauto || WG.at('副本')) { var c = "<div class=\"item-commands\"><span id = 'onekeyKsboss'>传送到boss</span></div>"; messageClear(); messageAppend("boss已出现"); messageAppend(c); $('#onekeyKsboss').on('click', function () { WG.kksBoss(data); }); } else { WG.kksBoss(data); } } else if (autoKsBoss == "关" || G.in_fight == true) { var c = "<div class=\"item-commands\"><span id = 'onekeyKsboss'>传送到boss</span></div>"; messageClear(); messageAppend("<hiy>boss已出现,由于未开启自动传送,或者在战斗中,需要手动传送</hiy>"); messageAppend(c); $('#onekeyKsboss').on('click', function () { WG.kksBoss(data); }); } } } }); WG.add_hook('text', function (data) { if (G.getitemShow) { if (data.msg.indexOf("恭喜你得到") >= 0 || (data.msg.indexOf("获得") >= 0 && data.msg.indexOf("经验") == -1 && data.msg.indexOf("潜能") == -1 && data.msg.indexOf("提升") == -1) || data.msg.indexOf("你找到") == 0 || data.msg.indexOf("你从") == 0 || (data.msg.indexOf("得到") >= 0 && data.msg.indexOf("郭襄在得到倚天剑") == -1 && data.msg.indexOf("长白山得到剑谱") == -1) ) { messageAppend(data.msg); } } // if (data.msg.indexOf("还没准备好") >= 0) { // WG.auto_preform('stop'); // setTimeout(() => { // WG.auto_preform(); // }, 200); // } if (data.msg.indexOf("说:") == -1) { if (data.msg.indexOf("只能在战斗中使用。") >= 0 || data.msg.indexOf('这里不允许战斗') != -1 || data.msg.indexOf('没时间这么做') != -1) { if (G.in_fight) { G.in_fight = false; WG.auto_preform("stop"); WG.clean_dps(); } } if (data.msg.indexOf("加油,加油!!") >= 0) { if (G.in_fight == false) { G.in_fight = true; WG.auto_preform(); } } if (data.msg.indexOf("你的内力不够,无法使用") >= 0) { // if (G.in_fight == false) { // G.in_fight = true; // } if (G.preform_timer != null) { WG.auto_preform("stop"); messageAppend("内力不足,停止自动出招", 1, 0) } } } if (data.type == 'text') { if (data.msg.indexOf(`${role}身上东西太多了`) >= 0 || data.msg.indexOf("你身上东西太多了") >= 0 || data.msg.indexOf("你拿不下那么多东西。") >= 0) { WG.Send("tm 友情提示:请检查是否背包已满!"); messageAppend("友情提示:请检查是否背包已满!", 1); if (bagFull == 1) { Beep(); } else if (bagFull == 2) { FakerTTS.playtts(`${role},请检查是否背包已满!`); } if (WG.sm_state >= 0) { WG.sm_state = -1; $(".sm_button").text("师门(Q)"); } } if (data.msg.indexOf("长得") >= 0 && data.msg.indexOf("看起来") >= 0) { let s = data.msg.split("\n")[0].split(" "); let name = s[s.length - 1]; if (name.indexOf("<") >= 0) { name = name.split("<")[0]; } let t = new Date().getMilliseconds(); let shieldhtml = `<div class="item-commands"><span id="addshield${t}">屏蔽 ${name}</span></div>` messageAppend(shieldhtml, 0, 0); $(`#addshield${t}`).on('click', function () { shield = GM_getValue('_shield', shield); if (shield != "") { shield = shield + "," + name; } else { shield = name; } GM_setValue('_shield', shield); $('#shield').val(shield); messageAppend("已屏蔽", 1, 1); }); } if (dpssakada == '开') { if (/.*造成<.*>.*<\/.*>点.*/.test(data.msg)) { let pdata = data.msg; let a = pdata.split(/.*造成<wht>|.*造成<hir>|<\/wht>点|<\/hir>点/); let b = a[2].split(/伤害|\(|</); if (b[2] != '你') { if (b[0] == '暴击') {//判断关键字 //critical = critical + parseInt(a[1]); lastcri = parseInt(a[1]); } else { // pfmdps = pfmdps + parseInt(a[1]); lastpfm = parseInt(a[1]); } dpslock = 1; // messageAppend(`你造成了${addChineseUnit(pfmdps)}伤害,共计${pfmnum}次。`, 1, 1); } } let dd = data.msg.split(/看起来充满活力,一点也不累。|似乎有些疲惫,但是仍然十分有活力。|看起来可能有些累了。|动作似乎开始有点不太灵光,但是仍然有条不紊。|已经一副头重脚轻的模样,正在勉力支撑著不倒下去。|看起来已经力不从心了。|已经陷入半昏迷状态,随时都可能摔倒晕去。|似乎十分疲惫,看来需要好好休息了。|气喘嘘嘘,看起来状况并不太好。|摇头晃脑、歪歪斜斜地站都站不稳,眼看就要倒在地上。/); //console.log(dd); if (dd.length >= 2) { //console.log(data.msg) if (dd[0].indexOf("你") < 0) { if (lastcri > 0) { critical = critical + lastcri; criticalnum = criticalnum + 1;//暴击伤害和暴击次数增加 } if (lastpfm > 0) { pfmdps = pfmdps + lastpfm; pfmnum = pfmnum + 1; } } lastcri = 0; lastpfm = 0; } } } // 获取id let match = data.msg.match(/看起来(.*)想杀死你!/) || data.msg.match(/你扑向(.*)/); if (Array.isArray(match) && match.length > 1) { let name = match[1]; let room = roomData.find(room => room.name && room.name.includes(name)); if (room) { G.fight_id = room.id; } } }); WG.add_hook('dialog', function (data) { if (data.dialog == 'jh') { if (data.fbs) { fb_path = data.fbs; } } }); WG.add_hook(['text', 'sc'], function (message) { if (funnycalc == '关') return; if (message.type === "text" && /你的最大内力增加了/.test(message.msg)) { //if中已经判断了内力相关 let x = message.msg.replace(/[^0-9]/ig, ""); let item = G.score; let max = item.max_mp; let limit = item.limit_mp; let t = (limit - max) / (x * 6);//时间/分钟 let tStr = t < 60 ? `${parseInt(t)}分钟` : `${parseInt(t / 60)}小时${parseInt(t % 60)}分钟`; let html = `<hic class="remove_nl">你的最大内力从${max}到${limit}还需${tStr}。\n</hic>`; messageAppend(html, 0, 1); } else if (message.type == 'sc' && message.id == G.id) { if (message.max_mp != null && message.mp != null) { G.score.max_mp = message.max_mp; G.score.mp = message.mp; } } else if (message.type == 'text') { if (/你获得了(.*)点经验,(.*)点潜能/.test(message.msg)) { let x = message.msg.match(/获得了(.*)点经验,(.*)点潜能/); G.jy += parseInt(x[1]); G.qn += parseInt(x[2]); let mss = `<span class="remove_jy">共计获得了${G.jy}点经验和${G.qn}点潜能。\n</span>`; function refresh_jy(mss) { $(".remove_jy").remove(); $(".content-message pre").append(mss); AutoScroll(".content-message"); } setTimeout(() => refresh_jy(mss), 200); } } }); WG.add_hook("roles", function (data) { // console.log(data); // unsafeWindow.SS_ROLES = data.roles; function sendRoles() { if (originWindow.source) { originWindow.source.postMessage(data.roles, '*'); } else { setTimeout(sendRoles, 1000); } } sendRoles(); setTimeout(() => { let loginnum = getQueryVariable("login") if (loginnum) { let userList = $('#role_panel > ul > li.content > ul >li'); for (let uidx = 0; uidx < userList.length; uidx++) { if (loginnum == uidx + 1) { $(userList[uidx]).addClass("select"); } else { $(userList[uidx]).removeClass("select"); } } $("li[command=SelectRole]").click() return; } }, 5000); }); }, configInit: function () { family = GM_getValue(roleid + "_family", family); automarry = GM_getValue(roleid + "_automarry", automarry); autoKsBoss = GM_getValue(roleid + "_autoKsBoss", autoKsBoss); ks_pfm = GM_getValue(roleid + "_ks_pfm", ks_pfm); ks_wait = GM_getValue(roleid + "_ks_wait", ks_wait); eqlist = GM_getValue(roleid + "_eqlist", eqlist); skilllist = GM_getValue(roleid + "_skilllist", skilllist); autoeq = GM_getValue(roleid + "_auto_eq", autoeq); if (family == null) { family = $('.role-list .select').text().substr(0, 2) } wudao_pfm = GM_getValue(roleid + "_wudao_pfm", wudao_pfm); sm_loser = GM_getValue(roleid + "_sm_loser", sm_loser); sm_any = GM_getValue(roleid + "_sm_any", sm_any); sm_price = GM_getValue(roleid + "_sm_price", sm_price); sm_getstore = GM_getValue(roleid + "_sm_getstore", sm_getstore); unauto_pfm = GM_getValue(roleid + "_unauto_pfm", unauto_pfm); auto_pfmswitch = GM_getValue(roleid + "_auto_pfmswitch", auto_pfmswitch); auto_pfm_mode = GM_getValue(roleid + "_auto_pfm_mode", auto_pfm_mode); auto_rewardgoto = GM_getValue(roleid + "_auto_rewardgoto", auto_rewardgoto); busy_info = GM_getValue(roleid + "_busy_info", busy_info); saveAddr = GM_getValue(roleid + "_saveAddr", saveAddr); auto_updateStore = GM_getValue(roleid + "_auto_updateStore", auto_updateStore); auto_relogin = GM_getValue(roleid + "_auto_relogin", auto_relogin); blacklist = GM_getValue(roleid + "_blacklist", blacklist); if (!blacklist instanceof Array) { blacklist = blacklist.split(",") } getitemShow = GM_getValue(roleid + "_getitemShow", getitemShow); if (getitemShow == "开") { G.getitemShow = true } else { G.getitemShow = false } zml = GM_getValue(roleid + "_zml", zml); zdy_item_store = GM_getValue(roleid + "_zdy_item_store", zdy_item_store); zdy_item_store2 = GM_getValue(roleid + "_zdy_item_store2", zdy_item_store2); zdy_item_lock = GM_getValue(roleid + "_zdy_item_lock", zdy_item_lock); zdy_item_drop = GM_getValue(roleid + "_zdy_item_drop", zdy_item_drop); zdy_item_fenjie = GM_getValue(roleid + "_zdy_item_fenjie", zdy_item_fenjie); if (zdy_item_store) { store_list = store_list.concat(zdy_item_store.split(",")) } if (zdy_item_store2) { store_list = store_list.concat(zdy_item_store2.split(",")) } if (zdy_item_lock) { lock_list = lock_list.concat(zdy_item_lock.split(",")) } if (zdy_item_drop) { drop_list = drop_list.concat(zdy_item_drop.split(",")) } if (zdy_item_fenjie) { fenjie_list = fenjie_list.concat(zdy_item_fenjie.split(",")) } ztjk_item = GM_getValue(roleid + "_ztjk", ztjk_item); if (auto_pfmswitch == "开") { G.auto_preform = true } if (auto_pfm_mode == "开") { G.auto_pfm_mode = true } auto_command = GM_getValue(roleid + "_auto_command", auto_command); var unpfm = unauto_pfm.split(','); for (var pfmname of unpfm) { if (pfmname) blackpfm.push(pfmname) } welcome = GM_getValue(roleid + "_welcome", welcome); die_str = GM_getValue(roleid + "_die_str", die_str); shieldswitch = GM_getValue("_shieldswitch", shieldswitch); shield = GM_getValue("_shield", shield); shieldkey = GM_getValue("_shieldkey", shieldkey); statehml = GM_getValue(roleid + "_statehml", statehml); backimageurl = GM_getValue(roleid + "_backimageurl", backimageurl); loginhml = GM_getValue(roleid + "_loginhml", loginhml); timequestion = GM_getValue(roleid + "_timequestion", timequestion); silence = GM_getValue(roleid + "_silence", silence); dpssakada = GM_getValue(roleid + "_dpssakada", dpssakada); funnycalc = GM_getValue(roleid + "_funnycalc", funnycalc); auto_buylist = GM_getValue(roleid + "_auto_buylist", auto_buylist); auto_skillPaperSelllist = GM_getValue(roleid + "_auto_skillPaperSelllist", auto_skillPaperSelllist); zdyskilllist = GM_getValue(roleid + "_zdyskilllist", zdyskilllist); zdyskills = GM_getValue(roleid + "_zdyskills", zdyskills); bagFull = GM_getValue(roleid + "_bagFull", bagFull); // 通知推送开关、方式、Token、Url pushSwitch = GM_getValue("_pushSwitch", pushSwitch); pushType = GM_getValue("_pushType", pushType); pushToken = GM_getValue("_pushToken", pushToken); //pushUrl = GM_getValue("_pushUrl", pushUrl); color_select = GM_getValue("color_select", color_select); WG.zdy_btnListInit(); } }; var S = { serverUrl: "https://wsmud.ii74.com", GetJson: function (path, data) { let res = ''; $.post(S.serverUrl + path, data, (data) => { res = data; }); return res; }, shareJson: function (usernaem, json) { $.post(S.serverUrl + "/sharejk", { username: usernaem, json: JSON.stringify(json) }, (res) => { if (res && res.code == 0) { GM_setClipboard(res.shareid); messageAppend("复制成功" + res.msg + ":" + res.shareid); } else { messageAppend("失败了" + res.msg); } }) }, getShareJson: function (id, callback) { $.post(S.serverUrl + "/getjk", { shareid: id }, (res) => { if (res && res.code == 0) { callback(res); } else { messageAppend("失败了" + res.msg); } }); }, getUserConfig: function (id, callback) { $.get(S.serverUrl + "/User/Load?id=" + id, (res) => { if (res && res != "") { callback(res); } else { messageAppend("失败了"); } }); }, uploadUserConfig: function (id, data, callback) { $.post(S.serverUrl + "/User/Backup", { id: id, data: JSON.stringify(data) }, (res) => { if (res && res == "true") { callback(res); } else { messageAppend("失败了,或配置已存在"); } }); } }; var FakerTTS = { playtts: function (text) { try { var msg = new SpeechSynthesisUtterance(text); msg.lang = 'zh'; msg.voice = speechSynthesis.getVoices().filter(function (voice) { return voice.name == 'Whisper'; })[0]; speechSynthesis.speak(msg); } catch (e) { try { android.speak(text); } catch (ex) { console.log('这个真没有.') } } } }; function Beep() { document.getElementById("beep-alert").play(); }; function Push(text) { if (text) { if (pushSwitch != '开' || pushType == null || pushToken == null) { messageAppend("通知功能未开启或设置不完整,请在 右键菜单-设置 中设置开启。", 1); return; } switch (String(pushType)) { //Server酱 case "0": $.post(`https://sctapi.ftqq.com/${pushToken}.send?title=${text}`); break; //Bark iOS case "1": $.post(`https://api.day.app/${pushToken}/#神传说/${encodeURIComponent(text)}`); break; //PushPlus case "2": var pushJosn = { "token": pushToken, "title": "#神传说", "content": text }; $.ajaxSetup({ contentType: "application/json; charset=utf-8" }); $.post(`http://www.pushplus.plus/send/`, JSON.stringify(pushJosn)); break; //飞书机器人 case "3": var pushJosn = { "msg_type": "text", "content": { "text": text } }; $.ajaxSetup({ contentType: "application/json; charset=utf-8" }); $.post(`https://open.feishu.cn/open-apis/bot/v2/hook/${pushToken}`, JSON.stringify(pushJosn)); break; //Qmsg私聊 case "4": $.post(`https://qmsg.zendee.cn/send/${pushToken}?msg=${text}`); break; //Qmsg群聊 case "5": $.post(`https://qmsg.zendee.cn/group/${pushToken}?msg=${text}`); break; } } }; class MusicBox { constructor(options) { let defaults = { loop: false, musicText: '', autoplay: false, type: 'sine', duration: 2 }; this.arrFrequency = [262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1047, 1175, 1319, 1397, 1568, 1760, 1967]; this.arrNotes = ['·1', '·2', '·3', '·4', '·5', '·6', '·7', '1', '2', '3', '4', '5', '6', '7', '1·', '2·', '3·', '4·', '5·', '6·', '7·']; this.opts = Object.assign(defaults, options); this.audioCtx = new (window.AudioContext || window.webkitAudioContext)(); this.opts.autoplay && this.playMusic(this.opts.musicText, this.opts.autoplay) } createSound(freq) { let oscillator = this.audioCtx.createOscillator(); let gainNode = this.audioCtx.createGain(); oscillator.connect(gainNode); gainNode.connect(this.audioCtx.destination); oscillator.type = this.opts.type; oscillator.frequency.value = freq; gainNode.gain.setValueAtTime(0, this.audioCtx.currentTime); gainNode.gain.linearRampToValueAtTime(1, this.audioCtx.currentTime + 0.01); oscillator.start(this.audioCtx.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.001, this.audioCtx.currentTime + this.opts.duration); oscillator.stop(this.audioCtx.currentTime + this.opts.duration) } createMusic(note) { let index = this.arrNotes.indexOf(note); if (index !== -1) { this.createSound(this.arrFrequency[index]) } } pressBtn(i) { this.createSound(this.arrFrequency[i]) } playMusic(musicText, speed = 2) { let i = 0, musicArr = musicText.split(' '); let timer = setInterval(() => { try { let n = this.arrNotes.indexOf(musicArr[i]); if (musicArr[i] !== '-' && musicArr[i] !== '0') { this.pressBtn(n) } i++; if (i >= musicArr.length) { this.opts.loop ? i = 0 : clearInterval(timer) } } catch (e) { alert('请输入正确的乐谱!'); clearInterval(timer) } }, 1000 / speed); return timer } }; var originWindow = {}; $(document).ready(function () { $('head').append('<link href="https://s4.zstatic.net/ajax/libs/jquery-contextmenu/3.0.0-beta.2/jquery.contextMenu.min.css" rel="stylesheet">'); $('head').append('<link href="https://s4.zstatic.net/ajax/libs/layer/2.3/skin/layer.css" rel="stylesheet">'); $('head').append('<link href="https://s4.zstatic.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">'); $('body').append(UI.codeInput); $("body").append( $(`<audio id="beep-alert" preload="auto"></audio>`).append(`<source src="https://cdn.jsdelivr.net/gh/mapleobserver/wsmud-script/plugins/complete.mp3" type="audio/mpeg">`) ); setInterval(() => { var h = ''; if (parseInt(Math.random() * 10) < 3) { h = "<hir>【插件】有任何问题欢迎加入 #神传说-仙界 367657589 进行技术交流,脚本讨论。\n<hir>" } else if (parseInt(Math.random() * 10) < 10) { h = "<hir>【插件】欢迎访问 https://emeisuqing.github.io/wsmud.old/ 苏轻 助你#神之路上更加轻松愉快。\n<hir>"; } parseInt(Math.random() * 10) < 2 ? $('.channel pre').append(h) : console.log(""); $(".channel")[0].scrollTop = 99999; }, 320 * 1000); KEY.init(); WG.init(); GI.init(); unsafeWindow.WG = WG; unsafeWindow.T = T; unsafeWindow.L = L; unsafeWindow.G = G; unsafeWindow.messageClear = messageClear; unsafeWindow.messageAppend = messageAppend; unsafeWindow.send_cmd = send_cmd; unsafeWindow.roomData = roomData; unsafeWindow.MusicBox = MusicBox; unsafeWindow.FakerTTS = FakerTTS; unsafeWindow.Beep = Beep; unsafeWindow.Push = Push; unsafeWindow.WSStore = store; unsafeWindow.imgShow = imgShow; window.addEventListener("message", receiveMessage, false); function receiveMessage(event) { originWindow = event; var origin = event.origin; var data = event.data; if (String(data).indexOf("denglu") >= 0) { if (role != undefined) { return; } console.log(data); let userName = data.split(" ")[1]; let userList = $('#role_panel > ul > li.content > ul >li'); for (let user of userList) { if (user.innerText.indexOf(userName) >= 0) { $(user).addClass("select"); } else { $(user).removeClass("select"); } } $("li[command=SelectRole]").click() return; } try { if (JSON.parse(data) instanceof Object) { return; } } catch (error) { console.log("Run at message"); } if (typeof data == 'string') { //包含setImmediate 跳过 if(data.indexOf("setImmediate") >= 0){ return; } if (data === '挖矿' || data === '修炼') { WG.zdwk(); } else if (data === '日常') { WG.SendCmd("$daily"); } else if (data === '挂机') { WG.SendCmd("stopstate"); } else { if (data.split("\n")[0].indexOf("//") >= 0) { if (unsafeWindow && unsafeWindow.ToRaid) { ToRaid.perform(data); } } else if (data.split("\n")[0].indexOf("#js") >= 0) { var jscode = data.split("\n"); jscode.baoremove(0) eval(jscode.join("")); } else { WG.SendCmd(data); } } } } $('.room-name').on('click', (e) => { e.preventDefault(); $('.container').contextMenu({ x: 1, y: 1 }); }); function makeTp(mp = 0) { var mptp = { "豪宅": "住房", "衙门": "扬州城-衙门正厅", "镖局": "扬州城-镖局正厅", "当铺": "扬州城-当铺", "擂台": "扬州城-擂台", "药铺": "扬州城-药铺", "书院": "扬州城-书院" } if (mp == 1) { mptp = { "#当": "#当派-广场", "少林": "少林派-广场", "华山": "华山派-镇岳宫", "峨眉": "峨眉派-金顶", "逍遥": "逍遥派-青草坪", "丐帮": "丐帮-树洞内部", "#馆": "扬州城-扬州#馆", "杀手楼": "杀手楼-大门" } let myDate = new Date(); if (myDate.getHours() >= 17) { mptp = { "#当": "#当派-后山小院", "少林": "少林派-方丈楼", "华山": "华山派-客厅", "峨眉": "峨眉派-清修洞", "逍遥": "逍遥派-地下石室", "丐帮": "丐帮-林间小屋", "#馆": "扬州城-扬州#馆", "杀手楼": "杀手楼-大门" } } } var subItems = {}; for (let item in mptp) { subItems[item] = { name: item, callback: function () { WG.go(mptp[item]); } } } if (mp == 0) { subItems['wmls'] = { name: "#庙疗伤", callback: function () { WG.go("扬州城-#庙"); WG.Send("liaoshang"); } } } var dfd = jQuery.Deferred(); setTimeout(function () { dfd.resolve(subItems); }, 20); return dfd.promise(); } function createSomeMenu() { return { items: { "关闭自动": { name: "关闭自动", visible: function (key, opt) { return timer != 0; }, callback: function (key, opt) { WG.timer_close(); }, }, "自动": { name: "自动", visible: function (key, opt) { return timer == 0; }, "items": { "自动#道": { name: "自动#道", callback: function (key, opt) { WG.wudao_auto(); }, }, "自动小树林": { name: "自动小树林", callback: function (key, opt) { WG.grove_auto(); } }, "自动整理并清包": { name: "自动整理并清包", callback: function (key, opt) { WG.sell_all(); } }, "回收秘籍残页": { name: "回收秘籍残页", callback: function (key, opt) { WG.zxBuy(); } }, "自动比试": { name: "自动比试", visible: function (key, opt) { return WG.fight_listener == undefined; }, callback: function (key, opt) { WG.auto_fight(); }, }, "关闭比试": { name: "关闭比试", visible: function (key, opt) { return WG.fight_listener != undefined; }, callback: function (key, opt) { WG.auto_fight(); }, }, "自动使用道具": { name: "自动使用道具", callback: function (key, opt) { WG.auto_useitem(); }, }, "自动研药": { name: "自动研药", callback: function (key, opt) { WG.auto_Development_medicine(); }, }, "一键日常": { name: "一键日常", callback: function (key, opt) { WG.oneKeyDaily(); }, }, "一键请安": { name: "一键请安", callback: function (key, opt) { WG.oneKeyQA(); }, }, "一键扫荡": { name: "一键扫荡", callback: function (key, opt) { WG.oneKeySD(); }, }, "一键当铺购买": { name: "一键当铺购买", callback: function (key, opt) { WG.tnBuy(); }, }, }, }, "换装设置": { name: "换装设置", callback: function (key, opt) { WG.eqhelperui(); }, }, "换装": { name: "换装", items: WG.eqloader() }, "自命令,自定监控": { name: "自命令,自定监控", callback: function (key, opt) { WG.zmlztjk(); }, }, "手动喜宴": { name: "手动喜宴", callback: function (key, opt) { console.log("当前自动状态:" + stopauto); WG.xiyan(); }, }, "快捷传送": { name: "常用地点", "items": makeTp(0) }, "门派传送": { name: "门派传送", "items": makeTp(1) }, "打开仓库": { name: "打开仓库", callback: function (key, opt) { if (WG.at("扬州城-钱庄")) { WG.Send("store"); } else { WG.go("扬州城-钱庄"); } }, }, "切换菜单": { name: "切换菜单", callback: function (key, opt) { let p = 'on' if (inzdy_btn) { p = 'off' } WG.zdy_btnshow(p); }, }, "简单工具": { name: "简单工具", callback: function (key, opt) { WG.calc(); }, }, "调试BOSS": { name: "调试BOSS", visible: false, callback: function (key, opt) { WG.kksBoss({ content: "听说呼符出现在逍遥派-地下石室一带。" }); }, }, "流程菜单Raid.js": { name: "流程菜单Raid.js", callback: function (key, opt) { if (unsafeWindow && unsafeWindow.ToRaid) { unsafeWindow.ToRaid.menu(); } else { messageAppend("插件未安装,请访问 https://greasyfork.org/zh-CN/scripts/375851-wsmud-raid 下载并安装"); window.open("https://greasyfork.org/zh-CN/scripts/375851-wsmud-raid ", '_blank').location; } } }, "设置": { name: "设置", callback: function (key, opt) { WG.setting(); }, }, "打开面板": { name: "打开面板", visible: function (key, opt) { return $('.WG_log').css('display') == 'none'; }, callback: function (key, opt) { WG.showhideborad(); }, }, "关闭面板": { name: "关闭面板", visible: function (key, opt) { return $('.WG_log').css('display') != 'none'; }, callback: function (key, opt) { WG.showhideborad(); }, }, "打开快捷操作栏": { name: "打开快捷操作栏", visible: function (key, opt) { return $('.WG_button').css('display') == 'none'; }, callback: function (key, opt) { WG.showhidebtn(); }, }, "关闭快捷操作栏": { name: "关闭快捷操作栏", visible: function (key, opt) { return $('.WG_button').css('display') != 'none'; }, callback: function (key, opt) { WG.showhidebtn(); }, } } } } $.contextMenu({ selector: '.container', build: function ($trigger, e) { //从 trigger 中获取动态创建的菜单项及回调 return createSomeMenu(); } }); }); })();