Message
Message
// @name SploMod - The best hack of 2024 NIGGA NIGHTMARE WAS SO MAD BECAUSE
I FIXED SPLOMOD BAHBAHBAHBABAHBH
// @description Autobreak-trap, Autoheal, Hat macros, Anti-trap, AutoPush & more!
// @version FINAL
// @author Wealthy#8266 & Nuro#9999 & Nudo (Fixed by ilyax)
// @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 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: ["If you're a lover", "you should know", "The lonely moments", "just get
lonelier", "The longer you're in love", "Than if you were alone", "Memories turn
into daydreams", "Become a taboooo", "I don't want to be afraid", "The deeper that
I go", "It takes my breath away", "Soft hearts electric souls", "Heart to heart",
"Eyes to eyes", "Is this taboo?", "Baby we built this house", "Baby we built this
house", "On memories", "Take my picture now", "Shake it til you see it", "And when
your fantasies", "Become your legacy", "Promise me a place", "In your house of
memories", "I think of you from time to time", "More than I thought I would", "You
were just too kind", "And I was too young to know", "That's all that really
matters", "I was a fool..", "Baby we built this house", "On memories", "Take my
picture now", "Shake it til you see it", "And when your fantasies", "Become your
legacy", "Promise me a place", "In your house of memories", "Those thoughts of past
lovers", "They'll always haunt me", "I wish I could believe", "You'd never wrong
me", "Then will you remember", "Me in the same way", "As I remember you", "Baby we
built this house", "On memories", "Take my picture now", "Shake it til you see it",
"And when your fantasies", "Become your legacy", "Promise me a place", "In your
house of memories", "Baby we built this house", "On memories", "Take my picture
now", "Shake it til you see it", "And when your fantasies", "Become your legacy",
"Promise me a place", "In your house of memories", "Woah Woah,", "Woah Woah",
"Promise me a place", "In your house of memories.. 💔"],
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);
};
};
class Sploop {
static place(id, angle = Config.angle) {
Config.update('cps');
Sploop.take(id);
Sploop.hit(angle);
Sploop.take(Config.weapon);
}
Sploop.take(Config.weapon);
}
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 chat(text) {
text = encoder.encode(text);
static hit(angle) {
angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);
static watch(angle) {
angle = (65535 * (angle + Math.PI)) / (2 * Math.PI);
static offensive() {
let offensive = () => {
let distance = enemy ? getDistance(enemy, user) : 0;
return 7;
}
Sploop.equip(offensive());
}
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;
Sploop.hit(angle);
Sploop.equip(6);
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))
};
Sploop.chat(`Smart-Push initiated... $
{(angleDifference / (Math.PI / 180)).toFixed(3)}`)
// Sploop.chat(message);
return getAngle(enemy, user)
}
}
Config.pushing = true;
Sploop.walk(angle())
}
}
}
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);
}
}
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);
Entity[index] = 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;
Placer.update();
}
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;
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;
});
constructor() {
this.ws = null;
}
};
// 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'];
setInterval(Placer.update, 75);
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()
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/mgjNglv928NY9v8XuIr2Z2mFbQHliKADN
MZn9XsDibA/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: 50%;
left: 50%;
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 genTogglers() {
__TOGGLERS__.forEach(t => {
$('[data-menu="1"]').append(__TOGGLER__(t.name, t.desc, t.id, t.active,
t.last))
})
}
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 genChangeLogs() {
__CHANGELOGS__.forEach(cl => {
$("#changeLog-s").append(__CHANGELOG__(cl.version, cl.date, cl.added,
cl.remove, cl.fixed, cl.addedContent, cl.removedContent, cl.fixedContent))
})
}
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
}