Ego Dark Hack Bds Sploop.io

Autobreak-trap, Autoheal, Hat macros, Anti-trap, AutoPush & more!

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 or Violentmonkey 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!)

Autor
CalelMelgarejo Melgarejo
Dnevne instalacije
0
Ukupnih instalacija
4
Ocjene
0 0 0
Verzija
2.8
Stvoreno
12.04.2022.
Ažurirano
12.04.2022.
Size
22,5 KB
Licenza
N/A
Primjenjuje se

// ==UserScript==
// @name Ego Dark Hack Bds Sploop.io
// @description Autobreak-trap, Autoheal, Hat macros, Anti-trap, AutoPush & more!
// @version 2.8
// @author Wealthy#8266 & Ego#9999
// @match *://sploop.io/*
// @run-at document-start
// @require http://code.jquery.com/jquery-3.3.1.min.js
// @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
// @grant none
// @namespace https://greasyfork.org/users/761829
// ==/UserScript==

let version = "2.8"

let addHealMS = 0
let Game;
let Entity = new Array();
let Canvas;
let ctx;
let keyDown = [];
let user = {};
let tribe = [];
let enemy;
let encoder = new TextEncoder();
let decoder = new TextDecoder();
let server;

let Config = {
update: (type) => {
Config[type] += 1;
setTimeout(() => (Config[type] -= 1), 1e3);
},
serverUpdate: 1e3 / 9,
breaking: false,
pushing: false,
rate: 1e3,
pps: 0,
weapon: 0,
cps: 0,
tps: 0,
fps: 0,
ping: 0,
freeze: {
send: true,
pps: true,
message: false,
setup: false
},
angle: 0,
move: 0,
messages: new Array([], []),
counter: 0,
resolver: function(){},
last: Date.now(),
isJson: (data) => {
try {
JSON.parse(data);
} catch (e) {
return false;
}
return true;

},
WS: null
};

Config.tick = () => {
return new Promise((e) => (Config.resolver = e))
};

let Toggle = {
UI: false,
autoBreak: true,
autoPush: true,
autoPlace: true,
autoSync: true
}

class Macro {
constructor(advanced, spike, trap, mill, food){
this.advanced = advanced;
this.spike = spike;
this.trap = trap;
this.mill = mill;
this.food = food;
};

update(){
if(keyDown[this.spike]) Sploop.newPlace(4);
if(keyDown[this.trap]) Sploop.newPlace(7);
if(keyDown[this.mill]) Sploop.newPlace(5);
if(keyDown[this.food]) Sploop.newPlace(2);
};
};

let Placer = new Macro(true, 86, 70, 78, 81);

class Sploop {
static place(id, angle = Config.angle){
Config.update('cps');
Sploop.take(id);
Sploop.hit(angle);
Sploop.take(Config.weapon);
}

static newPlace(id, angle = Config.angle){
let increasor = Math.PI / 8; // 22.25 radians
let offset = Math.PI / 4; // 45 radians

this.place(id, angle, true)

for(let newAngle = 0; newAngle < offset; newAngle += increasor){
Sploop.place(id, angle - newAngle);
Sploop.place(id, angle + newAngle);
}

Sploop.take(Config.weapon);
}

static quad(id, angle = 0){
for(let newAngle = 0; newAngle < Math.PI * 2; newAngle += Math.PI / 8){
let time = (Config.serverUpdate / 4) * (newAngle / (Math.PI / 8))

setTimeout(() => Sploop.place(7, angle + newAngle), time);
}
}

static heal(amount) {
for(let count = 0; count <= amount; count++) Sploop.place(2);
}

static equip(id) {
if(user.skin != id) Game.send(new Uint8Array([9, id]));
}

static walk(angle = Config.move) {
if(typeof angle !== 'number') return Game.send(new Uint8Array([1, 0]));

angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);

Game.send(new Uint8Array([15, 255 & angle, (angle >> 8) & 255]));
}

static take(id) {
Game.send(new Uint8Array([8, id]));
}

static chat(text){
text = encoder.encode(text);

Game.send(new Uint8Array([10, ...text]))
}

static hit(angle) {
angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);

Game.send(new Uint8Array([4, 255 & angle, (angle >> 8) & 255]));
Game.send(new Uint8Array([5]));
}

static watch(angle){
angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);

Game.send(new Uint8Array([2, 255 & angle, (angle >> 8) & 255]));
}

static offensive(){
let offensive = () => {
let distance = enemy ? Math.dist(enemy, user) : 0;

if(user.y <= 9e3 && user.y >= 8e3) return 9;
if(enemy && distance <= 300) return false && distance <= 150 ? 6 : 5;

return 7;
}

Sploop.equip(offensive());
}

static healthChange(health, oldHealth){
if(oldHealth > health){
user.hitDate = Config.counter;
};

user.health = health;
}

static mine(build){
if(user.id2 == build.id2) return true;
if(user.team){
let length = tribe.length;
for(let index = 0; index < length; index++) {
let teammate = tribe[index];
if(build.id2 == teammate.id2) return true;
}
}
return false;
}

static update(){
Config.counter += 1;
Config.resolver();
Config.last = Date.now();

if(user.alive){
if(user.health < 100){
setTimeout(() => {
let amount = 3;
Sploop.heal(amount);
}, (Config.serverUpdate - 20 - Config.ping) + addHealMS);
};

let trap = Entity.find(c => c && Math.dist(c, user) <= 50 && c.type == 6 && !Sploop.mine(c));
let wasBreaking = Config.breaking;
Config.breaking = false;

if(trap && Toggle.autoBreak){
console.log(trap, user)
let angle = Math.angle(trap, user);
Config.breaking = true;

Sploop.hit(angle);
Sploop.equip(6);

if(!wasBreaking) Sploop.quad(7, angle);
} else if(wasBreaking){
Sploop.offensive();
}

let wasPushing = Config.pushing;
Config.pushing = false;

if(enemy && !trap && user.alive){
let distance = Math.dist(enemy, user);

if(Toggle.autoPush && distance <= 250){
let trap = Entity.find(c => c && Math.dist(c, enemy) <= 50 && c.type == 6 && Sploop.mine(c));

if(trap){
let spikes = Entity.filter(c => c && [2, 7, 17].includes(c.type) && Sploop.mine(c) && Math.dist(c, trap) <= 130);

if(spikes.length){
let spike = spikes.sort((a, b) => Math.dist(a, trap) - Math.dist(b, trap))[0];
let angle = Math.angle(enemy, spike);
distance = Math.dist(enemy, spike) + 70;
let position = {
x: spike.x + (distance * Math.cos(angle)),
y: spike.y + (distance * Math.sin(angle))
};

distance = Math.dist(position, user);
angle = () => {
if(distance > 40){
return Math.angle(position, user)
} else {
let angleDifference = Math.abs(Math.angle(spike, position) - Math.angle(spike, user))
let message = `diffence [${angleDifference / (Math.PI / 180)}]`

// Sploop.chat(message);
return Math.angle(enemy, user)
}
}

Config.pushing = true;
Sploop.walk(angle())
}
}
}

distance = Math.dist(enemy, user)
if(Toggle.autoPlace && distance <= 200){
let trap = Entity.find(c => c && c.type == 6 && Sploop.mine(c) && Math.dist(c, enemy) <= 50);
let enemyPos = {
x: enemy.x + enemy.xVel,
y: enemy.y + enemy.yVel
}
let userPos = {
x: user.x + user.xVel,
y: user.y + user.yVel
}
distance = Math.dist(enemyPos, userPos);
let angle = Math.angle(enemyPos, userPos)
let range = 28 * 2 + 50;

if(trap){
angle = Math.angle(trap, userPos);

for(let newAngle = 0; newAngle < Math.PI / 2; newAngle += Math.PI / 9){
Sploop.place(4, angle + newAngle);
Sploop.place(4, angle - newAngle);
}
} else {
if(Toggle.autoSync && distance < 250){
let spike = Entity.find(c => c && [2, 7, 17].includes(c.type) && Sploop.mine(c) && Math.dist(c, enemyPos) <= 60);
if(spike){
Sploop.equip(2);
Sploop.take(0);
Sploop.hit(angle);
setTimeout(() => Sploop.offensive(), 2e3);
}
if(enemy.health <= (enemy.skin == 2 ? 78 : 85) && user.skin == 5 && user.health <= 70){
Sploop.equip(2);
Sploop.take(0);
Sploop.hit(angle);
setTimeout(() => Sploop.offensive(), 2e3);
}
}

if(range >= distance){
Sploop.place(7, angle);
}
}
}
}

if(wasPushing && !Config.pushing) Sploop.walk('Stop');
}

Placer.update();
}
}


class Script {
setup(){
this.run();
};
override(ws, data){
!Config.freeze.send && this.log(`WebSocket`, `⬈`, data[0], '#8ecc51');
ws.classic(data, true);
let string = Config.isJson(data);
data = string ? JSON.parse(data) : new Uint8Array(data);
let item = data[0];
switch(item) {
case 6:
user.name = data[1];
break;
}


Config.update('pps');
}

send(data){
this.ws && 1 === this.ws.readyState && (typeof data !== "string" && window.encoder.encode(data), this.ws.classic(data, true))
Config.update('pps');
}

message(event){
let data = event.data;
let string = typeof data === 'string';
let decoded = string ? JSON.parse(data) : new Uint8Array(data);
let length = decoded.length;
let id = Number(decoded[0]);
let found = Config.messages[Number(string)].find(item => item && item.id == id);

if(!found) return !Config.freeze.message && Game.log(`WebSocket`, `⬉`, `${decoded} | ${string}`, '#c7cc51');

switch(found.name){
case 'Player update':
enemy = null;
tribe = [];

for(let index = 0; index < Entity.length; index++){
let player = Entity[index];
if(player) player.visible = false;
}

for (let int = 1; int < length; int += 18) {
let type = decoded[int],
owner = decoded[int + 1],
index = decoded[int + 2] | decoded[int + 3] << 8,
x = decoded[int + 4] | decoded[int + 5] << 8,
y = decoded[int + 6] | decoded[int + 7] << 8,
broken = decoded[int + 8],
skin = decoded[int + 11],
team = decoded[int + 12],
health = decoded[int + 13] / 255 * 100,
clown = decoded[int + 8];

let Default = {fd: 2, active: true, health: 100, x: 0, y: 0, xVel: 0, yVel: 0};
let temp = Entity[index] || Default;
temp.visible = true;


if (broken & 2) {
Entity[index] = null;
} else {
if (temp.fd & 2) {
temp.type = type;
temp.id = index;
temp.health = health;
temp.id3 = broken;
temp.xVel = temp.x - x;
temp.yVel = temp.y - y;
temp.speed = Math.hypot(y - temp.y, x - temp.x);
temp.move = Math.atan2(y - temp.y, x - temp.x);
temp.x = x;
temp.y = y;
temp.id2 = owner;
temp.skin = skin;
temp.team = team;
temp.clown = Boolean(clown);
}

Entity[index] = temp;

if(temp.id === user.id) {
Sploop.healthChange(temp.health, user.health);
Object.assign(user, temp)
} else if(!temp.type && (user.team && user.team == temp.team)){
tribe.push(temp);
} else if(!temp.type && (!user.team || temp.team != user.team)){
let distance = Math.hypot(user.y - temp.y, user.x - temp.x);
let distance2 = enemy ? Math.hypot(user.y - enemy.y, user.x - enemy.x) : null;
if(enemy){
if(distance < distance2) enemy = temp;
} else {
enemy = temp;
}
}

}
}

Config.update('tps');
Sploop.update();
break;
case 'Spawn':
user.id = decoded[1];
user.alive = true;
user.spawnDate = Date.now();
user.health = 100;
Config.weapon = 0;
break;
case 'Death':
user.health = 0;
user.speed = 0;
user.alive = false;
break;
case 'Ping update':
Config.ping = decoded[1] | (decoded[2] << 8);
break;
}

Placer.update();
}

log(group, symbol, result, color){
return console.log(`%c[${group}] %c${symbol}`, `color:${color};font-weight:bold`, `color:${color}`, result);
}

run(ws){
!Config.freeze.setup && Game.log(`Hijacked Iframe`, `✔`, ws.url, '#0f0');
let notifications = `

`
$("body").append(notifications)
this.ws = ws;

let infoPanel = '\n

\n
\n

\n

\n

\n';
$("body").append(infoPanel)

setInterval(() => {
!Config.freeze.pps && this.log(`PPS`, `⬍`, Config.pps, '#516ecc');
}, Config.rate);

Config.width = Canvas.clientWidth;
Config.height = Canvas.clientHeight;

$(window).resize(() => {
Config.width = Canvas.clientWidth;
Config.height = Canvas.clientHeight;
});

Canvas.addEventListener('mousemove', (event) => {
Config.mouseX = event.clientX;
Config.mouseY = event.clientY;
Config.angle = Math.atan2(Config.mouseY - Config.height / 2, Config.mouseX - Config.width / 2);
});

}

constructor(){
this.ws = null;
}
};

const Setup = () => {
Game = new Script();
Game.log(`Setup`, `⦿`, '', '#000000');
let data = Config.messages;

data[0][1] = {name: 'Player update', string: false};
data[0][2] = {name: 'Verify', string: false};
data[0][5] = {name: 'Choose', string: false};
data[0][7] = {name: 'Hit', string: false};
data[0][14] = {name: 'Resource update', string: false};
data[0][16] = {name: 'Projectile Hit', string: false};
data[0][18] = {name: 'Chat', string: false};
data[0][19] = {name: 'Choose x3', string: true};
data[0][20] = {name: 'Choose x2', string: false};
data[0][22] = {name: 'Ping update', string: false};
data[0][23] = {name: 'Ping update', string: false};
data[0][24] = {name: 'Create clan', string: false};
data[0][25] = {name: 'Leave clan', string: false};
data[0][26] = {name: 'Create clan', string: false};
data[0][27] = {name: 'Leave clan', string: false};
data[0][30] = {name: 'Place', string: false};

data[1][2] = {name: 'Spawn', string: true};
data[1][8] = {name: 'Player setup', string: true};
data[1][9] = {name: 'Leaderboard update', string: true};
data[1][11] = {name: 'Text', string: true};
data[1][13] = {name: 'Death', string: true};
data[1][19] = {name: 'Choose', string: true};
data[1][35] = {name: 'new Verify', string: true};

for(let index = 0; index <= 1; index++) {
let length = data[index].length;
for(let id = 0; id < length; id++) {
if(data[index][id]) data[index][id].id = id;
};
};
};
Setup();

class Nuro extends WebSocket {
constructor(url, protocols) {
Config.WS = super(url, protocols);
this.addEventListener('message', event => Game.message(event));
this.classic = this.send;
this.send = data => Game.override(this, data);
window.ws = this;
Game.run(this);
}
set onmessage(f) {
!Config.freeze.setup && console.log('onmessage', f);
super.onmessage = f;
}
}

const hijacked = Symbol();

function hijack(window) {
const getter = window.HTMLIFrameElement.prototype.__lookupGetter__('contentWindow');
window.HTMLIFrameElement.prototype.__defineGetter__('contentWindow', function() {
const hiddenWindow = getter.call(this);
if (!hiddenWindow[hijacked]) {
hijack(hiddenWindow);
hiddenWindow.WebSocket = Nuro;
hiddenWindow[hijacked] = true;
}
return hiddenWindow;
});
}

hijack(window);

let blockReact = ['clan-menu-clan-name-input', 'nickname', 'chat'];

const keyChange = (event, down) => {
if(blockReact.includes(document.activeElement.id.toLowerCase())) return `Blocked key change.`
keyDown[event.keyCode] = down;

let isPrimary = [49, 97].includes(event.keyCode);
let isSecondary = [50, 98].includes(event.keyCode);

if(down && (isPrimary || isSecondary)) Config.weapon = Number(isSecondary);

switch(event.key.toUpperCase()) {
case "T":
Sploop.equip(4)
break
case "B":
Sploop.equip(7)
break;
case "C":
Sploop.equip(2)
break
case "G":
Sploop.equip(5)
break;
}
Placer.update();
};

setInterval(Placer.update, 50);

document.addEventListener("keydown", (event) => keyChange(event, true));
document.addEventListener("keyup", (event) => keyChange(event, false));

Math.dist = (player, player2) => {
return Math.sqrt(Math.pow((player.x - player2.x), 2) + Math.pow((player.y - player2.y), 2));
}

Math.angle = (player, player2) => {
return Math.atan2(player.y - player2.y, player.x - player2.x)
}

const encodeSym = Symbol();
Object.defineProperty(Object.prototype, 'encode', {
get() {
return this[encodeSym];
},
set(encode) {
if(this.init) {
window.encoder = this
}
this[encodeSym] = function() {
return encode.apply(this, arguments)
}
}
});

const ReqFrame = requestAnimationFrame;
window.requestAnimationFrame = function() {
Config.update("fps");
ReqFrame.apply(this, arguments);
}


let updateInfo = () => {
if(user && user.alive){
let Display = ``;
let addText = (text = '') => {
Display += (text + '
')
}

addText(`health: ${Math.round(user.health)}/100`);
addText(`push: o${Config.pushing ? 'n' : 'ff'}line`);
addText(`stuck: ${Config.breaking ? 'yes' : 'no'}`);
addText(`speed: ${Math.round(user.speed)}`);
addText();
addText(`cps: ${Config.cps}`);
addText(`pps: ${Config.pps}`);
addText(`tps: ${Config.tps}`);
addText(`fps: ${Config.fps}`);

$("#info-content").html(Display)
};
}

const gctx = CanvasRenderingContext2D.prototype.clearRect;
CanvasRenderingContext2D.prototype.clearRect = function() {
if (this.canvas.id === "game-canvas") {
Canvas = this.canvas
}
return gctx.apply(this, arguments);
}
const { fillText } = CanvasRenderingContext2D.prototype;
CanvasRenderingContext2D.prototype.fillText = function(text, x, y) {
if(text == user.name && text.length > 1 || typeof text == "string" && text.startsWith(String.fromCharCode(0))) {
let hue = 0;
let step = 360 / user.name.length;
for (let letter of text) {
this.fillStyle = `hsl(${hue}, 100%, 50%)`;
fillText.call(this, letter, x, y);
x += this.measureText(letter).width;
hue = (hue + step) % 360;
}
return;
}
return fillText.apply(this, arguments);
}