Greasy Fork is available in English.

Moomoo.io Public AutoMacroMod

Best Legit moomoo.io script for 1.8.0

// ==UserScript==
// @name         Moomoo.io Public AutoMacroMod
// @author       T h e S l a u g h t e r h o u s e
// @description  Best Legit moomoo.io script for 1.8.0
// @version      V1
// @match        *://*.moomoo.io/*
// @match        *://*sandbox.moomoo.io/*
// @namespace    https://greasyfork.org/users/1190411
// @icon         https://cdn.glitch.com/82ae8945-dcc6-4276-98a9-665381b4cd2b/cursor12.png
// @license      MIT
// @grant        none
// @run-at       document-end
// ==/UserScript==

localStorage.moofoll = !0;

(function () {
    var mt = 0;
    var mel = null;
    var mv = false;
    var isd = false;
    var ix;
    var iy;
    var menuElement = null;

    var hhk = {
    0: 0, //unnequip hat
    51: 0,// Moo Cap
    50: 0, // Apple Cap
    28: 0, // Moo Head
    29: 0, // Pig Head
    30: 0, // Fluff Head
    36: 0, // Pandou Head
    37: 0, // Bear Head
    38: 0, // Monkey Head
    44: 0, // Polar Head
    35: 0, // Fez Hat
    42: 0, // Enigma Hat
    43: 0, // Blitz Hat
    49: 0, // Bob XIII Hat
    57: 0, // Pumpkin
    8: 0, // Bummle Hat
    2: 0, // Straw Hat
    15: 0, // Winter Cap
    5: 0, // Cowboy Hat
    4: 0, // Ranger Hat
    18: 0, // Explorer Hat
    31: 0, // Flipper Hat
    1: 0, // Marksman Cap
    10: 0, // Bush Gear
    48: 0, // Halo
    6: 0, // Soldier Helmet
    23: 0, // Anti Venom Gear
    13: 0, // Medic Gear
    9: 0, // Miners Helmet
    32: 0, // Musketeer Hat
    7: 0, // Bull Helmet
    22: 0, // Emp Helmet
    12: 0, // Booster Hat
    26: 0, // Barbarian Armor
    21: 0, // Plague Mask
    46: 0, // Bull Mask
    14: 0, // Windmill Hat
    11: 0, // Spike Gear
    53: 0, // Turret Gear
    20: 0, // Samurai Armor
    58: 0, // Dark Knight
    27: 0, // Scavenger Gear
    40: 0, // Tank Gear
    52: 0, // Thief Gear
    55: 0, // Bloodthirster
    56: 0 // Assassin Gear
};

    function iso() {
        return document.activeElement.id.toLowerCase() === 'chatbox';
    }

    function iaia() {
        return document.activeElement.id.toLowerCase() === 'allianceinput';
    }

    function shhk() {
        return !iso() && !iaia();
    }

    function toggleMacros() {
        mt = (mt + 1) % 2;
        document.title = mt === 1 ? "AutoMacroMod" : "AutoMacroMod";

        var macroStateElement = document.getElementById("macroState");
        macroStateElement.textContent = mt === 1 ? "On" : "Off";

        if (mt === 1) {
            mel = function (e) {
                if (shhk()) {
                    for (var hatId in hhk) {
                        if (e.keyCode === hhk[hatId]) {
                            storeEquip(hatId);
                            break;
                        }
                    }
                }
            };

            document.addEventListener('keydown', mel);
        } else {
            document.removeEventListener('keydown', mel);
            mel = null;
        }
    }

    function toggleMenu() {
        var menuElement = document.getElementById('hatMacroMenu');
        if (mv) {
            menuElement.style.display = 'none';
            mv = false;
        } else {
            menuElement.style.display = 'block';
            mv = true;
        }
    }

    function dragStart(e) {
        isd = true;
        ix = e.clientX - menuElement.getBoundingClientRect().left;
        iy = e.clientY - menuElement.getBoundingClientRect().top;
    }

    function dragEnd() {
        isd = false;
    }

    function drag(e) {
        if (!isd) return;
        menuElement.style.left = (e.clientX - ix) + 'px';
        menuElement.style.top = (e.clientY - iy) + 'px';
    }

    function createMenu() {
        menuElement = document.createElement('div');
        menuElement.id = 'hatMacroMenu';
        menuElement.style.display = 'none';
        menuElement.style.background = 'rgba(0, 0, 0, 0.8)';
        menuElement.style.fontFamily = 'Hammersmith One, sans-serif';
        menuElement.style.position = 'absolute';
        menuElement.style.width = '300px';
        menuElement.style.height = '250px';
        menuElement.style.border = '1.5px solid #000';
        menuElement.style.borderRadius = '8px';
        menuElement.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 1)';
        menuElement.style.top = 'calc(20px + 2vh)';
        menuElement.style.right = 'calc(20px + 2vw)';
        menuElement.style.zIndex = '9999';
        menuElement.style.overflowY = 'auto';
        menuElement.style.color = '#fff';
        menuElement.style.fontSize = '17px !important';
        menuElement.style.boxShadow = '5px 5px 10px rgba(0, 0, 0, 0.4)';
        menuElement.style.padding = '18px';
        document.body.appendChild(menuElement);

var hti = {
    0: "No Hat",
    51: "Moo Cap",
    50: "Apple Cap",
    28: "Moo Head",
    29: "Pig Head",
    30: "Fluff Head",
    36: "Pandou Head",
    37: "Bear Head",
    38: "Monkey Head",
    44: "Polar Head",
    35: "Fez Hat",
    42: "Enigma Hat",
    43: "Blitz Hat",
    49: "Bob XIII Hat",
    57: "Pumpkin",
    8: "Bummle Hat",
    2: "Straw Hat",
    15: "Winter Cap",
    5: "Cowboy Hat",
    4: "Ranger Hat",
    18: "Explorer Hat",
    31: "Flipper Hat",
    1: "Marksman Cap",
    10: "Bush Gear",
    48: "Halo",
    6: "Soldier Helmet",
    23: "Anti Venom Gear",
    13: "Medic Gear",
    9: "Miners Helmet",
    32: "Musketeer Hat",
    7: "Bull Helmet",
    22: "Emp Helmet",
    12: "Booster Hat",
    26: "Barbarian Armor",
    21: "Plague Mask",
    46: "Bull Mask",
    14: "Windmill Hat",
    11: "Spike Gear",
    53: "Turret Gear",
    20: "Samurai Armor",
    58: "Dark Knight",
    27: "Scavenger Gear",
    40: "Tank Gear",
    52: "Thief Gear",
    55: "Bloodthirster",
    56: "Assassin Gear"
};

var ohti = {
    0: "No Hat",
    51: "Moo Cap",
    50: "Apple Cap",
    28: "Moo Head",
    29: "Pig Head",
    30: "Fluff Head",
    36: "Pandou Head",
    37: "Bear Head",
    38: "Monkey Head",
    44: "Polar Head",
    35: "Fez Hat",
    42: "Enigma Hat",
    43: "Blitz Hat",
    49: "Bob XIII Hat",
    57: "Pumpkin",
    8: "Bummle Hat",
    2: "Straw Hat",
    15: "Winter Cap",
    5: "Cowboy Hat",
    4: "Ranger Hat",
    18: "Explorer Hat",
    31: "Flipper Hat",
    1: "Marksman Cap",
    10: "Bush Gear",
    48: "Halo",
    6: "Soldier Helmet",
    23: "Anti Venom Gear",
    13: "Medic Gear",
    9: "Miners Helmet",
    32: "Musketeer Hat",
    7: "Bull Helmet",
    22: "Emp Helmet",
    12: "Booster Hat",
    26: "Barbarian Armor",
    21: "Plague Mask",
    46: "Bull Mask",
    14: "Windmill Hat",
    11: "Spike Gear",
    53: "Turret Gear",
    20: "Samurai Armor",
    58: "Dark Knight",
    27: "Scavenger Gear",
    40: "Tank Gear",
    52: "Thief Gear",
    55: "Bloodthirster",
    56: "Assassin Gear"
};

var predefinedKeycodes = {
    "No Hat": 16,
    "Bull Helmet": 82,
    "Tank Gear": 90,
    "Soldier Helmet": 71,
    "Booster Hat": 66,
    "Flipper Hat": 89,
    "Winter Cap": 78,
    "Emp Helmet": 74,
    "Fluff Head": 73,
    "Turret Gear": 84,
    "Barbarian Armor": 77,
    "Samurai Armor": 85,
    "Spike Gear": 72
};

for (var hatId in hti) {
    var input = hti[hatId];
    var keycode = predefinedKeycodes[input];
    hhk[hatId] = keycode;
}

var tableHTML = `
        <h1 style="font-size: 28px !important; margin-top: 15px; text-align: center;">Hat Shortcuts <span id="macroState"">Off</span></h1>
        <hr>
        <table style="margin: 0 auto; text-align: center;">
        <tr>
            <td><b>Hats</b></td>
            <td></td>
            <td><b>Keycodes</b></td>
        </tr>`;

        var ukwii = {
    51: "https://static.wikia.nocookie.net/moom/images/a/ac/Hat_51.png",
    50: "https://static.wikia.nocookie.net/moom/images/2/2e/Hat_50.png",
    28: "https://static.wikia.nocookie.net/moom/images/5/58/Hat_28.png",
    29: "https://static.wikia.nocookie.net/moom/images/0/0d/Hat_29.png",
    30: "https://static.wikia.nocookie.net/moom/images/4/49/Hat_30.png",
    36: "https://static.wikia.nocookie.net/moom/images/4/4e/Hat_36.png",
    37: "https://static.wikia.nocookie.net/moom/images/b/bf/Hat_37.png",
    38: "https://static.wikia.nocookie.net/moom/images/b/b6/Hat_38.png",
    44: "https://static.wikia.nocookie.net/moom/images/2/21/Hat_44.png",
    35: "https://static.wikia.nocookie.net/moom/images/d/df/Hat_35.png",
    42: "https://static.wikia.nocookie.net/moom/images/9/90/Hat_42.png",
    43: "https://static.wikia.nocookie.net/moom/images/f/fb/Hat_43.png",
    49: "https://static.wikia.nocookie.net/moom/images/b/b7/Hat_49.png",
    57: "https://static.wikia.nocookie.net/moom/images/7/7c/Hat_57.png",
    8: "https://static.wikia.nocookie.net/moom/images/e/e9/Hat_8.png",
    2: "https://static.wikia.nocookie.net/moom/images/9/9b/Hat_2.png",
    15: "https://static.wikia.nocookie.net/moom/images/6/66/Hat_15.png",
    5: "https://static.wikia.nocookie.net/moom/images/5/51/Hat_5.png",
    4: "https://static.wikia.nocookie.net/moom/images/e/e8/Hat_4.png",
    18: "https://static.wikia.nocookie.net/moom/images/a/ad/Hat_18.png",
    31: "https://static.wikia.nocookie.net/moom/images/4/43/Hat_31.png",
    1: "https://static.wikia.nocookie.net/moom/images/b/b1/Hat_1.png",
    10: "https://static.wikia.nocookie.net/moom/images/9/90/Hat_10.png",
    48: "https://static.wikia.nocookie.net/moom/images/d/d4/Hat_48.png",
    6: "https://static.wikia.nocookie.net/moom/images/3/3f/Hat_6.png",
    23: "https://static.wikia.nocookie.net/moom/images/b/b1/Hat_23.png",
    13: "https://static.wikia.nocookie.net/moom/images/b/b0/Hat_13.png",
    9: "https://static.wikia.nocookie.net/moom/images/e/eb/Hat_9.png",
    32: "https://static.wikia.nocookie.net/moom/images/4/45/Hat_32.png",
    7: "https://static.wikia.nocookie.net/moom/images/f/f9/Hat_7.png",
    22: "https://static.wikia.nocookie.net/moom/images/f/fd/Hat_22.png",
    12: "https://static.wikia.nocookie.net/moom/images/3/31/Hat_12.png",
    26: "https://static.wikia.nocookie.net/moom/images/1/11/Hat_26.png",
    21: "https://static.wikia.nocookie.net/moom/images/c/c6/Hat_21.png",
    46: "https://static.wikia.nocookie.net/moom/images/3/3f/Hat_46.png",
    14: "https://static.wikia.nocookie.net/moom/images/4/42/Hat_14_P.png",
    11: "https://static.wikia.nocookie.net/moom/images/a/a3/Hat_11_P.png",
    53: "https://static.wikia.nocookie.net/moom/images/e/e8/Hat_53_P.png",
    20: "https://static.wikia.nocookie.net/moom/images/2/2a/Hat_20.png",
    58: "https://static.wikia.nocookie.net/moom/images/d/da/Hat_58.png",
    27: "https://static.wikia.nocookie.net/moom/images/8/88/Hat_27.png",
    40: "https://static.wikia.nocookie.net/moom/images/0/08/Hat_40.png",
    52: "https://static.wikia.nocookie.net/moom/images/9/9b/Hat_52.png",
    55: "https://static.wikia.nocookie.net/moom/images/0/0d/Hat_55.png",
    56: "https://static.wikia.nocookie.net/moom/images/5/53/Hat_56.png"
};

        for (hatId in hti) {
    input = hti[hatId];
    keycode = hhk[hatId];
    var imagePath = ukwii[hatId];

    if (keycode === undefined) {
        keycode = "";
    }

     if (hatId === "0") {
        tableHTML += `
        <tr>
            <td>${input}</td>
            <td></td>
            <td>
                <input type="text" id="${input}Key" value="${keycode}" maxlength="3" oninput="this.value = this.value.replace(/[^0-9]/g, '')" style="width: 3em;">
                <span id="${input}KeyLabel" style="color: gray;"></span>
            </td>
        </tr>`;
    } else {

        var imageWidth = "35px";
        var imageHeight = "35px";

        tableHTML += `
        <tr>
            <td>${input}</td>
            <td><img src="${ukwii[hatId]}" alt="${input}" style="width: ${imageWidth}; height: ${imageHeight};"></td>
            <td>
                <input type="text" id="${input}Key" value="${keycode}" maxlength="3" oninput="this.value = this.value.replace(/[^0-9]/g, '')" style="width: 3em;">
                <span id="${input}KeyLabel" style="color: gray;"></span>
            </td>
        </tr>`;
    }
}

tableHTML += `
</tr>
</table>
<hr>
<div style="text-align: center; margin-top: 20px;">
    <button id="Save">Save</button>
</div>`;

        menuElement.innerHTML = tableHTML;

function saveHotkeys() {
    var savedHotkeys = {};

    for (var hatId in hhk) {
        var inputField = document.getElementById(`${hti[hatId]}Key`);
        var nkc = parseInt(inputField.value);
        savedHotkeys[hatId] = nkc;
    }

    localStorage.setItem('hhk', JSON.stringify(savedHotkeys));
}

function loadHotkeys() {
    var savedHotkeysStr = localStorage.getItem('hhk');
    if (savedHotkeysStr) {
        var savedHotkeys = JSON.parse(savedHotkeysStr);

        for (var hatId in savedHotkeys) {
            hhk[hatId] = savedHotkeys[hatId];
            var inputField = document.getElementById(`${hti[hatId]}Key`);
            inputField.value = savedHotkeys[hatId];
        }
    }
}

        document.getElementById("Save").addEventListener("click", function () {
    for (var hatId in ohti) {
        var input = ohti[hatId];
        var nkc = parseInt(document.getElementById(`${input}Key`).value);
        hhk[hatId] = nkc;
        var keyLabel = document.getElementById(`${input}KeyLabel`);
        keyLabel.textContent = keyCodeToLabel(nkc);
        keyLabel.style.color = '#909090';

var macroStateElement = document.getElementById("macroState");
macroStateElement.style.fontSize = "28px";
    }
    saveHotkeys();
});

loadHotkeys();

function keyCodeToLabel(keyCode) {
    var label = '';
    switch (keyCode) {
        case 3:
            label = 'Cancel';
            break;
        case 8:
            label = 'Backspace';
            break;
        case 9:
            label = 'Tab';
            break;
        case 12:
            label = 'Clear';
            break;
        case 13:
            label = 'Enter';
            break;
        case 16:
        case 160:
            label = 'Shift';
            break;
        case 17:
        case 161:
            label = 'Control';
            break;
        case 18:
        case 162:
            label = 'Alt';
            break;
        case 19:
            label = 'Pause';
            break;
        case 20:
            label = 'Caps Lock';
            break;
        case 21:
            label = 'Unidentified';
            break;
        case 25:
            label = 'Unidentified';
            break;
        case 27:
            label = 'Escape';
            break;
        case 28:
            label = 'Henkan';
            break;
        case 29:
            label = 'Muhenkan';
            break;
        case 32:
            label = '(blank space)';
            break;
        case 33:
            label = 'PageUp';
            break;
        case 34:
            label = 'PageDown';
            break;
        case 35:
            label = 'End';
            break;
        case 36:
            label = 'Home';
            break;
        case 37:
            label = 'ArrowLeft';
            break;
        case 38:
            label = 'ArrowUp';
            break;
        case 39:
            label = 'ArrowRight';
            break;
        case 40:
            label = 'ArrowDown';
            break;
        case 41:
            label = 'Select';
            break;
        case 42:
            label = 'Print';
            break;
        case 43:
            label = 'Execute';
            break;
        case 44:
            label = 'F13';
            break;
        case 45:
            label = 'Insert';
            break;
        case 46:
            label = 'Delete';
            break;
        case 47:
            label = 'Help';
            break;
        case 48:
            label = '0';
            break;
        case 49:
            label = '1';
            break;
        case 50:
            label = '2';
            break;
        case 51:
            label = '3';
            break;
        case 52:
            label = '4';
            break;
        case 53:
            label = '5';
            break;
        case 54:
            label = '6';
            break;
        case 55:
            label = '7';
            break;
        case 56:
            label = '8';
            break;
        case 57:
            label = '9';
            break;
        case 58:
            label = ':';
            break;
        case 59:
            label = ';';
            break;
        case 60:
            label = '<';
            break;
        case 61:
            label = '=';
            break;
        case 63:
            label = 'ß';
            break;
        case 64:
            label = '@';
            break;
        case 65:
            label = 'a';
            break;
        case 66:
            label = 'b';
            break;
        case 67:
            label = 'c';
            break;
        case 68:
            label = 'd';
            break;
        case 69:
            label = 'e';
            break;
        case 70:
            label = 'f';
            break;
        case 71:
            label = 'g';
            break;
        case 72:
            label = 'h';
            break;
        case 73:
            label = 'i';
            break;
        case 74:
            label = 'j';
            break;
        case 75:
            label = 'k';
            break;
        case 76:
            label = 'l';
            break;
        case 77:
            label = 'm';
            break;
        case 78:
            label = 'n';
            break;
        case 79:
            label = 'o';
            break;
        case 80:
            label = 'p';
            break;
        case 81:
            label = 'q';
            break;
        case 82:
            label = 'r';
            break;
        case 83:
            label = 's';
            break;
        case 84:
            label = 't';
            break;
        case 85:
            label = 'u';
            break;
        case 86:
            label = 'v';
            break;
        case 87:
            label = 'w';
            break;
        case 88:
            label = 'x';
            break;
        case 89:
            label = 'y';
            break;
        case 90:
            label = 'z';
            break;
        case 91:
        case 224:
            label = 'Meta';
            break;
        case 92:
        case 225:
            label = 'Meta';
            break;
        case 93:
            label = 'ContextMenu';
            break;
        case 95:
            label = 'Standby';
            break;
        case 96:
            label = '0';
            break;
        case 97:
            label = '1';
            break;
        case 98:
            label = '2';
            break;
        case 99:
            label = '3';
            break;
        case 100:
            label = '4';
            break;
        case 101:
            label = '5';
            break;
        case 102:
            label = '6';
            break;
        case 103:
            label = '7';
            break;
        case 104:
            label = '8';
            break;
        case 105:
            label = '9';
            break;
        case 106:
            label = '*';
            break;
        case 107:
            label = '+';
            break;
        case 108:
            label = ',';
            break;
        case 109:
            label = '-';
            break;
        case 110:
            label = '.';
            break;
        case 111:
            label = '/';
            break;
        case 112:
            label = 'F1';
            break;
        case 113:
            label = 'F2';
            break;
        case 114:
            label = 'F3';
            break;
        case 115:
            label = 'F4';
            break;
        case 116:
            label = 'F5';
            break;
        case 117:
            label = 'F6';
            break;
        case 118:
            label = 'F7';
            break;
        case 119:
            label = 'F8';
            break;
        case 120:
            label = 'F9';
            break;
        case 121:
            label = 'F10';
            break;
        case 122:
            label = 'F11';
            break;
        case 123:
            label = 'F12';
            break;
        case 124:
            label = 'F13';
            break;
        case 125:
            label = 'F14';
            break;
        case 126:
            label = 'F15';
            break;
        case 127:
            label = 'F16';
            break;
        case 128:
            label = 'F17';
            break;
        case 129:
            label = 'F18';
            break;
        case 130:
            label = 'F19';
            break;
        case 131:
            label = 'F20';
            break;
        case 132:
            label = 'F21';
            break;
        case 133:
            label = 'F22';
            break;
        case 134:
            label = 'F23';
            break;
        case 135:
            label = 'F24';
            break;
        case 136:
            label = 'F25';
            break;
        case 137:
            label = 'F26';
            break;
        case 138:
            label = 'F27';
            break;
        case 139:
            label = 'F28';
            break;
        case 140:
            label = 'F29';
            break;
        case 141:
            label = 'F30';
            break;
        case 142:
            label = 'F31';
            break;
        case 143:
            label = 'F32';
            break;
        case 144:
            label = 'NumLock';
            break;
        case 145:
            label = 'ScrollLock';
            break;
        case 151:
            label = 'Airplane Mode';
            break;
        case 161:
            label = 'Volume Mute';
            break;
        case 162:
            label = 'Volume Down';
            break;
        case 163:
            label = 'Volume Up';
            break;
        case 186:
            label = ';';
            break;
        case 187:
            label = '=';
            break;
        case 188:
            label = ',';
            break;
        case 189:
            label = '-';
            break;
        case 190:
            label = '.';
            break;
        case 191:
            label = '/';
            break;
        case 192:
            label = '`';
            break;
        case 193:
            label = '/';
            break;
        case 219:
            label = '[';
            break;
        case 220:
            label = '\\';
            break;
        case 221:
            label = ']';
            break;
        case 222:
            label = "'";
            break;
        case 223:
            label = '`';
            break;
        case 224:
            label = 'Meta';
            break;
        case 225:
            label = 'AltGraph';
            break;
        case 226:
            label = '\\';
            break;
        case 229:
            label = 'Non-conversion';
            break;
        case 230:
            label = 'Alphanumeric';
            break;
        case 231:
            label = 'Hiragana/Katakana';
            break;
        case 233:
            label = 'Zenkaku/Hankaku';
            break;
        case 234:
            label = 'Kanji Mode';
            break;
        case 240:
            label = 'WakeUp';
            break;
        case 255:
            label = 'WakeUp';
            break;
        default:
            label = '';
    }
    return label;
}

            menuElement.querySelectorAll('span, td, p').forEach(element => {
            element.style.fontSize = '17px';
            element.style.color = '#fff';
        });

        menuElement.addEventListener('mousedown', dragStart);
        menuElement.addEventListener('mouseup', dragEnd);
        menuElement.addEventListener('mousemove', drag);
        document.getElementById("Save").click();

        var Save = document.getElementById("Save");
        Save.addEventListener('click', saveHotkeys);
        document.getElementById("Save").click();

    }

    createMenu();

    function saveHotkeys() {
    for (var hatId in hhk) {
        (function (currentHatId) {
            var inputField = document.getElementById("hat" + currentHatId + "Key");
            var nkc = parseInt(inputField.value);
            hhk[currentHatId] = nkc;

            document.removeEventListener('keydown', onKeydown);
            document.addEventListener('keydown', onKeydown);

            function onKeydown(e) {
                if (e.keyCode === nkc && shhk()) {
                    storeEquip(currentHatId);
                }
            }
        })(hatId);
    }
}

    document.addEventListener('keydown', function (e) {
        if (e.keyCode === 76 && !iso() && !iaia()) {
            toggleMacros();
        } else if (e.keyCode === 27 && shhk() && storeMenu.style.display !== 'block') {
            toggleMenu();
        }
    });

    var headerText = document.querySelector('h1').textContent;
    var macrosEnabled = headerText.includes('Macros On');

    if (macrosEnabled) {
        toggleMacros();
    }
})();
(() => {
  // Constants and Variables
  let ws = null;
  let x = 0;
  let y = 0;
  let msgpack5 = window.msgpack;
  let scale = 45;
  let placeOffset = 5;
  let autoMill = false;
  const inventory = {
    primary: null,
    secondary: null,
    food: null,
    wall: null,
    spike: null,
    mill: null,
    mine: null,
    boostPad: null,
    trap: null,
    turret: null,
    spawnpad: null
  };
  const vars = {
    camX: 0,
    camY: 0
  };
  const myPlayer = {
    sid: null,
    x: null,
    y: null,
    dir: null,
    buildIndex: null,
    weaponIndex: null,
    weaponVariant: null,
    team: null,
    isLeader: null,
    skinIndex: null,
    tailIndex: null,
    iconIndex: null
  };

  // Helper Functions

  /**
   * Utility function to join arrays
   * @param {Array} message - The array to join
   * @returns {Array} - Joined array
   */
  const join = message => Array.isArray(message) ? [...message] : [...message];

  /**
   * Hook function for WebSocket
   * @param {object} ms - WebSocket message
   */
  const hookWS = ms => {
    let tmpData = msgpack5.decode(new Uint8Array(ms.data));
    if ((ms = undefined) || (tmpData = (ms = tmpData.length > 1 ? [tmpData[0], ...join(tmpData[1])] : tmpData)[0]) || ms) {
      if ("C" == tmpData && null === myPlayer.sid && (myPlayer.sid = ms[1]) || "a" == tmpData) {
        for (tmpData = 0; tmpData < ms[1].length / 13; tmpData++) {
          let data = ms[1].slice(13 * tmpData, 13 * (tmpData + 1));
          if (data[0] == myPlayer.sid) {
            Object.assign(myPlayer, {
              x: data[1],
              y: data[2],
              dir: data[3],
              buildIndex: data[4],
              weaponIndex: data[5],
              weaponVariant: data[6],
              team: data[7],
              isLeader: data[8],
              skinIndex: data[9],
              tailIndex: data[10],
              iconIndex: data[11]
            });
          }
        }
      }
      vars.camX || (vars.camX = myPlayer.x);
      vars.camY || (vars.camY = myPlayer.y);
      if (y !== myPlayer.y || x !== myPlayer.x) {
        // AUTO MILL CODE:
        if (Math.atan2(y - myPlayer.y, x - myPlayer.x) < (scale + placeOffset) * 2) {
          if (autoMill) {
            let angle = Math.atan2(y - myPlayer.y, x - myPlayer.x);
            place(inventory.mill, angle + Math.PI / 2.5);
            place(inventory.mill, angle);
            place(inventory.mill, angle - Math.PI / 2.5);
          }
          x = myPlayer.x;
          y = myPlayer.y;
        }
      }
      cacheItems();
    }
  };
  /**
   * Function to emit a packet
   * @param {string} event - Event type
   * @param {*} a - Parameter a
   * @param {*} b - Parameter b
   * @param {*} c - Parameter c
   * @param {*} m - Parameter m
   * @param {*} r - Parameter r
   */
  const emit = (event, a, b, c, m, r) => ws.send(Uint8Array.from([...msgpack5.encode([event, [a, b, c, m, r]])]));

  /**
   * Function to place an item
   * @param {number} event - Event type
   * @param {number} l - Angle
   */
  const place = (event, l) => {
    emit("G", event, false);
    emit("d", 1, l);
    emit("d", 0, l);
    emit("G", myPlayer.weaponIndex, true);
  };

  /**
   * Function to send a chat message
   * @param {string} event - The chat message
   */
  const chat = event => emit("6", event);

  /**
   * Cache the player's items
   */
  const cacheItems = () => {
    for (let c = 0; c < 9; c++) {
      var _document$getElementB;
      if (((_document$getElementB = document.getElementById(`actionBarItem${c}`)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.offsetParent) !== null) {
        inventory.primary = c;
      }
    }
    for (let s = 9; s < 16; s++) {
      var _document$getElementB2;
      if (((_document$getElementB2 = document.getElementById(`actionBarItem${s}`)) === null || _document$getElementB2 === void 0 ? void 0 : _document$getElementB2.offsetParent) !== null) {
        inventory.secondary = s;
      }
    }
    for (let P = 16; P < 19; P++) {
      var _document$getElementB3;
      if (((_document$getElementB3 = document.getElementById(`actionBarItem${P}`)) === null || _document$getElementB3 === void 0 ? void 0 : _document$getElementB3.offsetParent) !== null) {
        inventory.food = P - 16;
      }
    }
    for (let f = 19; f < 22; f++) {
      var _document$getElementB4;
      if (((_document$getElementB4 = document.getElementById(`actionBarItem${f}`)) === null || _document$getElementB4 === void 0 ? void 0 : _document$getElementB4.offsetParent) !== null) {
        inventory.wall = f - 16;
      }
    }
    for (let _ = 22; _ < 26; _++) {
      var _document$getElementB5;
      if (((_document$getElementB5 = document.getElementById(`actionBarItem${_}`)) === null || _document$getElementB5 === void 0 ? void 0 : _document$getElementB5.offsetParent) !== null) {
        inventory.spike = _ - 16;
      }
    }
    for (let u = 26; u < 29; u++) {
      var _document$getElementB6;
      if (((_document$getElementB6 = document.getElementById(`actionBarItem${u}`)) === null || _document$getElementB6 === void 0 ? void 0 : _document$getElementB6.offsetParent) !== null) {
        inventory.mill = u - 16;
      }
    }
    for (let I = 29; I < 31; I++) {
      var _document$getElementB7;
      if (((_document$getElementB7 = document.getElementById(`actionBarItem${I}`)) === null || _document$getElementB7 === void 0 ? void 0 : _document$getElementB7.offsetParent) !== null) {
        inventory.mine = I - 16;
      }
    }
    for (let p = 31; p < 33; p++) {
      var _document$getElementB8;
      if (((_document$getElementB8 = document.getElementById(`actionBarItem${p}`)) === null || _document$getElementB8 === void 0 ? void 0 : _document$getElementB8.offsetParent) !== null) {
        inventory.boostPad = p - 16;
      }
    }
    for (let x = 31; x < 33; x++) {
      var _document$getElementB9;
      if (((_document$getElementB9 = document.getElementById(`actionBarItem${x}`)) === null || _document$getElementB9 === void 0 ? void 0 : _document$getElementB9.offsetParent) !== null) {
        inventory.trap = x - 16;
      }
    }
    for (let g = 29; g < 31; g++) {
      var _document$getElementB10;
      if (((_document$getElementB10 = document.getElementById(`actionBarItem${g}`)) === null || _document$getElementB10 === void 0 ? void 0 : _document$getElementB10.offsetParent) !== null && g !== 36) {
        inventory.turret = g - 16;
      }
    }
    inventory.spawnpad = 36;
  };

  // Override WebSocket's send method
  document.msgpack = window.msgpack;
  WebSocket.prototype.oldSend = WebSocket.prototype.send;
  WebSocket.prototype.send = function (event) {
    ws || (document.ws = this, ws = this, document.ws.addEventListener("message", hookWS));
    this.oldSend(event);
  };

  // Event listener for [M] key to toggle autoMill
  document.addEventListener("keydown", event => {
    if (event.keyCode === 77 && document.activeElement.id.toLowerCase() !== 'chatbox') {
      autoMill = !autoMill;
      chat(`Auto Triple Mill : ${autoMill ? 'enabled' : 'disabled'}`);
    }
  });
})();
(function () {
  // Variables
  let AUTO_HEAL_SPEED = 120;
  let AUTO_HEAL_ENABLED = true;
  let items = [];
  let weapons = [];
  let inGame = false;
  let tmpHealth = 100;
  let sTime = 0;
  let sCount = 0;
  let msgpack = window.msgpack;
  let ws;
  // WebSocket setup
  ws = new Promise(function (resolve) {
    let {
      send
    } = WebSocket.prototype;
    WebSocket.prototype.send = function (...x) {
      send.apply(this, x);
      this.send = send;
      this.io = function (...datas) {
        const [packet, ...data] = datas;
        this.send(new Uint8Array(Array.from(msgpack.encode([packet, data]))));
      };
      this.addEventListener("message", function (e) {
        const [packet, data] = msgpack.decode(new Uint8Array(e.data));
        let sid = data[0];
        let health = data[1];
        let inventory = {
          food: items[0],
          walls: items[1],
          spikes: items[2],
          mill: items[3],
          mine: items[4],
          trap: items[5],
          booster: items[6],
          turret: items[7],
          watchtower: items[8],
          buff: items[9],
          spawn: items[10],
          sapling: items[11],
          blocker: items[12],
          teleporter: items[13]
        };
        let addEventListener = {
          setupGame: "C",
          updateHealth: "O",
          killPlayer: "P",
          updateItems: "V"
        };
        switch (packet) {
          case addEventListener.setupGame:
            inGame = true;
            items = [0, 3, 6, 10];
            weapons = [0];
            break;
          case addEventListener.updateHealth:
            if (sid) {
              const AUTOHEAL_SPEED = parseInt(document.getElementById('speedInput').value);
              if (inGame && AUTO_HEAL_ENABLED) {
                if (health < 100 && health > 0) {
                  setTimeout(function () {
                    place(inventory.food);
                    place(inventory.food);
                    place(inventory.food);
                    place(inventory.food);
                  }, AUTOHEAL_SPEED);
                }
              }
              if (tmpHealth - health < 0) {
                if (sTime) {
                  let timeHit = Date.now() - sTime;
                  sTime = 0;
                  sCount = timeHit <= 120 ? sCount + 1 : Math.max(0, sCount - 2);
                }
              } else {
                sTime = Date.now();
              }
              tmpHealth = health;
            }
            break;
          case addEventListener.killPlayer:
            inGame = false;
            break;
          case addEventListener.updateItems:
            if (sid) {
              if (health) {
                weapons = sid;
              } else {
                items = sid;
              }
            }
            break;
        }
      });
      resolve(this);
    };
  });

  // Functions
  const sendPacket = function (...datas) {
    const [type, ...data] = datas;
    var binary = msgpack.encode([type, data]);
    ws.then(function (wsInstance) {
      wsInstance.send(new Uint8Array(Array.from(binary)));
    });
  };

  // PLACE
  const place = function (id, ang) {
    if (inGame) {
      sendPacket("G", id, false);
      hit(ang);
      selectWeapon();
    }
  };

  // SELECT WEAPON
  const selectWeapon = function () {
    if (inGame) {
      sendPacket("G", weapons[0], true);
    }
  };

  // HIT
  const hit = function (id, ang) {
    if (inGame) {
      sendPacket("d", 1, ang);
      sendPacket("d", 0, ang);
    }
  };
  // CHAT
  const chat = function (e) {
    if (inGame) {
      sendPacket("6", e);
    }
  };

  // SCRIPT MENU:
  let modMenus = document.createElement("div");
  modMenus.id = "modMenus";
  document.body.append(modMenus);
  modMenus.style.display = "block";
  modMenus.style.padding = "10px";
  modMenus.style.backgroundColor = "rgba(0, 0, 0, 0.25)";
  modMenus.style.borderRadius = "4px";
  modMenus.style.position = "absolute";
  modMenus.style.left = "20px";
  modMenus.style.top = "20px";
  modMenus.style.minWidth = "300px";
  modMenus.style.maxWidth = "290px";
  modMenus.style.minHeight = "400";
  modMenus.style.maxHeight = "700";
  function updateInnerHTML() {
    modMenus.innerHTML = `<h2 style="text-align: center; font-size: 28px;">Auto Heal <span ></span></h2>
    <hr>
    <label for="speedInput">Speed</label>
    <input type="number" id="speedInput" oninput="this.value = this.value.slice(0, 4)" value=${AUTO_HEAL_SPEED}>
    <span id="speedValue"></span>
    <hr>
    <input type="checkbox" checked id="AUTO_HEAL">
    Auto Heal
    <br>`;
  }
  updateInnerHTML();
  // THIS IS HOW SCRIPT MENU IS ON/OFF:
  function getEl(id) {
    return document.getElementById(id);
  }

  // PART OF SCRIPT MENU:
  getEl("AUTO_HEAL").onclick = function () {
    AUTO_HEAL_ENABLED = !AUTO_HEAL_ENABLED;
    chat(`Auto Heal : ${AUTO_HEAL_ENABLED ? 'enabled' : 'disabled'}`);
  };
  getEl("speedInput").oninput = function () {
    chat(`Auto Heal Speed : ${getEl("speedInput").value}`);
  };
})();

function Xh() {
    Un.onclick = C.checkTrusted(function() {
        ms("Connecting..."),
            cs() ? bs() : Oh()
    }),
        C.hookTouchEvents(Un),
        kn && (kn.onclick = C.checkTrusted(function() {
        Lo("https://krunker.io/?play=SquidGame_KB")
    }),
               C.hookTouchEvents(kn)),
        vn && (vn.onclick = C.checkTrusted(function() {
        setTimeout(function() {
            Rh()
        }, 10)
    }),
               C.hookTouchEvents(vn)),
        Ln.onclick = C.checkTrusted(function() {
        pf()
    }),
        C.hookTouchEvents(Ln),
        hr.onclick = C.checkTrusted(function() {
        nf()
    }),
        C.hookTouchEvents(hr),
        fr.onclick = C.checkTrusted(function() {
        hf()
    }),
        C.hookTouchEvents(fr),
        ur.onclick = C.checkTrusted(function() {
        Mo()
    }),
        C.hookTouchEvents(ur),
        me.onclick = C.checkTrusted(function() {
        Ao()
    }),
        C.hookTouchEvents(me)
    vg(Bb, "AutoMacroMod");
}