Omoggle Cheat Suite - Working Version

Set custom score, auto-win, spoof camera, and more

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.org/scripts/580066/1836337/Omoggle%20Cheat%20Suite%20-%20Working%20Version.js

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Omoggle Cheat Suite - Working Version
// @namespace    https://omoggle.com
// @version      1.0
// @description  Set custom score, auto-win, spoof camera, and more
// @author       Venice
// @match        https://omoggle.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // CONFIGURATION
    const CONFIG = {
        targetScore: 9.5,        // Your desired score (0-10)
        autoWin: true,           // Always win matches
        spoofCamera: false,      // Use fake camera feed
        afkMode: false,          // Auto-queue next match
        customDelay: 100         // Delay before applying (ms)
    };

    // GUI STATE
    let guiVisible = true;
    let originalFaceMesh = null;
    let scoreHooked = false;

    // CREATE GUI
    function createGUI() {
        const style = document.createElement('style');
        style.textContent = `
            #omoggle-cheat-gui {
                position: fixed;
                top: 20px;
                right: 20px;
                width: 320px;
                background: linear-gradient(135deg, rgba(20, 15, 35, 0.95), rgba(30, 20, 50, 0.95));
                border: 1px solid rgba(139, 92, 246, 0.3);
                border-radius: 16px;
                padding: 20px;
                z-index: 999999;
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
                backdrop-filter: blur(20px);
                box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5), 0 0 40px rgba(139, 92, 246, 0.1);
                color: #fff;
            }
            #omoggle-cheat-gui h3 {
                margin: 0 0 15px 0;
                font-size: 18px;
                background: linear-gradient(90deg, #8b5cf6, #6366f1);
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
            }
            .cheat-section {
                margin-bottom: 15px;
                padding: 12px;
                background: rgba(255, 255, 255, 0.03);
                border-radius: 10px;
                border: 1px solid rgba(139, 92, 246, 0.1);
            }
            .cheat-section label {
                display: block;
                font-size: 12px;
                color: #a0aec0;
                margin-bottom: 8px;
            }
            .cheat-input {
                width: 100%;
                padding: 10px;
                background: rgba(15, 15, 30, 0.6);
                border: 1.5px solid rgba(139, 92, 246, 0.2);
                border-radius: 8px;
                color: #fff;
                font-size: 14px;
                box-sizing: border-box;
            }
            .cheat-btn {
                width: 100%;
                padding: 12px;
                margin-top: 8px;
                background: linear-gradient(135deg, #8b5cf6, #6366f1);
                color: #fff;
                border: none;
                border-radius: 8px;
                cursor: pointer;
                font-weight: 600;
                transition: all 0.3s;
            }
            .cheat-btn:hover {
                transform: translateY(-2px);
                box-shadow: 0 8px 25px rgba(139, 92, 246, 0.4);
            }
            .cheat-btn.active {
                background: linear-gradient(135deg, #10b981, #059669);
            }
            .toggle-row {
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 10px;
            }
            .toggle-switch {
                width: 44px;
                height: 24px;
                background: rgba(139, 92, 246, 0.2);
                border-radius: 12px;
                position: relative;
                cursor: pointer;
                transition: all 0.3s;
            }
            .toggle-switch.active {
                background: #8b5cf6;
            }
            .toggle-switch::after {
                content: '';
                position: absolute;
                width: 20px;
                height: 20px;
                background: #fff;
                border-radius: 50%;
                top: 2px;
                left: 2px;
                transition: all 0.3s;
            }
            .toggle-switch.active::after {
                left: 22px;
            }
            .minimize-btn {
                position: absolute;
                top: 10px;
                right: 10px;
                width: 24px;
                height: 24px;
                background: rgba(255, 255, 255, 0.1);
                border: none;
                border-radius: 6px;
                color: #fff;
                cursor: pointer;
                font-size: 14px;
            }
        `;
        document.head.appendChild(style);

        const gui = document.createElement('div');
        gui.id = 'omoggle-cheat-gui';
        gui.innerHTML = `
            <button class="minimize-btn" onclick="this.parentElement.style.display='none'">×</button>
            <h3>🔥 Omoggle Cheat Suite</h3>
            
            <div class="cheat-section">
                <label>Target Score (0-10)</label>
                <input type="number" class="cheat-input" id="score-input" value="${CONFIG.targetScore}" min="0" max="10" step="0.1">
                <button class="cheat-btn" id="apply-score">Apply Score Hack</button>
            </div>
            
            <div class="cheat-section">
                <div class="toggle-row">
                    <span>Auto Win</span>
                    <div class="toggle-switch ${CONFIG.autoWin ? 'active' : ''}" id="toggle-autowin"></div>
                </div>
                <div class="toggle-row">
                    <span>AFK Mode</span>
                    <div class="toggle-switch ${CONFIG.afkMode ? 'active' : ''}" id="toggle-afk"></div>
                </div>
            </div>
            
            <div class="cheat-section">
                <button class="cheat-btn" id="force-win">FORCE WIN NOW</button>
                <button class="cheat-btn" style="margin-top:8px;background:linear-gradient(135deg,#ef4444,#dc2626)" id="reset-elo">Reset ELO</button>
            </div>
        `;
        document.body.appendChild(gui);

        // Event listeners
        document.getElementById('apply-score').addEventListener('click', () => {
            CONFIG.targetScore = parseFloat(document.getElementById('score-input').value);
            applyScoreHack();
        });

        document.getElementById('toggle-autowin').addEventListener('click', function() {
            CONFIG.autoWin = !CONFIG.autoWin;
            this.classList.toggle('active');
        });

        document.getElementById('toggle-afk').addEventListener('click', function() {
            CONFIG.afkMode = !CONFIG.afkMode;
            this.classList.toggle('active');
        });

        document.getElementById('force-win').addEventListener('click', forceWin);
        document.getElementById('reset-elo').addEventListener('click', resetELO);
    }

    // CORE HACK FUNCTIONS

    // Hook into MediaPipe Face Mesh
    function hookFaceMesh() {
        if (scoreHooked) return;
        
        // Wait for MediaPipe to load
        const checkInterval = setInterval(() => {
            if (window.FaceMesh || window.mpFaceMesh) {
                clearInterval(checkInterval);
                interceptFaceMesh();
            }
        }, 100);
    }

    function interceptFaceMesh() {
        const FaceMeshClass = window.FaceMesh || window.mpFaceMesh?.FaceMesh;
        if (!FaceMeshClass || originalFaceMesh) return;

        originalFaceMesh = FaceMeshClass.prototype.send;

        FaceMeshClass.prototype.send = function(image) {
            return originalFaceMesh.call(this, image).then(results => {
                // Modify the results to give perfect facial landmarks
                if (results && results.multiFaceLandmarks) {
                    results.multiFaceLandmarks = generatePerfectLandmarks(results.multiFaceLandmarks);
                }
                return results;
            });
        };

        scoreHooked = true;
        console.log('[Omoggle Cheat] Face Mesh hooked successfully');
    }

    function generatePerfectLandmarks(original) {
        // Return modified landmarks that will score high
        // This simulates perfect symmetry and ideal ratios
        return original.map(face => {
            return face.map((landmark, index) => {
                // Create perfectly symmetrical, ideal proportions
                const idealPositions = getIdealLandmarkPosition(index);
                return {
                    x: idealPositions.x + (Math.random() * 0.02 - 0.01), // Tiny randomization
                    y: idealPositions.y + (Math.random() * 0.02 - 0.01),
                    z: landmark.z
                };
            });
        });
    }

    function getIdealLandmarkPosition(index) {
        // Return ideal positions for high scores
        // Based on PSL aesthetic ideals (chad facial structure)
        const t = index / 468;
        return {
            x: 0.3 + Math.sin(t * Math.PI * 2) * 0.2,
            y: 0.3 + Math.cos(t * Math.PI * 2) * 0.25
        };
    }

    // Direct score manipulation
    function applyScoreHack() {
        // Method 1: Override score calculation
        Object.defineProperty(window, 'lastScore', {
            get: () => CONFIG.targetScore,
            set: () => {},
            configurable: true
        });

        // Method 2: Hook into any score update functions
        const originalFetch = window.fetch;
        window.fetch = function(...args) {
            return originalFetch.apply(this, args).then(response => {
                const clone = response.clone();
                return clone.text().then(text => {
                    try {
                        const data = JSON.parse(text);
                        if (data.score !== undefined) {
                            data.score = CONFIG.targetScore;
                        }
                        if (data.yourScore !== undefined) {
                            data.yourScore = CONFIG.targetScore;
                        }
                        return new Response(JSON.stringify(data), {
                            status: response.status,
                            statusText: response.statusText,
                            headers: response.headers
                        });
                    } catch {
                        return response;
                    }
                });
            });
        };

        // Method 3: Direct DOM manipulation
        setInterval(() => {
            const scoreElements = document.querySelectorAll('[class*="score"], [class*="Score"], .score-value, #score');
            scoreElements.forEach(el => {
                if (el.textContent && !el.textContent.includes(CONFIG.targetScore.toString())) {
                    el.textContent = CONFIG.targetScore.toFixed(1);
                }
            });
        }, 100);

        console.log(`[Omoggle Cheat] Score hack applied: ${CONFIG.targetScore}`);
    }

    function forceWin() {
        // Force a win by manipulating match results
        const winEvent = new CustomEvent('matchResult', {
            detail: { winner: true, score: CONFIG.targetScore }
        });
        document.dispatchEvent(winEvent);

        // Try to find and click win buttons
        const buttons = document.querySelectorAll('button');
        buttons.forEach(btn => {
            if (btn.textContent.toLowerCase().includes('win') || 
                btn.textContent.toLowerCase().includes('next')) {
                btn.click();
            }
        });

        console.log('[Omoggle Cheat] Force win triggered');
    }

    function resetELO() {
        // Clear localStorage data to reset rank
        const keys = Object.keys(localStorage);
        keys.forEach(key => {
            if (key.toLowerCase().includes('omoggle') || 
                key.toLowerCase().includes('elo') || 
                key.toLowerCase().includes('rank')) {
                localStorage.removeItem(key);
            }
        });
        
        // Clear session data
        sessionStorage.clear();
        
        console.log('[Omoggle Cheat] ELO/Rank reset');
        location.reload();
    }

    // Auto-queue for AFK mode
    function setupAFKMode() {
        setInterval(() => {
            if (!CONFIG.afkMode) return;
            
            // Look for queue/play again buttons
            const playButtons = document.querySelectorAll('button');
            playButtons.forEach(btn => {
                const text = btn.textContent.toLowerCase();
                if (text.includes('play') || text.includes('queue') || 
                    text.includes('again') || text.includes('next')) {
                    btn.click();
                }
            });
        }, 2000);
    }

    // INITIALIZATION
    function init() {
        console.log('[Omoggle Cheat] Initializing...');
        
        // Wait for page to load
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', start);
        } else {
            start();
        }
    }

    function start() {
        createGUI();
        hookFaceMesh();
        applyScoreHack();
        setupAFKMode();
        
        console.log('[Omoggle Cheat] Ready! GUI loaded.');
    }

    // Start the cheat
    init();

})();