Autobreak-trap, Autoheal, Hat macros, Anti-trap, AutoPush & more!
// ==UserScript== // @name _-*.:GPT-MOD:.*-_ // @description Autobreak-trap, Autoheal, Hat macros, Anti-trap, AutoPush & more! // @version s.2 // @author Thiago // @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== const { log } = console; var autoChoose = true; // SET TO false IF YOU WANT TO DISABLE let version = "3.2.3.1" let wsPushing = false let Game; let Entity = new Array(); let Canvas; let Context; let ctx; let keyDown = []; let user = {}; let tribe = []; let enemy; let encoder = new TextEncoder(); let decoder = new TextDecoder(); let server; let teammates = []; 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, enemiesNear: [], freeze: { send: true, pps: true, message: false, setup: false }, angle: 0, move: 0, messages: new Array([], []), counter: 0, resolver: function () { }, last: Date.now(), chat: ["♫©§☼<◄ø▲►>§²¯-_®♫♀↨§", "OW U ME HACK X.+*!-?", "MI HACK IS GPT BEST HACK", "MI HACK IS GPT BEST HACK", "AND THE HACK IS CREATED BY I", "", "IS", "PRO NO noob¡"] , 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: true, autoBreak: true, autoPush: true, autoPlace: true, autoSync: true, autoRespawn: false, autoChat: false, tracers: true, autoHeal: true, optHeal: false, } class Macro { constructor(advanced, spike, trap, mill, food) { this.advanced = advanced; this.spike = spike; this.trap = trap; this.mill = mill; this.food = food; }; update() { setTimeout(() => { 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); }, 14); }; }; 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([5, 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([1, 255 & angle, (angle >> 8) & 255])); } static take(id) { Game.send(new Uint8Array([0, id])); } static chat(text) { text = encoder.encode(text); Game.send(new Uint8Array([7, ...text])) } static hit(angle) { angle = (65535 * (angle + Math.PI)) / (2 * Math.PI); Game.send(new Uint8Array([19, 255 & angle, (angle >> 8) & 255])); Game.send(new Uint8Array([18])); } static watch(angle) { angle = (65535 * (angle + Math.PI)) / (2 * Math.PI); Game.send(new Uint8Array([13, 255 & angle, (angle >> 8) & 255])); } static offensive() { let offensive = () => { let distance = enemy ? getDistance(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 && Toggle.autoHeal) { log("damage") setTimeout(() => { Sploop.heal(1); }, Toggle.optHeal ? (Config.serverUpdate - 20 - Config.ping) + parseInt(document.querySelector('[data-speed="addms"]').value) : parseInt(document.querySelector('[data-speed="heal"]').value)); } ; let trap = Entity.find(c => c && getDistance(c, user) <= 50 && c.type == 6 && !teammates.includes(c.id2) && user.id2 !== c.id2); let wasBreaking = Config.breaking; Config.breaking = false; if (trap && Toggle.autoBreak) { console.log(trap, user) let angle = getAngle(trap, user); Config.breaking = true; Sploop.chat(""); Sploop.hit(angle); Sploop.equip(6); if (!wasBreaking) Sploop.quad(7, angle); } else if (wasBreaking) { Sploop.chat(""); Sploop.offensive(); } let wasPushing = Config.pushing; Config.pushing = false; if (enemy && !trap && user.alive) { let distance = getDistance(enemy, user); if (Toggle.autoPush && distance <= 250) { let trap = Entity.find(c => c && getDistance(c, enemy) <= 60 && c.type == 6 && c.id !== enemy.id); if (wsPushing && !trap) { wsPushing = false; Sploop.walk('stop'); } if (trap) { let spikes = Entity.filter(c => c && [2, 7, 17].includes(c.type) && c.id !== enemy.id && getDistance(c, trap) <= 130); if (wsPushing && !spikes.length) { wsPushing = false; Sploop.walk('stop'); } if (spikes.length) { let spike = spikes.sort((a, b) => getDistance(a, trap) - getDistance(b, trap))[0]; let angle = getAngle(enemy, spike); distance = getDistance(enemy, spike) + 70; let position = { x: spike.x + (distance * Math.cos(angle)), y: spike.y + (distance * Math.sin(angle)) }; distance = getDistance(position, user); angle = () => { wsPushing = true; if (distance > 100) { return getAngle(position, user) } else { let angleDifference = Math.abs(getAngle(spike, position) - getAngle(spike, user)) let message = `diffence [${angleDifference / (Math.PI / 180)}]` Sploop.chat(`INFINITED-$XD{(angleDifference / (Math.PI / 180)).toFixed(3)}`) // Sploop.chat(message); return getAngle(enemy, user) } } Config.pushing = true; Sploop.walk(angle()) } } } distance = getDistance(enemy, user) if (Toggle.autoPlace && distance <= 200) { let trap = Entity.find(c => c && c.type == 6 && enemy.id !== c.id && getDistance(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 = getDistance(enemyPos, userPos); let angle = getAngle(enemyPos, userPos) let range = 28 * 2 + 50; if (trap) { angle = getAngle(trap, userPos); setTimeout(() => { Sploop.place(4, angle + (50 * Math.PI / 180)); }, 14) } else { if (Toggle.autoSync && distance < 250) { let spike = Entity.find(c => c && [2, 7, 17].includes(c.type) && c.id !== enemy.id && getDistance(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) { setTimeout(() => { Sploop.place(7, angle); }, 14) } } } } if (wasPushing && !Config.pushing) Sploop.walk('Stop'); } updateInfo() } } class Script { setup() { this.run(); }; /*override(ws, data){ !Config.freeze.send && this.log(`WebSocket`, `⬈`, data[0], '#8ecc51'); if(Config.isJson(data)) { let oldws = JSON.parse(data) if(oldws[0] == 6) { user.name = oldws[1] } } ws.classic(data, true); Config.update('pps'); }*/ send(data) { if (this.ws && 1 === this.ws.readyState) { if (Config.pps >= 400) return // Reduce the packet limit to do not get kicked this.ws.send(data) 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 (decoded[0]) { case 20: Config.enemiesNear = [] enemy = null; for (let int = 1; int < length; int += 19) { 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 temp = Entity[index] || {}; if (2 && broken) Entity[index] = null; if (!type && broken == 2) { temp = {}; } else { temp.type = type; temp.id = index; temp.health = health; 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); Config.enemiesNear.push(temp) Entity[index] = temp; } if (temp.id === user.id) { Sploop.healthChange(temp.health, user.health); Object.assign(user, 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 35: user.id = decoded[1]; user.alive = true; user.spawnDate = Date.now(); user.health = 100; Config.weapon = 0; break; case 19: user.health = 0; user.speed = 0; user.alive = false; if (Toggle.autoRespawn) { setTimeout(() => { Game.send(Config.respawnPacket) }, 200) } break; case 28: Sploop.chat("~D.E.S.T.R.O.Y.E.D~") break; case 24: teammates = [...data.slice(3, data.length)]; break; case 16: teammates = [...data.slice(2, data.length)]; break; case 27: teammates = []; break; /* case 'Ping update': Config.ping = decoded[1] | (decoded[2] << 8); break;*/ } Placer.update(); } log(group, symbol, r###lt, color) { return log(`%c[${group}] %c${symbol}`, `color:${color};font-weight:bold`, `color:${color}`, r###lt); } run(ws) { let chatval = 0 setInterval(() => { if (Toggle.autoChat) { if (chatval == Config.chat.length) { chatval = 0; } else { if (user.alive && Toggle.autoChat) { chatval++ Sploop.chat(Config.chat[chatval]) } } } }, 1000) let val = [1, 2, 4, 8] let lval = 0 setInterval(() => { if (Toggle.antiAFK) { lval++ Game.send(new Uint8Array([1, val[lval - 1]])) setTimeout(() => { Game.send(new Uint8Array([1, 0])) }, 200) if (lval == val.length) { lval = 0 } } }, 5000) !Config.freeze.setup && Game.log(`Hijacked Iframe`, `✔`, ws.url, '#0f0'); let notifications = ` <div class="notifications-holder"></div> <style> .box span { font-size: 20px; white-space: nowrap; } .box { width: max-content; height: 40px; display: flex; align-items: center; padding-top: 3.5px; padding-left: 7px; padding-right: 7px; border-radius: 7px; background-color: rgb(40 45 34 / 60%); border: 4px solid #141414; margin-bottom: 5px; color: white; letter-spacing: 1px; font-weight: bold; box-shadow: inset 0 -3px 0 #333; } .notifications-holder { position: absolute; left: 20px; top: 20px; display: flex; flex-direction: column; z-index: 5; } </style> ` $("body").append(notifications) addNotifications(`The script is running!`, "#5c4ce6") this.ws = ws; /* let infoPanel = '\n<div class="info-panel-holder">\n <div id="info-content">\n <p id="health"></div>\n</div>\n<style>\n#info-content {\n color: #fff;\n font-size: 22px;\n text-shadow: 0px 0px 5px black, 0px 0px 7px black;\n}\n.info-panel-holder {\n position: absolute;\n top: 20px;\n left: 20px;\n}\n</style>\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 && log('onmessage', f); super.onmessage = f; } } */ // there you go WebSocket.prototype.unmodifiedSend = WebSocket.prototype.send; WebSocket.prototype.send = function (arguments) { this.unmodifiedSend(arguments); if (window.ws !== this) { this.addEventListener('message', event => Game.message(event)); this.classic = this.send; window.ws = this; Game.run(this); Config.WS = this.url; } } // r <3 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); console.debug(event.code) if (event.code == 'KeyY') { let katana = [1, 12, 9, 19, 20, 15, 8, 17, 16]; katana.forEach(e => Game.send(new Uint8Array([14, e]))); } if (down && (isPrimary || isSecondary)) Config.weapon = Number(isSecondary); switch (event.code) { case "ShiftLeft": Sploop.take(Config.weapon); break case document.querySelector('[data-key="instakill"]').value: log("InstaKill") break case document.querySelector('[data-key="crystalgear"]').value: Sploop.equip(4) break case document.querySelector('[data-key="boosthat"]').value: Sploop.equip(7) break; case document.querySelector('[data-key="berserkergear"]').value: Sploop.equip(2) break case document.querySelector('[data-key="spikegear"]').value: Sploop.equip(5) break; case document.querySelector('[data-key="Demolist"]').value: Sploop.equip(11) break; } Placer.update(); }; setInterval(Placer.update, 75); document.addEventListener("keydown", (event) => keyChange(event, true)); document.addEventListener("keyup", (event) => keyChange(event, false)); const getDistance = (player, player2) => { return Math.sqrt(Math.pow((player.x - player2.x), 2) + Math.pow((player.y - player2.y), 2)); } const getAngle = (player, player2) => { return Math.atan2(player.y - player2.y, player.x - player2.x) } const encodeSym = Symbol(); let init 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 + '<br/>') } 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}`); if (!Toggle.UI) { Display = "" } $("#info-content").html(Display) } ; } var ctx2d const gctx = CanvasRenderingContext2D.prototype.clearRect; CanvasRenderingContext2D.prototype.clearRect = function () { if (this.canvas.id === "game-canvas") { Canvas = this.canvas Context = Canvas.getContext("2d") ctx2d = this; } return gctx.apply(this, arguments); } /* Tracers */ let dlo = 0, dlod = Date.now() function tracer(x, y, mx, my, color) { Context.save() Context.lineCap = "round" Context.lineWidth = 5 Context.globalAlpha = .50 Context.beginPath() Context.lineDashOffset = -dlo Context.strokeStyle = color Context.moveTo(mx, my) Context.lineTo(x, y) Context.stroke() Context.restore() } let tracerX = 0, tracerY = 0, tracermX = 0, tracermY = 0 const { fillRect } = CanvasRenderingContext2D.prototype; CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) { let cp = (tracerX > 0 && tracerY > 0 && tracermX > 0 && tracermY > 0) if (!dlod || Date.now() - dlod >= 10) { dlo++ dlod = Date.now() } if (this.fillStyle === "#a4cc4f") { tracermX = x + 50 tracermY = y - 70 fillRect.call(this, x, y, width, height); } else if (this.fillStyle === "#cc5151") { tracerX = x + 50 tracerY = y - 70 fillRect.call(this, x, y, width, height); } if (user.alive && cp && Toggle.tracers) { tracer(tracerX, tracerY, tracermX, tracermY, "#cc5151") } fillRect.call(this, x, y, width, height); return fillRect.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); } let settingMenu = ` <div id="settingMenu" class="pop-box"> <div class="menu-title"> <div class="pop-title text-shadowed-4">Settings</div> <div class="pop-close-button"> <img id="setting-menu-close-button" class="pop-close" draggable="false" src="https://images-ext-2.discordapp.net/external/mgjNglv928NY9v8XuIr2Z2mFbQHliKADNMZn9XsDibA/https/sploop.io/img/ui/close.png"> </div> </div> <div class="navbar"> <div class="nb-btn text-shadowed-3" id="hack" style="margin-right: 10px;">Hack</div> <div class="nb-btn text-shadowed-3" id="control">Control</div> </div> <div class="select pop-list-content scrollbar text-shadowed-3 content subcontent-bg" id="hat_menu_content" data-menu="1"></div> <div class="select pop-list-content scrollbar text-shadowed-3 content subcontent-bg" id="hat_menu_content" data-menu="2" style="display: none;"> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">HealSpeed</p> <input id="control-key" data-speed="heal" class="input text-shadowed-3" placeholder="Enter speed..." value="100"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">AddHealMS</p> <input id="control-key" data-speed="addms" class="input text-shadowed-3" placeholder="Enter speed..." value="0"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">InstaKill</p> <input id="control-key" data-key="instakill" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyR"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">CrystalGear</p> <input id="control-key" data-key="crystalgear" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyT"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">BerserkerGear</p> <input id="control-key" data-key="berserkergear" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyC"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">SpikeGear</p> <input id="control-key" data-key="spikegear" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyG"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">Demolist</p> <input id="control-key" data-key="Demolist" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyG"> </div> <div class="control-box"> <p style="font-size: 20px;font-weight: bold;color: white;">BoostHat</p> <input id="control-key" data-key="boosthat" onKeyPress=SupressInput(event); class="input text-shadowed-3" placeholder="Enter key..." value="KeyB"> </div> </div> </div> <style> .control-box { padding: 10px; display: flex; justify-content: space-between; width: 100%; align-items: center; } #control-key { width: 180px; text-align: left; text-indent: 16px; color: white; line-height: 70px; height: 40px; font-weight: 600; } .navbar { display: flex; } .nb-btn { margin-top: 5px; width: 150px; height: 40px; display: flex; align-items: center; justify-content: center; box-shadow: inset 0 -3px 0 #333; border-radius: 7px; background-color: rgb(40 45 34 / 60%); border: 4px solid #141414; cursor: url(img/ui/cursor-pointer.png) 6 0, pointer; } #hat_menu_content { padding: 8px 0 0 0; margin-bottom: 0px; margin-top: 2.5px; } .togglerButton { margin-left: auto; outline: none; border: 4px solid #141414; padding: 7px; font-size: 16px; margin-right: 5px; cursor: url(https://sploop.io/img/ui/cursor-pointer.png) 6 0, pointer; margin-top: auto; margin-bottom: auto; color: #fff; border-radius: 10px; background-color: #96b943; box-shadow: inset 0 -5px 0 #809836; } .togglerButton:hover { background-color: #b5de53; box-shadow: inset 0 -5px 0 #95af44; } .name-desc { display: flex; flex-direction: column; padding-left: 10px; margin-bottom: 5px; } .item-container { width: 100%; display: flex; align-items: center; border-bottom: 3px solid #141414; flex-direction: row; justify-content: space-between; padding-bottom: 5px; } .menu-title { width: 100%; display: flex; justify-content: space-between; align-items: center; } #settingMenu { position: absolute; top: 80%; left: 80%; transform: translate(-50%, -50%); height: 367px; width: 500px; display: none; opacity: 1; background: rgba(40, 45, 34, 0.6); color: #fff; } </style> <script> function SupressInput($event) { $event.preventDefault(); } </script> ` const __TOGGLERS__ = [{ name: "AutoHeal", desc: "Auto heals you", id: "autoheal", active: true, last: false }, { name: "Optimized Heal", desc: "Optimizes autoheal in some cases", id: "optheal", active: false, last: false }, { name: "AutoPush", desc: "Automatically pushes enemies into spikes", id: "autopush", active: true, last: false }, { name: "AutoPlace", desc: "Optimizes and automates spike and trap placement", id: "autoplace", active: true, last: false }, { name: "AutoSync", desc: "Optimized attacking & Auto hat switching", id: "autosync", active: true, last: false }, { name: "AutoBreak", desc: "Automatically breaks out of traps", id: "autobreak", active: true, last: false }, { name: "AutoRespawn", desc: "Auto respawn you", id: "autorespawn", active: false, last: false }, { name: "UI", desc: "visibility of the UI", id: "ui", active: true, last: false }, { name: "AutoChat", desc: "Sing cool song", id: "autochat", active: false, last: false }, { name: "Tracers", desc: "Draw tracers to enemies", id: "tracers", active: true, last: false }, { name: "AntiAFK", desc: "move every 5 seconds", id: "antiAFK", active: false, last: true }] function __TOGGLER__(name, desc, id, active, last) { return ` <div class="item-container" style="margin-top: 4px; ${last ? "border-bottom: none;" : "border-bottom: 3px solid #141414;"}"> <div class="name-desc"> <p style="font-size: 16px;font-weight: bold;color: white;">${name}</p> <p style="font-size: 14px; color: #d2c396;">${desc}</p> </div> <button class="togglerButton text-shadowed-3" id="${id}" style="${active ? "outline: none;" : "background: #b94343; box-shadow: inset 0 -5px 0 #983636"}"> ${active ? "Enabled" : "Disabled"} </button> </div> ` } function genTogglers() { __TOGGLERS__.forEach(t => { $('[data-menu="1"]').append(__TOGGLER__(t.name, t.desc, t.id, t.active, t.last)) }) } function addNotifications(text, color = "#fff") { let idGen = () => "notification-" + ~~(Math.random() * 10000) + 1, readyId = idGen() let add = ` <div class="box text-shadowed-3" id="${readyId}" style="display: block; opacity: 0;"> <span style="color: ${color};"> ${text} </span> </div> ` $(".notifications-holder").prepend(add) $("#" + readyId).show().animate({ opacity: 1 }, 750) setTimeout(() => { $("#" + readyId).animate({ opacity: 0 }, 750, () => { $("#" + readyId).remove() }); }, 3000) } window.rContextMenu = () => { let elm = document.getElementsByTagName('*') for (let i = 0; i < elm.length; ++i) { elm[i].oncontextmenu = null } } function cEl(e, t, n, g) { addNotifications(`${n} <span style='color: ${t ? "#8ecc51" : "#cc5151"}'>${t ? "enabled" : "disabled"}</span>`) $(e).css("background", !t ? "#b94343" : "#96b943") $(e).css("box-shadow", !t ? "inset 0 -5px 0 #983636" : "inset 0 -5px 0 #809836") $(e).text(!t ? "Disabled" : "Enabled") $(e).hover(() => { $(e).css("background", !t ? "#de5353" : "#b5de53") $(e).css("box-shadow", !t ? "inset 0 -5px 0 #af4444" : "inset 0 -5px 0 #95af44") }, function () { $(e).css("background", !t ? "#b94343" : "#96b943") $(e).css("box-shadow", !t ? "inset 0 -5px 0 #983636" : "inset 0 -5px 0 #809836") }) } /* ChangeLog menu */ let changeLogMenu = ` <div class="centerMenu"> <div class="pop-box popup-fade-in" id="script-changelog" style="display: flex;"> <div class="pop-top"> <div class="pop-title text-shadowed-4" style="display: flex;align-items: center;"> <a class="pointer" style="margin-right: 5px;" href="https://discord.gg/EETcmmFgAt" target="_blank"><img class="pointer" draggable="false" src="img/ui/discord.png"></a> SploMod - The best hack of 2024 </div> <div class="pop-close-button"><img class="pop-close" id="close-script-cl" draggable="false" src="img/ui/close.png"></div> </div> <div class="pop-list-content scrollbar text-shadowed-3" id="changeLog-s"></div> </div> </div> <style> .centerMenu { position: absolute; top: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; background: rgb(39 66 35 / 60%); z-index: 100; transform-origin: center; } #script-changelog { width: 615px; height: 475px; } </style> ` let __CHANGELOGS__ = [ { version: "FINAL", date: "2024-8-26", added: true, remove: false, fixed: true, addedContent: ["Reduced the packet limit to prevent yourself getting kicked"], removedContent: [], fixedContent: [ "This script was patched like one year's ago, It got fixed by Ilyax and Ilyax made her own fans for splomod playable again." ] }, { version: "3.2.2", date: "2022-3-27", added: false, remove: false, fixed: true, addedContent: [], removedContent: [], fixedContent: [ "click the discord icon in this menu to get to our discord." ] }, { version: "3.2.1", date: "2022-3-20", added: false, remove: false, fixed: true, addedContent: [], removedContent: [], fixedContent: [ "fixed tracers, they are now clean and have a better design.", "join our discord server! (click the discord icon)" ] }, { version: "3.2", date: "2022-3-20", added: true, remove: false, fixed: true, addedContent: [ "AntiAFK - moves every 5 seconds", "Tracers - draw lines to enemies" ], removedContent: [], fixedContent: [ "Fixed UI toggle not working.", "improved optimized heal", "join our discord server! (click the discord icon)" ] }, { version: "3.1.1", date: "2022-3-19", added: true, remove: false, fixed: true, addedContent: [ "Added autochat", ], removedContent: [ "nothing" ], fixedContent: [ "join our discord server! (click the discord icon)" ] }, { version: "3.1", date: "2022-3-19", added: true, remove: true, fixed: true, addedContent: [ "Added changelog menu.", ], removedContent: [ "Removed nothing." ], fixedContent: [ "Fixed autoheal speed.", "join our discord server! (click the discord icon)" ] }, { version: "3", date: "2022-3-19", added: true, remove: false, fixed: false, addedContent: [ "Added game menu.", "Added optimized autoheal." ], removedContent: [ "None.", "Nothing." ], fixedContent: [""] }] function __CHANGELOG__(version, date, added, remove, fixed, addedContent, removedContent, fixedContent) { let add = "", rem = "", fix = "" let at = '<li class="subcontent-subtitle">Added</li>', rt = '<li class="subcontent-subtitle">Removed</li>', ft = '<li class="subcontent-subtitle">Fixed</li>' let ac = () => { let res = "" let al = addedContent.length for (let i = 0; i < al; i++) { res += `<li>- ${addedContent[i]}</li>` } return res } let rc = () => { let res = "" let rl = removedContent.length for (let i = 0; i < rl; i++) { res += `<li>- ${removedContent[i]}</li>` } return res } let fc = () => { let res = "" let fl = fixedContent.length for (let i = 0; i < fl; i++) { res += `<li>- ${fixedContent[i]}</li>` } return res } if (added) { add = ` <ul> ${ac()} <br> </ul> ` } if (remove) { rem = ` <ul> ${rc()} <br> </ul> ` } if (fixed) { fix = ` <ul> ${fc()} <br> </ul> ` } return ` <ul class="subcontent-bg"> <li class="subcontent-title">[${version}] - ${date}</li> <ol> ${added ? at + add : ""} ${remove ? rt + rem : ""} ${fixed ? ft + fix : ""} </ol> </ul> ` } function genChangeLogs() { __CHANGELOGS__.forEach(cl => { $("#changeLog-s").append(__CHANGELOG__(cl.version, cl.date, cl.added, cl.remove, cl.fixed, cl.addedContent, cl.removedContent, cl.fixedContent)) }) } let changeLog = true function controlSaver() { let items = ["bha", "sga", "bga", "cga", "ika", 'dem'] let datas = ["boosthat", "spikegear", "berserkergear", "crystalgear", "instakill", 'Demolist'] for (let i = 0; i < datas.length; i++) { document.querySelector(`[data-key="${datas[i]}"]`).value = localStorage.getItem(items[i]) || document.querySelector(`[data-key="${datas[i]}"]`).value } document.querySelector('[data-speed="heal"]').value = localStorage.getItem("heal") || document.querySelector('[data-speed="heal"]').value document.querySelector('[data-speed="addms"]').value = localStorage.getItem("addms") || document.querySelector('[data-speed="addms"]').value } /* Add at event DOMContentLoaded so that there is no HTML substitution bug */ document.addEventListener("DOMContentLoaded", () => { $("body").append(settingMenu) $("body").append(changeLogMenu) $("#close-script-cl").click(() => $(".centerMenu").css("display", "none")) let bha = [false, document.querySelector('[data-key="boosthat"]')] let dem = [false, document.querySelector('[data-key="Demolist"]')] let sga = [false, document.querySelector('[data-key="spikegear"]')] let bga = [false, document.querySelector('[data-key="berserkergear"]')] let cga = [false, document.querySelector('[data-key="crystalgear"]')] let ika = [false, document.querySelector('[data-key="instakill"]')] document.querySelector('[data-speed="heal"]').oninput = (e) => (e.target.value = e.target.value.replace(/\D/g, ''), localStorage.setItem("heal", document.querySelector('[data-speed="heal"]').value)) document.querySelector('[data-speed="addms"]').oninput = (e) => (e.target.value = e.target.value.replace(/\D/g, ''), localStorage.setItem("addms", document.querySelector('[data-speed="addms"]').value)) bha[1].onclick = () => (bha[1].value = "...", bha[0] = true) dem[1].onclick = () => (dem[1].value = "...", dem[0] = true) sga[1].onclick = () => (sga[1].value = "...", sga[0] = true) bga[1].onclick = () => (bga[1].value = "...", bga[0] = true) cga[1].onclick = () => (cga[1].value = "...", cga[0] = true) ika[1].onclick = () => (ika[1].value = "...", ika[0] = true) document.addEventListener("keydown", e => { if (bha[0]) (bha[0] = false, bha[1].value = e.code, localStorage.setItem("bha", e.code)) if (dem[0]) (dem[0] = false, dem[1].value = e.code, localStorage.setItem("dem", e.code)) if (sga[0]) (sga[0] = false, sga[1].value = e.code, localStorage.setItem("sga", e.code)) if (bga[0]) (bga[0] = false, bga[1].value = e.code, localStorage.setItem("bga", e.code)) if (cga[0]) (cga[0] = false, cga[1].value = e.code, localStorage.setItem("cga", e.code)) if (ika[0]) (ika[0] = false, ika[1].value = e.code, localStorage.setItem("ika", e.code)) }) genChangeLogs() controlSaver() if (changeLog) { $(".centerMenu").css("display", "flex") changeLog = false } genTogglers() $("#autoheal").click(() => (Toggle.autoHeal = !Toggle.autoHeal, cEl("#autoheal", Toggle.autoHeal, "AutoHeal"))) $("#autopush").click(() => (Toggle.autoPush = !Toggle.autoPush, cEl("#autopush", Toggle.autoPush, "AutoPush"))) $("#autosync").click(() => (Toggle.autoSync = !Toggle.autoSync, cEl("#autosync", Toggle.autoSync, "AutoSync"))) $("#autoplace").click(() => (Toggle.autoPlace = !Toggle.autoPlace, cEl("#autoplace", Toggle.autoPlace, "AutoPlace"))) $("#autobreak").click(() => (Toggle.autoBreak = !Toggle.autoBreak, cEl("#autobreak", Toggle.autoBreak, "AutoBreak"))) $("#autochat").click(() => (log(Toggle.autoChat), Toggle.autoChat = !Toggle.autoChat, cEl("#autochat", Toggle.autoChat, "AutoChat"))) $("#tracers").click(() => (Toggle.tracers = !Toggle.tracers, cEl("#tracers", Toggle.tracers, "Tracers"))) $("#autorespawn").click(() => (Toggle.autoRespawn = !Toggle.autoRespawn, cEl("#autorespawn", Toggle.autoRespawn, "AutoRespawn"))) $("#optheal").click(() => (Toggle.optHeal = !Toggle.optHeal, cEl("#optheal", Toggle.optHeal, "OptimizedAutoheal"))) $("#ui").click(() => (Toggle.UI = !Toggle.UI, cEl("#ui", Toggle.UI, "UI"))) $("#antiAFK").click(() => (Toggle.antiAFK = !Toggle.antiAFK, cEl("#antiAFK", Toggle.antiAFK, "antiAFK"))) $("#setting-menu-close-button").click(() => { $("#settingMenu").css("display", "none") }) $("#hack").click(() => { $('[data-menu="1"]').css("display", "block") $('[data-menu="2"]').css("display", "none") }) $("#control").click(() => { $('[data-menu="1"]').css("display", "none") $('[data-menu="2"]').css("display", "block") }) document.addEventListener("keydown", e => { if (e.code == "Escape") { if ($("#settingMenu").css("display") == "flex") { $("#settingMenu").css("display", "none") } else { $("#settingMenu").css("display", "flex") $("#clan-menu").css("display", "none") $("#hat-menu").css("display", "none") } } }) setInterval(() => { if ($("#clan-menu").css("display") == "block" || $("#hat-menu").css("display") == "flex") { $("#settingMenu").css("display", "none") } if ($("#homepage").css("display") == "flex") { $("#settingMenu").css("display", "none") } }, 500) })