Greasy Fork

Greasy Fork is available in English.

Advanced Sploop.io Enhancements 2024

Very useful(FPS, Real time, help anti-clown 35%(beta), smart messages, playtime tracking, music control with repeat and click effects, JSON import)

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Advanced Sploop.io Enhancements 2024
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Very useful(FPS, Real time, help anti-clown 35%(beta), smart messages, playtime tracking, music control with repeat and click effects, JSON import)
// @author       avoidFPS
// @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'
    ];
    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 = ' Display 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 = 'Feature Anti-clown';
    const antiClownToggleCheckbox = document.createElement('input');
    antiClownToggleCheckbox.type = 'checkbox';
    antiClownToggleCheckbox.checked = true;
    antiClownToggleLabel.prepend(antiClownToggleCheckbox);
    controlPanel.appendChild(antiClownToggleLabel);


    const gameStartTimeDisplay = document.createElement('div');
    gameStartTimeDisplay.textContent = 'Start time: no';
    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('Start calculating play time.');
    }


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

        gameEndTime = new Date();
        clearInterval(gameInterval);
        const elapsedTime = gameEndTime - gameStartTime;
        const formattedTime = formatTime(elapsedTime);
        spawnSmartMessage(`Played for approx: ${formattedTime}`);
        gameStartTimeDisplay.textContent = `Played for approx: ${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 isBanned = false;

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

    setInterval(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 audio = new Audio();

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

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

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


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

    applyRainbowColors(controlPanel);


    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('!spawn')) {
            const itemsToSpawn = message.replace('!spawn', '').trim();
            spawnContinuousMessages(itemsToSpawn);
        }
    }


    function spawnContinuousMessages(items) {
        const itemArray = items.split(',');

        itemArray.forEach(item => {
            spawnSmartMessage(`Spawning: ${item}`);
        });

        setTimeout(() => {
            spawnContinuousMessages(items);
        }, 5000);
    }


    window.addEventListener('message', handleChatMessage);


    document.addEventListener('click', (event) => {
        const clickEffect = document.createElement('div');
        clickEffect.style.position = 'absolute';
        clickEffect.style.width = '10px';
        clickEffect.style.height = '10px';
        clickEffect.style.backgroundColor = 'white';
        clickEffect.style.borderRadius = '50%';
        clickEffect.style.left = `${event.clientX}px`;
        clickEffect.style.top = `${event.clientY}px`;
        clickEffect.style.pointerEvents = 'none';
        clickEffect.style.zIndex = '1000';
        document.body.appendChild(clickEffect);

        setTimeout(() => {
            clickEffect.style.transform = 'scale(10)';
            clickEffect.style.opacity = '0';
            setTimeout(() => {
                clickEffect.remove();
            }, 300);
        }, 0);
    });


    const jsonFileInput = document.createElement('input');
    jsonFileInput.type = 'file';
    jsonFileInput.accept = 'application/json';
    jsonFileInput.style.marginTop = '10px';
    controlPanel.appendChild(jsonFileInput);

    jsonFileInput.addEventListener('change', (event) => {
        const file = event.target.files[0];
        if (file) {
            const reader = new FileReader();
            reader.onload = function(e) {
                const jsonData = e.target.result;
                localStorage.setItem('uploadedJson', jsonData);
                alert('JSON file saved. The page will now reload.');
                location.reload();
            };
            reader.readAsText(file);
        }
    });
})();