// ==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/msgpack-lite@0.1.26/dist/msgpack.min.js // @grant none // @icon https://moomoo.io/img/favicon.png?v=1 // @license MIT // @downloadURL none // ==/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)], ]); });