Diep Mod 2020

[Auto Class Builder / Achievement Changer / Server Selector / Bullet Stacker / Hp values / ViewRange / Aim Assist / Theme Changer]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        Diep Mod 2020
// @namespace   None
// @version     1.25
// @description [Auto Class Builder / Achievement Changer / Server Selector / Bullet Stacker / Hp values / ViewRange / Aim Assist / Theme Changer]
// @author      Ponyo , BJR, SBB, SpadeSquad, Gokky
// @include     *://diep.io/*
// @connect     diep.io
// @grant		GM_addStyle
// @grant		GM_getResourceText
// @grant		GM_setClipboard
// @grant		GM_notification
// @grant		unsafeWindow
// @require     http://code.jquery.com/jquery-3.2.1.slim.min.js
// @require     http://code.jquery.com/jquery-latest.js
// @resource	diepCSS https://belowjobsrock.github.io/DiepMod2020/
// ==/UserScript==
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//https://belowjobsrock.github.io/DiepMod2020/

/* eslint-disable */
let diepCSS = GM_getResourceText("diepCSS");
GM_addStyle(diepCSS);
/* eslint-enable */

(function () {
    "use strict";

    let defaultConfig = {
        "hotkey": {
            "connectUI": "\t" // TAB
        },
        "gameModeName": {
            "ffa": "FFA",
            "survival": "Survival",
            "teams": "2TDM",
            "4teams": "4TDM",
            "dom": "Domination",
            "maze": "Maze",
            "tag": "Tag",
            "sandbox": "Sandbox"
        },
        "team": {
            "blue": [[0, 178, 225, 255], [76, 201, 234, 255]],
            "red": [[241, 78, 84, 255], [245, 131, 135, 255]],
            "green": [[0, 225, 110, 255], [76, 234, 153, 255]],
            "purple": [[191, 127, 245, 255], [210, 165, 248, 255]]
        },
        "settings": {
            "firstRunDisable": false
        },
        "script": {
            "currentServer": {},
            "debugging": false
        }
    };

    const isObject = (obj) => {
        return obj instanceof Object && obj.constructor === Object;
    };

    const dataStorage = {
        set (key, value) {
            localStorage.setItem(key, JSON.stringify(value));
        },
        get (key) {
            const value = localStorage.getItem(key);
            return value && JSON.parse(value);
        }
    };

    (function () {
        let privateConfig;
        unsafeWindow.Config = {};
        const proxify = (obj) => {
            for (const subkey in obj) {
                if (Object.prototype.hasOwnProperty.call(obj, subkey)) {
                    unsafeWindow.Config[subkey] = new Proxy(obj[subkey], {
                        get (target, propKey, receiver) {
                            if (propKey in target) {
                                return Reflect.get(target, propKey, receiver);
                            }
                            throw new ReferenceError("Unknown property: " + propKey);
                        },
                        set (target, propKey, value, receiver) {
                            target[propKey] = value;
                            dataStorage.set("spadepublic", obj);
                            return Reflect.set(target, propKey, value, receiver);
                        }
                    });
                }
            }
        };

        if (dataStorage.get("spadepublic")) {
            privateConfig = dataStorage.get("spadepublic");
        } else {
            dataStorage.set("spadepublic", defaultConfig);
            privateConfig = defaultConfig;
        }

        proxify(privateConfig);

        unsafeWindow.resetConfig = () => {
            dataStorage.set("spadepublic", defaultConfig);
            unsafeWindow.Config = {};
            privateConfig = defaultConfig;
            proxify(privateConfig);
        };
    })();

    let playing = () => {
        return false;
    };

    $(window).on("load", () => {
        (function setBack () {
            try {
                if (unsafeWindow.input.should_prevent_unload) {
                    playing = () => {
                        return !!unsafeWindow.input.should_prevent_unload();
                    };
                }
            } catch (error) {
                setTimeout(() => {
                    setBack();
                }, 100);
            }
        })();
    });

    let canvas, ctx;
    $(() => {
        canvas = $("#canvas").get(0);
        ctx = canvas.getContext("2d");
    });

    HTMLElement.prototype.focus = () => {};
    HTMLElement.prototype.blur = () => {};

    const capitalizeFirstLetter = (string) => {
        return string && string[0].toUpperCase() + string.slice(1);
    };

    const createEl = (elObj, parent) => {
        let element;
        if (typeof elObj === "string") {
            element = $(document.createTextNode(elObj));
        } else {
            element = $(`<${elObj.node}>`);
            if (elObj.att) {
                let attributes = elObj.att;
                for (let key in attributes) {
                    if (attributes.hasOwnProperty(key)) {
                        if (key.charAt(0) === "@") {
                            element.attr(key.substring(1), attributes[key]);
                        } else {
                            element.text(attributes[key]);
                        }
                    }
                }
            }
            if (elObj.evl) {
                element.on(elObj.evl.type, elObj.evl.f);
            }
            if (elObj.child) {
                elObj.child.forEach((node) => {
                    createEl(node, element.get(0));
                });
            }
        }
        if (parent) {
            parent.append(element.get(0));
        }
        return element;
    };

    const scriptBody = $("<body>").get(0);
    createEl({
        node: "div", att: {"@id": "main", "@class": "base"},
        child: [ {
            node: "div", att: {"@class": "top"},
            child: [ {
                node: "h2", att: {"@class": "title"},
                child: [ {
                    node: "span", att: {"@class": "symbol", textContent: ""}
                }, " DiepMod Server Selector ", {
                    node: "span", att: {"@class": "symbol", textContent: ""}
                }, {
                } ]
            }, {
                node: "span", att: {"@class": "menu"},
                child: [ {
                    node: "a", att: {"@class": "menuButton close", textContent: "X"},
                    evl: {
                        type: "click",
                        f: () => {
                            $(".appear").removeClass("appear");
                        }}
                } ]
            }]
        }, {
            node: "lable", att: {textContent: "Gamemode"},
            child: [ {
                node: "select", att: {"@id": "gamemode"}
            } ]
        }, {
            node: "lable", att: {textContent: "Server"},
            child: [ {
                node: "select", att: {"@id": "server"}
            } ]
        }, {
            node: "span", att: {"@id": "more", textContent: ""}
        }, {
            node: "div",
            child: [ {
                node: "button", att: {"@type": "button", "@id": "connect", "@class": "commandButton", textContent: "Connect"},
                evl: {
                    type: "click",
                    f: () => {
                        connectServer();
                        setTimeout(() => {
                            $(".appear").removeClass( "appear" );
                        }, 800);
                    }}
            }, {
                node: "button", att: {"@type": "button", "@id": "disconnect", "@class": "commandButton", textContent: "Disconnect"},
                evl: {
                    type: "click",
                    f: () => {
                        unsafeWindow.m28nOverride = false;
                        unsafeWindow.input.execute("lb_reconnect");
                    }}
            } ]
        }, {
            node: "p", att: {"@class": "ctag", textContent: ""},
            child: [ {
            } ]
        } ]
    }, scriptBody);

    $(() => {});

    $("body").after(scriptBody);

    /* jshint ignore:start */
    const fetchServer = async (mode, times, ids = []) => {
        const url = "https://api.n.m28.io";
        const $serverSelect = $("#server");
        const $moreButton = $("#more");
        $moreButton.addClass("spin");

        for (let i = 0; i < times; i++) {
            try {
                const response = await fetch(`${url}/endpoint/diepio-${mode}/findEach/`);
                const body = await response.json();
                if (body.hasOwnProperty("servers")) {
                    Object.entries(body.servers).forEach(([key, val]) => {
                        if (!ids.some((id) => {
                            return id === val.id;
                        })) {
                            ids.push(val.id);
                            const txt = key.replace(/(linode-|vultr-)/, "") + ` - ${val.id.toUpperCase()}`;
                            $serverSelect.append($("<option>", {
                                "value": JSON.stringify(val),
                                "text": capitalizeFirstLetter(txt)
                            }));
                        }
                    });
                }
            } catch (err) {
                console.error(err);
            }
        }
        $("#server option").detach().sort((a, b) => {
            a = $(a);
            b = $(b);
            return ((a.text() > b.text()) ?
                1 :
                (a.text() < b.text()) ?
                    -1 :
                    0);
        }).appendTo($serverSelect).filter(":first").attr("selected", true);
        $moreButton.on("click", () => {
            fetchServer(mode, 4, ids);
        }).removeClass("spin");
    };
    /* jshint ignore:end */

    $(() => {
        const $gamemode = $("#gamemode");
        Object.entries(unsafeWindow.Config.gameModeName).forEach(([key, val]) => {
            $gamemode.append($("<option>", {
                "value": key,
                "text": val
            }));
        });
        $gamemode.change((event) => {
            $("#server").empty();
            fetchServer($(event.currentTarget).val(), 8, []);
        }).trigger("change");
    });

    $(() => {
        unsafeWindow.m28n.findServerPreference = (endpoint, options, cb) => {
            if (unsafeWindow.m28nOverride)
                options(null, [JSON.parse($( "#server option:selected" ).val())]);
            if (typeof options == "function") {
                cb = options;
                options = {};
            }
            unsafeWindow.m28n.findServers(endpoint, (err, r) => {
                if (err)
                    return cb(err);
                var availableRegions = [];
                for (var region in r.servers) {
                    availableRegions.push(region);
                }
                if (availableRegions.length === 0) {
                    cb("Couldn't find any servers in any region");
                    return;
                }
                if (availableRegions.length === 1) {
                    for (var region in r.servers) {
                        cb(null, [r.servers[region]]);
                        return;
                    }
                }
                unsafeWindow.m28n.findRegionPreference(availableRegions, options, (err, regionList) => {
                    if (err)
                        return cb(err);
                    var serverList = regionList.map((region) => {
                        return r.servers[region];
                    });
                    cb(null, serverList);
                });
            });
        };
    });

    const connectServer = () => {
        if ($("#server option:selected").length === 1) {
            const $autojoin = $("#autojoin");
            const $connect = $("#connect");

            let Observer = new MutationObserver(mutation => {
                mutation.forEach(mutation => {
                    if (mutation.target.style.display === "block") {
                        if ($autojoin.prop("checked")) {
                            const sequence = ["keydown", "keyup"];
                            sequence.forEach(event => {
                                $(canvas).trigger($.Event(event, {
                                    "keyCode": "\r".charCodeAt(0)
                                }));
                            });
                            $(".appear").removeClass("appear");
                        }
                        $connect.removeClass("connecting");
                    } else if (mutation.target.style.display === "none") {
                        if (playing()) {
                            Observer.disconnect();
                        }
                        unsafeWindow.m28nOverride = false;
                    }
                });
            });
            $connect.addClass("connecting");
            unsafeWindow.m28nOverride = true;
            unsafeWindow.input.execute("lb_reconnect");
            Observer.observe($("#textInputContainer").get(0), {
                "attributes": true,
                "attributeFilter": ["style"]
            });
        }
    };

    const WebSocketProxy = new Proxy(unsafeWindow.WebSocket, {
        construct (Target, args) {
            const instance = new Target(...args);

            const messageHandler = (event) => {
                const buffer = new DataView(event.data);
                const opcode = buffer.getUint8(0);
                switch (opcode) {
                case 4:
                    if (typeof unsafeWindow.Config.script.currentServer === "object") {
                        const decoded = new TextDecoder("utf-8").decode(event.data);
                        unsafeWindow.Config.script.currentServer = (/\W*(\w+).?((linode|)-(\w+))/).exec(decoded);
                        unsafeWindow.Config.script.currentServer[4] = capitalizeFirstLetter(unsafeWindow.Config.script.currentServer[4]);
                    }
                    break;
                default:
                    break;
                }
            };

            instance.addEventListener("message", messageHandler);
            return instance;
        }
    });

    unsafeWindow.WebSocket = WebSocketProxy;

    const drawServer = () => {
        const x = window.innerWidth * window.devicePixelRatio / 2;
        const y = window.innerHeight * window.devicePixelRatio * 0.575;
        if (unsafeWindow.Config.script.currentServer.length === 5) {
            ctx.textAlign = "center";
            ctx.font = "25px Ubuntu";
            ctx.lineWidth = 5;
            ctx.strokeStyle = "rgba(0, 0, 0, 1)";
            ctx.strokeText("Server:", x, y);
            ctx.fillStyle = "rgba(255, 255, 255, 1)";
            ctx.fillText("Server:", x, y);

            ctx.font = "35px Ubuntu";
            ctx.lineWidth = 5;
            ctx.strokeStyle = "rgba(0, 0, 0, 1)";
            ctx.strokeText(unsafeWindow.Config.script.currentServer[2], x, y + 45);
            ctx.fillStyle = "rgba(255, 255, 255, 1)";
            ctx.fillText(unsafeWindow.Config.script.currentServer[2], x, y + 45);
        }
    };

    unsafeWindow.requestAnimFrame = (function () {
        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||
            window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) {
                window.setTimeout(callback, 1000 / 60);
            };
    })();

    $(window).on("load", function animate () {
        if ($("#textInputContainer").css("display") === "block" && !playing()) {
            drawServer();
        }
        unsafeWindow.requestAnimFrame(animate);
    });

    const handleKeypress = (event) => {
        const key = String.fromCharCode(event.keyCode);
        switch (key) {
        case unsafeWindow.Config.hotkey.connectUI:
            event.preventDefault();
            event.stopPropagation();
            $("#main").toggleClass("appear");
            break;
        }
    };

    $(document).keydown((event) => {
        handleKeypress(event);
    });

})();






//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(function(){//info
	if(window.updateInfo) return;


	var info = {};
	var info_container = document.createElement("div");
	info_container.style.position = "fixed";
	info_container.style.color = "white";
	info_container.style["pointer-events"] = "none";
	document.body.appendChild(info_container);

	function toggle_info_container(e){
		if(e.key == "i"){
			info_container.style.display = info_container.style.display=="block" ? "none" : "block";
		}
	}
	window.addEventListener("keyup", toggle_info_container);

	window.updateInfo = function(key, value){
		if(!value) delete info[key];
		else info[key] = value;
		var s = "";
		for(var _key in info){
			s += info[_key] + "\n";
		}
		info_container.innerText = s;
	};
})();


(function(){
	var cycleRate = 0.003125; // ms^-1
	var maxAngle = Math.PI * 45 / 180;
	var NCANNON = 3;
	var angleUnit = maxAngle / (NCANNON - 1);

	var tankData = [
        {name: "Tri-angle", cycleRate: 0.003095, maxAngle: Math.PI * 135 / 180, NCANNON: 2},
		{name: "Penta", cycleRate: 0.003095, maxAngle: Math.PI * 45 / 180, NCANNON: 3},
		{name: "SpreadShot", cycleRate: 0.001515, maxAngle: Math.PI * 75 / 180, NCANNON: 6},
		{name: "Octo", cycleRate: 0.003095, maxAngle: Math.PI * 45 / 180, NCANNON: 2},
        {name: "GunnerTrapper",cycleRate: 0.015, maxAngle: Math.PI, NCANNON: 2},
        {name: "TripleTwin", cycleRate: 0.003125, maxAngle: Math.PI * 180 / 180, NCANNON: 2},
        {name: "Streamliner", cycleRate: 0.0625, maxAngle: Math.PI * 15 / 180, NCANNON: 3},
	];
	var tankIndex = 0;

	var measuring = false;

	var effective = false;
	var frameRequest;

	var canvas = window.document.getElementById("canvas");

	var mouseX;
	var mouseY;
	var a = 0;
	var startA = 0;
	var artificialMouseMove = false;

	var disabled = false;

	function onMouseDown(e){
		if(e.button == 2){
			if(!effective){
				startA = a - 50;
				mouseX = e.clientX;
				mouseY = e.clientY;
				canvas.dispatchEvent(new MouseEvent("mousedown", {clientX: mouseX, clientY: mouseY}));
			}
			effective = true;
		}
	}

	function onMouseUp(e){
		if(e.button == 2){
			if(effective){
				canvas.dispatchEvent(new MouseEvent("mouseup", {clientX: mouseX, clientY: mouseY}));
			}
			effective = false;
		}
	}

	function onMouseMove(e){
		if(effective){
			if(!artificialMouseMove){
				e.stopPropagation();
				mouseX = e.clientX;
				mouseY = e.clientY;
			}
		}else{
			mouseX = e.clientX;
			mouseY = e.clientY;
		}
	}

	function update(_a){
		frameRequest = window.requestAnimationFrame(update);
		a = _a;

		if(effective){
			var da = a - startA;
			var state = Math.floor(cycleRate * da * NCANNON) % (NCANNON * 2);
			var state1 = state % NCANNON;
			var state2 = Math.floor(state / NCANNON);
			var angle = angleUnit * state1 * (state1 % 2 == state2 ? 1 : -1);

			var cx = window.innerWidth / 2;
			var cy = window.innerHeight / 2;
			var sin = Math.sin(angle);
			var cos = Math.cos(angle);

			var x = mouseX - cx;
			var y = mouseY - cy;
			var _x = cos * x - sin * y;
			var _y = sin * x + cos * y;
			x = _x + cx;
			y = _y + cy;

			artificialMouseMove = true;
			canvas.dispatchEvent(new MouseEvent("mousemove", {clientX: x, clientY: y}));
			artificialMouseMove = false;
		}
	}

	function onKeyUp(e){
		if(e.key == "Q"){
			disabled = !disabled;
			if(disabled){
				if(measuring){
					cycleRate = 1 / measuring.terminate();
					measuring = false;
				} else stop();
			}else start();
			window.updateInfo && window.updateInfo("off", disabled ? "Disabled." : null);
			return;
		}

		if(disabled) return;

		if(e.key == "R"){
			nextTank();
		}
	}
    function nextTank(){
        changeTank((tankIndex + 1) % tankData.length);
    }
	function changeTank(index){
		var data = tankData[index];
		tankIndex = index;

		cycleRate = data.cycleRate; // ms^-1
		maxAngle = data.maxAngle;
		NCANNON = data.NCANNON;
		angleUnit = maxAngle / (NCANNON - 1);
		window.updateInfo && window.updateInfo("changeTank", "Tank: " + data.name);
	}

	function init(){
		window.addEventListener("keyup", onKeyUp);
		start();
		changeTank(0);
	}

	function start(){
		canvas.addEventListener("mousedown", onMouseDown);
		canvas.addEventListener("mouseup", onMouseUp);
		window.addEventListener("mousemove", onMouseMove, true);
		frameRequest = window.requestAnimationFrame(update);
	}

	function stop(){
		canvas.removeEventListener("mousedown", onMouseDown);
		canvas.removeEventListener("mouseup", onMouseUp);
		window.removeEventListener("mousemove", onMouseMove, true);
		window.cancelAnimationFrame(frameRequest);
		effective = false;
	}


	init();

})();


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//asdasd add line here

  var disabled = false;
   var aimLine = document.createElement("div");
   var centerX;
   var centerY;
   var lineTog = 0;
   var mouseX;
   var mouseY;
   var winX = document.documentElement.clientWidth;
   var winY = document.documentElement.clientHeight;
   var wDown = 0;
   aimLine.setAttribute("id", "divLine");
   document.body.appendChild(createLine( 0, 0, 0, 0));
   aimLine = 0;

   function onKeyUp(e){

		if(e.key == "J"){
      // Line on
        winX = document.documentElement.clientWidth;
        winY = document.documentElement.clientHeight;

            aimLine = document.getElementById("divLine");

         centerX = winX / 2;
         centerY = winY / 2;
         document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
        }
        if(e.key == "j"){
      // Line off

         document.body.appendChild(createLine( 0, 0, 0, 0));
         aimLine = 0;
        }
         if(e.key == "w"){

        centerY = winY / 2;
        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));

        }
        if(e.key == "a"){

        centerX = winX / 2;
        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));

        }
        if(e.key == "s"){

        centerY = winY / 2;
        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));


        }
        if(e.key == "d"){

        centerX = winX / 2;
        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));

        }

   }

   function onKeyDown(e){
        if(e.key == "w"){
        centerY = ((winY / 2) - (winY / 20));

        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));

        }

        if(e.key == "a"){
        centerX = ((winX / 2) - (winX / 40));

        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));



        }
        if(e.key == "s"){


        centerY = ((winY / 2) + (winY / 20));

        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));



        }
        if(e.key == "d"){
        centerX = ((winX / 2) + (winX / 40));

        document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));



        }


   }




function createLineElement(x, y, length, angle) {

    var styles = 'border: 1px dashed #eb8f34; '
               + 'width: ' + length + 'px; '
               + 'height: 0px; '
               + '-moz-transform: rotate(' + angle + 'rad); '
               + '-webkit-transform: rotate(' + angle + 'rad); '
               + '-o-transform: rotate(' + angle + 'rad); '
               + '-ms-transform: rotate(' + angle + 'rad); '
               + 'position: absolute; '
               + 'top: ' + y + 'px; '
               + 'left: ' + x + 'px; ';
    aimLine.setAttribute('style', styles);
    return aimLine;
}


function createLine(x1, y1, x2, y2) {
    var a = x1 - x2,
        b = y1 - y2,
        c = Math.sqrt(a * a + b * b);

    var sx = (x1 + x2) / 2,
        sy = (y1 + y2) / 2;

    var x = sx - c / 2,
        y = sy;

    var alpha = Math.PI - Math.atan2(-b, a);
    return createLineElement(x, y, c, alpha);

  }



    document.onmousemove = handleMouseMove;
    function handleMouseMove(event) {

        if (lineTog = true){
        var eventDoc, doc, body;

        event = event || window.event; // IE-ism

        // If pageX/Y aren't available and clientX/Y are,
        // calculate pageX/Y - logic taken from jQuery.
        // (This is to support old IE)
        if (event.pageX == null && event.clientX != null) {
            eventDoc = (event.target && event.target.ownerDocument) || document;
            doc = eventDoc.documentElement;
            body = eventDoc.body;

            event.pageX = event.clientX +
              (doc && doc.scrollLeft || body && body.scrollLeft || 0) -
              (doc && doc.clientLeft || body && body.clientLeft || 0);
            event.pageY = event.clientY +
              (doc && doc.scrollTop  || body && body.scrollTop  || 0) -
              (doc && doc.clientTop  || body && body.clientTop  || 0 );
        }
//       // Use event.pageX / event.pageY here

               mouseX = event.pageX;
               mouseY = event.pageY;
               document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));


       }
    }


   window.addEventListener("keyup", onKeyUp);
   window.addEventListener("keydown", onKeyDown);

//asdasd
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // *** 変数宣言 *** //

    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext("2d");
    var diepModMenu = document.createElement('div');
    var diepModConsole = "";
    var diepModCommandError = true;
    var lineGen = document.createElement('div');

    // *** 初期化 *** //
    document.title = ( 'DiepMod' );
    styleInit();
    jsInit();
    bodyInit();

    // *** CSSの初期化 *** //
    function styleInit() {
        addGlobalStyle(`div::-webkit-scrollbar{width: 8px;} div::-webkit-scrollbar-track{background: #FFFFFFEE; border: none; border-radius: 10px; box-shadow: inset 0 0 2px #ffc87a55;}div::-webkit-scrollbar-thumb{background: #ffc87a; border-radius: 10px; box-shadow: none;}`);
        addGlobalStyle(`.diepMod-menu{position:absolute; top:55px; left:-770px; padding: 0.5em 1em; margin: 2em 0; width: 400px; background: #FFFFFFEE; border: solid 0px #0082A155; border-radius: 0px;
                        margin: 10px; padding: 10px; line-height: 1.3; overflow: auto; text-align: left; width: 750px; height: 300px;
                        transition-duration: 0.1s;} .diepMod-menu:hover{position:absolute; left:-20px;}`);
        addGlobalStyle(`.diepMod-pretitle{font-size: 34px;}`);
        addGlobalStyle(`.diepMod-subtitle{font-size: 19px;}`);
        addGlobalStyle(`.diepMod-description{font-size: 16px;}`);
        addGlobalStyle(`.diepMod-warning{font-size: 16px; color:#ff9999}`);
        addGlobalStyle(`a {text-decoration: none;} a.diepMod-url:link{color:#FFFFFF} a.diepMod-url:visited{color:#FFFFFF;} a.diepMod-url:hover{color:#ffc87a;text-decoration: underline;} a.diepMod-url:active{color:#FFE66C;}`);
        addGlobalStyle(`.diepHack-hr{position: relative; height: 1px; border-width: 0; background-image: -webkit-linear-gradient(left, transparent 0%,#00B2E1 50%,transparent 100%); background-image: linear-gradient(90deg, transparent 0%,#00B2E1 50%,transparent 100%);}`);
        addGlobalStyle(`.diepMod-Regen{font-size: 16px; color:#EFB28D}`);
        addGlobalStyle(`.diepMod-Health{font-size: 16px; color:#EC66EB}`);
        addGlobalStyle(`.diepMod-Bump{font-size: 16px; color:#9A66EB}`);
        addGlobalStyle(`.diepMod-Speed{font-size: 16px; color:#6D92ED}`);
        addGlobalStyle(`.diepMod-Pen{font-size: 16px; color:#F0D367}`);
        addGlobalStyle(`.diepMod-Damage{font-size: 16px; color:#F16869}`);
        addGlobalStyle(`.diepMod-Reload{font-size: 16px; color:#99EC69}`);
        addGlobalStyle(`.diepMod-Move{font-size: 16px; color:#6DECE9}`);
        addGlobalStyle(`.diepMod-Tanktype{font-size: 22px; color:#fc7f2b}`);
        addGlobalStyle(`.diepMod-Stack{font-size: 18px; color:#eb8f34}`);
        addGlobalStyle(`.diepMod-bigtitle{font-size: 22px;}`);
        addGlobalStyle(`.diepMod-tabInfo{font-size: 18px; color:#99ffcc}`);



        addGlobalStyle(`
                        a.diepMod-button {
                            display: inline-block;
                            margin: 15px 15px 0;
                            padding: .6em 1.1em;
                            font-size: 14px;
                            font-weight: bold;
                            text-decoration: none;
                            outline: none;
                            color: #FFFFFF;
                            text-align center;
                            background-color: #ffc87a;
                            border-radius: 32px;
                            -webkit-background-clip: padding-box;
                            background-clip: padding-box;
                            -webkit-box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #ffc87a;
                            box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #ffc87a;
                            border: none;
                            -webkit-transition: -webkit-box-shadow .3s;
                            transition: box-shadow .3s;
                            cursor: pointer
                        }
                        a.diepMod-button:hover, a.diepMod-button:focus {
                            -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #ffc87a;
                            box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #ffc87a;
                                -webkit-transition-timing-function: cubic-bezier(0.6, 4, 0.3, 0.8);
                            transition-timing-function: cubic-bezier(0.6, 4, 0.3, 0.8);
                            -webkit-animation: gelatine 0.5s 1;
                            animation: gelatine 0.5s 1;
                        }
                        a.diepMod-button-secondary {
                            background: #FFFFFF;
                            -webkit-box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #FFFFFF;
                            box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #FFFFFF;
                        }
                        a.diepMod-button-secondary:hover {
                            -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
                            box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
                        }
                        a.diepMod-button:active, a.diepMod-button-secondary:active {
                            background: #FFFFFF;
                            -webkit-transition-duration: 0;
                            transition-duration: 0;
                            -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
                            box-shadow: 0 0 0 2px #ffc87a, 0 0 0 4px #FFFFFF;
                            color: #ffc87a;
                        }
                        @keyframes gelatine {
                            from, to {
                                -webkit-transform: scale(1, 1);
                                transform: scale(1, 1);
                            }
                            25% {
                                -webkit-transform: scale(0.9, 1.1);
                                transform: scale(0.9, 1.1);
                            }
                            50% {
                                -webkit-transform: scale(1.1, 0.9);
                                transform: scale(1.1, 0.9);
                            }
                            75% {
                                -webkit-transform: scale(0.95, 1.05);
                                transform: scale(0.95, 1.05);
                            }
                            from, to {
                                -webkit-transform: scale(1, 1);
                                transform: scale(1, 1);
                            }
                            25% {
                                -webkit-transform: scale(0.9, 1.1);
                                transform: scale(0.9, 1.1);
                            }
                            50% {
                                -webkit-transform: scale(1.1, 0.9);
                                transform: scale(1.1, 0.9);
                            }
                            75% {
                                -webkit-transform: scale(0.95, 1.05);
                                transform: scale(0.95, 1.05);
                            }
                        }
                        @-webkit-keyframes gelatine {
                            from, to {
                                -webkit-transform: scale(1, 1);
                                transform: scale(1, 1);
                            }
                            25% {
                                -webkit-transform: scale(0.9, 1.1);
                                transform: scale(0.9, 1.1);
                            }
                            50% {
                                -webkit-transform: scale(1.1, 0.9);
                                transform: scale(1.1, 0.9);
                            }
                            75% {
                                -webkit-transform: scale(0.95, 1.05);
                                transform: scale(0.95, 1.05);
                            }
                            from, to {
                                -webkit-transform: scale(1, 1);
                                transform: scale(1, 1);
                            }
                            25% {
                                -webkit-transform: scale(0.9, 1.1);
                                transform: scale(0.9, 1.1);
                            }
                            50% {
                                -webkit-transform: scale(1.1, 0.9);
                                transform: scale(1.1, 0.9);
                            }
                            75% {
                                -webkit-transform: scale(0.95, 1.05);
                                transform: scale(0.95, 1.05);
                            }
                       }
                `);
        function addGlobalStyle(css) {
            var head, style;
            head = document.getElementsByTagName('head')[0];
            if (!head) {
                return;
            }
            style = document.createElement('style');
            style.type = 'text/css';
            style.innerHTML = css;
            head.appendChild(style);
        }
    }

    // *** JSの初期化 *** //
    function jsInit() {
        addGlobalJavaScript(`
            function achievementFlag(aflag){
                var achievementCode = JSON.parse('{"A::1ba4250a398116e7_1":"' + String(aflag) + '","A::1c00693fbf538316_1":"' + String(aflag) + '","A::22d84fdc78b1f1ae_1":"' + String(aflag) + '","A::22fd2ee6d05881d6_1":"' + String(aflag) + '","A::256245339c3742d2_1":"10000","A::2780b5743fe93789_1":"' + String(aflag) + '","A::300ddd6f1fb3d69d_1":"500","A::33e4cb47afd5602f_1":"10","A::3fd17b5d35c36670_1":"' + String(aflag) + '","A::4d545ac615beec40_1":"' + String(aflag) + '","A::4eebb78f4ee19cba_1":"' + String(aflag) + '","A::54084a4936c7e37_1":"' + String(aflag) + '","A::5613de303c7e06f0_1":"' + String(aflag) + '","A::5892e09831854ad2_1":"' + String(aflag) + '","A::5dbb422e510cec75_1":"' + String(aflag) + '","A::6502bcb56dfbc0e3_1":"' + String(aflag) + '","A::6520a970c68efb85_1":"' + String(aflag) + '","A::6d07f075d9877ab_1":"' + String(aflag) + '","A::6d671cfa6dceb09_1":"500","A::71c663fb258f5243_1":"' + String(aflag) + '","A::723c26b6a37fccbb_1":"100","A::76646f423e5d6bc4_1":"' + String(aflag) + '","A::8221180ec6d53232_1":"10000","A::87e48332e9161b3d_1":"' + String(aflag) + '","A::8abd923027114f9e_1":"1000","A::8b83f81f510fd136_1":"10","A::8b8fe153a4965c63_1":"' + String(aflag) + '","A::8eeec8c270ef92be_1":"' + String(aflag) + '","A::9898db9ff6d3c1b3_1":"' + String(aflag) + '","A::9953423e884422b6_1":"100","A::9f0edada2bd7cd6_1":"' + String(aflag) + '","A::a402fdb3f5cebf99_1":"' + String(aflag) + '","A::a81a738312c7705d_1":"' + String(aflag) + '","A::b8b3e7fd58ff6706_1":"' + String(aflag) + '","A::b95a9621ccccad3c_1":"' + String(aflag) + '","A::bb9188cddc9d5b1f_1":"100","A::bdf3e0a1c4ebcaee_1":"' + String(aflag) + '","A::cdf66074bb5ce7fa_1":"' + String(aflag) + '","A::d3e4829583362b48_1":"3000","A::d583013681f15fcc_1":"' + String(aflag) + '","A::d932ec7312510a14_1":"10","A::e1f4f3e6a5c9bacb_1":"' + String(aflag) + '","A::e6111736c85494e9_1":"' + String(aflag) + '","A::eb9792219de8f755_1":"' + String(aflag) + '","A::ecea90c4be06d999_1":"' + String(aflag) + '","A::eef89695be793c7f_1":"100","A::f3618c60205d7ded_1":"' + String(aflag) + '","A::f73016825baab042_1":"100","A::fc3b3faf73bae216_1":"' + String(aflag) + '","A::bae942e2191270e_1":"' + String(aflag) + '"}');
                Object.keys(achievementCode).forEach((k) => {localStorage.setItem(k, achievementCode[k])});
                location.reload(true);
            };
        `);
        function addGlobalJavaScript(js) {
            var head, script;
            head = document.getElementsByTagName('head')[0];
            if (!head) {
                return;
            }
            script = document.createElement('script');
            script.type = 'text/javascript';
            script.innerHTML = js;
            head.appendChild(script);
        }
    }

    // *** HTMLの初期化 ***//
    function bodyInit() {


        document.getElementsByTagName('body')[0].appendChild(diepModMenu);
        diepModMenu.style = "position:absolute; top:55px; left:0px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-variant: normal; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;";
        diepModMenu.innerHTML = `
        <div class="diepMod-menu" oncopy="return false;" onselectstart="return false;" oncontextmenu="return false;">
               <td><a class="diepMod-Stack">&nbsp;&nbsp;Press Tab to open server selector.&nbsp;&nbsp;&nbsp;</a></td>
               <td><a href="https://spade-squad.com/" class="diepMod-Speed">Spade Squad Discord</a></td>
               <hr class="diepMod-hr" />
               <div class="diepMod-subtitle">&nbsp;&nbsp;Themes
               <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x555555');input.execute('net_replace_color 1 0x999999');input.execute('net_replace_color 2 0x00B1DE');input.execute('net_replace_color 3 0x00B1DE');input.execute('net_replace_color 4 0xF14E54');input.execute('net_replace_color 5 0xBE7FF5');input.execute('net_replace_color 6 0x00F46C');input.execute('net_replace_color 7 0x89FF69');input.execute('net_replace_color 8 0xFFE869');input.execute('net_replace_color 9 0xFC7677');input.execute('net_replace_color 10 0x768DFC');input.execute('net_replace_color 11 0xFF77DC');input.execute('net_replace_color 12 0xFFE869');input.execute('net_replace_color 13 0x44FFA0');input.execute('net_replace_color 14 0xBBBBBB');input.execute('net_replace_color 15 0xFF0000');input.execute('net_replace_color 16 0xFF0000');input.execute('net_replace_color 17 0xC0C0C0');input.execute('ren_background_color 0xCDCDCD');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 0x000000');return false;">Default</a></td>
               <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x000000');input.execute('net_replace_color 1 0x000000');input.execute('net_replace_color 2 0x99FF99');input.execute('net_replace_color 3 0x0000FF');input.execute('net_replace_color 4 0xFF0000');input.execute('net_replace_color 5 0x990099');input.execute('net_replace_color 6 0x00FF00');input.execute('net_replace_color 7 0xFFFFFF');input.execute('net_replace_color 8 0xFFFFFF');input.execute('net_replace_color 9 0xFFBBBB');input.execute('net_replace_color 10 0xCCCCFF');input.execute('net_replace_color 11 0xFF69B4');input.execute('net_replace_color 12 0xFFFF00');input.execute('net_replace_color 13 0xFFFF00');input.execute('net_replace_color 14 0x888888');input.execute('net_replace_color 15 0x0000FF');input.execute('net_replace_color 16 0xBBBB00');input.execute('net_replace_color 17 0x777777');input.execute('ren_background_color 0xCDCDCD');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 0x000000');return false;">Dark</a></td>
               <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 4737096');input.execute('net_replace_color 1 10987439');input.execute('net_replace_color 2 10987439');input.execute('net_replace_color 3 10987439');input.execute('net_replace_color 4 13461149');input.execute('net_replace_color 5 13461149');input.execute('net_replace_color 6 13461149');input.execute('net_replace_color 7 0x89FF69');input.execute('net_replace_color 8 15714123');input.execute('net_replace_color 9 15714123');input.execute('net_replace_color 10 15714123');input.execute('net_replace_color 11 15714123');input.execute('net_replace_color 12 0xFFE869');input.execute('net_replace_color 13 9092159');input.execute('net_replace_color 14 9092159');input.execute('net_replace_color 15 9092159');input.execute('net_replace_color 16 0xFF0000');input.execute('net_replace_color 17 0xC0C0C0');input.execute('ren_background_color 14408667');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 12499903');input.execute('ren_minimap_border_color 4737096');input.execute('ren_health_background_color 4737096');input.execute('ren_xp_bar_fill_color 15714123');input.execute('ren_score_bar_fill_color 9092159');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 10987439');input.execute('ui_replace_colors 3974347 12183678 14696001 16642944');return false;">Arras</a></td>
               <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x555555');input.execute('net_replace_color 1 0x999999');input.execute('net_replace_color 2 0x00e1ff');input.execute('net_replace_color 3 0x00e1ff');input.execute('net_replace_color 4 0xff0c00');input.execute('net_replace_color 5 0x7200ff');input.execute('net_replace_color 6 0x04ff00');input.execute('net_replace_color 7 0x04ff00');input.execute('net_replace_color 8 0xeeff00');input.execute('net_replace_color 9 0xFC7677');input.execute('net_replace_color 10 0x0000ff');input.execute('net_replace_color 11 0xf600ff');input.execute('net_replace_color 12 0xeeff00');input.execute('net_replace_color 13 0x00ff00');input.execute('net_replace_color 14 0xa3a3a3');input.execute('net_replace_color 15 0xff0c00');input.execute('net_replace_color 16 0xeeff00');input.execute('net_replace_color 17 0xa3a3a3');input.execute('net_replace_color 18 0xa3a3a3');input.execute('ren_background_color 0xd9d9d9');input.execute('net_replace_color 18 0xa3a3a3');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_stroke_soft_color_intensity 1');return false;">Simple</a></td>

               <hr class="diepMod-hr" />

               <div class="diepMod-subtitle">&nbsp;&nbsp;Health Values
                 <td><a class="diepMod-button" onclick="input.execute('ren_raw_health_values = true');input.execute('ren_health_background_color 0x000000');return false;">Show</a></td>
                 <td><a class="diepMod-subtitle">Client FPS</td>
                 <td><a class="diepMod-button" onclick="input.execute('ren_fps = true');return false;">Show</a></td>
                 <td><a class="diepMod-subtitle">Map ViewRange</td>
                 <td><a class="diepMod-button" onclick="input.execute('ren_minimap_viewport = true');return false;">Show</a></td>
                   <br>
               <hr class="diepMod-hr" />



                <td><a class="diepMod-Stack">&nbsp;&nbsp;Use Right click to stack bullets, make sure auto fire and rotate are off.</td><br />


                 <td><a class="diepMod-subtitle"> &nbsp;&nbsp;Toggle Stack Shoot: &nbsp;&nbsp; </td>
                 <td><a class="diepMod-Tanktype"> Shift + Q &nbsp;&nbsp;&nbsp;&nbsp;</td>
                 <td><a class="diepMod-subtitle"> Change Stack Type: &nbsp;&nbsp; </td>
                 <td><a class="diepMod-Tanktype"> Shift + R &nbsp;&nbsp</td> <br>
             <hr class="diepMod-hr" />
                 <td><a class="diepMod-subtitle"> &nbsp;&nbsp;&nbsp;Enable Bullet Line: &nbsp;&nbsp; </td>
                 <td><a class="diepMod-Tanktype"> &nbsp;Shift + J &nbsp;&nbsp;&nbsp;&nbsp;</td>

                 <td><a class="diepMod-subtitle"> &nbsp;&nbsp;&nbsp;Disable Bullet Line: &nbsp;&nbsp; </td>
                 <td><a class="diepMod-Tanktype"> &nbsp;&nbsp;&nbsp;J &nbsp;&nbsp;&nbsp;&nbsp;</td>


             <hr class="diepMod-hr" />
             <td><a class="diepMod-bigtitle">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Auto Builds</a></td>
                 <td><a class="diepMod-button" onclick="input.execute('game_stats_build 999999999999999999999999999999999');return false;">Reset</a></td>

            <table>
                  <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 1111111');return false;"><span class="diepMod-Regen">Health Regen</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 2222222');return false;"><span class="diepMod-Health">Max Health</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 3333333');return false;"><span class="diepMod-Bump">Body Dmg</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 4444444');return false;"><span class="diepMod-Speed">Bullet Speed</span></a></td>
                  </tr>
                  <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 5555555');return false;"><span class="diepMod-Pen">Bullet Pen</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 6666666');return false;"><span class="diepMod-Damage">Bullet Dmg</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 7777777');return false;"><span class="diepMod-Reload">Reload</span></a></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 8888888');return false;"><span class="diepMod-Move">Move Speed</span></a></td>
                  </tr>
            </table>
          </div>
 

            <table>

                <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456784567845678456745674567456788');return false;">Attacker</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">0</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">5</span></span></td>

                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456456845684563458642586485638328');return false;">Drone</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">2</span> / <span class="diepMod-Bump">3</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>


                </tr>
                <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 332231332323121228881888187777777');return false;">Booster</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">5</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">7</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">0</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>

                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 458845457784785576546768678456768');return false;">Fighter</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">0</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">6</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">6</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>

                </tr>
                <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 567567567567567567567222222288113');return false;">Mineer</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">2</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">1</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">2</span></span></td>

                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 123232323232321818838888238238238');return false;">Smasher</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">3</span> / <span class="diepMod-Health">10</span> / <span class="diepMod-Bump">10</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">0</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">10</span></span></td>

                </tr>
                <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 222113333333222211111686886868688');return false;">BaitSter</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">7</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">7</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">5</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">7</span></span></td>

                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456741567425671456742567526754674');return false;">Penta</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">2</span> / <span class="diepMod-Health">3</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">0</span></span></td>

                </tr>
                <tr>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456456456845168456845684562211888');return false;">Manager</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">3</span> / <span class="diepMod-Health">2</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">7</span></span></td>
                    <td><a class="diepMod-button" onclick="input.execute('game_stats_build 567567567567567567567822222288881');return false;">Multi</a></td>
                    <td><span class="diepMod-description"><span class="diepMod-Regen">1</span> / <span class="diepMod-Health">6</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">5</span></span></td>

</tr>


            </table>
              <hr class="diepMod-hr" />
              <div class="diepMod-subtitle">&nbsp;&nbsp;&nbsp;&nbsp;Achievements</div>
              <table>
                  <tr>
                     <td><a class="diepMod-button" onclick="achievementFlag(1);return false;">Get all achievements</a></td>
                      <td><a class="diepMod-button" onclick="achievementFlag(0);return false;">Remove all achievements</a></td>
                  </tr>
                 <div>
                  <tr>
                       <td><span class="diepMod-warning">&nbsp;&nbsp;This will reload the page.</span></td>
                  </tr>
             </table>

         </div>
        `;
   }