Cryzen.io

Todos em um: Models, Anti-recoil, ESP, Rewards, Performance

// ==UserScript==
// @name         Cryzen.io
// @description  Todos em um: Models, Anti-recoil, ESP, Rewards, Performance
// @version      1.0.2
// @match        https://cryzen.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cryzen.io
// @author       _PeDeCoca
// @grant        none
// @run-at       document-start
// @license      MIT
// @namespace PeDeCoca
// ==/UserScript==

// Utility functions
const { log, debug, warn, error } = console;

// Model visibility enhancement
const srcset = Object.getOwnPropertyDescriptor(Image.prototype, 'src').set;
function getSqareDataURL(width, height, color) {
    const canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    const context = canvas.getContext('2d');
    context.fillStyle = color;
    context.fillRect(0, 0, width, height);
    return canvas.toDataURL();
}

Object.defineProperty(Image.prototype, 'src', {
    set(value) {
        this._src = value;
        if (typeof value != 'string') return srcset.call(this, value);
        if (value.includes('colorMap')) {
            if (value.toLowerCase().includes('red')) {
                value = getSqareDataURL(1000, 1000, '#FF7373');
            } else if (value.toLowerCase().includes('blue')) {
                value = getSqareDataURL(1000, 1000, '#00FFFF');
            } else {
                value = getSqareDataURL(1000, 1000, '#73FF73');
            }
        }
        if (value.includes('map-')) {
            value = getSqareDataURL(4096, 2048, '#AAAAAA');
        }
        srcset.call(this, value);
    },
    get() { return this._src; }
});

// No spread and anti-recoil
const _random = Math.random;
Object.defineProperty(Math, 'random', {
    set(value) { _random = value; },
    get() {
        try {
            throw new Error();
        } catch (error) {
            if (error.stack.includes('shoot')) return _=>.5;
        }
        return _random;
    }
});

// Player ESP with wireframe
Object.defineProperty(Object.prototype, 'material', {
    get() { return this._material; },
    set(v) {
        if (this.type === 'SkinnedMesh' && this?.skeleton) {
            Object.defineProperties(v, {
                'depthTest': {
                    get() { return false; },
                    set(v) {},
                },
                'transparent': {
                    get() { return true; },
                    set(v) {},
                }
            });
            v.wireframe = true;
            v.opacity = 1;
        }
        this._material = v;
    }
});

// Add tracking system
function setupModelTracking() {
    const playerTracker = {
        enabled: false,
        players: new Set(),
        nearestPlayer: null,
        highlightColor: new Color(1, 0, 0) // vermelho
    };

    // Observer para detectar jogadores
    const observer = new MutationObserver((mutations) => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.classList?.contains('player-model')) {
                    playerTracker.players.add(node);
                }
            });
        });
    });

    // Adicionar toggle no menu
    function addTrackingToggle() {
        const container = document.querySelector('.toggle-container');
        const label = document.createElement('label');
        label.innerHTML = `
            <input type="checkbox" id="toggle-tracking"> Target Track
        `;
        container.appendChild(label);

        document.getElementById('toggle-tracking').onchange = (e) => {
            playerTracker.enabled = e.target.checked;
            if (!e.target.checked) {
                // Limpar highlights quando desativado
                playerTracker.players.forEach(player => {
                    if (player?.material) {
                        player.material.emissive = new Color(0, 0, 0);
                    }
                });
            }
        };
    }

    // Update loop melhorado
    function trackerLoop() {
        if (!playerTracker.enabled) return;

        const center = {
            x: window.innerWidth / 2,
            y: window.innerHeight / 2
        };

        let closest = null;
        let minDistance = Infinity;

        // Limpar highlight anterior
        if (playerTracker.nearestPlayer?.material) {
            playerTracker.nearestPlayer.material.emissive = new Color(0, 0, 0);
        }

        // Encontrar jogador mais próximo
        document.querySelectorAll('.player-model').forEach(player => {
            if (!player.isConnected) return;

            const rect = player.getBoundingClientRect();
            if (!rect.width || !rect.height) return;

            const distance = Math.hypot(
                center.x - (rect.left + rect.width / 2),
                center.y - (rect.top + rect.height / 2)
            );

            if (distance < minDistance) {
                minDistance = distance;
                closest = player;
            }
        });

        // Destacar novo alvo
        if (closest?.material) {
            closest.material.emissive = playerTracker.highlightColor;
            playerTracker.nearestPlayer = closest;

            if (config.debug) {
                console.log('[Target Track] Found:', {
                    distance: minDistance,
                    element: closest
                });
            }
        }

        requestAnimationFrame(trackerLoop);
    }

    // Inicializar
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
    addTrackingToggle();
    trackerLoop();

    return playerTracker;
}

// Free rewards system
function skipRewardedBreak() {
    return new Promise(resolve => resolve(true));
}

Object.defineProperties(Object.prototype, {
    'rewardedBreak': {
        get() { return skipRewardedBreak.bind(this); },
        set() {},
        enumerable: false,
    },
    'gameanalytics': {
        get() {
            return {
                GameAnalytics: {
                    addAdEvent: () => {},
                }
                // ...existing gameanalytics mock...
            };
        },
        set(v) {},
        enumerable: false,
    }
});

// Enhanced menu system
(function() {
    // Add config object with blocked domains
    const config = {
        active: true,
        autoReward: true,
        debug: true,
        noSpread: true, // Ativo por padrão
        esp: true, // Ativo por padrão
        blockedDomains: new Set([
            'poki.com',
            'poki-gdn.com',
            'google-analytics.com',
            'doubleclick.net',
            'adservice.google.com',
            'analytics.google.com',
            'pagead2.googlesyndication.com',
            'googleads.g.doubleclick.net',
            'partner.googleadservices.com',
            'tpc.googlesyndication.com',
            'google.com/pagead',
            'google.com/adsense',
            'advertising.com',
            'adnxs.com',
            'adsense.google.com'
        ])
    };

    // Add ad blocking functions
    const originalFetch = window.fetch;
    window.fetch = async function(...args) {
        try {
            const url = new URL(args[0]);
            if (config.blockedDomains.has(url.hostname)) {
                if (config.debug) console.log('[AdBlock] Blocked fetch:', url.hostname);
                return new Response('', { status: 200 });
            }
        } catch {}
        return originalFetch.apply(this, arguments);
    };

    const originalXHR = window.XMLHttpRequest;
    window.XMLHttpRequest = function() {
        const xhr = new originalXHR();
        const originalOpen = xhr.open;
        xhr.open = function(method, url) {
            try {
                const urlObj = new URL(url);
                if (config.blockedDomains.has(urlObj.hostname)) {
                    if (config.debug) console.log('[AdBlock] Blocked XHR:', urlObj.hostname);
                    return;
                }
            } catch {}
            return originalOpen.apply(this, arguments);
        };
        return xhr;
    };

    // Block ads on document level
    function removeAdsElements() {
        const adSelectors = [
            'ins.adsbygoogle',
            'div[id*="google_ads"]',
            'div[id*="advertisement"]',
            'div[class*="ad-"]',
            'div[class*="ads-"]',
            'iframe[src*="googlead"]',
            'iframe[src*="doubleclick"]',
            'div[aria-label*="Advertisement"]'
        ];

        const observer = new MutationObserver((mutations) => {
            for (const selector of adSelectors) {
                document.querySelectorAll(selector).forEach(ad => {
                    ad.remove();
                    if (config.debug) console.log('[AdBlock] Removed ad element:', selector);
                });
            }
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }

    // Override window.open to block popup ads
    const originalWindowOpen = window.open;
    window.open = function(url, ...args) {
        try {
            const urlObj = new URL(url);
            if (config.blockedDomains.has(urlObj.hostname)) {
                if (config.debug) console.log('[AdBlock] Blocked popup:', url);
                return null;
            }
        } catch {}
        return originalWindowOpen.apply(this, arguments);
    };

    const styles = `
        #hack-menu {
            position: fixed;
            top: 50px;
            left: 10px;
            background: rgba(0,0,0,0.8);
            color: #00ff00;
            padding: 15px;
            border-radius: 10px;
            z-index: 9999;
            width: 200px;
            font-family: Arial, sans-serif;
            border: 2px solid #00ff00;
            cursor: move;
            animation: rainbow 2s infinite;
            user-select: none;
        }
        #hack-menu h3 {
            text-align: center;
            margin-bottom: 10px;
            color: #00ff00;
            display: flex;
            justify-content: center;
            align-items: center;
            position: relative;
        }
        .minimize-btn {
            position: absolute;
            top: 5px;
            right: 5px;
            background: none;
            border: none;
            color: #00ff00;
            cursor: pointer;
            font-size: 16px;
            padding: 5px;
        }
        .toggle-container {
            display: flex;
            flex-direction: column;
            gap: 10px;
            margin: 15px 0;
        }
        .toggle-container label {
            display: flex;
            align-items: center;
            gap: 8px;
            color: #00ff00;
            cursor: pointer;
        }
        .button-container {
            display: flex;
            flex-direction: column;
            gap: 5px;
        }
        .control-btn {
            background-color: #333;
            border: 1px solid #00ff00;
            color: #00ff00;
            padding: 8px;
            cursor: pointer;
            border-radius: 5px;
            width: 100%;
        }
        .control-btn:hover {
            background-color: #444;
        }
        @keyframes rainbow {
            0% { border-color: red; }
            33% { border-color: #00ff00; }
            66% { border-color: blue; }
            100% { border-color: red; }
        }
        .floating-icon {
            position: fixed;
            top: 50px;
            left: 10px;
            width: 40px;
            height: 40px;
            background: rgba(0,0,0,0);
            border-radius: 50%;
            display: none;
            justify-content: center;
            align-items: center;
            cursor: pointer;
            z-index: 9999;
            border: 2px solid #00ff00;
            animation: rainbow 2s infinite;
        }
        .discord-icon {
            width: 50px;
            height: 50px;
            margin-left: 10px;
            transition: transform 0.2s;
        }
        .discord-icon:hover {
            transform: scale(1.2);
        }
    `;

    function createMenu() {
        const menu = document.createElement('div');
        menu.id = 'hack-menu';
        menu.innerHTML = `
            <button class="minimize-btn">−</button>
            <h3>
                <span>_PeDeCoca</span>
                <a href="https://discord.gg/RWjQcR6f5T" target="_blank">
                    <img src="https://img.icons8.com/?size=100&id=61604&format=png&color=000000" alt="Discord" class="discord-icon">
                </a>
            </h3>

            <div class="toggle-container">
                <label>
                    <input type="checkbox" id="toggle-esp" checked> ESP Vision
                </label>
                <label>
                    <input type="checkbox" id="toggle-nospread" checked> No Spread
                </label>
                <label>
                    <input type="checkbox" id="toggle-rewards" checked> Auto Rewards
                </label>
            </div>

            <div class="button-container">
                <button class="control-btn" id="quality-high">High Graphics</button>
                <button class="control-btn" id="quality-medium">Medium Graphics</button>
                <button class="control-btn" id="quality-low">Low Graphics</button>
            </div>

            <button id="reset-all" class="control-btn" style="margin-top: 15px">Reset All</button>
        `;

        const floatingIcon = document.createElement('div');
        floatingIcon.className = 'floating-icon';
        floatingIcon.innerHTML = '👹';

        document.body.appendChild(menu);
        document.body.appendChild(floatingIcon);

        setupControls();
        makeMenuDraggable(menu, floatingIcon);
    }

    // Add graphics quality functions
    function setGraphicsQuality(quality) {
        switch(quality) {
            case 'High':
                resetGraphics();
                break;
            case 'Medium':
                applyMediumGraphics();
                break;
            case 'Low':
                applyLowGraphics();
                break;
        }
    }

    function resetGraphics() {
        document.querySelectorAll('.map-element').forEach(element => {
            element.style.removeProperty('backgroundColor');
            element.style.removeProperty('opacity');
            element.style.removeProperty('border');
        });
        // Reset skybox and other elements
        const skybox = document.querySelector('.skybox');
        if (skybox) skybox.style.display = 'block';
    }

    function applyMediumGraphics() {
        document.querySelectorAll('.map-element').forEach(element => {
            element.style.opacity = '0.8';
            element.style.backgroundColor = '#444';
        });
    }

    function applyLowGraphics() {
        // Remove skybox
        const skybox = document.querySelector('.skybox');
        if (skybox) skybox.style.display = 'none';

        // Simplify map elements
        document.querySelectorAll('.map-element').forEach(element => {
            element.style.backgroundColor = 'gray';
            element.style.opacity = '0.5';
            element.style.border = 'none';
        });
    }

    // Remover antigas tentativas de controle de cor e opacidade no setupControls
    function setupControls() {
        document.getElementById('toggle-esp').onchange = (e) => {
            const enabled = e.target.checked;
            // Toggle ESP visibility with wireframe
            document.querySelectorAll('.player-model').forEach(player => {
                if (player?.material) {
                    player.material.depthTest = !enabled;
                    player.material.transparent = enabled;
                    player.material.wireframe = enabled;
                    player.material.opacity = 1;
                }
            });
        };

        document.getElementById('toggle-nospread').onchange = (e) => {
            // Toggle no spread functionality
            config.noSpread = e.target.checked;
        };

        document.getElementById('toggle-rewards').onchange = (e) => {
            config.autoReward = e.target.checked;
        };

        // Graphics quality buttons
        document.getElementById('quality-high').onclick = () => setGraphicsQuality('High');
        document.getElementById('quality-medium').onclick = () => setGraphicsQuality('Medium');
        document.getElementById('quality-low').onclick = () => setGraphicsQuality('Low');

        // Reset button with proper graphics reset
        document.getElementById('reset-all').onclick = () => {
            // Reset all toggles
            document.querySelectorAll('input[type="checkbox"]').forEach(cb => cb.checked = false);

            // Reset configurations
            config.autoReward = false;
            config.noSpread = false;

            // Reset graphics to high quality
            setGraphicsQuality('High');

            // Additional resets if needed
            resetGraphics();
        };

        // Minimize button
        const menu = document.getElementById('hack-menu');
        const floatingIcon = document.querySelector('.floating-icon');
        const minimizeBtn = menu.querySelector('.minimize-btn');

        minimizeBtn.onclick = () => {
            menu.style.display = 'none';
            floatingIcon.style.display = 'flex';
        };

        floatingIcon.onclick = () => {
            menu.style.display = 'block';
            floatingIcon.style.display = 'none';
        };
    }

    function makeMenuDraggable(menu, floatingIcon) {
        [menu, floatingIcon].forEach(element => {
            let isDragging = false;
            let currentX;
            let currentY;
            let initialX;
            let initialY;

            element.addEventListener('mousedown', (e) => {
                if (e.target.tagName === 'BUTTON' || e.target.tagName === 'INPUT') return;

                isDragging = true;
                initialX = e.clientX - element.offsetLeft;
                initialY = e.clientY - element.offsetTop;
            });

            document.addEventListener('mousemove', (e) => {
                if (!isDragging) return;

                e.preventDefault();
                currentX = e.clientX - initialX;
                currentY = e.clientY - initialY;

                element.style.left = `${currentX}px`;
                element.style.top = `${currentY}px`;
            });

            document.addEventListener('mouseup', () => {
                isDragging = false;
            });
        });
    }

    // Initialize everything
    function initialize() {
        const styleSheet = document.createElement('style');
        styleSheet.textContent = styles + `
            .adsbygoogle { display: none !important; }
            [class*="advertisement"] { display: none !important; }
            [id*="google_ads"] { display: none !important; }
        `;
        document.head.appendChild(styleSheet);

        createMenu();
        removeAdsElements();

        // Inicializar tudo em ordem correta
        window.playerTracker = setupModelTracking();

        // Ativar todas as funcionalidades por padrão
        setTimeout(() => {
            // Ativar ESP
            document.querySelectorAll('.player-model').forEach(player => {
                if (player?.material) {
                    player.material.depthTest = false;
                    player.material.transparent = true;
                }
            });

            // Ativar No Spread
            config.noSpread = true;

            // Ativar Auto Rewards
            config.autoReward = true;

            // Aplicar qualidade gráfica baixa por padrão
            setGraphicsQuality('Low');
        }, 1000); // Pequeno delay para garantir que tudo foi carregado

        // Adicionar sistema de tracking
        setupModelTracking();

        // Inicializar tracking system
        const playerTracker = setupModelTracking();
        window.playerTracker = playerTracker; // Para debug
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initialize);
    } else {
        initialize();
    }
})();

// ...rest of existing code...