VN Mod v2 BY BLUCKGUY EZEZEZEZEZZZZZZZZZZZ

Revolver killer

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         VN Mod v2 BY BLUCKGUY EZEZEZEZEZZZZZZZZZZZ
// @namespace    none
// @version      3
// @description  Revolver killer
// @author       BLUCKGUY SKIDDED IT EZZZZZZZ, og mod HaxKillerMacro
// @license      MIT
// @icon         https://cdn.discordapp.com/attachments/942291806740160552/1187992941306855544/Untitled_design_23.png?ex=6598e7a5&is=658672a5&hm=3b02984cc121d8feced3ba084129cbb21f3b3be25bd8d7c9964f4f176eeeecba&
// @match        *://moomoo.io/*
// @match        *://sandbox.moomoo.io/*
// @match        *://dev.moomoo.io/*
// @require      https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
// @require      http://code.jquery.com/jquery-3.3.1.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/msgpack.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/fontfaceobserver.standalone.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Add custom CSS styles for the scrollbar
    const style = document.createElement('style');
    style.textContent = `
        /* Custom scrollbar styling */
        #musicMenuContainer::-webkit-scrollbar {
            width: 15px;
        }
        #musicMenuContainer::-webkit-scrollbar-thumb {
            background-color: black;
            border-radius: 15px;
            border: 2px solid black;
        }
        #musicMenuContainer::-webkit-scrollbar-track {
            background-color: black;
            border-radius: 10px;
        }
    `;
    document.head.appendChild(style);

    // Create the menu container
    const menuContainer = document.createElement('div');
    menuContainer.id = 'musicMenuContainer'; // Assign ID for custom scrollbar
    menuContainer.style.position = 'fixed';
    menuContainer.style.top = '50%';
    menuContainer.style.left = '50%';
    menuContainer.style.transform = 'translate(-50%, -50%)';
    menuContainer.style.backgroundColor = 'GREY';
    menuContainer.style.color = 'black';
    menuContainer.style.padding = '35px';
    menuContainer.style.borderRadius = '15px';
    menuContainer.style.display = 'none'; // Hidden by default
    menuContainer.style.zIndex = '9999'; // Ensure it's on top of other elements
    menuContainer.style.boxShadow = '0 0 15px black'; // Glowing shadow
    menuContainer.style.border = '2px solid black'; // Glowing border
    menuContainer.style.overflowY = 'auto';
    menuContainer.style.maxHeight = '80vh'; // Limit height to viewport height
    menuContainer.style.transition = 'opacity 0.5s ease-in-out, transform 1s ease-in-out'; // Transition effect
    menuContainer.style.opacity = '0'; // Start with invisible
    menuContainer.style.transform = 'translate(-50%, -60%)'; // Start from above

    // Create the menu header
    const menuHeader = document.createElement('h3');
    menuHeader.textContent = 'music menu / BluckGuY c:';
    menuHeader.style.margin = '10';
    menuHeader.style.paddingBottom = '15px';
    menuHeader.style.borderBottom = '0px solid black';
    menuContainer.appendChild(menuHeader);

    // List of music genres and their YouTube links
    const musicList = [
        { name: 'Party girl', url: 'https://youtu.be/s5AoSQeYmzU?si=90DM0X1oMbcUy4oQ' },
        { name: 'xxxtencaion 22min songs', url: 'https://youtu.be/szScXOEkkFw?si=YT_S3dFKod4BzlJ6' },
        { name: '10 hour honey pie for bluckguy', url: 'https://youtu.be/lBrp7v4PE0c?si=iuGZorhhn4st6zny' },
        { name: 'suavemente', url: 'https://youtu.be/S8i64rSAVIo?si=huqKKUNSP_eNNsP8' },
        { name: '1 hour miss if u got a bomba', url: 'https://youtu.be/AcatRdNlaoc?si=GAwLj6IDHP1ncZp-' },
        { name: 'funk', url: 'https://youtu.be/XcI5AwfjDzA?si=Zy3kLF18k7IP8zEP' },
        { name: 'z-beta', url: 'https://youtu.be/W_kxsPzH3PE?si=aueeNn5bcNdJBURY' },
        { name: 'shonci - CHEGOU 3', url: 'https://www.youtube.com/embed/jMcV_OP8LSw' },
        { name: 'Benzz - Je Mappelle', url: 'https://www.youtube.com/embed/_83AOaZ3Iyg' },
        { name: 'whine in brazil', url: 'https://www.youtube.com/watch?v=QBhA669Umbk' },
    ];

    // Track the currently playing video ID
    let currentPlayingID = null;
    let currentButton = null;

    // Add buttons for each music genre
    musicList.forEach(music => {
        const musicItem = document.createElement('div');
        musicItem.style.display = 'flex';
        musicItem.style.alignItems = 'center';
        musicItem.style.marginBottom = '10px';

        const musicButton = document.createElement('button');
        musicButton.textContent = music.name + ' (Play)';
        musicButton.style.flex = '1';
        musicButton.style.marginRight = '10px';
        musicButton.style.padding = '10px';
        musicButton.style.backgroundColor = 'Black';
        musicButton.style.color = 'white';
        musicButton.style.border = '1px solid black';
        musicButton.style.borderRadius = '10px';
        musicButton.style.cursor = 'pointer';
        musicButton.style.transition = 'background-color 0.3s'; // Transition for background color

        const stopButton = document.createElement('button');
        stopButton.textContent = 'Stop';
        stopButton.style.width = '50px';
        stopButton.style.padding = '10px';
        stopButton.style.backgroundColor = 'Black';
        stopButton.style.color = 'white';
        stopButton.style.border = '1px solid white';
        stopButton.style.borderRadius = '5px';
        stopButton.style.cursor = 'pointer';

        stopButton.addEventListener('click', () => {
            if (currentPlayingID) {
                player.stopVideo();
                currentPlayingID = null;
                if (currentButton) {
                    currentButton.textContent = currentButton.textContent.replace(' (Playing)', ' (Play)');
                    currentButton.style.backgroundColor = 'white';
                }
            }
        });

        musicButton.addEventListener('click', () => {
            if (currentPlayingID && currentButton) {
                player.stopVideo();
                currentButton.textContent = currentButton.textContent.replace(' (Playing)', ' (Play)');
                currentButton.style.backgroundColor = 'black';
            }
            const videoID = extractVideoID(music.url);
            if (videoID) {
                player.loadVideoById(videoID);
                player.playVideo();
                currentPlayingID = videoID;
                currentButton = musicButton;
                musicButton.textContent = music.name + ' (Playing)';
                musicButton.style.backgroundColor = 'black'; // Highlight color for playing
            }
        });

        musicItem.appendChild(musicButton);
        musicItem.appendChild(stopButton);
        menuContainer.appendChild(musicItem);
    });

    // Add the menu to the page
    document.body.appendChild(menuContainer);

    // Create an invisible player container
    const playerContainer = document.createElement('div');
    playerContainer.id = 'musicPlayer';
    playerContainer.style.position = 'fixed';
    playerContainer.style.bottom = '0';
    playerContainer.style.right = '0';
    playerContainer.style.width = '0';
    playerContainer.style.height = '0';
    document.body.appendChild(playerContainer);

    // Load YouTube IFrame Player API
    let tag = document.createElement('script');
    tag.src = "https://www.youtube.com/iframe_api";
    let firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    // Create YouTube player
    let player;
    window.onYouTubeIframeAPIReady = function() {
        player = new YT.Player('musicPlayer', {
            height: '0',
            width: '0',
            videoId: '',
            playerVars: { 'autoplay': 1, 'controls': 0, 'mute': 0 },
            events: {
                'onReady': onPlayerReady
            }
        });
    };

    function onPlayerReady(event) {
        console.log('YouTube Player is ready');
    }

    // Function to extract video ID from YouTube URL
    function extractVideoID(url) {
        const videoIDMatch = url.match(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/);
        return videoIDMatch ? videoIDMatch[1] : null;
    }

    // Handle TAB key to toggle the menu
    document.addEventListener('keydown', (event) => {
        if (event.key === 'Tab') {
            event.preventDefault(); // Prevent default TAB behavior
            if (menuContainer.style.display === 'none') {
                menuContainer.style.display = 'block';
                setTimeout(() => {
                    menuContainer.style.opacity = '1'; // Fade in effect
                    menuContainer.style.transform = 'translate(-50%, -50%)'; // Move to final position
                }, 10); // Small delay to apply transition
            } else {
                menuContainer.style.opacity = '0'; // Fade out effect
                menuContainer.style.transform = 'translate(-50%, -60%)'; // Move to starting position
                setTimeout(() => {
                    menuContainer.style.display = 'none';
                }, 500); // Match transition duration
            }
        }
    });
})();

setInterval(() => window.follmoo && follmoo(), 10);

if(location.hostname == "sandbox.moomoo.io") {
    document.getElementById("foodDisplay").style.display = "none";
    document.getElementById("woodDisplay").style.display = "none";
    document.getElementById("stoneDisplay").style.display = "none";
}

document.getElementById("enterGame").addEventListener("click", autohide);
function autohide() {
    $("#ot-sdk-btn-floating").hide();
}
document.getElementById("linksContainer2").innerHTML = " ";
let changes = `<div id="subConfirmationElement"><a href="https://discord.gg/BVx8EWfBny">Join Discord!</a></div>`;
$('#linksContainer2').prepend(changes);
$('#subConfirmationElement').click( () => {
    try { window.follmoo(); } catch(e){};
    localStorage["moofoll"] = "1"; localStorage["moofol"] = "1";
});
document.querySelector("#joinPartyButton").remove();
document.querySelector("#pre-content-container").remove(); //ANTI AD
document.getElementById("gameName").innerHTML = "VN Mod";
let changes2 = `<div id="customMenuName"><h3 style="font-size: 50px;" class = "indent">By Mrlag & HaX</a></div>`;
$('#gameName').prepend(changes2);
$("#gameName").css({
    color: "#333",
    "text-shadow": "0 1px 0 #181818, 0 2px 0 #181818, 0 3px 0 #181818, 0 4px 0 #181818, 0 5px 0 #181818, 0 6px 0 #181818, 0 7px 0 #181818, 0 8px 0 #181818, 0 9px 0 #181818, rgba(0, 0, 0, 0.4) 1px 1px 40px",
    "text-align": "center",
    "font-size": "156px",
    "margin-bottom": "-30px",
});
document.getElementById("loadingText").innerHTML = `<div id="MRLAGPRO" class="loader">`
//document.getElementById("loadingText").innerHTML = "VN Loading";
document.getElementById("diedText").innerHTML = "VN Died :C";
document.getElementById("diedText").style.color = "#ffffff";
document.title = " VN Mod";
document.getElementById("leaderboard").append("VN Mod");
$("#mapDisplay").css("background", "url('https://wormax.org/chrome3kafa/moomooio-background.png')");
document.getElementById("storeHolder").style = "height: 1150px; width: 400px;";
document.getElementById('promoImgHolder').innerHTML =
    `
  <style>
  p { font-size: 20px;}#noticationDisplay {
      vertical-align: top;
      position: absolute;
      right: 85%;
      top: 10%;
      text-align: right;
  } .menuButton { transition: 0.5s; border-radius: 0px;
  } .menuButton:hover { transform: scale(1.11); box-shadow: 0 0 20px #333;
  } #linksContainer2 { background: #ccc; border-top: 5px solid; border-image: linear-gradient(to right,#333,#333) 1 1 0 0; height: 18px; top: 0%; color: #333; transition: 0.3s;
  } #linksContainer2:hover { background: #ccc; box-shadow: 0 0 20px #333;
  } #top-wrap-right { color: #333;
  } .check-box {transform: scale(1.1);
  } .inParty {display: none;
  } input[type="checkbox"] { position: relative; appearance: none; width: 33px; height: 15.5px; border-radius: 50px; box-shadow: inset 0 0 5px rgba(41, 41, 41, 0.2); cursor: pointer; top: 7.5px; transition: 0.4s;
  } input:checked[type="checkbox"] { background: #333;
  } input[type="checkbox"]::after { position: absolute; content: ""; width: 15.5px; height: 15.5px; top: 0; left: 0; background: #fff; border-radius: 50%; box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); transform: scale(1.1); transition: 0.4s;
  } input:checked[type="checkbox"]::after { left: 50%;
  } .menuCard { background-color: #181818; border-top: 5px solid; border-image: linear-gradient(to right,#333,#303030) 1 0 0 0; color: #333; margin-top:0px; border-radius: 0px; border-bottom: 0px solid red; transition: all 1s; transform: scale(1); box-shadow: 0px 0px #333; transform: translateX(0px);
  } .menuCard:hover { transform: scale(1.05); box-shadow: 0 0 20px #333;
  } .menuCard.active { transform: translateX(0px);
  } #adCard { display: none;
  } #promoImgHolder { overflow-y: scroll; -ms-overflow-style: none; scrollbar-width: none; height: 90px; max-height: 90px; }
  </style>
      </head>
      <div>
  <i class="fa-solid fa-rectangle-list"style="font-size: 25px";></i><p>Update V2</p> <div style="font-size: 15px">
  - added boost tick<br>
  - added normal insta<br>
  - added sync detect test<br>
  - added sync heal q hold-beta)<br>
  - added a lot of visuals<br>
  - major bug fixes<br>
  - optimised heal<br>
  - removed autobreaker secondary<br>
  - added biome hat<br>
  - fixed heal bugs <br>
  - made logo <br>
  - changed autobreaker to tankclick<br>
  - added menu! <br>
  - added stack insta<br>
  - added autoaim<br>
  - optimised heals<br>
  - added bullspam detect<br>
  - added accesories <br>
  <i class="fa-solid fa-rectangle-list"style="font-size: 25px";></i><p>Update V1</p> <div style="font-size: 15px">
  - Created vn mod, devlopment beings<br>
  - Added basic macros & auto triple mills<br>
  - Fixed buggy placement function<br>
  - Added mousebutton hats<br>
  - Added perfect spiketick<br>
  - Added bullspammer<br>
  - added autobreaker<br>
  - added heal based hitback<br>
  - added anti instas<br>
  - added reverse insta<br>
  - removed bullspammer<br>
  - added music menu<br>


  </div><div style="font-size: 15px">
  </div><br>
  `
$("#itemInfoHolder").css({ top: "0px", left: "15px" });
$("#youtuberOf").remove();
$("#adCard").remove();
$("#mobileInstructions").remove();
$("#downloadButtonContainer").remove();
$("#mobileDownloadButtonContainer").remove();
$(".downloadBadge").remove();

const shadowStyle = "box-shadow: 0 0 10px 10px rgba(0, 0, 0, 0.4)";

const setupCardDiv = document.getElementById("setupCard");
if (setupCardDiv) {
    setupCardDiv.style.cssText += shadowStyle;
}

const serverBrowserSelect = document.getElementById("serverBrowser");
if (serverBrowserSelect) {
    serverBrowserSelect.style.color = "#333";
    serverBrowserSelect.style.backgroundColor = "#e5e3e4";
}

const enterGameButton = document.getElementById("enterGame");
if (enterGameButton) {
    enterGameButton.style.backgroundColor = "#333";
}

const style = document.createElement("style");
style.innerHTML = `
            .menuLink {
                font-size: 20px;
                color: #333;
            }
            a {
                color: #333;
                text-decoration: none;
            }
        `;
document.head.appendChild(style);

const nameInputElement = document.getElementById("nameInput");
if (nameInputElement) {
    nameInputElement.style.color = "#333";
}

const guideCardDiv = document.getElementById("guideCard");
if (guideCardDiv) {
    guideCardDiv.style.cssText += shadowStyle;
    setupCardDiv.style.backgroundColor = "#181818";
    guideCardDiv.style.backgroundColor = "#181818";
}

(function () {
    if (document.querySelector("#customAudioPlayer")) return;
    var audioFiles = [
        {
            url: "https://cdn.discordapp.com/attachments/1062441866416619653/1069324203297362040/Barren_Gates_-_Obey_NCS_Release.mp3",
            title: "Obey NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/1062441866416619653/1069323837608570941/Clarx_-_Zig_Zag_NCS_Release.mp3",
            title: "Zig Zag NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/1062441866416619653/1069300879708135524/Anixto_-_Ride_Or_Die_NCS_Release.mp3",
            title: "Ride Or Die NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/1062441866416619653/1069324799903531128/MP3DL.CC_Rival_-_Throne_-_ft._Neoni_NCS_Release-256k.mp3",
            title: "Throne NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905994516719345664/918544988965568562/Dirty_Palm_-_Ropes_feat._Chandler_Jewels_NCS10_Release.mp3",
            title: "Ropes NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905994516719345664/918546211584213023/Jonth_Tom_Wilson_Facading_MAGNUS_Jagsy_Vosai_RudeLies__Domastic_-_Heartless_NCS10_Release.mp3",
            title: "Heartless NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905873563490328626/920005714481672212/Anikdote_-_Turn_It_Up_NCS_Release.mp3",
            title: "Turn It Up NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905873563490328626/920006439999778856/Unknown_Brain_-_MATAFAKA_feat._Marvin_Divine_NCS_Release.mp3",
            title: "MATAFKA NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905994516719345664/918910823290769458/koven_never_have_i_felt_this_ncs_release_gqEQ_nIByoK-gucZcxBO.mp3",
            title: "Never Have I Felt This NCS",
        },
        {
            url: "https://cdn.discordapp.com/attachments/905994516719345664/925144953611505714/Rebel_Scum__Dani_King__Centrix_-_Calm_Before_The_Storm_NCS_Release.mp3",
            title: "Calm Before The Storm NCS",
        },
    ];
    var currentIndex = 0;
    var audio = new Audio(audioFiles[currentIndex].url);
    audio.preload = "auto";
    audio.volume = 0.1;
    var repeat = false;
    var shuffled = false;
    function playNext() {
        if (shuffled) {
            currentIndex = Math.floor(Math.random() * audioFiles.length);
        } else if (!repeat) {
            currentIndex = (currentIndex + 1) % audioFiles.length;
        }
        audio.src = audioFiles[currentIndex].url;
        audio.play();
        label.textContent = audioFiles[currentIndex].title;
        playButton.textContent = "Pause";
        playButton.style.background = "red";
        var trackButtons = document.querySelectorAll(".track-button");
        trackButtons.forEach(function (trackButton, index) {
            if (index === currentIndex) {
                trackButton.classList.add("active");
            } else {
                trackButton.classList.remove("active");
            }
        });
    }
    function formatDuration(duration) {
        var minutes = Math.floor(duration / 60);
        var seconds = Math.floor(duration % 60);
        return minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
    }
    audio.addEventListener("ended", playNext);
    audio.addEventListener("timeupdate", function () {
        durationDisplay.textContent =
            formatDuration(audio.currentTime) + "/" + formatDuration(audio.duration);
    });
    var player = document.createElement("div");
    player.id = "customAudioPlayer";
    player.style =
        "position:fixed;top:10px;left:10px;z-index:10001;background:#282828;border:1px solid black;padding:20px;border-radius:10px;width:300px;color:#fff;box-shadow:0px 0px 20px 5px rgba(0,0,0,0.75);display:none;flex-direction:column;align-items:center;";
    var profilePicture = document.createElement("img");
    profilePicture.src =
        "https://yt3.ggpht.com/jI1t37BCsCD_jMVBEqQPUghbRmz3KMny540V-r5iYAHaJeGolUYdUE8o1QCok7HMxEzZHZGS9Q=s600-c-k-c0x00ffffff-no-rj-rp-mo";
    profilePicture.style =
        "width:60px;height:60px;border-radius:50%;cursor:pointer;";
    profilePicture.onclick = function () {
        window.location.href =
            "https://www.youtube.com/channel/UCub84Dy0SSA0NgCqeUdjpsA";
    };
    player.appendChild(profilePicture);
    var label = document.createElement("div");
    label.textContent = audioFiles[currentIndex].title;
    label.style = "margin-top:10px;text-align:center;";
    player.appendChild(label);
    var playButton = document.createElement("button");
    playButton.textContent = "Play";
    playButton.style =
        "margin-top:10px;width:100%;padding:10px;border:none;border-radius:5px;background-color:green;color:white;cursor:pointer;";
    playButton.onclick = function () {
        if (audio.paused) {
            audio.play();
            this.textContent = "Pause";
            this.style.background = "red";
        } else {
            audio.pause();
            this.textContent = "Play";
            this.style.background = "green";
        }
    };
    player.appendChild(playButton);
    var nextButton = document.createElement("button");
    nextButton.textContent = "Next";
    nextButton.style =
        "margin-top:10px;width:100%;padding:10px;border:none;border-radius:5px;background-color:white;color:black;cursor:pointer;";
    nextButton.onclick = playNext;
    player.appendChild(nextButton);
    var shuffleRepeatContainer = document.createElement("div");
    shuffleRepeatContainer.style =
        "display:flex;justify-content:space-between;width:100%;margin-top:10px;";
    player.appendChild(shuffleRepeatContainer);
    var shuffleButton = document.createElement("button");
    shuffleButton.textContent = "Shuffle: Off";
    shuffleButton.style =
        "padding:10px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:48%;";
    shuffleButton.onclick = function () {
        shuffled = !shuffled;
        this.textContent = shuffled ? "Shuffle: On" : "Shuffle: Off";
    };
    shuffleRepeatContainer.appendChild(shuffleButton);
    var repeatButton = document.createElement("button");
    repeatButton.textContent = "Repeat: Off";
    repeatButton.style =
        "padding:10px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:48%;";
    repeatButton.onclick = function () {
        repeat = !repeat;
        this.textContent = repeat ? "Repeat: On" : "Repeat: Off";
    };
    shuffleRepeatContainer.appendChild(repeatButton);
    var durationDisplay = document.createElement("div");
    durationDisplay.style = "margin-top:10px;text-align:center;";
    player.appendChild(durationDisplay);
    var trackList = document.createElement("div");
    trackList.style =
        "overflow:auto;max-height:150px;margin-top:20px;border:1px solid #fff;border-radius:10px;padding:5px;";
    audioFiles.forEach(function (track, index) {
        var trackButton = document.createElement("button");
        trackButton.textContent = track.title;
        trackButton.classList.add("track-button");
        trackButton.style =
            "padding:5px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:100%;text-align:left;margin-top:5px;";
        trackButton.onclick = function () {
            currentIndex = index;
            audio.src = track.url;
            audio.play();
            label.textContent = track.title;
            playButton.textContent = "Pause";
            playButton.style.background = "red";
            trackButtons.forEach(function (trackButton, i) {
                if (i === currentIndex) {
                    trackButton.classList.add("active");
                } else {
                    trackButton.classList.remove("active");
                }
            });
        };
        trackList.appendChild(trackButton);
    });
    player.appendChild(trackList);
    var activeButtonStyle = document.createElement("style");
    activeButtonStyle.innerHTML = ".track-button.active{background-color:green;}";
    document.head.appendChild(activeButtonStyle);
    var madeByLabel = document.createElement("div");
    madeByLabel.textContent = "Made by Zod324myers";
    madeByLabel.style = "margin-top:auto;text-align:center;";
    player.appendChild(madeByLabel);
    document.body.appendChild(player);
    document.addEventListener("keydown", function (e) {
        if (e.key === "m" && document.activeElement.id.toLowerCase() !== "chatbox") {
            player.style.display = player.style.display === "none" ? "flex" : "none";
        }
    });
})();

let lastPing = -1;
let cvs = document.getElementById("gameCanvas"),
    ctx = cvs.getContext("2d");
let Ie = document.getElementById("pingDisplay");
Ie.replaceWith(document.createElement("div"));
Ie.style.fontSize = "20px";
Ie.style.fontFamily = "Calibri";
Ie.style.display = "block";
Ie.style.zIndex = "1";
document.body.appendChild(Ie);
setInterval(() => {
    Ie.style.display = "block";
    Ie.innerText = `${window.pingTime} ping | ${fps} fps`;
}, 0);
const times = [];
let fps;

function refreshLoop() {
    window.requestAnimationFrame(() => {
        const now = performance.now();
        while (times.length > 0 && times[0] <= now - 1000) {
            times.shift();
        }
        times.push(now);
        fps = times.length;
        refreshLoop();
    });
}

refreshLoop();
Ie.style.fontSize = "20px";
Ie.style.display = "block";
Ie.style.color = "#fff";
Ie.style.textShadow = "3px 3px 3px black";
Ie.style.zIndex = "1";
let anti = true;
let hitBack = false;
let stackInsta = false;
let lastDamageTick = 0;
let HP = 100;
let gameTick = 0;
var shame = 0;
let shameTime,
    damageTimes = 0;
let mouseX;
let mouseY;

let width;
let height;
//autoaim1
setInterval(() => {
    if (autoaim == true) {
        doNewSend(["D", [nearestEnemyAngle]]);
    }
}, 10);

setInterval(() => {
    if (hatToggle == 1) {
        if (oldHat != normalHat) {
            hat(normalHat);
            console.log("Tried. - Hat")
        }
        if (oldAcc != normalAcc) {
            acc(normalAcc);
            console.log("Tried. - Acc")
        }
        oldHat = normalHat;
        oldAcc = normalAcc
    }
}, 25);

setInterval(function () {
    if (myPlayer.hat == 45) {
        doNewSend(["6", [""]]);
    }
}, 1980);// messages send ever 2000ms but this is incase of packet mashes

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");

var packet
var nearestEnemy;
var nearestEnemyAngle;
var oppositeEnemyAngle;
var enemyRan;
let trap_a = null;
let intrap = false;
let trapid = null;
var antitrap = false;
var isEnemyNear;
var primary;
var secondary;
var foodType;
var wallType;
var spikeType;
var millType;
var mineType;
var boostType;
var turretType;
var spawnpadType;
var autoaim = false;
var autoprimary = false;
var autosecondary = false;
var tick = 1;
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,
    dir: null,
    object: null,
    weapon: null,
    clan: null,
    isLeader: null,
    hat: null,
    accessory: null,
    isSkull: null,
};

let healSpeed = 100;
var messageToggle = 0;
var clanToggle = 0;
let healToggle = 1;
let hatToggle = 1;
document.msgpack = msgpack;

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

WebSocket.prototype.oldSend = WebSocket.prototype.send;
WebSocket.prototype.send = function(m) {
    if (!ws) {
        document.ws = this;

        ws = this;
        socketFound(this);
    }
    this.oldSend(m);
};

/*function biomeHat() {
    if (myPlayer.y < 2400) {
      hat(6);
    } else {
      if (myPlayer.y > 6850 && myPlayer.y < 7550) {
        hat(6);
      } else {
        hat(6);
      }
    }
    //acc(11);
  }*/

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

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 == "C" && myPlayer.id == null) {
        myPlayer.id = data[1];
    }

    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.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];
            } else if (playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
                enemiesNear.push(playerInfo);
            }
        }
    }
    update();
    if (item == "H") {
        for(let i = 0; i < data[1].length / 8; i++) {
            let info = data[1].slice(8*i, 8*i+8);
            if(info[6] == millType && info[7] == myPlayer.id){
                friendlyMillLocs.push(info)
            }

            if(info[7] == myPlayer.id){
                onWeapon = true;
            }
        }

    }
    update();
    /*if(item == "P"){
      setTimeout(() => {
          doNewSend(["M", [{name: "vn-" + "",moofoll: 1,skin: "#cc5151"}]]);
      }, 200);
      }*/

    if(item == "Q"){
        removeArraysWithValue(friendlyMillLocs, data[1])
    }
    update();
    if(item == "R"){
        removeArraysWithValue(friendlyMillLocs, data[1])
    }
    update();
    if(item == "S"){
        if(data[1] == 3){
            millCount = data[2];
        }
    }
    update();
    if(friendlyMillLocs){
        nearestFriendlyMill = friendlyMillLocs.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];

        if(nearestFriendlyMill){
            nearestFriendlyMillX = nearestFriendlyMill[1]
            nearestFriendlyMillY = nearestFriendlyMill[2]
            nearestFriendlyMillScale = nearestFriendlyMill[4]
        }
    }
    if(Math.sqrt(Math.pow((myPlayer.y-nearestFriendlyMillY), 2) + Math.pow((myPlayer.x-nearestFriendlyMillX), 2)) < nearestFriendlyMillScale + 100) {
        console.log(true)
        isNextToFriendlyMill = true;
    } else {
        isNextToFriendlyMill = false;
    }
    WebSocket.prototype.send = function(m){
        let xcc = new Uint8Array(m);
        this.oldSend(m);
        let realData = {};
        let realInfo = msgpack5.decode(xcc);
        if (realInfo[1] instanceof Array){
            realData.data = [realInfo[0], ...realInfo[1]]
        }
        let rd0 = realData.data[0];
        let rd1 = realData.data[1];
        let rd2 = realData.data[2]

        if(rd0 == 'f'){
            movementDirection = rd1
        }
    };
    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);
        oppositeEnemyAngle = Math.atan2(nearestEnemy[2] + myPlayer.y, nearestEnemy[1] + myPlayer.x);
        enemyRan = Math.sqrt(Math.pow((myPlayer.y - nearestEnemy[2]), 2) + Math.pow((myPlayer.x - nearestEnemy[1]), 2));
        if (Math.sqrt(Math.pow((myPlayer.y - nearestEnemy[2]), 2) + Math.pow((myPlayer.x - nearestEnemy[1]), 2)) < 285) {
            isEnemyNear = true;
            if (autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
                normalHat = 6;
                if (primary != 8) {
                    normalAcc = 21
                }
            };
        }
    }
    if (isEnemyNear == false && autoaim == false) {
        if (myPlayer.y < 2400) {
            normalHat = 15;
        } else if (myPlayer.y > 6850 && myPlayer.y < 7550) {
            normalHat = 31;
        } else {
            normalHat = 12;

        }
    }
    if(isEnemyNear == true && nearestEnemy[5] == 4 && nearestEnemy[9] == 7 && hitBack == true && myPlayer.hat != 7 && myPlayer.hat != 53 && myPlayer.hat != 22 && myPlayer.hat != 11){
        doNewSend(["c", [0, 11, 0]]);
        setTimeout(()=>{
            doNewSend(["c", [0, 21, 1]]);
        },60);
    }
    if (!nearestEnemy) {
        nearestEnemyAngle = myPlayer.dir;
    }

    if (item == "X") {
        //this is Sync detector(beta)
        if (data[5] == 3.6) {
            let dir_1 = (dir) => Math.atan2(Math.sin(dir), Math.cos(dir));
            let a1 = dir_1(
                (Math.atan2(data[2] - myPlayer.y, data[1] - myPlayer.x) +
                 Math.PI +
                 Math.PI) %
                (Math.PI * 2)
            );
            let a2 = dir_1((dir_1(data[3]) + Math.PI) % (Math.PI * 2));
            let a3 = a1 - a2;
            if (0.36 > a3 && -0.36 < a3) {
                //doNewSend(["6", ["Sync Detect Test"]]);
                doNewSend(["D",[Math.atan2(data[2] - myPlayer.y, data[1] - myPlayer.x)],]);
                if (data[2] < 80 && data[2] > 0) {
                    doNewSend(["c", [0, 6, 0]]);
                    place(foodType);
                    place(foodType);
                }
            }
        }
    }
    if (myPlayer.hat == 45 && shame) shameTime = 30000;
    if (myPlayer.hat == 45 && shame) shame = 30000;
    if (data[0] == "a") {
        gameTick++;
    }
    if (item == "O" && data[1] == myPlayer.id) {
        gameTick = 0;
        lastDamageTick = 0;
        shame = 0;
        HP = 100;
        shameTime = 0;
        if (item == "O" && data[1] == myPlayer.id) {
            let damage = HP - data[2];
            HP = data[2];
            if (damage <= -1) {
                damageTimes++;
                if (!lastDamageTick) return;
                let healTime = gameTick - lastDamageTick;
                lastDamageTick = 0;
                if (healTime <= 1) {
                    shame = shame++;
                } else {
                    shame = Math.max(0, shame - 2);
                }
            } else {
                lastDamageTick = gameTick;
            }
        }
        if (data[2] < 100 && data[2] > 0 && healToggle == true) {
            //normal heal
            console.log("normal healing");
            setTimeout(() => {
                place(foodType);
                place(foodType);
                doNewSend(["c", [0, 6, 0]]);
                // doNewSend(["6", ["Heal"]]);
            }, 115);
        }
        if (data[2] < 48 && data[2] > 0 && anti == true && (nearestEnemy[5] == 5 || nearestEnemy[5] == 3)) {
            healToggle = false;
            //antiinsta no sold for pol
            console.log("no soldier anti - polearm");
            doNewSend(["c", [0, 22, 0]]);
            //doNewSend(["6", ["Anti"]]);
            place(foodType);
            setTimeout(() => {
                place(foodType);
                doNewSend(["c", [0, 6, 0]]);
                healToggle = true;
            }, 200);
            setTimeout(() => {
                doNewSend(["c", [0, 7, 0]]);
            }, 700);
            setTimeout(() => {
                doNewSend(["c", [0, 6, 0]]);
            }, 1900);
        }
        if (data[2] < 62 && data[2] > 41 && anti == true && (nearestEnemy[5] == 5 || nearestEnemy[5] == 3)) {
            healToggle = false;
            //antiinsta for pol
            console.log("anti insta - polearm");
            doNewSend(["c", [0, 22, 0]]);
            //doNewSend(["6", ["Anti"]]);
            place(foodType);
            setTimeout(() => {
                place(foodType);
                doNewSend(["c", [0, 6, 0]]);
                healToggle = true;
            }, 200);
            setTimeout(() => {
                doNewSend(["c", [0, 7, 0]]);
            }, 700);
            setTimeout(() => {
                doNewSend(["c", [0, 6, 0]]);
            }, 1900);
        }
        if (data[2] < 56 && data[2] > 50) {
            healToggle = false;
            //bullspam heal
            console.log("anti bullspam");
            setTimeout(() => {
                place(foodType);
                place(foodType);
                doNewSend(["c", [0, 6, 0]]);
                //doNewSend(["6", ["BHeal1"]]);
                healToggle = true;
            }, 140);
        }
        if (data[2] < 41 && data[2] > 0 && hitBack == true && nearestEnemy[5] == 4) {
            console.log("hitbacking");
            healToggle = false;
            autoaim = true;
            setTimeout(() => {
                place(foodType);
                place(foodType);
            }, 133);
            place(spikeType, nearestEnemyAngle);
            doNewSend(["n", [1]]);
            doNewSend(["c", [0, 7, 0]]);
            doNewSend(["z", [primary, true]]);
            setTimeout(() => {
                doNewSend(["c", [0, 53, 0]]);
                doNewSend(["n", [0]]);
                healToggle = true;
            }, 150);
            setTimeout(() => {
                doNewSend(["c", [0, 11, 0]]);
                autoaim = false;
            }, 300);
        }
    }
    update();
}

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

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

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

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

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

var repeater = function(key, action, interval, bu) {
    let _isKeyDown = false;
    let _intervalId = undefined;

    return {
        start(keycode) {
            if (keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
                _isKeyDown = true;
                if (_intervalId === undefined) {
                    _intervalId = setInterval(() => {
                        action();
                        if (!_isKeyDown) {
                            clearInterval(_intervalId);
                            _intervalId = undefined;
                            console.log("claered");
                        }
                    }, interval);
                }
            }
        },

        stop(keycode) {
            if (keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
                _isKeyDown = false;
            }
        }
    };


}

function removeArraysWithValue(arr, valueToRemove) {
    for (let i = arr.length - 1; i >= 0; i--) {
        const innerArray = arr[i];
        if (innerArray.includes(valueToRemove)) {
            arr.splice(i, 1);
        }
    }
}
let movementDirection
let millCount = 0;
let nearestRandomObjectX;
let nearestRandomObjectY;
let friendlyMillLocs = [];
let nearestFriendlyMill;
let nearestFriendlyMillX;
let nearestFriendlyMillY;
let nearestFriendlyMillScale;
let isNextToFriendlyMill = false;
let automilling = false
let automill = false
setInterval(()=>{
    if(automill == true && isNextToFriendlyMill == false && millCount < 298 && automilling == false){
        automilling = true;
        doNewSend(["z",[millType, null]])
        doNewSend(["F",[1, (movementDirection - 1.90)]])
        doNewSend(["F",[0, (movementDirection - 1.90)]])
        doNewSend(["z",[myPlayer.weapon, true]])
        doNewSend(["z",[millType, null]])
        doNewSend(["F",[1, (movementDirection - 3.14)]])
        doNewSend(["F",[0, (movementDirection - 3.14)]])
        doNewSend(["z",[myPlayer.weapon, true]])
        doNewSend(["z",[millType, null]])
        doNewSend(["F",[1, (movementDirection + 1.90)]])
        doNewSend(["F",[0, (movementDirection + 1.90)]])
        doNewSend(["z",[myPlayer.weapon, true]])
        automilling = false
    }
}, 100)
const boostPlacer = repeater(70,() => {place(boostType);},50);
const spikePlacer = repeater(86,() => {place(spikeType);},50);
const placers = [boostPlacer, spikePlacer];
let prevCount = 0;
const handleMutations = (mutationsList) => {
    for (const mutation of mutationsList) {
        if (mutation.target.id === "killCounter") {
            const count = parseInt(mutation.target.innerText, 10) || 0;
            if (count > prevCount) {
                doNewSend(["6", ["."]]);
                setTimeout(()=>{
                    doNewSend(["6", [""]]);
                },650);
                prevCount = count;
            }
        }
    }
};


const observer = new MutationObserver(handleMutations);
observer.observe(document, {
    subtree: true,
    childList: true,
});

document.addEventListener('keydown', (e) => {
    if (["allianceinput", "chatbox", "nameinput", "storeHolder"].includes(document.activeElement.id.toLowerCase()))
        return null;
    placers.forEach((t) => {
        t.start(e.keyCode);
    });

    if (e.keyCode == 78 && document.activeElement.id.toLowerCase() !== "chatbox") {// N = Automill
        automill = !automill;
    }

    if (e.keyCode == 72 && document.activeElement.id.toLowerCase() !== "chatbox") {// H = Turret/Teleporter
        for (let i = 0; i < Math.PI * 1; i+= Math.PI / 2) {
            place(turretType, myPlayer.dir + i);
            place(turretType, myPlayer.dir - i);
        }
    }
    /* if (e.keyCode == 16) {
    biomeHat();
  }*/
    if (e.keyCode == 32 && document.activeElement.id.toLowerCase() !== "chatbox") {
        // spiketick
        autoaim = true;
        console.log("spiektick");
        place(spikeType, nearestEnemyAngle);
        doNewSend(["F", [1]]);
        doNewSend(["c", [0, 7, 0]]);
        doNewSend(["z", [primary, true]]);
        doNewSend(["F", [1]]);
        setTimeout(() => {
            doNewSend(["c", [0, 6, 0]]);
            doNewSend(["F", [0]]);
            autoaim = false;
        }, 400);
    }
    if (e.keyCode == 89 && document.activeElement.id.toLowerCase() !== "chatbox") {//diamond pol 1 tick
        autoaim = true;
        doNewSend(["z", [primary, true]]);
        doNewSend(["c", [0, 53, 0]]);
        setTimeout(() => {
            doNewSend(["c", [0, 7, 0]]);
            doNewSend(["F", [1]]);
        }, 100);
        setTimeout(() => {
            doNewSend(["z", [primary, true]]);
            doNewSend(["c", [0, 6, 0]]);
            doNewSend(["F", [0]]);
            autoaim = false;
        }, 500);
    }
    if (e.keyCode == 82 &&document.activeElement.id.toLowerCase() !== "chatbox") {
        if (stackInsta == false) {
            console.log("normal insta");
            autoaim = true;
            doNewSend(["c", [0, 7, 0]]);
            doNewSend(["z", [primary, true]]);
            doNewSend(["c", [0, 0, 1]])
            doNewSend(["F", [1]]);
            acc(18)
            doNewSend(["c", [1]]);
            setTimeout(() => {
                doNewSend(["z", [secondary, true]]);
                doNewSend(["c", [0, 53, 0]]);
                doNewSend(["c", [0, 0, 1]]);
                acc(21)
            }, 105);
            setTimeout(() => {
                doNewSend(["z", [secondary, true]]);
            }, 110);
            setTimeout(() => {
                doNewSend(["z", [secondary, true]]);
            }, 115);
            setTimeout(() => {
                doNewSend(["z", [primary, true]]);
                doNewSend(["F", [0, null]]);
                doNewSend(["c", [0, 6, 0]]);
                doNewSend(["c", [0, 0, 0]]);
                doNewSend(["c", [0, 0, 1]]);
                hat(6)
                acc(21)
                autoaim = false;
            }, 215);
        } else {
            console.log("stack insta");
            autoaim = true;
            doNewSend(["c", [0, 7, 0]]);
            doNewSend(["z", [primary, true]]);
            doNewSend(["c", [0, 0, 1]])
            doNewSend(["F", [1]]);
            acc(18)
            doNewSend(["c", [1]]);
            setTimeout( () => {
                var sck = "";
                doNewSend(["z", [secondary, true]]);
                doNewSend(["c", [0, 53, 0]]);
                doNewSend(["c", [0, 0, 1]]);
                for(let i = 0; i < 850; i++){
                    let caas = new Uint8Array(550);
                    for(let i = 0; i <caas.length;i++){
                        caas[i] = Math.floor(Math.random()*270);
                        sck += caas[i]
                    }
                }
                ws.send(caas);
            }, 105);
            setTimeout(() => {
                doNewSend(["z", [secondary, true]]);
            }, 200);
            setTimeout(() => {
                doNewSend(["z", [primary, true]]);
                doNewSend(["F", [0, null]]);
                doNewSend(["c", [0, 6, 0]]);
                doNewSend(["c", [0, 0, 0]]);
                doNewSend(["c", [0, 0, 1]]);
                hat(6)
                acc(21)
                autoaim = false;
            }, 215);
        }
    }
    if (e.keyCode == 188 &&document.activeElement.id.toLowerCase() !== "chatbox") {
        console.log("boost tick");
        autoaim = true;
        setTimeout(()=>{
            doNewSend(["F", [1]]);
            doNewSend(["z", [secondary, true]]);
        },99);
        setTimeout(()=>{
            doNewSend(["c", [0, 53, 0]]);
            place(boostType);
        },50);
        setTimeout(() => {
            doNewSend(["z", [primary, true]]);
            doNewSend(["c", [0, 7, 0]]);
            doNewSend(["F", [1]]);
            doNewSend(["F", [0]]);
        }, 175);
        setTimeout(() => {
            doNewSend(["z", [primary, true]]);
            doNewSend(["c", [0, 6, 0]]);
            doNewSend(["F", [0]]);
            autoaim = false;
        }, 500);
    }
    if (e.keyCode == 84 && document.activeElement.id.toLowerCase() !== "chatbox") {
        if(stackInsta == false){
            // insta
            autoaim = true;
            console.log("reverse insta");
            doNewSend(["F", [1]]);
            doNewSend(["z", [secondary, true]]);
            doNewSend(["c", [0, 53, 0]]);
            setTimeout(() => {
                doNewSend(["z", [primary, true]]);
                doNewSend(["c", [0, 7, 0]]);
                doNewSend(["n", [1]]);
                doNewSend(["n", [0]]);
            }, 80);
            setTimeout(() => {
                doNewSend(["z", [primary, true]]);
                doNewSend(["c", [0, 6, 0]]);
                doNewSend(["F", [0]]);
                autoaim = false;
            }, 500);
        } else {
            autoaim = true;
            console.log("stacked reverse insta");
            doNewSend(["F", [1]]);
            doNewSend(["z", [secondary, true]]);
            doNewSend(["c", [0, 53, 0]]);
            setTimeout(() => {
                var sck = "";
                doNewSend(["z", [primary, true]]);
                doNewSend(["c", [0, 7, 0]]);
                doNewSend(["F", [1]]);
                doNewSend(["F", [0]]);
                for(let i = 0; i < 850; i++){
                    let caas = new Uint8Array(550);
                    for(let i = 0; i <caas.length;i++){
                        caas[i] = Math.floor(Math.random()*270);
                        sck += caas[i]
                    }
                }
                ws.send(caas);
            }, 80);
            setTimeout(() => {
                doNewSend(["z", [primary, true]]);
                doNewSend(["c", [0, 6, 0]]);
                doNewSend(["F", [0]]);
                autoaim = false;
            }, 500);
        }
    }
    if (e.keyCode == 66 &&document.activeElement.id.toLowerCase() !== "chatbox") {//manual bulltick
        doNewSend(["c", [0, 7, 0]]);
        setTimeout(()=>{
            doNewSend(["c", [0, 13, 1]]);
        },60);
    }
})

document.addEventListener('keyup', (e) => {
    if (["allianceinput", "chatbox", "nameinput", "storeHolder"].includes(document.activeElement.id.toLowerCase()))
        return null;
    placers.forEach((t) => {
        t.stop(e.keyCode);
    })
})

document.addEventListener("mousedown", (event) => {
    if (event.button == 2 && secondary != 10) {
        doNewSend(["F", [1]]);
        doNewSend(["c", [0, 40, 0]]);
        doNewSend(["z", [primary, true]]);
        setTimeout(()=>{
            doNewSend(["F", [0]]);
            doNewSend(["c", [0, 6, 0]]);
        },100);
    } else if (event.button == 2) {
        doNewSend(["F", [1]]);
        doNewSend(["c", [0, 40, 0]]);
        doNewSend(["z", [secondary, true]]);
        setTimeout(()=>{
            doNewSend(["F", [0]]);
            doNewSend(["c", [0, 6, 0]]);
        },100);
    }
});

/*document.addEventListener("mousedown", (event) => {
    if (event.button == 0) {
        doNewSend(["F", [1]]);
        doNewSend(["c", [0, 7, 0]]);
        doNewSend(["z", [primary, true]]);
        setTimeout(()=>{
            doNewSend(["F", [0]]);
            doNewSend(["c", [0, 6, 0]]);
        },100);
    }
});*/

function isElementVisible(e) {
    return (e.offsetParent !== null);
}

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

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

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 < 39; i++) {
        if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36) {
            turretType = i - 16;
        }
    }

    spawnpadType = 36;
}

var styleItem = document.createElement("style");
styleItem.type = "text/css";
styleItem.appendChild(document.createTextNode(`
  .loader {
  position: absolute;
  top:110%;
  left:46%;
    border: 16px solid #333;
    border-radius: 50%;
    border-top: 16px solid #181818;
    box-shadow: 0 0 10px 10px rgba(0, 0, 0, 0.4);
    width: 60px;
    height: 60px;
    -webkit-animation: spin 0.5s linear infinite; /* Safari */
    animation: spin 0.5s linear infinite;
  }
  @-webkit-keyframes spin {
    0% { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(360deg); }
  }

  @keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
  }
  #gameUI .joinAlBtn, a {
    animation: 5s infinite linear both normal rainbow;
  }

  @keyframes rainbow {
    0% { filter: hue-rotate(0deg) }
    100% { filter: hue-rotate(360deg) }
  }`));
document.head.appendChild(styleItem);

window.addEventListener("load", () => {

    let toggleRender = true;
    let canvas = document.getElementById("gameCanvas");
    let ctx = canvas.getContext("2d");
    let screenWidth = 1920;
    let screenHeight = 1080;
    let screenW = screenWidth / 2;
    let screenH = screenHeight / 2;

    function render() {

        if (toggleRender) {

            ctx.beginPath();

            let gradient = ctx.createRadialGradient(screenW, screenH, 0, screenW, screenH, screenWidth);
            for (let i = 0; i <= 1; i++) {
                gradient.addColorStop(i, "rgba(0, 0, 0, " + i + ")");
            }

            ctx.fillStyle = gradient;
            ctx.rect(0, 0, screenWidth, screenHeight);
            ctx.fill();

        }

        window.requestAnimFrame(render);

    }

    render();
});

document.addEventListener("keydown", function (e) {
    if (e.keyCode == 27) {
        $('#infomenu').toggle();
        ext = !ext;
    };
});

// Menu
$("body").after(`
  <div id="infomenu">
  <hr>
  <div class="nameblock">VN Mod v2</div>
  <hr>
  <ul>
  <li></label><label><div class="text">AntiInsta<input type="checkbox" id="anti" checked><span class="checkmark"></div></li>
  <li></label><label><div class="text">HitBack<input type="checkbox" id="hitBack"><span class="checkmark"></div></li>
  <li></label><label><div class="text">Stacked Insta<input type="checkbox" id="stackInsta"><span class="checkmark"></div></li>
  </ul>
  <hr>
  <div class="nameblock">Controls:</div>
  <hr>

  <div class="text">
  </li>
  <li> N - Auto Triple Mill
  </li>
  <li> V - Spike
  </li>
  <li> F - Trap
  </li>
  <li> H - Double Turrets
  </li>
  <li> M - Music Menu
  </li>
  <li> Space - Perfect Stacked Spiketick
  </li>
  <li> RightClick - AutoBreaker
  </li>
  <li> R - Normal Instakill
  </li>
  <li> T - Reverse Instakill
  </li>
  <li> Y - OneTick
  </li>
  <li> , - Boost OneTick
  </li>
  <li> B - Bulltick
  </li>
  <li> Esc - Menu
  </li>
  </ul>
  <hr>
  </div>



  </div>
  <style>
  button:active,
  button:focus {
    outline: none !important;
  }
  button::-moz-focus-inner {
    border: 0 !important;
  }
  .nameblock {
  font-size: 20px;
  color: #dbdbdb;
  text-align: center;
  }
  li {
  font-size: 13px;
  }
  .text {
  display: block;
  font-size: 17px;
  color: #fff;
  text-align: left;
  }
  .menuToggle:hover{
  cursor: pointer;
  position: absolute;
  background: linear-gradient(to right, red, orange, yellow, green, cyan, blue, violet);
  background-size: 400% 400%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  -webkit-animation: colorR 20s ease infinite;
  animation: colorR 20s ease infinite;
  font-family: "Hammersmith One";
  display: block !important;
  top: 80px;
  left: 1517px;
  font-size: 17px;
  }
  .menuToggle{
  cursor: pointer;
  position: absolute;
  background: linear-gradient(to right, gray, black);
  background-size: 400% 400%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  -webkit-animation: colorR 20s ease infinite;
  animation: colorR 20s ease infinite;
  font-family: "Hammersmith One";
  display: block !important;
  top: 80px;
  left: 1517px;
  font-size: 17px;
  }
  ::-webkit-scrollbar { width: 5px; height: 3px;}
  ::-webkit-scrollbar-button {  background-color: #000000; }
  ::-webkit-scrollbar-track {  background-color: #999;}
  ::-webkit-scrollbar-track-piece { background-color: rgba(0, 0, 0, 0.50);}
  ::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 3px;}
  ::-webkit-scrollbar-corner { background-color: #999;}}
  ::-webkit-resizer { background-color: #666;}
  #infomenu {
  overflow-y: scroll;
  overflow-x: hidden;
  padding: 20px;
  position: absolute;
  display: none;
  background: rgba(102, 102, 102, 0.25);
  width: 310px;
  height: 450px;
  border: 2px solid black;
  border-radius: 4px;
  top: 80px;
  left: 20px;
  z-index: 1;
  }
  input {outline: 0 !important;}
  .Input_Text_style, .Input_Buttob_style {
  background: rgba(102, 102, 102);
  border: 2px solid black;
  border-radius: 10px;
  color: #fff;
  -o-transition: all 1s ease;
  -ms-transition: all 1s ease;
  -moz-transition: all 1s ease;
  -webkit-transition: all 1s ease;
  transition: all 1s ease;
  }
  .Input_Text_style:focus,.Input_Buttob_style:focus {
  border: 2px solid #fff;
  }
  </style>
  <script>
  function InfoMenu() {
  $("#infomenu").css({
  "display" : "block"
  });
  }

  /*(function() {
    var UPDATE_DELAY = 700;
    var lastUpdate = 0;
    var frames = 0;
  var values;
    function updateCounter() {
      var now = Date.now();
      var elapsed = now - lastUpdate;
      if (elapsed < UPDATE_DELAY) {
        ++frames;
      } else {
        var fps = Math.round(frames / (elapsed / 1000));
        document.getElementById("fps").textContent ="Fps: " + fps ;
        frames = 0;
        lastUpdate = now;
      }
      requestAnimationFrame(updateCounter);
    }
    lastUpdate = Date.now();
    requestAnimationFrame(updateCounter);
  })();
  setInterval(()=>{
  document.getElementById("ping").textContent = "Ping: " + window.pingTime;
  },0);*/

  </script>
  `);
$("body").after(`
  <div id="ShowMenu">
  </span>
  <div id="addtext">LeftAndRightClick: On</div>
  <div id="addtext3">Balant macros: On</div>
  <div id="addtext0">Soldier-Q: On</div>
  <div id="addtext4">AutoSpawn: On</div>
  <div id="addtext1">Left-Click</div>
  <div id="addtext2">Right-Click</div>
  <style>
     #ShowMenu {
     position:absolute !important;
     display:block;
     top: 5px;
     left: 5px;
     width: auto;
     height: auto;
     text-align: center;
     }
     #addtext,#addtext1,#addtext2,#addtext0,#addtext3,#addtext4{
     display: none;
     color: #fff;
     background: linear-gradient(to right, red, orange, yellow, green, cyan, blue, violet);
     background-size: 400% 400%;
     font-size: 20px;
     -webkit-background-clip: text;
     -webkit-text-fill-color: transparent;
     -webkit-animation: colorR 20s ease infinite;
     animation: colorR 20s ease infinite;
     }
     @-webkit-keyframes colorR {
     0% { background-position: 0% 50% }
     50% { background-position: 100% 50% }
     100% { background-position: 0% 50% }
     }
     @keyframes colorR {
     0% { background-position: 0% 50% }
     50% { background-position: 100% 50% }
     100% { background-position: 0% 50% }
     }
  </style>
  <script>
  </script>
  `);

var antii = document.querySelector("#anti")
antii.addEventListener('change', function() {
    if (this.checked) {
        anti = true;
    } else {
        anti = false;
    }
});
var hitBackk = document.querySelector("#hitBack")
hitBackk.addEventListener('change', function() {
    if (this.checked) {
        hitBack = true;
    } else {
        hitBack = false;
    }
});
var stackInstaa = document.querySelector("#stackInsta")
stackInstaa.addEventListener('change', function() {
    if (this.checked) {
        stackInsta = true;
    } else {
        stackInsta = false;
    }
});
                          //ANTI SHAME & ANTI INSTA
                       function autobulltickandantiinsta () {
                       if (my.reSync && player.bullTick && tmpObj.shameCount > 2) {
                       my.reSync = true;
                           buyEquip(7, 0);
                           buyEquip(6, 0);
                           } else if (tmpObj.shameCount < 2 && tmpObj.shameCount > 1) {
                               my.reSync = false;
                               buyEquip(6, 0);
                             }
                       }
                       if (near.weaponIndex > 5 && near.dist2 <= 150) {
                                buyEquip(26, 0);
                                buyEquip(6, 0);
                    }
/** AUTO HEAL **/
let autoHeal = (health, damage) => {
    let cHealSpeed = 120;

    if (nearestEnemy && damage >= 35 && (nearestEnemy.weapon == weapon.polearm || nearestEnemy.weapon == weapon.short_sword) && (nearestEnemy.hat == 7 || nearestEnemy.hat == 53 || nearestEnemy.hat == 6)) {
        cHealSpeed -= 70;
        place(foodType, null);
    } else if (nearestEnemy && damage >= 35) {
        cHealSpeed -= 60;
    } else {
        cHealSpeed = 120;
    }

    if (health < myPlayer.maxHealth) {
        let healing = setInterval(() => {
            if (myPlayer.health < myPlayer.maxHealth) {
                place(foodType, null);
            } else {
                clearInterval(healing);
            }
        }, cHealSpeed);
    }
};

/** UPDATE HEALTH **/
let lastHealth = 100;
let updateHealth = (health, playerID) => {
    if (myPlayer.id === playerID) {
        let damage = Math.max(0, lastHealth - health);
        myPlayer.health = health;
        if (myPlayer.health > 0) {
            autoHeal(myPlayer.health, damage);
        }
        lastHealth = health;
    } else {
        enemy.health = health;
    }
};