RSWARE — Omoggle 1v1 (Safe Core)

Score spoof via WS + display patches only

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.sleazyfork.org/scripts/581938/1847110/RSWARE%20%E2%80%94%20Omoggle%201v1%20%28Safe%20Core%29.js

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         RSWARE — Omoggle 1v1 (Safe Core)
// @namespace    [tampermonkey.net](http://tampermonkey.net/)
// @version      9.1
// @description  Score spoof via WS + display patches only
// @match        *://*.omoggle.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    const CFG = {
        scoreSpoof: false,
        displayWin: false,
        liveSpoof: false,
        scoreVal: 10,
        enemySpoof: false,
        enemyVal: 1.0
    };

    let hookedWs = null;
    let floodTimer = null;
    let pktCount = 0;

    // === WebSocket hook (stable part) ===
    const OrigWS = window.WebSocket;
    window.WebSocket = function(url, proto) {
        const ws = proto ? new OrigWS(url, proto) : new OrigWS(url);
        if (url && url.includes('omoggle.com')) {
            hookedWs = ws;
        }

        const origSend = ws.send.bind(ws);
        ws.send = function(data) {
            if (CFG.scoreSpoof && typeof data === 'string') {
                try {
                    const p = JSON.parse(data);
                    if (p.type === 'score_update' && p.payload) {
                        p.payload.score = CFG.scoreVal;
                        pktCount++;
                        data = JSON.stringify(p);
                    }
                    if (p.type === 'score_submit' && p.payload) {
                        p.payload.self_score = CFG.scoreVal;
                        pktCount++;
                        data = JSON.stringify(p);
                    }
                } catch (_) {}
            }
            return origSend(data);
        };

        ws.addEventListener('message', function(e) {
            if (typeof e.data !== 'string') return;
            try {
                const p = JSON.parse(e.data);
                let changed = false;

                if (p.type === 'live_score' && p.payload) {
                    if (CFG.liveSpoof) { p.payload.your_score = CFG.scoreVal; changed = true; }
                    if (CFG.enemySpoof) { p.payload.opponent_score = CFG.enemyVal; changed = true; }
                }

                if (p.type === 'match_result' && p.payload) {
                    if (CFG.displayWin) {
                        p.payload.result = 'win';
                        p.payload.your_score = CFG.scoreVal;
                        changed = true;
                    }
                    if (CFG.enemySpoof) {
                        p.payload.opponent_score = CFG.enemyVal;
                        changed = true;
                    }
                }

                if (changed) {
                    const newMsg = new MessageEvent('message', {
                        data: JSON.stringify(p),
                        origin: e.origin
                    });
                    e.stopImmediatePropagation();
                    ws.dispatchEvent(newMsg);
                    return;
                }
            } catch (_) {}
        });

        return ws;
    };
    Object.assign(window.WebSocket, OrigWS);
    window.WebSocket.prototype = OrigWS.prototype;

    // Add your UI and toggles here if needed
})();