您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically clicks Multiplayer and Ready buttons on territorial.io. Works with multiple CroxyProxy formats.
当前为
// ==UserScript== // @name Territorial.io Auto-Join Multiplayer // @namespace Violentmonkey Scripts // @version 1.2 // @description Automatically clicks Multiplayer and Ready buttons on territorial.io. Works with multiple CroxyProxy formats. // @author Assistant // @match https://territorial.io/* // @match https://*.croxyproxy.com/*territorial.io* // @match https://*/*?__cpo=* // @grant none // @run-at document-end // @license MIT // ==/UserScript== (function() { 'use strict'; /** * Checks if the current page is territorial.io, either directly or via a known proxy. * This is a safeguard to ensure the script only runs on the correct page. * @returns {boolean} */ function isTerritorialPage() { const hostname = window.location.hostname; const searchParams = new URLSearchParams(window.location.search); // 1. Check for the direct site if (hostname === 'territorial.io') { return true; } // 2. Check for the subdomain proxy format if (hostname.includes('croxyproxy.com') && window.location.href.includes('territorial.io')) { return true; } // 3. Check for the base64 encoded parameter format (e.g., on an IP address) if (searchParams.has('__cpo')) { try { // atob() decodes a base-64 encoded string. const decodedUrl = atob(searchParams.get('__cpo')); if (decodedUrl.includes('territorial.io')) { return true; } } catch (e) { // This can fail if the parameter is not valid Base64; ignore it. console.error("[Auto-Join] Error decoding __cpo parameter:", e); return false; } } return false; } // --- Main Execution Logic --- // Stop the script immediately if it's not a territorial.io page. if (!isTerritorialPage()) { // console.log("[Auto-Join] Not a territorial.io page. Halting script."); return; } console.log("[Auto-Join] Territorial.io page confirmed. Starting automation."); const TIMEOUT_SECONDS = 15; const CHECK_INTERVAL_MS = 200; function waitForElementAndClick(findFunction, successCallback, description) { let attempts = 0; const maxAttempts = (TIMEOUT_SECONDS * 1000) / CHECK_INTERVAL_MS; console.log(`[Auto-Join] Searching for: ${description}`); const interval = setInterval(() => { if (attempts >= maxAttempts) { clearInterval(interval); console.error(`[Auto-Join] Timed out waiting for: ${description}`); return; } const element = findFunction(); if (element) { clearInterval(interval); console.log(`[Auto-Join] Found and clicking: ${description}`); element.click(); if (successCallback) { successCallback(); } } attempts++; }, CHECK_INTERVAL_MS); } const findMultiplayerButton = () => { const buttons = document.querySelectorAll('button'); return Array.from(buttons).find(btn => btn.innerText.includes('Multiplayer')); }; const findReadyButton = () => { const buttons = document.querySelectorAll('button'); return Array.from(buttons).find(btn => btn.innerText.trim().startsWith('Ready')); }; // 1. Start by waiting for the "Multiplayer" button. waitForElementAndClick(findMultiplayerButton, () => { // 2. Once clicked, wait for the "Ready" button. waitForElementAndClick(findReadyButton, () => { console.log("[Auto-Join] Successfully clicked 'Ready'. Script sequence complete."); }, "'Ready' button"); }, "'Multiplayer' button"); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址