User Js
User Js
(function () {
("use strict");
/***************************************
* Performance.now Speed Hack
***************************************/
const originalPerfNow = performance.now.bind(performance);
function updatePerformanceNow(multiplier) {
if (multiplier === 1) {
performance.now = originalPerfNow;
return;
}
updatePerformanceNow(1);
/***************************************
* Invisibility + Instakill
***************************************/
const Signatures = {
damageTaken: "f3 04 c8 02 f5 15 04",
updateState: "f3 02 fd 02 f4 03 c8",
};
function hexOf(buf) {
return Array.from(new Uint8Array(buf))
.map((b) => b.toString(16).padStart(2, "0"))
.join(" ");
}
function shouldBlockDamage(ev) {
return (
ev.data instanceof ArrayBuffer &&
hexOf(ev.data).startsWith(Signatures.damageTaken) &&
kourInstance.config.Invisible
);
}
/***************************************
* AntiAim
***************************************/
const HEADER_SIG = [0xf3, 0x02, 0xfd, 0x02, 0xf4, 0x03];
const SAFE_MIN_LENGTH = 70;
function isSafeToModify(packet) {
return packet.byteLength >= SAFE_MIN_LENGTH && !
kourInstance.config.Invisible && kourInstance.config.AntiAim;
}
function modifyPacket(packet) {
const view = new DataView(packet.buffer, packet.byteOffset,
packet.byteLength);
return packet;
}
/***************************************
* Spinbot Angle Modifier
***************************************/
const crazyNumbers = [
3822588238527201280.00, -1857736430059520.00, 0.00, -0.00, -
1.4284511533486216e+24,
-0.00, 0.00, 0.12, -1.8763868419170566e+22, 0.00, 556457979374085341184.00,
0.00,
-228963383699832832.00, -0.00, 478289722746077184.00, 0.00, -1707527.88,
0.00,
2.0849836473005435e+26, -0.00, 343366451878428672.00, -0.00, 0.00, -0.00, -
398.99,
-7.327271464138011e+37, -0.00, 7.479676797675635e+34, 6077727.50, -
112678365030856523776.00,
64406255347955662848.00, -0.00, 3.9367609144474995e+28, -0.68, -
4.1272324222675643e+34,
0.00, -34401746419712.00, 256284.98, -0.00, -992099.94, -46124.25, -0.00, -
0.23,
3573135.75, -0.00, 3.4937574108676156e+24, 31446140.00, -0.00, 0.00,
-2.633920784508417e+22, 1.5002101046880594e+23, -662611.81, 0.00, -7.82,
2.1554711763577515e+33, -4781238408011841536.00, -8.267893275317273e+33, -
0.00, 0.00,
-4.7050078084659084e+24, 63447551577279168512.00, 0.00,
5.614778816753592e+36, 5183327.50,
];
let currentIndex = 0;
const ANGLE_OFFSET = 0x38;
/***************************************
* WebSocket Hooking
***************************************/
(function hookWS() {
const OrigWS = unsafeWindow.WebSocket;
unsafeWindow.WebSocket = function (...args) {
const ws = new OrigWS(...args);
if (hex.startsWith(Signatures.updateState) &&
kourInstance.config.Instakill) {
for (let i = 0; i < 41; i++) originalSend.call(ws, data);
return;
}
if (arrayStartsWith(packet, HEADER_SIG)) {
if (isSafeToModify(packet)) {
packet = modifyPacket(packet);
data = packet.buffer;
}
currentIndex++;
if (currentIndex >= crazyNumbers.length) currentIndex =
0;
}
}
}
return ws;
};
unsafeWindow.WebSocket.prototype = OrigWS.prototype;
})();
/***************************************
* Config Object
***************************************/
class Kour {
constructor() {
this.config = {
Invisible: true,
Instakill: false,
AntiAim: false,
SpinBot: false,
airStrafing: true,
};
}
}
/***************************************
* Weapon Changer (Lobby Only!)
***************************************/
const weapons = [
{ name: "AK-47", id: "0" },
{ name: "Deagle", id: "1" },
{ name: "AWP", id: "2" },
{ name: "Bayonet", id: "3" },
{ name: "Uzi", id: "4" },
{ name: "PKM", id: "5" },
{ name: "Revolver", id: "6" },
{ name: "RPG", id: "7" },
{ name: "USPS", id: "8" },
{ name: "MP5", id: "9" },
{ 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()
.ref("users/" + firebase.auth().currentUser.uid)
.child("overrideWeaponIndexes1")
.set(weaponID);
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
}
function setMeleeWeapon(weaponID) {
firebase
.database()
.ref("users/" + firebase.auth().currentUser.uid)
.child("overrideWeaponIndexes2")
.set(weaponID);
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
}
/***************************************
* Skin Changer (Lobby Only!)
***************************************/
const skins = [
{ name: "KBI Agent", id: "12" },
{ name: "James Kour", id: "13" },
{ name: "President", id: "14" },
{ name: "Doctor", id: "15" },
{ name: "Trickster", id: "16" },
{ name: "Royal Guard", id: "17" },
{ name: "Xmas", id: "18" },
{ name: "Kelvis", id: "19" },
{ name: "Princess Pink", id: "20" },
{ name: "Princess White", id: "21" },
{ name: "Princess Bee", id: "22" },
{ name: "Princess Leaf", id: "23" },
{ name: "Koura Kraft", id: "24" },
{ name: "Green Hologram", id: "25" },
{ name: "Hologrape", id: "26" },
{ name: "Peter", id: "27" },
{ name: "Chicken", id: "28" },
{ name: "Chickoletta", id: "29" },
{ name: "Kyle", id: "30" },
{ name: "Shadowgram", id: "32" },
{ name: "IceBunny", id: "33" },
{ name: "CocoBunny", id: "34" },
{ name: "Kourean", id: "35" },
{ name: "KourG", id: "36" },
{ name: "Hackour", id: "37" },
{ name: "Golden Hackour", id: "38" },
{ name: "Gas Man", id: "39" },
{ name: "Terrorist", id: "40" },
{ name: "Counter Terrorist", id: "41" },
{ name: "Ambush", id: "42" },
{ name: "Baby Kour", id: "43" },
{ name: "Poacher", id: "44" },
{ name: "Astronaut", id: "45" },
{ name: "Kour Parrot", id: "46" },
{ name: "Kour Pirate", id: "47" },
{ name: "Legionaut", id: "48" },
{ name: "Blue Hologram", id: "49" },
{ name: "Mr Wireframe", id: "50" },
{ name: "Mythian", id: "51" },
{ name: "Kour Trooper", id: "52" },
{ name: "Kour Craft", id: "53" },
{ name: "Kour Green Soldier", id: "54" },
{ name: "Yellow Astronaut", id: "55" },
{ name: "Orange Astronaut", id: "56" },
{ name: "Red Astronaut", id: "57" },
{ name: "Blue Astronaut", id: "58" },
{ name: "Kour Banana", id: "59" },
{ name: "Mrs Kour", id: "60" },
{ name: "Investor Inverted", id: "61" },
{ name: "Kour Jungler", id: "62" },
{ name: "Skinny Baby", id: "63" },
{ name: "KourTuber", id: "64" },
{ name: "Red Hologram", id: "65" },
{ name: "White Hologram", id: "66" },
{ name: "Orange Hologram", id: "67" },
{ name: "Dark Blue Hologram", id: "68" },
{ name: "Brown Hologram", id: "69" },
{ name: "Yellow Hologram", id: "70" },
{ name: "Dark Red Hologram", id: "71" },
{ name: "Kourist", id: "72" },
{ name: "Firefighter", id: "73" },
{ name: "FireKour", id: "74" },
{ name: "Kour Thief", id: "75" },
{ name: "Kour Burger", id: "76" },
{ name: "Kour Fan", id: "77" },
{ name: "Kour Brady", id: "78" },
{ name: "LeKour James", id: "79" },
{ name: "Uncle Kour", id: "80" },
{ name: "Chef", id: "81" },
{ name: "KourObby", id: "82" },
{ name: "Legionary", id: "83" },
{ name: "Kitty Kour One", id: "84" },
{ name: "Kitty Kour Two", id: "85" },
{ name: "Kitty Kour Three", id: "86" },
{ name: "Kour Crafter", id: "87" },
{ name: "RTX", id: "88" },
{ name: "Loony Kour", id: "89" },
{ name: "Kour Shocker", id: "90" },
{ name: "Kourkin", id: "91" },
{ name: "Forest Kour", id: "92" },
{ name: "Slender Kour", id: "93" },
{ name: "Drakour", id: "94" },
{ name: "Christmas2024", id: "95" },
{ name: "Deer2024", id: "96" }
];
function setSkin(skinID) {
firebase
.database()
.ref("users/" + firebase.auth().currentUser.uid)
.child("skin")
.set(skinID);
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
}
/***************************************
* Profile Stats
***************************************/
function setStat(stat, value) {
const parsedValue = parseInt(value, 10);
const finalValue = isNaN(parsedValue) ? value : parsedValue;
firebase
.database()
.ref("users/" + firebase.auth().currentUser.uid + "/public")
.child(stat)
.set(finalValue);
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
}
/***************************************
* Clan Editing
***************************************/
function overrideCreateClan() {
if (typeof createClan === 'function') {
createClan = function(clanName, leaderUserId, clanColor, reqID) {
unityInstanceWrapper.sendMessage(firebaseObjName, 'OnSetDataNew',
clanName + "&" + reqID);
};
//console.log("override done.");
} else {
setTimeout(overrideCreateClan, 500);
}
}
overrideCreateClan();
/***************************************
* Class Kills
***************************************/
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() {
const existingDialog = document.getElementById("classSelectionDialog");
if (existingDialog) existingDialog.remove();
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;
classButtonContainer.appendChild(classBtn);
});
classSelectionDialog.appendChild(classButtonContainer);
let pos1 = 0,
pos2 = 0,
pos3 = 0,
pos4 = 0;
classSelectionDialog.onmousedown = dragMouseDown;
function dragMouseDown(e) {
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";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
}
document.body.appendChild(classSelectionDialog);
}
firebase
.database()
.ref(`users/${firebase.auth().currentUser.uid}`)
.update(updateData)
.then(() => {
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
console.log(
`[Zeph Menu] ${classField} successfully updated to ${killCount}`
);
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
})
.catch((err) => {
console.error(`[Zeph Menu] Failed to update ${classField}:`, err);
});
}
/***************************************
* Stats Changer
***************************************/
function updateKDStats(kills) {
if (!firebase.auth().currentUser) {
console.log("[Zeph Menu] User is not logged in");
alert("login first!");
return;
}
const updateData = {
totalKills: kills,
};
firebase
.database()
.ref(`users/${firebase.auth().currentUser.uid}`)
.update(updateData)
.then(() => {
showUserDetails(
firebase.auth().currentUser.email,
firebase.auth().currentUser
);
console.log(
`[Zeph Menu] Stats updated to Kills:${kills}`
);
})
.catch((err) => {
console.error("[Zeph Menu] Failed to update stats:", err);
});
}
function setKDStats() {
const kills = prompt("Enter new Total Kills:", "1337");
if (kills === null) return;
const parsedKills = Number(kills);
if (isNaN(parsedKills)) {
alert("Please enter valid numbers for kills.");
return;
}
updateKDStats(parsedKills);
}
/***************************************
* Air strafing
***************************************/
let lastMoveTime = 0;
const activeTimeout = 150;
document.addEventListener('mousemove', e => {
if (e.movementX < 0) {
turningLeft = true;
turningRight = false;
} else if (e.movementX > 0) {
turningRight = true;
turningLeft = false;
}
lastMoveTime = Date.now();
});
document.addEventListener('keydown', e => {
if (e.code === 'Space') spaceHeld = true;
});
document.addEventListener('keyup', e => {
if (e.code === 'Space') spaceHeld = false;
});
function loop() {
const now = Date.now();
const mouseActive = (now - lastMoveTime) < activeTimeout;
if (kourInstance.config.airStrafing){
if (spaceHeld && mouseActive) {
if (turningLeft && !aHeld) {
simulateKey('KeyA', true);
aHeld = true;
} else if (!turningLeft && aHeld) {
simulateKey('KeyA', false);
aHeld = false;
}
requestAnimationFrame(loop);
}
}
loop();
/***************************************
* ESP
***************************************/
let gl = null;
const filters = [
{ min: 1481, max: 1483 }, // normal
{ min: 1553, max: 1555 }, // princess
{ min: 5615, max: 5617 }, // RTX
{ min: 3875, max: 3877 }, // Egg
//{ min: 239, max: 240}, // Map Secret
];
window.espEnabled = true;
try {
window.espColor = JSON.parse(localStorage.getItem("espColorRGB")) || { r:
0, g: 0, b: 0 };
} catch {
window.espColor = { r: 0, g: 0, b: 0 };
}
const drawHandler = {
apply(target, thisArgs, args) {
const count = args[1];
const blockarms = document.getElementById("blockarms");
if (count === 300 && settings.crosshairEnabled) {
return;
}
if (count === 24 && settings.damagenumbersoff) {
return;
}
if (blockarms && blockarms.checked && count === 1098) {
return;
}
const program = thisArgs.getParameter(thisArgs.CURRENT_PROGRAM);
if (!program.uniforms) {
program.uniforms = {
vertexCount: thisArgs.getUniformLocation(program,
"vertexCount"),
espToggle: thisArgs.getUniformLocation(program, "espToggle"),
gnilgnim: thisArgs.getUniformLocation(program, "gnilgnim"),
espColor: thisArgs.getUniformLocation(program, "espColor"),
};
}
if (program.uniforms.vertexCount) {
thisArgs.uniform1f(program.uniforms.vertexCount, count);
}
if (program.uniforms.espToggle) {
thisArgs.uniform1f(program.uniforms.espToggle, window.espEnabled ?
1.0 : 0.0);
}
if (program.uniforms.gnilgnim) {
thisArgs.uniform1f(program.uniforms.gnilgnim, 13371337.0);
}
if (program.uniforms.espColor && window.espColor) {
const { r, g, b } = window.espColor;
thisArgs.uniform3f(program.uniforms.espColor, r / 255, g / 255, b /
255);
}
gl = thisArgs;
return Reflect.apply(...arguments);
},
};
function generateRangeConditions(varName) {
return filters
.map(({ min, max }) => `(${varName} >= ${min}.0 && ${varName} <= $
{max}.0)`)
.join(" || ");
}
if (src.includes("gl_Position")) {
const conditions = generateRangeConditions("vertexCount");
src = src.replace(
/void\s+main\s*\(\s*\)\s*\{/,
`uniform float vertexCount;\nuniform float espToggle;\nuniform
float gnilgnim;\nout float vVertexCount;\nuniform vec3 espColor;\nvoid main() {\
nvVertexCount = vertexCount;\n`
);
src = src.replace(
/(gl_Position\s*=.+;)/,
`$1\nif (espToggle > 0.5 && (${conditions})) {\n gl_Position.z
= 0.01 + gl_Position.z * 0.1;\n}\nif (espToggle > 0.5 && gnilgnim == 13371337.0) {\
n gl_Position.z *= 1.0;\n}`
);
}
if (src.includes("SV_Target0")) {
const conditions = generateRangeConditions("vVertexCount");
src = src
.replace(
/void\s+main\s*\(\s*\)\s*\{/,
`uniform float espToggle;\nuniform float gnilgnim;\nin float
vVertexCount;\nuniform vec3 espColor;\nvoid main() {`
)
.replace(
/return;/,
`if (espToggle > 0.5 && (${conditions}) && SV_Target0.a > 0.5)
{\n SV_Target0 = vec4(espColor, 1.0);\n}\nif (gnilgnim == 13371337.0) {\n
SV_Target0.rgb *= 1.0;\n}\nreturn;`
);
}
args[1] = src;
return Reflect.apply(...arguments);
},
});
/***************************************
* Color Aimbot
***************************************/
function resizeCanvas() {
fovCanvas.width = window.innerWidth;
fovCanvas.height = window.innerHeight;
}
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
function drawFOVCircle() {
fovCtx.clearRect(0, 0, fovCanvas.width, fovCanvas.height);
if (!fovCircleEnabled) return;
const centerX = fovCanvas.width / 2;
const centerY = fovCanvas.height / 2;
fovCtx.beginPath();
fovCtx.arc(centerX, centerY, fovRadius, 0, Math.PI * 2);
fovCtx.strokeStyle = 'rgba(0, 255, 0, 0.6)';
fovCtx.lineWidth = 2;
fovCtx.stroke();
}
const settings = {
aimbotEnabled: true,
aimbotSpeed: 1.2,
aimbotTriggerButton: ['left', 'right'],
crosshairEnabled: false,
triggerbotEnabled: true,
damagenumbersoff: false,
};
function isTriggerPressed() {
return settings.aimbotTriggerButton.some(btn => mouseButtons[btn]);
}
function isTargetPixel(r, g, b, a, t, c) {
if (a === 0) return false;
const dr = r - c.r;
const dg = g - c.g;
const db = b - c.b;
function updateAimbot() {
drawFOVCircle();
if (!settings.aimbotEnabled || !gl || !gl.canvas || !gl.readPixels || !
isTriggerPressed()) return;
setInterval(updateAimbot, 0);
/***************************************
* Triggerbot
***************************************/
//soon
/***************************************
* KP Generator
***************************************/
function toggleKpGenerator() {
kpGeneratorActive = !kpGeneratorActive;
if (kpGeneratorActive) {
showKpGeneratorInstructions();
firebase.database().ref(`users/${firebase.auth().currentUser.uid}/
mission-1claimDate`).remove();
firebase.database().ref(`users/${firebase.auth().currentUser.uid}/
mission-1claimed`).remove();
firebase.database().ref(`users/${firebase.auth().currentUser.uid}/
mission-1kills`).set("5000");
showUserDetails(firebase.auth().currentUser.email,
firebase.auth().currentUser);
}, 5000);
} else {
if (kpGeneratorInterval) {
clearInterval(kpGeneratorInterval);
kpGeneratorInterval = null;
}
}
}
/***************************************
* Styles
***************************************/
function showKpGeneratorInstructions() {
const existingDialog = document.getElementById("kpGeneratorInstructions");
if (existingDialog) existingDialog.remove();
function dragMouseDown(e) {
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;
instructionsDialog.style.top = instructionsDialog.offsetTop - pos2 +
"px";
instructionsDialog.style.left = instructionsDialog.offsetLeft - pos1 +
"px";
instructionsDialog.style.transform = "none";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
}
document.body.appendChild(instructionsDialog);
}
function createUI() {
const menu = document.createElement("div");
menu.id = "zephMenu";
Object.assign(menu.style, {
position: "fixed",
top: "50px",
right: "50px",
width: "250px",
maxHeight: "600px",
overflowY: "auto",
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 statMappings = [
{ label: "ELO", key: "elo" },
{ label: "Chickalettas Killed", key: "chickalettasKilled" },
//{ label: "Deaths", key: "totalDeaths" }, // dont we wish LOL
{ label: "Games Played", key: "gamesPlayed" },
{ label: "Games Won", key: "gamesWon" },
//{ label: "Games Lost", key: "gamesLost" }, //could be possible i
just cant lose a game LOL
{ label: "Knife Kills", key: "knifeKills" },
{ label: "Assists", key: "assists" },
{ label: "Highest Kill Streak", key: "maxKillStreak" },
{ label: "Barrels Shot", key: "barrels" },
{ label: "Kyles Killed", key: "kylesKilled" },
];
let hue = 0;
function updateRGB() {
hue = (hue + 1) % 360;
madeByText.style.color = `hsl(${hue}, 100%, 70%)`;
requestAnimationFrame(updateRGB);
}
updateRGB();
headerContainer.appendChild(madeByText);
titleContainer.appendChild(header);
titleContainer.appendChild(discordLogo);
headerContainer.appendChild(titleContainer);
menu.appendChild(headerContainer);
function hexToRgb(hex) {
const bigint = parseInt(hex.slice(1), 16);
return {
r: (bigint >> 16) & 255,
g: (bigint >> 8) & 255,
b: bigint & 255
};
}
espColorContainer.appendChild(espColorLabel);
espColorContainer.appendChild(espColorPicker);
menu.appendChild(espColorContainer);
nameButton.addEventListener("click", () => {
const newName = prompt("Enter your nickname:", savedName);
if (newName !== null && newName.trim() !== "") {
localStorage.setItem("playerNickname", newName.trim());
if (window.location.href.includes("#")) {
unityInstance.SendMessage("MapScripts", "SetNickname",
newName.trim());
}
}
});
menu.appendChild(nameButton);
const classMap = {
"Soldier": 0,
"Hitman": 1,
"Gunner": 2,
"Heavy": 3,
"Rocketeer": 4,
"Agent": 5,
"Brawler": 6,
"Investor": 7,
"Assassin": 8,
"Juggernaut": 9,
"Recon": 10,
"Pyro": 11,
"Rayblader": 12
};
Object.keys(classMap).forEach(cls => {
const classOption = document.createElement("button");
classOption.textContent = cls;
Object.assign(classOption.style, {
display: "block",
width: "100%",
margin: "5px 0",
padding: "5px",
backgroundColor: "#9b3e9f",
color: "#fff",
border: "none",
borderRadius: "4px",
cursor: "pointer",
});
classOption.addEventListener("click", () => {
const classID = classMap[cls];
localStorage.setItem("selectedClass", classID);
unityInstance.SendMessage("MapScripts", "ChangeClassTo", classID);
classDropdown.style.display = "none";
});
classDropdown.appendChild(classOption);
});
classBtn.addEventListener("click", () => {
classDropdown.style.display = classDropdown.style.display === "none" ?
"block" : "none";
});
menu.appendChild(classBtn);
menu.appendChild(classDropdown);
keybindMenu.appendChild(toggleLabel);
keybindMenu.appendChild(toggleInput);
menu.appendChild(keybindBtn);
menu.appendChild(keybindMenu);
document.body.appendChild(menu);
document.body.appendChild(secondaryWeaponMenu);
document.body.appendChild(meleeWeaponMenu);
document.body.appendChild(profileModderMenu);
document.body.appendChild(skinMenu);
}
function createSkinMenu() {
const skinMenu = document.createElement("div");
skinMenu.id = `zephSkinMenu`;
Object.assign(skinMenu.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",
});
skins.forEach((skin) => {
const btn = document.createElement("button");
btn.textContent = `${skin.name} (${skin.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", () => {
setSkin(skin.id);
skinMenu.style.display = "none";
});
btn.addEventListener(
"mouseover",
() => (btn.style.backgroundColor = "#a74cbf")
);
btn.addEventListener(
"mouseout",
() => (btn.style.backgroundColor = "#9b3e9f")
);
skinMenu.appendChild(btn);
});
return skinMenu;
}
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;
}
setInterval(() => {
const currentHash = window.location.hash;
let keybinds = {
toggleMenu: "o",
}
document.getElementById("zephSecondaryWeaponMenu").style.display = "none";
document.getElementById("zephMeleeWeaponMenu").style.display =
"none";
document.getElementById("zephProfileModderMenu").style.display
= "none";
document.getElementById("zephSkinMenu").style.display = "none";
}
}
}
});
window.addEventListener("load", createUI);
})();
◦