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