Connected Users

Shows the amount of connected users next to the amount of all users

// ==UserScript==
// @name         Connected Users
// @namespace    http://tampermonkey.net/
// @version      1.1.1
// @description  Shows the amount of connected users next to the amount of all users
// @author       guildedbird & azti
// @match        https://pixelplace.io/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    let canvasTotal = null;
    let lastUserTotal = null;
    let lastDisplay = '';

    function update(force = false) {
        const value1 = document.querySelector('#chat .online span.value');
        const value2 = document.querySelector('span.sub-value');

        if (!value1 || !value2) return;

        const titleText = value1.title;
        const matchUserTotal = titleText.match(/^\d+/);
        const matchCanvasTotal = titleText.match(/\s\d+/);

        if (!matchUserTotal) return;

        const currentUserTotal = parseInt(matchUserTotal[0]);

        if (canvasTotal === null && matchCanvasTotal) {
            canvasTotal = parseInt(matchCanvasTotal[0].trim());
        }

        const newDisplay = (() => {
            let result = `${currentUserTotal}`;
            if (canvasTotal && canvasTotal > 0) {
                result += ` & ${canvasTotal}`;
            }
            return `(${result})`;
        })();

        if (force || currentUserTotal !== lastUserTotal || newDisplay !== lastDisplay) {
            value2.textContent = newDisplay;
            value2.style.setProperty('display', 'inline', 'important');
            value2.style.setProperty('color', '#b3b3b3', 'important');

            lastUserTotal = currentUserTotal;
            lastDisplay = newDisplay;
        }
    }

    function updateCanvasTotal() {
        const players = document.querySelectorAll('.players-list .player');
        const newTotal = players.length;

        if (newTotal !== canvasTotal) {
            canvasTotal = newTotal;
            update(true);
        }
    }

    function observeSubValue() {
        const value2 = document.querySelector('span.sub-value');
        if (value2) {
            const observer = new MutationObserver(() => {
                value2.style.setProperty('display', 'inline', 'important');
                value2.style.setProperty('color', '#b3b3b3', 'important');
            });
            observer.observe(value2, { attributes: true, attributeFilter: ['style'] });
        }
    }

    update();
    observeSubValue();

    const chatElement = document.querySelector('#chat .online');
    if (chatElement) {
        const observer = new MutationObserver(() => {
            const value1 = document.querySelector('#chat .online span.value');
            if (value1) update();
        });
        observer.observe(chatElement, { childList: true, subtree: true, attributes: true });
    }

    const playerListElement = document.querySelector('.players-list');
    if (playerListElement) {
        const observer2 = new MutationObserver(() => {
            updateCanvasTotal();
        });
        observer2.observe(playerListElement, { childList: true, subtree: true, attributes: true });
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址