YoHoHo.io OpenSource

inf kills, inf score, inf gold, inf wins and more

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         YoHoHo.io OpenSource
// @namespace    http://tampermonkey.net/
// @version      4.0
// @description  inf kills, inf score, inf gold, inf wins and more
// @author       YourName
// @match        https://yohoho.io/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    window.addEventListener('load', () => {
        // Create main container
        const panel = document.createElement('div');
        panel.id = 'yh-custom-panel';
        panel.style.position = 'fixed';
        panel.style.top = '50px';
        panel.style.right = '50px';
        panel.style.zIndex = '100000';
        panel.style.backgroundColor = '#111827';
        panel.style.color = '#f3f4f6';
        panel.style.borderRadius = '12px';
        panel.style.fontFamily = '"Segoe UI", system-ui, sans-serif';
        panel.style.boxShadow = '0 20px 25px -5px rgba(0,0,0,0.5), 0 10px 10px -5px rgba(0,0,0,0.5)';
        panel.style.width = '240px';
        panel.style.userSelect = 'none';
        panel.style.border = '1px solid #374151';

        // Add Header Container
        const header = document.createElement('div');
        header.style.padding = '12px';
        header.style.background = '#1f2937';
        header.style.borderTopLeftRadius = '11px';
        header.style.borderTopRightRadius = '11px';
        header.style.borderBottom = '1px solid #374151';
        header.style.cursor = 'move';
        header.style.fontWeight = 'bold';
        header.style.color = '#f59e0b';
        header.style.fontSize = '14px';
        header.style.display = 'flex';
        header.style.justifyContent = 'space-between';
        header.style.alignItems = 'center';

        // Title text inside header
        const titleText = document.createElement('span');
        titleText.innerHTML = '🏴‍☠️ OpenSource 🏴‍';
        header.appendChild(titleText);

        // Collapse Button (+ / -)
        const toggleBtn = document.createElement('span');
        toggleBtn.innerText = '−'; // Starts open (minus sign)
        toggleBtn.style.cursor = 'pointer';
        toggleBtn.style.padding = '0 5px';
        toggleBtn.style.fontSize = '16px';
        toggleBtn.style.color = '#9ca3af';
        toggleBtn.style.fontWeight = 'bold';
        header.appendChild(toggleBtn);

        panel.appendChild(header);

        // Add Vertical Body
        const body = document.createElement('div');
        body.style.padding = '15px';
        body.style.display = 'flex';
        body.style.flexDirection = 'column';
        body.style.gap = '10px';
        panel.appendChild(body);

        // List of all accessible profile variables
        const variables = [
            { key: 'coinsOwned', label: 'Coins' },
            { key: 'playerXP', label: 'Player XP' },
            { key: 'abBotSkillLevel', label: 'Bot Level' },
            { key: 'totalWins', label: 'Wins' },
            { key: 'totalKills', label: 'Total Kills' },
            { key: 'bestKills', label: 'Best Kills' },
            { key: 'bestScore', label: 'Best Score' },
            { key: 'gamesStarted', label: 'Matches' }
        ];

        // Dynamically build vertical forms (stacked one under the other)
        variables.forEach(item => {
            const row = document.createElement('div');

            const label = document.createElement('label');
            label.style.display = 'block';
            label.style.fontSize = '11px';
            label.style.color = '#9ca3af';
            label.style.marginBottom = '4px';
            label.style.fontWeight = '500';
            label.innerText = item.label;

            const input = document.createElement('input');
            input.type = 'number';
            input.className = 'yh-input';
            input.dataset.key = item.key;
            input.value = localStorage.getItem(item.key) || '0';
            input.style.width = '100%';
            input.style.padding = '6px 8px';
            input.style.boxSizing = 'border-box';
            input.style.backgroundColor = '#1f2937';
            input.style.border = '1px solid #4b5563';
            input.style.borderRadius = '6px';
            input.style.color = '#fff';
            input.style.fontSize = '13px';

            row.appendChild(label);
            row.appendChild(input);
            body.appendChild(row);
        });

        // Add Action Button
        const saveBtn = document.createElement('button');
        saveBtn.innerText = 'Save & Sync';
        saveBtn.style.width = '100%';
        saveBtn.style.padding = '8px';
        saveBtn.style.marginTop = '4px';
        saveBtn.style.backgroundColor = '#d97706';
        saveBtn.style.color = '#fff';
        saveBtn.style.border = 'none';
        saveBtn.style.borderRadius = '6px';
        saveBtn.style.cursor = 'pointer';
        saveBtn.style.fontWeight = 'bold';
        saveBtn.style.fontSize = '13px';
        saveBtn.style.transition = 'background 0.2s';

        saveBtn.onmouseover = () => saveBtn.style.backgroundColor = '#b45309';
        saveBtn.onmouseout = () => saveBtn.style.backgroundColor = '#d97706';

        body.appendChild(saveBtn);
        document.body.appendChild(panel);

        // Collapse/Expand Functionality
        toggleBtn.addEventListener('click', (e) => {
            e.stopPropagation(); // Prevent drag triggers on click
            if (body.style.display === 'none') {
                body.style.display = 'flex';
                toggleBtn.innerText = '−'; // Unicode minus sign
                panel.style.borderBottomRightRadius = '12px';
                panel.style.borderBottomLeftRadius = '12px';
            } else {
                body.style.display = 'none';
                toggleBtn.innerText = '+'; // Plus sign
                panel.style.borderBottomRightRadius = '0px';
                panel.style.borderBottomLeftRadius = '0px';
            }
        });

        // Save Functionality
        saveBtn.addEventListener('click', () => {
            const inputs = body.querySelectorAll('.yh-input');
            inputs.forEach(input => {
                localStorage.setItem(input.dataset.key, input.value);
            });
            window.location.reload();
        });

        // Make the Panel Draggable via Header
        let isDragging = false;
        let offsetX, offsetY;

        header.addEventListener('mousedown', (e) => {
            if (e.target === toggleBtn) return; // Don't drag if clicking the +/- button
            isDragging = true;
            offsetX = e.clientX - panel.getBoundingClientRect().left;
            offsetY = e.clientY - panel.getBoundingClientRect().top;
            header.style.cursor = 'grabbing';
        });

        document.addEventListener('mousemove', (e) => {
            if (!isDragging) return;
            panel.style.left = `${e.clientX - offsetX}px`;
            panel.style.top = `${e.clientY - offsetY}px`;
            panel.style.right = 'auto';
        });

        document.addEventListener('mouseup', () => {
            isDragging = false;
            header.style.cursor = 'move';
        });
    });
})();