Omoggle Cheat Suite - Working Version

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

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.greasyfork.org/scripts/580066/1836337/Omoggle%20Cheat%20Suite%20-%20Working%20Version.js

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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();

})();