TerriX Executor v2.6

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

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==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);

})();