!ULTIMATE MOD PACK by 8_no! (2024 updated!)

try to take over the world!

// ==UserScript==
// @name         !ULTIMATE MOD PACK by 8_no! (2024 updated!)
// @namespace    http://tampermonkey.net/
// @version      100004.7
// @description  try to take over the world!
// @author       8_no
// @match        https://diep.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=diep.io
// @grant        none
// @license      MIT
// ==/UserScript==
let mode = 'none';
let active = true;
let mouseInteraction = true;
let uiEnabled = false;
let alwShoot=false;
let alwUpg = true;
let real_mouse = {x: 0, y: 0};
let canvas_mouse = {x: 0, y: 0};
let isFrozen = false;

//Mouse & Keys

const RAW_MAPPING = [
    "KeyA",
    "KeyB",
    "KeyC",
    "KeyD",
    "KeyE",
    "KeyF",
    "KeyG",
    "KeyH",
    "KeyI",
    "KeyJ",
    "KeyK",
    "KeyL",
    "KeyM",
    "KeyN",
    "KeyO",
    "KeyP",
    "KeyQ",
    "KeyR",
    "KeyS",
    "KeyT",
    "KeyU",
    "KeyV",
    "KeyW",
    "KeyX",
    "KeyY",
    "KeyZ",
    "ArrowUp",
    "ArrowLeft",
    "ArrowDown",
    "ArrowRight",
    "Tab",
    "Enter",
    "NumpadEnter",
    "ShiftLeft",
    "ShiftRight",
    "Space",
    "Numpad0",
    "Numpad1",
    "Numpad2",
    "Numpad3",
    "Numpad4",
    "Numpad5",
    "Numpad6",
    "Numpad7",
    "Numpad8",
    "Numpad9",
    "Digit0",
    "Digit1",
    "Digit2",
    "Digit3",
    "Digit4",
    "Digit5",
    "Digit6",
    "Digit7",
    "Digit8",
    "Digit9",
    "F2",
    "End",
    "Home",
    "Semicolon",
    "Comma",
    "NumpadComma",
    "Period",
    "Backslash",
];

function key_down(keyString) {
    const index = RAW_MAPPING.indexOf(keyString);
    if (index === -1) {
        console.error(`Invalid key string: ${keyString}`);
        return;
    }
    const result = index + 1; // Add 1 to the index as per your requirement
    input.onKeyDown(result);
}

function key_up(keyString) {
    const index = RAW_MAPPING.indexOf(keyString);
    if (index === -1) {
        console.error(`Invalid key string: ${keyString}`);
        return;
    }
    const result = index + 1; // Add 1 to the index as per your requirement
    input.onKeyUp(result);
}

document.addEventListener('mousemove', function(event) {
    real_mouse.x = event.clientX;
    real_mouse.y = event.clientY;
    canvas_mouse.x = (canvas.width / 4 - event.clientX) + canvas.width / 2;
    canvas_mouse.y = (canvas.height / 4 - event.clientY) + canvas.height / 2;
    if (isFrozen) {
        event.stopImmediatePropagation();
        console.log("Mousemove event blocked.");
    }
});


// Example: Freeze and unfreeze
function freezeMouseMove() {
    isFrozen = true;
    //console.log("Mousemove events are frozen.");
}

function unfreezeMouseMove() {
    isFrozen = false;
    //console.log("Mousemove events are active.");
}

function click_at(x, y){
     input.onTouchStart(-1, x, y);
    setTimeout(() => {
     input.onTouchEnd(-1, x, y);
    }, 150);
}

function mouse_move(x, y) {
    input.onTouchMove(-1, x, y);
}

//extras

//tank finder
var tanky = "";
    CanvasRenderingContext2D.prototype.fillText = new Proxy(CanvasRenderingContext2D.prototype.fillText, {
        apply(fillRect, ctx, [text, x, y, ...blah]) {
            if (text.startsWith('Lvl ')){ tanky = text}
            fillRect.call(ctx, text, x, y, ...blah);
        }
    });

//scaling (experimenting)
// let fov = 1057803469;
// let scalingFactor = fov * windowScaling();
// function windowScaling() {
//   const canvas = document.getElementById('canvas');
//   const a = canvas.height / 1080;
//   const b = canvas.width / 1920;
//   return b < a ? a : b;
// }
// var DiepUnits = canvas.width / scalingFactor;

//Name color changer by Shlong (modified by me)
CanvasRenderingContext2D.prototype.fillText = new Proxy(CanvasRenderingContext2D.prototype.fillText, {
    apply(reference, _this, args) {
        //this part changes the name color of other players. First color code is set by the server and the second is chosen by you.
        if (_this.fillStyle == "#ffff90") {
            _this.fillStyle = "#FF0000";
        }
        //same thing here but the color of every text (white), that can be modified.
//         if (_this.fillStyle == "#ffffff") {
//             _this.fillStyle = "#B2CAFF";
//         }
        //I disabled this part tho. Just remove the // in the previous 3 lines to make it work.
        return reference.apply(_this, args);
    }
});

CanvasRenderingContext2D.prototype.strokeText = new Proxy(CanvasRenderingContext2D.prototype.strokeText, {
    apply(reference, _this, args) {
        //this part changes the stroke color of other players. First color code is set by the server and the second is chosen by you
        if (_this.strokeStyle == "#555555") {
            _this.strokeStyle = "#A40101";
        }
        return reference.apply(_this, args);
    }
});
//

//Timer for Anni
var AnniTimer = document.createElement('div');
AnniTimer.style.position = 'absolute';
AnniTimer.innerHTML = 'Anni 3 reload Cooldown';
AnniTimer.style.fontSize = '7px';
AnniTimer.style.fontWeight = 'bold';
AnniTimer.style.padding = '8px';
AnniTimer.style.backgroundColor = 'black';
AnniTimer.style.border = 'solid 2px green';
AnniTimer.style.color = 'green';
AnniTimer.style.zIndex = '9999';
AnniTimer.style.borderRadius = '10%';
AnniTimer.style.top = '60%';
AnniTimer.style.left = '47.5%';
document.body.appendChild(AnniTimer);
AnniTimer.style.display = 'none';
var cooldown = false;
var cooldownTime = 1700; //3 reload
//var cooldownTime = 2300; 0 reload
var cooldownTimer;
AnniTimer.onclick = function() {
  if (!cooldown) {
   if(tanky.includes('Destroyer') || tanky.includes('Annihilator') || tanky.includes('Hybrid')) {
    cooldown = true;
    AnniTimer.style.border = 'solid 2px red';
    AnniTimer.style.color = 'red';
      AnniTimer.style.display = 'block';
    cooldownTimer = setTimeout(function() {
      cooldown = false;
      AnniTimer.style.border = 'solid 2px green';
      AnniTimer.style.color = 'green';
        AnniTimer.style.display = 'none';
    }, cooldownTime);
   }
  }
};

document.onclick = function() {
  AnniTimer.click();
};

//simplify diep.io (by ABC)

const crx = CanvasRenderingContext2D.prototype;
    crx.fillText = new Proxy(crx.fillText, {
        apply: function(f, _this, args) {
            const text = args[0];
            if (args[0] === "Machine Gun") {
                args[0] = "Destroyer?";
            }
            if (args[0] === "Flank Guard") {
                args[0] = "Fighter?";
            }
            if (args[0] === "Sniper") {
                args[0] = "OL?";
            }
            if (args[0] === "Twin") {
                args[0] = "Octo?";
            }
            if (args[0] === "Scoreboard") {
                args[0] = "Noobs:";
            }
            if (args[0] === "diep.io") {
                args[0] = " ";
            }
            if (args[0] === "Upgrades") {
                args[0] = " ";
            }
            f.apply(_this, args);
        }
    });
    crx.strokeText = new Proxy(crx.strokeText, {
        apply: function(f, _this, args) {
            const text = args[0];
            if (args[0] === "Machine Gun") {
                args[0] = "Destroyer?";
            }
            if (args[0] === "Flank Guard") {
                args[0] = "Fighter?";
            }
            if (args[0] === "Sniper") {
                args[0] = "OL?";
            }
            if (args[0] === "Twin") {
                args[0] = "Octo?";
            }
            if (args[0] === "Scoreboard") {
                args[0] = "Noobs:";
            }
            if (args[0] === "diep.io") {
                args[0] = " ";
            }
            if (args[0] === "Upgrades") {
                args[0] = " ";
            }
            f.apply(_this, args);
        }
    });
//Auto Upgrade by 8_no (demo version: Hunter Upgrades)
function upgrading() {
    if (alwUpg) {
        if(tanky.includes('Tank')) {
       input.execute('game_stats_build 56565656565656');
            }
        if(tanky.includes('Sniper')) {
       input.execute('game_stats_build 565656565656564444444888888877233');
            }
         if(tanky.includes('Twin')) {
       input.execute('game_stats_build 565656565656567777777444448888888');
            }
        if(tanky.includes('Flank Guard')) {
       input.execute('game_stats_build 565656565656567777777888888842323');
            }
        if(tanky.includes('Machine Gun')) {
       input.execute('game_stats_build 565656565656564444444888888877733');
            }
    }
};
setInterval(upgrading, 100);
//

//Autofire+

/* OLD VERSION
function shoot() {
    if (alwShoot) {
        key_down("Space");
    }else{
            key_up("Space");
    };
};
*/

let shootId = null;

function shoot() {
  if (alwShoot) {
    key_down("Space");
  } else {
    key_up("Space");
    clearInterval(shootId); // Stop the loop
    shootId = null; // Reset shootId
  }
}

function startShootLoop() {
  if (shootId === null) {
    shootId = setInterval(shoot, 0);
  }
}

// Call startShootLoop() to start the loop initially
startShootLoop();


setInterval(shoot, 0);

//Freeze Mouse with X
document.addEventListener('keydown', function(e) {
    console.log(e.keyCode);
  if (e.keyCode === 88) {
    isFrozen = !isFrozen;
  }
});

//ui changer
document.onmousemove = function(e) {
 if(active) {
     if(uiEnabled) {
  if (e.clientX > 350 && e.clientX < 2220) {
      input.execute("ren_scoreboard true")
    input.execute("ren_upgrades true")
    input.execute("ren_stats true")
  } else {
    input.execute("ren_scoreboard false")
    input.execute("ren_upgrades false")
    input.execute("ren_stats false")
  }
  if (e.clientY < 1000) {
    input.execute("ren_ui true")
  } else {
    input.execute("ren_ui false")
  }
     }
 }
};
//

function M1() {
    if(mode == 'long 50/50') {
    key_down("ShiftLeft");
    setTimeout(() => {
    key_up("ShiftLeft");
    }, 25000);
    }
}

function M3() {
    if(mode == 'infinite 70/30') {
    key_down("ShiftLeft");
    setTimeout(() => {
    key_up("ShiftLeft");
    }, 7000);
    }
}

function M4() {
    if(mode == 'infinity') {
    key_down("ShiftLeft");
     if(!mode == 'infinity') {
     key_up("ShiftLeft");
     }
    }
}

function M5() {
    if(mode == 'necromancer') {
        key_down("ShiftLeft");
        setTimeout(() => {
            key_up("ShiftLeft");
        }, 20000);
    }
}

function Reset() {
        key_down("ShiftLeft");
        key_up("ShiftLeft");
}

setInterval(M1, 50000)
setInterval(M3, 10000)
setInterval(M4, 100)
setInterval(M5, 50000)

//button watch modes
var button = document.createElement('button');
button.innerHTML = 'Modes';
button.style.position = 'absolute';
button.style.top = '95%';
button.style.left = '45px';
button.style.transform = 'translateX(-50%)';
button.style.backgroundColor = 'black';
button.style.color = 'white';
button.style.padding = '15px';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.fontSize = '9px';
button.style.fontWeight = 'bold';
button.style.cursor = 'pointer';
button.style.zIndex = '9999';
button.onclick = function() {
  if (button.style.backgroundColor == 'black') {
    button.style.backgroundColor = 'maroon';
    button.style.color = 'lightpink';
    mode = 'long 50/50';
    button.innerHTML = mode;
  } else {
    if(button.style.backgroundColor == 'maroon'){
    button.style.backgroundColor = 'orangered';
    button.style.color = 'white';
    mode = 'infinite 70/30';
    button.innerHTML = mode;
   } else {
    if(button.style.backgroundColor == 'orangered'){
    button.style.backgroundColor = 'goldenrod';
    button.style.color = 'yellow';
    mode = 'infinity';
    button.innerHTML = mode;
        } else {
    if(button.style.backgroundColor == 'goldenrod'){
    button.style.backgroundColor = 'darkgreen';
    button.style.color = 'lime';
    mode = 'necromancer';
    button.innerHTML = mode;
        } else {
    if(button.style.backgroundColor == 'darkgreen'){
    button.style.backgroundColor = 'black';
    button.style.color = 'white';
    mode = 'none';
    Reset();
    button.innerHTML = 'Modes';
       }
      }
     }
    }
  }
};
document.body.appendChild(button);
//Button2
var button2 = document.createElement('button');
button2.innerHTML = 'New Tab';
button2.style.position = 'absolute';
button2.style.top = '95%';
button2.style.left = '115px';
button2.style.transform = 'translateX(-50%)';
button2.style.backgroundColor = 'gray';
button2.style.color = 'white';
button2.style.padding = '10px';
button2.style.border = 'none';
button2.style.borderRadius = '5px';
button2.style.fontSize = '7px';
button2.style.fontWeight = 'bold';
button2.style.cursor = 'pointer';
button2.style.zIndex = '9999';
button2.onclick = function() {
    var url = window.location.href;
    window.open(url);
}
document.body.appendChild(button2);
//Button3
var button3 = document.createElement('button');
button3.innerHTML = 'Interact with UI? no';
button3.style.position = 'absolute';
button3.style.top = '95%';
button3.style.left = '195px';
button3.style.transform = 'translateX(-50%)';
button3.style.backgroundColor = 'darkred';
button3.style.color = 'white';
button3.style.padding = '10px';
button3.style.border = 'none';
button3.style.borderRadius = '5px';
button3.style.fontSize = '7px';
button3.style.fontWeight = 'bold';
button3.style.cursor = 'pointer';
button3.style.zIndex = '9999';
button3.onclick = function() {
  if (button3.style.backgroundColor == 'darkgreen') {
    button3.style.backgroundColor = 'darkred';
    button3.innerHTML = 'Interact with UI? no';
    uiEnabled = false;
    input.execute("ren_ui true")
    input.execute("ren_scoreboard true")
    input.execute("ren_upgrades true")
    input.execute("ren_stats true")
  } else {
    button3.style.backgroundColor = 'darkgreen';
    button3.innerHTML = 'Interact with UI? yes';
    uiEnabled = true;
  }
}
document.body.appendChild(button3);
//Button4
var button4 = document.createElement('button');
button4.innerHTML = 'Always Shoot? no';
button4.style.position = 'absolute';
button4.style.top = '95%';
button4.style.left = '295px';
button4.style.transform = 'translateX(-50%)';
button4.style.backgroundColor = 'darkred';
button4.style.color = 'white';
button4.style.padding = '10px';
button4.style.border = 'none';
button4.style.borderRadius = '5px';
button4.style.fontSize = '7px';
button4.style.fontWeight = 'bold';
button4.style.cursor = 'pointer';
button4.style.zIndex = '9999';
button4.onclick = function() {
  if (button4.style.backgroundColor == 'darkgreen') {
    button4.style.backgroundColor = 'darkred';
    button4.innerHTML = 'Always Shoot? no';
    alwShoot = false;
  } else {
    button4.style.backgroundColor = 'darkgreen';
    button4.innerHTML = 'Always Shoot? yes';
    alwShoot = true;
  }
}
document.body.appendChild(button4);
//Button5
var button5 = document.createElement('button');
button5.innerHTML = 'Auto Build? yes';
button5.style.position = 'absolute';
button5.style.top = '95%';
button5.style.left = '385px';
button5.style.transform = 'translateX(-50%)';
button5.style.backgroundColor = 'darkgreen';
button5.style.color = 'white';
button5.style.padding = '10px';
button5.style.border = 'none';
button5.style.borderRadius = '5px';
button5.style.fontSize = '7px';
button5.style.fontWeight = 'bold';
button5.style.cursor = 'pointer';
button5.style.zIndex = '9999';
button5.onclick = function() {
  if (button5.style.backgroundColor == 'darkgreen') {
    button5.style.backgroundColor = 'darkred';
    button5.innerHTML = 'Auto Build? no';
    alwUpg = false;
  } else {
    button5.style.backgroundColor = 'darkgreen';
    button5.innerHTML = 'Autobuild? yes';
    alwUpg = true;
  }
}
document.body.appendChild(button5);
//Button6
var button6 = document.createElement('button');
button6.innerHTML = 'Auto Respawn?';
button6.style.position = 'absolute';
button6.style.top = '95%';
button6.style.left = '475px';
button6.style.transform = 'translateX(-50%)';
button6.style.backgroundColor = 'black';
button6.style.color = 'white';
button6.style.padding = '10px';
button6.style.border = 'none';
button6.style.borderRadius = '5px';
button6.style.fontSize = '7px';
button6.style.fontWeight = 'bold';
button6.style.cursor = 'pointer';
button6.style.zIndex = '9999';
button6.onclick = function() {
  if (button6.style.backgroundColor == 'gray') {
    button6.style.backgroundColor = 'black';
    button6.innerHTML = 'Auto Respawn';
          document.body.removeChild(bread3);
          document.body.removeChild(bread4);
          document.body.removeChild(bread5);
          document.body.removeChild(bread6);
          document.body.removeChild(bread7);
  } else {
      if (button6.style.backgroundColor == 'black') {
    button6.style.backgroundColor = 'gray';
    button6.innerHTML = 'Auto Respawn';
      document.body.appendChild(bread3);
      document.body.appendChild(bread4);
    document.body.appendChild(bread5);
    document.body.appendChild(bread6);
    document.body.appendChild(bread7);
    }
  }
}
document.body.appendChild(button6);

const ctx = canvas.getContext("2d");
setTimeout(() => {
    let gui = () => {
        ctx.fillStyle = "white";
        ctx.lineWidth = 8;
        ctx.font = 1.5 + "em Ubuntu";
        ctx.strokeStyle = "Darkred";
        ctx.strokeText(`x: ${real_mouse.x} y: ${real_mouse.y}`,canvas.width/20 + 10, 30);
        ctx.fillText(`x: ${real_mouse.x} y: ${real_mouse.y}`,canvas.width/20 + 10, 30);
        ctx.fillStyle = "white";
        ctx.lineWidth = 6;
        ctx.font = 1.5 + "em Ubuntu";
        ctx.strokeStyle = "Darkred";
        ctx.strokeText(`[X]Freeze Mouse: ${isFrozen}`,canvas.width/20 + 10, 60);
        ctx.fillText(`[X]Freeze Mouse: ${isFrozen}`,canvas.width/20 + 10, 60);
        window.requestAnimationFrame(gui);
    }
    gui();
    setTimeout(() => {
        gui();
    },5000);
}, 1000);

//
var RandName = false;
var RandSymbol = false;
var RandNum = false;
var Randletters= false;
var RandMixed = false;

var tankName;
const names = ['TrollKillerNL', '2115', 'Hitman', 'kacpi69', 'TINAAAAAA', 'Tom', 'Ivan', 'Тащер', 'Team=bad', 'charogne2', 'Jogi', 'Mardo', 'КУНЫЧ', 'hehe', 'ñ', '119wwwwwww', 'AAAAAA!', 'bigsex', 'MW', 'Duck', 'ItLoaded...', '[a]TOXIC', 'PutinCriminal', 'Aura666', 'FRANCE', 'Dominator', 'nigers', 'ChildPunchers', 'xyss', 'Empire', 'THY TC', 'xahnchua', 'ZooB', 'lolypol', '8====D', 'rusni_PiZda', 'team?', 'SmashyTanky', 'UkraineWins', 'LegoNinjago', 'Diep.io', 'TankUpgrades+', 'rbest', 'pacman', '[F-22]', 'Zoom', 'Bird', 'Monsterkill2231', '!*&@(*$!$(*&#', '&*%(@)*$@(%@&$', '𝕭itch♥︎']

// autorespawn by 8_no

var symbols = '!@#$%^&*()/\-+';
var word = '';
var interval = setInterval(function() {
  word = '';
  for (var i = 0; i < 16; i++) {
    word += symbols[Math.floor(Math.random() * symbols.length)];
  }
}, 100);

//
var numbers = '1234567890';
var word1 = '';
var interval1 = setInterval(function() {
  word1 = '';
  for (var i = 0; i < 16; i++) {
    word1 += numbers[Math.floor(Math.random() * numbers.length)];
  }
}, 100);

//
var letters = 'abcdefghijklmnopqrstuvwxyz';
var word2 = '';
var interval2 = setInterval(function() {
  word2 = '';
  for (var i = 0; i < 16; i++) {
    word2 += letters[Math.floor(Math.random() * letters.length)];
  }
}, 100);

//
var mixed = '!@#$%^&*()/\-+1234567890abcdefghijklmnopqrstuvwxyz';
var word3 = '';
var interval3 = setInterval(function() {
  word3 = '';
  for (var i = 0; i < 16; i++) {
    word3 += mixed[Math.floor(Math.random() * mixed.length)];
  }
}, 100);

//
//changed the logic to bypass anticheat
let ingamescreen = document.getElementById("in-game-screen");
function s2() {
   if(ingamescreen.classList.contains("screen") && ingamescreen.classList.contains("active")){
     return;
    }else{
             if (RandName){
             tankName = names[Math.floor(Math.random() * names.length)];
             input.execute("game_spawn " + tankName);
             }
               if(RandSymbol) {
               input.try_spawn(word);
                 }
              if(RandNum) {
               input.try_spawn(word1);
                 }
              if(Randletters) {
               input.try_spawn(word2);
                 }
               if(RandMixed) {
               input.try_spawn(word3);
                 }
    }
}

setInterval(s2, 1000);

//button
var bread3 = document.createElement('button');
bread3.innerHTML = 'Use Random Names? -';
bread3.style.position = 'absolute';
bread3.style.top = '50%';
bread3.style.left = '10%';
bread3.style.transform = 'translateX(-50%)';
bread3.style.backgroundColor = 'darkred';
bread3.style.color = 'white';
bread3.style.padding = '10px';
bread3.style.border = 'none';
bread3.style.borderRadius = '5px';
bread3.style.fontSize = '7px';
bread3.style.fontWeight = 'bold';
bread3.style.cursor = 'pointer';
bread3.style.zIndex = '9999';
bread3.onclick = function() {
  if (bread3.style.backgroundColor == 'darkgreen') {
    bread3.style.backgroundColor = 'darkred';
    bread3.innerHTML = 'Use random Names? -';
    RandName = false;
  } else {
    bread3.style.backgroundColor = 'darkgreen';
    bread3.innerHTML = 'Use Random Names? +';
    RandName = true;
  }
}
var bread4 = document.createElement('button');
bread4.innerHTML = 'Use Random Symbols? -';
bread4.style.position = 'absolute';
bread4.style.top = '50%';
bread4.style.left = '90%';
bread4.style.transform = 'translateX(-50%)';
bread4.style.backgroundColor = 'darkred';
bread4.style.color = 'white';
bread4.style.padding = '10px';
bread4.style.border = 'none';
bread4.style.borderRadius = '5px';
bread4.style.fontSize = '7px';
bread4.style.fontWeight = 'bold';
bread4.style.cursor = 'pointer';
bread4.style.zIndex = '9999';
bread4.onclick = function() {
  if (bread4.style.backgroundColor == 'darkgreen') {
    bread4.style.backgroundColor = 'darkred';
    bread4.innerHTML = 'Use random Symbols? -';
    RandSymbol = false;
  } else {
    bread4.style.backgroundColor = 'darkgreen';
    bread4.innerHTML = 'Use Random Symbols? +';
    RandSymbol = true;
  }
}
var bread5 = document.createElement('button');
bread5.innerHTML = 'Use Random Numbers? -';
bread5.style.position = 'absolute';
bread5.style.top = '40%';
bread5.style.left = '90%';
bread5.style.transform = 'translateX(-50%)';
bread5.style.backgroundColor = 'darkred';
bread5.style.color = 'white';
bread5.style.padding = '10px';
bread5.style.border = 'none';
bread5.style.borderRadius = '5px';
bread5.style.fontSize = '7px';
bread5.style.fontWeight = 'bold';
bread5.style.cursor = 'pointer';
bread5.style.zIndex = '9999';
bread5.onclick = function() {
  if (bread5.style.backgroundColor == 'darkgreen') {
    bread5.style.backgroundColor = 'darkred';
    bread5.innerHTML = 'Use random Numbers? -';
    RandNum = false;
  } else {
    bread5.style.backgroundColor = 'darkgreen';
    bread5.innerHTML = 'Use Random Numbers? +';
    RandNum = true;
  }
}
var bread6 = document.createElement('button');
bread6.innerHTML = 'Use Random letters? -';
bread6.style.position = 'absolute';
bread6.style.top = '60%';
bread6.style.left = '90%';
bread6.style.transform = 'translateX(-50%)';
bread6.style.backgroundColor = 'darkred';
bread6.style.color = 'white';
bread6.style.padding = '10px';
bread6.style.border = 'none';
bread6.style.borderRadius = '5px';
bread6.style.fontSize = '7px';
bread6.style.fontWeight = 'bold';
bread6.style.cursor = 'pointer';
bread6.style.zIndex = '9999';
bread6.onclick = function() {
  if (bread6.style.backgroundColor == 'darkgreen') {
    bread6.style.backgroundColor = 'darkred';
    bread6.innerHTML = 'Use random letters? -';
    Randletters = false;
  } else {
    bread6.style.backgroundColor = 'darkgreen';
    bread6.innerHTML = 'Use Random letters? +';
    Randletters = true;
  }
}
var bread7 = document.createElement('button');
bread7.innerHTML = 'Mixed? -';
bread7.style.position = 'absolute';
bread7.style.top = '70%';
bread7.style.left = '90%';
bread7.style.transform = 'translateX(-50%)';
bread7.style.backgroundColor = 'darkred';
bread7.style.color = 'white';
bread7.style.padding = '10px';
bread7.style.border = 'none';
bread7.style.borderRadius = '5px';
bread7.style.fontSize = '7px';
bread7.style.fontWeight = 'bold';
bread7.style.cursor = 'pointer';
bread7.style.zIndex = '9999';
bread7.onclick = function() {
  if (bread7.style.backgroundColor == 'darkgreen') {
    bread7.style.backgroundColor = 'darkred';
    bread7.innerHTML = 'Mixed? -';
    RandMixed = false;
  } else {
    bread7.style.backgroundColor = 'darkgreen';
    bread7.innerHTML = 'Mixed? +';
    RandMixed = true;
  }
}

//Canvas upgrades
var monstrik = false;
var height = window.innerHeight;
var width = window.innerWidth;
var canvasmode = 'Select Tank';
var canvasupgradesactive = false;

function new_Tank_mode(canvas_md, tank1, tank2, tank3){
    if(canvasmode===canvas_md){
        setTimeout(() => {
            if(tanky.includes(tank1.name)){
                mouse_move(tank1.x, tank1.y);
                click_at(tank1.x, tank1.y);
            }
        }, 500);
        setTimeout(() => {
            if(tanky.includes(tank2.name)){
                mouse_move(tank2.x, tank2.y);
                click_at(tank2.x, tank2.y);
            }
        }, 1000);
        setTImeout(() => {
            if(tanky.includes(tank3.name)){
                mouse_move(tank3.x, tank3.y);
                click_at(tank3.x, tank3.y);
            }
        }, 1500);
    }
}

function CanvasUpgrading() {
   if(canvasupgradesactive){
       new_Tank_mode('Overlord', {name: 'Tank', x: 200, y: 100}, {name: 'Sniper', x: 200, y: 100}, {name: 'Overseer', x: 100, y: 100});
       new_Tank_mode('Anni', {name: 'Tank', x: 100, y:200}, {name: 'Machine Gun', x: 100, y: 100}, {name: 'Destroyer', x: 200, y: 100});
       new_Tank_mode('Fighter', {name: 'Tank', x: 200, y: 200}, {name: 'Flank Guard', x: 100, y: 100}, {name: 'Tri-Angle', x: 200, y: 100});
       new_Tank_mode('Octo', {name: 'Tank', x: 100, y: 100}, {name: 'Twin', x: 200, y: 100}, {name: 'Quad Tank', x: 100, y: 100});
   }
}

setInterval(CanvasUpgrading, 2000);

var newbutton = document.createElement('button');
newbutton.innerHTML = 'Canvas Upgrades? no';
newbutton.style.position = 'absolute';
newbutton.style.top = '95%';
newbutton.style.left = '570px';
newbutton.style.transform = 'translateX(-50%)';
newbutton.style.backgroundColor = 'darkred';
newbutton.style.color = 'white';
newbutton.style.padding = '10px';
newbutton.style.border = 'none';
newbutton.style.borderRadius = '5px';
newbutton.style.fontSize = '7px';
newbutton.style.fontWeight = 'bold';
newbutton.style.cursor = 'pointer';
newbutton.style.zIndex = '9999';
newbutton.onclick = function() {
  if (newbutton.style.backgroundColor == 'darkgreen') {
    newbutton.style.backgroundColor = 'darkred';
    newbutton.innerHTML = 'Canvas Upgrades? no';
    document.body.removeChild(newbutton2);
      document.body.removeChild(newbutton3);
      document.body.removeChild(newbutton4);
  } else {
      if (newbutton.style.backgroundColor == 'darkred') {
    newbutton.style.backgroundColor = 'darkgreen';
    newbutton.innerHTML = 'Canvas Upgrades? yes';
    document.body.appendChild(newbutton2);
          document.body.appendChild(newbutton3);
          document.body.appendChild(newbutton4);
    }
  }
}
document.body.appendChild(newbutton);

var newbutton2 = document.createElement('button');
newbutton2.innerHTML = 'Fix Coordinates';
newbutton2.style.position = 'absolute';
newbutton2.style.top = '85%';
newbutton2.style.left = '570px';
newbutton2.style.transform = 'translateX(-50%)';
newbutton2.style.backgroundColor = 'black';
newbutton2.style.color = 'white';
newbutton2.style.padding = '10px';
newbutton2.style.border = 'none';
newbutton2.style.borderRadius = '5px';
newbutton2.style.fontSize = '7px';
newbutton2.style.fontWeight = 'bold';
newbutton2.style.cursor = 'pointer';
newbutton2.style.zIndex = '9999';
newbutton2.onclick = function() {
              monstrik = confirm("Warning the window will be closed and reopened, Continue?");
           if(monstrik){
                if (height != 1240 || width != 1974) {
                  var link = window.location.href;
                  window.close();
                  window.open(link, '_blank', 'height=1240,width=1974');
                    }
           }
}

var newbutton3 = document.createElement('button');
newbutton3.innerHTML = 'Activate? no';
newbutton3.style.position = 'absolute';
newbutton3.style.top = '75%';
newbutton3.style.left = '570px';
newbutton3.style.transform = 'translateX(-50%)';
newbutton3.style.backgroundColor = 'darkred';
newbutton3.style.color = 'white';
newbutton3.style.padding = '10px';
newbutton3.style.border = 'none';
newbutton3.style.borderRadius = '5px';
newbutton3.style.fontSize = '7px';
newbutton3.style.fontWeight = 'bold';
newbutton3.style.cursor = 'pointer';
newbutton3.style.zIndex = '9999';
newbutton3.onclick = function() {
  if (newbutton3.style.backgroundColor == 'darkgreen') {
    newbutton3.style.backgroundColor = 'darkred';
    newbutton3.innerHTML = 'Activate? no';
    canvasupgradesactive = false;
  } else {
      if (newbutton3.style.backgroundColor == 'darkred') {
    newbutton3.style.backgroundColor = 'darkgreen';
    newbutton3.innerHTML = 'Activate? yes';
    canvasupgradesactive = true;
    }
  }
}

var newbutton4 = document.createElement('button');
newbutton4.innerHTML = 'Select Tank';
newbutton4.style.position = 'absolute';
newbutton4.style.top = '65%';
newbutton4.style.left = '570px';
newbutton4.style.transform = 'translateX(-50%)';
newbutton4.style.backgroundColor = 'black';
newbutton4.style.color = 'white';
newbutton4.style.padding = '10px';
newbutton4.style.border = 'none';
newbutton4.style.borderRadius = '5px';
newbutton4.style.fontSize = '7px';
newbutton4.style.fontWeight = 'bold';
newbutton4.style.cursor = 'pointer';
newbutton4.style.zIndex = '9999';
newbutton4.onclick = function() {
  if (newbutton4.style.backgroundColor == 'black') {
    newbutton4.style.backgroundColor = 'maroon';
    newbutton4.style.color = 'lightpink';
    canvasmode = 'Overlord';
    newbutton4.innerHTML = canvasmode;
  } else {
      if(newbutton4.style.backgroundColor == 'maroon'){
    newbutton4.style.backgroundColor = 'orangered';
    newbutton4.style.color = 'white';
    canvasmode = 'Anni';
    newbutton4.innerHTML = canvasmode;
   } else {
       if(newbutton4.style.backgroundColor == 'orangered'){
    newbutton4.style.backgroundColor = 'goldenrod';
    newbutton4.style.color = 'yellow';
    canvasmode = 'Fighter';
    newbutton4.innerHTML = canvasmode;
        } else {
    if(newbutton4.style.backgroundColor == 'goldenrod'){
    newbutton4.style.backgroundColor = 'darkgreen';
    newbutton4.style.color = 'lime';
    canvasmode = 'Octo';
    newbutton4.innerHTML = canvasmode;
        } else {
    if(newbutton4.style.backgroundColor == 'darkgreen'){
    newbutton4.style.backgroundColor = 'black';
    newbutton4.style.color = 'white';
    canvasmode = 'Select Tank'
    newbutton4.innerHTML = canvasmode;
      }
     }
   }
  }
 }
}

//tutorial
var tutorialbutton = document.createElement('button');
tutorialbutton.innerHTML = '?';
tutorialbutton.style.position = 'absolute';
tutorialbutton.style.top = '90%';
tutorialbutton.style.left = '50px';
tutorialbutton.style.transform = 'translateX(-50%)';
tutorialbutton.style.backgroundColor = 'purple';
tutorialbutton.style.color = 'white';
tutorialbutton.style.padding = '10px';
tutorialbutton.style.border = 'none';
tutorialbutton.style.borderRadius = '5px';
tutorialbutton.style.fontSize = '7px';
tutorialbutton.style.fontWeight = 'bold';
tutorialbutton.style.cursor = 'pointer';
tutorialbutton.style.zIndex = '9999';
tutorialbutton.onclick = function() {
  if (tutorialbutton.style.backgroundColor == 'gray') {
    tutorialbutton.style.backgroundColor = 'purple';
    tutorialbutton.innerHTML = '?';
          document.body.removeChild(square);
          document.body.removeChild(tutorialtext);
  } else {
      if (tutorialbutton.style.backgroundColor == 'purple') {
    tutorialbutton.style.backgroundColor = 'gray';
    tutorialbutton.innerHTML = '?';
      document.body.appendChild(square);
      document.body.appendChild(tutorialtext);
    }
  }
}
document.body.appendChild(tutorialbutton);

var square = document.createElement('div');
square.style.position = 'absolute';
square.style.top = '0px';
square.style.left = '0px';
square.style.width = '100%';
square.style.height = '100%';
square.style.backgroundColor = 'black';
square.style.opacity = 0.85;

var tutorialtext = document.createElement('div');
tutorialtext.innerHTML = 'Hello User! You clicked this button if you have some questions about the script and I will try answering them right now!<br><br>So lets start with the main functions: <br><br>1. Modes:<br>Used to repel Drones from base and farm from destroying shapes without leaving the base. <br>Once you click it the Drone Repel Mode switches. For example long 50/50 will send your drones 50 seconds out and 50 seconds back. To turn off all modes just switch until it says: (Modes) again.<br><br>2. New Tab<br>When clicked, copies current link, opens new Tab and pastes the copied link.<br><br>3. Interact with UI?<br>when active certain elements will dissapear from screen once your mouse is at their position.<br><br>4. Always Shoot?<br>When active presses Space infinitly<br><br>5.Auto Build?<br>When active, detects your current tank and automatically finds the best build for it (Works only for 4 tanks right now)<br>At lvl 15 you can notice that tanks like Twin or Sniper are renamed to Octo? and OL? = Overlord?. The tank name with ? at the end is the tank that will get the build in the end.<br><br>6. Autorespawn?<br>when clicked Multiple modes will apear on screen.<br>Use random Names: uses the names from const = names[].<br>Use random letters/numbers/symbols: well it uses random letters/numbers/symbols. Mixed: combines previous 3 modes into 1.<br><br>7. Canvas Upgrades:<br>When clicked 3 new buttons will appear: Select Tank, Activate? and Fix Coordinates.<br>First you have to click on Select Tank until you found the tank you want to upgrade to. Then click activate to turn the entire thing on.<br>If you are in the game, at least lvl 15, selected some tank and nothing is happening trying doing this:<br>1)Do not move the mouse for a while. 2)Check if Activate is green. And the final step is not recommended to use, but will fix the issue to 100%.<br>Press Fix Coordinates Button. This will close your window and reopen it in a size that will match the needed coordinates for your mouse.<br>If everything done correctly the tank you chose should be upgraded every 2 seconds.<br><br>8. Bot<br>MoveMouse?: My customisable version of Autospin<br>Change Spin Speed: you can change the duration of 1 full spin, changing the spinning speed<br>Flip Fire: I remade my own flipfire script, the only mode I have right now is gunnertrapper (the timings are not correct yet) <br><br><br>Other Modes not mentioned yet:<br><br>Freeze Mouse:<br>When you press X it freezes/unfreezes your mouse.<br><br>Mouse Coordinates:<br>these are shown at the top of your screen.<br><br>Anni Cooldown:<br>Select Anni/Destroyer/Hybrid and just click somewhere at screen.<br>If you have 3 reload build it will show a red/black button while the cooldown is active. During the cooldown you can not shoot.';
tutorialtext.style.position = 'absolute';
tutorialtext.style.zIndex = "100";
tutorialtext.style.color = 'orange';
tutorialtext.style.top = '5%';
tutorialtext.style.left = '5%';

//Bot spin

var MouseBot = false;
var KeysBot = false;
var SpinSpeed = 5000;
var intervalId;

function BotBy8no(){
    if(MouseBot){
        setTimeout(() => {
            mouse_move(canvas.width/2 - 215, canvas.height/2 - 21);
        }, SpinSpeed/16*1);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 125, canvas.height/2 - 275);
        }, SpinSpeed/16*2);
        setTimeout(() => {
            mouse_move(canvas.width/2, canvas.height/2 - 300);
        }, SpinSpeed/16*3);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 125, canvas.height/2 - 275);
        }, SpinSpeed/16*4);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 215, canvas.height/2 - 215);
        }, SpinSpeed/16*5);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 275, canvas.height/2 - 125);
        }, SpinSpeed/16*6);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 300, canvas.height/2);
        }, SpinSpeed/16*7);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 275, canvas.height/2 + 125);
        }, SpinSpeed/16*8);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 215, canvas.height/2 + 215);
        }, SpinSpeed/16*9);
        setTimeout(() => {
            mouse_move(canvas.width/2 + 125, canvas.height/2 + 275);
        }, SpinSpeed/16*10);
        setTimeout(() => {
            mouse_move(canvas.width/2, canvas.height/2 + 300);
        }, SpinSpeed/16*11);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 125, canvas.height/2 + 275);
        }, SpinSpeed/16*12);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 215, canvas.height/2 + 215);
        }, SpinSpeed/16*13);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 275, canvas.height/2 + 125)
        }, SpinSpeed/16*14);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 315, canvas.height/2);
        }, SpinSpeed/16*15);
        setTimeout(() => {
            mouse_move(canvas.width/2 - 275, canvas.height/2 - 125);
        }, SpinSpeed/16*16);
        startBotBy8no();
    }
}

function startBotBy8no() {
  intervalId = setTimeout(BotBy8no, SpinSpeed);
}

function stopBotBy8no() {
  clearTimeout(intervalId);
}

//flipfire

var intervalId2;
var FlipFire = false;

function FlipFireBot() {
  if (FlipFire) {
   setTimeout(() => {
      key_down("Space");
    setTimeout(() => {
      freezeMouseMove();
      setTimeout(() => {
        mouse_move(canvas_mouse.x*2, canvas_mouse.y*2)
        setTimeout(() => {
          unfreezeMouseMove();
          setTimeout(() => {
            freezeMouseMove();
            setTimeout(() => {
              mouse_move(real_mouse.x*2, real_mouse.y*2)
              setTimeout(() => {
                unfreezeMouseMove();
                setTimeout(() => {
                    key_up("Space");
                  FlipFireBot();
                }, 300);
              }, 110);
            }, 60);
          }, 50);
        }, 40);
      }, 20);
    },);
   });
  }
}


function startFlipFire() {
  intervalId2 = setTimeout(FlipFireBot, 350);
}

function stopFlipFire() {
    alwShoot = false;
  clearTimeout(intervalId2);
}

var MyBot = document.createElement('button');
MyBot.innerHTML = 'Bot';
MyBot.style.position = 'absolute';
MyBot.style.top = '95%';
MyBot.style.left = '645px';
MyBot.style.transform = 'translateX(-50%)';
MyBot.style.backgroundColor = 'darkred';
MyBot.style.color = 'white';
MyBot.style.padding = '10px';
MyBot.style.border = 'none';
MyBot.style.borderRadius = '5px';
MyBot.style.fontSize = '7px';
MyBot.style.fontWeight = 'bold';
MyBot.style.cursor = 'pointer';
MyBot.style.zIndex = '9999';
MyBot.onclick = function() {
  if (MyBot.style.backgroundColor == 'darkgreen') {
    MyBot.style.backgroundColor = 'darkred';
    document.body.removeChild(MyBot2);
    document.body.removeChild(MyBot4);
      document.body.removeChild(MyBot5);
  } else {
    if (MyBot.style.backgroundColor == 'darkred') {
      MyBot.style.backgroundColor = 'darkgreen';
      document.body.appendChild(MyBot2);
      document.body.appendChild(MyBot4);
        document.body.appendChild(MyBot5);
    }
  }
}
document.body.appendChild(MyBot);

var MyBot2 = document.createElement('button');
MyBot2.innerHTML = 'MoveMouse? no';
MyBot2.style.position = 'absolute';
MyBot2.style.top = '90%';
MyBot2.style.left = '655px';
MyBot2.style.transform = 'translateX(-50%)';
MyBot2.style.backgroundColor = 'darkred';
MyBot2.style.color = 'white';
MyBot2.style.padding = '10px';
MyBot2.style.border = 'none';
MyBot2.style.borderRadius = '5px';
MyBot2.style.fontSize = '7px';
MyBot2.style.fontWeight = 'bold';
MyBot2.style.cursor = 'pointer';
MyBot2.style.zIndex = '9999';
MyBot2.onclick = function() {
  if (MyBot2.style.backgroundColor == 'darkgreen') {
    MyBot2.style.backgroundColor = 'darkred';
    MyBot2.innerHTML = 'MoveMouse? no';
    unfreezeMouseMove();
    MouseBot = false;
  } else {
    if (MyBot2.style.backgroundColor == 'darkred') {
      MyBot2.style.backgroundColor = 'darkgreen';
      MyBot2.innerHTML = 'MoveMouse? yes';
      freezeMouseMove();
      MouseBot = true;
      startBotBy8no(); // Start the bot when MoveMouse? yes is clicked
    }
  }
}

var MyBot4 = document.createElement('button');
MyBot4.innerHTML = 'Change Spin Speed';
MyBot4.style.position = 'absolute';
MyBot4.style.top = '70%';
MyBot4.style.left = '655px';
MyBot4.style.transform = 'translateX(-50%)';
MyBot4.style.backgroundColor = 'black';
MyBot4.style.color = 'white';
MyBot4.style.padding = '10px';
MyBot4.style.border = 'none';
MyBot4.style.borderRadius = '5px';
MyBot4.style.fontSize = '7px';
MyBot4.style.fontWeight = 'bold';
MyBot4.style.cursor = 'pointer';
MyBot4.style.zIndex = '9999';
MyBot4.onclick = function() {
  var person = prompt('Please enter the duration of the MoveMouse', SpinSpeed);
  if (person !== null) {
    var newSpinSpeed = parseInt(person);
    if (!isNaN(newSpinSpeed)) {
      SpinSpeed = newSpinSpeed;
      stopBotBy8no(); // Stop the current bot
      startBotBy8no(); // Start the bot with the new SpinSpeed
    }
  }
}

var MyBot5 = document.createElement('button');
MyBot5.innerHTML = 'flipfire (GunnerTrapper)';
MyBot5.style.position = 'absolute';
MyBot5.style.top = '85%';
MyBot5.style.left = '655px';
MyBot5.style.transform = 'translateX(-50%)';
MyBot5.style.backgroundColor = 'darkred';
MyBot5.style.color = 'white';
MyBot5.style.padding = '10px';
MyBot5.style.border = 'none';
MyBot5.style.borderRadius = '5px';
MyBot5.style.fontSize = '7px';
MyBot5.style.fontWeight = 'bold';
MyBot5.style.cursor = 'pointer';
MyBot5.style.zIndex = '9999';
MyBot5.onclick = function() {
  if (MyBot5.style.backgroundColor == 'darkgreen') {
    MyBot5.style.backgroundColor = 'darkred';
      FlipFire=false;
    stopFlipFire();
  } else {
    if (MyBot5.style.backgroundColor == 'darkred') {
      MyBot5.style.backgroundColor = 'darkgreen';
        FlipFire=true;
        if(alwShoot){
        button4.click();
        }
      startFlipFire();
    }
  }
}

//Base afk
//10 seconds to corner
//2 seconds out of corner
//4 seconds 1 side
// var Corner = 'Red Out';
// var inBase = false;
// var Team = 'none';

// function CornerCheck() {
//  if(Team == 'Red'){
//   if(Corner == 'Red Out'){
//    key_down(83); key_down(68);
//    setTimeout(() => {
//    key_up(83); key_up(68);
//    key_down(87); key_down(65);
//    }, 10000);
//       setTimeout(() => {
//       key_up(87); key_up(65);
//        }, 12000);
//     Corner = 'Red In';
//   }
//  }
//  if(Team == 'Blue'){
//   if(Corner == 'Blue Out'){
//    key_down(87); key_down(65);
//    setTimeout(() => {
//    key_up(87); key_up(65);
//    key_down(83); key_down(68);
//    }, 10000);
//       setTimeout(() => {
//       key_up(83); key_up(68);
//        }, 12000);
//     Corner = 'Blue In';
//   }
//  }
// }
// setInterval(CornerCheck, 12000);

// function BaseLoop() {
//     if(Corner == 'Red In') {
//         key_down(87);
//         setTimeout(() => {
//         key_up(68);
//         key_down(87);
//          }, 4000);
//         setTimeout(() => {
//             key_up(87);
//             key_down(65);
//         }, 8000);
//         setTimeout(() => {
//             key_up(65);
//             key_down(83);
//         }, 12000);
//         setTimeout(() => {
//             key_up(83);
//             key_down(68);
//         }, 16000);
//     }
// }

// setInterval(BaseLoop, 16000);


//Alternative

// function B0tBy8no(){
// }

// setInterval(B0tBy8no, 1000);
// var MyBot3 = document.createElement('button');
// MyBot3.innerHTML = 'KeyMove? no';
// MyBot3.style.position = 'absolute';
// MyBot3.style.top = '80%';
// MyBot3.style.left = '655px';
// MyBot3.style.transform = 'translateX(-50%)';
// MyBot3.style.backgroundColor = 'darkred';
// MyBot3.style.color = 'white';
// MyBot3.style.padding = '10px';
// MyBot3.style.border = 'none';
// MyBot3.style.borderRadius = '5px';
// MyBot3.style.fontSize = '7px';
// MyBot3.style.fontWeight = 'bold';
// MyBot3.style.cursor = 'pointer';
// MyBot3.style.zIndex = '9999';
// MyBot3.onclick = function() {
//   if (MyBot3.style.backgroundColor == 'darkgreen') {
//     MyBot3.style.backgroundColor = 'darkred';
//     MyBot3.innerHTML = 'KeyMove? no';
//   } else {
//       if (MyBot3.style.backgroundColor == 'darkred') {
//     MyBot3.style.backgroundColor = 'darkgreen';
//     MyBot3.innerHTML = 'KeyMove? yes';
//      Team = 'Red';
//     }
//   }
// }