Greasy Fork

Survev.io Counters + Anniversary Edition

Not recommended for weak devices

目前为 2024-12-07 提交的版本。查看 最新版本

// ==UserScript==
// @name         Survev.io Counters + Anniversary Edition
// @namespace    http://tampermonkey.net/
// @license      MIT
// @version      1.2.0
// @description  Not recommended for weak devices
// @author       chess5321, .junako, asultra, samerkizi, wzld //are in Discord
// @match        https://survev.io/
// @icon         https://cdn.discordapp.com/icons/947128006030282792/c80363d8d6dea22ef392c4d325e0c9f4.png?size=64
// @grant        GM_addStyle
// ==/UserScript==

// #FPS Booster
(function() {
    'use strict';
    let MAX = 120; //frame rate you desire
    requestAnimationFrame = e => setTimeout(e, 1e3 / MAX);
})();

// #CSS
(function() {
    'use strict';
    // bg effect
    /*
    document.addEventListener("mousemove", (e => {
        const n = e.clientX / window.innerWidth * 100,
            t = e.clientY / window.innerHeight * 100;
        document.getElementById("background").style.transform = `translate(-${n/10}%, -${t/10}%)`
    }));
    */
    // main
    GM_addStyle(`
    /*
    #background {
        width: 111.090775988% !important;
        height: 111.090775988% !important;
    }
    */
    #TOS,
    #start-bottom-middle,
    #ui-game {
        opacity: 0.5;
    }
    body > div:nth-child(6),
    body > div:nth-child(7) {
        opacity: 0.75;
    }
    .menu-block {
        transform: scale(1) !important;
    }

    #modal-customize {
        backdrop-filter: brightness(0.65) !important;
    }

    .btns-double-row {
        display: block !important;
    }

    .ui-keybind-container>.btn-keybind-desc-selected {
        animation: pulseKeybind 1.25s linear infinite !important;
    }

    @keyframes pulseKeybind {
        0% {
            background-color: #202124;
        }

        50% {
            background-color: #35363a;
        }

        100% {
            background-color: #202124;
        }
    }

    input[type="checkbox"],
    input[type="range_"],
    input[type="textbox"],
    .ui-emote-quarter .ui-emote-hl,
    #customize-emote-autos .ui-emote-hl,
    .ui-emote-middle,
    .ui-team-ping-middle {
        filter: grayscale(1) !important;
    }

    input[type=text]:focus {
        border: none !important;
    }

    /*untouchable*/
    /*
    #ui-weapon-id-1, #ui-weapon-id-2, #ui-weapon-id-3, #ui-weapon-id-4, .ui-zoom-inactive, .ui-zoom-active,#ui-settings-container-desktop>.ui-settings-button, #ui-equipped-ammo, #ui-bullet-counter #ui-current-clip, #ui-interaction, #ui-lower-center, #ui-interaction-press {
        pointer-events: none !important;
    }
    */
    /*setting*/
    #start-bottom-right {
        transition: 0.3s !important;
        opacity: 0 !important;
    }

    #btn-game-tabs>.btn-game-container>.btn-game-menu-selected,
    .btn-hollow-selected,
    .ui-outline-hover:hover,
    #color-picker-hex {
        border-color: #202124 !important;
    }

    .customize-list-item-selected {
        border-color: #FFD700 !important;
    }

    .btn-game-container>.btn-game-menu {
        border-color: #35363a !important;
    }

    .btn-hollow {
        border-color: #35363a;
    }

    #start-bottom-right:hover {
        opacity: 1 !important;
    }

    /*text*/
    .news-header,
    .news-paragraph>.highlight,
    .ui-stats-header-title,
    .ui-stats-info-player-name {
        color: #FFD700 !important;
    }

    /*inside ig*/
    .modal-header,
    .modal-footer,
    .modal-content-right {
        background-color: rgba(26, 27, 29, 0.65) !important;
    }

    .slider,
    .slider::-webkit-slider-thumb {
        background-color: rgb(26, 27, 29) !important;
    }

    .modal-body,
    .modal-customize-cat-selected {
        background-color: rgba(53, 54, 58, 0.65) !important;
    }

    .modal-content-shadow {
        box-shadow: none;
    }

    .menu-option:focus {
        box-shadow: 0 0 1px 1px #FFD700;
    }

    .modal-customize-cat-connect {
        background: #FFD700 !important;
    }

    /*color*/
    .btn-green,
    #ui-modal-keybind-footer>.btn-game-menu,
    .btn-start-mute,
    .btn-team-option,
    .ui-keybind-container>.btn-keybind-desc,
    #btn-customize,
    #btn-team-mobile-link-leave,
    #btn-team-leave,
    #ui-modal-keybind-footer>.btn-game-menu:last-child,
    .btn-settings,
    .btn-keybind,
    #btn-start-fullscreen,
    #btn-game-fullscreen,
    .audio-on-icon,
    #btn-game-quit,
    #btn-game-resume,
    #ui-spectate-buttons>.menu-option,
    #ui-game-tab-keybinds>.btn-keybind-restore {
        background-color: #35363a !important;
        border-bottom: 2px solid #202124 !important;
        box-shadow: inset 0 -2px #202124 !important;
    }
    .player-name-input,
    #team-link-input,
    .player-name-input,
    .name-self,
    .name-self:hover,
    .team-menu-member>.menu-option,
    #keybind-code-input,
    #color-picker-hex {
        background-color: #35363a !important;
        color: #ffd700 !important;
    }

    /*
    .btn-settings {
        background-image: url(../img/gui/cog.svg) !important;
    }
    .btn-keybind {
        background-image: url(../img/gui/keyboard.svg) !important;
    }
    #btn-start-fullscreen, #btn-game-fullscreen {
        background-image: url(../img/gui/minimize.svg) !important;
    }
    .audio-on-icon {
        background-image: url(../img/gui/audio-on.svg) !important;
    }
    .audio-off-icon {
        background-image: url(../img/gui/audio-off.svg) !important;
    }
    #btn-game-quit {
        background-image: url(../img/gui/quit.svg) !important;
    }
    #btn-game-resume {
        background-image: url(../img/gui/resume.svg) !important;
    }
    */
    /*others*/
    #ad-block-left,
    #social-share-block {
        pointer-events: none !important;
        opacity: 0 !important;
    }

    #btn-help,
    #start-help,
    .icon-submit-name-change,
    #start-bottom-right > a,
    #start-bottom-right > a > div {
        display: none !important;
    }

    #start-row-top {
        position_: relative !important;
        left_: 331px !important;
    }

    #team-menu,
    #team-mobile-link {
        position: relative !important;
        right: 165px !important;
    }

    #btn-team-mobile-link-leave {
        position: relative !important;
        left: 206px !important;
        bottom: 0px !important;
    }

    #news-block {
        opacity: 0 !important;
        transition: 0.3s !important;
    }

    #news-block:hover {
        opacity: 1 !important;
    }

    /*bg transition*/
    #background::after {
        position: absolute;
        width: 0;
        height: 0;
        overflow: hidden;
        content: url(https://i.imgur.com/N9mhKPf.png) url(https://i.imgur.com/ZwWc1V6.png) url(https://i.imgur.com/ECmba9f.png) url(https://i.imgur.com/aFpnqJh.png) url(https://i.imgur.com/83OJWoB.png) url(https://i.imgur.com/9d2Ovts.png) url(https://i.imgur.com/RhtMT8x.png) url(https://i.imgur.com/AkqE1MW.png) url(https://i.imgur.com/1QYyOVm.png) url(https://i.imgur.com/7fHEEwN.png) url(https://i.imgur.com/GOTXovX.png) url(https://i.imgur.com/MK7KzfH.png) url(https://i.imgur.com/cVXsZuK.png) url(https://i.imgur.com/nI4potb.png);
    }

    #background {
        animation: change 70s infinite ease-in-out;
    }

    @keyframes change {

        0%,
        2.4% {
            background-image: url(https://i.imgur.com/N9mhKPf.png);
        }

        4.8%,
        9.6% {
            background-image: url(https://i.imgur.com/ZwWc1V6.png);
        }

        12%,
        16.8% {
            background-image: url(https://i.imgur.com/ECmba9f.png);
        }

        19.2%,
        24% {
            background-image: url(https://i.imgur.com/83OJWoB.png);
        }

        26.4%,
        31.2% {
            background-image: url(https://i.imgur.com/aFpnqJh.png);
        }

        33.6%,
        38.4% {
            background-image: url(https://i.imgur.com/9d2Ovts.png);
        }

        40.8%,
        45.6% {
            background-image: url(https://i.imgur.com/RhtMT8x.png);
        }

        48%,
        52.8% {
            background-image: url(https://i.imgur.com/AkqE1MW.png);
        }

        55.2%,
        60% {
            background-image: url(https://i.imgur.com/1QYyOVm.png);
        }

        62.4%,
        67.2% {
            background-image: url(https://i.imgur.com/7fHEEwN.png);
        }

        69.6%,
        74.4% {
            background-image: url(https://i.imgur.com/GOTXovX.png);
        }

        76.8%,
        81.6% {
            background-image: url(https://i.imgur.com/MK7KzfH.png);
        }

        84%,
        88.8% {
            background-image: url(https://i.imgur.com/cVXsZuK.png);
        }

        91.2%,
        96% {
            background-image: url(https://i.imgur.com/nI4potb.png);
        }

        98.4%,
        100% {
            background-image: url(https://i.imgur.com/N9mhKPf.png);
        }
    }
`);
})();

// #FPS Counter
(function() {
    // Create FPS display
    const fpsDisplay = document.createElement('div');
    fpsDisplay.style.position = 'absolute';
    fpsDisplay.style.top = '60%'; // Middle of the screen vertically
    fpsDisplay.style.left = '10px'; // Left side of the screen
    fpsDisplay.style.transform = 'translateY(-50%)'; // Centers it vertically based on the top position
    fpsDisplay.style.color = 'white';
    fpsDisplay.style.fontSize = '14px'; // Smaller font size
    fpsDisplay.style.fontFamily = '"roboto condensed", sans-serif'; // Regular Arial font without bold
    fpsDisplay.style.textShadow = '1px 1px 2px black'; // Slight shadow for visibility
    fpsDisplay.style.backgroundColor = 'rgba(0, 0, 0, 0.3)';
    fpsDisplay.style.padding = '3px 5px'; // Padding around the text
    fpsDisplay.style.borderRadius = '5px'; // Slightly rounded corners for styling
    fpsDisplay.style.zIndex = '10000'; // Ensure the FPS display is on top
    fpsDisplay.innerHTML = `0 FPS`;
    document.body.appendChild(fpsDisplay);
    // Update FPS
    let times = [];
    const getFPS = () => {
        window.requestAnimationFrame(() => {
            const now = performance.now();

            while (times.length > 0 && times[0] <= now - 1000) times.shift();
            times.push(now);
            fpsDisplay.innerHTML = `${times.length} FPS`;
            if (times.length <= 30) {
                fpsDisplay.style.color = "red";
            } else {
                fpsDisplay.style.color = "white";
            }
            getFPS();
        });
    }
    getFPS();
})();

// #LAT Counter
(function() {
    const pingDisplay = document.createElement('div');
    pingDisplay.style.position = 'absolute';
    pingDisplay.style.top = 'calc(60% + 25px)'; // Positioned below FPS counter
    pingDisplay.style.left = '10px'; // Align with FPS counter
    pingDisplay.style.transform = 'translateY(-50%)'; // Centers it vertically based on the top position
    pingDisplay.style.color = 'white'; // Yellow color for ping counter
    pingDisplay.style.fontSize = '14px'; // Same font size as FPS counter
    pingDisplay.style.fontFamily = '"roboto condensed", sans-serif'; // Regular Arial font
    pingDisplay.style.textShadow = '1px 1px 2px black'; // Slight shadow for visibility
    pingDisplay.style.backgroundColor = 'rgba(0, 0, 0, 0.3)';
    pingDisplay.style.padding = '3px 5px'; // Padding around the text
    pingDisplay.style.borderRadius = '5px'; // Slightly rounded corners for styling
    pingDisplay.style.zIndex = '10000'; // Ensure the Ping display is on top
    pingDisplay.innerHTML = `Waiting for a game start...`; // Use backticks for string interpolation
    document.body.appendChild(pingDisplay);

    var sendTime, receiveTime, timeout, region, DOM_observer, ws;
    var teamJoined = document.getElementById("msg-wait-reason"),
        endBtn = document.getElementById("ui-stats-options");

    window.onload = () => {
        var strtBtn = document.getElementsByClassName("btn-green btn-darken menu-option");
        var strtBtnArray = [strtBtn[0], strtBtn[1], strtBtn[2]];
        strtBtnArray.forEach((btn) => {
            btn.onclick = () => {
                region = document.getElementById("server-select-main").value;
                getPing();
            };
        });
        strtBtn[3].onclick = () => {
            region = document.getElementById("team-server-select").value;
            getPing();
        };
    };

    document.getElementById("btn-game-quit").onclick = () => {
        ws.close()
    };
    document.getElementById("btn-spectate-quit").onclick = () => {
        ws.close()
    };
    DOM_observer = new MutationObserver((mutations) => {
        if (mutations[0].addedNodes.length === 1) {
            endBtn.getElementsByTagName("a")[0].onclick = () => {
                ws.close()
            };
        } else if (mutations[0].addedNodes.length === 3) {
            region = document.getElementById("team-server-select").value;
            delayConnect();
        };
    });
    DOM_observer.observe(endBtn, {
        childList: true
    });
    DOM_observer.observe(teamJoined, {
        childList: true
    });

    function wsUrl() {
        var wsUrl, wsRegion;
        if (region === 'na') {
            wsRegion = 'usr';
        } else if (region === 'eu') {
            wsRegion = 'eur';
        } else if (region === 'asia') {
            wsRegion = 'asr';
        } else if (region === 'sa') {
            wsRegion = 'sa';
        };
        wsUrl = `wss://${wsRegion}.mathsiscoolfun.com:8001/ptc`;
        return wsUrl;
    };

    function delayConnect() {
        timeout = setTimeout(getPing, 2500);
    };

    function doSend(message) {
        if (ws.readyState === 1) {
            sendTime = Date.now();
            ws.send(message);
        };
    };

    function getPing() {
        var ping, url = wsUrl();
        ws = new WebSocket(url);

        ws.onopen = () => {
            clearTimeout(timeout);
            doSend(new ArrayBuffer(1));
        };

        ws.onclose = (evt) => {
            if (evt.code === 1005) {
                pingDisplay.innerHTML = `Waiting for a game start...`;
                pingDisplay.style.color = "white";
            } else if (evt.code === 1006) {
                ws = null;
                delayConnect();
            };
        };

        ws.onmessage = () => {
            receiveTime = Date.now();
            ping = receiveTime - sendTime;
            pingDisplay.innerHTML = `${ping} ms`;
            setTimeout(() => {
                doSend(new ArrayBuffer(1))
                if (ping >= 120) {
                    pingDisplay.style.color = "red";
                    pingDisplay.innerHTML = `${ping} ms?!!`;
                } else if (90 < ping < 120) {
                    pingDisplay.style.color = "orange";
                }
                /* else if (60 < ping <= 90) {
                                    pingDisplay.style.color = "yellow";
                                }*/
                else {
                    pingDisplay.style.color = "white";
                }
            }, 200);
        };

        ws.onerror = () => {
            pingDisplay.innerHTML = `NaN ms`;
            pingDisplay.style.color = "white";
        };
    };
})();

// #HP&AD Counter
! function() {
    "use strict";
    var e = 0,
        t = document.createElement("span");
    t.style = "display:block;position:fixed;z-index: 2;margin:6px 0 0 0;right: 15px;mix-blend-mode: difference;font-weight: bold;font-size:large;";
    document.querySelector("#ui-health-container").appendChild(t);
    var n = document.createElement("span");
    n.style = "display:block;position:fixed;z-index: 2;margin:6px 0 0 0;left: 15px;mix-blend-mode: difference;font-weight: bold;font-size: large;";
    document.querySelector("#ui-health-container").appendChild(n);
    setInterval((function() {
        var i = document.getElementById("ui-health-actual").style.width.slice(0, -1);
        e !== i && (e = i, t.innerHTML = Number.parseFloat(i).toFixed(1));
        var o = 25 * document.getElementById("ui-boost-counter-0").querySelector(".ui-bar-inner").style.width.slice(0, -1) / 100 + 25 * document.getElementById("ui-boost-counter-1").querySelector(".ui-bar-inner").style.width.slice(0, -1) / 100 + 37.5 * document.getElementById("ui-boost-counter-2").querySelector(".ui-bar-inner").style.width.slice(0, -1) / 100 + 12.5 * document.getElementById("ui-boost-counter-3").querySelector(".ui-bar-inner").style.width.slice(0, -1) / 100;
        n.innerHTML = Math.round(o)
    }))
}();

/*Make things easy xlibizitoynetly*/
function delAds(e) {
    document.getElementById(e) && document.getElementById(e).remove()
}
setInterval(function() {
    var adsA = document.getElementsByClassName("ad-block-leaderboard-bottom")[0];
    delAds("leaderboard-front");
    delAds("adunit");
    delAds("ui-stats-ad-container-desktop");
    adsA && adsA.remove();
}, 100);