Territorial.io Auto-Join & Play (with UI Dashboard)

Adds a UI with instructions. Random names, 5-sec space spam. F7 arms, F6 toggles spam.

目前為 2025-07-01 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Territorial.io Auto-Join & Play (with UI Dashboard)
// @namespace    Violentmonkey Scripts
// @version      16.0
// @description  Adds a UI with instructions. Random names, 5-sec space spam. F7 arms, F6 toggles spam.
// @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';

    // --- Configuration: MASSIVE Random Username Parts ---
    const baseNames = [
        'Abyss', 'Ace', 'Aegis', 'Agent', 'Algorithm', 'Alpha', 'Alpine', 'Amazon', 'Ambush', 'Android', 'Annihilator',
        'Apex', 'Apollo', 'Arcane', 'Archer', 'Arctic', 'Argon', 'Argus', 'Ares', 'Armada', 'Arrow', 'Artillery', 'Asgard',
        'Ash', 'Assassin', 'Asteroid', 'Astra', 'Atlas', 'Atom', 'Aurora', 'Avalanche', 'Avatar', 'Avenger', 'Axiom',
        'Azrael', 'Azure', 'Ballista', 'Bandit', 'Banshee', 'Barbarian', 'Baron', 'Barrage', 'Basilisk', 'Bastion', 'Battalion',
        'Beacon', 'Bear', 'Behemoth', 'Berserker', 'Biscuit', 'Blackout', 'Blade', 'Blaster', 'Blaze', 'Blitz', 'Blizzard',
        'Blockade', 'Bolt', 'Bomber', 'Boop', 'Borealis', 'Breaker', 'Brigade', 'Brutal', 'BubbleGum', 'Bullet', 'Button',
        'Cabal', 'Cadet', 'Caliber', 'Canyon', 'Captain', 'Cascade', 'Cataclysm', 'Catalyst', 'Catapult', 'Cavalry', 'Centurion',
        'Cerberus', 'Chaos', 'Charger', 'Chief', 'Chimera', 'Cinder', 'Cipher', 'Citadel', 'Cleric', 'Cliff', 'Cobra',
        'Colonel', 'Colossus', 'Comet', 'Commander', 'Commando', 'Conqueror', 'Constellation', 'Cosmic', 'Cougar', 'Coyote',
        'Crash', 'Crater', 'Creek', 'Crescent', 'Crossbow', 'Crown', 'Crucible', 'Crusader', 'Cryptic', 'Crystal', 'Curse',
        'Cyber', 'Cyclone', 'Cyclops', 'Daemon', 'Dagger', 'Deadeye', 'Deathwish', 'Decoy', 'Delta', 'Demon', 'Desert',
        'Desolator', 'Destroyer', 'Diablo', 'Diamond', 'Digger', 'Disco', 'Doodle', 'Doomsday', 'Dozer', 'Draco', 'Dragon',
        'Drifter', 'Droid', 'Druid', 'Duke', 'Dune', 'Dust', 'Dynamite', 'Dynamo', 'Dynasty', 'Eagle', 'Earthquake', 'Echo',
        'Eclipse', 'Edict', 'Einherjar', 'Elder', 'Element', 'Elite', 'Elysium', 'Ember', 'Emperor', 'Empire', 'Enforcer',
        'Enigma', 'Entity', 'Envoy', 'Eon', 'Epoch', 'Era', 'Eruption', 'Eternal', 'Everest', 'Executioner', 'Exile', 'Exodus',
        'Factor', 'Falcon', 'Famine', 'Fang', 'Faze', 'Fenrir', 'Firewall', 'Fissure', 'Flame', 'Flash', 'Flux', 'Forerunner',
        'Forest', 'Forge', 'Fortress', 'Fox', 'Fragment', 'Frenzy', 'Frost', 'Fury', 'Fuse', 'Fusion', 'Fuzzy', 'Gadget',
        'Gale', 'Gamma', 'Gamer', 'Gargoyle', 'Garrison', 'Gauntlet', 'Geist', 'General', 'Genesis', 'Ghost', 'Giant',
        'Giggle', 'Glacier', 'Gladiator', 'Glitch', 'Gloom', 'Gnasher', 'Goblin', 'Golem', 'Goliath', 'Gorgon', 'Granite',
        'Gravity', 'Gremlin', 'Griffin', 'Grim', 'Grizzly', 'Groove', 'Guardian', 'Guerilla', 'Gully', 'GummyBear', 'Gunner',
        'Hades', 'Hailstorm', 'Hammer', 'Harbinger', 'Harpy', 'Havoc', 'Hawk', 'Hazard', 'Haze', 'Headhunter', 'Hellfire',
        'Hellion', 'Herald', 'Hermes', 'Hero', 'Hex', 'Hive', 'Horizon', 'Hornet', 'Hunter', 'Hurricane', 'Husk', 'Hydra',
        'Hyperion', 'Ice', 'Icarus', 'Icon', 'Ifrit', 'Illusionist', 'Impact', 'Impulse', 'Incendiary', 'Inferno', 'Infinity',
        'Infantry', 'Inquisitor', 'Ion', 'Iron', 'Ironclad', 'Jaguar', 'Javelin', 'Jawbreaker', 'Jellyfish', 'Jester', 'Jet',
        'Jinx', 'Jotun', 'Juggernaut', 'Jungle', 'Juno', 'Jupiter', 'Kaiser', 'Kami', 'Karma', 'Kestrel', 'King', 'Kismet',
        'Knight', 'Kodiak', 'Kraken', 'Kyrie', 'Labyrinth', 'Lagoon', 'Lancer', 'Landslide', 'Laser', 'Lava', 'Legacy',
        'Legend', 'Legion', 'Leopard', 'Leviathan', 'Lightning', 'Lion', 'Lizard', 'Locus', 'Lotus', 'Lumberjack', 'Luna',
        'Lynx', 'Maelstrom', 'Mage', 'Magma', 'Magnet', 'Major', 'Malice', 'Mamba', 'Mammoth', 'Manticore', 'Mantis',
        'Marauder', 'Marine', 'Marshal', 'Martian', 'Martyr', 'Master', 'Matrix', 'Maverick', 'Mecha', 'Medusa', 'Mega',
        'Menace', 'Mercenary', 'Mercury', 'Meridian', 'Mesa', 'Meteor', 'Midgard', 'Mirage', 'Monarch', 'Monsoon', 'Monster',
        'Monolith', 'Moon', 'Mountain', 'Murdock', 'Mutant', 'Myrmidon', 'Myth', 'Nadir', 'Nanite', 'Napalm', 'Nebula',
        'Necromancer', 'Nemesis', 'Neptune', 'Nether', 'Nexus', 'Nightfall', 'Nightmare', 'Ninja', 'Nitro', 'Nomad', 'Noodle',
        'North', 'Nova', 'Nuke', 'Null', 'Nyx', 'Oasis', 'Oblivion', 'Obsidian', 'Ocean', 'Octane', 'Odin', 'Odyssey',
        'Olympus', 'Omega', 'Omen', 'Oni', 'Onslaught', 'Onyx', 'Oracle', 'Orbital', 'Orc', 'Origin', 'Outcast', 'Outlaw',
        'Outpost', 'Overdrive', 'Overlord', 'Overwatch', 'Paladin', 'Panda', 'Pandemonium', 'Pandora', 'Panther', 'Paragon',
        'Paradigm', 'Paradox', 'Parallax', 'Pathfinder', 'Patriot', 'Patrol', 'Pestilence', 'Phalanx', 'Phantom', 'Pharaoh',
        'Phoenix', 'Pickle', 'Pioneer', 'Piranha', 'Piston', 'Pixel', 'Plague', 'Plasma', 'Platoon', 'Pluto', 'Polaris',
        'Praetorian', 'Primal', 'Prime', 'Pro', 'Prodigy', 'Prophet', 'Protocol', 'Psycho', 'Puma', 'Pulse', 'Punisher',
        'Pyramid', 'Pyro', 'Python', 'Quake', 'Quantum', 'Quasar', 'Queen', 'Quest', 'Quicksilver', 'Rabbit', 'Radical',
        'Rage', 'Raider', 'Rain', 'Rampage', 'Rampart', 'Ranger', 'Raptor', 'Ratchet', 'Raven', 'Ravine', 'Razor', 'Reaper',
        'Rebel', 'Recon', 'Recruit', 'Redline', 'Regiment', 'Relic', 'Renegade', 'Replicant', 'Retro', 'Revenant', 'Riddle',
        'Rift', 'Ringer', 'Ripper', 'River', 'Roamer', 'Rocket', 'Rogue', 'Ronin', 'Rook', 'Rubble', 'Ruby', 'Ruin',
        'Ruler', 'Rune', 'Sabotage', 'Sabre', 'Saint', 'Salamander', 'Samurai', 'Sanctum', 'Sandman', 'Sapphire', 'Sarge',
        'Sasquatch', 'Satellite', 'Saturn', 'Savage', 'Savanna', 'Scarab', 'Scavenger', 'Scepter', 'Scimitar', 'Scorpion',
        'Scourge', 'Scout', 'Scribble', 'Scythe', 'Seeker', 'Sentinel', 'Seraph', 'Sergeant', 'Serpent', 'Shade', 'Shadow',
        'Shaman', 'Shard', 'Shark', 'Sharpshooter', 'Shell', 'Sheriff', 'Shield', 'Shogun', 'Shrapnel', 'Shrine', 'Siege',
        'Sierra', 'Sigma', 'Signal', 'Silver', 'Siren', 'Sirocco', 'Skeptic', 'Skull', 'Slayer', 'Sledge', 'Sling', 'Slingshot',
        'Snake', 'Sniper', 'Socks', 'Solar', 'Soldier', 'Solitude', 'Solstice', 'Sonar', 'Sorcerer', 'Soul', 'South',
        'Sovereign', 'Sparky', 'Spartan', 'Specter', 'Sphinx', 'Spider', 'Spike', 'Spire', 'Spirit', 'Spitfire', 'Squadron',
        'Squall', 'Stalker', 'Star', 'Stardust', 'Stargate', 'Stasis', 'Static', 'Stealth', 'Steel', 'Stinger', 'Stone',
        'Storm', 'Stratus', 'Striker', 'Stryker', 'Summit', 'Sun', 'Supernova', 'Surge', 'Swamp', 'Swiftstrike', 'Switch',
        'Swoop', 'Sylvan', 'Symbol', 'Synapse', 'Syndicate', 'System', 'Tachyon', 'Tactician', 'Talisman', 'Talon', 'Tank',
        'Tarantula', 'Tartarus', 'Taskmaster', 'Tau', 'Tempest', 'Templar', 'Terminal', 'Terminator', 'Terminus', 'Terra',
        'Tesseract', 'Testament', 'Tether', 'Thanatos', 'Theta', 'Thorn', 'Thor', 'Thrasher', 'Thunder', 'Tiger', 'Titan',
        'Titanium', 'Tokamak', 'Tomahawk', 'Tombstone', 'Tornado', 'Torpedo', 'Torque', 'Totem', 'Toxin', 'Tracer', 'Trance',
        'Tranquility', 'Trapper', 'Trauma', 'Trench', 'Triad', 'Tribune', 'Trident', 'Trigger', 'Trinity', 'Trojan', 'Trooper',
        'Tsunami', 'Tundra', 'Tunnel', 'Turret', 'Turtle', 'Twister', 'Typhoon', 'Tyrant', 'UFO', 'Ultra', 'Ulysses',
        'Umbra', 'Unicorn', 'Union', 'Unity', 'Universe', 'Uprising', 'Uranus', 'Ursa', 'Vagabond', 'Valhalla', 'Valkyrie',
        'Valley', 'Valor', 'Vampire', 'Vandal', 'Vanguard', 'Vanish', 'Vector', 'Vega', 'Vengeance', 'Venom', 'Ventura',
        'Venus', 'Vertex', 'Veteran', 'Vex', 'Vibration', 'Victor', 'Vindicator', 'Viper', 'Virus', 'Vision', 'Visitor',
        'Void', 'Volcano', 'Volt', 'Voltage', 'Voodoo', 'Vortex', 'Vulture', 'Waffle', 'Wanderer', 'War', 'Warden', 'Warlock',
        'Warlord', 'Warp', 'Warrior', 'Warthog', 'Wasp', 'Watcher', 'Wave', 'Wayfarer', 'Wendigo', 'West', 'Whisper', 'Whiz',
        'Wildcard', 'Wildfire', 'Wind', 'Wing', 'Winter', 'Wisp', 'Witch', 'Wizard', 'Wolf', 'Wolverine', 'Wraith', 'Wrath',
        'Wreckage', 'Wyvern', 'Xenon', 'Xenomorph', 'Yeti', 'Yggdrasil', 'Yoru', 'Zealot', 'Zenith', 'Zephyr', 'Zeus',
        'Zipper', 'Zodiac', 'Zombie', 'Zone', 'Zoom'
    ];
    const tags = ['[Anti-og]', '[ANTI-OG]', '[Anti-OG]'];

    // --- State Variables ---
    let isAutomationRunning = false;
    let isSpammingActive = false;
    let spaceSpamIntervalId = null;
    let isArmed = sessionStorage.getItem('territorialAutoStartArmed') === 'true';

    // Stop immediately if this isn't a territorial.io page.
    if (!isTerritorialPage()) return;

    // --- NEW: Dashboard UI Creation ---
    function createDashboardUI() {
        // Main container
        const dashboard = document.createElement('div');
        Object.assign(dashboard.style, {
            position: 'fixed', top: '20px', left: '20px', zIndex: '10000',
            backgroundColor: 'rgba(0, 0, 0, 0.75)', color: 'white',
            border: '1px solid #888', borderRadius: '8px',
            fontFamily: 'sans-serif', fontSize: '14px',
            minWidth: '280px', userSelect: 'none'
        });

        // Header (for dragging and title)
        const header = document.createElement('div');
        Object.assign(header.style, {
            padding: '8px 12px', backgroundColor: '#333',
            cursor: 'move', borderTopLeftRadius: '8px', borderTopRightRadius: '8px',
            display: 'flex', justifyContent: 'space-between', alignItems: 'center'
        });
        header.innerHTML = '<strong>Auto-Play Dashboard</strong>';

        // Minimize/Maximize Button
        const toggleButton = document.createElement('button');
        toggleButton.innerText = '−';
        Object.assign(toggleButton.style, {
            background: '#555', border: '1px solid #777', color: 'white',
            borderRadius: '4px', cursor: 'pointer', width: '24px', height: '24px',
            fontSize: '16px', lineHeight: '1', padding: '0'
        });

        // Content panel with instructions
        const content = document.createElement('div');
        content.id = 'dashboard-content';
        Object.assign(content.style, {
            padding: '12px', borderTop: '1px solid #555',
            display: 'block' // Initially visible
        });
        content.innerHTML = `
            <ul style="margin: 0; padding-left: 20px; list-style-type: '» ';">
                <li>Press <code>F7</code> to arm/disarm auto-start on focus.</li>
                <li>Press <code>F6</code> to manually start/stop the script.</li>
                <li><strong>Status:</strong> <span id="dashboard-status">Idle</span></li>
            </ul>`;

        header.appendChild(toggleButton);
        dashboard.appendChild(header);
        dashboard.appendChild(content);
        document.body.appendChild(dashboard);

        // --- UI Functionality ---
        toggleButton.onclick = () => {
            const isMinimized = content.style.display === 'none';
            content.style.display = isMinimized ? 'block' : 'none';
            toggleButton.innerText = isMinimized ? '−' : '+';
        };

        makeDraggable(dashboard, header);
    }

    function makeDraggable(element, handle) {
        let isDragging = false, offsetX, offsetY;
        handle.onmousedown = (e) => {
            isDragging = true;
            offsetX = e.clientX - element.offsetLeft;
            offsetY = e.clientY - element.offsetTop;
            document.onmousemove = (e) => {
                if (!isDragging) return;
                element.style.left = `${e.clientX - offsetX}px`;
                element.style.top = `${e.clientY - offsetY}px`;
            };
            document.onmouseup = () => { isDragging = false; document.onmousemove = document.onmouseup = null; };
        };
    }

    function updateDashboardStatus(statusText) {
        const statusEl = document.getElementById('dashboard-status');
        if (statusEl) statusEl.innerText = statusText;
    }

    // --- Core Script Logic ---
    console.log(`[Auto-Play] Script ready. Auto-start is ${isArmed ? 'ARMED' : 'DISARMED'}. Press F7 to toggle. Press F6 to control spam.`);

    document.addEventListener('keydown', (event) => {
        if (event.key === 'F6') { event.preventDefault(); toggleManualSequence(); }
        if (event.key === 'F7') { event.preventDefault(); toggleArmedState(); }
    });

    document.addEventListener('visibilitychange', () => {
        if (document.visibilityState === 'visible' && isArmed && !isAutomationRunning && !isSpammingActive) {
            isAutomationRunning = true;
            startAutomation();
        }
    });

    function toggleManualSequence() {
        if (isSpammingActive) { stopSpaceSpam(); }
        else if (!isAutomationRunning) { isAutomationRunning = true; startAutomation(); }
    }

    function toggleArmedState() {
        isArmed = !isArmed;
        sessionStorage.setItem('territorialAutoStartArmed', isArmed);
        console.log(`[Auto-Play] Auto-start on focus is now ${isArmed ? 'ARMED' : 'DISARMED'}.`);
        updateDashboardStatus(`Auto-start ${isArmed ? 'ARMED' : 'DISARMED'}.`);
    }

    function startAutomation() {
        console.log('[Auto-Play] Starting automation sequence...');
        updateDashboardStatus('Running sequence...');
        autoFillUsername()
            .then(() => waitForElementAndClick(findMultiplayerButton, "'Multiplayer' button"))
            .then(() => waitForElementAndClick(findReadyButton, "'Ready' button"))
            .then(() => {
                isAutomationRunning = false;
                startSpaceSpam();
            })
            .catch(error => {
                console.error(error);
                isAutomationRunning = false;
                updateDashboardStatus('Error!');
            });
    }

    function autoFillUsername() {
        return new Promise((resolve, reject) => {
            waitForElement(findUsernameInput, 'Username Input Field').then(nameInput => {
                const username = generateRandomUsername();
                console.log(`[Auto-Play] Setting username to: ${username}`);
                nameInput.value = username;
                nameInput.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
                nameInput.focus();
                nameInput.blur();
                setTimeout(resolve, 200);
            }).catch(reject);
        });
    }

    function generateRandomUsername() {
        const randomBase = baseNames[Math.floor(Math.random() * baseNames.length)];
        const randomTag = tags[Math.floor(Math.random() * tags.length)];
        return Math.random() < 0.5 ? randomTag + randomBase : randomBase + randomTag;
    }

    function startSpaceSpam() {
        if (isSpammingActive) return;
        isSpammingActive = true;
        updateDashboardStatus('Spamming Space key every 5s...');
        console.log('[Auto-Play] Starting spacebar spam every 5 seconds. Press F6 to stop.');
        spaceSpamIntervalId = setInterval(() => {
            console.log('[Auto-Play] Pressing Spacebar...');
            document.dispatchEvent(new KeyboardEvent('keydown', { 'key': ' ', 'code': 'Space', 'keyCode': 32, 'bubbles': true }));
        }, 5000);
    }

    function stopSpaceSpam() {
        if (!isSpammingActive) return;
        clearInterval(spaceSpamIntervalId);
        isSpammingActive = false;
        console.log('[Auto-Play] Spacebar spam stopped.');
        updateDashboardStatus('Idle.');
    }

    // --- Helper Functions ---
    function isTerritorialPage() {
        const href = window.location.href;
        if (href.includes('territorial.io')) return true;
        if (href.includes('?__cpo=')) { try { return atob(new URLSearchParams(window.location.search).get('__cpo')).includes('territorial.io'); } catch (e) { return false; } }
        return false;
    }

    function waitForElement(findFunction, description) {
        return new Promise((resolve, reject) => {
            let attempts = 0, maxAttempts = 75; // 15 seconds
            const interval = setInterval(() => {
                if (attempts++ >= maxAttempts) { clearInterval(interval); reject(new Error(`[Auto-Play] Timed out: ${description}`)); return; }
                const element = findFunction();
                if (element) { clearInterval(interval); resolve(element); }
            }, 200);
        });
    }

    function waitForElementAndClick(findFunction, description) {
        return waitForElement(findFunction, description).then(element => element.click());
    }

    const findUsernameInput = () => document.getElementById('input0');
    const findMultiplayerButton = () => Array.from(document.querySelectorAll('button')).find(btn => btn.innerText.includes('Multiplayer'));
    const findReadyButton = () => Array.from(document.querySelectorAll('button')).find(btn => btn.innerText.trim().startsWith('Ready'));

    // --- Initializer ---
    createDashboardUI();

})();

QingJ © 2025

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