您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
noting to be honest
// ==UserScript== // @name nothing // @version 1.1 // @description noting to be honest // @author THEKDT // @match https://https://www.modd.io/play/JukeOrDiee# // @grant GM_setValue // @grant GM_getValue // @namespace https://greasyfork.org/en/users/844900-thekdt // ==/UserScript== window = unsafeWindow; var int = window.setInterval(function() { if(window.input != null) { window.clearInterval(int); onready(); } }, 100); function onready() { const KEY = '`'; const scaling = 64; const scale = window.devicePixelRatio; const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); const c = CanvasRenderingContext2D.prototype; function getRatio() { if(canvas.height * 16 / 9 >= canvas.width) { return canvas.height; } else { return canvas.width / 16 * 9; } } function getScale() { return getRatio() / (1080 * scale); } function withinMinimap(x, y) { const r = getRatio(); if(x >= canvas.width - r * 0.2 && y >= canvas.height - r * 0.2) { return true; } else { return false; } } function dist(x1, y1, x2, y2) { return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2); } var FoV = 1; var posCount = 0; var firstPos = []; var secondPos = []; var playerPos = [-1, 0]; var vel = [0, 0]; var mvel = [0, 0]; var mouse = [0, 0]; var realMouse = [0, 0]; var afkSpot = [-1, 0]; var picking = false; var afk = false; var relyKeys = true; var menuVisible = false; var menu; var textOverlay = 0; var multibox = false; var aim = 0; var movement = false; var mov; var aimm; var buttons = 0; const KEYS = { 48 : 1, 49 : 2, 50 : 4, 51 : 8, 52 : 16, 53 : 32, 54 : 64, 55 : 128, 56 : 256, 57 : 512, 67 : 1024, 69 : 2048, 75 : 4096, 79 : 8192, 77 : 16384, 85 : 32768, 59 : 65536, 220 : 131072, 13 : 262144, 0 : 524288, 2 : 1048576, 32 : 2097152, 16 : 4194304 }; const KEYS2 = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 67, 69, 75, 79, 77, 85, 59, 220, 13, 0, 2, 32, 16]; var bmov = 0; const MKEYS = { 87: 1, 83: 2, 65: 4, 68: 8 }; const RD = 2.5; const MRD = 0.1; const SRD = RD + MRD; const DRD = SRD * (Math.sqrt(2) / 2); const keybinds = localStorage.getItem("multbox_keybinds") ? JSON.parse(localStorage.getItem("multbox_keybinds")) : [0, 0, 0, 0, 0, 0]; if(keybinds.length != 6) { for(let i = keybinds.length; i < 6; ++i) { keybinds[i] = 0; } localStorage.setItem("multbox_keybinds", JSON.stringify(keybinds)); } function normalizeVel() { const d = dist(0, 0, vel[0], vel[1]); if(d > 1) { mvel[0] = Math.sign(vel[0]) * DRD; mvel[1] = Math.sign(vel[1]) * DRD; } else { mvel = [Math.sign(vel[0]) * SRD, Math.sign(vel[1]) * SRD]; } } function getMousePos(e) { var rect = canvas.getBoundingClientRect(); return [(e.clientX - rect.left) / (rect.right - rect.left) * canvas.width, (e.clientY - rect.top) / (rect.bottom - rect.top) * canvas.height]; } canvas.onmousemove = new Proxy(canvas.onmousemove, { apply: function(to, what, args) { const e = args[0]; mouse = getMousePos(e); realMouse = [playerPos[0] + (mouse[0] - canvas.width / 2) / getScale() / FoV / scaling, playerPos[1] + (mouse[1] - canvas.height / 2) / getScale() / FoV / scaling]; return to.apply(what, args); } }); canvas.onmousedown = new Proxy(canvas.onmousedown, { apply: function(to, what, args) { const e = args[0]; if(picking == true) { const w = canvas.width; const h = canvas.height; const r = getRatio(); if(withinMinimap(e.clientX * scale, e.clientY * scale) == true) { afkSpot = [(e.clientX * scale - w + r * 0.2) / getScale(), (e.clientY * scale - h + r * 0.2) / getScale()]; picking = false; } else if(e.clientX * scale > w - r * 0.3 - 1 && e.clientX * scale < w - r * 0.2 - 1 && e.clientY * scale > h - r * 0.3 - 1 && e.clientY * scale < h - r * 0.2 - 1) { afkSpot = [-1, 0]; picking = false; } } if(KEYS[e.button] != null && (buttons & KEYS[e.button]) == 0) { buttons |= KEYS[e.button]; } return to.apply(what, args); } }); canvas.onmouseup = new Proxy(canvas.onmouseup, { apply: function(to, what, args) { const e = args[0]; if(KEYS[e.button] != null && (buttons & KEYS[e.button]) != 0) { buttons ^= KEYS[e.button]; } return to.apply(what, args); } }); window.onkeydown = new Proxy(window.onkeydown, { apply: function(to, what, args) { const e = args[0]; if(e.key == KEY && (textOverlay == 0 || (textOverlay != 0 && textOverlay > 6))) { menuVisible = !menuVisible; if(menuVisible == true) { menu.style.display = 'block'; } else { menu.style.display = 'none'; } } if(KEYS[e.keyCode] != null && (buttons & KEYS[e.keyCode]) == 0) { buttons |= KEYS[e.keyCode]; } if(MKEYS[e.keyCode] != null && (bmov & MKEYS[e.keyCode]) == 0) { bmov |= MKEYS[e.keyCode]; switch(e.keyCode) { case 65: { vel[0] -= 1; break; } case 68: { vel[0] += 1; break; } case 83: { vel[1] += 1; break; } case 87: { vel[1] -= 1; break; } } normalizeVel(); } if(textOverlay == 0 || textOverlay > 6) { for(let i = 0; i < keybinds.length; ++i) { if(e.key == keybinds[i]) { document.getElementById('mboxb' + (i + 1)).onclick(); } } } if(textOverlay != 0 && textOverlay < 7) { if(e.key == KEY) { keybinds[textOverlay - 1] = 0; document.getElementById('mboxk' + textOverlay).innerHTML = '-'; } else { keybinds[textOverlay - 1] = e.key; document.getElementById('mboxk' + textOverlay).innerHTML = e.key; } localStorage.setItem("multibox_keybinds", JSON.stringify(keybinds)); textOverlay = 0; e.stopPropagation(); e.preventDefault(); return; } return to.apply(what, args); } }); window.onkeyup = new Proxy(window.onkeyup, { apply: function(to, what, args) { const e = args[0]; if(KEYS[e.keyCode] != null && (buttons & KEYS[e.keyCode]) != 0) { buttons ^= KEYS[e.keyCode]; } if(MKEYS[e.keyCode] != null && (bmov & MKEYS[e.keyCode]) != 0) { bmov ^= MKEYS[e.keyCode]; switch(e.keyCode) { case 65: { vel[0] += 1; break; } case 68: { vel[0] -= 1; break; } case 83: { vel[1] -= 1; break; } case 87: { vel[1] += 1; break; } } if((bmov & MKEYS[65]) == 0 && (bmov & MKEYS[68]) == 0) { vel[0] = 0; } if((bmov & MKEYS[83]) == 0 && (bmov & MKEYS[87]) == 0) { vel[1] = 0; } normalizeVel(); } return to.apply(what, args); } }); c.moveTo = new Proxy(c.moveTo, { apply: function(to, what, args) { const x = args[0]; const y = args[1]; if(withinMinimap(x, y) == true) { firstPos = [x, y]; posCount = 1; } else { posCount = 0; } return to.apply(what, args); } }); c.stroke = new Proxy(c.stroke, { apply: function(to, what, args) { if(what.fillStyle == '#cdcdcd' && what.strokeStyle == '#000000') { FoV = what.globalAlpha / 0.05; } posCount = 0; return to.apply(what); } }); c.lineTo = new Proxy(c.lineTo, { apply: function(to, what, args) { const x = args[0]; const y = args[1]; switch(posCount) { case 1: { if(withinMinimap(x, y) == true && dist(x, y, firstPos[0], firstPos[1]) < 15 * scale * getScale()) { secondPos = [x, y]; ++posCount; } else { posCount = 0; } break; } case 2: { const d = dist(firstPos[0], firstPos[1], secondPos[0], secondPos[1]); if(withinMinimap(x, y) == true && d < 15 * scale * getScale()) { const angle = Math.atan2(secondPos[1] - y, secondPos[0] - x) - 0.3674113; const r = getRatio(); const xx = (x + Math.cos(angle) * d * 0.8660111 - canvas.width + r * 0.2) / getScale(); const yy = (y + Math.sin(angle) * d * 0.8660111 - canvas.height + r * 0.2) / getScale(); playerPos = [xx, yy]; realMouse = [playerPos[0] + (mouse[0] - canvas.width / 2) / getScale() / FoV / scaling, playerPos[1] + (mouse[1] - canvas.height / 2) / getScale() / FoV / scaling]; } posCount = 0; break; } } return to.call(what, x, y); } }); function drawOverlay() { if(picking == true) { const r = getRatio(); var draw = true; var angle; const w = canvas.width; const h = canvas.height; ctx.beginPath(); ctx.fillStyle = '#00000077'; ctx.fillRect(0, 0, w, (h - r * 0.2) | 0); ctx.fillRect(0, (h - r * 0.2) | 0, (w - r * 0.2) | 0, h); ctx.fillStyle = '#FF000077'; ctx.fillRect(w - r * 0.3 - 1, h - r * 0.3 - 1, r * 0.1, r * 0.1); if(mouse[1] < h - r * 0.2) { if(mouse[0] < w - r * 0.2) { angle = Math.atan2(h - r * 0.2 - mouse[1], w - r * 0.2 - mouse[0]); } else { angle = Math.PI / 2; } } else { if(mouse[0] < w - r * 0.2) { angle = 0; } else { draw = false; } } if(mouse[0] > w - r * 0.3 - 1 && mouse[0] < w - r * 0.2 - 1 && mouse[1] > h - r * 0.3 - 1 && mouse[1] < h - r * 0.2 - 1) { draw = false; } if(draw == true) { ctx.moveTo(...mouse); ctx.lineTo(mouse[0] + Math.cos(angle) * 40, mouse[1] + Math.sin(angle) * 40); ctx.moveTo(mouse[0] + Math.cos(angle) * 40, mouse[1] + Math.sin(angle) * 40); ctx.lineTo(mouse[0] + Math.cos(angle - 0.4) * 25, mouse[1] + Math.sin(angle - 0.4) * 25); ctx.moveTo(mouse[0] + Math.cos(angle) * 40, mouse[1] + Math.sin(angle) * 40); ctx.lineTo(mouse[0] + Math.cos(angle + 0.4) * 25, mouse[1] + Math.sin(angle + 0.4) * 25); ctx.lineWidth = 5; ctx.strokeStyle = '#ff226699'; ctx.stroke(); } else { ctx.moveTo(mouse[0] - 15, mouse[1]); ctx.lineTo(mouse[0] + 15, mouse[1]); ctx.moveTo(mouse[0], mouse[1] - 15); ctx.lineTo(mouse[0], mouse[1] + 15); ctx.lineWidth = 2; ctx.strokeStyle = '#00000077'; ctx.stroke(); } ctx.fillStyle = '#FFFFFF77'; ctx.font = `${30 * scale}px Arial`; ctx.textAlign = 'center'; ctx.fillText('drag your cursor on the minimap', w / 2, h * 3.5 / 10); ctx.fillText('left click to select where you want to stay', w / 2, h * 4.5 / 10); ctx.fillText('click on the red area to reset your AFK location', w / 2, h * 5.5 / 10); ctx.fillText('press the button again to hide this overlay', w / 2, h * 6.5 / 10); } else if(textOverlay != 0) { const w = canvas.width / 2; const h = canvas.height / 2; ctx.beginPath(); ctx.fillStyle = '#00000077'; ctx.fillRect(0, 0, w * 2, h * 2); ctx.fillStyle = '#FFFFFF77'; ctx.font = `${30 * scale}px Arial`; ctx.textAlign = 'center'; switch(textOverlay) { case 1: { ctx.fillText('press the key you want to bind to picking AFK location', w, h - h / (10 / 3)); break; } case 2: { ctx.fillText('press the key you want to bind to toggling AFK', w, h - h / (10 / 3)); break; } case 3: { ctx.fillText('press the key you want to bind to toggling multibox', w, h - h / (10 / 3)); break; } case 4: { ctx.fillText('press the key you want to bind to toggling aiming mode', w, h - h / (10 / 3)); break; } case 5: { ctx.fillText('press the key you want to bind to toggling movement mode', w, h - h / (10 / 3)); break; } case 6: { ctx.fillText('press the key you want to bind to receiving keys from the master tab', w, h - h / (10 / 3)); break; } case 7: { ctx.fillText('picks the location which your tank will be going towards', w, h - h / 10); ctx.fillText('when you toggle AFK option to be on', w, h + h / 10); break; } case 8: { ctx.fillText('moves your tank towards the position you set previously', w, h - h / 10); ctx.fillText('if you did not set AFK location, it will be set to your current position', w, h + h / 10); break; } case 9: { ctx.fillText('enables / disables multibox (aim, movement, key copying)', w, h - h / 10); ctx.fillText('can be set for each tab individually', w, h + h / 10); break; } case 10: { ctx.fillText('toggles between different aiming styles for other tabs', w, h - h / 2.5); ctx.fillText('precise - tabs will aim based on mouse position on the map', w, h - h / 5); ctx.fillText('copy - tabs will aim based on mouse position on the screen', w, h); ctx.fillText('reverse - tabs will aim the opposite precise direction', w, h + h / 5); ctx.fillText('\'reverse\' option is mostly useful when having movement set to \'mouse\'', w, h + h / 2.5); break; } case 11: { ctx.fillText('toggles between different movement styles for other tabs', w, h - h / 5); ctx.fillText('player - moves tabs towards the player, uses own movement prediction', w, h); ctx.fillText('mouse - moves tabs towards the mouse to act like drones', w, h + h / 5); break; } case 12: { ctx.fillText('decides whether keys pressed on your master tab will affect this tab', w, h - h / 5); ctx.fillText('keep it on if you want all your tabs to be coordinated no matter what', w, h); ctx.fillText('keep it off if your tanks collide with each other - you have ol and octo', w, h + h / 5); break; } } if(textOverlay < 7) { ctx.fillText('pressing ' + KEY + ' will set the keybind to inactive (no key will be assigned)', w, h - h / 10); ctx.fillText('you can change the keybind anytime afterwards', w, h + h / 10); ctx.fillText('press the button again to hide this overlay', w, h + h / (10 / 3)); } } requestAnimationFrame(drawOverlay); } function moveToWithRadius(x, y, r) { if(dist(x, y, playerPos[0], playerPos[1]) <= r) { window.input.keyUp(65); window.input.keyUp(68); window.input.keyUp(83); window.input.keyUp(87); return; } window.input.keyUp(65); window.input.keyUp(68); window.input.keyUp(83); window.input.keyUp(87); const angle = Math.atan2(y - playerPos[1], x - playerPos[0]); if(angle > -Math.PI * 2/6 && angle < Math.PI * 2/6) { window.input.keyDown(68); } else if(angle < -Math.PI * 4/6 || angle > Math.PI * 4/6) { window.input.keyDown(65); } if(angle > Math.PI * 1/6 && angle < Math.PI * 5/6) { window.input.keyDown(83); } else if(angle > -Math.PI * 5/6 && angle < -Math.PI * 1/6) { window.input.keyDown(87); } } function moveToAFKSpot() { if(afk == true) { if(afkSpot[0] == -1) { afkSpot = playerPos; } moveToWithRadius(afkSpot[0], afkSpot[1], -1); } } function simulateKeyPress(key, down) { window.dispatchEvent(new KeyboardEvent(down ? "keydown" : "keyup", { keyCode: key, shiftKey: key == 16 ? true : false })); } function simulateMousePress(button, down) { canvas.dispatchEvent(new MouseEvent(down ? "mousedown" : "mouseup", { "clientX": mouse[0], "clientY": mouse[1], "button": button })); } function ReadVarUint(packet, at) { var number = 0; var count = 0; do { number |= (packet[at] & 0x7f) << (7 * count++); } while((packet[at++] >> 7) == 1); return [number, count]; } function WriteVarUint(number) { let vu = []; while(number > 0x7f) { vu[vu.length] = (number & 0x7f) | 0x80; number >>>= 7; } vu[vu.length] = number; return vu; } function createData() { var o; if(movement == false) { o = [0, ...WriteVarUint((playerPos[0] + mvel[0]) * 1000), ...WriteVarUint((playerPos[1] + mvel[1]) * 1000), (mvel[0] == 0 && mvel[1] == 0) ? 0 : 1, ...WriteVarUint((Math.atan2(mvel[1], mvel[0]) + 4) * 1000)]; } else { o = [1, ...WriteVarUint(realMouse[0] * 1000), ...WriteVarUint(realMouse[1] * 1000)]; } if(aim == 0) { o = [...o, 0, ...WriteVarUint(realMouse[0] * 1000), ...WriteVarUint(realMouse[1] * 1000)]; } else if(aim == 1) { o = [...o, 1, ...WriteVarUint(32000 + (mouse[0] - canvas.width / 2) / getScale() * 10), ...WriteVarUint(32000 + (mouse[1] - canvas.height / 2) / getScale() * 10)]; } else { o = [...o, 2, ...WriteVarUint(realMouse[0] * 1000), ...WriteVarUint(realMouse[1] * 1000)]; } o = [...o, ...WriteVarUint(buttons)]; return o; } function parseData(o) { if(afk == false) { window.clearInterval(mov); window.clearInterval(aimm); const w = canvas.width / 2; const h = canvas.height / 2; const type = o[0]; var at = 1; const x = ReadVarUint(o, at); at += x[1]; x[0] /= 1000; const y = ReadVarUint(o, at); at += y[1]; y[0] /= 1000; if(type == 0) { const hasVel = ReadVarUint(o, at); at += hasVel[1]; const ang = ReadVarUint(o, at); at += ang[1]; ang[0] = ang[0] / 1000 - 4; const lmfao = function() { if(hasVel[0] == 1 && dist(x[0], y[0], playerPos[0], playerPos[1]) <= RD) { const a1 = Math.atan2(y[0] - playerPos[1], x[0] - playerPos[0]); if(Math.abs(a1 - ang[0]) < 0.5) { if(a1 < ang[0]) { moveToWithRadius(x[0] + Math.cos(ang[0] + Math.PI / 2) * SRD, y[0] + Math.sin(ang[0] + Math.PI / 2) * SRD, -1); } else { moveToWithRadius(x[0] + Math.cos(ang[0] - Math.PI / 2) * SRD, y[0] + Math.sin(ang[0] - Math.PI / 2) * SRD, -1); } } else { moveToWithRadius(x[0] - Math.cos(ang[0]) * SRD * 2, y[0] - Math.sin(ang[0]) * SRD * 2, RD); } } else { moveToWithRadius(x[0], y[0], RD); } }; mov = window.setInterval(lmfao, 50); lmfao(); } else { mov = window.setInterval(function() { moveToWithRadius(x[0], y[0], -1); }, 50); moveToWithRadius(x[0], y[0], -1); } const a = o[at++]; const xx = ReadVarUint(o, at); at += xx[1]; const yy = ReadVarUint(o, at); at += yy[1]; if(a == 0) { const lmfao = function() { const angle = Math.atan2(yy[0] / 1000 - playerPos[1], xx[0] / 1000 - playerPos[0]); var distance = dist(xx[0] / 1000, yy[0] / 1000, playerPos[0], playerPos[1]) * getScale() * FoV * scaling; mouse = [w + Math.cos(angle) * distance, h + Math.sin(angle) * distance]; window.input.mouse(w + Math.cos(angle) * distance, h + Math.sin(angle) * distance); }; aimm = window.setInterval(lmfao, 50); lmfao(); } else if(a == 1) { mouse = [(xx[0] - 32000) / 10 * getScale() + w, (yy[0] - 32000) / 10 * getScale() + h]; window.input.mouse((xx[0] - 32000) / 10 * getScale() + w, (yy[0] - 32000) / 10 * getScale() + h); } else { const lmfao = function() { const angle = Math.atan2(playerPos[1] - yy[0] / 1000, playerPos[0] - xx[0] / 1000); var distance = dist(xx[0] / 1000, yy[0] / 1000, playerPos[0], playerPos[1]) * getScale() * FoV * scaling; mouse = [w + Math.cos(angle) * distance, h + Math.sin(angle) * distance]; window.input.mouse(w + Math.cos(angle) * distance, h + Math.sin(angle) * distance); }; aimm = window.setInterval(lmfao, 50); lmfao(); } if(relyKeys == true) { const b = ReadVarUint(o, at); at += b[1]; const d = b[0] ^ buttons; for(let i = 0; i < KEYS2.length; ++i) { if((d & (2 ** i)) != 0) { if(KEYS2[i] < 3) { simulateMousePress(KEYS2[i], (buttons & (2 ** i)) == 0); } else { simulateKeyPress(KEYS2[i], (buttons & (2 ** i)) == 0); } } } buttons = b[0]; } } } window.goUp = true; function updateCycle() { if(document.hasFocus() == true) { window.clearInterval(mov); window.clearInterval(aimm); if(multibox == true) { GM_setValue("mbox", JSON.stringify(createData())); } } else if(multibox == true) { try { var g = JSON.parse(GM_getValue("mbox")); parseData(g); } catch(err){} } if(window.octoAFK == true) { window.input.keyUp(65); window.input.keyUp(68); window.input.keyUp(83); window.input.keyUp(87); if(playerPos[0] < 184) { window.input.keyDown(68); } else if(playerPos[0] > 186) { window.input.keyDown(65); } if(playerPos[1] < 30) { window.goUp = false; } else if(playerPos[1] > 186) { window.goUp = true; } if(window.goUp == true) { window.input.keyDown(87); } else { window.input.keyDown(83); } } requestAnimationFrame(updateCycle); } const html = ` <div id="mbox"> <button id="mboxb1" class="mboxb">Pick AFK location</button> <button id="mboxk1" class="mboxb">${keybinds[0]==0?'-':keybinds[0]}</button> <button id="mboxh1" class="mboxb">?</button> <button id="mboxb2" class="mboxb">AFK: off</button> <button id="mboxk2" class="mboxb">${keybinds[1]==0?'-':keybinds[1]}</button> <button id="mboxh2" class="mboxb">?</button> <button id="mboxb3" class="mboxb">Multibox: off</button> <button id="mboxk3" class="mboxb">${keybinds[2]==0?'-':keybinds[2]}</button> <button id="mboxh3" class="mboxb">?</button> <button id="mboxb4" class="mboxb">Aim: precise</button> <button id="mboxk4" class="mboxb">${keybinds[3]==0?'-':keybinds[3]}</button> <button id="mboxh4" class="mboxb">?</button> <button id="mboxb5" class="mboxb">Movement: player</button> <button id="mboxk5" class="mboxb">${keybinds[4]==0?'-':keybinds[4]}</button> <button id="mboxh5" class="mboxb">?</button> <button id="mboxb6" class="mboxb">Receive keys: on</button> <button id="mboxk6" class="mboxb">${keybinds[5]==0?'-':keybinds[5]}</button> <button id="mboxh6" class="mboxb">?</button> </div> `; const css = ` <style> .mboxb { border: none; text-align: center; text-decoration: none; font-size: max(calc(0.3em + 0.7vw), 0.8em); width: 70%; height: 16.66666666666666%; display: block; transition-duration: 0.2s; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #mbox { position: absolute; top: 30%; width: max(7em, 15%); background-color: #00000010; height: max(7em, 35%); display: none; } #mboxb1 { position: absolute; top: 0; left: 30%; background-color: #4CAF50; color: #FFFFFF; border: 0.3em solid #4CAF50; } #mboxb1:hover { background-color: #4CAF5000; } #mboxk1 { position: absolute; width: 15%; top: 0; left: 15%; background-color: #4CAF50; color: #FFFFFF; border: 0.3em solid #4CAF50; } #mboxk1:hover { background-color: #4CAF5000; } #mboxh1 { position: absolute; width: 15%; top: 0; left: 0; background-color: #4CAF50; color: #FFFFFF; border: 0.3em solid #4CAF50; } #mboxh1:hover { background-color: #4CAF5000; } #mboxb2 { position: absolute; top: 16.66666666666666%; left: 30%; background-color: #008CBA; color: #FFFFFF; border: 0.3em solid #008CBA; } #mboxb2:hover { background-color: #008CBA00; } #mboxk2 { position: absolute; width: 15%; top: 16.66666666666666%; left: 15%; background-color: #008CBA; color: #FFFFFF; border: 0.3em solid #008CBA; } #mboxk2:hover { background-color: #008CBA00; } #mboxh2 { position: absolute; width: 15%; top: 16.66666666666666%; left: 0; background-color: #008CBA; color: #FFFFFF; border: 0.3em solid #008CBA; } #mboxh2:hover { background-color: #008CBA00; } #mboxb3 { position: absolute; top: 33.33333333333333%; left: 30%; background-color: #f44336; color: #FFFFFF; border: 0.3em solid #f44336; } #mboxb3:hover { background-color: #f4433600; } #mboxk3 { position: absolute; width: 15%; top: 33.33333333333333%; left: 15%; background-color: #f44336; color: #FFFFFF; border: 0.3em solid #f44336; } #mboxk3:hover { background-color: #f4433600; } #mboxh3 { position: absolute; width: 15%; top: 33.33333333333333%; left: 0; background-color: #f44336; color: #FFFFFF; border: 0.3em solid #f44336; } #mboxh3:hover { background-color: #f4433600; } #mboxb4 { position: absolute; top: 50%; left: 30%; background-color: #e7e7e7; color: #000000; border: 0.3em solid #e7e7e7; } #mboxb4:hover { background-color: #e7e7e700; color: #FFFFFF; } #mboxk4 { position: absolute; width: 15%; top: 50%; left: 15%; background-color: #e7e7e7; color: #000000; border: 0.3em solid #e7e7e7; } #mboxk4:hover { background-color: #e7e7e700; color: #FFFFFF; } #mboxh4 { position: absolute; width: 15%; top: 50%; left: 0; background-color: #e7e7e7; color: #000000; border: 0.3em solid #e7e7e7; } #mboxh4:hover { background-color: #e7e7e700; color: #FFFFFF; } #mboxb5 { position: absolute; top: 66.66666666666666%; left: 30%; background-color: #555555; color: #FFFFFF; border: 0.3em solid #555555; } #mboxb5:hover { background-color: #55555500; } #mboxk5 { position: absolute; width: 15%; top: 66.66666666666666%; left: 15%; background-color: #555555; color: #FFFFFF; border: 0.3em solid #555555; } #mboxk5:hover { background-color: #55555500; } #mboxh5 { position: absolute; width: 15%; top: 66.66666666666666%; left: 0; background-color: #555555; color: #FFFFFF; border: 0.3em solid #555555; } #mboxh5:hover { background-color: #55555500; } #mboxb6 { position: absolute; top: 83.33333333333333%; left: 30%; background-color: #FFFF66; color: #000000; border: 0.3em solid #FFFF66; } #mboxb6:hover { background-color: #FFFF6600; color: #FFFFFF; } #mboxk6 { position: absolute; width: 15%; top: 83.33333333333333%; left: 15%; background-color: #FFFF66; color: #000000; border: 0.3em solid #FFFF66; } #mboxk6:hover { background-color: #FFFF6600; color: #FFFFFF; } #mboxh6 { position: absolute; width: 15%; top: 83.33333333333333%; left: 0; background-color: #FFFF66; color: #000000; border: 0.3em solid #FFFF66; } #mboxh6:hover { background-color: #FFFF6600; color: #FFFFFF; } </style> `; requestAnimationFrame(drawOverlay); requestAnimationFrame(updateCycle); window.setInterval(moveToAFKSpot, 100); canvas.insertAdjacentHTML('afterend', css); canvas.insertAdjacentHTML('afterend', html); menu = document.getElementById('mbox'); const AFKLocationButton = document.getElementById('mboxb1'); AFKLocationButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } if(textOverlay != 0) { textOverlay = 0; } picking = !picking; }; const AFKButton = document.getElementById('mboxb2'); AFKButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } afk = !afk; if(afk == true) { window.clearInterval(mov); window.clearInterval(aimm); this.innerHTML = 'AFK: on'; } else { this.innerHTML = 'AFK: off'; window.input.keyUp(65); window.input.keyUp(68); window.input.keyUp(83); window.input.keyUp(87); } }; const multiboxButton = document.getElementById('mboxb3'); multiboxButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } multibox = !multibox; if(multibox == true) { this.innerHTML = 'Multibox: on'; } else { this.innerHTML = 'Multibox: off'; } }; const aimButton = document.getElementById('mboxb4'); aimButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } aim = (aim + 1) % 3; if(aim == 1) { this.innerHTML = 'Aim: copy'; } else if(aim == 2) { this.innerHTML = 'Aim: reverse'; } else { this.innerHTML = 'Aim: precise'; } }; const movementButton = document.getElementById('mboxb5'); movementButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } movement = !movement; if(movement == true) { this.innerHTML = 'Movement: mouse'; } else { this.innerHTML = 'Movement: player'; } }; const relykeysButton = document.getElementById('mboxb6'); relykeysButton.onclick = function(e) { if(document.hasFocus() == false || e == undefined) { return; } relyKeys = !relyKeys; if(relyKeys == true) { this.innerHTML = 'Receive keys: on'; } else { this.innerHTML = 'Receive keys: off'; } }; let i = 1; let k; for(; i < 7; ++i) { k = document.getElementById('mboxk' + i); const a = i; k.onclick = function() { picking = false; if(textOverlay == 0) { textOverlay = a; } else if(a == textOverlay) { textOverlay = 0; } else { textOverlay = a; } }; } }