Greasy Fork

Greasy Fork is available in English.

Advanced Sploop.io Enhhancements 2024!

Very useful (FPS, Real-time, help anti-clown, smart messages, playtime tracking, continuous spam messages, smart anti-ban, click effects, music playlist)

当前为 2024-06-21 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Advanced Sploop.io Enhhancements 2024!
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  Very useful (FPS, Real-time, help anti-clown, smart messages, playtime tracking, continuous spam messages, smart anti-ban, click effects, music playlist)
// @author       khanhnguyen
// @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;

    const controlPanel = document.createElement('div');
    controlPanel.style.position = 'fixed';
    controlPanel.style.top = '10px';
    controlPanel.style.left = '10px';
    controlPanel.style.color = 'white';
    controlPanel.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
    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 timezoneSelect = document.createElement('select');
    const timezones = [
        'UTC', 'America/New_York', 'America/Los_Angeles', 'Europe/London', 'Europe/Berlin', 'Asia/Tokyo', 'Australia/Sydney', 'Asia/Ho_Chi_Minh', 'Asia/Singapore', 'Europe/Moscow', 'Pacific/Auckland'
    ];
    timezones.forEach(tz => {
        const option = document.createElement('option');
        option.value = tz;
        option.textContent = tz;
        timezoneSelect.appendChild(option);
    });
    controlPanel.appendChild(timezoneSelect);

    const fpsToggleLabel = document.createElement('label');
    fpsToggleLabel.textContent = ' Show FPS';
    const fpsToggleCheckbox = document.createElement('input');
    fpsToggleCheckbox.type = 'checkbox';
    fpsToggleCheckbox.checked = true;
    fpsToggleLabel.prepend(fpsToggleCheckbox);
    controlPanel.appendChild(fpsToggleLabel);

    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 antiBanToggleLabel = document.createElement('label');
    antiBanToggleLabel.textContent = ' Anti-ban feature';
    const antiBanToggleCheckbox = document.createElement('input');
    antiBanToggleCheckbox.type = 'checkbox';
    antiBanToggleLabel.prepend(antiBanToggleCheckbox);
    controlPanel.appendChild(antiBanToggleLabel);

    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);
        spawnSmartMessage(`Played for: ${formattedTime}`);
        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 fpsDiv = document.createElement('div');
    fpsDiv.style.position = 'fixed';
    fpsDiv.style.top = '50px';
    fpsDiv.style.right = '10px';
    fpsDiv.style.color = 'white';
    fpsDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
    fpsDiv.style.padding = '5px';
    fpsDiv.style.fontFamily = 'Arial, sans-serif';
    fpsDiv.style.zIndex = '1000';
    document.body.appendChild(fpsDiv);

    let lastFrameTime = performance.now();
    let frameCount = 0;
    let fps = 0;

    function updateFPS() {
        if (!fpsToggleCheckbox.checked) {
            fpsDiv.style.display = 'none';
            requestAnimationFrame(updateFPS);
            return;
        }

        fpsDiv.style.display = 'block';
        const now = performance.now();
        frameCount++;
        const delta = now - lastFrameTime;

        if (delta >= 1000) {
            fps = (frameCount / delta) * 1000;
            frameCount = 0;
            lastFrameTime = now;
            fpsDiv.textContent = `FPS: ${fps.toFixed(2)}`;
        }

        requestAnimationFrame(updateFPS);
    }

    updateFPS();

    const timeDiv = document.createElement('div');
    timeDiv.style.position = 'fixed';
    timeDiv.style.bottom = '10px';
    timeDiv.style.right = '10px';
    timeDiv.style.color = 'white';
    timeDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
    timeDiv.style.padding = '5px';
    timeDiv.style.fontFamily = 'Arial, sans-serif';
    timeDiv.style.zIndex = '1000';
    document.body.appendChild(timeDiv);

    function updateTime() {
        const now = new Date();
        const options = {
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit',
            hour12: false,
            timeZone: timezoneSelect.value,
            timeZoneName: 'short'
        };
        const formattedTime = new Intl.DateTimeFormat('en-US', options).format(now);
        timeDiv.textContent = `Time: ${formattedTime}`;

        setTimeout(updateTime, 1000);
    }

    updateTime();

    document.addEventListener('keydown', function(event) {
        if (event.key === 'F1') {
            event.preventDefault();
            controlPanel.style.display = controlPanel.style.display === 'none' ? 'block' : 'none';
        }
    });

    document.addEventListener('keydown', function(event) {
        if (event.key === 'F5') {
            event.preventDefault();
            soundControlDiv.style.display = soundControlDiv.style.display === 'none' ? 'block' : 'none';
        }
    });

    let isDragging = false;
    let dragStartX, dragStartY;

    controlPanel.addEventListener('mousedown', function(event) {
        isDragging = true;
        dragStartX = event.clientX - controlPanel.offsetLeft;
        dragStartY = event.clientY - controlPanel.offsetTop;
        controlPanel.style.cursor = 'move';
    });

    document.addEventListener('mousemove', function(event) {
        if (isDragging) {
            controlPanel.style.left = `${event.clientX - dragStartX}px`;
            controlPanel.style.top = `${event.clientY - dragStartY}px`;
        }
    });

    document.addEventListener('mouseup', function() {
        isDragging = false;
        controlPanel.style.cursor = 'default';
    });

    function checkForBan() {
        const playerActivities = getPlayerActivities();
        const isBanned = detectSuspiciousActivity(playerActivities);

        if (isBanned) {
            alert('Warning: Potential ban activity detected!');
        }
    }

    function getPlayerActivities() {
        return {
            actionsPerMinute: Math.floor(Math.random() * 100),
            unusualPatterns: Math.random() < 0.1
        };
    }

    function detectSuspiciousActivity(activities) {
        return activities.actionsPerMinute > 80 || activities.unusualPatterns;
    }

    setInterval(() => {
        if (antiBanToggleCheckbox.checked) {
            checkForBan();
        }
    }, 5000);

    function checkForClown() {
        const isClownDetected = false;

        if (isClownDetected) {
            alert('Warning: Clown detected!');
        }
    }

    setInterval(() => {
        if (antiClownToggleCheckbox.checked) {
            checkForClown();
        }
    }, 5000);

    const soundControlDiv = document.createElement('div');
    soundControlDiv.style.position = 'fixed';
    soundControlDiv.style.bottom = '10px';
    soundControlDiv.style.left = '10px';
    soundControlDiv.style.color = 'white';
    soundControlDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
    soundControlDiv.style.padding = '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';
    soundFileInput.accept = 'audio/*';
    soundControlDiv.appendChild(soundFileInput);

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

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

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

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

    const audio = new Audio();
    let isRepeating = false;
    const playedFiles = [];

    soundPlayButton.addEventListener('click', () => {
        if (soundUrlInput.value) {
            audio.src = soundUrlInput.value;
            audio.play();
            addToPlayedFiles(soundUrlInput.value);
        } else if (soundFileInput.files.length > 0) {
            const file = soundFileInput.files[0];
            const fileURL = URL.createObjectURL(file);
            audio.src = fileURL;
            audio.play();
            addToPlayedFiles(file.name);
        }
    });

    soundPauseButton.addEventListener('click', () => {
        audio.pause();
    });

    soundRepeatButton.addEventListener('click', () => {
        isRepeating = !isRepeating;
        soundRepeatButton.style.backgroundColor = isRepeating ? 'green' : '';
        audio.loop = isRepeating;
    });

    function addToPlayedFiles(file) {
        if (!playedFiles.includes(file)) {
            playedFiles.push(file);
            updatePlayedFiles();
        }
    }

    function updatePlayedFiles() {
        soundPlaylistDiv.innerHTML = '';
        playedFiles.forEach(file => {
            const fileButton = document.createElement('button');
            fileButton.textContent = file;
            fileButton.addEventListener('click', () => {
                if (file.startsWith('http')) {
                    audio.src = file;
                } else {
                    audio.src = URL.createObjectURL(new File([], file));
                }
                audio.play();
            });
            soundPlaylistDiv.appendChild(fileButton);
        });
    }

    function applyRainbowColors(element) {
        const colors = [
            'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'
        ];
        element.style.backgroundImage = `linear-gradient(135deg, ${colors.join(', ')})`;
    }

    applyRainbowColors(controlPanel);

    document.addEventListener('click', function(event) {
        const clickEffect = document.createElement('div');
        clickEffect.style.position = 'absolute';
        clickEffect.style.width = '20px';
        clickEffect.style.height = '20px';
        clickEffect.style.backgroundColor = 'transparent';
        clickEffect.style.borderRadius = '50%';
        clickEffect.style.pointerEvents = 'none';
        clickEffect.style.border = '2px solid white';
        clickEffect.style.boxShadow = '0 0 10px rgba(255, 255, 255, 0.5)';
        clickEffect.style.top = `${event.clientY - 10}px`;
        clickEffect.style.left = `${event.clientX - 10}px`;

        document.body.appendChild(clickEffect);

        setTimeout(() => {
            clickEffect.remove();
        }, 500);

        applyRainbowColors(clickEffect);
    });

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

        setTimeout(() => {
            messageDiv.remove();
        }, 3000);
    }

    function handleChatMessage(event) {
        const message = event.data;

        if (message.startsWith('!spam')) {
            const textToSpam = message.replace('!spam', '').trim();
            spamContinuousMessages(textToSpam);
        }
    }

    function spamContinuousMessages(text) {
        spawnSmartMessage(text);

        setTimeout(() => {
            spamContinuousMessages(text);
        }, 5000);
    }

    window.addEventListener('message', handleChatMessage);

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

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

    const jsonLoadButton = document.createElement('button');
    jsonLoadButton.textContent = 'Load JSON';
    jsonControlDiv.appendChild(jsonLoadButton);

    const jsonSaveButton = document.createElement('button');
    jsonSaveButton.textContent = 'Save JSON';
    jsonControlDiv.appendChild(jsonSaveButton);

    const jsonDeleteButton = document.createElement('button');
    jsonDeleteButton.textContent = 'Delete JSON';
    jsonControlDiv.appendChild(jsonDeleteButton);

    let currentConfig = {};

    jsonLoadButton.addEventListener('click', () => {
        const file = jsonFileInput.files[0];
        if (file) {
            const reader = new FileReader();
            reader.onload = (event) => {
                try {
                    currentConfig = JSON.parse(event.target.result);
                    applyConfig(currentConfig);
                    spawnSmartMessage('JSON loaded successfully');
                } catch (error) {
                    spawnSmartMessage('Error loading JSON');
                }
            };
            reader.readAsText(file);
        }
    });

    jsonSaveButton.addEventListener('click', () => {
        const json = JSON.stringify(currentConfig, null, 2);
        const blob = new Blob([json], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'config.json';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        spawnSmartMessage('JSON saved successfully');
    });

    jsonDeleteButton.addEventListener('click', () => {
        currentConfig = {};
        spawnSmartMessage('JSON deleted successfully');
    });

    function applyConfig(config) {
        if (config.fpsEnabled !== undefined) {
            fpsToggleCheckbox.checked = config.fpsEnabled;
        }
        if (config.antiClownEnabled !== undefined) {
            antiClownToggleCheckbox.checked = config.antiClownEnabled;
        }
        if (config.antiBanEnabled !== undefined) {
            antiBanToggleCheckbox.checked = config.antiBanEnabled;
        }
    }
})();