MooMoo.io SLASHER Bots

SLASHER bots

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         MooMoo.io SLASHER Bots
// @version      1.1
// @description  SLASHER bots
// @author       | API by SLASHER moomo.io | Main work by Raf | Link: https://discord.gg/SB3DP6pp
// @match        *://*.moomoo.io/*
// @require       https://greasyfork.org/scripts/456235-moomoo-js/code/MooMoojs.js?version=1144167
// @run-at       document-end
// @icon https://moomoo.io/img/favicon.png?v=1
// @grant        none
// @namespace https://greasyfork.org/users/
// ==/UserScript==
/*
Support us on social media (follow and leave a star)

Discord: https://discord.gg/SB3DP6pp
// @license MIT
Features:

Bots can:

heal
upgrade
attack
Join a clan
Leave a clan
Disconnect
Follow a set coordinate or your player.


*/
// https://moomooforge.github.io/MooMoo.js/
const MooMoo = (function () {})[69];
function getRandomItem(arr) {
    const randomIndex = Math.floor(Math.random() * arr.length);
    const item = arr[randomIndex];
    return item;
}
var chosenBotItem
// New variables
var botTarget = true
var botTargetX
var botTargetY
var Combat = false
var attackPlayer = false
var TargetTeam
var ConnectedBots = 0

const botNames = ["EVIL","BLACK","BIG","UGLY","UR","MY","EZ","XXX","HARD","DIFFERENT","WORRIED","MAD","SUCKing","CUTE!!","TOUCH","CRAZY","SOFT","HOT","SMALL","HARD","ANGRY","HALLAL","POOR","RICH","SAUVAGE","GERMAN","JERK OFF","FCK","LONG","GRINGE","DUMP","BLOODY","FROZEN","ACID"]
const botLastNames = ["Slasher","SLASHer"]
const botColors = [6]

const BOT_NAME = "Slasher bot";
const BOT_SKIN = 1;
const BOT_MOOFOLL = true;
const BOT_CONNECT_EVENT = "connected";
const BOT_PACKET_EVENT = "packet";
const BOT_JOIN_REGION_INDEX = "join";
const BOT_POSITION_UPDATE_INTERVAL = 100;
const BOT_POSITION_UPDATE_PACKET = "33";
const COMMAND_PREFIX = "/";
const COMMAND_NAME_SEND = "send";
const COMMAND_NAME_DISCONECT = "disconnect";
const COMMAND_NAME_POS = "pos";
const COMMAND_NAME_CHOOSE = "choose";
const COMMAND_NAME_TOGGLE = "toggle";
const COMMAND_NAME_ATTACK = "attack";
const COMMAND_NAME_JOIN = "join";
const COMMAND_NAME_LEAVE = "leave";
const COMMAND_NAME_PLAYER_COMBAT = "combat";
const COMMAND_NAME_PLAYER_DEFEND = "defend";
const COMMAND_RESPONSE_SEND = "bots are comig heh...";
const COMMAND_RESPONSE_DISCONNECT = "bye bye bots...";
const BOT_COUNT_TO_ADD = 4;
const IP_LIMIT = 4;
const BOT_COUNT = IP_LIMIT - 1;


const botManager = MooMoo.BotManager;
let CommandManager = MooMoo.CommandManager;
let activePlayerManager = MooMoo.ActivePlayerManager;
let players = activePlayerManager.players;

CommandManager.setPrefix(COMMAND_PREFIX);

class Bot {
    static generateBot(botManager) {
        const chosenbotName = getRandomItem(botNames)
        const chosenbotLname = getRandomItem(botLastNames)
        const chosenbotColor = getRandomItem(botColors)
        const bot = new botManager.Bot(true, {
            name: chosenbotName + " " + chosenbotLname,
            skin: chosenbotColor,
            moofoll: BOT_MOOFOLL
        });
        bot.addEventListener(BOT_CONNECT_EVENT, server => {
            bot.spawn();
            bot.ws.addEventListener("message", ({ data }) => {
                const packet = MooMoo.msgpack.decode(new Uint8Array(data))
                let packetID = packet[0]
                let [type, [...args]] = packet;
                if (type == "io-init") {
                    bot.weapons = [0];
                    bot.mats = [0, 3, 6, 10];
                    bot.secondary = null;
                    bot.primary = 0;
                    bot.foodType = 0;
                    bot.wallType = 3;
                    bot.spikeType = 6;
                    bot.millType = 10;
                    bot.boostType = null;
                    bot.mineType = null;
                    bot.turretType = null;
                    bot.spawnpadType = null;
                }
                if (type == "17") {
                    if (args[2]) {
                        bot.weapons = args[1];
                        bot.primary = args[1][0];
                        bot.secondary = args[1][1] || null;
                    } else {
                        bot.mats = args[1];
                        for (let i = 0; i < args[1].length; i++) {
                            for (let i2 = 0; i2 < 3; i2++) {
                                if (i2 == args[1][i]) {
                                    bot.foodType = args[1][i];
                                }
                            }
                            for (let i2 = 3; i2 < 6; i2++) {
                                if (i2 == args[1][i]) {
                                    bot.wallType = args[1][i];
                                }
                            }
                            for (let i2 = 6; i2 < 10; i2++) {
                                if (i2 == args[1][i]) {
                                    bot.spikeType = args[1][i];
                                }
                            }
                            for (let i2 = 10; i2 < 13; i2++) {
                                if (i2 ==args[1][i]) {
                                    bot.millType = args[1][i];
                                }
                            }
                            for (let i2 = 13; i2 < 15; i2++) {
                                if (i2 == args[1][i]) {
                                    bot.mineType = args[1][i];
                                }
                            }
                            for (let i2 = 15; i2 < 17; i2++) {
                                if (i2 == args[1][i]) {
                                    bot.boostType = args[1][i];
                                }
                            }
                            for (let i2 = 17; i2 < 23; i2++) {
                                if (i2 == args[1][i] && i2 !== 20) {
                                    bot.turretType = args[1][i];
                                }
                                if (i2 == args[1][i] && i2 == 20) {
                                    bot.spawnpadType = args[1][i];
                                }
                            }
                        }
                    }
                }
                if (type == "1" && bot.sid == undefined) {
                    bot.sid = args[0];
                }
                if (type == "ch") {
                    let [sid, message] = args;
                    if (message.toLowerCase() == "bad" || message.toLowerCase() == "trash" || message.toLowerCase() == "loser" || message.toLowerCase() == "hacks" || message.toLowerCase() == "imagine hacking" || message.toLowerCase() == "so bad" || message.toLowerCase() == "ez"){
                        const possibleMessages = ["L + ratio + stay mad", "Ok and?", "Deal with it kid" , "Didn't ask; Don't care", "Keep crying", "Skill issue lol", "Nobody cares", "Code your own nerd", "Mad cuz Bad", "Insults won't stop us", "Yeah whatvever, hacking's fun"]
                        const result = getRandomItem(possibleMessages)
                        bot.sendPacket("ch", result)
                    }
                    if (message.toLowerCase() == "how" || message.toLowerCase() == "what mod" || message.toLowerCase() == "what script" || message.toLowerCase() == "share" || message.toLowerCase() == "what hack" || message.toLowerCase() == "what mod?"){
                        const possibleMessages = ["Hacks", "my own Bots mod", " SLASHER creat " , "Edit on worthless bots mod", "Beggars be like:", "try again later"]
                        const result = getRandomItem(possibleMessages)
                        bot.sendPacket("ch", result)
                    }
                    if (message.toLowerCase() == "lmao" || message.toLowerCase() == "wtf" || message.toLowerCase() == "lmfao" || message.toLowerCase() == "tf" || message.toLowerCase() == "omg" || message.toLowerCase() == "how tf" || message.toLowerCase() == "omfg" || message.toLowerCase() == "wth"){
                        const possibleMessages = ["Get used to it", "SLASHER bots are on top!", "We're unforgetable" , "Potato mod bots but worse:", "Welcome to heaven", "SLASHER bots in town...", "MooMoo.io in Ohio be like:", "Imagine not hacking it's fun", "MooMoo: 2B2T of .io games"]
                        const result = getRandomItem(possibleMessages)
                        bot.sendPacket("ch", result)
                    }
                }
                if (type == "16") {
                    bot.xp = args[0];
                    bot.age = args[1];
                    let [xp, age] = args;
                    if (bot.age === 2) {
                        if (chosenBotItem == "sword") {
                            bot.sendPacket("6", 3)
                        }
                        if (chosenBotItem == "polearm") {
                            bot.sendPacket("6", 5)
                        }
                        if (chosenBotItem == "bat") {
                            bot.sendPacket("6", 6)
                        }
                        if (chosenBotItem == "dagger") {
                            bot.sendPacket("6", 7)
                        }
                        if (chosenBotItem == "stick") {
                            bot.sendPacket("6", 8)
                        }
                        if (chosenBotItem == "axe") {
                            bot.sendPacket("6", 1)
                        }
                    }
                    if (bot.age === 3) {
                        bot.sendPacket("6", 20)
                    }
                    if (bot.age === 4) {
                        bot.sendPacket("6", 31)
                    }
                    if (bot.age === 5) {
                        bot.sendPacket("6", 23)
                    }
                    if (bot.age === 6) {
                        bot.sendPacket("6", 11)
                    }
                }
                if (type == "h") {
                    let [sid, health] = args;
                    if (bot.sid === sid && health < 100 && health > 0) {
                        if (Combat == true) {
                            let myPlayer = MooMoo.myPlayer;
                            setTimeout(()=> {
                                bot.sendPacket("5", 0, false)
                                bot.sendPacket("c", 1, myPlayer.dir)
                                bot.sendPacket("c", 0, myPlayer.dir)
                                bot.sendPacket("5", 0, true)
                            }, 100)
                        } else if(bot.sid === sid && health > 0) {
                            bot.spawn();
                        }
                    }
                }
            })
        })
        bot.addEventListener(BOT_PACKET_EVENT, packetargs => {
            if (packetargs.packet === "11") bot.spawn();
        });
        const { region, index } = MooMoo.ServerManager.extractRegionAndIndex();
        bot[BOT_JOIN_REGION_INDEX]([region, index]);
        botManager.addBot(bot);
        // If the the botTarget variable is true, bots will move to player
        setInterval(() => {
            if (!bot.x || !bot.y) return;
            if (botTarget == false && attackPlayer == false) {
                let myPlayer = MooMoo.myPlayer
                const playerAngle = Math.atan2(botTargetY - bot.y, botTargetX - bot.x);
                let playerBotD = MooMoo.UTILS.getDistanceBetweenTwoPoints(botTargetX, botTargetY, bot.x, bot.y);
                if (playerBotD > 200) {
                    setTimeout(() => {
                        bot.sendPacket(BOT_POSITION_UPDATE_PACKET, playerAngle);
                        bot.sendPacket("2" , playerAngle)
                    }, 50)
                } else {
                    setTimeout(() => {
                        bot.sendPacket("33", null)
                    }, 50)
                }
                if (Combat == true) {
                    setTimeout(() => {
                        bot.sendPacket("c", 1, playerAngle)
                    }, 100)
                }
                if (Combat == false) {
                    setTimeout(() => {
                        bot.sendPacket("c", 0, playerAngle)
                    }, 100)
                }
            }
        }, BOT_POSITION_UPDATE_INTERVAL);
        setInterval(() => {
            if (botTarget == true && attackPlayer == false) {
                const playerAngle = Math.atan2(MooMoo.myPlayer.y - bot.y, MooMoo.myPlayer.x - bot.x);
                let playerBotD = MooMoo.UTILS.getDistanceBetweenTwoPoints(MooMoo.myPlayer.x, MooMoo.myPlayer.y, bot.x, bot.y);
                if (playerBotD > 200) {
                    setTimeout(() => {
                        bot.sendPacket(BOT_POSITION_UPDATE_PACKET, playerAngle);
                        bot.sendPacket("2" ,playerAngle)
                    }, 50)
                } else {
                    setTimeout(() => {
                        bot.sendPacket("33", null)
                    }, 50)
                }
                if (Combat == true) {
                    setTimeout(() => {
                        bot.sendPacket("c", 1, playerAngle)
                    }, 100)
                }
                if (Combat == false) {
                    setTimeout(() => {
                        bot.sendPacket("c", 0, playerAngle)
                    }, 100)
                }
            }
        }, BOT_POSITION_UPDATE_INTERVAL);
        setInterval(() => {
            if (botTarget == true && attackPlayer == true) {
                let nearestEnemy = activePlayerManager.getClosestEnemy();
                const playerAngle = Math.atan2(nearestEnemy.y - bot.y, nearestEnemy.x - bot.x)
                setTimeout(() => {
                    bot.sendPacket(BOT_POSITION_UPDATE_PACKET, playerAngle);
                    bot.sendPacket("2" ,playerAngle)
                }, 50)
                if (Combat == true) {
                    setTimeout(() => {
                        bot.sendPacket("c", 1, playerAngle)
                    }, 100)
                }
                if (Combat == false) {
                    setTimeout(() => {
                        bot.sendPacket("c", 0, playerAngle)
                    }, 100)
                }
            }
        }, BOT_POSITION_UPDATE_INTERVAL);
        setInterval(() => {
            if (botTarget == true && attackPlayer == true) {
                let nearestEnemy = activePlayerManager.getClosestEnemy();
                const playerAngle = Math.atan2(nearestEnemy.y - bot.y, nearestEnemy.x - bot.x)
                setTimeout(() => {
                    bot.sendPacket(BOT_POSITION_UPDATE_PACKET, playerAngle);
                    bot.sendPacket("2" ,playerAngle)
                }, 50)
                if (Combat == true) {
                    setTimeout(() => {
                        bot.sendPacket("c", 1, playerAngle)
                    }, 100)
                }
                if (Combat == false) {
                    setTimeout(() => {
                        bot.sendPacket("c", 0, playerAngle)
                    }, 100)
                }
            }
        }, BOT_POSITION_UPDATE_INTERVAL);
    }
}

MooMoo.addEventListener(BOT_PACKET_EVENT, () => {
    if (MooMoo.myPlayer) {
        if (botManager._bots.size < BOT_COUNT) {
            Bot.generateBot(botManager);
            ConnectedBots += 1
        }
    }
});

CommandManager.registerCommand(COMMAND_NAME_SEND, (Command, args) => {
    Command.reply(COMMAND_RESPONSE_SEND);
    for (let i = 1; i <= BOT_COUNT_TO_ADD; i++) {
        Bot.generateBot(botManager)
        ConnectedBots += 1
    }
});
CommandManager.registerCommand(COMMAND_NAME_POS, (Command, args) => {
    // Sets the arguments to the bot's target x and y coords.
    botTargetX = args[0];
    botTargetY = args[1];
    Command.reply("Bot_Target_Coords: " + (botTargetX) + ", " + (botTargetY))
})
CommandManager.registerCommand(COMMAND_NAME_CHOOSE, (Command, args) => {
    chosenBotItem = args[0]
    Command.reply("Bots_Choose: " + (chosenBotItem))
})
CommandManager.registerCommand(COMMAND_NAME_JOIN, (Command, args) => {
    let Name = args[0];
    TargetTeam = Name
    botManager._bots.forEach(bot => {
        bot.sendPacket("10", (Name))
    });
    Command.reply("Bots Joining: " + (Name))
})
CommandManager.registerCommand(COMMAND_NAME_LEAVE, (Command, args) => {
    botManager._bots.forEach(bot => {
        bot.sendPacket("9")
    });
    Command.reply("Bots leaving clan...")
})
CommandManager.registerCommand(COMMAND_NAME_TOGGLE, (Command, args) => {
    if (botTarget == true) {
        botTarget = false
    } else {
        botTarget = true
    }
    Command.reply("Follow_Player: " + (botTarget) )
})
CommandManager.registerCommand(COMMAND_NAME_PLAYER_COMBAT, (Command, args) => {
    if (Combat == true) {
        Combat = false
    } else{
        Combat = true
    }
    Command.reply("Bot_in_combat: " + (Combat) )
})
CommandManager.registerCommand(COMMAND_NAME_ATTACK, (Command, args) => {
    if (attackPlayer == true) {
        attackPlayer = false
    } else {
        attackPlayer = true
    }
    Command.reply("Attack_Near_Player: " + (attackPlayer) )
})
CommandManager.registerCommand(COMMAND_NAME_DISCONECT, (Command, args) => {
    Command.reply(COMMAND_RESPONSE_DISCONNECT);
    botManager._bots.forEach(bot => {
        bot.ws.close();
        ConnectedBots = 0
    });
});
const setStylesS = element2 => {
    const styles2 = {
        position: "absolute",
        top: "330px",
        left: "10px",
        color: "red",
        fontFamily: "serif",
        fontSize: "20px"
    };

    Object.entries(styles2).forEach(([key, value]) => {
        element2.style[key] = value;
    });
};

const GeneralStuff2 = () => {
    const gameInfoElement2 = document.createElement("div");
    setStylesS(gameInfoElement2);
    gameInfoElement2.id = "playerPosition2";
    document.body.appendChild(gameInfoElement2);
    const Updater = () => {
        document.getElementById("playerPosition2").innerText = `Commands:
        /send, /disconnect, /toggle, /attack, /leave
                /pos (X, Y), /join (ClanName)
        -------------------------------------------------------
        BotInfo:
        Bot Target Coords: ${(botTargetX)}, ${(botTargetY)} ~ '/pos'
        Follow_Player: ${(botTarget)} ~ '/toggle'
        Toggle_Combat: ${(Combat)} ~ '/combat'
        Team_to_join: ${(TargetTeam)} ~ '/join'
        Attack_Nearest_Enemy: ${(attackPlayer)} ~ 'ArrowDown'
        ConnectedBots: ${(ConnectedBots)}`
    };

    setInterval(Updater, 100);
};
// Code to listen for key press:

GeneralStuff2();
document.addEventListener('keydown', function(e) {
    if (e.keyCode == 38 && document.activeElement.id.toLowerCase() !== 'chatbox') { // "UpArrow" to toggle menu
        if (document.getElementById('playerPosition2').hidden == true) {
            document.getElementById('playerPosition2').hidden = false
        } else {
            document.getElementById('playerPosition2').hidden = true
        }
    }
    if (e.keyCode == 40 && document.activeElement.id.toLowerCase() !== 'chatbox') { // "DownArrow" to toggle bot fight mode
        if (attackPlayer == true) {
            attackPlayer = false
            botManager._bots.forEach(bot => {
                bot.sendPacket("ch", "YES SIR ///.../// RETREAT!")
            });
        } else {
            attackPlayer = true
            botManager._bots.forEach(bot => {
                bot.sendPacket("ch", "Welcome to HEAVEN!")
            });
        }
        let myPlayer = MooMoo.myPlayer
        MooMoo.sendPacket("ch", "Attack_Near_Player: " + (attackPlayer) )
    }
});