您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
3 bots will spawn and start going to your location.
// ==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); }