SwordMasters.io 透過 WS 複製實現擊殺倍數

透過傳送重複攻擊訊息來增加殺戮資料的腳本(使用滑桿從 1 調整到 50000)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         SwordMasters.io 透過 WS 複製實現擊殺倍數
// @namespace    http://tampermonkey.net/
// @license      MIT
// @version      1.0
// @description  透過傳送重複攻擊訊息來增加殺戮資料的腳本(使用滑桿從 1 調整到 50000)
// @author       huang-wei-lun
// @match        https://swordmasters.io/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // -- 1. UI 建立:左下角滑桿 (1~50000) --
    function createMultiplierUI() {
        // UI 容器
        const container = document.createElement('div');
        container.style.position = 'fixed';
        container.style.bottom = '10px';
        container.style.left = '10px';
        container.style.zIndex = '10000';
        container.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
        container.style.color = 'white';
        container.style.padding = '8px';
        container.style.borderRadius = '5px';
        container.style.fontFamily = 'Arial, sans-serif';
        container.style.fontSize = '14px';
        container.style.userSelect = 'none';

        // 標題
        const title = document.createElement('div');
        title.innerText = '殺人乘數';
        title.style.marginBottom = '4px';
        container.appendChild(title);

        // 滑桿
        const slider = document.createElement('input');
        slider.type = 'range';
        slider.min = '1';
        slider.max = '50000';
        slider.value = '1'; // 基本的: 1 (即沒有額外的傳輸)
        slider.style.width = '200px';
        container.appendChild(slider);

        // 顯示價值
        const valueLabel = document.createElement('span');
        valueLabel.innerText = ' x1';
        valueLabel.style.marginLeft = '8px';
        container.appendChild(valueLabel);

        slider.addEventListener('input', function () {
            valueLabel.innerText = ' x' + slider.value;
        });

        document.body.appendChild(container);
        return slider;
    }

    // -- 2. WebSocket 訊息掛鉤 --
    // 通常 WebSocket.send節省
    const originalWSSend = WebSocket.prototype.send;
    // 在使用者介面中 kill multiplier 建立一個滑桿物件來讀取值
    const multiplierSlider = createMultiplierUI();

    WebSocket.prototype.send = function (data) {
        try {
            // 資料必須是要分析的字串
            let messageText;
            if (typeof data === 'string') {
                messageText = data;
            } else if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
                // 解碼為字串 (UTF-8)
                messageText = new TextDecoder("utf-8").decode(data);
            } else {
                messageText = data.toString();
            }

            // 確認:在訊息中 "Client:EnemyController:checkDamage" 包含在內嗎?
            if (messageText.indexOf("Client:EnemyController:checkDamage") !== -1) {
                // 傳送基本訊息(實際攻擊)
                originalWSSend.call(this, data);
                // 額外傳輸:取決於滑桿值(例如,如果值為 1,則無額外傳輸)
                const multiplier = parseInt(multiplierSlider.value, 10);
                // multiplier的 預設值 1: 0 extra, 2: 1 extra, ...
                const extraCount = multiplier - 1;
                if (extraCount > 0) {
                    for (let i = 0; i < extraCount; i++) {
                        // 短暫延遲後進行額外傳輸(每次延遲 20ms)
                        setTimeout(() => {
                            originalWSSend.call(this, data);
                        }, 20 * (i + 1));
                    }
                }
                return; // 由於已經被處理,因此返回
            }
        } catch (err) {
            console.error("Kill multiplier WS hook error:", err);
        }
        // 正常訊息原樣發送
        originalWSSend.call(this, data);
    };

    console.log("[Kill Multiplier] Script loaded and WS.send hooked.");
})();