// ==UserScript== // @name 仅更改部分排序规则后作为自用 // @namespace com.suqing // @version 0.5.4 // @author SuQing // @date 2019/03/22 // @modified 2019/08/02 // @match http://*.wsmud.com/* // @homepage https://greasyfork.org/zh-CN/scripts/387999 // @description Game Script of WSMud // @run-at document-start // @require https://code.jquery.com/jquery-3.3.1.min.js // @grant unsafeWindow // @grant GM_setClipboard // @downloadURL none // ==/UserScript== (function(window) { "use strict"; let cloneObject, autoScroll, queue, setTitle, alert, say, getTime, addStyle; let websocket, monitor, fakeEvent, progress; let cmd, cmds, time_send, timeout_fight, checkState, softerColor, commandsBar; let listenerOnSend, listenerOnMessage, listenerOnClose, listenerGetData, listenerGetText; let id, name, state, family, cmds_work; let roles, npcs, packs, skills, room1, room2, exit, perform; let hp, max_hp, mp, max_mp, limit_mp, jing, qian, hurt; let reconnect = true, debug = false; let closeDialog, getMethodWithEventType, methodToParseData, getItemsAfterSort, getSkillsAfterSort; let task, id_sm, id_wdt; let $killall, $npc, $item; cmd = { goeast: "go east", goeastup: "go eastup", gowest: "go west", gowestup: "go westup", gonorth: "go north", gonorthup: "go northup", gosouth: "go south", gosouthup: "go southup", gosouthwest: "go southwest", gosoutheast: "go southeast", gonorthwest: "go northwest", gonortheast: "go northeast", goup: "go up", godown: "go down", goenter: "go enter", breakbi: "break bi", opendoor: "open door", jumpdown: "jump down", score: "score", pack: "pack", cha: "cha", tasks: "tasks", stopstate: "stopstate", dazuo: "dazuo", liaoshang: "liaoshang", relive: "relive", relivelocal: "relive locale", store: "store", sellall: "sell all", wakuang: "wakuang", wa: "wa", xiulian: "xiulian", yangzhou: "jh fam 0 start", wudang: "jh fam 1 start", shaolin: "jh fam 2 start", huashan: "jh fam 3 start", emei: "jh fam 4 start", xiaoyao: "jh fam 5 start", gaibang: "jh fam 6 start", shashou: "jh fam 7 start", xiangyang: "jh fam 8 start", wudaota: "jh fam 9 start" }; cmds = {}; cmds.扬州 = { 醉仙楼: [cmd.yangzhou, cmd.gonorth, cmd.gonorth, cmd.goeast, 512, "list $npc(店小二)"], 杂货铺: [cmd.yangzhou, cmd.goeast, cmd.gosouth, 512, "list $npc(杨永福)"], 打铁铺: [cmd.yangzhou, cmd.goeast, cmd.goeast, cmd.gosouth, 512, "list $npc(铁匠)"], 药铺: [cmd.yangzhou, cmd.goeast, cmd.goeast, cmd.gonorth, 512, "list $npc(平一指)"], 广场: [cmd.yangzhou], 钱庄: [cmd.yangzhou, cmd.gonorth, cmd.gowest], 武庙: [cmd.yangzhou, cmd.gonorth, cmd.gonorth, cmd.gowest], 武馆: [cmd.yangzhou, cmd.gosouth, cmd.gosouth, cmd.gowest], 衙门: [cmd.yangzhou, cmd.gowest, cmd.gonorth, cmd.gonorth], 镖局: [cmd.yangzhou, cmd.gowest, cmd.gowest, cmd.gosouth, cmd.gosouth], 矿山: [cmd.yangzhou, cmd.gowest, cmd.gowest, cmd.gowest, cmd.gowest], }; cmds.购买 = { "米饭": cmds.扬州.醉仙楼, "神仙醉": cmds.扬州.醉仙楼, "醉仙酿": cmds.扬州.醉仙楼, "女儿红": cmds.扬州.醉仙楼, "花雕酒": cmds.扬州.醉仙楼, "米酒": cmds.扬州.醉仙楼, "扬州炒饭": cmds.扬州.醉仙楼, "面条": cmds.扬州.醉仙楼, "包子": cmds.扬州.醉仙楼, "鸡腿": cmds.扬州.醉仙楼, "长鞭": cmds.扬州.杂货铺, "簪子": cmds.扬州.杂货铺, "铁戒指": cmds.扬州.杂货铺, "布鞋": cmds.扬州.杂货铺, "英雄巾": cmds.扬州.杂货铺, "木棍": cmds.扬州.杂货铺, "布衣": cmds.扬州.杂货铺, "铁剑": cmds.扬州.打铁铺, "钢刀": cmds.扬州.打铁铺, "铁棍": cmds.扬州.打铁铺, "铁杖": cmds.扬州.打铁铺, "飞镖": cmds.扬州.打铁铺, "金创药": cmds.扬州.药铺, "引气丹": cmds.扬州.药铺, }; autoScroll = function(selector) { const maxDistance = 120, fps = 120; if (typeof selector === "string") { let top = $(selector)[0].scrollTop; let max = $(selector)[0].scrollHeight; let height = Math.ceil($(selector).height()); if (top < max - height) { let inc = (max - height < maxDistance) ? 1 : Math.ceil((max - height) / maxDistance); $(selector)[0].scrollTop = top + inc; window.setTimeout(() => autoScroll(selector), 1000 / fps); } } }; cloneObject = function(object) { let result = {}; for (const key in object) { result[key] = typeof object[key] === "object" ? cloneObject(object[key]) : object[key]; } return result; }; setTitle = function(title) { $("head title").html(title); }; queue = function(any) { let delay = 256; if (typeof any === "string") { let process = { "$killall": () => $killall(), "$npc": () => $npc(any), "$item": () => $item(any) }; let key = Object.keys(process).find(key => { return any.includes(key); }); key ? process[key]() : websocket.send(any); } else if (typeof any === "function") { any(); } else if (any instanceof Array) { if (any.length === 0) { return; } let a = any[0], b = any.slice(1); if (typeof a === "string" && /^[0-9]\d*$/.test(a)) { a = Number(a); } if (typeof a === "number") { window.setTimeout(() => queue(b), a); } else { queue(a); window.setTimeout(() => queue(b), delay); } } else { console.error(any); } }; closeDialog = function() { listenerGetData({type: "dialog", dialog: "jh", close: true}); }; alert = function(message) { $("
").appendTo("body").css({ "display": "none", "position": "fixed", "top": "50%", "left": "50%", "transform": "translate(-50%, -50%)", "min-width": "50%", "max-width": "70%", "z-index": "9999", "text-align": "center", "padding": "15px", "color": "#a0a0a0", "background-color": "#101010", "border-radius": "3px", "border-color": "#a0a0a0", }).html(message).click(function() { $(this).remove(); }).show(1000).delay(3000).fadeOut(1000, function() { $(this).remove(); }); }; say = function(text) { let language = /.*[\u4e00-\u9fa5]+.*$/.test(text) ? "zh" : "en"; let url = `https://fanyi.baidu.com/gettts?lan=${language}&text=${text}&spd=5&source=web`; let audio = new Audio(url); audio.play(); }; getTime = function(format) { let time = new Date(), toString = function(n) { return n < 10 ? `0${n}` : `${n}`; }; format = format.replace("hh", toString(time.getHours())); format = format.replace("mm", toString(time.getMinutes())); format = format.replace("ss", toString(time.getSeconds())); return format; }; addStyle = function(css) { $("head style")[0] || $("head").append($("