Nexus Optimizer Pro

Maximiza FPS, reduce ping y optimiza el rendimiento en resurviv.biz y survev.io

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

Advertisement:

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

Advertisement:

// ==UserScript==
// @name         Nexus Optimizer Pro
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Maximiza FPS, reduce ping y optimiza el rendimiento en resurviv.biz y survev.io
// @author       ! System
// @icon         https://i.ibb.co/35RDsjMg/Chat-GPT-Image-12-jul-2026-13-15-49.png
// @match        *://survev.io/*
// @match        *://*.survev.io/*
// @match        *://resurviv.biz/*
// @match        *://*.resurviv.biz/*
// @license      MIT
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // ---------- CONFIGURACIÓN DE OPTIMIZACIONES ----------
    const OPT = {
        fpsUncap: true,
        disableInterpolation: true,
        disableHighResTex: true,
        disableScreenShake: true,
        reducePingInterval: true,
        webSocketBinary: true,
        hideMainMenuElements: true
    };

    const applied = {
        fpsUncap: false,
        interpolation: false,
        highResTex: false,
        screenShake: false,
        pingInterval: false,
        webSocketBinary: false,
        menuElementsHidden: false
    };

    const monitor = {
        fps: 0,
        ping: 0,
        players: 0,
        menuVisible: true
    };

    let fpsFrameCount = 0;
    let fpsLastTime = performance.now();

    // ---------- FUNCIONES DE BÚSQUEDA ----------
    function findConfig() {
        const paths = [
            () => window.config,
            () => window.ConfigManager?.config,
            () => window.game?.config,
            () => window.game?.m_config,
            () => window.g?.config,
            () => window.app?.config,
            () => window._config,
            () => window.surviv_config,
            () => window.resurviv_config
        ];
        for (let fn of paths) {
            try { const cfg = fn(); if (cfg && typeof cfg === 'object') return cfg; } catch(e) {}
        }
        return null;
    }

    function findGame() {
        const paths = [
            () => window.game,
            () => window.Game,
            () => window.g,
            () => window._game,
            () => window.app?.game,
            () => window.app
        ];
        for (let fn of paths) {
            try { const g = fn(); if (g && typeof g === 'object') return g; } catch(e) {}
        }
        return null;
    }

    function applyAllOptimizations() {
        const config = findConfig();
        const game = findGame();
        let anyApplied = false;

        // FPS Uncap
        if (OPT.fpsUncap) {
            try {
                if (game?.maxFps !== undefined && game.maxFps < 999) { game.maxFps = 999; applied.fpsUncap = true; anyApplied = true; }
                else if (game?.fpsMax !== undefined && game.fpsMax < 999) { game.fpsMax = 999; applied.fpsUncap = true; anyApplied = true; }
                else if (config?.maxFps !== undefined && config.maxFps < 999) { config.maxFps = 999; applied.fpsUncap = true; anyApplied = true; }
                else if (config?.fpsMax !== undefined && config.fpsMax < 999) { config.fpsMax = 999; applied.fpsUncap = true; anyApplied = true; }
            } catch(e) {}
        }

        // Interpolación
        if (OPT.disableInterpolation) {
            try {
                if (config?.interpolation !== undefined && config.interpolation !== false) { config.interpolation = false; applied.interpolation = true; anyApplied = true; }
                else if (typeof config?.set === 'function') { config.set('interpolation', false); applied.interpolation = true; anyApplied = true; }
            } catch(e) {}
        }

        // Texturas HD
        if (OPT.disableHighResTex) {
            try {
                if (config?.highResTex !== undefined && config.highResTex !== false) { config.highResTex = false; applied.highResTex = true; anyApplied = true; }
                else if (typeof config?.set === 'function') { config.set('highResTex', false); applied.highResTex = true; anyApplied = true; }
            } catch(e) {}
        }

        // Screen Shake
        if (OPT.disableScreenShake) {
            try {
                if (config?.screenShake !== undefined && config.screenShake !== false) { config.screenShake = false; applied.screenShake = true; anyApplied = true; }
                else if (typeof config?.set === 'function') { config.set('screenShake', false); applied.screenShake = true; anyApplied = true; }
            } catch(e) {}
        }

        // Ping Interval
        if (OPT.reducePingInterval) {
            const target = 100;
            try {
                if (config?.pingInterval !== undefined && config.pingInterval > target) { config.pingInterval = target; applied.pingInterval = true; anyApplied = true; }
                else if (typeof config?.set === 'function') { config.set('pingInterval', target); applied.pingInterval = true; anyApplied = true; }
            } catch(e) {}
        }

        // Ocultar elementos del menú principal
        if (OPT.hideMainMenuElements && !applied.menuElementsHidden) {
            try {
                const selectors = ['.main-menu-background','.menu-background-animation','.ad-container','.main-menu-video','#main-menu-ad'];
                let c = 0;
                selectors.forEach(sel => document.querySelectorAll(sel).forEach(el => { el.style.display = 'none'; c++; }));
                if (c > 0) { applied.menuElementsHidden = true; anyApplied = true; }
            } catch(e) {}
        }

        return anyApplied;
    }

    function updateFPS() {
        fpsFrameCount++;
        const now = performance.now();
        if (now - fpsLastTime >= 1000) {
            monitor.fps = Math.round((fpsFrameCount * 1000) / (now - fpsLastTime));
            fpsFrameCount = 0;
            fpsLastTime = now;
        }
        requestAnimationFrame(updateFPS);
    }

    function updatePlayers() {
        try {
            const el = document.querySelector('.js-ui-players-alive');
            if (el) {
                const n = parseInt(el.textContent.trim(), 10);
                if (!isNaN(n)) monitor.players = n;
            }
        } catch(e) {}
    }

    function setupPingDetection() {
        const OrigWebSocket = window.WebSocket;
        window.WebSocket = function(url, protocols) {
            const ws = new OrigWebSocket(url, protocols);
            if (typeof url === 'string' && (url.includes('ptc') || url.includes('gameId'))) {
                if (OPT.webSocketBinary) {
                    ws.binaryType = 'arraybuffer';
                    applied.webSocketBinary = true;
                }
                let lastSend = 0;
                const origSend = ws.send;
                ws.send = function(data) {
                    if (data instanceof ArrayBuffer && data.byteLength === 1) lastSend = performance.now();
                    return origSend.call(this, data);
                };
                ws.addEventListener('message', function(e) {
                    if (e.data instanceof ArrayBuffer && e.data.byteLength === 1 && lastSend > 0) {
                        monitor.ping = Math.round(performance.now() - lastSend);
                        lastSend = 0;
                    }
                });
            }
            return ws;
        };
    }

    function createMenu() {
        const menu = document.createElement('div');
        menu.id = 'nx-optimizer-menu';
        menu.innerHTML = `
            <div id="nx-opt-header">
                <span class="nx-opt-title">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                        <polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"/>
                        <line x1="12" y1="22" x2="12" y2="15.5"/>
                        <polyline points="22 8.5 12 15.5 2 8.5"/>
                    </svg>
                    Nexus Optimizer
                </span>
                <button id="nx-opt-close">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                        <line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
                    </svg>
                </button>
            </div>
            <div id="nx-opt-body">
                <div class="nx-opt-row">
                    <span class="nx-opt-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20V10M18 20V4M6 20v-6"/></svg> FPS</span>
                    <span class="nx-opt-value" id="nx-fps">0</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><line x1="12" y1="6" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg> Ping</span>
                    <span class="nx-opt-value" id="nx-ping">0 ms</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> Players</span>
                    <span class="nx-opt-value" id="nx-players">0</span>
                </div>
                <hr>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">FPS Uncap</span>
                    <span class="nx-opt-status" id="nx-uncap">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">Interpolation</span>
                    <span class="nx-opt-status" id="nx-interp">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">HighRes Tex</span>
                    <span class="nx-opt-status" id="nx-hires">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">Screen Shake</span>
                    <span class="nx-opt-status" id="nx-shake">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">Ping Interval</span>
                    <span class="nx-opt-status" id="nx-pingint">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">WebSocket Bin</span>
                    <span class="nx-opt-status" id="nx-wsbin">✗</span>
                </div>
                <div class="nx-opt-row">
                    <span class="nx-opt-label">Menu Clean</span>
                    <span class="nx-opt-status" id="nx-hidemen">✗</span>
                </div>
            </div>
        `;

        const style = document.createElement('style');
        style.textContent = `
            #nx-optimizer-menu {
                position: fixed;
                top: 20px;
                right: 20px;
                width: 260px;
                background: rgba(18, 18, 24, 0.92);
                backdrop-filter: blur(14px);
                -webkit-backdrop-filter: blur(14px);
                border: 1px solid rgba(255,255,255,0.08);
                border-radius: 16px;
                color: #f0f0f0;
                font-family: 'Segoe UI', 'Inter', system-ui, sans-serif;
                font-size: 13px;
                z-index: 99999;
                box-shadow: 0 8px 32px rgba(0,0,0,0.6);
                display: flex;
                flex-direction: column;
                overflow: hidden;
                animation: nxSlideIn 0.3s ease-out;
            }
            @keyframes nxSlideIn {
                from { opacity: 0; transform: translateY(-10px); }
                to { opacity: 1; transform: translateY(0); }
            }
            #nx-opt-header {
                display: flex;
                justify-content: space-between;
                align-items: center;
                padding: 8px 12px;
                background: rgba(10, 10, 14, 0.95);
                border-bottom: 1px solid rgba(255,255,255,0.08);
                font-weight: 600;
                font-size: 14px;
            }
            .nx-opt-title {
                display: flex;
                align-items: center;
                gap: 8px;
                color: #ccc;
            }
            .nx-opt-title svg {
                color: #ff4444;
            }
            #nx-opt-close {
                background: none;
                border: none;
                color: #888;
                cursor: pointer;
                padding: 2px;
                display: flex;
                align-items: center;
                transition: color 0.2s;
            }
            #nx-opt-close:hover { color: #fff; }
            #nx-opt-body {
                padding: 12px 14px;
            }
            .nx-opt-row {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 8px;
            }
            .nx-opt-label {
                display: flex;
                align-items: center;
                gap: 6px;
                color: #aaa;
            }
            .nx-opt-label svg {
                color: #888;
            }
            .nx-opt-value {
                font-weight: 600;
                color: #fff;
            }
            .nx-opt-status {
                font-weight: 600;
                font-size: 14px;
            }
            .nx-opt-status:contains('✓') { color: #4caf50; }
            hr {
                border: 0.5px solid rgba(255,255,255,0.08);
                margin: 8px 0;
            }
        `;
        document.head.appendChild(style);
        document.body.appendChild(menu);

        // Eventos
        document.getElementById('nx-opt-close').addEventListener('click', () => {
            menu.style.display = 'none';
            monitor.menuVisible = false;
        });

        document.addEventListener('keydown', (e) => {
            if (e.key === 'p' || e.key === 'P') {
                monitor.menuVisible = !monitor.menuVisible;
                menu.style.display = monitor.menuVisible ? 'flex' : 'none';
            }
        });

        // Actualizar cada segundo
        setInterval(() => {
            document.getElementById('nx-fps').textContent = monitor.fps;
            document.getElementById('nx-ping').textContent = monitor.ping + ' ms';
            document.getElementById('nx-players').textContent = monitor.players;

            document.getElementById('nx-uncap').textContent = applied.fpsUncap ? '✓' : '✗';
            document.getElementById('nx-uncap').style.color = applied.fpsUncap ? '#4caf50' : '#ff4444';
            document.getElementById('nx-interp').textContent = applied.interpolation ? '✓' : '✗';
            document.getElementById('nx-interp').style.color = applied.interpolation ? '#4caf50' : '#ff4444';
            document.getElementById('nx-hires').textContent = applied.highResTex ? '✓' : '✗';
            document.getElementById('nx-hires').style.color = applied.highResTex ? '#4caf50' : '#ff4444';
            document.getElementById('nx-shake').textContent = applied.screenShake ? '✓' : '✗';
            document.getElementById('nx-shake').style.color = applied.screenShake ? '#4caf50' : '#ff4444';
            document.getElementById('nx-pingint').textContent = applied.pingInterval ? '✓' : '✗';
            document.getElementById('nx-pingint').style.color = applied.pingInterval ? '#4caf50' : '#ff4444';
            document.getElementById('nx-wsbin').textContent = applied.webSocketBinary ? '✓' : '✗';
            document.getElementById('nx-wsbin').style.color = applied.webSocketBinary ? '#4caf50' : '#ff4444';
            document.getElementById('nx-hidemen').textContent = applied.menuElementsHidden ? '✓' : '✗';
            document.getElementById('nx-hidemen').style.color = applied.menuElementsHidden ? '#4caf50' : '#ff4444';

            updatePlayers();
        }, 1000);
    }

    function tryApply() {
        const ok = applyAllOptimizations();
        if (!ok) {
            setTimeout(tryApply, 3000);
        } else {
            setTimeout(tryApply, 10000);
        }
    }

    function init() {
        console.log('[Nexus Optimizer] Starting...');
        setupPingDetection();
        updateFPS();
        createMenu();
        setTimeout(tryApply, 2000);
    }

    if (document.readyState === 'complete' || document.readyState === 'interactive') {
        init();
    } else {
        window.addEventListener('DOMContentLoaded', init);
    }
})();