2k09__ Bot Mode V-0.1

-

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         2k09__ Bot Mode V-0.1
// @namespace    -
// @version      0.1
// @description  -
// @author       2k09__
// @match        https://sploop.io/
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict'

 alert('||~~ Commands: ||| !md -ab = AddBot ||| !md -rb ~~||');
!~function(
$ = document.querySelector.bind(document),
 botID = 0,
 bots = [],
 isBot = (window.location !== window.parent.location),
 playerID, playerX, playerY,
 ownerX, ownerY,
 touchStart = {x: 0, y: 0},
 keys = {}, weaponKey = "1"
) {

    class Sploop {
        static newKeyEvent(type) {
            return function (eventObj) {
                const { key, code } = eventObj;
                window.KeyboardEvent = Object;
                window.getEvents(type)[type == "keydown" ? 1 : 0].listener({key: key, code: code, isTrusted: 1, target: document.body, preventDefault: () => null});
                window.KeyboardEvent = KeyBoardEvent;
            };
        }
        static key = {
            down: this.newKeyEvent("keydown"),
            up: this.newKeyEvent("keyup"),
            press(eventObj) {
                Sploop.newKeyEvent("keydown")(eventObj);
                Sploop.newKeyEvent("keyup")(eventObj);
            }
        };
        static foodPlace() {
            //alert("QQQ")
            this.key.press({code: "KeyQ"});
            this.key.press({code: "Space"});
            this.key.press({key: weaponKey});
        }
        static spikePlace() {
            //alert("QQQ")
            this.key.press({code: "KeyR"});
            this.key.press({code: "Space"});
            this.key.press({key: weaponKey});
        }
        static trapPlace() {
            //alert("QQQ")
            this.key.press({code: "KeyF"});
            this.key.press({code: "Space"});
            this.key.press({key: weaponKey});
        }
        static newTouchEvent = function(type) {
            return function (eventObj) {
                const { x, y, id } = eventObj;
                $("#game-canvas").getEvents(type)[0].listener({changedTouches: [{identifier: id, pageX: x, pageY: y}], preventDefault: () => null, stopPropagation: () => null});
            };
        };
        static touch = {
            start: this.newTouchEvent("touchstart"),
            move: this.newTouchEvent("touchmove"),
            end: this.newTouchEvent("touchend")
        }

        static spawn(name) {
            $("#nickname").value = name;
            $("#play").getEvents("click")[0].listener();
            $("#nickname").value = localStorage.getItem("nickname")||"";
        };

        static changeServer(serverID) {
            $("#server-select").options[0].setAttribute("region", serverID)
            $("#server-select").selectedIndex = 0;
            $("#server-select").getEvents("change")[0].listener();
        };
    };
    window.Sploop = Sploop;


    window.addEventListener("load", ()=> (Object.keys(window.getEvents()).length === 0) && (window.onbeforeunload && (window.onbeforeunload = null), window.location.reload()));

    WebSocket.prototype._send = WebSocket.prototype.send;
    WebSocket.prototype.send = function() {
        if(!isBot) {
            for(let bot of bots) {
                /*
				ko: 11, //somethingOnBegin
				Uo: 6, //moveByBitmask
				yo: 13, //changeAIM
				Eo: 2, //selectItemByID
				Bo: 19, //attack
				Co: 18, //stopAttack
				zo: 10, //spawn
				Do: 20, //scytheUpgrade
				xo: 0, //selectItemByType
				Lo: 5,//equipHat
				Fo: 7, //sendChat
				Oo: 14, //upgrade
				jo: 12, //noting
				So: 3, //pingStuff
				Po: 23, //autoHit
				Vo: 1, //moveToDir
				No: 15, //removeMoveDir
				Ho: 9, //touchStart
				Wo: 4, //noting
				Go: 8, //touchEnd
				Qo: 24, //leaveClan
				Yo: 21, //joinInClan
				qo: 17, //acceptDecline
				Zo: 25, //kick
				Xo: 22, //createClan
				*/
                if(![22, 25, 17, 3, 10, 11].includes(arguments[0][0])) (bot.contentWindow.ws || this)._send(...arguments);
            }
        }
        this._send(...arguments);
        if(this.HOOKED) return;
        this.HOOKED = true;
        window.ws = this;
        var botSpwned = false;
        this.addEventListener("message", (msg)=>{
            const d = ("string" != typeof msg.data ? new Uint8Array(msg.data) : JSON.parse(msg.data))
            if(d[0] == 35) {
                if(isBot && !playerID) Sploop.touch.start({id: 1000, x: innerWidth/4, y: innerHeight/2})
                playerID = d[1];
            }
            if(d[0] == 20) {
                for(let i = 1; i < d.byteLength; i += 18) {
                    const id = d[i + 2] | d[i + 3] << 8;
                    const x = d[i + 4] | d[i + 5] << 8;
                    const y = d[i + 6] | d[i + 7] << 8;
                    if(playerID == id) {
                        playerX = x;
                        playerY = y;
                        if(!isBot) {
                            for(let bot of bots) bot.isLoaded && bot.contentWindow.updateOwnerPosition(x, y);
                        }
                    }
                }
                if(isBot) {
                    !botSpwned && (Sploop.spawn( "2k09__Bot", (botSpwned=1)))
                }
            }
        });
        if(!isBot) {
            this.rg = this.url.split("//")[1].split(".sploop")[0].toLocaleUpperCase();
            for(let bot of bots) {
                bot.contentWindow.changeServer(this.rg);
            }
        }
    }

    isBot && (
        window.onload = ()=> initBot(),
        Object.defineProperty(Object.prototype, "region", {
            get: () => window.ownerServer,
            set: () => true,
            configurable: true
        })
    );
    function initBot() {

        window.changeServer = function(serverID) {
            Sploop.changeServer(serverID);
        };

        window.updateOwnerPosition = function(x, y) {
            ownerX = x;
            ownerY = y;
        }

        setInterval(()=>{
            const angle = Math.atan2(ownerY - playerY, ownerX - playerX);
            if (Math.sqrt(Math.pow(((playerX - ownerX)), 2) + Math.pow(((playerY - ownerY)), 2)) > 185) {
                Sploop.touch.start({id: 1000, x: innerWidth/4, y: innerHeight/2})
                Sploop.touch.move({id: 1000, x: innerWidth/4+50*Math.cos(angle), y: innerHeight/2+50*Math.sin(angle)});
            }else{
                Sploop.touch.end({id: 1000, x: innerWidth/4, y: innerHeight/2})
            }
        });

        const onDeathCallback = function(changedList) {
            const display = changedList[0].target.style.display;
            if(display == "flex") Sploop.spawn("2k09__Bot");
        };
        const deathChecker = new MutationObserver(onDeathCallback);
        deathChecker.observe($("#homepage"), {attributes: true, attributeFilter: ["style"]});
    };




    !isBot && (window.onload = ()=> initClient());
    function initClient() {

        function createBot(id) {
            const div = document.createElement("div");
            div.innerHTML = `<iframe id="bot${id}" src="https://sploop.io" width="300" height="600" frameborder="0" scrolling="no" allowfullscreen="true" style="width: 300px; height: 200px; margin: 0; padding: 0; border: 0; position: absolute; top: 0; left: 0"></iframe>`;
            const iframe = div.firstChild;
            document.body.append(iframe);
            iframe.contentWindow.ownerServer = $("#server-select").selectedOptions[0].getAttribute("region");
            iframe.onload = ()=>{iframe.isLoaded = true};
            return iframe;
        };
        let placementkeys = {
            spike: false,
            trap: false
        };
        setInterval(() => {
        if(placementkeys.spike) Sploop.spikePlace()
        if(placementkeys.trap) Sploop.trapPlace()
        }, 20);
        window.addEventListener("keydown", function(e) {
            if(e.code == "KeyV") placementkeys.spike = true;
            if(e.code == "KeyF") placementkeys.trap = true;
            if(!keys[e.keyCode]) {
                keys[e.keyCode] = 1;
                if(e.code == "Enter" && window.chat && window.chat.value != '') {
                    if(window.chat.value == "!md -ab") bots.push(createBot(bots.length))
                    if(window.chat.value == "!md -rb") {
                        for(let bID in bots) $(`#bot${bID}`).remove()
                        bots.length = 0
                    }
                    if(window.chat.value.split(" ")[0] == "/close") {
                        const id = window.chat.value.split(" ")[1] - 1
                        if(!bots[id]) return;
                        $(`#bot${id}`).remove()
                        for(let bID in bots) {
                            if(bID > id && bID != id) $(`#bot${bID}`).id = `bot${bID-1}`
						}
                        bots.splice(id, 1)
                    }
                }
            }
        });
        document.addEventListener("keyup", (e) => {
            if(e.code == "KeyV") placementkeys.spike = false;
            if(e.code == "KeyF") placementkeys.trap = false;
            if(keys[e.keyCode]) {
                keys[e.keyCode] = 0;
            };
        });
    };

    (function autoHeal() {
        let allies = [], hp;
        const { fillRect, clearRect } = CanvasRenderingContext2D.prototype;
        CanvasRenderingContext2D.prototype.clearRect = function () {
            if (this.canvas.id === "game-canvas") allies = [];
            return clearRect.apply(this, arguments);
        };

        CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) {
            if(this.fillStyle == "#a4cc4f") {
                allies.push({x: x + 45, y: y - 70, hp: Math.round((width / 95) * 100)});
                if(allies.length == 1) hp = allies[0].hp;
            }
            fillRect.apply(this, arguments);
        };

        window.addEventListener("keydown", function(e) {
            if(["1", "2"].includes(e.key)) weaponKey = e.key;
        });

        function ah() {
            function getDelay(hp) {
                var delay = 200;
                if(hp < 90) delay = 130;
                if(hp < 74) delay = 60;
                if(hp < 36) delay = 45;
                return delay;
            };
            if(hp < 100) Sploop.foodPlace();
            setTimeout(()=>{ah()}, getDelay(hp));
        }
        ah();
    })();

    (function hookEvents() {
        _setTimeout = setTimeout; console._log = console.log; KeyBoardEvent = KeyboardEvent;
        EventTarget.prototype._addEventListener = EventTarget.prototype.addEventListener;
        EventTarget.prototype.addEventListener = function(event, handler, c) {
            if (c==undefined) c=false;
            this._addEventListener(event,handler,c);
            if (!this.eventListenerList) this.eventListenerList = {};
            if (!this.eventListenerList[event]) this.eventListenerList[event] = [];
            this.eventListenerList[event].push({listener:handler,options:c});
        };
        EventTarget.prototype.getEvents = function(event) {
            if (!this.eventListenerList) this.eventListenerList = {};
            if (event==undefined) return this.eventListenerList;
            return this.eventListenerList[event];
        };

        let array = [HTMLElement.prototype, window, document];
        for(let obj of array) {
            for(let prop in obj) {
                if(!prop.startsWith("on")) continue;
                Object.defineProperty(obj, prop, {
                    get() {
                        return this["_" + prop];
                    },
                    set(value) {
                        this["_" + prop] = value;
                        if(prop == "onbeforeunload") return value;
                        this.addEventListener(prop.split("on")[1], value);
                    }
                });
            }
        }
    })();
}()
})();