您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
WSMud three column layout UI(width:1080px) for PC, SuQing use it herself.
当前为
// ==UserScript== // @name wsmud_funny // @namespace suqing // @version 0.1.7 // @author sq // @match http://game.wsmud.com/* // @match http://www.wsmud.com/* // @homepage https://gf.qytechs.cn/zh-CN/scripts/380709 // @description WSMud three column layout UI(width:1080px) for PC, SuQing use it herself. // @run-at document-start // @require http://code.jquery.com/jquery-3.3.1.slim.min.js // @grant unsafeWindow // @grant GM_addStyle // @grant GM_setValue // @grant GM_deleteValue // @grant GM_getValue // @grant GM_setClipboard // ==/UserScript== (function() { 'use strict'; let funny = { scriptName: GM_info.script.name, scriptVersion: GM_info.script.version, scriptAuthor: GM_info.script.author, webSocket: null, onmessage_fn: null, role: { jy: 0, qn: 0, }, skills: {}, // pot: 0, getInfo: function() { return `Script : ${funny.scriptName}\nVersion: ${funny.scriptVersion}\nAuthor : ${funny.scriptAuthor}\n`; }, sleep: function(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }, scroll: function(className) { let a = $(`.${className}`)[0].scrollTop, b = $(`.${className}`)[0].scrollHeight, h = Math.ceil($(`.${className}`).height()); console.log(`scroll: scrollTop=${a} scrollHeight=${b} height=${h}`); if (a < b - h) { $(`.${className}`)[0].scrollTop = a + 1; setTimeout(`funny.scroll("${className}")`, 1000/60); } }, // 向服务器发送消息 sendmessage: function(message) { if (typeof message === "string") { // 1. 字符串 send(message); } else if (message instanceof Array) { // 2. 数组 action(message); async function action(message) { for (const m of message) { await funny.sleep(1000); send(m); } } } function send(message) { // 发送 if ($("#sendmessage").attr("cmd")) { $("#sendmessage").attr("cmd", message); } else { $(".container").append($(`<span id="sendmessage" cmd="${message}"><span>`)); } $("#sendmessage").click(); } }, // 截获到的发送的消息 onsend: function(message) { $(".console").append($(`<div> >> ${message}</div>`)); funny.scroll("console"); }, // 截获到的接收的消息 onmessage: function(message) { let data = message.data || "error"; if ((data.includes("{") && data.includes("}")) || (data.includes("[") && data.includes("]"))) { data = new Function("return " + data + ";")(); } console.log(data); // 登录(不可用) if (/重新连线。|欢迎登陆/.test(data)) { async function action() { // 模拟点击 获取数据 funny.sendmessage("score"); // 属性 1 await funny.sleep(500); funny.sendmessage("score2"); // 属性 2 await funny.sleep(500); $("[command=skills]").click(); // 点击技能 await funny.sleep(500); $("[command=showcombat]").click(); // 点击动作 $("[command=showtool]").click(); // 点击菜单 $(".dialog-close").click(); // 关闭窗口 }; funny.onmessage_fn.apply(this, arguments); action(); $(".content-message pre").append(`- - - - -\n${funny.getInfo()}- - - - -\n<hig>你已重新连线。</hig>\n`); return; } // 经验 潜能 if (/<hig>你获得了.*点经验,.*点潜能。<\/hig>/.test(data)) { let array = data.split(/<hig>你获得了|点经验,|点潜能。<\/hig>/); funny.role.jy += parseInt(array[1]); funny.role.qn += parseInt(array[2]); funny.onmessage_fn.apply(this, arguments); $(".remove_jyqn").remove(); $(".content-message pre").append(`<span class="remove_jyqn">共计获得了${funny.role.jy}点经验,${funny.role.qn}点潜能。\n</span>`); return; } // 打坐 内力 if (/你的最大内力增加了.*点。/.test(data)) { let n = parseInt(data.toString().replace(/[^0-9]/ig, "")), max = parseInt(funny.role.max_mp), limit = parseInt(funny.role.limit_mp); let time = (limit - max) / (n * 6); // X分钟 => X小时X分钟 let timeString = time < 60 ? `${parseInt(time)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`; $(".role_dazuo_time").html(timeString); funny.onmessage_fn.apply(this, arguments); $(".remove_dzsj").remove(); $(".content-message pre").append(`<span class="remove_dzsj">- - - - -\n当前内力: ${max}\n上限内力: ${limit}\n需要时间: ${timeString}\n- - - - -\n</span>`); return; } // state if (data.type === "state") { funny.onmessage_fn.apply(this, arguments); if (data.state === "你正在练习技能") { // fn(); (async function fn() { funny.sendmessage("score"); await funny.sleep(2000); funny.sendmessage("score2"); await funny.sleep(500); $(".dialog-close").click(); })(); } funny.state = data.state; funny.desc = data.desc; clearTimeout(funny.timer); funny.timer = setInterval(async function() { await funny.sleep(1000/60); let text = $(".content-message pre").html(); if (funny.desc) { for (const string of funny.desc) text = text.replace(`${string}\n`, ""); } $(".content-message pre").html(text); }, 5000); return; } // status if (data.type === "status") { } // dialog = score if (data.type === "dialog" && data.dialog === "score") { for (const key in data) funny.role[key] = data[key]; for (const key in funny.role) $(`.role_${key}`).html(funny.role[key]); } // dialog = skills if (data.type === "dialog" && data.dialog === "skills") { if (data.items) { // 所有技能数据 funny.skills = data.items; funny.role["skill_limit"] = data.limit; // 等级上限 } else if (data.id && data.level) { // 单个技能变动 for (const skill of funny.skills) { if (skill.id === data.id) { skill.level = data.level; break; } } } else if (data.id && data.exp) { let name = "", k = 0, level = 0; let djsx = parseInt(funny.role.skill_limit); // 等级上限 let xxxl = parseInt(funny.role.study_per); // 学习效率 let lxxl = parseInt(funny.role.lianxi_per); // 练习效率 let xtwx = parseInt(funny.role.int); // 先天悟性 let htwx = parseInt(funny.role.int_add); // 后天悟性 if (funny.skills) { for (const skill of funny.skills) { if (skill.id === data.id) { name = skill.name; level = parseInt(skill.level); if (/<wht>.*/.test(name)) k = 1; // 白 if (/<hig>.*/.test(name)) k = 2; if (/<hic>.*/.test(name)) k = 3; if (/<hiy>.*/.test(name)) k = 4; if (/<hiz>.*/.test(name)) k = 5; if (/<hio>.*/.test(name)) k = 6; // 橙 if (/<hir>.*/.test(name)) k = 7; // 红 break; } } } let qianneng = (djsx * djsx - level * level) * 2.5 * k; if (funny.state === "你正在练习技能") { let time = qianneng / (xtwx + htwx) / (1 + lxxl / 100 - xtwx / 100) / 12; let timeString = time < 60 ? `${parseInt(time)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`; $(".lx").remove(); $(".content-message pre").append(`练习${name}消耗了${parseInt(qianneng / time / 12)}点潜能。\n`); $(".content-message pre").append(`<span class="lx">- - - - -\n角色悟性: ${xtwx}+${htwx}\n练习效率: ${lxxl}%\n等级上限: ${djsx}级\n需要潜能: ${qianneng}\n需要时间: ${timeString}\n- - - - -\n</span>`); funny.scroll("content-message"); } } } // type = msg if (data.type === "msg") { // ch = chat / rumor / sys / tm / es / fam / pty // 世界频道 if (data.ch === "chat") { let levels = ["<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hiy>宗师</hiy>", "<hiz>武圣</hiz>", "<hio>武帝</hio>", "<hir>武神</hir>"]; $(".chat").append( $(`<span cmd="look3 ${data.uid}"><hic>【${levels[data.lv]}】${data.name}:${data.content}</hic><br></span>`) .click(function() { funny.sendmessage(`${$(this).attr("cmd")}`); }) ); } // 门派频道 if (data.ch === "fam") $(".fam").append( $(`<span cmd="look3 ${data.uid}"><hiy>【${data.fam}】${data.name}:${data.content}</hiy><br></span>`) .click(function() { funny.sendmessage(`${$(this).attr("cmd")}`); }) ); // 帮派频道 if (data.ch === "pty") $(".pty").append( $(`<span cmd="look3 ${data.uid}"><hiz>【帮派】${data.name}:${data.content}</hiz><br></span>`) .click(function() { funny.sendmessage(`${$(this).attr("cmd")}`); }) ); // 队伍频道 if (data.ch === "tm") $(".tm").append(`<hig>【队伍】${data.name}:${data.content}</hig><br>`); // 全区频道 if (data.ch === "es") $(".es").append(`<hio>【${data.server}】${data.name}:${data.content}</hio><br>`); // 谣言消息 if (data.ch === "rumor") $(".rumor").append(`<him>【谣言】${data.content}</him><br>`); // 系统消息 if (data.ch === "sys") $(".sys").append(`<him>【系统】${data.content}</him><br>`); funny.scroll(data.ch); } funny.onmessage_fn.apply(this, arguments); }, }; unsafeWindow.funny = funny; if (WebSocket) { console.log(`(${funny.scriptName})\nComplete: 成功获取 window.WebSocket!`); unsafeWindow.WebSocket = function(url) { funny.webSocket = new WebSocket(url); }; unsafeWindow.WebSocket.prototype = { get url() { return funny.webSocket.url; }, get protocol() { return funny.webSocket.protocol; }, get readyState() { return funny.webSocket.readyState; }, get bufferedAmount() { return funny.webSocket.bufferedAmount; }, get extensions() { return funny.webSocket.extensions; }, get binaryType() { return funny.webSocket.binaryType; }, set binaryType(type) { funny.webSocket.binaryType = type; }, get onerror() { return funny.webSocket.onerror; }, set onerror(fn) { funny.webSocket.onerror = fn; }, get onmessage() { return funny.webSocket.onmessage; }, set onmessage(fn) { funny.onmessage_fn = fn; funny.webSocket.onmessage = funny.onmessage; }, send: function (message) { funny.onsend(message); funny.webSocket.send(message); }, get onopen() { return funny.webSocket.onopen; }, set onopen(fn) { funny.webSocket.onopen = fn; }, get onclose() { return funny.webSocket.onclose; }, set onclose(fn) { funny.webSocket.onclose = fn; }, close: function () { funny.webSocket.close(); }, }; } else { console.log(`(${funny.scriptName})\nError: 无法获取 window.WebSocket!`); } $(document).ready(function() { // 原页面元素 css 修改 GM_addStyle(`.channel{display:none;}`); // 隐藏游戏原聊天频道 $(".signinfo").addClass("hide"); // 隐藏底部 info GM_addStyle(`.content-bottom{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;}`); // 屏蔽连击按钮触发复制 GM_addStyle(`.room-item>.item-name{margin-left: 14px;}`); // 角色列表左侧的外边距 $(".room_items")[0].style.maxHeight = "240px"; // 房间列表大概可以显示 20 个人物 // 隐藏部分滚动条 $(".state-bar")[0].style.overflow = "hidden"; $(".combat-commands")[0].style.overflow = "hidden"; $(".dialog-content")[0].style.overflowX = "hidden"; // 三栏布局 $("body").append($(`<div class="left box"></div>`)); $("body").append($(`<div class="right box"></div>`)); $(".container").addClass("box"); $(".login-content").addClass("box"); GM_addStyle(` body { width: 100%; display: flex; flex-flow: row no-wrap; } .box { width: 360px; flex: 0 0 auto; border: 1px solid #008000; } .container, .login-content { flex: 1 0 auto; } .left { order: -1; } .right { order: 1; } `); // left $(".left").append(` <table class="role"> <tr><td colspan="4"><hiy>角色信息</hiy></td></tr> <tr><td colspan="4" class="role_name">ROLE_NAME</td></tr> <tr><td>ID</td><td colspan="3" class="role_id"></td></tr> <tr><td>性别</td><td class="role_gender"></td><td>境界</td><td class="role_level"></td></tr> <tr><td>年龄</td><td colspan="3" class="role_age"></td></tr> <tr><td>经验</td><td colspan="3"><hig class="role_exp"></hig></td></tr> <tr><td>潜能</td><td colspan="3"><hig class="role_pot"></hig></td></tr> <tr><td>气血</td><td colspan="3"><span class="role_hp"></span>/<hic class="role_max_hp"></hic></td></tr> <tr><td>内力</td><td colspan="3"><span class="role_mp"></span>/<hic class="role_max_mp"></hic></td></tr> <tr><td>内力上限</td><td colspan="3"><hic class="role_limit_mp"></hic></td></tr> <tr><td>臂力</td><td><hiy class="role_str"></hiy>+<span class="role_str_add"></span></td><td>根骨</td><td><hiy class="role_con"></hiy>+<span class="role_con_add"></span></td></tr> <tr><td>身法</td><td><hiy class="role_dex"></hiy>+<span class="role_dex_add"></span></td><td>悟性</td><td><hiy class="role_int"></hiy>+<span class="role_int_add"></span></td></tr> <tr><td>攻击</td><td><hig class="role_gj"></hig></td><td>终伤</td><td><hig class="role_add_sh"></hig></td></tr> <tr><td>防御</td><td><hig class="role_fy"></hig></td><td>命中</td><td><hig class="role_mz"></hig></td></tr> <tr><td>招架</td><td><hig class="role_zj"></hig></td><td>躲闪</td><td><hig class="role_ds"></hig></td></tr> <tr><td>暴击</td><td><hig class="role_bj"></hig></td><td>攻速</td><td><hig class="role_gjsd"></hig></td></tr> <tr><td>门派</td><td><hic class="role_family"></hic></td><td>功绩</td><td><hic class="role_gongji"></hic></td></tr> <tr><td>忽视防御</td><td class="role_diff_fy"></td><td>伤害减免</td><td class="role_diff_sh"></td></tr> <tr><td>暴击伤害</td><td class="role_add_bj"></td><td>暴击抵抗</td><td class="role_diff_bj"></td></tr> <tr><td>增加忙乱</td><td class="role_busy"></td><td>忽视忙乱</td><td class="role_diff_busy"></td></tr> <tr><td>释放速度</td><td class="role_releasetime"></td><td>冷却速度</td><td class="role_distime"></td></tr> <tr><td>打坐效率</td><td class="role_dazuo_per"></td><td>内力减耗</td><td class="role_expend_mp"></td></tr> <tr><td>练习效率</td><td class="role_lianxi_per"></td><td>学习效率</td><td class="role_study_per"></td></tr> </table> <div class="console"></div> <div class="send_controller"><input type="text" autocomplete="off" id="send_value"><button type="button" id="send_btn">发送</button></div> `); $("#send_btn").click(function() { // 发送按钮 let value = $("#send_value").val(); if (value) { funny.sendmessage(value); $("#send_value").val(""); } }); $("#send_value").keypress(function(key) { // 监控回车 if (key.which == 13) $("#send_btn").click(); }); GM_addStyle(` .left { display: flex; flex-direction: column; } .role { order: 0; flex: 0 0 auto; width: 100%; flex: 0 0 auto; table-layout: fixed; border-collapse: collapse; } .role td { width: 60px; overflow: hidden; text-align: center; white-space: nowrap; border: #008000 solid 1px; } .console { order: 5; flex: 1 0 auto; height: 80px; overflow: auto; } .send_controller { order: 6; flex: 0 0 auto; height: 30px; display: flex; } .send_controller input { flex: 1 0 auto; height: auto; } .send_controller button { height: auto; } `); // right $(".right").append(` <div class="msg chat"></div> <div class="msg rumor"></div> <div class="msg sys"></div> <div class="msg tm"></div> <div class="msg pty"></div> <div class="msg fam"></div> <div class="msg es"></div> `); GM_addStyle(` .right { display: flex; height: 100%; flex-direction: column; } .msg { height: auto; flex: 0 0 auto; font-size: 16px; min-height: calc(16px * 1); max-height: calc(16px * 4); overflow: auto; } .chat { max-height: 100%; flex: 1 1 auto; } `); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址