Classified

Impossible to outplace

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Classified
// @namespace    none
// @version      1
// @description  Impossible to outplace
// @author       𝓛._.𝓻𝓮 (Watersheep)
// @match        *://moomoo.io/*
// @match        *://sandbox.moomoo.io/*
// @icon         https://i.pinimg.com/originals/f8/7a/d3/f87ad32360e70eaf0b8f7ae9b5ed2b67.gif
// @require      http://code.jquery.com/jquery-3.3.1.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/msgpack.min.js
// @license      WTFPL
// ==/UserScript==

let config = window.config;

function normal() {
    hat(normalHat)
    acc(normalAcc)
}

function aim(x, y) {
    var cvs = document.getElementById("gameCanvas")
    cvs.dispatchEvent(new MouseEvent("mousemove", {
        clientX: x,
        clientY: y
    }))
}

let coreURL = new URL(window.location.href)
window.sessionStorage.force = coreURL.searchParams.get("fc")

if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null") {
    document.getElementsByClassName("menuHeader")[0].innerHTML = `Servers <span style="color: red">Force (${window.sessionStorage.force})</span>`
}

class ForceSocket extends WebSocket {
    constructor(...args) {
        if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null") {
            let server = window.sessionStorage.force
            let sip = ""
            for (let gameServer of window.vultr.servers) {
                if (`${gameServer.region}:${gameServer.index}:0` == server) {
                    sip = gameServer.ip
                }
            }
            args[0] = `wss://ip_${sip}.moomoo.io:8008/?gameIndex=0`
            delete window.sessionStorage.force
        }
        super(...args)
    }
}

setInterval(() => {
    if(autoaim == true) {
        doNewSend(["2", [nearestEnemyAngle]]);
    }
}, 0);
setInterval(() => {
    if(spin) {
        aim(Math.random() * window.innerWidth, Math.random() * window.innerHeight);
    }
}, 0);

var spin = false;
var nearestEnemy;
var nearestEnemyAngle;
var autoaim = false;
var isEnemyNear;
var instaSpeed = 0;
var primary;
var secondary;
var foodType;
var wallType;
var spikeType;
var millType;
var mineType;
var trapType;
var boostType;
var turretType;
var spawnpadType;
var tick = 0;
var oldHat;
var oldAcc;
var enemiesNear;
var normalHat;
var normalAcc;
var ws;
var msgpack5 = msgpack;
var boostDir;
let myPlayer = {
    id: null,
    x: null,
    y: null,
    oldX: null,
    oldY: null,
    dt: 0,
    dir: null,
    object: null,
    weapon: null,
    clan: null,
    isLeader: null,
    hat: null,
    accessory: null,
    isSkull: null,
    sTime: 0,
    sCount: 0,
    health: 100
};

let healSpeed = 0;
var messagecrash = 0;
var clanToggle = 0;
var clanCrash = 0;
var clanfake = 0;
var messagefake = 0;
let healToggle = 0;
let hatToggle = 0;
let SoreHolder = document.getElementById('storeHolder');
let width;
let height;
let mouseX;
let mouseY;
let heal = false;
let onetick = false;
let oneticking = false;
let lessmove = undefined;
let instaing = false;
let mySkins = {};
let myTails = {};
let camX = null;
let camY = null;
let myXY = {
    x: undefined,
    y: undefined
}

document.msgpack = msgpack;

function n() {
    this.buffer = new Uint8Array([0]);
    this.buffer.__proto__ = new Uint8Array;
    this.type = 0;
};

let packet = 0;
let firstPacket = false;
WebSocket.prototype.oldSend = WebSocket.prototype.send;
WebSocket.prototype.send = function (m) {
    if (!ws) {
        document.ws = this;
        ws = this;
        socketFound(this);
    }
    if (ws == this) {
        if (!firstPacket) {
            firstPacket = true;
            setTimeout(() => {
                packet = 0;
                firstPacket = false;
            }, 1000);
        }
        packet++;
    }
    this.oldSend(m);
};

let delta;
let now;
let lastUpdate = Date.now();

let types = {
    util: {
        getDist: function (tmp1, tmp2, type1, type2) {
            let tmpXY1 = {
                x: type1 == 0 ? tmp1.x : type1 == 1 ? tmp1.x1 : type1 == 2 && tmp1.x2,
                y: type1 == 0 ? tmp1.y : type1 == 1 ? tmp1.y1 : type1 == 2 && tmp1.y2
            }
            let tmpXY2 = {
                x: type2 == 0 ? tmp2.x : type2 == 1 ? tmp2.x1 : type2 == 2 && tmp2.x2,
                y: type2 == 0 ? tmp2.y : type2 == 1 ? tmp2.y1 : type2 == 2 && tmp2.y2
            }
            return Math.sqrt((tmpXY2.x -= tmpXY1.x) * tmpXY2.x + (tmpXY2.y -= tmpXY1.y) * tmpXY2.y);
        },
        getDirect: function (tmp1, tmp2, type1, type2) {
            let tmpXY1 = {
                x: type1 == 0 ? tmp1.x : type1 == 1 ? tmp1.x1 : type1 == 2 && tmp1.x2,
                y: type1 == 0 ? tmp1.y : type1 == 1 ? tmp1.y1 : type1 == 2 && tmp1.y2
            }
            let tmpXY2 = {
                x: type2 == 0 ? tmp2.x : type2 == 1 ? tmp2.x1 : type2 == 2 && tmp2.x2,
                y: type2 == 0 ? tmp2.y : type2 == 1 ? tmp2.y1 : type2 == 2 && tmp2.y2
            }
            return Math.atan2(tmpXY1.y - tmpXY2.y, tmpXY1.x - tmpXY2.x);
        },
    }
}

let gameCanvas = document.getElementById("gameCanvas");
let mainContext = gameCanvas.getContext("2d");
let myName = "unknown";

function shameCounter() {
    if (myPlayer.id) {
        let tmpXY = {
            x: camX,
            y: camY
        };
        let tmpDist = types.util.getDist(tmpXY, myXY, 0, 0);
        let tmpDir = types.util.getDirect(myXY, tmpXY, 0, 0);
        let camSpd = Math.min(tmpDist * 0.01 * delta, tmpDist);
        if (tmpDist > 0.05) {
            camX += camSpd * Math.cos(tmpDir);
            camY += camSpd * Math.sin(tmpDir);
        } else {
            camX = myXY.x;
            camY = myXY.y;
        }
        let rate = 170;
        myPlayer.dt += delta;
        let tmpRate = Math.min(1.7, myPlayer.dt / rate);
        let tmpDiff = (myPlayer.x - myPlayer.oldX);
        myXY.x = myPlayer.oldX + (tmpDiff * tmpRate);
        tmpDiff = (myPlayer.y - myPlayer.oldY);
        myXY.y = myPlayer.oldY + (tmpDiff * tmpRate);
        let xOffset = camX - (1920 / 2);
        let yOffset = camY - (1080 / 2);
        mainContext.font = "30px Hammersmith One";
        mainContext.fillStyle = "#fff";
        mainContext.textBaseline = "middle";
        mainContext.textAlign = "center";
        mainContext.lineWidth = 8;
        mainContext.lineJoin = "round";
        var tmpText = (myPlayer.clan ? "[" + myPlayer.clan + "] " : "") + (myName || "");
        var tmpS = 60;
        var tmpX = myXY.x - xOffset - (tmpS / 2) + (mainContext.measureText(tmpText).width / 2) + 35 + (myPlayer.isSkull == 1 ? 90 : 30);
        mainContext.strokeText(myPlayer.sCount, tmpX, (myXY.y - yOffset - 35) - 34);
        mainContext.fillText(myPlayer.sCount, tmpX, (myXY.y - yOffset - 35) - 34);
    } else {
        camX = 14400 / 2;
        camY = 14400 / 2;
    }
}

let mStatus = document.createElement("div");
mStatus.id = "status";
mStatus.style.position = "absolute";
mStatus.style.color = "#fff";
mStatus.style.font = "15px Hammersmith One";
mStatus.style.top = "40px";
mStatus.style.left = "40px";
mStatus.style.display = "block";
mStatus.textAlign = "right";
document.body.appendChild(mStatus);

function doUpdate() {
    now = Date.now();
    delta = now - lastUpdate;
    lastUpdate = now;
    shameCounter();
    window.requestAnimationFrame(doUpdate);
    mStatus.innerHTML = `
    Packet: ${packet}</br>
    `;
}
doUpdate();


function socketFound(socket) {
    socket.addEventListener('message', function (message) {
        handleMessage(message);
    });
}

function dist(a, b) {
    return Math.hypot(a[2] - b.y, a[1] - b.x);
}

function handleMessage(m) {
    let temp = msgpack5.decode(new Uint8Array(m.data));
    let data;
    if (temp.length > 1) {
        data = [temp[0], ...temp[1]];
        if (data[1] instanceof Array) {
            data = data;
        }
    } else {
        data = temp;
    }
    let item = data[0];
    if (!data) {
        return
    };

    if (item === "io-init") {
        let cvs = document.getElementById("gameCanvas");
        width = cvs.clientWidth;
        height = cvs.clientHeight;
        $(window).resize(function () {
            width = cvs.clientWidth;
            height = cvs.clientHeight;
        });
        cvs.addEventListener("mousemove", e => {
            mouseX = e.clientX;
            mouseY = e.clientY;
        });
    }

    if (item == "A" && myPlayer.id == null) {
        myPlayer.id = data[1];
    }

    if (item == "B") {
        if (data[2]) {
            myName = data[1][2];
            myPlayer.health = 100;
            myPlayer.sCount = 0;
            myPlayer.sTime = 0;
            update();
        }
    }
if(data == "6") {
    console.warn(data);
}
    if(data == "K") {
        console.error(data);
        let sid = data[0]
        let findObj = findObjectBySid(sid);
        try {
            let objAim = UTILS.getDirect(findObj, tmpXY(player));
            let objDst = UTILS.getDist(findObj, tmpXY(player));
            let tmpCount = -1;
            for (let i = -Math.PI/(Math.PI); i <= Math.PI/(Math.PI); i+= Math.PI/(Math.PI)) {
                tmpCount++
                if (tmpCount == 1 && objDst <= 200) {
                    place(spikeType, objAim);
                } else {
                    checkPlace(2, objAim+i);
                }
            }
        } catch (e) {
            console.error(e);
        }
    }


    if (item == "O" && data[1] == myPlayer.id) {
        if (75 < data[2] < 100) {
            setTimeout(() => {
                place(foodType);
            }, 90);
        }
    }

    if (item == "O" && data[1] == myPlayer.id) {
        if (data[2] < 75) {
            macros.q = true
            place(foodType);
            place(foodType);
        } else {
            macros.q = false
        }
    }

    function findPlayerBySID(sid) {
    for (var i = 0; i < players.length; ++i) {
        if (players[i].sid == sid) {
            return players[i];
        }
    } return null;
}
console.log(data);
    // UPDATE HEALTH:
    if (item == "O" && data[1] == myPlayer.id) {
        let tmpObj = findPlayerBySID(sid);
        if (tmpObj) {
                let tmpHealth = tmpObj.health;
                tmpObj.health = value;
                if (tmpHealth < tmpObj.health) {
                    if (tmpObj.hitTime) {
                        let timeSinceHit = Date.now() - tmpObj.hitTime;
                        tmpObj.hitTime = 0;
                        let tmpShame = tmpObj.shameCount;
                        if (timeSinceHit <= 120) {
                            tmpObj.shameCount = Math.min(8, tmpObj.shameCount + 1);
                        } else {
                            tmpObj.shameCount = Math.max(0, tmpObj.shameCount - 2);
                        }
                        if (tmpObj !== player) {
                            if (tmpObj.dangerShame < tmpObj.shameCount) {
                                tmpObj.dangerShame = tmpObj.shameCount;
                            }
                        }
                    }
                } else if (tmpHealth > tmpObj.health) {
                    let a = 0;
                    let antiInsta = false;
                    let checkAnti;
                    tmpObj.hitTime = Date.now();
                    if (tmpObj === player) {
                        if (!getEl("tickbase").checked) {
                            let pingHeal = function() {
                                return Math.max(0, 250 - window.pingTime);
                            };
                            if (true) {
                                if (near.length) {
                                    if(tmpObj != player) {
                                        if (
                                            (tmpObj.reloads[tmpObj.primaryIndex] != 0 && tmpObj.skinIndex == 7) ||
                                            (tmpObj.reloads[tmpObj.secondaryIndex] != 0 && tmpObj.skinIndex == 53)
                                        ) {
                                            checkAnti = true;
                                        }
                                        if (checkAnti) {
                                            io.send("ch", "anti insta test");
                                            antiInsta = true;
                                        }
                                        if(antiInsta) {
                                            console.log("anti instad");
                                            io.send("ch", "anti insta test");
                                            if(value>40){
                                                place(0, getAttackDir());
                                            }else{
                                                place(0, getAttackDir());
                                                place(0, getAttackDir());
                                            }
                                        }
                                        console.warn(player.reloads[player.primaryIndex]);
                                        if(Math.abs(value)>25) {
                                            if(tmpObj.reloads[tmpObj.primaryIndex] != 0) a=0;
                                            if(tmpObj.reloads[tmpObj.secondaryIndex] != 0) a=1;
                                            if(a=0) {
                                                io.send("ch", "beta anti insta");

                                                place(0, getAttackDir());
                                                place(0, getAttackDir());
                                            } else if (a=1) {
                                                //io.send("ch", "test");

                                                setTimeout(() => {
                                                    place(0, getAttackDir());
                                                }, 86);
                                                setTimeout(() => {
                                                    place(0, getAttackDir());
                                                }, 86);
                                            }
                                        } else {
                                            if(tmpObj.reloads[tmpObj.primaryIndex] != 0) a=0;
                                            if(tmpObj.reloads[tmpObj.secondaryIndex] != 0) a=1;
                                            if(a=0) {
                                                //io.send("ch", "beta anti insta");

                                                place(0, getAttackDir());
                                                place(0, getAttackDir());
                                            } else if (a=1) {
                                                //io.send("ch", "test");

                                                setTimeout(() => {
                                                    place(0, getAttackDir());
                                                }, 86);
                                                setTimeout(() => {
                                                    place(0, getAttackDir());
                                                }, 86);
                                            }
                                        }
                                    }
                                    value >= 20
                                    if (tmpObj.skinIndex = 53 && tmpObj.isAI != true) {
                                        if(tmpObj.reloads[tmpObj.primaryIndex] != 0) a=0;
                                        if(tmpObj.reloads[tmpObj.secondaryIndex] != 0) a=1;
                                        if(a=0) {
                                            //io.send("ch", "beta anti insta");

                                            place(0, getAttackDir());
                                            place(0, getAttackDir());
                                        } else if (a=1) {
                                            io.send("ch", "test");

                                            setTimeout(() => {
                                                place(0, getAttackDir());
                                            }, 86);
                                            setTimeout(() => {
                                                place(0, getAttackDir());
                                            }, 86);
                                        }
                                    } else {
                                        if(tmpObj.reloads[tmpObj.primaryIndex] != 0) a=0;
                                        if(tmpObj.reloads[tmpObj.secondaryIndex] != 0) a=1;
                                        if(a=0) {
                                            //io.send("ch", "beta anti insta");

                                            place(0, getAttackDir());
                                            place(0, getAttackDir());
                                        } else if (a=1) {
                                            io.send("ch", "test");

                                            setTimeout(() => {
                                                place(0, getAttackDir());
                                            }, 86);
                                            setTimeout(() => {
                                                place(0, getAttackDir());
                                            }, 86);
                                        }
                                    }
                                    player.skinIndex == 11 && (value >= 30);
                                    buyEquip(11, 0);
                                } else {
                                    if(tmpObj.reloads[tmpObj.primaryIndex] != 0) a=0;
                                    if(tmpObj.reloads[tmpObj.secondaryIndex] != 0) a=1;
                                    if(a=0) {
                                        //io.send("ch", "beta anti insta");
                                        place(0, getAttackDir());
                                        place(0, getAttackDir());
                                    } else if (a=1) {
                                        if (
                                            (tmpObj.reloads[tmpObj.primaryIndex] != 0 && tmpObj.skinIndex == 7) ||
                                            (tmpObj.reloads[tmpObj.secondaryIndex] != 0 && tmpObj.skinIndex == 53)
                                        ) {
                                            checkAnti = true;
                                        }
                                        if (checkAnti) {
                                            io.send("ch", "anti insta test");
                                            antiInsta = true;
                                        }
                                        if(antiInsta) {
                                            console.log("anti instad");
                                            io.send("ch", "anti insta test");
                                            if(value>40){
                                                place(0, getAttackDir());
                                            }else{
                                                place(0, getAttackDir());
                                                place(0, getAttackDir());
                                            }
                                        }
                                        //io.send("ch", "test");
                                        setTimeout(() => {
                                            place(0, getAttackDir());
                                        }, 86);
                                        setTimeout(() => {
                                            place(0, getAttackDir());
                                        }, 86);
                                    }
                                }
                            }
                        } else {

                            let damage = tmpHealth - tmpObj.health;
                            let pingHeal = function() {
                                return Math.max(0, 140 - window.pingTime);
                            };
                            let normal = 50;
                            if (near.nears.length) {
                                for (let i = 0; i < near.nears.length; i++) {
                                    let nearEnemy = near.enemy;
                                    if (damage >= (tmpObj.skinIndex == 6 ? 30 : 10) && ((nearEnemy.secondaryIndex === undefined || nearEnemy.primaryIndex === undefined) ? true : (nearEnemy.reloads[nearEnemy.primaryIndex] === 0 && nearEnemy.reloads[nearEnemy.secondaryIndex] === 0))) {
                                        if (tmpObj.shameCount < 3) {
                                            for (let i = 0; i < applCxC(damage); i++) {
                                                setTimeout(() => {
                                                    if(Math.abs(value)>40) {
                                                        place(0, getAttackDir());
                                                        place(0, getAttackDir());
                                                    } else {
                                                        place(0, getAttackDir());
                                                    }
                                                }, config.tickRate / 2);
                                            }
                                        } else {
                                            for (let i = 0; i < applCxC(damage); i++) {
                                                setTimeout(() => {
                                                    if(Math.abs(value)>40) {
                                                        place(0, getAttackDir());
                                                        place(0, getAttackDir());
                                                    } else {
                                                        place(0, getAttackDir());
                                                    }
                                                }, config.tickRate);
                                            }
                                        }
                                    } else {
                                        for (let i = 0; i < applCxC(damage); i++) {
                                            setTimeout(() => {
                                                if(Math.abs(value)>40) {
                                                    place(0, getAttackDir());
                                                    place(0, getAttackDir());
                                                } else {
                                                    place(0, getAttackDir());
                                                }
                                            }, config.tickRate * 1.5);
                                        }
                                    }
                                }
                            } else {
                                for (let i = 0; i < applCxC(damage); i++) {
                                    setTimeout(() => {
                                        if(Math.abs(value)>40) {
                                            place(0, getAttackDir());
                                            place(0, getAttackDir());
                                        } else {
                                            place(0, getAttackDir());
                                        }
                                    }, config.tickRate / 2);
                                }
                            }
                        }
                    } else {
                        if (tmpObj === near.enemy) {
                            let damage = tmpHealth - tmpObj.health;
                            if (damage > 5) {
                                if (autos.insta.count > 0) {
                                    autos.insta.count--;
                                    setTimeout(() => {
                                        if (autos.insta.count <= 0) {
                                            autos.insta.todo = true;
                                        }
                                    }, config.tickRate / 2);
                                }
                            }
                        }
                    }
                }
            }
        }

    if (item == "a") {
        enemiesNear = [];
        for (let i = 0; i < data[1].length / 13; i++) {
            let playerInfo = data[1].slice(13 * i, 13 * i + 13);
            if (playerInfo[0] == myPlayer.id) {
                myPlayer.oldX = myXY.x;
                myPlayer.oldY = myXY.y;
                myPlayer.dt = 0;
                myPlayer.x = playerInfo[1];
                myPlayer.y = playerInfo[2];
                myPlayer.dir = playerInfo[3];
                myPlayer.object = playerInfo[4];
                myPlayer.weapon = playerInfo[5];
                myPlayer.clan = playerInfo[7];
                myPlayer.isLeader = playerInfo[8];
                myPlayer.hat = playerInfo[9];
                myPlayer.accessory = playerInfo[10];
                myPlayer.isSkull = playerInfo[11];
                if (myPlayer.hat == 45) {
                    myPlayer.sCount = 0;
                }
            } else if (playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
                enemiesNear.push(playerInfo);
            }
        }
        isEnemyNear = false;
        if (enemiesNear) {
            nearestEnemy = enemiesNear.sort((a, b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
        }
        if (nearestEnemy) {
            nearestEnemyAngle = Math.atan2(nearestEnemy[2] - myPlayer.y, nearestEnemy[1] - myPlayer.x);
            if (Math.sqrt(Math.pow((myPlayer.y - nearestEnemy[2]), 2) + Math.pow((myPlayer.x - nearestEnemy[1]), 2)) < 300) {
                isEnemyNear = true;
                if (autoaim == false && oneticking == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
                    normalHat = 12;
                    if (primary != 8) {
                        normalAcc = 21
                    }
                };
            }
        }
        if (onetick && enemiesNear.length) {
            let distance = dist(nearestEnemy, myPlayer);
            let biomehat = function () {
                if (myPlayer.accessory != 11) {
                    acc(11);
                }
                if (myPlayer.y < 2400) {
                    if (myPlayer.hat != 15) {
                        hat(15);
                    }
                } else if (myPlayer.y > 6850 && myPlayer.y < 7550) {
                    if (myPlayer.hat != 31) {
                        hat(31);
                    }
                } else {
                    if (myPlayer.hat != 12) {
                        hat(12);
                    }
                }
            };
            oneticking = true;
            if (distance > 231 && distance < 234) {
                if (lessmove != undefined) {
                    lessmove = undefined;
                    doNewSend(["33", [lessmove]]);
                }
                biomehat();
                if (nearestEnemy[9] != 22 && nearestEnemy[9] != 6) {
                    sendTick();
                }
            } else {
                if (distance <= 231) {
                    if (lessmove != nearestEnemyAngle + Math.PI) {
                        lessmove = nearestEnemyAngle + Math.PI;
                        doNewSend(["33", [lessmove]]);
                    }
                } else if (distance >= 234) {
                    if (lessmove != nearestEnemyAngle) {
                        lessmove = nearestEnemyAngle;
                        doNewSend(["33", [lessmove]]);
                    }
                }

                if (distance > 215 && distance < 250) {
                    if (myPlayer.hat != 40) {
                        hat(40);
                        acc(0);
                    }
                } else {
                    if (myPlayer.hat != 12) {
                        hat(12);
                    }
                }
            }
        } else {
            oneticking = false;
        }
        if (isEnemyNear == false && autoaim == false) {
            normalAcc = 11;
            if (myPlayer.y < 2400) {
                normalHat = 15;
            } else if (myPlayer.y > 6850 && myPlayer.y < 7550) {
                normalHat = 31;
            } else {
                normalHat = 12;
            }
        }
        if (!nearestEnemy) {
            nearestEnemyAngle = myPlayer.dir;
        }
        if (doInsta) {
            doInsta = false;
            if (!instaing) {
                doNewSend(["13c", [0, 0, 1]]);
                doNewSend(["5", [primary, true]]);
                autoaim = true
                doNewSend(["7", [1]]);
                if (!mySkins[7]) {
                    doNewSend(["13c", [1, 7, 0]]);
                }
                if (myPlayer.hat != 7) {
                    doNewSend(["13c", [0, 7, 0]]);
                }
                if (myPlayer.accessory != 0) {
                    doNewSend(["13c", [0, 0, 1]]);
                }
                setTimeout(() => {
                    if (myPlayer.accessory != 0) {
                        doNewSend(["13c", [0, 0, 1]]);
                    }
                    if (!mySkins[53]) {
                        doNewSend(["13c", [1, 53, 0]]);
                    }
                    if (myPlayer.hat != 53) {
                        doNewSend(["13c", [0, 53, 0]]);
                    }
                    doNewSend(["5", [secondary, true]]);
                    autoaim = false
                    setTimeout(() => {
                        doNewSend(["7", [1]]);
                        doNewSend(["5", [primary, true]]);
                    }, 82);
                }, 82);
            }
        }
    }

    if (item == "h" && data[1] == myPlayer.id) {
        let dmg = myPlayer.health - data[2];
        if ((myPlayer.health - data[2]) < 0) {
            if (myPlayer.sTime) {
                let timeHit = Date.now() - myPlayer.sTime;
                myPlayer.sTime = 0;
                if (timeHit <= 120) {
                    myPlayer.sCount++;
                } else {
                    myPlayer.sCount = Math.max(0, myPlayer.sCount - 2);
                }
            }
        } else {
            myPlayer.sTime = Date.now();
        }
        myPlayer.health = data[2];
    }
    if (item == "V") {
        update();
    }
    if (item == "us") {
        if (data[3]) {
            if (!data[1])
                myTails[data[2]] = 1;
            else
                myPlayer.accessory = data[2];
        } else {
            if (!data[1])
                mySkins[data[2]] = 1;
            else
                myPlayer.hat = data[2];
        }
    }
}

let macros = {
    q: false,
    f: false,
    v: false,
    n: false,
    g: false,
    '9': false
}

setInterval(() => {
    macros.v && place(spikeType);
}, 35);

setInterval(() => {
    macros.f && place(boostType);
    macros.n && place(millType);
    macros.g && place(turretType);
    macros.q && place(foodType);
    macros['9'] && place(spawnpadType);
}, 86);

function doNewSend(sender) {
    ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
}

function acc(id) {
    doNewSend(["13c", [0, id, 1]]);
}

function hat(id) {
    doNewSend(["13c", [0, id, 0]]);
}

function place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
    doNewSend(["5", [id, null]]);
    doNewSend(["c", [1, angle]]);
    doNewSend(["5", [myPlayer.weapon, true]]);
}

function plac(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
    doNewSend(["5", [id, null]]);
    doNewSend(["c", [1, angle]]);
    doNewSend(["5", [myPlayer.weapon, true]]);
}

function placing(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
    doNewSend(["5", [id, null]]);
    doNewSend(["c", [1, angle]]);
    doNewSend(["5", [myPlayer.weapon, true]]);
}

let doInsta = false;
let keyss = {};
document.addEventListener('keydown', (e) => {
    if (!keyss[e.keyCode]) {
        keyss[e.keyCode] = 1;
        if (document.activeElement.id.toLowerCase() !== "chatbox") {
            macros[e.key] = true;
            const wallPlacer = false;
            if (e.keyCode == 82) {
                doInsta = false;
            }

            if (e.keyCode == 84) {
                onetick = !onetick;
                acc(0);
            }

            if (e.keyCode == 0) {
                for (let i = 0; i < 5; i++) {
                    let angle = myPlayer.dir + toRad(i * 72);
                    place(millType, angle)
                }
            }
            if (e.keyCode == 0) {
                for (let i = 0; i < 4; i++) {
                    let angle = myPlayer.dir + toRad(i * 90);
                    place(wallType, angle)
                }
            }

            if (e.keyCode == 0) {
                for (let i = 0; i < 4; i++) {
                    let angle = myPlayer.dir + toRad(i * 90);
                    place(boostType, angle)
                }
            }

            if (e.keyCode == 89) {
                hat(20)
            }

            if (e.keyCode == 72) {
                hat(53)
            }

            if (e.keyCode == 66) {
                hat(7)
                acc(21)
            }

            if (e.keyCode == 16) {
                hat(6)
                acc(11)
            }

            if (e.keyCode == 76) {
                hat(31)
            }

            if (e.keyCode == 90) {
                hat(40)
                acc(21)
            }

            if (e.keyCode == 67) {
                if (spin == false) {
                    spin = true;
                } else {
                    spin = false;
                }
            }
        }
    }
})

document.addEventListener('keyup', (e) => {
    if (keyss[e.keyCode]) {
        keyss[e.keyCode] = 0;
        macros[e.key] = false;
        if (document.activeElement.id.toLowerCase() !== "chatbox") {

            if (e.keyCode == 123123) {
                setTimeout(() => {
                    doNewSend(["33", [null]]);
                    boostDir = null;
                }, 10);
            }
            if (e.keyCode == 123123) {
                setTimeout(() => {
                    doNewSend(["33"]);
                }, 1);
            }
            if (e.keyCode == 219) {
                setTimeout(() => {
                    doNewSend(["33"]);
                }, 1);
            }
            if (e.keyCode == 123213) {
                setTimeout(() => {
                    doNewSend(["33"]);
                }, 1);
            }
            if (e.keyCode == 1232131231231231231232131503123121213215021213) {
                setTimeout(() => {
                    doNewSend(["33", [null]]);
                    boostDir = null;
                }, 10);
            }
        }
    }
})
//yes shared by zynq
function isElementVisible(e) {
    return (e.offsetParent !== null);
}

function toRad(angle) {
    return angle * 0.01745329251;
}

function update() {
    for (let i = 0; i < 9; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            primary = i;
        }
    }

    for (let i = 9; i < 16; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            secondary = i;
        }
    }

    for (let i = 16; i < 19; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            foodType = i - 16;
        }
    }

    for (let i = 19; i < 22; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            wallType = i - 16;
        }
    }

    for (let i = 22; i < 26; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            spikeType = i - 16;
        }
    }

    for (let i = 26; i < 29; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            millType = i - 16;
        }
    }
    for (let i = 29; i < 31; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            mineType = i - 16;
        }
    }

    for (let i = 31; i < 33; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            boostType = i - 16;
        }
    }

    for (let i = 33; i < 36; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            turretType = i - 16;
        }
    }

    for (let i = 36; i < 37; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            spawnpadType = i - 16;
        }
    }

    for (let i = 37; i < 39; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))) {
            turretType = i - 16;
        }
    }
}
window.onload = function () {
    document.getElementById("diedText").innerHTML = "YOU DIED";
    document.getElementById("diedText").style.color = "#FFFFFF";
    document.getElementById("gameName").innerHTML = "MOOMOO.IO";
    document.getElementById("gameName").style.color = "#FFFFFF";
}