// ==UserScript==
// @name MooMoo.io Auto Triple Mill
// @namespace https://greasyfork.org/users/1064285-vcrazy-gaming
// @version 0.1
// @description MooMoo.io Auto Triple Mill when [M] key is pressed
// @match *://moomoo.io/*
// @match *://*.moomoo.io/*
// @author _VcrazY_
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/msgpack.min.js
// @grant none
// @icon https://moomoo.io/img/favicon.png?v=1
// @license MIT
// ==/UserScript==
/* eslint-disable */
/* jshint esversion:8 */
let primary,
secondary,
food,
wall,
spike,
mill,
mine,
turret,
spawnpad,
ws,
x,
y,
X,
Y,
width,
height,
msgpack5 = msgpack,
AutoTriplemMillX = 10,
AutoTriplemMillY = 10,
AutoTripleMill = false,
myPlayer = {
id: null,
x: null,
y: null,
dir: null,
object: null,
weapon: null,
clan: null,
isLeader: null,
hat: null,
accessory: null,
isSkull: null,
};
function join(e) {
return Array.isArray(e) ? [...e] : Array.from(e);
}
function joinServer(e) {
e.addEventListener("message", hookWS);
}
function hookWS(e) {
let l = msgpack5.decode(new Uint8Array(e.data));
if (
((e = void 0), (l = (e = 1 < l.length ? [l[0], ...join(l[1])] : l)[0]), e)
) {
if (("1" == l && null == myPlayer.id && (myPlayer.id = e[1]), "33" == l))
for (l = 0; l < e[1].length / 13; l++) {
let a = e[1].slice(13 * l, 13 * l + 13);
a[0] == myPlayer.id &&
((myPlayer.x = a[1]),
(myPlayer.y = a[2]),
(myPlayer.dir = a[3]),
(myPlayer.object = a[4]),
(myPlayer.weapon = a[5]),
(myPlayer.clan = a[7]),
(myPlayer.isLeader = a[8]),
(myPlayer.hat = a[9]),
(myPlayer.accessory = a[10]),
(myPlayer.isSkull = a[11]));
}
0 == AutoTriplemMillX && (AutoTriplemMillX = myPlayer.x),
0 == AutoTriplemMillY && (AutoTriplemMillY = myPlayer.y),
(y != myPlayer.y || x != myPlayer.x) &&
(1 == AutoTripleMill &&
100 <=
Math.sqrt(
Math.pow(myPlayer.y - AutoTriplemMillY, 2) +
Math.pow(myPlayer.x - AutoTriplemMillX, 2),
) &&
(place(
mill,
Math.atan2(y - myPlayer.y, x - myPlayer.x) +
1.25,
),
place(
mill,
Math.atan2(y - myPlayer.y, x - myPlayer.x) -
1.25,
),
place(
mill,
Math.atan2(y - myPlayer.y, x - myPlayer.x) -
0,
),
sendPacket([
"2",
[Math.atan2(Y - height / 2, X - width / 2)],
]),
(AutoTriplemMillX = myPlayer.x),
(AutoTriplemMillY = myPlayer.y)),
(x = myPlayer.x),
(y = myPlayer.y)),
cacheItems();
}
}
function sendPacket(e) {
ws.send(new Uint8Array(Array.from(msgpack5.encode(e))));
}
function place(e, l = Math.atan2(Y - height / 2, X - width / 2)) {
sendPacket(["5", [e, null]]),
sendPacket(["c", [1, l]]),
sendPacket(["c", [0, l]]),
sendPacket(["5", [myPlayer.weapon, true]]);
}
function cacheItems() {
for (let e = 0; 9 > e; e++)
null !==
document.getElementById("actionBarItem" + e.toString()).offsetParent &&
(primary = e);
for (let l = 9; 16 > l; l++)
null !==
document.getElementById("actionBarItem" + l.toString()).offsetParent &&
(secondary = l);
for (let a = 16; 19 > a; a++)
null !==
document.getElementById("actionBarItem" + a.toString()).offsetParent &&
(food = a - 16);
for (let t = 19; 22 > t; t++)
null !==
document.getElementById("actionBarItem" + t.toString()).offsetParent &&
(wall = t - 16);
for (let y = 22; 26 > y; y++)
null !==
document.getElementById("actionBarItem" + y.toString()).offsetParent &&
(spike = y - 16);
for (let n = 26; 29 > n; n++)
null !==
document.getElementById("actionBarItem" + n.toString()).offsetParent &&
(mill = n - 16);
for (let r = 29; 31 > r; r++)
null !==
document.getElementById("actionBarItem" + r.toString()).offsetParent &&
(mine = r - 16);
for (let o = 31; 33 > o; o++)
null !==
document.getElementById("actionBarItem" + o.toString()).offsetParent &&
36 != o &&
(turret = o - 16);
spawnpad = 36;
}
(document.msgpack = msgpack),
(WebSocket.prototype.oldSend = WebSocket.prototype.send),
(WebSocket.prototype.send = function (e) {
ws || ((document.ws = this), (ws = this), joinServer(this)),
this.oldSend(e);
}),
document.addEventListener("keydown", function (e) {
77 == e.keyCode &&
"chatbox" !== document.activeElement.id.toLowerCase() &&
sendPacket([
"ch",
["Auto Triple Mill : " + (AutoTripleMill = !AutoTripleMill)],
]);
});