Territorial.io bot

Trying to create a bot for the game territorial.io

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Territorial.io bot
// @version      0.1
// @description  Trying to create a bot for the game territorial.io
// @author       TechAle
// @match        https://territorial.io/
// @grant        GM_xmlhttpRequest
// @run-at       document-start
// @namespace https://greasyfork.org/users/909685
// ==/UserScript==

(function() {
    'use strict';

    GM_xmlhttpRequest({
        method: "GET",
        url: document.location.origin,
        onload: res => {
            const toChange = {
                "w && Math.floor(kQ[cJ] * x) !== B && (F = !0)": "if (window.randomTroops)\n" +
                    "                x = Math.random()\n" +
                    "            w && Math.floor(kQ[cJ] * x) !== B && (F = !0)",
                "cZ.rx();" : "if (!window.freezeAI)\n" +
                    "            cZ.rx();"
            };

            let html = res.responseText;
            for (const [before, after] of Object.entries(toChange)) {
                debugger;
                html = html.replace(before.replaceAll(" ", ""), after)
            }

            html += getMenu();

            document.open();
            document.write(html);
            document.close();
        }
    })

    function getMenu() {
       return '<!--\n' +
           'I have to create everything like this?! UFF\n' +
           '-->\n' +
           '\n' +
           '<style>\n' +
           '    #menu {\n' +
           '        position: absolute;\n' +
           '        z-index: 9;\n' +
           '        background-color: deepskyblue;\n' +
           '        border: 1px solid #d3d3d3;\n' +
           '        text-align: center;\n' +
           '        -webkit-user-select: none;\n' +
           '        -webkit-touch-callout: none;\n' +
           '        -moz-user-select: none;\n' +
           '        -ms-user-select: none;\n' +
           '        user-select: none;\n' +
           '        width: 750px;\n' +
           '        font-size: 25px;\n' +
           '        top: 100px;\n' +
           '        right: 60px\n' +
           '    }\n' +
           '\n' +
           '    #headerMenu {\n' +
           '        padding: 10px;\n' +
           '        cursor: move;\n' +
           '        z-index: 10;\n' +
           '        background-color: dodgerblue;\n' +
           '        color: black;\n' +
           '    }\n' +
           '\n' +
           '    #modules {\n' +
           '        display: flex;\n' +
           '    }\n' +
           '\n' +
           '    #modules > * {\n' +
           '        width: 80%;\n' +
           '        background-color: lightgray;\n' +
           '        color: black;\n' +
           '        margin-bottom: 2px;\n' +
           '        margin-right: 2px ;\n' +
           '    }\n' +
           '\n' +
           '    #sections {\n' +
           '        width: 20%;\n' +
           '        margin-bottom: 2px;\n' +
           '        margin-left: 2px;\n' +
           '        margin-right: 0;\n' +
           '        border-right: dodgerblue solid 1px;\n' +
           '    }\n' +
           '\n' +
           '    #sections > * {\n' +
           '        border-bottom: dodgerblue solid 1px;\n' +
           '        padding-top: 2px;\n' +
           '        padding-bottom: 2px;\n' +
           '    }\n' +
           '\n' +
           '    #sections:hover {\n' +
           '        cursor: pointer;\n' +
           '    }\n' +
           '\n' +
           '    #settings {\n' +
           '        overflow-y: scroll;\n' +
           '        text-align: left;\n' +
           '        padding-left: 15px;\n' +
           '    }\n' +
           '\n' +
           '</style>\n' +
           '\n' +
           '<!-- Draggable DIV -->\n' +
           '<div id="menu" oncontextmenu="return false">\n' +
           '    <!-- Include a header DIV with the same name as the draggable DIV, followed by "header" -->\n' +
           '    <div id="headerMenu">Console</div>\n' +
           '    <div id="modules">\n' +
           '        <div id="sections">\n' +
           '            <div onclick="display(\'combat\')">Self</div>\n' +
           '            <div onclick="display(\'render\')">Bot</div>\n' +
           '            <div onclick="display(\'move\')">Lobby</div>\n' +
           '            <div onclick="display(\'misc\')" style="border-bottom: none">AI</div>\n' +
           '        </div>\n' +
           '\n' +
           '        <div id="settings">\n' +
           '            <!-- self -->\n' +
           '            <div id="combat">\n' +
           '                <label><input type="checkbox" id="randomTroops" onclick="window.randomTroops = this.checked"> Random troops</label>\n' +
           '            </div>\n' +
           '\n' +
           '            <!-- render -->\n' +
           '            <div id="render" style="display: none">\n' +
           '            </div>\n' +
           '\n' +
           '            <!-- lobby -->\n' +
           '            <div id="move" style="display: none">\n' +
           '               <label><input type="checkbox" onclick="window.freezeAI = this.checked"> Freeze AI</label>\n' +
           '            </div>\n' +
           '\n' +
           '            <!-- AI -->\n' +
           '            <div id="misc" style="display: none">\n' +
           '            </div>\n' +
           '        </div>\n' +
           '    </div>\n' +
           '</div>\n' +
           '\n' +
           '\n' +
           '<script>\n' +
           '    window.randomTroops = false;\n' +
           '    window.freezeAI = false;\n' +
           '    // Make the DIV element draggable:\n' +
           '    dragElementModules(document.getElementById("menu"));\n' +
           '\n' +
           '    function dragElementModules(elmnt) {\n' +
           '\n' +
           '        function dragModules(e) {\n' +
           '            e = e || window.event;\n' +
           '            e.preventDefault();\n' +
           '            // calculate the new cursor position:\n' +
           '            pos1 = pos3 - e.clientX;\n' +
           '            pos2 = pos4 - e.clientY;\n' +
           '            pos3 = e.clientX;\n' +
           '            pos4 = e.clientY;\n' +
           '            // set the element\'s new position:\n' +
           '            elmnt.style.top = (elmnt.offsetTop - pos2) + "px";\n' +
           '            elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";\n' +
           '        }\n' +
           '\n' +
           '        function closeModules() {\n' +
           '            // stop moving when mouse button is released:\n' +
           '            document.onmouseup = null;\n' +
           '            document.onmousemove = null;\n' +
           '        }\n' +
           '\n' +
           '        function modulesDown(e) {\n' +
           '            e = e || window.event;\n' +
           '            e.preventDefault();\n' +
           '            if (e.button === 2) {\n' +
           '                document.getElementById("modules").style.display = isActive ? "none" : "flex";\n' +
           '                isActive = !isActive;\n' +
           '            } else {\n' +
           '                // get the mouse cursor position at startup:\n' +
           '                pos3 = e.clientX;\n' +
           '                pos4 = e.clientY;\n' +
           '                document.onmouseup = closeModules;\n' +
           '                // call a function whenever the cursor moves:\n' +
           '                document.onmousemove = dragModules;\n' +
           '            }\n' +
           '        }\n' +
           '\n' +
           '\n' +
           '        var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;\n' +
           '        var isActive = true;\n' +
           '        document.getElementById("headerMenu").onmousedown = modulesDown;\n' +
           '    }\n' +
           '\n' +
           '    const everyId = ["combat", "render", "move", "misc"];\n' +
           '\n' +
           '    function display(name) {\n' +
           '        everyId.forEach(id => {\n' +
           '            document.getElementById(id).style.display = "none";\n' +
           '        })\n' +
           '        document.getElementById(name).style.display = "initial";\n' +
           '    }\n' +
           '</script>';
    }
})();