Ego Dark Hack Bds Sploop.io

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

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

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.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

Autor
CalelMelgarejo Melgarejo
Dziennych instalacji
0
Wszystkich instalacji
4
Oceny
0 0 0
Wersja
2.8
Utworzono
12-04-2022
Zaktualizowano
12-04-2022
Rozmiar
22,5 KB
Licencja
Brak licencji
Dotyczy

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