wsmud_funny

适用于 PC 端,利用了界面的无用区域,可以方便查看信息,然而目前并没有什么实用价值。

目前为 2019-03-22 提交的版本。查看 最新版本

// ==UserScript==
// @name        wsmud_funny
// @namespace   suqing
// @version     0.1.3
// @author      suqing
// @match       http://game.wsmud.com/*
// @match       http://www.wsmud.com/*
// @homepage    https://gf.qytechs.cn/zh-CN/scripts/380709
// @description 适用于 PC 端,利用了界面的无用区域,可以方便查看信息,然而目前并没有什么实用价值。
// @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';
    if (!WebSocket) console.log("(Error) 无法获取 window.WebSocket!");

    var suqing = {
        name: GM_info.script.name,
        version: GM_info.script.version,
        webSocket: null,
        onmessage_fn: null,
        role: {},
        skills: [],
        getData: function() {
            async function action() { // 模拟点击 获取数据
                suqing.sendmessage("score");       // 属性 1
                await sleep(200);
                suqing.sendmessage("score2");      // 属性 2
                await sleep(200);
                $("[command=skills]").click();     // 点击技能
                await sleep(200);
                $("[command=showcombat]").click(); // 点击动作
                $("[command=showtool]").click();   // 点击菜单
                $(".dialog-close").click();
            };
            action();
            function sleep(ms) {
                return new Promise(resolve => setTimeout(resolve, ms));
            };
        },
        refershRole: function() {
            for (const key in suqing.role) $(`.role_${key}`).html(suqing.role[key]);
        },
        refershSKills: function() {
            suqing.skills.sort(function(a, b) {
                return a.level <= b.level;
            });
            $(".skill_table").html("");
            for (var skill of suqing.skills) {
                $(".skill_table").append(`<tr><td>${skill.name}</td><td>${skill.id}</td><td>${skill.level}</td></tr>`);
            }
            $(".skill_table").append(`<tr><td colspan="3">当前技能上限为<hic>${suqing.role["skill_limit"]}</hic>级</td></tr>`);
        },
        onmessage: function(message) {
            var data = message.data;
            // 1. 刚刚登录(不可用)
            if (data.includes("重新连线。")) {
                suqing.getData();
            // 2. 打坐检测内力
            } else if (data.includes("你的最大内力增加了") && data.includes("点。")) {
                var n = parseInt(data.toString().replace(/[^0-9]/ig,"")),
                  max = parseInt(suqing.role.max_mp),
                limit = parseInt(suqing.role.limit_mp);
                var time = (limit - max) / (n * 6); // X分钟 => X小时X分钟
                var timeString = time < 60 ? `${parseInt(t)}分钟` : `${parseInt(time / 60)}小时${parseInt(time % 60)}分钟`;
                $(".role_dazuo_time").html(timeString);
                suqing.getData();
            // 9. data: 字符串 => 对象
            } else if ((data.includes("{") && data.includes("}")) || (data.includes("[") && data.includes("]"))) {
                data = new Function("return " + data + ";")();
                // 9.1 type = state
                if (data.type === "state") {

                // 9.2 type = dialog
                } else if (data.type === "dialog") {
                    // 9.2.1 dialog = score
                    if (data.dialog === "score") {
                        for (const key in data) suqing.role[key] = data[key];
                        suqing.refershRole();
                    // 9.2.2 dialog = skills
                    } else if (data.dialog === "skills") {
                        if (data.items) { // 所有技能数据
                            suqing.skills = data.items;
                            suqing.role["skill_limit"] = data.limit; // data.limit 等级上限
                            suqing.refershSKills();
                        } else if (data.id && data.level) { // 单个技能变动
                            for (var skill of suqing.skills) {
                                if (skill.id === data.id) {
                                    skill.level = data.level;
                                    suqing.refershSKills();
                                    break;
                                }
                            }
                        }
                    // 9.2.3 dialog = pack
                    } else if (data.dialog === "pack") {

                    }
                } else if (data.type === "msg") { // 9.3 type = msg
                    if (data.ch === "chat") { // 9.3.1 世界频道
                        var levels = ["<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hic>闲聊</hic>", "<hiy>宗师</hiy>", "<hiz>武圣</hiz>", "<hio>武帝</hio>", "<hir>武神</hir>"];
                        $(".msg").append(
                            $(`<span cmd="look3 ${data.uid}"></span>`).click(function() {
                                suqing.sendmessage(`${$(this).attr("cmd")}`);
                            }).html(`<hic>【${levels[data.lv]}】${data.name}:${data.content}</hic>`)
                        ).append("<br>");
                    } else if (data.ch === "rumor") { // 9.3.2 谣言
                        $(".msg").append(`<him>【谣言】${data.content}</him><br>`);
                    } else if (data.ch === "sys") { // 9.3.3 系统
                        $(".msg").append(`<hir>【系统】${data.content}</hir><br>`);
                    } else if (data.ch === "tm") { // 9.3.4 队伍
                        $(".msg").append(
                            $(`<span cmd="look3 ${data.uid}"></span>`).click(function() {
                                suqing.sendmessage(`${$(this).attr("cmd")}`);
                            }).html(`<hig>【队伍】${data.name}:${data.content}</hig>`)
                        ).append("<br>");
                    } else if (data.ch === "es") { // 9.3.5 全区
                        $(".msg").append(
                            $(`<span></span>`).html(`<hio>【${data.server}】${data.name}:${data.content}</hio>`)
                        ).append("<br>");
                    } else if (data.ch === "fam") { // 9.3.6 门派
                        $(".msg").append(
                            $(`<span cmd="look3 ${data.uid}"></span>`).click(function() {
                                suqing.sendmessage(`${$(this).attr("cmd")}`);
                            }).html(`<hiy>【${data.fam}】${data.name}:${data.content}</hiy>`)
                        ).append("<br>");
                    } else if (data.ch === "pty") { // 9.3.7 帮派
                        $(".msg").append(
                            $(`<span cmd="look3 ${data.uid}"></span>`).click(function() {
                                suqing.sendmessage(`${$(this).attr("cmd")}`);
                            }).html(`<hiz>【帮派】${data.name}:${data.content}</hiz>`)
                        ).append("<br>");
                    }
                    $(".channel").hide();
                    fn(); // 滚动效果
                    return;
                    function fn() {
                        var a = $(".msg")[0].scrollTop, b = $(".msg")[0].scrollHeight, h = $(".msg").height();
                        if (a < b - h) {
                            $(".msg")[0].scrollTop = a + 1;
                            setTimeout(fn, 1000/60);
                        }
                    };
                }
            }
            // 0. console
            console.log(data);
            suqing.onmessage_fn.apply(this, arguments);
        },
        sendmessage: function(message) {
            console.log("Sending Message: ", message);
            if ($("#sendmessage").attr("cmd")) {
                $("#sendmessage").attr("cmd", message);
            } else {
                $(".container").append($(`<span id="sendmessage" cmd="${message}"><span>`));
            }
            $("#sendmessage").click();
        },
    };


    unsafeWindow.WebSocket = function(url) {
        suqing.webSocket = new WebSocket(url);
    }
    unsafeWindow.WebSocket.prototype = {
        get url() {
            return suqing.webSocket.url;
        },
        get protocol() {
            return suqing.webSocket.protocol;
        },
        get readyState() {
            return suqing.webSocket.readyState;
        },
        get bufferedAmount() {
            return suqing.webSocket.bufferedAmount;
        },
        get extensions() {
            return suqing.webSocket.extensions;
        },
        get binaryType() {
            return suqing.webSocket.binaryType;
        },
        set binaryType(type) {
            suqing.webSocket.binaryType = type;
        },
        get onopen() {
            return suqing.webSocket.onopen;
        },
        set onopen(fn) {
            suqing.webSocket.onopen = fn;
        },
        get onclose() {
            return suqing.webSocket.onclose;
        },
        set onclose(fn) {
            suqing.webSocket.onclose = fn;
        },
        get onerror() {
            return suqing.webSocket.onerror;
        },
        set onerror(fn) {
            suqing.webSocket.onerror = fn;
        },
        close: function () {
            suqing.webSocket.close();
        },
        get onmessage() {
            return suqing.webSocket.onmessage;
        },
        // 截获接收到的数据
        set onmessage(fn) {
            suqing.onmessage_fn = fn;
            suqing.webSocket.onmessage = suqing.onmessage;
        },
        // 截获发送出的数据
        send: function (message) {
            suqing.webSocket.send(message);
            $(".console").append($(`<div><hig>&nbsp;>>&nbsp;${message}</hig></div>`));
            fn(); // 滚动效果
            function fn() {
                var a = $(".console")[0].scrollTop, b = $(".console")[0].scrollHeight, h = $(".console").height();
                if (a < b - h) {
                    $(".console")[0].scrollTop = a + 1;
                    setTimeout(fn, 1000/60);
                }
            };
        },
    };

    $(document).ready(function() {
        addDiv();
        addStyle();
    });

    function addDiv() {
        $("body").append($(`<div class="left"></div>`));
        $("body").append($(`<div class="msg"></div>`));
        $("body").append($(`<div class="right"></div>`));
        $("body").append($(`<div class="extra"></div>`));

        $(".left").append(`
            <table class="role">
                <tr><td colspan="4">角色信息</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>/<span class="role_max_hp"></span></td></tr>
                <tr><td>内力</td><td colspan="3"><span class="role_mp"></span>/<span class="role_max_mp"></span></td></tr>
                <tr><td>内力上限</td><td colspan="3"><hic class="role_limit_mp"></hic></td></tr>
                <tr><td>打坐计算</td><td colspan="3"><hir class="role_dazuo_time"></hir></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 class="role_gj"></td><td>终伤</td><td class="role_add_sh"></td></tr>
                <tr><td>防御</td><td class="role_fy"></td><td>命中</td><td class="role_mz"></td></tr>
                <tr><td>招架</td><td class="role_zj"></td><td>躲闪</td><td class="role_ds"></td></tr>
                <tr><td>暴击</td><td class="role_bj"></td><td>攻速</td><td class="role_gjsd"></td></tr>
                <tr><td>门派</td><td class="role_family"></td><td>功绩</td><td><hig class="role_gongji"></hig></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="msg_title"><hiy>指令记录</hiy></div>
            <div class="console"></div>
            <div class="send"><input type="text" autocomplete="off" id="send_value"><button type="button" id="send_btn">发送</button></div>
        `);

        $("#send_btn").click(function() { // 发送按钮
            var value = $("#send_value").val();
            suqing.sendmessage(value);
            $("#send_value").val("");
        });
        $("#send_value").keypress(function(key) { // 监控回车
            if (key.which == 13) $("#send_btn").click();
        });

        $(".right").append(`
        <table class="skill_title">
            <tr><td colspan="3">技能列表</td></tr>
            <tr>
                <td>技能</td>
                <td>代码</td>
                <td>等级</td>
            <tr>
        </table>
        <div class="skill_box"><table class="skill_table">
            <tbody></tbody>
        </table></div>
        `);


    }
    function addStyle() {
        GM_addStyle(`
            body {
                display: flex;
                flex-flow: row no-wrap;
                width: 100vw;
            }
            .signinfo {
                display: none;
            }
            .login-content, .container {
                flex: 0 0 28rem;
                border: 0.05em solid #008000;
            }
            .container {
                width: 28rem;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select": none;
            }

            .left {
                order: 1;
                flex: 0 0 20rem;
                display: flex;
                flex-direction: column;
            }
            .msg {
                order: -1;
                flex: 0 0 20rem;
                font-size: 0.8rem;
                overflow: scroll;
            }
            .right {
                order: 2;
                flex: 0 0 20rem;
                display: flex;
                flex-direction: column;
            }
            .extra {
                order: 100;
                flex: 0 1 100rem;
            }

            .left table {
                border-collapse: collapse;
                table-layout: fixed;
                width: 20.05rem;
            }
            .left td {
                border: #008000 solid 0.05rem;
                text-align: center;
                overflow: hidden;
                white-space: nowrap;
            }
            /* ROLE */
            .role {
                flex: 0 0 auto;
            }
            .role tr td:first-child, .role tr td:first-child+td+td {
                width: 3.95rem;
            }
            .role tr td:first-child+td, .role tr td:first-child+td+td+td {
                width: 5.95rem;
            }
            /* MESSAGE */
            .msg_title {
                flex: 0 0 auto;
                text-align: center;
                border: #008000 solid 0.05rem;
            }
            .console {
                flex: 0 1 100rem;
                width: 20rem;
                overflow: scroll;
                white-space: nowrap;
                border-left: #008000 solid 0.05rem;
            }
            .send {
                flex: 0 0 auto;
                display: flex;
                height: 2rem;
            }
            .send input {
                flex: 1 0 auto;
            }
            .send button {
                height: auto;
            }

            /* SKILL */
            .right .skill_title {
                flex: 0 0 auto;
            }
            .right .skill_box {
                flex: 1 1 auto;
                overflow: scroll;
            }
            .right table {
                border-collapse: collapse;
                table-layout: fixed;
                width: 20rem;
            }
            .right td {
                border: #008000 solid 0.05rem;
                text-align: center;
                overflow: hidden;
                white-space: nowrap;
            }
            .skill_table tr td:first-child, .skill_title tr td:first-child {
                width: 6rem;
            }
            .skill_table tr td:first-child+td, skill_title tr td:first-child+td {
                width: 8rem;
            }
            .skill_table tr td:first-child+td+td, skill_title tr td:first-child+td+td {
                width: 4rem;
            }

        `);
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址