// ==UserScript== // @name Kour.io Zeph Menu // @match *://kour.io/* // @version 1.3 // @author Happyjeffery // @icon https://i.imgur.com/11sYWVM.png // @description Speed Hack, Set KP (NOT WORKING) Invisibility, Set Secondary and Melee Weapons, Profiler Modder (Set Class Kills, K/D Setter) // @run-at document-start // @grant unsafeWindow // @namespace https://greasyfork.org/users/1369586 // @downloadURL none // ==/UserScript== (function() { 'use strict'; /*************************************** * Performance.now Speed Hack ***************************************/ const originalPerfNow = performance.now.bind(performance); function updatePerformanceNow(multiplier) { if (multiplier === 1) { performance.now = originalPerfNow; } else { performance.now = new Proxy(originalPerfNow, { apply: function(target, thisArg, argArray) { try { throw new Error(); } catch (e) { if (!e.stack.includes("invoke_")) { return target.apply(thisArg, argArray) * multiplier; } } return target.apply(thisArg, argArray); } }); } } updatePerformanceNow(1); /*************************************** * Invisibility WebSocket Hook ***************************************/ const wsInstances = []; const OriginalWebSocket = unsafeWindow.WebSocket; function hookOnMessage(ws) { const originalAddEventListener = ws.addEventListener; ws.addEventListener = function(type, listener, options) { if (type === "message") { const wrappedListener = function(event) { try { if (event.data && typeof event.data !== "string") { const data = new Uint8Array(event.data); const hexString = Array.from(data) .map(b => b.toString(16).padStart(2, '0')) .join(" "); const damageSignature = "f3 04 c8 02 f5 15 04"; if (hexString.startsWith(damageSignature) && kourInstance.config.Invisible) { return; // Block this damage packet. } } } catch (e) { } listener.call(this, event); }; return originalAddEventListener.call(this, type, wrappedListener, options); } else { return originalAddEventListener.call(this, type, listener, options); } }; const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ws), 'onmessage'); Object.defineProperty(ws, 'onmessage', { set: function(fn) { const wrapped = function(event) { try { if (event.data && typeof event.data !== "string") { const data = new Uint8Array(event.data); const hexString = Array.from(data) .map(b => b.toString(16).padStart(2, '0')) .join(" "); const damageSignature = "f3 04 c8 02 f5 15 04"; if (hexString.startsWith(damageSignature) && kourInstance.config.Invisible) { return; } } } catch (e) { } fn(event); }; descriptor.set.call(this, wrapped); }, get: function() { return descriptor.get.call(this); } }); } unsafeWindow.WebSocket = function(...args) { const ws = new OriginalWebSocket(...args); wsInstances.push(ws); hookOnMessage(ws); return ws; }; unsafeWindow.WebSocket.prototype = OriginalWebSocket.prototype; class Kour { constructor() { this.config = { Invisible: true }; } } const kourInstance = new Kour(); unsafeWindow.kourInstance = kourInstance; const weapons = [ { name: "AK-47", id: "00" }, { name: "Deagle", id: "01" }, { name: "AWP", id: "02" }, { name: "Bayonet", id: "03" }, { name: "Uzi", id: "04" }, { name: "PKM", id: "05" }, { name: "Revolver", id: "06" }, { name: "RPG", id: "07" }, { name: "USPS", id: "08" }, { name: "MP5", id: "09" }, { name: "Shotgun", id: "10" }, { name: "Glock", id: "11" }, { name: "Karambit", id: "12" }, { name: "Knife", id: "13" }, { name: "Scar", id: "14" }, { name: "Minigun", id: "15" }, { name: "Famas", id: "16" }, { name: "Vector", id: "17" }, { name: "Flamethrower", id: "18" }, { name: "Kar98k", id: "19" }, { name: "M4A4", id: "20" }, { name: "Tec-9", id: "21" }, { name: "CZ", id: "22" }, { name: "Berretta92fs", id: "23" }, { name: "AK-109", id: "24" }, { name: "P90", id: "25" }, { name: "Thompson", id: "26" }, { name: "UMP45", id: "27" }, { name: "XM1014", id: "28" }, { name: "Butterfly", id: "29" }, { name: "Laser Gun", id: "30" }, { name: "Bomb", id: "31" }, { name: "Smoke Grenade", id: "32" }, { name: "Molotov", id: "33" }, { name: "Grenade", id: "34" }, { name: "Flashbang", id: "35" }, { name: "Glizzy", id: "36" }, { name: "Axe", id: "37" }, { name: "Bare Fists", id: "38" } ]; function setSecondaryWeapon(weaponID) { firebase.database().goOffline(); firebase.database().ref('users/' + firebase.auth().currentUser.uid).child('overrideWeaponIndexes1').set(weaponID); firebase.database().goOnline(); showReloadMessage(); setTimeout(() => location.reload(), 5000); } function setMeleeWeapon(weaponID) { firebase.database().goOffline(); firebase.database().ref('users/' + firebase.auth().currentUser.uid).child('overrideWeaponIndexes2').set(weaponID); firebase.database().goOnline(); showReloadMessage(); setTimeout(() => location.reload(), 5000); } function showReloadMessage() { setTimeout(function () { const reloadMessage = document.createElement("div"); reloadMessage.innerHTML = `Changes applying in 5 seconds`; Object.assign(reloadMessage.style, { position: "fixed", bottom: "60px", left: "50%", transform: "translateX(-50%)", backgroundColor: "#8F00FF", color: "#FFFFFF", padding: "10px 18px", borderRadius: "5px", fontSize: "16px", fontFamily: "'Burbank Big Condensed', 'Arial Black', sans-serif", zIndex: "10001", textAlign: "center", animation: "fadeInOut 5s forwards" }); document.body.appendChild(reloadMessage); const countdownSpan = reloadMessage.querySelector("#countdown"); let secondsLeft = 5; const interval = setInterval(() => { secondsLeft--; if (secondsLeft > 0) { countdownSpan.textContent = secondsLeft; countdownSpan.style.animation = "flashRed 0.5s"; countdownSpan.addEventListener("animationend", () => { countdownSpan.style.animation = ""; }, { once: true }); } else { clearInterval(interval); countdownSpan.textContent = "1"; countdownSpan.style.animation = "flashRed 0.5s"; countdownSpan.addEventListener("animationend", () => { countdownSpan.style.animation = ""; }, { once: true }); setTimeout(() => { reloadMessage.remove(); location.reload(); }, 1000); } }, 1000); }, 500); } function setKP() { let kpValue = prompt("Enter KP value:", "35"); if (!kpValue) return; const numKP = Number(kpValue); if (isNaN(numKP)) { console.error("Invalid KP value entered."); return; } if (typeof unityInstance !== 'undefined' && typeof unityInstance.SendMessage === 'function') { try { unityInstance.SendMessage('MainManager', 'OnReceivedIsAdmin', numKP); console.log(`[Zeph Menu] Sent KP value ${numKP} via SendMessage.`); const notification = document.createElement("div"); notification.textContent = `KP set to: ${numKP}`; Object.assign(notification.style, { position: "fixed", bottom: "20px", left: "50%", transform: "translateX(-50%)", backgroundColor: "#9b3e9f", color: "#fff", padding: "10px 20px", borderRadius: "5px", zIndex: "10001", fontSize: "14px", boxShadow: "0 2px 5px rgba(0,0,0,0.2)", animation: "fadeInOut 3s forwards" }); document.body.appendChild(notification); setTimeout(() => { notification.style.animation = "fadeOut 0.5s forwards"; setTimeout(() => notification.remove(), 500); }, 2500); } catch (e) { console.error("[Zeph Menu] SendMessage failed:", e); } } else { console.error("[Zeph Menu] unityInstance not found."); } unsafeWindow.kpValue = numKP; } const classMap = { "Soldier": "class0kills", "Hitman": "class1kills", "Gunner": "class2kills", "Heavy": "class3kills", "Rocketeer": "class4kills", "Agent": "class5kills", "Brawler": "class6kills", "Investor": "class7kills", "Assassin": "class8kills", "Juggernaut": "class9kills", "Recon": "class10kills", "Pyro": "class11kills", "Rayblader": "class15kills" }; function setClassKills() { // Remove any existing class selection dialog first const existingDialog = document.getElementById("classSelectionDialog"); if (existingDialog) existingDialog.remove(); const classSelectionDialog = document.createElement("div"); classSelectionDialog.id = "classSelectionDialog"; Object.assign(classSelectionDialog.style, { position: "fixed", top: "50%", left: "50%", transform: "translate(-50%, -50%)", backgroundColor: "#5a2d72", color: "#fff", padding: "20px", zIndex: "10002", fontFamily: "Arial, sans-serif", fontSize: "14px", borderRadius: "8px", boxShadow: "0 4px 8px rgba(0,0,0,0.2)", width: "300px", maxHeight: "400px", overflowY: "auto", cursor: "move", // Changed to move cursor for entire dialog userSelect: "none" }); // Add close button const closeBtn = document.createElement("button"); closeBtn.textContent = "×"; closeBtn.style.position = "absolute"; closeBtn.style.top = "5px"; closeBtn.style.right = "5px"; closeBtn.style.background = "none"; closeBtn.style.border = "none"; closeBtn.style.color = "#fff"; closeBtn.style.fontSize = "16px"; closeBtn.style.cursor = "pointer"; closeBtn.addEventListener("click", () => classSelectionDialog.remove()); classSelectionDialog.appendChild(closeBtn); const dialogTitle = document.createElement("div"); dialogTitle.textContent = "Select Class"; dialogTitle.style.fontWeight = "bold"; dialogTitle.style.fontSize = "18px"; dialogTitle.style.marginBottom = "15px"; dialogTitle.style.textAlign = "center"; classSelectionDialog.appendChild(dialogTitle); const classButtonContainer = document.createElement("div"); classButtonContainer.style.display = "grid"; classButtonContainer.style.gridTemplateColumns = "repeat(2, 1fr)"; classButtonContainer.style.gap = "8px"; Object.keys(classMap).forEach(className => { const classBtn = document.createElement("button"); classBtn.textContent = className; Object.assign(classBtn.style, { padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "13px", color: "#fff", transition: "background-color 0.3s" }); classBtn.addEventListener("mouseover", () => classBtn.style.backgroundColor = "#a74cbf"); classBtn.addEventListener("mouseout", () => classBtn.style.backgroundColor = "#9b3e9f"); classBtn.addEventListener("click", () => { const killsValue = prompt(`Enter kill count for ${className}:`, "10000"); if (killsValue === null) return; const numKills = Number(killsValue); if (isNaN(numKills)) { alert("Please enter a valid number!"); return; } const dbField = classMap[className]; updateClassKills(dbField, numKills); classSelectionDialog.remove(); }); classButtonContainer.appendChild(classBtn); }); classSelectionDialog.appendChild(classButtonContainer); const cancelBtn = document.createElement("button"); cancelBtn.textContent = "Cancel"; Object.assign(cancelBtn.style, { width: "100%", marginTop: "15px", padding: "8px", cursor: "pointer", backgroundColor: "#444", border: "none", borderRadius: "5px", color: "#fff" }); cancelBtn.addEventListener("click", () => classSelectionDialog.remove()); classSelectionDialog.appendChild(cancelBtn); // Make entire dialog draggable let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; classSelectionDialog.onmousedown = dragMouseDown; function dragMouseDown(e) { // Ignore if clicking on a button or input if (e.target.tagName === "BUTTON" || e.target.tagName === "INPUT") { return; } 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; classSelectionDialog.style.top = (classSelectionDialog.offsetTop - pos2) + "px"; classSelectionDialog.style.left = (classSelectionDialog.offsetLeft - pos1) + "px"; classSelectionDialog.style.transform = "none"; // Remove the centering transform } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } document.body.appendChild(classSelectionDialog); } function updateClassKills(classField, killCount) { if (!firebase.auth().currentUser) { console.log('[Zeph Menu] User is not logged in'); return; } const uid = firebase.auth().currentUser.uid; const userRef = firebase.database().ref('users/' + uid); firebase.database().goOffline(); const updateData = {}; updateData[classField] = killCount; userRef.update(updateData).then(() => { console.log(`[Zeph Menu] ${classField} successfully updated to ${killCount}`); firebase.database().goOnline(); // Notification removed showReloadMessage(); setTimeout(() => location.reload(), 5000); }).catch((err) => { console.error(`[Zeph Menu] Failed to update ${classField}:`, err); firebase.database().goOnline(); }); } function updateKDStats(kills, deaths) { if (!firebase.auth().currentUser) { console.log('[Zeph Menu] User is not logged in'); return; } const uid = firebase.auth().currentUser.uid; const userRef = firebase.database().ref('users/' + uid); firebase.database().goOffline(); const updateData = { totalKills: kills, totalDeaths: deaths }; userRef.update(updateData).then(() => { console.log(`[Zeph Menu] K/D stats updated to ${kills}/${deaths}`); firebase.database().goOnline(); showReloadMessage(); setTimeout(() => location.reload(), 5000); }).catch((err) => { console.error("[Zeph Menu] Failed to update K/D stats:", err); firebase.database().goOnline(); }); } function setKDStats() { const kills = prompt("Enter new Total Kills:", "1337"); if (kills === null) return; const parsedKills = Number(kills); const deaths = prompt("Enter new Total Deaths:", "420"); if (deaths === null) return; const parsedDeaths = Number(deaths); if (isNaN(parsedKills) || isNaN(parsedDeaths)) { alert("Please enter valid numbers for kills and deaths."); return; } updateKDStats(parsedKills, parsedDeaths); } function addKDSetterButton(profileModderMenu) { const setKDStatsBtn = document.createElement("button"); setKDStatsBtn.textContent = "Set K/D Stats"; Object.assign(setKDStatsBtn.style, { width: "100%", margin: "5px 0", padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); setKDStatsBtn.addEventListener("click", setKDStats); setKDStatsBtn.addEventListener("mouseover", () => setKDStatsBtn.style.backgroundColor = "#a74cbf"); setKDStatsBtn.addEventListener("mouseout", () => setKDStatsBtn.style.backgroundColor = "#9b3e9f"); profileModderMenu.appendChild(setKDStatsBtn); } function refreshWebSocketHandlers() { wsInstances.forEach(ws => { try { let current = ws.onmessage; ws.onmessage = current; } catch (e) { /* ignore errors */ } }); } function createUI() { const menu = document.createElement('div'); menu.id = "zephMenu"; Object.assign(menu.style, { position: "fixed", top: "50px", right: "50px", width: "250px", backgroundColor: "#5a2d72", color: "#fff", padding: "15px", zIndex: "10000", fontFamily: "Arial, sans-serif", fontSize: "16px", borderRadius: "8px", boxShadow: "0 4px 8px rgba(0,0,0,0.2)", display: "none", transition: "all 0.3s ease-in-out" }); const secondaryWeaponMenu = createWeaponMenu("Secondary Weapon", false); const meleeWeaponMenu = createWeaponMenu("Melee Weapon", true); const profileModderMenu = document.createElement('div'); profileModderMenu.id = "zephProfileModderMenu"; Object.assign(profileModderMenu.style, { position: "fixed", top: "50px", right: "320px", width: "200px", backgroundColor: "#5a2d72", color: "#fff", padding: "15px", zIndex: "10000", fontFamily: "Arial, sans-serif", fontSize: "14px", borderRadius: "8px", boxShadow: "0 4px 8px rgba(0,0,0,0.2)", display: "none", transition: "all 0.3s ease-in-out" }); const profileHeader = document.createElement("div"); profileHeader.textContent = "Profile Modder"; profileHeader.style.textAlign = "center"; profileHeader.style.fontWeight = "bold"; profileHeader.style.marginBottom = "10px"; profileModderMenu.appendChild(profileHeader); const setClassKillsBtn = document.createElement("button"); setClassKillsBtn.textContent = "Set Class Kills"; Object.assign(setClassKillsBtn.style, { width: "100%", margin: "5px 0", padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); setClassKillsBtn.addEventListener("click", setClassKills); setClassKillsBtn.addEventListener("mouseover", () => setClassKillsBtn.style.backgroundColor = "#a74cbf"); setClassKillsBtn.addEventListener("mouseout", () => setClassKillsBtn.style.backgroundColor = "#9b3e9f"); profileModderMenu.appendChild(setClassKillsBtn); const setKDStatsBtn = document.createElement("button"); setKDStatsBtn.textContent = "Set K/D Stats"; Object.assign(setKDStatsBtn.style, { width: "100%", margin: "5px 0", padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); setKDStatsBtn.addEventListener("click", setKDStats); setKDStatsBtn.addEventListener("mouseover", () => setKDStatsBtn.style.backgroundColor = "#a74cbf"); setKDStatsBtn.addEventListener("mouseout", () => setKDStatsBtn.style.backgroundColor = "#9b3e9f"); profileModderMenu.appendChild(setKDStatsBtn); const headerContainer = document.createElement("div"); headerContainer.style.marginBottom = "15px"; headerContainer.style.position = "relative"; const madeByText = document.createElement("div"); madeByText.textContent = "Made by: Happyjeffery & Rasperiiii"; madeByText.style.fontSize = "10px"; madeByText.style.textAlign = "center"; madeByText.style.marginBottom = "5px"; madeByText.style.fontWeight = "bold"; madeByText.style.letterSpacing = "0.5px"; let hue = 0; function updateRGB() { hue = (hue + 1) % 360; madeByText.style.color = `hsl(${hue}, 100%, 70%)`; requestAnimationFrame(updateRGB); } updateRGB(); headerContainer.appendChild(madeByText); const titleContainer = document.createElement("div"); titleContainer.style.display = "flex"; titleContainer.style.alignItems = "center"; titleContainer.style.justifyContent = "center"; titleContainer.style.gap = "8px"; const header = document.createElement("div"); header.textContent = "Zeph Menu"; header.style.fontWeight = "bold"; header.style.fontSize = "20px"; const discordLogo = document.createElement("img"); discordLogo.src = "https://i.ibb.co/sJV6y56H/Zeph-Menu-Discordlogo.png"; discordLogo.alt = "Discord Logo"; discordLogo.style.width = "22px"; discordLogo.style.height = "22px"; discordLogo.style.cursor = "pointer"; discordLogo.style.transition = "all 0.2s ease"; discordLogo.style.borderRadius = "4px"; discordLogo.addEventListener("click", () => window.open("https://discord.gg/3XCAwXdRUh", "_blank")); discordLogo.addEventListener("mouseover", () => { discordLogo.style.transform = "scale(1.1) rotate(2deg)"; discordLogo.style.filter = "brightness(1.2) drop-shadow(0 0 2px rgba(255,255,255,0.3))"; }); discordLogo.addEventListener("mouseout", () => { discordLogo.style.transform = "scale(1) rotate(0deg)"; discordLogo.style.filter = "none"; }); titleContainer.appendChild(header); titleContainer.appendChild(discordLogo); headerContainer.appendChild(titleContainer); menu.appendChild(headerContainer); const adminBtn = document.createElement("button"); adminBtn.textContent = "Set KP (NOT WORKING)"; Object.assign(adminBtn.style, { width: "100%", margin: "8px 0", padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); adminBtn.addEventListener("click", setKP); adminBtn.addEventListener("mouseover", () => adminBtn.style.backgroundColor = "#a74cbf"); adminBtn.addEventListener("mouseout", () => adminBtn.style.backgroundColor = "#9b3e9f"); menu.appendChild(adminBtn); const profileModderBtn = document.createElement("button"); profileModderBtn.textContent = "Profile Modder"; Object.assign(profileModderBtn.style, { width: "100%", margin: "8px 0", padding: "8px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); profileModderBtn.addEventListener("click", () => { profileModderMenu.style.display = profileModderMenu.style.display === "none" ? "block" : "none"; secondaryWeaponMenu.style.display = "none"; meleeWeaponMenu.style.display = "none"; }); profileModderBtn.addEventListener("mouseover", () => profileModderBtn.style.backgroundColor = "#a74cbf"); profileModderBtn.addEventListener("mouseout", () => profileModderBtn.style.backgroundColor = "#9b3e9f"); menu.appendChild(profileModderBtn); const secondaryWeaponBtn = document.createElement("button"); secondaryWeaponBtn.textContent = "Set Secondary Weapon"; Object.assign(secondaryWeaponBtn.style, { width: "100%", margin: "8px 0", padding: "8px", cursor: "pointer", backgroundColor: "#53277E", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); secondaryWeaponBtn.addEventListener("click", () => { secondaryWeaponMenu.style.display = secondaryWeaponMenu.style.display === "none" ? "block" : "none"; meleeWeaponMenu.style.display = "none"; profileModderMenu.style.display = "none"; }); secondaryWeaponBtn.addEventListener("mouseover", () => secondaryWeaponBtn.style.backgroundColor = "#6a359c"); secondaryWeaponBtn.addEventListener("mouseout", () => secondaryWeaponBtn.style.backgroundColor = "#53277E"); menu.appendChild(secondaryWeaponBtn); const meleeWeaponBtn = document.createElement("button"); meleeWeaponBtn.textContent = "Set Melee Weapon"; Object.assign(meleeWeaponBtn.style, { width: "100%", margin: "8px 0", padding: "8px", cursor: "pointer", backgroundColor: "#53277E", border: "none", borderRadius: "5px", fontSize: "14px", color: "#fff", transition: "background-color 0.3s", }); meleeWeaponBtn.addEventListener("click", () => { meleeWeaponMenu.style.display = meleeWeaponMenu.style.display === "none" ? "block" : "none"; secondaryWeaponMenu.style.display = "none"; profileModderMenu.style.display = "none"; }); meleeWeaponBtn.addEventListener("mouseover", () => meleeWeaponBtn.style.backgroundColor = "#6a359c"); meleeWeaponBtn.addEventListener("mouseout", () => meleeWeaponBtn.style.backgroundColor = "#53277E"); menu.appendChild(meleeWeaponBtn); const speedContainer = document.createElement("div"); speedContainer.style.margin = "15px 0"; const speedLabel = document.createElement("label"); speedLabel.textContent = "Speed Hack Multiplier: "; speedContainer.appendChild(speedLabel); const speedValue = document.createElement("span"); speedValue.textContent = "1x"; speedContainer.appendChild(speedValue); const speedSlider = document.createElement("input"); speedSlider.type = "range"; speedSlider.min = "1"; speedSlider.max = "6"; speedSlider.step = "0.5"; speedSlider.value = "1"; speedSlider.style.width = "100%"; speedSlider.addEventListener("input", function() { let multiplier = parseFloat(speedSlider.value); speedValue.textContent = multiplier.toFixed(1) + "x"; updatePerformanceNow(multiplier); }); speedContainer.appendChild(speedSlider); menu.appendChild(speedContainer); const invisContainer = document.createElement("div"); const invisCheckbox = document.createElement("input"); invisCheckbox.type = "checkbox"; invisCheckbox.id = "invisToggle"; invisCheckbox.checked = kourInstance.config.Invisible; invisCheckbox.addEventListener("change", function() { kourInstance.config.Invisible = this.checked; console.log("Invisibility set to " + this.checked); refreshWebSocketHandlers(); }); const invisLabel = document.createElement("label"); invisLabel.htmlFor = "invisToggle"; invisLabel.textContent = " Invisible"; invisContainer.appendChild(invisCheckbox); invisContainer.appendChild(invisLabel); menu.appendChild(invisContainer); const style = document.createElement("style"); style.textContent = ` @keyframes fadeInOut { 0% { opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { opacity: 0; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes flashRed { 0% { color: #FF3C3C; } 50% { color: #FFFFFF; } 100% { color: #FF3C3C; } } `; document.head.appendChild(style); document.body.appendChild(menu); document.body.appendChild(secondaryWeaponMenu); document.body.appendChild(meleeWeaponMenu); document.body.appendChild(profileModderMenu); } function createWeaponMenu(title, isMelee) { const weaponMenu = document.createElement('div'); weaponMenu.id = `zeph${isMelee ? "Melee" : "Secondary"}WeaponMenu`; Object.assign(weaponMenu.style, { position: "fixed", top: "50px", right: "320px", width: "250px", maxHeight: "400px", overflowY: "auto", backgroundColor: "#5a2d72", color: "#fff", padding: "15px", zIndex: "10000", fontFamily: "Arial, sans-serif", fontSize: "14px", borderRadius: "8px", boxShadow: "0 4px 8px rgba(0,0,0,0.2)", display: "none", transition: "all 0.3s ease-in-out" }); const weaponHeader = document.createElement("div"); weaponHeader.textContent = title; weaponHeader.style.textAlign = "center"; weaponHeader.style.fontWeight = "bold"; weaponHeader.style.marginBottom = "10px"; weaponMenu.appendChild(weaponHeader); weapons.forEach(weapon => { const btn = document.createElement("button"); btn.textContent = `${weapon.name} (${weapon.id})`; Object.assign(btn.style, { width: "100%", margin: "5px 0", padding: "5px", cursor: "pointer", backgroundColor: "#9b3e9f", border: "none", borderRadius: "5px", fontSize: "12px", color: "#fff", transition: "background-color 0.3s", }); btn.addEventListener("click", () => { if (isMelee) { setMeleeWeapon(weapon.id); } else { setSecondaryWeapon(weapon.id); } weaponMenu.style.display = "none"; }); btn.addEventListener("mouseover", () => btn.style.backgroundColor = "#a74cbf"); btn.addEventListener("mouseout", () => btn.style.backgroundColor = "#9b3e9f"); weaponMenu.appendChild(btn); }); return weaponMenu; } document.addEventListener("keydown", function(e) { if (e.key === "o" && !e.target.matches("input, textarea")) { const menu = document.getElementById("zephMenu"); if (menu) { const isClosing = menu.style.display !== "none"; menu.style.display = isClosing ? "none" : "block"; if (isClosing) { document.getElementById("zephSecondaryWeaponMenu").style.display = "none"; document.getElementById("zephMeleeWeaponMenu").style.display = "none"; document.getElementById("zephProfileModderMenu").style.display = "none"; } } } }); window.addEventListener("load", createUI); })();