- // ==UserScript==
- // @name MooMoo.io Gold bots
- // @namespace http://tampermonkey.net/
- // @version 1
- // @description just fucking gold bots dont care it.
- // @author Bianos
- // @require https://cdn.jsdelivr.net/npm/msgpack-lite@0.1.26/dist/msgpack.min.js
- // @license MIT
- // @match *://*.moomoo.io/*
- // @grant none
- // ==/UserScript==
-
- let teams = [];
- let teammates = [];
- let msgpack_lite = window.msgpack
- let color;
- let name;
- let oweb = window.WebSocket;
- let socket;
- var bot = [];
- let ownplayer = {sid: undefined, x: undefined, y: undefined, dir: undefined, skinIndex: undefined, name: undefined}
- let getAngleDist = (e, t) => {
- const i = Math.abs(t - e) % (Math.PI * 2);
- return i > Math.PI ? Math.PI * 2 - i : i
- }
- function gettoken() {
- return new Promise((resolve, reject) => {
- window.grecaptcha.ready(() => {
- window.grecaptcha.execute('6LfahtgjAAAAAF8SkpjyeYMcxMdxIaQeh-VoPATP', { action: 'homepage' })
- .then(token => resolve(token))
- .catch(err => reject(err));
- });
- });
- }
- window.WebSocket = function(...args) {
- socket = new oweb(...args);
- socket.addEventListener('message', async (event) => {
- let decoded = msgpack_lite.decode(new Uint8Array(event.data));
- let hooked;
- if (decoded.length > 1 && Array.isArray(decoded[1])) {
- hooked = [decoded[0], ...decoded[1]];
- } else {
- hooked = decoded
- }
-
- if(hooked[0] === 'io-init') {
- let religion = socket.url.split('/')[2]
- for(let i = 0; i <= 3; i++) {
- let token = await gettoken();
- bot.push(new Bot(religion , token));
- }
- }
-
- if(hooked[0] === "C") {
- if(ownplayer.sid == null || ownplayer.sid == undefined) {
- ownplayer.sid = hooked[1];
- }
- }
-
- if(hooked[0] === 'D') {
- if(hooked[1][1] === ownplayer.sid) {
- ownplayer.name = hooked[1][2];
- console.log(ownplayer.name);
- }
- }
-
- if (hooked[0] === "a") {
- for (let i = 0; i < hooked[1].length / 13; i++) {
- let playerInfo = hooked[1].slice(13 * i, 13 * i + 13);
- if (playerInfo[0] == ownplayer.sid) {
- ownplayer.x = playerInfo[1];
- ownplayer.y = playerInfo[2];
- ownplayer.dir = playerInfo[3];
- ownplayer.skinIndex = playerInfo[9];
- }
- }
- for(let bots of bot) {
- bots.autm.x = ownplayer.x
- bots.autm.y = ownplayer.y
- }
- }
- });
- return socket;
- };
- let randomhats = [28, 29, 30, 36, 37, 38, 44, 42, 43, 49];
- class Bot {
- constructor(region, token) {
- this.socket = new WebSocket(`wss://${region}/?token=re:${token}`);
- this.sid = undefined;
- this.x = undefined;
- this.y = undefined;
- this.dir = undefined;
- this.buildIndex = undefined;
- this.weaponIndex = undefined;
- this.team = undefined;
- this.skinIndex = undefined;
- this.tailIndex = undefined;
- this.health = 100;
- this.packetCount = 0;
- this.items = [0, 3, 6, 10];
- this.oldIndex = 0;
- this.oldWeapon;
- this.foodCount = 100;
- setInterval(() => { this.packetCount = 0 }, 1000);
- this.autm = {
- x: undefined,
- y: undefined,
- boolean: true
- };
-
- this.socket.addEventListener('open', () => {
- console.log('websocket true');
- this.socket.addEventListener('message', async event => {
- let arraybuf;
- if (event.data instanceof Blob) {
- arraybuf = await event.data.arrayBuffer();
- } else {
- return;
- }
- let u8array = new Uint8Array(arraybuf);
- let decoded;
- try {
- decoded = msgpack_lite.decode(u8array);
- } catch (error) {
- }
- var hooked;
- if (decoded.length > 1){
- hooked = [decoded[0], ...decoded[1]];
- if (hooked[1] instanceof Array){
- hooked = hooked;
- }
- } else {
- hooked = decoded;
- }
-
- if(hooked[0] === 'io-init') {
- this.spawn(name, color)
- }
-
- if (hooked[0] === 'A') {
- teams = hooked[1];
- }
-
- if (hooked[0] === 'C') {
- if (this.sid == null) {
- this.sid = hooked[1];
- }
- }
-
- if(hooked[0] === 'D') {
- if(hooked[1][1] === this.sid) {
- this.foodCount = 100;
- this.health = 100;
- }
- if(hooked[1][2] === ownplayer.name) {
- this.sendMessage('6', 'Hi Owner!');
- }
- }
-
- if(hooked[0] === '6') {
- if(hooked[1] === ownplayer.sid) {
- this.sendMessage('6', hooked[2]);
- }
- }
-
- if(hooked[0] === 'O') {
- if(hooked[1] === this.sid) {
- this.health = hooked[2];
- }
- }
-
- if(hooked[0] === 'N') {
- let food = hooked.indexOf('food')
- if (food !== -1 && food < hooked.length - 1) {
- this.foodCount = hooked[food + 1];
- } else {
- this.foodCount = 0;
- }
- }
-
- if (hooked[0] === 'a') {
- teammates = [];
- for (let i = 0; i < hooked[1].length / 13; i++) {
- let playerInfo = hooked[1].slice(13 * i, 13 * i + 13);
- if (playerInfo[0] == this.sid) {
- this.x = playerInfo[1];
- this.y = playerInfo[2];
- this.dir = playerInfo[3]
- this.buildIndex = playerInfo[4];
- this.weaponIndex = playerInfo[5];
- this.team = playerInfo[7];
- this.skinIndex = playerInfo[9];
- this.tailIndex = playerInfo[10];
- } else if (playerInfo[7] == this.team && playerInfo[0] != this.sid) {
- teammates.push({ sid: playerInfo[0], x: playerInfo[1], y: playerInfo[2], isOwner: playerInfo[8] });
- }
- }
- this.oldWeapon = this.weaponIndex;
- this.equipIndex(0, randomhats[Math.floor(Math.random() * randomhats.length)], 0);
- if(this.health < 100) {
- let { x, y } = this.autm;
- let distance = Math.sqrt(Math.pow(this.y - y, 2) + Math.pow(this.x - x, 2));
- if(distance >= 200) {
- let hc = (Math.ceil((100 - this.health) / 20));
- if(this.foodCount >= 10) {
- for(let i = 0; i <= hc; i++) {
- setTimeout(() => {
- this.place(this.items[0], null);
- }, 70);
- }
- }
- }
- }
- if (this.autm.boolean) {
- let { x, y } = this.autm;
- let distance = Math.sqrt(Math.pow(this.y - y, 2) + Math.pow(this.x - x, 2));
- let angle = Math.atan2(y - this.y, x - this.x);
- if(distance >= 105) {
- this.sendMessage('a', angle);
- } else {
- if(getAngleDist(angle, ownplayer.dir) <= (Math.PI / 2.6)) {
- this.sendMessage('a', null);
- } else {
- this.sendMessage('a', ownplayer.dir);
- }
- }
- }
- if(this.dir != ownplayer.dir) {
- this.sendMessage('D', ownplayer.dir);
- }
- }
- if(hooked[0] === 'P') {
- this.spawn(name, color);
- }
- });
- });
- }
-
- spawn() {
- this.sendMessage('M', {
- name: 'BianosGoldBot',
- moofoll: true,
- skin: 0
- });
- }
-
- join(clan) {
- this.sendMessage('b', clan);
- }
-
- equipIndex(buy, id, index) {
- this.sendMessage('c', buy, id, index);
- }
-
- aimAt(angle) {
- this.sendMessage('D', angle);
- }
-
- doHit(hitting, angle) {
- this.sendMessage('d', hitting, angle);
- }
-
- place(id, ang) {
- this.sendMessage('G', id);
- this.doHit(1, ang);
- this.doHit(0, ang);
- this.sendMessage('G', this.oldWeapon, true);
- }
-
- sendMessage(type, ...args) {
- if (this.packetCount < 120) {
- let message = [type, args];
- let eM = msgpack_lite.encode(message);
- let mes = new Uint8Array(eM);
- this.socket.send(mes);
- this.packetCount++;
- }
- }
- }
-
-