// ==UserScript== // @name Diep.io Mod Menu // @namespace http://tampermonkey.net/ // @version 2.0 // @homepage https://github.com/x032205/diep_mod_menu // @description Loop upgrade custom builds, render aim line, render factory guide circle. // @author https://github.com/x032205 // @match https://diep.io/ // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { "use strict"; const backdrop = document.createElement("div"); backdrop.id = "backdrop"; const toggle_text = document.createElement("code"); toggle_text.classList.add("watermark"); toggle_text.textContent = "Diep Mod Menu | Press [R] to toggle"; backdrop.appendChild(toggle_text); const panel = document.createElement("div"); panel.id = "panel"; const side_panel = document.createElement("nav"); panel.appendChild(side_panel); const separator = document.createElement("div"); separator.classList.add("separator"); panel.appendChild(separator); const display_panel = document.createElement("div"); display_panel.classList.add("inner_panel"); panel.appendChild(display_panel); const view_line = document.createElement("div"); view_line.classList.add("view-option"); const view_line_text = document.createElement("span"); view_line_text.textContent = "Aim line"; const view_line_label = document.createElement("label"); view_line_label.classList.add("switch"); const view_line_toggle = document.createElement("input"); view_line_toggle.setAttribute("type", "checkbox"); view_line_label.appendChild(view_line_toggle); const view_line_div = document.createElement("div"); view_line_label.appendChild(view_line_div); view_line.appendChild(view_line_label); view_line.appendChild(view_line_text); const view_circle = document.createElement("div"); view_circle.classList.add("view-option"); const view_circle_text = document.createElement("span"); view_circle_text.textContent = "Factory circle"; const view_circle_label = document.createElement("label"); view_circle_label.classList.add("switch"); const view_circle_toggle = document.createElement("input"); view_circle_toggle.setAttribute("type", "checkbox"); view_circle_label.appendChild(view_circle_toggle); const view_circle_div = document.createElement("div"); view_circle_label.appendChild(view_circle_div); view_circle.appendChild(view_circle_label); view_circle.appendChild(view_circle_text); // Visual Tab const visual_tab = document.createElement("button"); visual_tab.classList.add("tab_button", "active"); side_panel.appendChild(visual_tab); const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.setAttribute("width", "32"); svg.setAttribute("height", "32"); svg.setAttribute("viewBox", "0 0 24 24"); svg.setAttribute("fill", "none"); svg.setAttribute("stroke", "#BBBBBB"); svg.setAttribute("stroke-width", "2.5"); svg.setAttribute("stroke-linecap", "round"); svg.setAttribute("stroke-linejoin", "round"); svg.innerHTML = ''; visual_tab.appendChild(svg); visual_tab.onclick = function () { display_panel.innerHTML = ``; display_panel.appendChild(view_line); display_panel.appendChild(view_circle); setActiveTab(visual_tab); }; const au_label = document.createElement("span"); au_label.classList.add("subheading"); au_label.textContent = "Custom Build"; const au_input = document.createElement("input"); au_input.ariaReadOnly = "true"; au_input.setAttribute("type", "text"); au_input.classList.add("custom-input"); au_input.placeholder = "000000000000000000000000000000000"; au_input.maxLength = 33; const au_autoset = document.createElement("div"); au_autoset.classList.add("view-option"); const au_autoset_text = document.createElement("span"); au_autoset_text.textContent = "Auto-build enabled"; const au_autoset_label = document.createElement("label"); au_autoset_label.classList.add("switch"); const au_autoset_toggle = document.createElement("input"); au_autoset_toggle.setAttribute("type", "checkbox"); au_autoset_label.appendChild(au_autoset_toggle); const au_autoset_div = document.createElement("div"); au_autoset_label.appendChild(au_autoset_div); au_autoset.appendChild(au_autoset_label); au_autoset.appendChild(au_autoset_text); // Auto Upgrade Tab const auto_upgrades_tab = document.createElement("button"); auto_upgrades_tab.classList.add("tab_button"); side_panel.appendChild(auto_upgrades_tab); const au_svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); au_svg.setAttribute("width", "32"); au_svg.setAttribute("height", "32"); au_svg.setAttribute("viewBox", "0 0 24 24"); au_svg.setAttribute("fill", "none"); au_svg.setAttribute("stroke", "#BBBBBB"); au_svg.setAttribute("stroke-width", "2.5"); au_svg.setAttribute("stroke-linecap", "round"); au_svg.setAttribute("stroke-linejoin", "round"); au_svg.innerHTML = ''; auto_upgrades_tab.appendChild(au_svg); auto_upgrades_tab.onclick = function () { display_panel.innerHTML = ``; display_panel.appendChild(au_label); display_panel.appendChild(au_input); display_panel.appendChild(au_autoset); setActiveTab(auto_upgrades_tab); }; const credits_tab = document.createElement("button"); credits_tab.classList.add("tab_button"); side_panel.appendChild(credits_tab); const credit_svg = document.createElementNS( "http://www.w3.org/2000/svg", "svg", ); credit_svg.setAttribute("width", "32"); credit_svg.setAttribute("height", "32"); credit_svg.setAttribute("viewBox", "0 0 24 24"); credit_svg.setAttribute("fill", "none"); credit_svg.setAttribute("stroke", "#BBBBBB"); credit_svg.setAttribute("stroke-width", "2.5"); credit_svg.setAttribute("stroke-linecap", "round"); credit_svg.setAttribute("stroke-linejoin", "round"); credit_svg.innerHTML = ''; credits_tab.appendChild(credit_svg); credits_tab.onclick = function () { display_panel.innerHTML = `Discord: @someplace Github: @x032205`; setActiveTab(credits_tab); }; const style = document.createElement("style"); style.textContent = ` * { font-family: 'Inter', sans-serif; color: #EEEEEE; font-size: 16px; } code { font-family: monospace; } #panel { display: flex; flex-direction: row; max-width: 600px; max-height: 400px; width: 100%; height: 100%; padding: 12px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); gap: 6px; background: hsla(0, 0%, 10%, 0.7); backdrop-filter: blur(7px); -webkit-backdrop-filter: blur(7px); border: 1px solid hsla(0, 0%, 100%, 0.1); border-radius: 8px; z-index: 10; } .separator { width: 1px; height: 100%; background-color: hsla(0, 0%, 100%, 0.1); } .switch { display: inline-block; font-size: 20px; height: 1em; width: 2em; background: rgb(50, 50, 50); border-radius: 1em; margin-right: 10px; cursor: pointer; } .switch input { position: absolute; opacity: 0; cursor: pointer; } .switch div { font-size: 20px; height: 1em; width: 1em; border-radius: 1em; background: rgb(100, 100, 100); transition: all 100ms; cursor: pointer; } .switch input:checked + div { transform: translate3d(100%, 0, 0); background: #EEEEEE; } nav { display: flex; flex-direction: column; gap: 6px; } .inner_panel { display: flex; flex-direction: column; gap: 6px; padding: 4px; width: 100%; margin-left: 4px; } .tab_button { display: flex; width: 48px; height: 48px; justify-content: center; align-items: center; background: hsla(0, 0%, 20%, 0.5); border-radius: 4px; border: none; transition: all 100ms cubic-bezier(0.4, 0, 0.2, 1); } .tab_button:hover, .tab_button.active { background: hsla(0, 0%, 40%, 0.5); } #backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 9; backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); } .watermark { position: fixed; top: 8px; left: 50%; transform: translateX(-50%); } .subheading { font-weight: 600; } .view-option { text-align: left; align-items: center; height: 28px; display: flex; } .custom-input { background: hsla(0, 0%, 10%, 0.7); border: 1px solid hsla(0, 0%, 100%, 0.1); border-radius: 4px; padding: 6px; outline: none; } .text-muted { color: #BBBBBB; } `; backdrop.appendChild(panel); document.body.appendChild(backdrop); document.head.appendChild(style); function toggleDisplay(elementId) { const element = document.getElementById(elementId); const backdrop = document.getElementById("backdrop"); const isHidden = element.style.display === "none"; element.style.display = isHidden ? "block" : "none"; backdrop.style.display = isHidden ? "block" : "none"; } function setActiveTab(activeTab) { [visual_tab, auto_upgrades_tab, credits_tab].forEach((tab) => tab.classList.remove("active"), ); activeTab.classList.add("active"); } let X, Y, x, y; let Z = false; let radius = []; document.body.onkeyup = function (ctx) { if (ctx.keyCode === 82) { toggleDisplay("backdrop"); } else if (document.activeElement === au_input) { const key = parseInt(ctx.key); if (key >= 1 && key <= 8) { au_input.value += ctx.key; } else if (ctx.keyCode === 8) { au_input.value = au_input.value.slice(0, -1); } } }; document.onmousemove = (event) => { x = event.clientX; y = event.clientY; }; document.onmousedown = (e) => { if (e.button === 2) Z = true; }; document.onmouseup = (e) => { if (e.button === 2) Z = false; }; const canvas = document.createElement("canvas"); canvas.style.zIndex = "11"; canvas.style.position = "absolute"; canvas.style.top = "0px"; canvas.style.left = "0px"; canvas.style.pointerEvents = "none"; function getRadius() { X = window.innerWidth / 2; Y = window.innerHeight / 2; canvas.width = window.innerWidth; canvas.height = window.innerHeight; radius = [ window.innerWidth * 0.17681239669, window.innerWidth * 0.06545454545, window.innerWidth * 0.16751239669, window.innerWidth * 0.36, ]; } getRadius(); window.addEventListener("resize", getRadius); document.body.appendChild(canvas); const ctx = canvas.getContext("2d"); function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); if (view_line_toggle.checked) { ctx.beginPath(); ctx.moveTo(X, Y); ctx.lineTo(x, y); ctx.lineWidth = 50; ctx.strokeStyle = "rgba(0, 0, 0, 0.05)"; ctx.stroke(); ctx.beginPath(); ctx.moveTo(X, Y); ctx.lineTo(x, y); ctx.lineWidth = 2; ctx.strokeStyle = "rgba(0, 0, 0, 0.7)"; ctx.stroke(); } if (view_circle_toggle.checked) { ctx.lineWidth = 2; ctx.strokeStyle = "rgba(0, 0, 0, 0.7)"; ctx.beginPath(); ctx.arc(X, Y, radius[3], 0, 2 * Math.PI); ctx.stroke(); ctx.beginPath(); ctx.arc(x, y, radius[1], 0, 2 * Math.PI); ctx.stroke(); ctx.beginPath(); ctx.arc(x, y, Z ? radius[0] : radius[2], 0, 2 * Math.PI); ctx.stroke(); } if (au_autoset_toggle.checked) { input.execute("game_stats_build " + au_input.value); } requestAnimationFrame(draw); } draw(); visual_tab.click(); })();