TerriX Executor v2.6

Elite Intelligence Suite. Adds Threat Radar, Interest Sync, and Reactive Defense.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         TerriX Executor v2.6
// @namespace    http://tampermonkey.net/
// @version      2.6
// @description  Elite Intelligence Suite. Adds Threat Radar, Interest Sync, and Reactive Defense.
// @author       Assistant
// @match        *://territorial.io/*
// @match        *://everythingtt.github.io/TerriX-Client/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    const CLIENT_URL = "https://everythingtt.github.io/TerriX-Client/Territorial.io.html";

    // --- 1. SCRIPT LIBRARY (The Elite Tools) ---
    const SCRIPT_LIB = {
        ThreatRadar: `/* Threat Radar: Detects ships in Fog of War */
if(!window.radar_loop) {
    window.radar_loop = setInterval(() => {
        const { bN, aD, ag } = window.G;
        const myId = aD.ep;
        const ships = bN.y;
        for(let i=0; i < ships.mG; i++) {
            // Check destination of ship (logic simplified for brevity)
            const targetPlayer = ships.mK[i] >> 3; 
            if(targetPlayer === myId) {
                console.warn("⚠️ TERRIX RADAR: INCOMING SHIP DETECTED!");
                document.getElementById('tx-header').style.background = 'red';
                setTimeout(() => document.getElementById('tx-header').style.background = '', 500);
            }
        }
    }, 1000);
    alert("Threat Radar Active.");
} else { clearInterval(window.radar_loop); window.radar_loop = null; alert("Radar Disabled."); }`,

        InterestSync: `/* Interest Sync: Highlights the economic pulse */
const G = window.G;
let lastTroops = G.ag.h7[G.aD.ep];
window.interest_watch = setInterval(() => {
    const current = G.ag.h7[G.aD.ep];
    if (current > lastTroops + 100) { // Large jump detected (Interest)
        const indicator = document.createElement('div');
        indicator.style = "position:fixed; top:50%; left:50%; color:gold; font-size:40px; z-index:999999; transform:translate(-50%,-50%); pointer-events:none; font-weight:bold;";
        indicator.innerText = "💰 TICK";
        document.body.appendChild(indicator);
        setTimeout(() => indicator.remove(), 300);
    }
    lastTroops = current;
}, 50);
alert("Economic Sync Active.");`,

        AutoColonize: `/* Optimization for early game expansion */
if(!window.tx_loop) {
    window.tx_loop = setInterval(() => {
        const G = window.G;
        if (!G || !G.b8 || !G.b8.hV) return;
        if (G.ag.h7[G.aD.ep] > 2000) G.b8.hV.hc(250, 512); 
    }, 1200);
    alert("Auto-Colonizer: ON");
} else { clearInterval(window.tx_loop); window.tx_loop = null; alert("OFF"); }`
    };

    // --- 2. UI STYLES (Territorial Glass Theme) ---
    const style = document.createElement('style');
    style.innerHTML = `
        #tx-wrapper { position: fixed; top: 0; left: 0; width: 0; height: 0; z-index: 2147483647; font-family: 'system-ui', sans-serif; }
        #tx-gui {
            position: fixed; top: 100px; left: 100px; width: 680px; height: 480px;
            background: rgba(10, 10, 10, 0.95); border: 1.8px solid white; 
            display: none; flex-direction: column; color: white; box-shadow: 0 0 40px rgba(0,0,0,1);
        }
        #tx-header { padding: 12px 20px; background: rgba(30, 30, 30, 1); display: flex; justify-content: space-between; cursor: move; border-bottom: 1.8px solid white; font-weight: 900; letter-spacing: 2px;}
        #tx-body { display: flex; flex: 1; overflow: hidden; }
        #tx-sidebar { width: 160px; background: rgba(15, 15, 15, 1); border-right: 1.8px solid white; padding: 15px; display: flex; flex-direction: column; gap: 10px; }
        #tx-main { flex: 1; display: flex; flex-direction: column; padding: 15px; background: #000; }
        #tx-editor { flex: 1; background: #050505; color: #00ff00; border: 1.5px solid #333; padding: 15px; font-family: 'Consolas', monospace; resize: none; outline: none; font-size: 13px; }
        
        .tx-btn { padding: 8px; background: rgba(50, 50, 50, 0.9); border: 1.8px solid white; color: white; cursor: pointer; font-size: 11px; font-weight: bold; text-transform: uppercase; }
        .tx-btn:hover { background: #444; border-color: #00ff00; }
        .tx-btn.active { background: #006400; }
        .tx-btn.hook-btn { background: #4b3214; margin-top: auto; border-color: #ffd700; }
        .tx-btn.client-btn { background: #1a1aff; border-color: #fff; animation: tx_glow 1.5s infinite; }
        
        @keyframes tx_glow { 0% { box-shadow: 0 0 5px #1a1aff; } 50% { box-shadow: 0 0 20px #1a1aff; } 100% { box-shadow: 0 0 5px #1a1aff; } }

        #tx-toggle { position: fixed; top: 0; left: 50%; transform: translateX(-50%); padding: 5px 30px; background: #005000; color: white; border: 1.8px solid white; border-top: none; border-radius: 0 0 10px 10px; cursor: pointer; font-weight: bold; z-index: 1000003; font-size: 10px;}

        #tx-chart, #tx-scripts { display: none; flex: 1; flex-direction: column; gap: 5px; overflow-y: auto; }
        .script-item { background: #111; border: 1.5px solid #444; padding: 10px; display: flex; justify-content: space-between; align-items: center; border-radius: 4px; }
        .script-info { font-size: 12px; font-weight: bold; color: #00d2ff; }

        /* Chart Styling */
        .bar-row { display: flex; align-items: center; gap: 10px; height: 28px; width: 100%; flex-shrink: 0; transition: transform 0.3s ease; }
        .bar-rank { width: 35px; font-size: 12px; color: #777; font-weight: bold; text-align: right; }
        .bar-name { width: 140px; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #eee; }
        .bar-track { flex: 1; background: #111; height: 16px; border: 1px solid #333; position: relative; }
        .bar-fill { height: 100%; width: 0%; background: #2e7d32; transition: width 0.4s ease; border-right: 2px solid #fff; }
        .bar-val { position: absolute; left: 100%; margin-left: 10px; font-size: 10px; color: #00ff00; font-family: monospace; }
        
        .me-row .bar-name { color: #ffd700; font-weight: bold; }
        .me-row .bar-fill { background: #ffd700; border: 1px solid white; }
    `;
    document.documentElement.appendChild(style);

    // --- 3. CORE LOGIC & UI ---
    const trap = { ag: null, aD: null, b8: null, bf: null, al: null, bN: null };
    const createTrap = (prop, name) => {
        Object.defineProperty(Object.prototype, prop, {
            set: function(v) { this["_" + prop] = v; if (!trap[name]) trap[name] = this; },
            get: function() { return this["_" + prop]; },
            configurable: true
        });
    };
    ['h7', 'ag'], ['ep', 'aD'], ['hV', 'b8'], ['aCP', 'bf'], ['kw', 'al'], ['mG', 'bN'].forEach(t => createTrap(t[0], t[1]));

    const build = () => {
        const wrapper = document.createElement('div');
        wrapper.id = 'tx-wrapper';
        wrapper.innerHTML = `
            <div id="tx-toggle">TERRIX EXECUTOR v2.6</div>
            <div id="tx-gui">
                <div id="tx-header"><span>TERRIX <span style="color:#00ff00">ELITE</span></span> <span id="tx-close" style="cursor:pointer">✕</span></div>
                <div id="tx-body">
                    <div id="tx-sidebar">
                        <button class="tx-btn active" id="nav-editor">EDITOR</button>
                        <button class="tx-btn" id="nav-chart">POWER INDEX</button>
                        <button class="tx-btn" id="nav-scripts">MODS</button>
                        <button class="tx-btn client-btn" onclick="window.open('${CLIENT_URL}')">🚀 PRO CLIENT</button>
                        <button class="tx-btn hook-btn" id="tx-hook">INJECT HOOK</button>
                    </div>
                    <div id="tx-main">
                        <textarea id="tx-editor" spellcheck="false">/* TerriX Elite Interface */</textarea>
                        <div id="tx-chart"></div>
                        <div id="tx-scripts">
                            <div class="script-item"><span class="script-info">Threat Radar (ESP)</span><button class="tx-btn" onclick="tx_load('ThreatRadar')">LOAD</button></div>
                            <div class="script-item"><span class="script-info">Interest Sync</span><button class="tx-btn" onclick="tx_load('InterestSync')">LOAD</button></div>
                            <div class="script-item"><span class="script-info">Auto-Colonizer</span><button class="tx-btn" onclick="tx_load('AutoColonize')">LOAD</button></div>
                        </div>
                    </div>
                </div>
                <div style="padding: 10px 20px; background: #0a0a0a; display: flex; justify-content: space-between; border-top: 1.8px solid white;">
                    <button class="tx-btn" style="background:#008000; border:none; padding: 5px 20px;" id="tx-execute">RUN SCRIPT</button>
                    <div style="font-size: 10px; color: #555;">STATUS: <span id="tx-stat" style="color:#ff4444">WAITING</span></div>
                </div>
            </div>
        `;
        document.documentElement.appendChild(wrapper);

        const gui = document.getElementById('tx-gui');
        document.getElementById('tx-toggle').onclick = () => gui.style.display = gui.style.display === 'flex' ? 'none' : 'flex';
        document.getElementById('tx-close').onclick = () => gui.style.display = 'none';

        const tabs = [document.getElementById('tx-editor'), document.getElementById('tx-chart'), document.getElementById('tx-scripts')];
        const navBtns = ['nav-editor', 'nav-chart', 'nav-scripts'];
        navBtns.forEach((id, i) => {
            document.getElementById(id).onclick = () => {
                navBtns.forEach(b => document.getElementById(id).classList.remove('active'));
                tabs.forEach(t => t.style.display = 'none');
                document.getElementById(id).classList.add('active');
                tabs[i].style.display = i === 0 ? 'block' : 'flex';
            };
        });

        document.getElementById('tx-hook').onclick = function() {
            if (window.G || (trap.ag && trap.aD)) {
                window.G = window.G || { ...trap };
                this.innerText = "HOOKED"; this.style.background = "#008000";
                document.getElementById('tx-stat').innerText = "CONNECTED";
                document.getElementById('tx-stat').style.color = "#00ff00";
            } else alert("Error: Engine Not Found.");
        };

        document.getElementById('tx-execute').onclick = () => { try { new Function(document.getElementById('tx-editor').value)(); } catch(e) { alert(e); } };

        window.tx_load = (k) => { document.getElementById('tx-editor').value = SCRIPT_LIB[k]; document.getElementById('nav-editor').click(); };

        // Draggable
        let d = false, x, y;
        document.getElementById('tx-header').onmousedown = (e) => { d = true; x = e.clientX - gui.offsetLeft; y = e.clientY - gui.offsetTop; };
        window.onmousemove = (e) => { if (d) { gui.style.left = (e.clientX - x) + 'px'; gui.style.top = (e.clientY - y) + 'px'; } };
        window.onmouseup = () => d = false;
    };

    build();

    // --- 4. LEADERBOARD ---
    const bars = {};
    setInterval(() => {
        if (!window.G || document.getElementById('tx-chart').style.display !== 'flex') return;
        const { ag, aD } = window.G;
        const myId = aD ? aD.ep : -1;
        let players = [];
        for (let i = 0; i < 512; i++) {
            if (ag.gt[i] > 0) {
                const pwr = (ag.gt[i] * 10) + (ag.h7[i] / 50);
                players.push({ id: i, name: ag.zU[i] || "Bot", val: pwr, isMe: i === myId });
            }
        }
        players.sort((a, b) => b.val - a.val);
        const top = players.slice(0, 15);
        const max = top[0]?.val || 1;

        top.forEach((p, idx) => {
            if (!bars[p.id]) {
                const r = document.createElement('div');
                r.className = 'bar-row';
                r.innerHTML = `<div class="bar-rank"></div><div class="bar-name"></div><div class="bar-track"><div class="bar-fill"></div><span class="bar-val"></span></div>`;
                document.getElementById('tx-chart').appendChild(r);
                bars[p.id] = r;
            }
            const r = bars[p.id];
            r.style.display = 'flex'; r.style.order = idx;
            r.className = p.isMe ? 'bar-row me-row' : 'bar-row';
            r.querySelector('.bar-rank').innerText = "#" + (idx + 1);
            r.querySelector('.bar-name').innerText = p.name;
            r.querySelector('.bar-fill').style.width = (p.val / max * 100) + '%';
            r.querySelector('.bar-val').innerText = Math.floor(p.val).toLocaleString();
        });
        Object.keys(bars).forEach(id => { if (!top.find(p => p.id == id)) bars[id].style.display = 'none'; });
    }, 500);

})();