您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Change your username, title, Nitro Cash balance, and GUI style across Nitro Type. Updates garage, dropdown, leagues, and team pages. GUI toggles via Ctrl+B. Nitro Cash is capped at 4,294,967,295.
// ==UserScript== // @name Nitro Type Modifier (Username, Title, and Cash) // @namespace https://www.youtube.com/@InternetTyper // @license MIT // @version 1.0 // @description Change your username, title, Nitro Cash balance, and GUI style across Nitro Type. Updates garage, dropdown, leagues, and team pages. GUI toggles via Ctrl+B. Nitro Cash is capped at 4,294,967,295. // @author Internet Typer // @match https://www.nitrotype.com/* // @grant none // ==/UserScript== (function() { 'use strict'; let originalUsername = localStorage.getItem("originalUsername"); if (!originalUsername) { let dropdownElement = document.querySelector(".dropdown--account .type-ellip--account"); if (dropdownElement && dropdownElement.textContent.trim()) { originalUsername = dropdownElement.textContent.trim(); } else { let garageElement = document.querySelector(".df.df--align-center .player-name--container span.type-ellip"); if (garageElement) { originalUsername = garageElement.textContent.trim(); } } if (originalUsername) { localStorage.setItem("originalUsername", originalUsername); } } // ---------- GUI Setup ---------- let savedColor = localStorage.getItem("guiColor") || "#3498db"; // Default color for drop shadow/title/hyperlink let guiVisible = localStorage.getItem("guiVisible"); if (guiVisible === null) { guiVisible = "true"; localStorage.setItem("guiVisible", "true"); } let gui = document.createElement("div"); gui.style.position = "fixed"; gui.style.top = "20px"; gui.style.left = "20px"; gui.style.background = "black"; // Always black background gui.style.padding = "15px"; gui.style.borderRadius = "8px"; gui.style.color = "white"; gui.style.fontFamily = "Arial, sans-serif"; gui.style.zIndex = "1000"; gui.style.display = (guiVisible === "true") ? "flex" : "none"; gui.style.flexDirection = "column"; gui.style.gap = "10px"; gui.style.boxShadow = `5px 5px 15px ${savedColor}`; let header = document.createElement("h3"); header.innerText = "Nitro Type Modifier"; header.style.marginBottom = "10px"; header.style.textAlign = "center"; header.style.color = savedColor; let userLabel = document.createElement("label"); userLabel.innerText = "Username:"; userLabel.style.fontWeight = "bold"; let userInput = document.createElement("input"); userInput.type = "text"; userInput.placeholder = "Enter new username (or leave blank)"; userInput.style.background = "white"; userInput.style.color = "black"; userInput.style.padding = "5px"; userInput.style.border = "none"; userInput.style.borderRadius = "3px"; let titleLabel = document.createElement("label"); titleLabel.innerText = "Title:"; titleLabel.style.fontWeight = "bold"; let titleInput = document.createElement("input"); titleInput.type = "text"; titleInput.placeholder = "Enter new title"; titleInput.style.background = "white"; titleInput.style.color = "black"; titleInput.style.padding = "5px"; titleInput.style.border = "none"; titleInput.style.borderRadius = "3px"; let cashLabel = document.createElement("label"); cashLabel.innerText = "Nitro Cash:"; cashLabel.style.fontWeight = "bold"; let cashInput = document.createElement("input"); cashInput.type = "number"; cashInput.placeholder = "Enter custom Nitro Cash balance"; cashInput.style.background = "white"; cashInput.style.color = "black"; cashInput.style.padding = "5px"; cashInput.style.border = "none"; cashInput.style.borderRadius = "3px"; let colorLabel = document.createElement("label"); colorLabel.innerText = "GUI Color:"; colorLabel.style.fontWeight = "bold"; let colorInput = document.createElement("input"); colorInput.type = "color"; colorInput.value = savedColor; colorInput.style.border = "none"; colorInput.style.borderRadius = "3px"; let applyButton = document.createElement("button"); applyButton.innerText = "Apply Changes"; applyButton.style.padding = "8px"; applyButton.style.border = "none"; applyButton.style.borderRadius = "5px"; applyButton.style.background = "gray"; applyButton.style.color = "white"; applyButton.style.cursor = "pointer"; applyButton.style.marginTop = "10px"; let errorDiv = document.createElement("div"); errorDiv.style.color = "red"; errorDiv.style.textAlign = "center"; errorDiv.style.display = "none"; let credits = document.createElement("div"); credits.innerHTML = 'Created by <a href="https://www.youtube.com/@InternetTyper" target="_blank" style="color: lightblue;">@InternetTyper on YouTube</a>'; credits.style.textAlign = "center"; credits.style.marginTop = "10px"; let toggleMsg = document.createElement("div"); toggleMsg.innerText = 'Press "Ctrl + B" to Close and Open GUI'; toggleMsg.style.textAlign = "center"; toggleMsg.style.marginTop = "10px"; toggleMsg.style.fontSize = "12px"; gui.appendChild(header); gui.appendChild(userLabel); gui.appendChild(userInput); gui.appendChild(titleLabel); gui.appendChild(titleInput); gui.appendChild(cashLabel); gui.appendChild(cashInput); gui.appendChild(colorLabel); gui.appendChild(colorInput); gui.appendChild(applyButton); gui.appendChild(errorDiv); gui.appendChild(toggleMsg); gui.appendChild(credits); document.body.appendChild(gui); document.addEventListener("keydown", function(e) { if (e.ctrlKey && e.key.toLowerCase() === "b") { if (gui.style.display === "none") { gui.style.display = "flex"; localStorage.setItem("guiVisible", "true"); } else { gui.style.display = "none"; localStorage.setItem("guiVisible", "false"); } } }); function updateGarageUsername(newUsername) { let elem = document.querySelector(".df.df--align-center .player-name--container span.type-ellip"); if (elem) { elem.textContent = newUsername; } } function updateDropdownUsername(newUsername) { let elem = document.querySelector(".dropdown--account .type-ellip--account"); if (elem) { elem.textContent = newUsername; } } function updateLeaguesUsername(newUsername) { let row = document.querySelector("tr.table-row.is-self"); if (row) { let elem = row.querySelector(".player-name--container span.type-ellip.tss"); if (elem) { elem.textContent = newUsername; } } } function updateTeamPages(newUsername, newTitle) { let rows = document.querySelectorAll("tr.table-row"); rows.forEach(row => { let container = row.querySelector(".player-name--container"); if (container && container.getAttribute("title") === originalUsername) { let tagAnchor = container.querySelector("a.player-name--tag"); if (tagAnchor) { tagAnchor.textContent = newUsername ? `[${newUsername}]` : ""; } let spanEl = container.querySelector("span.type-ellip"); if (spanEl) { spanEl.textContent = newUsername; } let titleEl = row.querySelector("div.tsi.tc-lemon.tsxs"); if (titleEl) { titleEl.textContent = newTitle ? `"${newTitle}"` : ""; } } }); } function updateGarageTitle(newTitle) { let elem = document.querySelector(".profile-title"); if (elem) { elem.textContent = newTitle ? `"${newTitle}"` : ""; } } function updateLeaguesTitle(newTitle) { let row = document.querySelector("tr.table-row.is-self"); if (row) { let elem = row.querySelector("div.tsi.tc-lemon.tsxs"); if (elem) { elem.textContent = newTitle ? `"${newTitle}"` : ""; } } } // ---------- Function: Update GUI Appearance (Color) ---------- function updateGUIColor(color) { localStorage.setItem("guiColor", color); gui.style.boxShadow = `5px 5px 15px ${color}`; header.style.color = color; let creditLink = credits.querySelector("a"); if (creditLink) { creditLink.style.color = color; } } function updateCash(newCash) { let cashElements = document.querySelectorAll(".as-nitro-cash--prefix"); cashElements.forEach(element => { // Do not change Total Spent (assumed to be inside .stat-box--extras) if (element.closest(".stat-box--extras")) return; element.textContent = `$${newCash.toLocaleString()}`; }); } // ---------- Load Saved Values ---------- let savedUsername = localStorage.getItem("customUsername"); let savedTitle = localStorage.getItem("customTitle"); let savedCash = localStorage.getItem("customCash"); if (savedUsername !== null) { updateGarageUsername(savedUsername); updateDropdownUsername(savedUsername); updateLeaguesUsername(savedUsername); updateTeamPages(savedUsername, savedTitle || ""); userInput.value = savedUsername; } if (savedTitle !== null) { updateGarageTitle(savedTitle); updateLeaguesTitle(savedTitle); updateTeamPages(savedUsername || "", savedTitle); titleInput.value = savedTitle; } if (savedCash !== null) { let cashVal = parseInt(savedCash, 10); updateCash(cashVal); cashInput.value = cashVal; } updateGUIColor(savedColor); if (window.location.pathname.includes("/leagues")) { setInterval(function() { let currUser = localStorage.getItem("customUsername"); let currTitle = localStorage.getItem("customTitle"); if (currUser !== null) { updateLeaguesUsername(currUser); } if (currTitle !== null) { updateLeaguesTitle(currTitle); } }, 2); } if (window.location.pathname.includes("/team")) { setInterval(function() { let currUser = localStorage.getItem("customUsername") || ""; let currTitle = localStorage.getItem("customTitle") || ""; updateTeamPages(currUser, currTitle); }, 2); } applyButton.onclick = function() { let newUsername = userInput.value.trim(); let newTitle = titleInput.value.trim(); let cashStr = cashInput.value.trim(); let newCash = parseInt(cashStr, 10); let selectedColor = colorInput.value; // Validate Nitro Cash: cap at 4,294,967,295 if exceeded. if (newCash > 4294967295) { errorDiv.textContent = "Error: Maximum Nitro Cash limit exceeded! Resetting to 4,294,967,295."; errorDiv.style.display = "block"; newCash = 4294967295; localStorage.setItem("customCash", newCash); cashInput.value = newCash; } else { errorDiv.style.display = "none"; } localStorage.setItem("customUsername", newUsername); localStorage.setItem("customTitle", newTitle); updateGarageUsername(newUsername); updateDropdownUsername(newUsername); updateLeaguesUsername(newUsername); updateTeamPages(newUsername, newTitle); updateGarageTitle(newTitle); updateLeaguesTitle(newTitle); updateCash(newCash); localStorage.setItem("customCash", newCash); updateGUIColor(selectedColor); }; colorInput.oninput = function() { updateGUIColor(colorInput.value); }; })();