// ==UserScript==
// @name MOOMOO BOT SCRIPT - WORKING 2023
// @namespace http://tampermonkey.net/
// @description 3 bots will spawn and start going to your location.
// @version 1.2
// @author Blue Cyclone
// @match *://*.moomoo.io/*
// @icon none
// @grant none
// @license MIT
// @require https://greasyfork.org/scripts/423602-msgpack/code/msgpack.js
// ==/UserScript==
let msgpack = window.msgpack;
const originalSend = WebSocket.prototype.send;
window.playerSocket = null;
window.botSockets = [];
let healSpeed = 125;
let ahth = 86;
let ahrp = 2;
let ahtky = 80;
let healOn = true;
WebSocket.prototype.send = function (...args) {
this.addEventListener("message", function (e) {
const [packet, data] = msgpack.decode(new Uint8Array(e.data));
if (packet == "C" && myPlayer.sid == null) {
console.log("game started");
myPlayer.dead = false;
myPlayer.sid = data[0];
}
if (packet == "M" && myPlayer.dead) {
myPlayer.dead = false;
}
});
if (window.playerSocket == null) {
window.playerSocket = this;
}
originalSend.call(this, ...args);
};
const checkChange = setInterval(() => {
if (window.playerSocket != null) {
socketFound(window.playerSocket, -1);
clearInterval(checkChange);
botJoin(3);
}
}, 100);
function botJoin(amount) {
let t = window.playerSocket.url.split("wss://")[1].split("?")[0];
for (i = 0; i < amount; i++) {
window.grecaptcha
.execute("6LfahtgjAAAAAF8SkpjyeYMcxMdxIaQeh-VoPATP", {
action: "homepage",
})
.then((a) => {
window.botSockets.push(
new WebSocket(
"wss://" + t + "?token=" + "re:" + encodeURIComponent(a)
)
);
if (i == amount) {
window.botSockets.forEach((botSocket) => {
botSocket.binaryType = "arraybuffer";
botSocket.onopen = () => {
window.bots.push({
number: i,
sid: null,
x: null,
y: null,
angle: null,
dead: true,
health: 100,
items: [0, 3, 6, 10],
});
packet = "M";
data = [{ moofoll: "1", name: atob("Qm90IDop"), skin: 0 }]; // this is the join packet
sendPacket(botSocket, packet, data);
socketFound(botSocket, window.botSockets.indexOf(botSocket));
};
});
}
});
}
}
// Define Our Player //
const myPlayer = {
sid: null,
x: null,
y: null,
dead: true,
health: 100,
};
window.player = myPlayer;
window.bots = [];
function socketFound(socket, indexOfSocket) {
socket.addEventListener("message", function (message) {
viewMessage(message, indexOfSocket);
});
// DEFINE OUR MIDDLEWARE //
if (indexOfSocket != -1 && window.bots[indexOfSocket] && !myPlayer.dead) {
setInterval(() => {
sendPacket(window.botSockets[indexOfSocket], "6", [
atob("Qmx1ZSBDeWNsb25lJ3MgQm90cy4="),
]);
window.bots[indexOfSocket].angle = parseFloat(
Math.atan2(
myPlayer.y - window.bots[indexOfSocket].y,
myPlayer.x - window.bots[indexOfSocket].x
).toFixed(2)
);
sendPacket(window.botSockets[indexOfSocket], "D", [
window.bots[indexOfSocket].angle,
]);
sendPacket(window.botSockets[indexOfSocket], "a", [
window.bots[indexOfSocket].angle,
]);
if (window.bots[indexOfSocket].dead) {
pack = "M";
dat = [{ moofoll: "1", name: atob("Qm90IDop"), skin: 0 }]; // this is the join packet
sendPacket(window.botSockets[indexOfSocket], pack, dat);
}
}, 1000);
}
socket.send = function (...args) {
const [packet, data] = msgpack.decode(new Uint8Array(args[0]));
// D is for rotation
// G switches your item
// d places your item
// N is for points
// a is for movement
if (!["G", "N", "O", "D"].includes(packet)) {
}
if (packet === "a" && data[0] != null) {
}
const arr = new Uint8Array(Array.from(msgpack.encode([packet, data])));
originalSend.call(this, arr);
};
}
function viewMessage(m, indexOfSocket) {
const [packet, data] = msgpack.decode(new Uint8Array(m.data));
// should always work because interceptor is mounted already
// this sets the bot sid when the game starts
if (["C"].includes(packet) && indexOfSocket != -1) {
console.log("SETTING SID", indexOfSocket);
window.bots[indexOfSocket].sid = data[0];
window.bots[indexOfSocket].dead = false;
window.bots[indexOfSocket].health = 100;
}
if (packet == "P") {
indexOfSocket == -1
? ((myPlayer.dead = true), (myPlayer.health = 100))
: (window.bots[indexOfSocket].dead = true);
}
if (["a"].includes(packet) && data[0].length > 0) {
if (indexOfSocket != -1) {
myData = data[0].slice(
data[0].indexOf(window.bots[indexOfSocket].sid),
data[0].indexOf(window.bots[indexOfSocket].sid) + 13
);
window.bots[indexOfSocket].x = myData[1];
window.bots[indexOfSocket].y = myData[2];
} else {
myData = data[0].slice(
data[0].indexOf(myPlayer.sid),
data[0].indexOf(myPlayer.sid) + 13
);
myPlayer.x = myData[1];
myPlayer.y = myData[2];
}
if (indexOfSocket != -1) {
}
}
items = [0, 3, 6, 10];
if (packet == "V" && !data[1]) {
window.bots[indexOfSocket].items = data[0];
}
if (packet == "O" && indexOfSocket != -1) {
window.bots[indexOfSocket].health = data[1];
dist = Math.sqrt(
Math.pow(myPlayer.x - window.bots[indexOfSocket].x, 2) +
Math.pow(myPlayer.y - window.bots[indexOfSocket].y, 2)
);
if (
!window.botSockets[indexOfSocket].dead &&
healOn &&
window.bots[indexOfSocket].health < ahth &&
window.bots[indexOfSocket].health > 0 &&
dist > 200
) {
setTimeout(function () {
for (let i = 0; i < ahrp; i++) {
sendPacket(window.botSockets[indexOfSocket], "G", [
window.bots[indexOfSocket].items[0],
]);
sendPacket(window.botSockets[indexOfSocket], "d", [1]);
sendPacket(window.botSockets[indexOfSocket], "d", [0]);
}
}, healSpeed);
}
}
if (packet == "O" && indexOfSocket == -1) {
myPlayer.health = data[1];
if (
!myPlayer.dead &&
healOn &&
myPlayer.health < ahth &&
myPlayer.health > 0
) {
setTimeout(function () {
for (let i = 0; i < ahrp; i++) {
sendPacket(window.playerSocket, "G", [0]);
sendPacket(window.playerSocket, "d", [1]);
sendPacket(window.playerSocket, "d", [0]);
}
}, healSpeed);
}
}
}
function sendPacket(socket, packet, data) {
const arr = new Uint8Array(Array.from(msgpack.encode([packet, data])));
socket.send(arr);
}