Advanced Sploop.io Enhancements 2024!

Very useful (Real-time, help anti-clown, smart messages, playtime tracking, smart anti-ban, music playlist, intelligent player aiming.more.more)

// ==UserScript==
// @name         Advanced Sploop.io Enhancements 2024!
// @namespace    http://tampermonkey.net/
// @version      2.3
// @description  Very useful (Real-time, help anti-clown, smart messages, playtime tracking, smart anti-ban,  music playlist, intelligent player aiming.more.more)
// @author       avoidFPS
// @require      https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.1/underscore-min.js
// @match        *://sploop.io/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function showSuccessMessage() {
        spawnSmartMessage('Script loaded successfully!');
    }

    showSuccessMessage();

    let gameStartTime = null;
    let gameEndTime = null;
    let gameInterval = null;
    let fpsInterval = null;
    let lastFrameTime = performance.now();
    let fpsDisplay = null;
    let timezoneDisplay = null;
    let selectedTimezone = 'Asia/Ho_Chi_Minh';
    let aimLockEnabled = false;
    let autoInstaEnabled = false;
    let aimSmartEnabled = false;

    const timezones = {
        'Vietnam': 'Asia/Ho_Chi_Minh',
        'USA': 'America/New_York',
        'Australia': 'Australia/Sydney',
        'Japan': 'Asia/Tokyo'
    };

    const controlPanel = document.createElement('div');
    controlPanel.style.position = 'fixed';
    controlPanel.style.top = '10px';
    controlPanel.style.left = '10px';
    controlPanel.style.color = 'white';
    controlPanel.style.background = 'linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet)';
    controlPanel.style.padding = '10px';
    controlPanel.style.borderRadius = '5px';
    controlPanel.style.fontFamily = 'Arial, sans-serif';
    controlPanel.style.zIndex = '1000';
    controlPanel.style.display = 'none';
    document.body.appendChild(controlPanel);

    const antiClownToggleLabel = document.createElement('label');
    antiClownToggleLabel.textContent = ' Anti-clown feature';
    const antiClownToggleCheckbox = document.createElement('input');
    antiClownToggleCheckbox.type = 'checkbox';
    antiClownToggleCheckbox.checked = true;
    antiClownToggleLabel.prepend(antiClownToggleCheckbox);
    controlPanel.appendChild(antiClownToggleLabel);

    const aimLockToggleLabel = document.createElement('label');
    aimLockToggleLabel.textContent = ' Aim Lock';
    const aimLockToggleCheckbox = document.createElement('input');
    aimLockToggleCheckbox.type = 'checkbox';
    aimLockToggleCheckbox.checked = false;
    aimLockToggleLabel.prepend(aimLockToggleCheckbox);
    controlPanel.appendChild(aimLockToggleLabel);

    const aimSmartToggleLabel = document.createElement('label');
    aimSmartToggleLabel.textContent = ' Smart Aim';
    const aimSmartToggleCheckbox = document.createElement('input');
    aimSmartToggleCheckbox.type = 'checkbox';
    aimSmartToggleCheckbox.checked = false;
    aimSmartToggleLabel.prepend(aimSmartToggleCheckbox);
    controlPanel.appendChild(aimSmartToggleLabel);

    const autoInstaToggleLabel = document.createElement('label');
    autoInstaToggleLabel.textContent = ' Auto Insta';
    const autoInstaToggleCheckbox = document.createElement('input');
    autoInstaToggleCheckbox.type = 'checkbox';
    autoInstaToggleCheckbox.checked = false;
    autoInstaToggleLabel.prepend(autoInstaToggleCheckbox);
    controlPanel.appendChild(autoInstaToggleLabel);

    aimLockToggleCheckbox.addEventListener('change', function() {
        aimLockEnabled = this.checked;
    });

    aimSmartToggleCheckbox.addEventListener('change', function() {
        aimSmartEnabled = this.checked;
    });

    autoInstaToggleCheckbox.addEventListener('change', function() {
        autoInstaEnabled = this.checked;
    });

    const timezoneSelectLabel = document.createElement('label');
    timezoneSelectLabel.textContent = ' Select Timezone:';
    controlPanel.appendChild(timezoneSelectLabel);

    const timezoneSelect = document.createElement('select');
    for (const [region, timezone] of Object.entries(timezones)) {
        const option = document.createElement('option');
        option.value = timezone;
        option.textContent = region;
        timezoneSelect.appendChild(option);
    }
    timezoneSelect.value = selectedTimezone;
    controlPanel.appendChild(timezoneSelect);

    timezoneSelect.addEventListener('change', function() {
        selectedTimezone = this.value;
    });

    const gameStartTimeDisplay = document.createElement('div');
    gameStartTimeDisplay.textContent = 'Start Time: Not started';
    gameStartTimeDisplay.style.color = 'white';
    gameStartTimeDisplay.style.fontFamily = 'Arial, sans-serif';
    controlPanel.appendChild(gameStartTimeDisplay);

    const startButton = document.createElement('button');
    startButton.textContent = 'Start';
    startButton.style.marginTop = '10px';
    controlPanel.appendChild(startButton);

    const stopButton = document.createElement('button');
    stopButton.textContent = 'Stop';
    stopButton.style.marginTop = '10px';
    stopButton.style.marginLeft = '5px';
    controlPanel.appendChild(stopButton);

    startButton.addEventListener('click', function() {
        startGameTime();
    });

    stopButton.addEventListener('click', function() {
        stopGameTime();
    });

    function startGameTime() {
        gameStartTime = new Date();
        if (gameInterval) clearInterval(gameInterval);
        gameInterval = setInterval(updateGameTimeDisplay, 1000);
        spawnSmartMessage('Started game time tracking.');
    }

    function stopGameTime() {
        if (!gameStartTime) return;

        gameEndTime = new Date();
        clearInterval(gameInterval);
        const elapsedTime = gameEndTime - gameStartTime;
        const formattedTime = formatTime(elapsedTime);
        gameStartTimeDisplay.textContent = `Played for: ${formattedTime}`;
        gameStartTime = null;
    }

    function updateGameTimeDisplay() {
        if (!gameStartTime) return;

        const elapsedTime = new Date() - gameStartTime;
        const formattedTime = formatTime(elapsedTime);
        gameStartTimeDisplay.textContent = `Start Time: ${formattedTime}`;
    }

    function formatTime(ms) {
        const seconds = Math.floor(ms / 1000);
        const hours = Math.floor(seconds / 3600);
        const minutes = Math.floor((seconds % 3600) / 60);
        const remainingSeconds = seconds % 60;
        return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
    }

    const soundControlDiv = document.createElement('div');
    soundControlDiv.style.position = 'fixed';
    soundControlDiv.style.bottom = '10px';
    soundControlDiv.style.left = '10px';
    soundControlDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
    soundControlDiv.style.color = 'white';
    soundControlDiv.style.padding = '10px';
    soundControlDiv.style.borderRadius = '5px';
    soundControlDiv.style.fontFamily = 'Arial, sans-serif';
    soundControlDiv.style.zIndex = '1000';
    soundControlDiv.style.display = 'none';
    document.body.appendChild(soundControlDiv);

    const soundUrlInput = document.createElement('input');
    soundUrlInput.type = 'text';
    soundUrlInput.placeholder = 'Enter sound URL';
    soundControlDiv.appendChild(soundUrlInput);

    const soundFileInput = document.createElement('input');
    soundFileInput.type = 'file';
    soundControlDiv.appendChild(soundFileInput);

    const playButton = document.createElement('button');
    playButton.textContent = 'Play';
    soundControlDiv.appendChild(playButton);

    const pauseButton = document.createElement('button');
    pauseButton.textContent = 'Pause';
    soundControlDiv.appendChild(pauseButton);

    const repeatButton = document.createElement('button');
    repeatButton.textContent = 'Repeat';
    soundControlDiv.appendChild(repeatButton);

    const playlist = document.createElement('div');
    playlist.style.marginTop = '10px';
    soundControlDiv.appendChild(playlist);

    let audio = new Audio();
    let repeat = false;

    playButton.addEventListener('click', function() {
        const url = soundUrlInput.value;
        const file = soundFileInput.files[0];

        if (file) {
            const reader = new FileReader();
            reader.onload = function(e) {
                audio.src = e.target.result;
                audio.play();
            };
            reader.readAsDataURL(file);
        } else if (url) {
            audio.src = url;
            audio.play();
        }
    });

    pauseButton.addEventListener('click', function() {
        audio.pause();
    });

    repeatButton.addEventListener('click', function() {
        repeat = !repeat;
        repeatButton.style.backgroundColor = repeat ? 'green' : '';
    });

    audio.addEventListener('ended', function() {
        if (repeat) {
            audio.currentTime = 0;
            audio.play();
        }
    });

    function checkForBan() {
        // Placeholder for ban detection logic
        console.log('Checking for ban...');
    }

    setInterval(checkForBan, 3000);

    const fpsElement = document.createElement('div');
    fpsElement.style.position = 'fixed';
    fpsElement.style.top = '10px';
    fpsElement.style.left = '50%';
    fpsElement.style.transform = 'translateX(-50%)';
    fpsElement.style.color = 'white';
    fpsElement.style.fontFamily = 'Arial, sans-serif';
    fpsElement.style.fontSize = '20px';
    fpsElement.style.zIndex = '1000';
    document.body.appendChild(fpsElement);

    const timezoneElement = document.createElement('div');
    timezoneElement.style.position = 'fixed';
    timezoneElement.style.top = '40px';
    timezoneElement.style.left = '50%';
    timezoneElement.style.transform = 'translateX(-50%)';
    timezoneElement.style.color = 'white';
    timezoneElement.style.fontFamily = 'Arial, sans-serif';
    timezoneElement.style.fontSize = '20px';
    timezoneElement.style.zIndex = '1000';
    document.body.appendChild(timezoneElement);

    function updateFPS() {
        const now = performance.now();
        const delta = now - lastFrameTime;
        const fps = 1000 / delta;
        lastFrameTime = now;
        fpsElement.textContent = `FPS: ${Math.round(fps)}`;
        requestAnimationFrame(updateFPS);
    }

    function updateTimezones() {
        const now = new Date();
        timezoneElement.textContent = `Time (${selectedTimezone}): ${now.toLocaleString('en-US', { timeZone: selectedTimezone })}`;
    }

    updateFPS();
    setInterval(updateTimezones, 1000);

    const fpsColorInput = document.createElement('input');
    fpsColorInput.type = 'color';
    fpsColorInput.value = '#FFFFFF';
    fpsColorInput.addEventListener('change', function() {
        fpsElement.style.color = this.value;
    });
    controlPanel.appendChild(fpsColorInput);

    const timezoneColorInput = document.createElement('input');
    timezoneColorInput.type = 'color';
    timezoneColorInput.value = '#FFFFFF';
    timezoneColorInput.addEventListener('change', function() {
        timezoneElement.style.color = this.value;
    });
    controlPanel.appendChild(timezoneColorInput);

    const fileManagementPanel = document.createElement('div');
    fileManagementPanel.style.marginTop = '10px';
    controlPanel.appendChild(fileManagementPanel);

    const jsonFileInput = document.createElement('input');
    jsonFileInput.type = 'file';
    jsonFileInput.accept = 'application/json';
    fileManagementPanel.appendChild(jsonFileInput);

    const loadButton = document.createElement('button');
    loadButton.textContent = 'Load JSON';
    fileManagementPanel.appendChild(loadButton);

    const saveButton = document.createElement('button');
    saveButton.textContent = 'Save JSON';
    fileManagementPanel.appendChild(saveButton);

    const deleteButton = document.createElement('button');
    deleteButton.textContent = 'Delete JSON';
    fileManagementPanel.appendChild(deleteButton);

    const runButton = document.createElement('button');
    runButton.textContent = 'Run JSON';
    fileManagementPanel.appendChild(runButton);

    loadButton.addEventListener('click', function() {
        const file = jsonFileInput.files[0];
        if (!file) {
            alert('No file selected');
            return;
        }

        const reader = new FileReader();
        reader.onload = function(e) {
            const json = JSON.parse(e.target.result);
            
            console.log('Loaded JSON:', json);
        };
        reader.readAsText(file);
    });

    saveButton.addEventListener('click', function() {
        const data = {
            
        };

        const json = JSON.stringify(data);
        const blob = new Blob([json], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'data.json';
        a.click();
    });

    deleteButton.addEventListener('click', function() {
        
        console.log('Deleted JSON');
    });

    runButton.addEventListener('click', function() {
        const file = jsonFileInput.files[0];
        if (!file) {
            alert('No file selected');
            return;
        }

        const reader = new FileReader();
        reader.onload = function(e) {
            const json = JSON.parse(e.target.result);
            
            console.log('Running JSON:', json);
            executeJsonCommands(json);
        };
        reader.readAsText(file);
    });

    function executeJsonCommands(json) {
        
        console.log('Executing commands from JSON:', json);
        // Example: if json has commands like { "action": "move", "x": 10, "y": 20 }
        if (json.action === 'move') {
            moveCharacter(json.x, json.y);
        }
    }

    function moveCharacter(x, y) {
        // Implement the logic to move the character to x, y coordinates
        console.log(`Moving character to X: ${x}, Y: ${y}`);
        // Update coordinates display
        updateCoordinates(x, y);
    }

    const messagingPanel = document.createElement('div');
    messagingPanel.style.marginTop = '10px';
    controlPanel.appendChild(messagingPanel);

    const messageInput = document.createElement('input');
    messageInput.type = 'text';
    messageInput.placeholder = 'Enter message';
    messagingPanel.appendChild(messageInput);

    const messageFileInput = document.createElement('input');
    messageFileInput.type = 'file';
    messageFileInput.accept = 'text/plain';
    messagingPanel.appendChild(messageFileInput);

    const startMessagingButton = document.createElement('button');
    startMessagingButton.textContent = 'Start Messaging';
    messagingPanel.appendChild(startMessagingButton);

    const stopMessagingButton = document.createElement('button');
    stopMessagingButton.textContent = 'Stop Messaging';
    messagingPanel.appendChild(stopMessagingButton);

    let messagingInterval = null;

    startMessagingButton.addEventListener('click', function() {
        const message = messageInput.value;
        if (messageFileInput.files.length > 0) {
            const file = messageFileInput.files[0];
            const reader = new FileReader();
            reader.onload = function(e) {
                startMessaging(e.target.result);
            };
            reader.readAsText(file);
        } else if (message) {
            startMessaging(message);
        }
    });

    stopMessagingButton.addEventListener('click', function() {
        stopMessaging();
    });

    function startMessaging(message) {
        stopMessaging();
        messagingInterval = setInterval(function() {
            sendMessageToGame(message);
        }, 1000);
    }

    function stopMessaging() {
        clearInterval(messagingInterval);
    }

    function sendMessageToGame(message) {
        
        console.log(`Sending message: ${message}`);
    }

    function spawnSmartMessage(message) {
        const msgElement = document.createElement('div');
        msgElement.textContent = message;
        msgElement.style.position = 'fixed';
        msgElement.style.bottom = '50%';
        msgElement.style.left = '50%';
        msgElement.style.transform = 'translate(-50%, -50%)';
        msgElement.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
        msgElement.style.color = 'white';
        msgElement.style.padding = '10px';
        msgElement.style.borderRadius = '5px';
        msgElement.style.zIndex = '1000';
        document.body.appendChild(msgElement);

        setTimeout(function() {
            document.body.removeChild(msgElement);
        }, 3000);
    }

    const coordinatesDisplay = document.createElement('div');
    coordinatesDisplay.style.position = 'fixed';
    coordinatesDisplay.style.bottom = '10px';
    coordinatesDisplay.style.right = '10px';
    coordinatesDisplay.style.color = 'white';
    coordinatesDisplay.style.fontFamily = 'Arial, sans-serif';
    coordinatesDisplay.style.fontSize = '20px';
    coordinatesDisplay.style.zIndex = '1000';
    document.body.appendChild(coordinatesDisplay);

    function updateCoordinates(x, y) {
        coordinatesDisplay.textContent = `X: ${x}, Y: ${y}`;
    }

    document.addEventListener('keydown', function(e) {
        if (e.key === 'F1' || e.key === 'F2' || e.key === 'F5') {
            e.preventDefault();
        }
    });

    document.addEventListener('keydown', function(e) {
        if (e.key === 'F1') {
            controlPanel.style.display = controlPanel.style.display === 'none' ? 'block' : 'none';
        } else if (e.key === 'F5') {
            soundControlDiv.style.display = soundControlDiv.style.display === 'none' ? 'block' : 'none';
        } else if (e.key === 'B') {
            timezoneElement.style.display = timezoneElement.style.display === 'none' ? 'block' : 'none';
        }
    });

    
    setInterval(function() {
        const x = Math.floor(Math.random() * 100);
        const y = Math.floor(Math.random() * 100);
        updateCoordinates(x, y);
    }, 1000);

    document.addEventListener('DOMContentLoaded', function() {
        if (window.location.pathname === '/') {
            alert('Welcome to the Advanced Sploop.io Enhancements script!');
        }
    });
})();