Kour.io Zeph Menu

Speed Hack, Set KP (NOT WORKING) Invisibility, Set Secondary and Melee Weapons, Profiler Modder (Set Class Kills, K/D Setter)

// ==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
// ==/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 <span id="countdown" style="color: #FF3C3C; font-weight: bold;">5</span> 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);
})();