Gota.io auto invite

Script for auto add players to your party

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name            Gota.io auto invite
// @name:ru         Gota.io авто инвайтер
// @namespace       Gota.io script by Madzal
// @author          Madzal
// @version         3
// @homepage        http://gota.io/web
// @supportURL      http://www.YouTube.com/user/madzal777
// @description     Script for auto add players to your party
// @description:ru  Скрипт для авто добавления игроков в твою команду
// @icon            data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZ
// @match           http://gota.io/web/
// @exclude         file://*
// @run-at          document-end
// @encoding        utf-8
// @grant           none
// @noframes
// @license         MIT //
// ==/UserScript==

(function() {
    'use strict'; // Enforce strict mode for cleaner code

    let observer = null; // To hold the MutationObserver instance

    function handlePlayerInvite(node) {
        // Check if the inserted node is a chat message containing a canvas
        // This assumes chat messages for player IDs are structured in a predictable way
        const canvas = node.querySelector("canvas[data-player-id]");
        if (canvas) {
            const playerid = canvas.getAttribute("data-player-id");
            const partyCanvas = document.getElementById("party-canvas");

            // Ensure partyCanvas exists and has the correct height before sending an invite
            if (partyCanvas && partyCanvas.height !== 205) {
                console.log('Sending invite to player - ' + playerid);
                // Ensure 'player' and 'Packet' objects are available in the page context.
                // If they are not, you might need to use 'unsafeWindow.player' or 'unsafeWindow.Packet'
                // However, since @grant none is used, the script runs in the page context by default.
                if (typeof player !== 'undefined' && typeof Packet !== 'undefined' && typeof Packet.sendPartyAction !== 'undefined') {
                    player.sendPacket(new Packet.sendPartyAction(0, playerid));
                } else {
                    console.warn("Gota.io game objects (player or Packet) not found. Cannot send invite.");
                }
            }
        }
    }

    function startAutoInvite() {
        const chatBody = document.getElementById("chat-body");
        if (!chatBody) {
            console.error("Chat body element not found. Auto invite cannot start.");
            return;
        }

        // Options for the observer (which mutations to observe)
        const config = { childList: true, subtree: true };

        // Callback function to execute when mutations are observed
        const callback = (mutationsList, observerInstance) => {
            for (const mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    for (const addedNode of mutation.addedNodes) {
                        // Check if the added node is an element and not just text
                        if (addedNode.nodeType === 1) { // Node.ELEMENT_NODE
                            handlePlayerInvite(addedNode);
                        }
                    }
                }
            }
        };

        // Create a new MutationObserver instance
        observer = new MutationObserver(callback);

        // Start observing the target node for configured mutations
        observer.observe(chatBody, config);
        console.log("Auto invite started. Monitoring chat for new players.");

        // Disable the start button and enable the stop button
        document.getElementById("start_invite").disabled = true;
        document.getElementById("stop_invite").disabled = false;
    }

    function stopAutoInvite() {
        if (observer) {
            observer.disconnect(); // Stop observing
            observer = null;
            console.log("Auto invite stopped.");
        }
        // Disable the stop button and enable the start button
        document.getElementById("start_invite").disabled = false;
        document.getElementById("stop_invite").disabled = true;
    }

    // --- Script Initialization ---

    // Create buttons
    const startButton = document.createElement("input");
    startButton.className = "gota-btn";
    startButton.type = "button";
    startButton.value = "Start Auto Invite";
    startButton.id = "start_invite";
    startButton.addEventListener("click", startAutoInvite, false);

    const stopButton = document.createElement("input");
    stopButton.className = "gota-btn";
    stopButton.type = "button";
    stopButton.value = "Stop Script";
    stopButton.id = "stop_invite";
    stopButton.addEventListener("click", stopAutoInvite, false);
    stopButton.disabled = true; // Initially disabled until invite starts

    // Append buttons to the Gota.io UI
    const mainTop = document.getElementsByClassName("main-top")[0];
    if (mainTop) {
        const mydiv = document.createElement("div");
        mydiv.className = "main-version";
        mydiv.style.margin = "15px";
        mydiv.appendChild(startButton);
        mydiv.appendChild(stopButton);
        mainTop.appendChild(mydiv);
    } else {
        console.error("Could not find '.main-top' element to append buttons.");
    }
})();