您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Warn when close to leveling up! (Runs on Click + Detects XP Changes)
// ==UserScript== // @name ZedCity - Level Up Warning // @namespace http://tampermonkey.net/ // @version 1.7 // @license MIT // @description Warn when close to leveling up! (Runs on Click + Detects XP Changes) // @author YoYo // @match https://www.zed.city/* // @icon https://www.google.com/s2/favicons?sz=64&domain=zed.city // @grant none // ==/UserScript== (function () { 'use strict'; console.log("🚀 Level Up Warning script loaded."); let lastFetchedTime = 0; // Prevents excessive API calls let dismissed = false; // Tracks if the user dismissed the warning let lastXP = null; // Stores last XP to detect changes // Function to fetch XP data (only if enough time has passed) async function fetchXPData() { let now = Date.now(); if (now - lastFetchedTime < 5000) { console.log("⏳ Skipping API call (too soon)"); return null; } console.log("📡 Fetching XP data..."); try { let response = await fetch("https://api.zed.city/getStats", { method: "GET", credentials: "include" }); if (!response.ok) throw new Error("Failed to fetch XP data."); let data = await response.json(); lastFetchedTime = now; console.log("✅ XP data fetched successfully:", data); return data; } catch (error) { console.error("❌ Error fetching XP data:", error); return null; } } // Function to check XP and display a warning if necessary async function checkAndDisplayWarning() { let data = await fetchXPData(); if (!data) { console.log("⚠️ No XP data available. Skipping warning check."); return; } let { experience, xp_end } = data; let xpNeeded = xp_end - experience; console.log(`ℹ️ Current XP: ${experience}, XP needed for level-up: ${xp_end}, XP remaining: ${xpNeeded}`); // If XP changed after dismissal, allow warning to show again if (dismissed && experience !== lastXP) { console.log("🔄 XP has changed since last dismissal. Resetting dismissed state."); dismissed = false; } // Store the latest XP for future checks lastXP = experience; if (xpNeeded <= 25 && !dismissed) { console.log("🚨 Player is close to leveling up! Showing warning..."); showLevelUpWarning(xpNeeded); } else { console.log("✅ XP is not close to level-up threshold. No warning needed."); } } // Function to display the warning (With Dismiss Feature) function showLevelUpWarning(xpNeeded) { console.log(`⚠️ Displaying level-up warning: ${xpNeeded} XP away!`); // Prevent duplicate warnings if (document.getElementById("levelUpWarning")) return; let warning = document.createElement("div"); warning.id = "levelUpWarning"; Object.assign(warning.style, { position: "fixed", top: "10px", left: "50%", transform: "translateX(-50%)", backgroundColor: "red", color: "white", padding: "15px", fontSize: "18px", fontWeight: "bold", border: "2px solid black", borderRadius: "5px", zIndex: "9999", textAlign: "center", cursor: "pointer" }); warning.innerText = `⚠️ WARNING: You are ${xpNeeded} XP away from leveling up! (Click to Dismiss)`; document.body.appendChild(warning); console.log("✅ Warning displayed on page."); // Click event to dismiss the warning warning.addEventListener("click", function () { warning.remove(); dismissed = true; // Prevents it from showing again until XP changes console.log("🛑 Warning dismissed manually by user."); }); // Auto-remove after 10 seconds setTimeout(() => { if (document.body.contains(warning)) { warning.remove(); console.log("ℹ️ Warning removed after 10 seconds."); } }, 10000); } // Event listener to trigger XP check on click document.addEventListener("click", () => { console.log("🖱️ Click detected! Checking XP..."); checkAndDisplayWarning(); }); })();