Greasy Fork is available in English.
multibox
// ==UserScript== // @name Multibox script Working December 2023 // @namespace http://tampermonkey.net/ // @version 20232 // @description multibox // @author Mi300#4401 // @match https://diep.io/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant GM_getValue // @grant GM_setValue // @license dont copy thx // ==/UserScript== let WTF = setInterval (function() { if (!document.querySelector('d-base').shadowRoot.children[0].shadowRoot.getElementById('username-input')) { return; } clearInterval (WTF) let canRespawn = false; let worldPosition = [0, 0]; let overlay; let mouseOffset = [0, 0]; let gui = true; let moveKeys = new Array(4) let tabId = Math.round(Math.random()*10000) GM_setValue('multiboxEnabled', false) setInterval(function(){ document.title = 'diep.io tab #' + tabId }, 1000) const canvas = document.getElementById ('canvas'); function hook(target, callback){ const 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(method, thisArg, args) return Reflect.apply (method, thisArg, args) } }); } } check() } let dgg = 'i'; function hookMinimapArrow () { let drawInstructions = 0; let minimapArrowVertex = []; hook ('beginPath', (method, thisArg, args) => { //console.log('beginPath', args) drawInstructions = 1; minimapArrowVertex = []; }); hook ('moveTo', (method, thisArg, args) => { //console.log('moveTo', args) drawInstructions = 2; minimapArrowVertex.push ( args ); }); hook ('lineTo', (method, thisArg, args) => { //console.log('lineTo', args) if (drawInstructions >= 2 && drawInstructions <= 5) { drawInstructions ++; minimapArrowVertex.push ( args ); } else { drawInstructions = 0; } }); hook ('fill', (method, thisArg, args) => { //console.log('fill', args) if (thisArg.fillStyle != '#000000' || thisArg.globalAlpha < 1) { return; } if (drawInstructions === 4) { const pos = getAverage (minimapArrowVertex); //console.log(pos) worldPosition = getWorldPosition (pos); } }); } let minimapPosition = [0, 0]; let minimapDim = [0, 0]; function hookMinimap () { hook ('strokeRect', (method, thisArg, args) => { const transform = thisArg.getTransform (); minimapPosition = [transform.e, transform.f]; minimapDim = [transform.a, transform.d]; }); } function getWorldPosition (position) { const ret = [ parseFloat((((position[0] - minimapPosition[0] - minimapDim[0] / 2) / minimapDim[0] * 100) * 460).toFixed (3)), parseFloat((((position[1] - minimapPosition[1] - minimapDim[1] / 2) / minimapDim[1] * 100) * 460).toFixed (3)), ] return ret; } const Mi = ''; function getAverage (points) { let ret = [0, 0]; points.forEach (point => { ret[0] += point[0]; ret[1] += point[1]; }); ret[0] /= points.length; ret[1] /= points.length; return ret; } let dgh = 'M'; const getDist = (t1, t2) => { const distX = t1[0] - t2[0]; const distY = t1[1] - t2[1]; return [Math.hypot(distX, distY), distX, distY]; }; function moveBot () { if (input.should_prevent_unload()) { canRespawn = true; } let masterMouse = GM_getValue('multiboxMouse'); let masterMove = GM_getValue ('multiboxWorld'); console.log(masterMove, worldPosition) const distanceMove = getDist (masterMove, worldPosition); if (!masterMouse[0] || !masterMouse[1] || !masterMove[0] || !masterMove[1]) { return; } if (GM_getValue('copyMovement')) { //console.log(distanceMove[0]) if (distanceMove[0] > 400) { angleMove(distanceMove[1], distanceMove[2]) } else { copyMove(GM_getValue('keys')) } } if (GM_getValue('copyMouse')) { angleShoot(...masterMouse) } } function angleMove(dX, dY){ if (dX > 0) { input.key_up (65); input.key_down (68); } else if (dX < 0) { input.key_up (68); input.key_down (65); } else { input.key_up (68); input.key_up (65); } if (dY > 0) { input.key_up (87); input.key_down (83); } else if (dY < 0) { input.key_up (83); input.key_down (87); } else { input.key_up (83); input.key_up (87); } } function angleShoot(stepX, stepY){ const x = stepX * canvas.width * window.devicePixelRatio; const y = stepY * canvas.height * window.devicePixelRatio; input.mouse(x, y) } function copyMove(keys){ if(keys[0]){ input.key_down(87) } else{ input.key_up(87) } if(keys[1]){ input.key_down(65) } else { input.key_up(65) } if(keys[2]){ input.key_down(83) } else { input.key_up(83) } if(keys[3]){ input.key_down(68) } else { input.key_up(68) } } function frame () { overlay.innerHTML = ` <h1>MULTIBOX</h1> <br> <br> World position: <br> ${Math.round(worldPosition[0]) || 0} ${Math.round(worldPosition[1]) || 0} <br> <br> [P] Master Tab: #${GM_getValue('master') || 0} <br> <br> [F] Multibox Enabled: ${GM_getValue('multiboxEnabled') || false} <br> <br> [G] Copy Movement: ${GM_getValue('copyMovement') || false} <br> <br> [J] Copy Mouse: ${GM_getValue('copyMouse') || false} <br> <br> [Q] Toggle Gui: true <br> <br> [Z] Auto Respawn: ${GM_getValue('autoRespawn') || false} <br> <br> [,] Always Shoot: ${GM_getValue('autoShoot') || false} <br> <br> ` if(GM_getValue('autoShoot')){ input.key_down(1) } else{ input.key_up(1) } if (GM_getValue('autoRespawn')) { input.execute('game_spawn ' + localStorage.name) } if (GM_getValue('master') == tabId){ GM_setValue('multiboxWorld', worldPosition) GM_setValue('multiboxMouse', mouseOffset) GM_setValue('keys', moveKeys) } else if (GM_getValue('multiboxEnabled')) { moveBot (); } window.requestAnimationFrame (frame); } document.addEventListener ('keydown', e => { if (e.key === 'f') { GM_setValue('multiboxEnabled', !GM_getValue('multiboxEnabled')) if(GM_getValue('multiboxEnabled')){ GM_setValue('master', tabId) } } if (e.key === 'g') { GM_setValue('copyMovement', !GM_getValue('copyMovement')) } if (e.key === 'j') { GM_setValue('copyMouse', !GM_getValue('copyMouse')) } if (e.key === 'q') { gui = !gui; overlay.style.display = gui ? 'block' : 'none' } if (e.key === ',') { GM_setValue('autoShoot', !GM_getValue('autoShoot')) } if (e.key === 'z') { GM_setValue('autoRespawn', !GM_getValue('autoRespawn')) } if(e.key === 'p'){ GM_setValue('master', tabId) } if(e.key === 'w'){ moveKeys[0] = true; } if(e.key === 'a') { moveKeys[1] = true; } if(e.key === 's') { moveKeys[2] = true; } if(e.key === 'd') { moveKeys[3] = true; } }) document.addEventListener('keyup', e => { if(e.key === 'w'){ moveKeys[0] = false; } if(e.key === 'a') { moveKeys[1] = false; } if(e.key === 's') { moveKeys[2] = false; } if(e.key === 'd') { moveKeys[3] = false; } }); document.addEventListener ('mousemove', e => { mouseOffset = [ e.x / canvas.width, e.y / canvas.height, ] }); function terminate () { overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '1px'; overlay.style.left = '1px'; overlay.style.fontFamily = 'Lucida Console, Courier, monospace'; overlay.style.fontSize = '12px'; overlay.style.color = '#ffffff'; overlay.style.pointerEvents = 'none'; overlay.style.userSelect = 'none'; overlay.style.fontSize = '14px'; overlay.style.backgroundColor = 'gray'; overlay.style.height = '450px'; overlay.style.width = '250px'; overlay.style.borderRadius = '1px' overlay.style.borderStyle = 'solid' overlay.style.borderColor = '#404040' overlay.style.borderWidth = '5px' overlay.style.textAlign = 'center'; document.body.appendChild(overlay); frame (); hookMinimapArrow (); hookMinimap (); } terminate (); },400);