Kirka FPS Counter, FPS Booster, View Touched Keys Mouse/Keyboard, Stretched canvas, IP Catcher

See IP's of the players (with name and 50%), FPS Counter, FPS Booster, View Keyboard/Mouse touchs etc..

// ==UserScript==
// @name         Kirka FPS Counter, FPS Booster, View Touched Keys Mouse/Keyboard, Stretched canvas, IP Catcher
// @namespace    http://tampermonkey.net/
// @version      05124.1
// @description  See IP's of the players (with name and 50%), FPS Counter, FPS Booster, View Keyboard/Mouse touchs etc..
// @author       WHOAMI?
// @match        *://kirka.io/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Create the button
    const button = document.createElement('button');
    button.innerHTML = 'Menu';
    button.style.position = 'fixed';
    button.style.bottom = '10px';
    button.style.right = '10px';
    button.style.padding = '10px 20px';
    button.style.backgroundColor = 'black';
    button.style.color = 'white';
    button.style.border = 'none';
    button.style.borderRadius = '5px';
    button.style.cursor = 'pointer';
    button.style.zIndex = '1000';

    document.body.appendChild(button);

    // Create the menu
    const menu = document.createElement('div');
    menu.style.position = 'fixed';
    menu.style.bottom = '50px';
    menu.style.right = '10px';
    menu.style.padding = '15px';
    menu.style.backgroundColor = 'black';
    menu.style.color = 'white';
    menu.style.border = '1px solid #fff';
    menu.style.borderRadius = '5px';
    menu.style.display = 'none';
    menu.style.zIndex = '1000';
    menu.style.width = '250px';

    // Create menu options
    const options = [
        { label: 'Esticar Tela', id: 'stretchScreen' },
        { label: 'FPS Booster', id: 'fpsBooster' },
        { label: 'FPS Counter', id: 'fpsCounter' },
        { label: 'Mostrar KeyBoard', id: 'showKeyboard' },
        { label: 'Logar IPs', id: 'logIPs' }
    ];

    options.forEach(option => {
        const container = document.createElement('div');
        container.style.padding = '5px 0';

        const checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.id = option.id;
        checkbox.style.marginRight = '10px';

        const label = document.createElement('label');
        label.htmlFor = option.id;
        label.innerText = option.label;

        container.appendChild(checkbox);
        container.appendChild(label);
        menu.appendChild(container);
    });

    document.body.appendChild(menu);

    // Toggle menu display
    button.addEventListener('click', () => {
        menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
    });

    // Function to stretch the screen
    function stretchScreen() {
        document.documentElement.style.width = '100vw';
        document.documentElement.style.height = '100vh';
        document.documentElement.style.overflow = 'hidden';
        document.body.style.width = '100vw';
        document.body.style.height = '100vh';
        document.body.style.overflow = 'hidden';
    }

    // Function to boost FPS
    function boostFPS() {
        document.querySelectorAll('canvas').forEach(canvas => {
            canvas.style.imageRendering = 'pixelated';
            canvas.width = canvas.width / 2;
            canvas.height = canvas.height / 2;
        });
    }

    // Function to show FPS counter
    function showFPSCounter() {
        const script = document.createElement('script');
        script.innerHTML = `
            (function() {
                let lastFrameTime = performance.now();
                let frameCount = 0;
                let fpsDisplay = document.createElement('div');
                fpsDisplay.style.position = 'fixed';
                fpsDisplay.style.top = '10px';
                fpsDisplay.style.right = '10px';
                fpsDisplay.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
                fpsDisplay.style.color = 'white';
                fpsDisplay.style.padding = '5px';
                fpsDisplay.style.borderRadius = '5px';
                fpsDisplay.style.zIndex = '1000';
                document.body.appendChild(fpsDisplay);

                function updateFPS() {
                    let now = performance.now();
                    frameCount++;
                    if (now >= lastFrameTime + 1000) {
                        fpsDisplay.innerHTML = frameCount + ' FPS';
                        lastFrameTime = now;
                        frameCount = 0;
                    }
                    requestAnimationFrame(updateFPS);
                }
                updateFPS();
            })();
        `;
        document.body.appendChild(script);
    }

    // Function to show keyboard and mouse activity
    function showKeyboard() {
        const keyDisplay = document.createElement('div');
        keyDisplay.style.position = 'fixed';
        keyDisplay.style.bottom = '10px';
        keyDisplay.style.left = '10px';
        keyDisplay.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
        keyDisplay.style.color = 'white';
        keyDisplay.style.padding = '10px';
        keyDisplay.style.borderRadius = '5px';
        keyDisplay.style.zIndex = '1000';
        keyDisplay.style.width = '300px';
        keyDisplay.style.height = '100px';
        keyDisplay.style.overflowY = 'auto';
        keyDisplay.style.fontFamily = 'monospace';
        document.body.appendChild(keyDisplay);

        const mouseDisplay = document.createElement('div');
        mouseDisplay.style.position = 'fixed';
        mouseDisplay.style.top = '10px';
        mouseDisplay.style.left = '10px';
        mouseDisplay.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
        mouseDisplay.style.color = 'white';
        mouseDisplay.style.padding = '10px';
        mouseDisplay.style.borderRadius = '5px';
        mouseDisplay.style.zIndex = '1000';
        mouseDisplay.style.width = '150px';
        mouseDisplay.style.fontFamily = 'monospace';
        document.body.appendChild(mouseDisplay);

        document.addEventListener('keydown', (e) => {
            keyDisplay.innerText += `Key: ${e.key} (${e.code})\n`;
            keyDisplay.scrollTop = keyDisplay.scrollHeight;
        });

        document.addEventListener('mousedown', (e) => {
            mouseDisplay.innerText = `Mouse: Button ${e.button} Clicked\n`;
        });
    }

    // Function to log IPs
    function logIPs() {
        const logBox = document.createElement('div');
        logBox.style.position = 'fixed';
        logBox.style.bottom = '50px';
        logBox.style.left = '10px';
        logBox.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
        logBox.style.color = 'white';
        logBox.style.padding = '10px';
        logBox.style.borderRadius = '5px';
        logBox.style.zIndex = '1000';
        logBox.style.width = '300px';
        logBox.style.height = '400px';
        logBox.style.overflowY = 'auto';
        logBox.style.fontFamily = 'monospace';
        document.body.appendChild(logBox);

        const instructions = document.createElement('p');
        instructions.innerText = 'Press "O" to log IPs';
        instructions.style.color = 'green';
        logBox.appendChild(instructions);

        // Function to add IPs to the log
        function addIp(addr) {
            logBox.innerHTML += `<p style="color: white;">Got IP address: ${addr}</p>`;
            logBox.scrollTop = logBox.scrollHeight;
        }

        // Override RTCPeerConnection method to capture IP addresses
        const originalAddIceCandidate = RTCPeerConnection.prototype.addIceCandidate;
        RTCPeerConnection.prototype.addIceCandidate = function(...args) {
            if (args[0] && args[0].address && !args[0].address.includes(".local")) {
                addIp(args[0].address);
            }
            return originalAddIceCandidate.apply(this, args);
        };

        // Listen for keypress
        document.addEventListener('keydown', (e) => {
            if (e.key === 'O') {
                logBox.style.display = logBox.style.display === 'none' ? 'block' : 'none';
            }
        });
    }

    // Event listeners for the options
    document.getElementById('stretchScreen').addEventListener('change', (e) => {
        if (e.target.checked) {
            stretchScreen();
        } else {
            location.reload();
        }
    });

    document.getElementById('fpsBooster').addEventListener('change', (e) => {
        if (e.target.checked) {
            boostFPS();
        } else {
            location.reload();
        }
    });

    document.getElementById('fpsCounter').addEventListener('change', (e) => {
        if (e.target.checked) {
            showFPSCounter();
        } else {
            location.reload();
        }
    });

    document.getElementById('showKeyboard').addEventListener('change', (e) => {
        if (e.target.checked) {
            showKeyboard();
        } else {
            location.reload();
        }
    });

    document.getElementById('logIPs').addEventListener('change', (e) => {
        if (e.target.checked) {
            logIPs();
        } else {
            location.reload();
        }
    });

})();