// ==UserScript== // @name Diep.io Custom Points Upgrader. Beta // @namespace http://tampermonkey.net/ // @version 10.07 // @homepage https://greasyfork.org/scripts/416440 // @description NEW! custom upgrade builds update! Your upgrade builds will save now! This is still in beta! // @author -{Abyss⌬}-ora // @match https://diep.io/* // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/416440/Diepio%20Custom%20Points%20Upgrader%20Beta.user.js // @updateURL https://update.greasyfork.icu/scripts/416440/Diepio%20Custom%20Points%20Upgrader%20Beta.meta.js // ==/UserScript== (function () { "use strict"; function getScriptVersion() { const metadataBlock = ` // ==UserScript== // @name Diep.io Custom Points Upgrader. Beta // @namespace http://tampermonkey.net/ // @version 10.07 // @homepage https://greasyfork.org/scripts/416440 // @description NEW! custom upgrade builds update! Your upgrade builds will save now! This is still in beta! // @author -{Abyss⌬}-ora // @match https://diep.io/* // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/416440/Diepio%20Custom%20Points%20Upgrader%20Beta.user.js // @updateURL https://update.greasyfork.icu/scripts/416440/Diepio%20Custom%20Points%20Upgrader%20Beta.meta.js // ==/UserScript==`; const versionMatch = metadataBlock.match(/@version\s+([\d.]+)/); return versionMatch ? versionMatch[1] : null; } function saveDataBeforeUpdate() { const dataToSave = { quickSpawnUsername: localStorage.getItem("quickSpawnUsername"), savedNames: localStorage.getItem("savedNames"), savedButtons: localStorage.getItem("savedButtons"), removedDefaults: localStorage.getItem("removedDefaults") }; localStorage.setItem("backupData", JSON.stringify(dataToSave)); } function retrieveDataAfterUpdate() { const backupData = JSON.parse(localStorage.getItem("backupData")); if (backupData) { localStorage.setItem("quickSpawnUsername", backupData.quickSpawnUsername); localStorage.setItem("savedNames", backupData.savedNames); localStorage.setItem("savedButtons", backupData.savedButtons); localStorage.setItem("removedDefaults", backupData.removedDefaults); } } function checkAndUpdateVersion() { const currentVersion = getScriptVersion(); const savedVersion = localStorage.getItem("scriptVersion"); if (!savedVersion || savedVersion < currentVersion) { retrieveDataAfterUpdate(); localStorage.setItem("scriptVersion", currentVersion); } } saveDataBeforeUpdate(); checkAndUpdateVersion(); const hoverMenu = document.createElement("div"); hoverMenu.id = "myhover"; hoverMenu.className = "hover"; const modMenu = document.createElement("a"); modMenu.id = "modtab"; const menuHeader = document.createElement("h1"); const versionText = document.createElement("small"); const smallerVersionText = document.createElement("small"); smallerVersionText.textContent = `Version: ${getScriptVersion()}`; versionText.appendChild(smallerVersionText); menuHeader.appendChild(versionText); menuHeader.appendChild(document.createElement("br")); menuHeader.appendChild(document.createTextNode("-{Abyss⌬}-ora's Mod Menu beta")); modMenu.appendChild(menuHeader); const topRightButton = document.createElement("button"); topRightButton.id = "topRightButton"; topRightButton.textContent = "↻"; const style = document.createElement("style"); style.type = "text/css"; style.textContent = ` #myhover a { z-index: 999; position: absolute; top: 300px; right: -260px; transition: 0.3s; width: 250px; padding: 15px; background-image: url("https://media.tenor.com/images/f3f5354b7c304bc61882dbb1183885e7/tenor.gif"); background-color: #555; text-decoration: none; font-size: 10px; font-family: 'Monoton', cursive; text-shadow: 1px 1px #000, 2px 2px #555; color: white; border: double thick white; border-radius: 20px; } #myhover a:hover { right: 0; } .button { display: block; margin: 5px auto; width: 90%; text-align: center; font-size: 18px; font-family: 'Jersey 10', sans-serif; color: black; background-color: white; border-radius: 5px; transition: 0.4s; cursor: pointer; } .button:hover { transform: translateX(-10px); } #userInput { margin: 5px auto; width: 90%; padding: 8px; font-family: 'Monoton', cursive; text-align: center; } #specialButton { display: block; margin: 5px auto; width: 90%; text-align: center; font-size: 18px; font-family: 'Jersey 10', sans-serif; color: white; background-color: black; border-radius: 5px; border-color: white; transition: 0.4s; cursor: pointer; opacity: 0.8; } #specialButton:hover { color: black; background-color: darkgray; transform: translateX(-10px); } .popup { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; background-image: url("https://media.tenor.com/images/f3f5354b7c304bc61882dbb1183885e7/tenor.gif"); background-color: white; border: double thick white; border-radius: 10px; padding: 20px; z-index: 1000; text-shadow: 1px 1px #000, 2px 2px #555; } .attribute { display: flex; align-items: center; margin-bottom: 10px; } .attribute div { width: 30px; height: 30px; border: 1px solid #000; margin: 0; } .attribute button { background-color: gray; border: none; color: black; font-size: 20px; cursor: pointer; width: 30px; height: 30px; margin: 0; } #pointsCounter { text-align: center; font-size: 16px; margin-bottom: 10px; } #createBuildButton { display: block; margin: 20px auto 0 auto; width: 80%; text-align: center; font-size: 18px; font-family: 'Jersey 10', sans-serif; color: black; background-color: white; border-radius: 5px; border: 2px solid black; cursor: pointer; padding: 10px; } #createBuildButton:hover { background-color: gray; color: white; } #codeString { text-align: center; font-size: 18px; margin: 10px 0; } .remove-button { background-color: gray; border: none; color: white; font-size: 18px; cursor: pointer; width: 30px; height: 30px; margin-right: 5px; transition: background-color 0.3s; } .remove-button:hover { background-color: red; } .edit-button { background-color: gray; border: none; color: white; font-size: 18px; cursor: pointer; width: 30px; height: 30px; margin-right: 5px; transition: background-color 0.3s; } .edit-button:hover { background-color: lightgray; } .close-btn { display: flex; justify-content: center; align-items: center; position: absolute; top: 1px; z-index: 10; right: 0px; width: 40px; height: 35px; color: white; cursor: pointer; font-size: 18px; line-height: 30px; text-align: center; transition: background-color 0.3s; text-shadow: 1px 1px #000, 2px 2px #555; border-radius: 10px; background-color: rgba(0, 0, 0, 0.8); } .close-btn:hover { background-color: red; } #topRightButton { position: absolute; top: 10px; right: 10px; width: 30px; height: 30px; background-color: black; color: white; border: none; border-radius: 10%; cursor: pointer; font-size: 18px; display: flex; justify-content: center; align-items: center; transition: background-color 0.3s; z-index: 1001; opacity: 0.8; } #topRightButton:hover { color: red; } #buildButtonsContainer { max-height: 400px; overflow-y: scroll; margin-left: 5px; } #buildButtonsContainer { -ms-overflow-style: none; scrollbar-width: none; } ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 10px; } ::-webkit-scrollbar-thumb { background: #888; border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: #555; } .popup { position: fixed; z-index: 9; background-color: #f1f1f1; border: 1px solid #d3d3d3; text-align: center; padding-top: 40px; } .popup-header { display: flex; justify-content: center; align-items: center; position: absolute; top: 1px; left: 0px; right: 35px; height: 30px; cursor: grabbing; z-index: 10; background-color: rgba(5, 5,5, 0.8); color: #fff; font-size: 10px; font-family: 'Monoton', cursive; text-shadow: 1px 1px #000, 2px 2px #555; border-color: white; border-radius: 10px; } `; document.head.appendChild(style); const inputContainer = document.createElement("div"); inputContainer.style.position = "relative"; inputContainer.style.width = "90%"; inputContainer.style.margin = "5px auto"; const heartIcon = document.createElement("span"); heartIcon.textContent = "♥"; heartIcon.style.position = "absolute"; heartIcon.style.left = "10px"; heartIcon.style.top = "50%"; heartIcon.style.transform = "translateY(-50%)"; heartIcon.style.cursor = "pointer"; heartIcon.style.fontSize = "18px"; heartIcon.style.color = "black"; const userInput = document.createElement("input"); userInput.id = "userInput"; userInput.type = "text"; userInput.placeholder = "Enter Username"; userInput.value = localStorage.getItem("quickSpawnUsername") || ""; userInput.style.width = "100%"; userInput.style.padding = "8px 30px 8px 30px"; userInput.style.border = "2px solid black"; userInput.style.borderRadius = "5px"; userInput.style.boxSizing = "border-box"; userInput.style.fontFamily = "'Monoton', cursive"; userInput.style.textAlign = "center"; const dropdownArrow = document.createElement("span"); dropdownArrow.textContent = "▼"; dropdownArrow.style.position = "absolute"; dropdownArrow.style.right = "10px"; dropdownArrow.style.top = "50%"; dropdownArrow.style.transform = "translateY(-50%)"; dropdownArrow.style.cursor = "pointer"; dropdownArrow.style.fontSize = "14px"; dropdownArrow.style.color = "black"; const dropdown = document.createElement("div"); dropdown.id = "dropdownMenu"; dropdown.style.position = "absolute"; dropdown.style.width = "100%"; dropdown.style.top = "100%"; dropdown.style.left = "0"; dropdown.style.backgroundImage = "url('https://media.tenor.com/images/f3f5354b7c304bc61882dbb1183885e7/tenor.gif')"; dropdown.style.border = "4px double white"; dropdown.style.borderTop = "none"; dropdown.style.display = "none"; dropdown.style.zIndex = "100"; dropdown.style.maxHeight = "150px"; dropdown.style.overflowY = "auto"; dropdownArrow.addEventListener("click", () => { dropdown.style.display = dropdown.style.display === "block" ? "none" : "block"; }); document.addEventListener("click", (event) => { if (!inputContainer.contains(event.target)) { dropdown.style.display = "none"; } }); userInput.addEventListener("input", (event) => { localStorage.setItem("quickSpawnUsername", event.target.value); updateHeartIcon(); }); heartIcon.addEventListener("click", () => { const name = userInput.value.trim(); if (name) { const savedNames = JSON.parse(localStorage.getItem("savedNames")) || []; const nameIndex = savedNames.indexOf(name); if (nameIndex === -1) { savedNames.push(name); heartIcon.style.color = "red"; } else { savedNames.splice(nameIndex, 1); heartIcon.style.color = "black"; } localStorage.setItem("savedNames", JSON.stringify(savedNames)); updateDropdown(savedNames); } }); function updateDropdown(names) { dropdown.innerHTML = ""; names.forEach(name => { const optionContainer = document.createElement("div"); optionContainer.style.display = "flex"; optionContainer.style.alignItems = "center"; optionContainer.style.justifyContent = "space-between"; optionContainer.style.padding = "8px"; optionContainer.style.cursor = "pointer"; optionContainer.style.fontFamily = "'Monoton', cursive"; optionContainer.style.textAlign = "center"; optionContainer.style.fontSize = "18px"; optionContainer.style.backgroundImage = "url('https://media.tenor.com/images/f3f5354b7c304bc61882dbb1183885e7/tenor.gif')"; optionContainer.style.transition = "background 0.3s"; const option = document.createElement("div"); option.textContent = name; option.style.flexGrow = "1"; option.style.textAlign = "left"; option.addEventListener("mouseover", () => { optionContainer.style.backgroundColor = "rgba(169, 169, 169, 0.8)"; }); option.addEventListener("mouseout", () => { optionContainer.style.backgroundColor = "transparent"; }); option.addEventListener("click", () => { userInput.value = name; dropdown.style.display = "none"; localStorage.setItem("quickSpawnUsername", name); updateHeartIcon(); }); optionContainer.appendChild(option); dropdown.appendChild(optionContainer); }); } function updateHeartIcon() { const name = userInput.value.trim(); const savedNames = JSON.parse(localStorage.getItem("savedNames")) || []; if (savedNames.includes(name)) { heartIcon.style.color = "red"; } else { heartIcon.style.color = "black"; } } const savedNames = JSON.parse(localStorage.getItem("savedNames")) || []; updateDropdown(savedNames); updateHeartIcon(); inputContainer.appendChild(heartIcon); inputContainer.appendChild(userInput); inputContainer.appendChild(dropdownArrow); inputContainer.appendChild(dropdown); modMenu.appendChild(inputContainer); const buttons = []; buttons.forEach((buttonData) => { const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.alignItems = "center"; buttonContainer.style.justifyContent = "center"; const button = document.createElement("button"); button.className = "button"; button.textContent = buttonData.name; button.style.backgroundColor = buttonData.color; button.onclick = () => { const spawnName = userInput.value.trim(); window.input.execute(`game_spawn ${spawnName}`); window.input.execute(`game_stats_build ${buttonData.cmd}`); const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } }; buttonContainer.appendChild(button); modMenu.appendChild(buttonContainer); }); const specialButton = document.createElement("button"); specialButton.id = "specialButton"; specialButton.textContent = "[+]"; specialButton.onclick = () => { const popup = document.createElement("div"); popup.className = "popup"; popup.id = "resetPopup"; popup.innerHTML = ` `; document.body.appendChild(popup); const closeButton = document.createElement("button"); closeButton.className = "close-btn"; closeButton.textContent = "X"; closeButton.onclick = () => { document.body.removeChild(popup); }; popup.appendChild(closeButton); const buildNameInput = document.createElement("input"); buildNameInput.type = "text"; buildNameInput.placeholder = "Build Name"; buildNameInput.style.display = "block"; buildNameInput.style.width = "80%"; buildNameInput.style.margin = "0 auto 10px auto"; popup.appendChild(buildNameInput); const pointsCounter = document.createElement("div"); pointsCounter.id = "pointsCounter"; pointsCounter.textContent = "Points: 33"; popup.appendChild(pointsCounter); const codeString = document.createElement("input"); codeString.id = "codeString"; codeString.type = "text"; codeString.value = ""; codeString.style.display = "block"; codeString.style.width = "80%"; codeString.style.margin = "0 auto 10px auto"; popup.appendChild(codeString); let totalPoints = 33; let code = ""; const attributes = [ { name: "Health Regen", color: "rgb(232, 188, 157)" }, { name: "Max Health", color: "rgb(230, 128, 234)" }, { name: "Body Damage", color: "rgb(165, 128, 234)" }, { name: "Bullet Speed", color: "rgb(128, 162, 234)" }, { name: "Bullet Penetration", color: "rgb(234, 215, 128)" }, { name: "Bullet Damage", color: "rgb(234, 128, 128)" }, { name: "Reload", color: "rgb(164, 234, 128)" }, { name: "Movement Speed", color: "rgb(128, 234, 230)" }, ]; function updateAttributes() { totalPoints = 33; attributes.forEach((attribute, index) => { const attributeRow = document.getElementById(`attributeRow-${index}`); const attributeCount = Math.min((code.match(new RegExp(index + 1, "g")) || []).length, 7); for (let i = 0; i < 7; i++) { const graySquare = attributeRow.children[i + 1]; if (i < attributeCount) { graySquare.style.backgroundColor = attribute.color; graySquare.style.border = "1px solid black"; totalPoints--; } else { graySquare.style.backgroundColor = "gray"; graySquare.style.border = "0"; } } }); pointsCounter.textContent = `Points: ${totalPoints}`; } attributes.forEach((attribute, index) => { const attributeRow = document.createElement("div"); attributeRow.className = "attribute"; attributeRow.id = `attributeRow-${index}`; attributeRow.style.position = "relative"; const minusButton = document.createElement("button"); minusButton.style.padding = "0 5px"; minusButton.style.border = "1px solid black"; minusButton.style.borderTopLeftRadius = "50px"; minusButton.style.borderBottomLeftRadius = "50px"; minusButton.style.borderTopRightRadius = "0"; minusButton.style.borderBottomRightRadius = "0"; minusButton.style.width = "32px"; minusButton.style.height = "32px"; minusButton.textContent = "-"; minusButton.onclick = () => { const coloredSquares = Array.from(attributeRow.children).filter(child => child !== plusButton && child.style.backgroundColor === attribute.color); if (coloredSquares.length > 0) { const square = coloredSquares[coloredSquares.length - 1]; square.style.backgroundColor = "gray"; square.style.border = "0"; totalPoints++; pointsCounter.textContent = `Points: ${totalPoints}`; code = code.slice(0, -1); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(minusButton); for (let i = 0; i < 7; i++) { const colorDiv = document.createElement("div"); colorDiv.style.border = "0"; colorDiv.style.backgroundColor = "gray"; colorDiv.style.width = "30px"; colorDiv.style.height = "30px"; colorDiv.style.display = "inline-block"; colorDiv.style.position = "relative"; colorDiv.style.padding = "0 5px"; if (i === 3) { const textSpan = document.createElement("span"); textSpan.textContent = attribute.name; textSpan.style.position = "absolute"; textSpan.style.top = "50%"; textSpan.style.left = "50%"; textSpan.style.transform = "translate(-50%, -50%)"; textSpan.style.color = "white"; textSpan.style.pointerEvents = "none"; textSpan.style.whiteSpace = "nowrap"; textSpan.style.zIndex = "1"; textSpan.style.display = "inline-block"; textSpan.style.textShadow = "1px 1px 1px black, -1px -1px 1px black, -1px 1px 1px black, 1px -1px 1px black"; colorDiv.appendChild(textSpan); } attributeRow.appendChild(colorDiv); } const plusButton = document.createElement("button"); plusButton.style.padding = "0 5px"; plusButton.style.border = "1px solid black"; plusButton.style.borderTopLeftRadius = "0"; plusButton.style.borderBottomLeftRadius = "0"; plusButton.style.borderTopRightRadius = "50px"; plusButton.style.borderBottomRightRadius = "50px"; plusButton.style.width = "32px"; plusButton.style.height = "32px"; plusButton.style.color = "Black"; plusButton.style.fontWeight = "bold"; plusButton.textContent = "+"; plusButton.style.backgroundColor = attribute.color; plusButton.onclick = () => { const graySquares = Array.from(attributeRow.children).filter(child => child.style.backgroundColor === "gray" && child !== plusButton); if (graySquares.length > 0) { const square = graySquares[0]; square.style.backgroundColor = attribute.color; square.style.border = "1px solid black"; totalPoints--; pointsCounter.textContent = `Points: ${totalPoints}`; code += (index + 1).toString(); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(plusButton); popup.appendChild(attributeRow); }); codeString.addEventListener("input", (event) => { code = event.target.value; updateAttributes(); }); const createBuildButton = document.createElement("button"); createBuildButton.id = "createBuildButton"; createBuildButton.textContent = "Create Build"; createBuildButton.onclick = () => { const buildName = buildNameInput.value.trim(); if (buildName === "") { alert("Please enter a build name."); return; } let savedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const newButtonData = { name: buildName, color: "#C0C0C0", cmd: code }; savedButtons.push(newButtonData); localStorage.setItem("savedButtons", JSON.stringify(savedButtons)); const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.alignItems = "center"; buttonContainer.style.justifyContent = "center"; const editButton = document.createElement("button"); editButton.className = "edit-button"; editButton.textContent = "🖉"; editButton.style.width = "30px"; editButton.style.height = "30px"; editButton.onclick = () => { createEditPopup(buttonContainer, newButtonData); }; buttonContainer.appendChild(editButton); const newButton = document.createElement("button"); newButton.className = "button"; newButton.textContent = buildName; newButton.style.backgroundColor = "#C0C0C0"; newButton.style.width = "100px"; newButton.style.height = "30px"; newButton.onclick = () => { const spawnName = userInput.value.trim(); window.input.execute(`game_spawn ${spawnName}`); window.input.execute(`game_stats_build ${code}`); const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } }; buttonContainer.appendChild(newButton); buildButtonsContainer.appendChild(buttonContainer); document.body.removeChild(popup); }; popup.appendChild(createBuildButton); document.body.appendChild(popup); dragElement(document.getElementById("resetPopup")); }; modMenu.appendChild(specialButton); modMenu.appendChild(topRightButton); hoverMenu.appendChild(modMenu); document.body.appendChild(hoverMenu); document.addEventListener("keydown", (event) => { if ((event.key === "r" || event.key === "R") && !["INPUT", "TEXTAREA"].includes(event.target.tagName)) { const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } } }); window.onload = () => { const userInput = document.getElementById("userInput"); const specialButton = document.getElementById("specialButton"); const modMenu = document.getElementById("modtab"); const topRightButton = document.getElementById("topRightButton"); const savedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const buildButtonsContainer = document.createElement("div"); buildButtonsContainer.id = "buildButtonsContainer"; buildButtonsContainer.style.maxHeight = "400px"; buildButtonsContainer.style.overflowY = "scroll"; buildButtonsContainer.style.color = "black"; modMenu.insertBefore(buildButtonsContainer, specialButton); function createButton(buttonData) { const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.alignItems = "center"; buttonContainer.style.justifyContent = "center"; const editButton = document.createElement("button"); editButton.className = "edit-button"; editButton.textContent = "🖉"; editButton.onclick = () => { createEditPopup(buttonContainer, buttonData); }; buttonContainer.appendChild(editButton); const button = document.createElement("button"); button.className = "button"; button.textContent = buttonData.name; button.style.backgroundColor = buttonData.color; button.onclick = () => { const spawnName = userInput.value.trim(); window.input.execute(`game_spawn ${spawnName}`); window.input.execute(`game_stats_build ${buttonData.cmd}`); const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } }; buttonContainer.appendChild(button); buildButtonsContainer.appendChild(buttonContainer); } savedButtons.forEach(buttonData => createButton(buttonData)); const createBuildButton = document.getElementById("createBuildButton"); createBuildButton.onclick = () => { const buildNameInput = document.getElementById("buildNameInput"); const buildName = buildNameInput.value.trim(); if (buildName === "") { alert("Please enter a build name."); return; } const code = "some_code_here"; let savedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; savedButtons.push({ name: buildName, color: "#C0C0C0", cmd: code }); localStorage.setItem("savedButtons", JSON.stringify(savedButtons)); const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.alignItems = "center"; buttonContainer.style.justifyContent = "center"; const editButton = document.createElement("button"); editButton.className = "edit-button"; editButton.textContent = "🖉"; editButton.onclick = () => { createEditPopup(buttonContainer, { name: buildName, color: "#C0C0C0", cmd: code }); }; buttonContainer.appendChild(editButton); const newButton = document.createElement("button"); newButton.className = "button"; newButton.textContent = buildName; newButton.style.backgroundColor = "#C0C0C0"; newButton.onclick = () => { const spawnName = userInput.value.trim(); window.input.execute(`game_spawn ${spawnName}`); window.input.execute(`game_stats_build ${code}`); const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } }; buttonContainer.appendChild(newButton); buildButtonsContainer.appendChild(buttonContainer); document.body.removeChild(popup); }; }; document.getElementById("userInput").addEventListener("input", (event) => { localStorage.setItem("quickSpawnUsername", event.target.value); }); topRightButton.addEventListener("click", () => { const resetPopup = document.createElement("div"); resetPopup.className = "popup"; const closeButton = document.createElement("button"); closeButton.className = "close-btn"; closeButton.textContent = "X"; closeButton.onclick = () => { document.body.removeChild(resetPopup); }; resetPopup.appendChild(closeButton); const confirmationMessage = document.createElement("div"); confirmationMessage.textContent = "Do you really want to reset to default builds?"; confirmationMessage.style.textAlign = "center"; confirmationMessage.style.marginBottom = "20px"; resetPopup.appendChild(confirmationMessage); const buttonsContainer = document.createElement("div"); buttonsContainer.style.display = "flex"; buttonsContainer.style.justifyContent = "space-between"; const noButton = document.createElement("button"); noButton.className = "button"; noButton.textContent = "NO"; noButton.onclick = () => { document.body.removeChild(resetPopup); }; buttonsContainer.appendChild(noButton); const yesButton = document.createElement("button"); yesButton.className = "button"; yesButton.textContent = "YES"; yesButton.onclick = () => { localStorage.removeItem("savedButtons"); localStorage.removeItem("removedDefaults"); location.reload(); }; buttonsContainer.appendChild(yesButton); resetPopup.appendChild(buttonsContainer); document.body.appendChild(resetPopup); dragElement(document.getElementById("resetPopup")); dragElementVertical(document.getElementById("mainMenu")); }); function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (document.getElementById(elmnt.id + "Header")) { document.getElementById(elmnt.id + "Header").onmousedown = dragMouseDown; } else { elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } function dragElementVertical(elmnt) { var pos2 = 0, pos4 = 0; if (document.getElementById(elmnt.id + "Header")) { document.getElementById(elmnt.id + "Header").onmousedown = dragMouseDown; } else { elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); pos2 = pos4 - e.clientY; pos4 = e.clientY; elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } function createRemovePopup(buttonContainer, buttonData) { const popup = document.createElement("div"); popup.className = "popup"; popup.id = "removePopup"; popup.innerHTML = ` `; document.body.appendChild(popup); const closeButton = document.createElement("button"); closeButton.className = "close-btn"; closeButton.textContent = "X"; closeButton.onclick = () => { document.body.removeChild(popup); }; popup.appendChild(closeButton); const buildNameInput = document.createElement("input"); buildNameInput.type = "text"; buildNameInput.placeholder = "Build Name"; buildNameInput.style.display = "block"; buildNameInput.style.width = "80%"; buildNameInput.style.margin = "0 auto 10px auto"; buildNameInput.value = buttonData.name; popup.appendChild(buildNameInput); const pointsCounter = document.createElement("div"); pointsCounter.id = "pointsCounter"; pointsCounter.textContent = "Points: 33"; popup.appendChild(pointsCounter); const codeString = document.createElement("input"); codeString.id = "codeString"; codeString.type = "text"; codeString.value = buttonData.cmd; codeString.style.display = "block"; codeString.style.width = "80%"; codeString.style.margin = "0 auto 10px auto"; popup.appendChild(codeString); let totalPoints = 33; let code = buttonData.cmd; const attributes = [ { name: "Health Regen", color: "rgb(232, 188, 157)" }, { name: "Max Health", color: "rgb(230, 128, 234)" }, { name: "Body Damage", color: "rgb(165, 128, 234)" }, { name: "Bullet Speed", color: "rgb(128, 162, 234)" }, { name: "Bullet Penetration", color: "rgb(234, 215, 128)" }, { name: "Bullet Damage", color: "rgb(234, 128, 128)" }, { name: "Reload", color: "rgb(164, 234, 128)" }, { name: "Movement Speed", color: "rgb(128, 234, 230)" }, ]; function updateAttributes() { totalPoints = 33; attributes.forEach((attribute, index) => { const attributeRow = document.getElementById(`attributeRow-${index}`); const attributeCount = Math.min((code.match(new RegExp(index + 1, "g")) || []).length, 7); for (let i = 0; i < 7; i++) { const graySquare = attributeRow.children[i + 1]; if (i < attributeCount) { graySquare.style.backgroundColor = attribute.color; graySquare.style.border = "1px solid black"; totalPoints--; } else { graySquare.style.backgroundColor = "gray"; graySquare.style.border = "0"; } } }); pointsCounter.textContent = `Points: ${totalPoints}`; } attributes.forEach((attribute, index) => { const attributeRow = document.createElement("div"); attributeRow.className = "attribute"; attributeRow.id = `attributeRow-${index}`; attributeRow.style.position = "relative"; const minusButton = document.createElement("button"); minusButton.style.padding = "0 5px"; minusButton.style.border = "1px solid black"; minusButton.style.borderTopLeftRadius = "50px"; minusButton.style.borderBottomLeftRadius = "50px"; minusButton.style.borderTopRightRadius = "0"; minusButton.style.borderBottomRightRadius = "0"; minusButton.style.width = "32px"; minusButton.style.height = "32px"; minusButton.textContent = "-"; minusButton.onclick = () => { const coloredSquares = Array.from(attributeRow.children).filter(child => child !== plusButton && child.style.backgroundColor === attribute.color); if (coloredSquares.length > 0 && totalPoints < 33) { const square = coloredSquares[coloredSquares.length - 1]; square.style.backgroundColor = "gray"; square.style.border = "0"; totalPoints++; pointsCounter.textContent = `Points: ${totalPoints}`; code = code.slice(0, -1); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(minusButton); for (let i = 0; i < 7; i++) { const colorDiv = document.createElement("div"); colorDiv.style.border = "0"; colorDiv.style.backgroundColor = "gray"; colorDiv.style.width = "30px"; colorDiv.style.height = "30px"; colorDiv.style.display = "inline-block"; colorDiv.style.position = "relative"; colorDiv.style.padding = "0 5px"; if (i === 3) { const textSpan = document.createElement("span"); textSpan.textContent = attribute.name; textSpan.style.position = "absolute"; textSpan.style.top = "50%"; textSpan.style.left = "50%"; textSpan.style.transform = "translate(-50%, -50%)"; textSpan.style.color = "white"; textSpan.style.pointerEvents = "none"; textSpan.style.whiteSpace = "nowrap"; textSpan.style.zIndex = "1"; textSpan.style.display = "inline-block"; textSpan.style.textShadow = "1px 1px 1px black, -1px -1px 1px black, -1px 1px 1px black, 1px -1px 1px black"; textSpan.className = "attribute-text"; colorDiv.appendChild(textSpan); } attributeRow.appendChild(colorDiv); } const plusButton = document.createElement("button"); plusButton.style.padding = "0 5px"; plusButton.style.border = "1px solid black"; plusButton.style.borderTopLeftRadius = "0"; plusButton.style.borderBottomLeftRadius = "0"; plusButton.style.borderTopRightRadius = "50px"; plusButton.style.borderBottomRightRadius = "50px"; plusButton.style.width = "32px"; plusButton.style.height = "32px"; plusButton.style.color = "Black"; plusButton.style.fontWeight = "bold"; plusButton.textContent = "+"; plusButton.style.backgroundColor = attribute.color; plusButton.onclick = () => { const graySquares = Array.from(attributeRow.children).filter(child => child.style.backgroundColor === "gray" && child !== plusButton); if (graySquares.length > 0 && totalPoints > 0) { const square = graySquares[0]; square.style.backgroundColor = attribute.color; square.style.border = "1px solid black"; totalPoints--; pointsCounter.textContent = `Points: ${totalPoints}`; code += (index + 1).toString(); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(plusButton); popup.appendChild(attributeRow); }); codeString.addEventListener("input", (event) => { code = event.target.value; updateAttributes(); adjustFontSize(codeString); }); updateAttributes(); adjustFontSize(codeString); const deleteButton = document.createElement("button"); deleteButton.id = "deleteButton"; deleteButton.textContent = "Delete Build"; deleteButton.style.display = "block"; deleteButton.style.margin = "10px auto"; deleteButton.style.width = "80%"; deleteButton.style.textAlign = "center"; deleteButton.style.fontSize = "14px"; deleteButton.style.color = "black"; deleteButton.style.backgroundColor = "white"; deleteButton.style.border = "2px solid black"; deleteButton.style.borderRadius = "5px"; deleteButton.style.cursor = "pointer"; deleteButton.onclick = () => { const confirmationPopup = document.createElement("div"); confirmationPopup.className = "popup"; confirmationPopup.id = "confirmationPopup"; confirmationPopup.innerHTML = ` `; document.body.appendChild(confirmationPopup); const confirmationMessage = document.createElement("div"); confirmationMessage.textContent = "Are you sure you want to delete this build?"; confirmationMessage.style.textAlign = "center"; confirmationMessage.style.marginBottom = "20px"; confirmationPopup.appendChild(confirmationMessage); const buttonsContainer = document.createElement("div"); buttonsContainer.style.display = "flex"; buttonsContainer.style.justifyContent = "space-between"; const noButton = document.createElement("button"); noButton.className = "button"; noButton.textContent = "NO"; noButton.onclick = () => { document.body.removeChild(confirmationPopup); }; buttonsContainer.appendChild(noButton); const yesButton = document.createElement("button"); yesButton.className = "button"; yesButton.textContent = "YES"; yesButton.onclick = () => { buttonContainer.remove(); const updatedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const newSavedButtons = updatedButtons.filter(b => b.name !== buttonData.name); localStorage.setItem("savedButtons", JSON.stringify(newSavedButtons)); document.body.removeChild(confirmationPopup); document.body.removeChild(popup); }; buttonsContainer.appendChild(yesButton); confirmationPopup.appendChild(buttonsContainer); document.body.appendChild(confirmationPopup); dragElement(document.getElementById("confirmationPopup")); }; popup.appendChild(deleteButton); const saveChangesButton = document.createElement("button"); saveChangesButton.id = "saveChangesButton"; saveChangesButton.textContent = "Save Changes"; saveChangesButton.style.display = "block"; saveChangesButton.style.margin = "10px auto"; saveChangesButton.style.width = "80%"; saveChangesButton.style.textAlign = "center"; saveChangesButton.style.fontSize = "14px"; saveChangesButton.style.color = "black"; saveChangesButton.style.backgroundColor = "white"; saveChangesButton.style.border = "2px solid black"; saveChangesButton.style.borderRadius = "5px"; saveChangesButton.style.cursor = "pointer"; saveChangesButton.onclick = () => { const buildName = buildNameInput.value.trim(); if (buildName === "") { alert("Please enter a build name."); return; } buttonData.name = buildName; buttonData.cmd = codeString.value; const button = buttonContainer.querySelector(".button"); button.textContent = buildName; const savedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const updatedButtons = savedButtons.map(b => b.name === buttonData.name ? buttonData : b); localStorage.setItem("savedButtons", JSON.stringify(updatedButtons)); document.body.removeChild(popup); }; popup.appendChild(saveChangesButton); document.body.appendChild(popup); dragElement(document.getElementById("removePopup")); } function adjustFontSize(element) { let fontSize = 16; element.style.fontSize = fontSize + "px"; while (element.scrollWidth > element.clientWidth && fontSize > 6) { fontSize--; element.style.fontSize = fontSize + "px"; } } function createEditPopup(buttonContainer, buttonData) { const popupId = `editPopup-${Date.now()}`; const popup = document.createElement("div"); popup.className = "popup"; popup.id = popupId; popup.innerHTML = ` `; document.body.appendChild(popup); const closeButton = document.createElement("button"); closeButton.className = "close-btn"; closeButton.textContent = "X"; closeButton.onclick = () => { document.body.removeChild(popup); }; popup.appendChild(closeButton); const buildNameInput = document.createElement("input"); buildNameInput.type = "text"; buildNameInput.placeholder = "Build Name"; buildNameInput.style.display = "block"; buildNameInput.style.width = "80%"; buildNameInput.style.margin = "0 auto 10px auto"; buildNameInput.value = buttonData.name; popup.appendChild(buildNameInput); const pointsCounter = document.createElement("div"); pointsCounter.id = `pointsCounter-${popupId}`; pointsCounter.textContent = "Points: 33"; popup.appendChild(pointsCounter); const codeString = document.createElement("input"); codeString.id = `codeString-${popupId}`; codeString.type = "text"; codeString.value = buttonData.cmd; codeString.style.display = "block"; codeString.style.width = "80%"; codeString.style.margin = "0 auto 10px auto"; popup.appendChild(codeString); let totalPoints = 33; let code = buttonData.cmd; const attributes = [ { name: "Health Regen", color: "rgb(232, 188, 157)" }, { name: "Max Health", color: "rgb(230, 128, 234)" }, { name: "Body Damage", color: "rgb(165, 128, 234)" }, { name: "Bullet Speed", color: "rgb(128, 162, 234)" }, { name: "Bullet Penetration", color: "rgb(234, 215, 128)" }, { name: "Bullet Damage", color: "rgb(234, 128, 128)" }, { name: "Reload", color: "rgb(164, 234, 128)" }, { name: "Movement Speed", color: "rgb(128, 234, 230)" }, ]; function updateAttributes() { totalPoints = 33; attributes.forEach((attribute, index) => { const attributeRow = document.getElementById(`attributeRow-${popupId}-${index}`); const attributeCount = Math.min((code.match(new RegExp(index + 1, "g")) || []).length, 7); for (let i = 0; i < 7; i++) { const graySquare = attributeRow.children[i + 1]; if (i < attributeCount) { graySquare.style.backgroundColor = attribute.color; graySquare.style.border = "1px solid black"; totalPoints--; } else { graySquare.style.backgroundColor = "gray"; graySquare.style.border = "0"; } } }); pointsCounter.textContent = `Points: ${totalPoints}`; } attributes.forEach((attribute, index) => { const attributeRow = document.createElement("div"); attributeRow.className = "attribute"; attributeRow.id = `attributeRow-${popupId}-${index}`; attributeRow.style.position = "relative"; const minusButton = document.createElement("button"); minusButton.style.padding = "0 5px"; minusButton.style.border = "1px solid black"; minusButton.style.borderTopLeftRadius = "50px"; minusButton.style.borderBottomLeftRadius = "50px"; minusButton.style.borderTopRightRadius = "0"; minusButton.style.borderBottomRightRadius = "0"; minusButton.style.width = "32px"; minusButton.style.height = "32px"; minusButton.textContent = "-"; minusButton.onclick = () => { const coloredSquares = Array.from(attributeRow.children).filter(child => child !== plusButton && child.style.backgroundColor === attribute.color); if (coloredSquares.length > 0) { const square = coloredSquares[coloredSquares.length - 1]; square.style.backgroundColor = "gray"; square.style.border = "0"; totalPoints++; pointsCounter.textContent = `Points: ${totalPoints}`; code = code.slice(0, -1); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(minusButton); for (let i = 0; i < 7; i++) { const colorDiv = document.createElement("div"); colorDiv.style.border = "0"; colorDiv.style.backgroundColor = "gray"; colorDiv.style.width = "30px"; colorDiv.style.height = "30px"; colorDiv.style.display = "inline-block"; colorDiv.style.position = "relative"; colorDiv.style.padding = "0 5px"; if (i === 3) { const textSpan = document.createElement("span"); textSpan.textContent = attribute.name; textSpan.style.position = "absolute"; textSpan.style.top = "50%"; textSpan.style.left = "50%"; textSpan.style.transform = "translate(-50%, -50%)"; textSpan.style.color = "white"; textSpan.style.pointerEvents = "none"; textSpan.style.whiteSpace = "nowrap"; textSpan.style.zIndex = "1"; textSpan.style.display = "inline-block"; textSpan.style.textShadow = "1px 1px 1px black, -1px -1px 1px black, -1px 1px 1px black, 1px -1px 1px black"; colorDiv.appendChild(textSpan); } attributeRow.appendChild(colorDiv); } const plusButton = document.createElement("button"); plusButton.style.padding = "0 5px"; plusButton.style.border = "1px solid black"; plusButton.style.borderTopLeftRadius = "0"; plusButton.style.borderBottomLeftRadius = "0"; plusButton.style.borderTopRightRadius = "50px"; plusButton.style.borderBottomRightRadius = "50px"; plusButton.style.width = "32px"; plusButton.style.height = "32px"; plusButton.style.color = "Black"; plusButton.style.fontWeight = "bold"; plusButton.textContent = "+"; plusButton.style.backgroundColor = attribute.color; plusButton.onclick = () => { const graySquares = Array.from(attributeRow.children).filter(child => child.style.backgroundColor === "gray" && child !== plusButton); if (graySquares.length > 0) { const square = graySquares[0]; square.style.backgroundColor = attribute.color; square.style.border = "1px solid black"; totalPoints--; pointsCounter.textContent = `Points: ${totalPoints}`; code += (index + 1).toString(); codeString.value = code; updateAttributes(); } }; attributeRow.appendChild(plusButton); popup.appendChild(attributeRow); }); codeString.addEventListener("input", (event) => { code = event.target.value; updateAttributes(); }); updateAttributes(); const saveChangesButton = document.createElement("button"); saveChangesButton.id = `saveChangesButton-${popupId}`; saveChangesButton.textContent = "Save Changes"; saveChangesButton.style.display = "block"; saveChangesButton.style.margin = "10px auto"; saveChangesButton.style.width = "80%"; saveChangesButton.style.textAlign = "center"; saveChangesButton.style.fontSize = "14px"; saveChangesButton.style.color = "black"; saveChangesButton.style.backgroundColor = "white"; saveChangesButton.style.border = "2px solid black"; saveChangesButton.style.borderRadius = "5px"; saveChangesButton.style.cursor = "pointer"; saveChangesButton.onclick = () => { const buildName = buildNameInput.value.trim(); if (buildName === "") { alert("Please enter a build name."); return; } buttonData.name = buildName; buttonData.cmd = codeString.value; const button = buttonContainer.querySelector(".button"); button.textContent = buildName; const savedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const updatedButtons = savedButtons.map(b => b.name === buttonData.name ? buttonData : b); localStorage.setItem("savedButtons", JSON.stringify(updatedButtons)); document.body.removeChild(popup); }; popup.appendChild(saveChangesButton); const deleteButton = document.createElement("button"); deleteButton.id = `deleteButton-${popupId}`; deleteButton.textContent = "Delete Build"; deleteButton.style.display = "block"; deleteButton.style.margin = "10px auto"; deleteButton.style.width = "80%"; deleteButton.style.textAlign = "center"; deleteButton.style.fontSize = "14px"; deleteButton.style.color = "black"; deleteButton.style.backgroundColor = "white"; deleteButton.style.border = "2px solid black"; deleteButton.style.borderRadius = "5px"; deleteButton.style.cursor = "pointer"; deleteButton.onclick = () => { const confirmationPopup = document.createElement("div"); confirmationPopup.className = "popup"; confirmationPopup.id = `confirmationPopup-${popupId}`; confirmationPopup.innerHTML = ` `; document.body.appendChild(confirmationPopup); const confirmationMessage = document.createElement("div"); confirmationMessage.textContent = "Are you sure you want to delete this build?"; confirmationMessage.style.textAlign = "center"; confirmationMessage.style.marginBottom = "20px"; confirmationPopup.appendChild(confirmationMessage); const buttonsContainer = document.createElement("div"); buttonsContainer.style.display = "flex"; buttonsContainer.style.justifyContent = "space-between"; const noButton = document.createElement("button"); noButton.className = "button"; noButton.textContent = "NO"; noButton.onclick = () => { document.body.removeChild(confirmationPopup); }; buttonsContainer.appendChild(noButton); const yesButton = document.createElement("button"); yesButton.className = "button"; yesButton.textContent = "YES"; yesButton.onclick = () => { buttonContainer.remove(); const updatedButtons = JSON.parse(localStorage.getItem("savedButtons")) || []; const newSavedButtons = updatedButtons.filter(b => b.name !== buttonData.name); localStorage.setItem("savedButtons", JSON.stringify(newSavedButtons)); document.body.removeChild(confirmationPopup); document.body.removeChild(popup); }; buttonsContainer.appendChild(yesButton); confirmationPopup.appendChild(buttonsContainer); document.body.appendChild(confirmationPopup); dragElement(document.getElementById(`confirmationPopup-${popupId}`)); }; popup.appendChild(deleteButton); document.body.appendChild(popup); dragElement(document.getElementById(popupId)); } function createButton(buttonData) { const buttonContainer = document.createElement("div"); buttonContainer.style.display = "flex"; buttonContainer.style.alignItems = "center"; buttonContainer.style.justifyContent = "center"; const editButton = document.createElement("button"); editButton.className = "edit-button"; editButton.textContent = "🖉"; editButton.onclick = () => { createEditPopup(buttonContainer, buttonData); }; buttonContainer.appendChild(editButton); const button = document.createElement("button"); button.className = "button"; button.textContent = buttonData.name; button.style.backgroundColor = buttonData.color; button.onclick = () => { const spawnName = userInput.value.trim(); window.input.execute(`game_spawn ${spawnName}`); window.input.execute(`game_stats_build ${buttonData.cmd}`); const hoverMenu = document.getElementById("myhover"); if (hoverMenu) { hoverMenu.style.display = hoverMenu.style.display === "none" ? "block" : "none"; } }; buttonContainer.appendChild(button); buildButtonsContainer.appendChild(buttonContainer); } })();