Greasy Fork is available in English.
Press Q to toggle, must be in base at least once in a lifetime so the script knows what team you are in
- // ==UserScript==// @name Diep.io Auto-leveler Bot// @namespace http://tampermonkey.net/// @version 2024-03-24 - 2024-04-14// @description Press Q to toggle, must be in base at least once in a lifetime so the script knows what team you are in// @author Mi300// @match https://diep.io/*// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==// @license Apache License 2.0// @grant none// @run-at document-start// ==/UserScript==/* --------HOW TO USE--------// 1. Use in 2tdm or 4tdm. in any other gamemode, it breaks!// 2. Press Q to toggle on / off// 3. Player must be in their base at least once so the script knows what team they are in// 4. If you get disconnected by the anti-cheat just refresh the page it should fix it// 5. The script is only functional if you are on the tab or if the tab is a seperate window// 6. If you see any issues tell me on discord (Mi300), but I probably won't do anything about it//// --------------------------*/const ARENA_WIDTH = 26000;const ARENA_HEIGHT = 26000;const T4_BASE_WIDTH = 3900;const T4_BASE_HEIGHT = 3900;const T2_BASES = [{id: 0,name: "blue",hex: "#00b2e1",x: 0,y: 0,cX: 0,cY: 0,dirX: 1,dirY: 1,},{id: 3,name: "red",hex: "#f14e54",x: 23500,y: 0,cX: ARENA_WIDTH,cY: ARENA_HEIGHT,dirX: -1,dirY: 1,},]const T4_BASES = [{id: 0,name: "blue",hex: "#00b2e1",x: 0,y: 0,cX: 0,cY: 0,dirX: 1,dirY: 1,},{id: 1,name: "purple",hex: "#bf7ff5",x: 22100,y: 0,cX: 0,cY: ARENA_HEIGHT,dirX: -1,dirY: 1,},{id: 2,name: "green",hex: "#00e16e",x: 0,y: 22100,cX: ARENA_WIDTH,cY: 0,dirX: 1,dirY: -1,},{id: 3,name: "red",hex: "#f14e54",x: 22100,y: 22100,cX: ARENA_WIDTH,cY: ARENA_HEIGHT,dirX: -1,dirY: -1,},]alert("Auto Leveler: Press Q to toggle on / off.")let OMG = setInterval(function(){if(!window.input){return;}clearInterval(OMG);const canvas = document.getElementById("canvas");const ctx = canvas.getContext("2d");let colors = {minimapArrow: '#000000',players: '#f14e54',squares: '#ffe869',triangles: '#fc7677',pentagons: '#768dfc',alphaPentagons: '#768dfc',bullets: '#f14e54',drones: '#f14e54',crashers: '#f177dd',necromancerDrone: '#fcc376',}let enemies = [];let squares = [];let tempsquares = [];let triangles = [];let temptriangles = [];let pentagons = [];let temppentagons = [];let dead = true;let baseArea;let inBase = true;let goal;let toggled = false;let lastCheck = Date.now();let is2T = false;let minimapArrow = [0, 0];let minimapPos = [0, 0];let minimapDim = [0, 0];let playerPos = [0, 0];document.addEventListener("keydown", function(e){if(e.key == "q"){toggled = !toggled;setTimeout(function(){input.key_up(87);input.key_up(83);input.key_up(65);input.key_up(68);},200);}});function getCentre(vertices) {let centre = [0, 0];vertices.forEach (vertex => {centre [0] += vertex[0]centre [1] += vertex[1]});centre[0] /= vertices.length;centre[1] /= vertices.length;return centre;}function getClosest(entities) {let acc = [[0, 0], 0]for (let i = 0; i < entities.length; i ++) {const accumulator = getDist (acc[0], [canvas.width / 2, canvas.height / 2])[0];const current = getDist (entities[i][0], [canvas.width / 2, canvas.height / 2])[0];if (current < accumulator) acc = entities[i];}return acc;}function invertCoordinate(coord){return [canvas.width - coord[0], canvas.height - coord[1]];}function getDist(t1, t2){const distX = t1[0] - t2[0];const distY = t1[1] - t2[1];return [Math.hypot(distX, distY), distX, distY];};function hook(target, callback){function check(){window.requestAnimationFrame(check)const func = CanvasRenderingContext2D.prototype[target]if(func.toString().includes(target)){CanvasRenderingContext2D.prototype[target] = new Proxy (func, {apply (method, thisArg, args) {callback(thisArg, args)return Reflect.apply (method, thisArg, args)}});}}window.requestAnimationFrame(check)}let calls = 0;let points = [];hook('beginPath', function(thisArg, args){calls = 1;points = [];});hook('moveTo', function(thisArg, args){if (calls == 1) {calls+=1;points.push(args)} else {calls = 0;}});hook('lineTo', function(thisArg, args){if (calls >= 2 && calls <= 6) {calls+=1;points.push(args)} else {calls = 0;}});hook('fill', function(thisArg, args){if(thisArg.fillStyle == "#00e16e"){lastCheck = Date.now();}if(calls >= 4 && calls <= 6) {const centre = getCentre(points);const list = calls == 4 ? triangles : calls == 5 ? squares : pentagons;if(thisArg.globalAlpha < 1){return;}if(thisArg.fillStyle == "#000000"){if(true){minimapArrow = centre;}return;}if(!baseArea){return;}if((calls == 5 || calls == 4) && ["#00b2e1", "#bf7ff5", "#00e16e", "#f14e54"].includes(thisArg.fillStyle)){if(baseArea.hex == thisArg.fillStyle){return;}enemies.push([centre, 0, thisArg.fillStyle])return;}if (!['#ffe869', '#fc7677', '#768dfc'].includes(thisArg.fillStyle)) {let acc = [[0, 0], 0]for (let i = 0; i < list.length; i ++) {const accumulator = getDist (acc[0], centre)[0];const current = getDist (list[i][0], centre)[0];if (current < accumulator) acc = list[i];}if(getDist(acc[0], centre)[0] < 50){if(acc[2]){if(acc[2] == thisArg.fillStyle){acc[1]++;}else{acc[1] = 0;}}if(acc[1] > 2){return;}if(calls == 4){temptriangles.push([centre, acc[1], thisArg.fillStyle]);}if(calls == 5){tempsquares.push([centre, acc[1], thisArg.fillStyle]);}else {temppentagons.push([centre, acc[1], thisArg.fillStyle]);}}return;}if(playerPos && baseArea){const wcord = toWorldCoords(...centre);let distance;if(is2T){distance = getDist([baseArea.x, playerPos[1]], wcord);}else{distance = getDist([baseArea.x, baseArea.y], wcord);}if(distance[0] > 9000){return;}}if(calls == 4){temptriangles.push([centre, 0]);}if(calls == 5){tempsquares.push([centre, 0]);}if(calls == 6){temppentagons.push([centre, 0]);}} else {calls = 0;}});hook('strokeRect', function(thisArg, args) {const t = thisArg.getTransform();minimapPos = [t.e, t.f];minimapDim = [t.a, t.d];});hook('arc', function(thisArg, args){const t = thisArg.getTransform();if(!baseArea){return;}if(["#00b2e1", "#bf7ff5", "#00e16e", "#f14e54"].includes(thisArg.fillStyle)){if(baseArea.hex == thisArg.fillStyle){return;}enemies.push([[t.e, t.f], 0, thisArg.fillStyle])}});function getBase(pos){if(is2T){if(pos[0] < 2500){baseArea = T2_BASES[0];inBase = true;return;}if(pos[0] > 23500){baseArea = T2_BASES[1];inBase = true;return;}inBase = false;return;}else{for(let i = 0; i < T4_BASES.length; i++){if(pos[0] > T4_BASES[i].x && pos[0] < T4_BASES[i].x + T4_BASE_WIDTH && pos[1] > T4_BASES[i].y && pos[1] < T4_BASES[i].y + T4_BASE_HEIGHT){baseArea = T4_BASES[i];inBase = true;return;}}inBase = false;return;}}function getRandomLocation(){return [ARENA_WIDTH / 2, ARENA_HEIGHT / 2];}function getPlayerPos(){const dX = minimapArrow[0] - minimapPos[0];const dY = minimapArrow[1] - minimapPos[1];const x = (dX / minimapDim[0]) * ARENA_WIDTH;const y = (dY / minimapDim[1]) * ARENA_HEIGHT;return [x, y]}function getCurrentTargets(){let target = [0, 0];let moveTarget = [0, 0];let aimTarget = [0, 0];if(enemies.length){target = getClosest(enemies)[0];move(target, invertCoordinate(target));goal = null;return;}else if(pentagons.length){target = getClosest(pentagons)[0];}else if(triangles.length){target = getClosest(triangles)[0];}else if(squares.length){target = getClosest(squares)[0];}else{if(baseArea){const baseMidX = baseArea.x + T4_BASE_WIDTH / 2;const baseMidY = baseArea.y + T4_BASE_HEIGHT / 2;if(!goal){if(is2T){if(inBase){goal = [baseMidX + baseArea.dirX * T4_BASE_WIDTH * Math.random() * 1.5, Math.random() * ARENA_HEIGHT];}else{goal = [baseMidX, Math.random() * ARENA_HEIGHT];}}else{if(inBase){goal = [baseMidX + baseArea.dirX * T4_BASE_WIDTH * Math.random() * 1.5, baseMidY + baseArea.dirY * T4_BASE_HEIGHT * Math.random() * 1.5];}else{goal = [baseMidX, baseMidY];}}}moveToCoord(...goal, 0); // move inside baseconst goalDistance = getDist(goal, playerPos);if(goalDistance[0] < 175){goal = null;}return;}moveToCoord(...getRandomLocation(), 0);return;}const distance = getDist(target, [canvas.width / 2, canvas.height / 2]);aimTarget = target;if(distance[0] > 290){moveTarget = target;}else{moveTarget = invertCoordinate(target);}move(aimTarget, moveTarget);}function move(aimTarget, moveTarget){if(!window.input || !window.input.should_prevent_unload()){return;}window.input.mouse(...aimTarget);window.input.key_down(1);const moveTargetDistance = getDist(moveTarget, [canvas.width / 2, canvas.height / 2]);if(moveTargetDistance[1] > 0){ // x movementinput.key_down(68);input.key_up(65);}else if(moveTargetDistance[1] < -0){input.key_up(68);input.key_down(65);}else{input.key_up(68);input.key_up(65);}if(moveTargetDistance[2] > 0){ // y movementinput.key_down(83);input.key_up(87);}else if(moveTargetDistance[2] < -0){input.key_up(83);input.key_down(87);}else{input.key_up(83);input.key_up(87);}ctx.beginPath();ctx.lineWidth = 6;ctx.strokeStyle = "red";ctx.moveTo(canvas.width / 2, canvas.height / 2);ctx.lineTo(...aimTarget);ctx.stroke();}function toScreenCoords(x, y){const distance = getDist([x, y], playerPos);return [canvas.width / 2 + distance[1] / 2,canvas.height / 2 + distance[2] / 2,]}function toWorldCoords(x, y){const distance = getDist([x, y], [canvas.width / 2, canvas.height / 2]);return [playerPos[0] + distance[1] * 2,playerPos[1] + distance[2] * 2,]}function moveToCoord(x, y, invert){const distance = getDist([x, y], playerPos);if(distance[1] > 0){ // x movementinput.key_down(68);input.key_up(65);}else if(distance[1] < -0){input.key_up(68);input.key_down(65);}else{input.key_up(68);input.key_up(65);}if(distance[2] > 0){ // y movementinput.key_down(83);input.key_up(87);}else if(distance[2] < -0){input.key_up(83);input.key_down(87);}else{input.key_up(83);input.key_up(87);}const scrCoords = invert ? invertCoordinate(toScreenCoords(x, y)) : toScreenCoords(x, y);input.mouse(...scrCoords);ctx.beginPath();ctx.lineWidth = 6;ctx.strokeStyle = "lime";ctx.moveTo(canvas.width / 2, canvas.height / 2);ctx.lineTo(...scrCoords);ctx.stroke();}function main(){window.requestAnimationFrame(main);playerPos = getPlayerPos();getBase(playerPos);if(Date.now() - lastCheck > 2000){is2T = true;}else{is2T = false;}if(toggled){getCurrentTargets();if(!input.should_prevent_unload()){window.input.try_spawn(localStorage.name);}}squares = tempsquares;triangles = temptriangles;pentagons = temppentagons;tempsquares = [];temptriangles = [];temppentagons = [];enemies = [];}window.requestAnimationFrame(main);}, 400);const handler = {apply(r,o,args) {Error.stackTraceLimit = 0;return r.apply(o,args)}}Object.freeze = new Proxy(Object.freeze, handler)