// ==UserScript==
// @name Kour.io Zeph Menu
// @match *://kour.io/*
// @version 4.0
// @author Happyjeffery, Rasperiiii & suppress
// @icon https://i.imgur.com/11sYWVM.png
// @description Speed Hack, Invisibility, And many more. "Insert" to open menu.
// @run-at document-start
// @grant unsafeWindow
// @namespace https://gf.zukizuki.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;
return;
}
performance.now = new Proxy(originalPerfNow, {
apply(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 + 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 arrayStartsWith(arr, prefix) {
if (arr.length < prefix.length) return false;
for (let i = 0; i < prefix.length; i++) {
if (arr[i] !== prefix[i]) return false;
}
return true;
}
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);
let x = view.getFloat32(28, true);
const xDelta = Math.random() < 0.5 ? -0.2 : 0.2;
x += xDelta;
view.setFloat32(28, x, true);
let z = view.getFloat32(36, true);
const zDelta = Math.random() < 0.5 ? -0.2 : 0.2;
z += zDelta;
view.setFloat32(36, z, true);
//console.log(`[Packet Modified] X: ${x.toFixed(2)}, Z: ${z.toFixed(2)}`);
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);
const { addEventListener } = ws;
ws.addEventListener = (type, fn, opts) =>
addEventListener.call(
ws,
type,
type === "message" ? (ev) => shouldBlockDamage(ev) || fn(ev) : fn,
opts
);
const protoDesc = Object.getOwnPropertyDescriptor(OrigWS.prototype, "onmessage");
Object.defineProperty(ws, "onmessage", {
set(fn) {
protoDesc.set.call(this, (ev) => shouldBlockDamage(ev) || fn(ev));
},
get() {
return protoDesc.get.call(this);
},
});
const originalSend = ws.send;
ws.send = function (data) {
if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
let packet = data instanceof Uint8Array ? data : new Uint8Array(data);
const hex = hexOf(packet);
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;
}
if (kourInstance.config.SpinBot && packet.byteLength >= ANGLE_OFFSET + 4 && !kourInstance.config.Invisible) {
const view = new DataView(data);
const num = crazyNumbers[currentIndex];
view.setFloat32(ANGLE_OFFSET, num, true);
currentIndex++;
if (currentIndex >= crazyNumbers.length) currentIndex = 0;
}
}
}
return originalSend.call(this, data);
};
return ws;
};
unsafeWindow.WebSocket.prototype = OrigWS.prototype;
})();
/***************************************
* Config Object
***************************************/
class Kour {
constructor() {
this.config = {
Invisible: true,
Instakill: false,
AntiAim: false,
SpinBot: false,
airStrafing: true,
};
}
}
const kourInstance = new Kour();
unsafeWindow.kourInstance = kourInstance;
/***************************************
* 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();
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",
userSelect: "none",
});
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);
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);
}
function updateClassKills(classField, killCount) {
if (!firebase.auth().currentUser) {
console.log("[Zeph Menu] User is not logged in");
return;
}
const updateData = {};
updateData[classField] = killCount;
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 spaceHeld = false;
let turningLeft = false;
let turningRight = false;
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 simulateKey(code, down = true) {
const event = new KeyboardEvent(down ? 'keydown' : 'keyup', {
code: code,
key: code.replace('Key', ''),
keyCode: code === 'KeyA' ? 65 : 68,
which: code === 'KeyA' ? 65 : 68,
bubbles: true,
cancelable: true,
});
document.dispatchEvent(event);
}
let aHeld = false;
let dHeld = 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;
}
if (turningRight && !dHeld) {
simulateKey('KeyD', true);
dHeld = true;
} else if (!turningRight && dHeld) {
simulateKey('KeyD', false);
dHeld = false;
}
} else {
if (aHeld) {
simulateKey('KeyA', false);
aHeld = false;
}
if (dHeld) {
simulateKey('KeyD', false);
dHeld = 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;
window.addEventListener("keydown", (e) => {
if (e.key.toLowerCase() === "p") {
window.espEnabled = !window.espEnabled;
const espCheckbox = document.getElementById("espToggle");
if (espCheckbox) espCheckbox.checked = window.espEnabled;
console.log(`[Zeph ESP] Toggled ${window.espEnabled ? "ON" : "OFF"}`);
}
});
const WebGL = WebGL2RenderingContext.prototype;
HTMLCanvasElement.prototype.getContext = new Proxy(
HTMLCanvasElement.prototype.getContext,
{
apply(target, thisArgs, args) {
if (args[1]) {
args[1].preserveDrawingBuffer = true;
}
return Reflect.apply(...arguments);
},
}
);
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);
},
};
WebGL.drawElements = new Proxy(WebGL.drawElements, drawHandler);
WebGL.drawElementsInstanced = new Proxy(WebGL.drawElementsInstanced, drawHandler);
function generateRangeConditions(varName) {
return filters
.map(({ min, max }) => `(${varName} >= ${min}.0 && ${varName} <= ${max}.0)`)
.join(" || ");
}
WebGL.shaderSource = new Proxy(WebGL.shaderSource, {
apply(target, thisArgs, args) {
let [shader, src] = args;
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
***************************************/
let fovCircleEnabled = true;
const fovCanvas = document.createElement('canvas');
fovCanvas.style.position = 'fixed';
fovCanvas.style.top = '0';
fovCanvas.style.left = '0';
fovCanvas.style.pointerEvents = 'none';
fovCanvas.style.zIndex = '9999';
document.body.appendChild(fovCanvas);
const fovCtx = fovCanvas.getContext('2d');
function resizeCanvas() {
fovCanvas.width = window.innerWidth;
fovCanvas.height = window.innerHeight;
}
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
const fovRadius = 80;
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,
};
let mouseButtons = { left: false, right: false};
document.addEventListener("mousedown", (e) => {
if (e.button === 0) mouseButtons.left = true;
if (e.button === 2) mouseButtons.right = true;
});
document.addEventListener("mouseup", (e) => {
if (e.button === 0) mouseButtons.left = false;
if (e.button === 2) mouseButtons.right = 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;
return (dr * dr + dg * dg + db * db) <= (t * t);
}
function updateAimbot() {
drawFOVCircle();
if (!settings.aimbotEnabled || !gl || !gl.canvas || !gl.readPixels || !isTriggerPressed()) return;
const width = Math.min(150, gl.canvas?.width || 0);
const height = Math.min(150, gl.canvas?.height || 0);
if (width < 10 || height < 10) {
return;
}
const t = 20;
const c = window.espColor;
const centerX = gl.canvas.width / 2;
const centerY = gl.canvas.height / 2;
const startX = Math.floor(centerX - width / 2);
const startY = Math.floor(centerY - height / 2);
const pixels = new Uint8Array(width * height * 4);
gl.readPixels(startX, startY, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
let closestDist = Infinity;
let bestDX = 0;
let bestDY = 0;
let targetCount = 0;
//console.log(window.espColor);
for (let i = 0; i < pixels.length; i += 4) {
const r = pixels[i], g = pixels[i + 1], b = pixels[i + 2], a = pixels[i + 3];
if (isTargetPixel(r, g, b, a, t, c)) {
targetCount++;
const index = i / 4;
const x = index % width;
const y = Math.floor(index / width);
const dx = startX + x - centerX;
const dy = -(startY + y - centerY);
const dist = Math.hypot(dx, dy);
if (fovCircleEnabled) {
if (dist > fovRadius) continue;
}
const gnilgnim = "signature Start X - Y";
if (dist < closestDist) {
closestDist = dist;
bestDX = dx;
bestDY = dy;
}
}
}
if (closestDist < Infinity) {
//console.log("moving");
const factor = settings.aimbotSpeed;
gl.canvas.dispatchEvent(new MouseEvent("mousemove", {
movementX: bestDX * factor,
movementY: bestDY * factor,
bubbles: true,
cancelable: true,
composed: true,
}));
}
}
setInterval(updateAimbot, 0);
/***************************************
* Triggerbot
***************************************/
//soon
/***************************************
* KP Generator
***************************************/
let kpGeneratorInterval = null;
let kpGeneratorActive = false;
function toggleKpGenerator() {
kpGeneratorActive = !kpGeneratorActive;
const kpGeneratorBtn = document.getElementById("kpGeneratorBtn");
if (kpGeneratorBtn) {
kpGeneratorBtn.textContent = kpGeneratorActive ? "Turn off KP Generator" : "Turn on KP Generator";
if (kpGeneratorActive) {
kpGeneratorBtn.style.background = "linear-gradient(135deg, #ff4d4d 0%, #e01b1b 100%)";
} else {
kpGeneratorBtn.style.background = "linear-gradient(135deg, #7d5b94 0%, #4a6bab 100%)";
}
}
if (kpGeneratorActive) {
showKpGeneratorInstructions();
kpGeneratorInterval = setInterval(() => {
if (!firebase.auth().currentUser) return;
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();
const instructionsDialog = document.createElement("div");
instructionsDialog.id = "kpGeneratorInstructions";
Object.assign(instructionsDialog.style, {
position: "fixed",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
backgroundColor: "#3a1a52",
color: "#fff",
padding: "20px",
zIndex: "10002",
fontFamily: "Arial, sans-serif",
fontSize: "14px",
borderRadius: "12px",
boxShadow: "0 6px 16px rgba(0,0,0,0.4)",
width: "340px",
maxHeight: "450px",
overflowY: "auto",
cursor: "move",
userSelect: "none",
border: "2px solid #9b3e9f",
});
const closeBtn = document.createElement("button");
closeBtn.textContent = "×";
closeBtn.style.position = "absolute";
closeBtn.style.top = "10px";
closeBtn.style.right = "10px";
closeBtn.style.background = "none";
closeBtn.style.border = "none";
closeBtn.style.color = "#fff";
closeBtn.style.fontSize = "20px";
closeBtn.style.cursor = "pointer";
closeBtn.style.fontWeight = "bold";
closeBtn.addEventListener("click", () => instructionsDialog.remove());
instructionsDialog.appendChild(closeBtn);
const dialogTitle = document.createElement("div");
dialogTitle.textContent = "✨ KP Generator Instructions ✨";
dialogTitle.style.fontWeight = "bold";
dialogTitle.style.fontSize = "20px";
dialogTitle.style.marginBottom = "15px";
dialogTitle.style.textAlign = "center";
dialogTitle.style.textShadow = "0 0 5px rgba(255,255,255,0.3)";
instructionsDialog.appendChild(dialogTitle);
const instructionsContent = document.createElement("div");
instructionsContent.innerHTML = `
<div style="margin-bottom: 15px; background-color: #4a2063; padding: 15px; border-radius: 8px; border-left: 4px solid #b64fc8;">
<div style="font-weight: bold; font-size: 16px; margin-bottom: 10px; color: #ffd700;">
🚀 How to Use:
</div>
<ol style="margin-top: 5px; padding-left: 25px; line-height: 1.5;">
<li style="margin-bottom: 8px;">📋 Go to the missions section and claim the Christmas one</li>
<li style="margin-bottom: 8px;">⏱️ Close it and wait 5 seconds</li>
<li style="margin-bottom: 8px;">🔄 Go back</li>
<li style="margin-bottom: 8px;">🔁 Rinse and Repeat</li>
</ol>
</div>
<div style="margin-top: 15px; background-color: #4a2063; padding: 15px; border-radius: 8px; border-left: 4px solid #ffa500;">
<div style="font-weight: bold; font-size: 16px; margin-bottom: 10px; color: #ffd700;">
⚠️ Important Notes:
</div>
<ul style="margin-top: 5px; padding-left: 25px; line-height: 1.5;">
<li style="margin-bottom: 8px;">⏳ You may need to wait a minute or two for it to begin adding, give it a few tries. Please be patient.</li>
<li style="margin-bottom: 8px;">🔄 Sometimes the KP on the top will start going back or looks like it gets stuck, reload the page and it will add again as this is not with the code but with the game.</li>
</ul>
</div>
`;
instructionsDialog.appendChild(instructionsContent);
const okBtn = document.createElement("button");
okBtn.textContent = "Got it!";
Object.assign(okBtn.style, {
width: "100%",
marginTop: "20px",
padding: "10px",
cursor: "pointer",
backgroundColor: "#9b3e9f",
border: "none",
borderRadius: "8px",
color: "#fff",
fontWeight: "bold",
fontSize: "15px",
transition: "all 0.2s ease",
});
okBtn.addEventListener("mouseover", () => {
okBtn.style.backgroundColor = "#b64fc8";
okBtn.style.transform = "scale(1.02)";
});
okBtn.addEventListener("mouseout", () => {
okBtn.style.backgroundColor = "#9b3e9f";
okBtn.style.transform = "scale(1)";
});
okBtn.addEventListener("click", () => instructionsDialog.remove());
instructionsDialog.appendChild(okBtn);
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
instructionsDialog.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;
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 secondaryWeaponMenu = createWeaponMenu("Secondary Weapon", false);
const meleeWeaponMenu = createWeaponMenu("Melee Weapon", true);
const skinMenu = createSkinMenu();
const profileModderMenu = document.createElement("div");
profileModderMenu.id = "zephProfileModderMenu";
Object.assign(profileModderMenu.style, {
position: "fixed",
top: "50px",
right: "320px",
width: "220px",
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 buttonContainer = document.createElement("div");
Object.assign(buttonContainer.style, {
maxHeight: "400px",
overflowY: "auto",
});
profileModderMenu.appendChild(buttonContainer);
function createStyledButton(text, onClick) {
const btn = document.createElement("button");
btn.textContent = text;
Object.assign(btn.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",
});
btn.addEventListener("click", onClick);
btn.addEventListener("mouseover", () => (btn.style.backgroundColor = "#a74cbf"));
btn.addEventListener("mouseout", () => (btn.style.backgroundColor = "#9b3e9f"));
buttonContainer.appendChild(btn);
}
createStyledButton("Set Class Kills", setClassKills);
createStyledButton("Change Kills", setKDStats);
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" },
];
function createStatButton(label, key) {
createStyledButton(`Change ${label}`, () => {
const newValue = prompt(`Enter new value for ${label}:`);
if (newValue !== null) {
setStat(key, newValue);
}
});
}
statMappings.forEach(({ label, key }) => {
createStatButton(label, key);
});
const headerContainer = document.createElement("div");
headerContainer.style.marginBottom = "15px";
headerContainer.style.position = "relative";
const madeByText = document.createElement("div");
madeByText.textContent = "Made by: Happyjeffery, Rasperiiii, suppress";
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 kpGeneratorBtn = document.createElement("button");
kpGeneratorBtn.id = "kpGeneratorBtn";
kpGeneratorBtn.textContent = "Turn on KP Generator";
kpGeneratorBtn.style.fontWeight = "bold";
Object.assign(kpGeneratorBtn.style, {
width: "100%",
margin: "8px 0",
padding: "10px",
cursor: "pointer",
background: "linear-gradient(135deg, #7d5b94 0%, #4a6bab 100%)",
border: "none",
borderRadius: "5px",
fontSize: "14px",
color: "#fff",
transition: "all 0.3s ease",
boxShadow: "0 2px 4px rgba(0,0,0,0.2)",
});
kpGeneratorBtn.addEventListener("click", toggleKpGenerator);
kpGeneratorBtn.addEventListener("mouseover", () => {
kpGeneratorBtn.style.background = "linear-gradient(135deg, #8e6aa5 0%, #5a7bc1 100%)";
kpGeneratorBtn.style.transform = "scale(1.03)";
kpGeneratorBtn.style.boxShadow = "0 4px 8px rgba(0,0,0,0.3)";
});
kpGeneratorBtn.addEventListener("mouseout", () => {
kpGeneratorBtn.style.background = "linear-gradient(135deg, #7d5b94 0%, #4a6bab 100%)";
kpGeneratorBtn.style.transform = "scale(1)";
kpGeneratorBtn.style.boxShadow = "0 2px 4px rgba(0,0,0,0.2)";
});
menu.appendChild(kpGeneratorBtn);
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";
skinMenu.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";
skinMenu.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 skinBtn = document.createElement("button");
skinBtn.textContent = "Set Skin";
Object.assign(skinBtn.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",
});
skinBtn.addEventListener("click", () => {
meleeWeaponMenu.style.display = "none";
secondaryWeaponMenu.style.display = "none";
profileModderMenu.style.display = "none";
skinMenu.style.display = skinMenu.style.display === "none" ? "block" : "none";
});
skinBtn.addEventListener("mouseover", () => (skinBtn.style.backgroundColor = "#6a359c"));
skinBtn.addEventListener("mouseout", () => (skinBtn.style.backgroundColor = "#53277E"));
menu.appendChild(skinBtn);
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 airContainer = document.createElement("div");
const airCheckbox = document.createElement("input");
airCheckbox.type = "checkbox";
airCheckbox.id = "airToggle";
airCheckbox.checked = kourInstance.config.airStrafing;
airCheckbox.addEventListener("change", function() {
kourInstance.config.airStrafing = this.checked;
});
const airLabel = document.createElement("label");
airLabel.htmlFor = "airToggle";
airLabel.textContent = " Air Strafing";
airContainer.appendChild(airCheckbox);
airContainer.appendChild(airLabel);
menu.appendChild(airContainer);
const aimContainer = document.createElement("div");
const aimCheckbox = document.createElement("input");
aimCheckbox.type = "checkbox";
aimCheckbox.id = "aimToggle";
aimCheckbox.checked = kourInstance.config.AntiAim;
aimCheckbox.addEventListener("change", function() {
kourInstance.config.AntiAim = this.checked;
});
const aimLabel = document.createElement("label");
aimLabel.htmlFor = "aimToggle";
aimLabel.textContent = " AntiPlayer (Turn off invis in lobby)";
aimContainer.appendChild(aimCheckbox);
aimContainer.appendChild(aimLabel);
menu.appendChild(aimContainer);
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);
});
const invisLabel = document.createElement("label");
invisLabel.htmlFor = "invisToggle";
invisLabel.textContent = " Invisible";
invisContainer.appendChild(invisCheckbox);
invisContainer.appendChild(invisLabel);
menu.appendChild(invisContainer);
const blockarmsContainer = document.createElement("div");
const blockarmsCheckbox = document.createElement("input");
blockarmsCheckbox.type = "checkbox";
blockarmsCheckbox.id = "blockarms";
blockarmsCheckbox.checked = true;
const blockarmsLabel = document.createElement("label");
blockarmsLabel.htmlFor = "blockarms";
blockarmsLabel.textContent = " Hide Arms";
blockarmsContainer.appendChild(blockarmsCheckbox);
blockarmsContainer.appendChild(blockarmsLabel);
menu.appendChild(blockarmsContainer);
function hexToRgb(hex) {
const bigint = parseInt(hex.slice(1), 16);
return {
r: (bigint >> 16) & 255,
g: (bigint >> 8) & 255,
b: bigint & 255
};
}
const espContainer = document.createElement("div");
const espCheckbox = document.createElement("input");
espCheckbox.type = "checkbox";
espCheckbox.id = "espToggle";
espCheckbox.checked = window.espEnabled || false;
espCheckbox.addEventListener("change", function() {
window.espEnabled = this.checked;
console.log("[Zeph ESP] Toggled " + (this.checked ? "ON" : "OFF"));
});
const espColorContainer = document.createElement("div");
espColorContainer.style.marginTop = "8px";
espColorContainer.style.display = "flex";
espColorContainer.style.alignItems = "center";
espColorContainer.style.gap = "8px";
const espColorLabel = document.createElement("label");
espColorLabel.htmlFor = "espColorPicker";
espColorLabel.textContent = "ESP Color:";
espColorLabel.style.flexShrink = "0";
let savedRgb = localStorage.getItem("espColorRGB");
if (savedRgb) {
try {
window.espColor = JSON.parse(savedRgb);
} catch {
window.espColor = { r: 0, g: 0, b: 0 };
}
} else {
window.espColor = { r: 0, g: 0, b: 0 };
}
const espColorPicker = document.createElement("input");
espColorPicker.type = "color";
espColorPicker.id = "espColorPicker";
espColorPicker.value = `#${((1 << 24) + (window.espColor.r << 16) + (window.espColor.g << 8) + window.espColor.b).toString(16).slice(1)}`;
espColorPicker.addEventListener("input", (e) => {
const rgb = hexToRgb(e.target.value);
window.espColor = rgb;
localStorage.setItem("espColorRGB", JSON.stringify(rgb));
});
espColorContainer.appendChild(espColorLabel);
espColorContainer.appendChild(espColorPicker);
menu.appendChild(espColorContainer);
const espLabel = document.createElement("label");
espLabel.htmlFor = "espToggle";
espLabel.textContent = " ESP";
espContainer.appendChild(espCheckbox);
espContainer.appendChild(espLabel);
menu.appendChild(espContainer);
const crosshairContainer = document.createElement("div");
const crosshairCheckbox = document.createElement("input");
crosshairCheckbox.type = "checkbox";
crosshairCheckbox.id = "crosshairToggle";
crosshairCheckbox.checked = settings.crosshairEnabled;
crosshairCheckbox.addEventListener("change", function() {
settings.crosshairEnabled = this.checked;
});
const crosshairLabel = document.createElement("label");
crosshairLabel.htmlFor = "crosshairToggle";
crosshairLabel.textContent = " Hide crosshair";
crosshairContainer.appendChild(crosshairCheckbox);
crosshairContainer.appendChild(crosshairLabel);
menu.appendChild(crosshairContainer);
const aimbotContainer = document.createElement("div");
const aimbotCheckbox = document.createElement("input");
aimbotCheckbox.type = "checkbox";
aimbotCheckbox.id = "aimbotToggle";
aimbotCheckbox.checked = settings.aimbotEnabled;
aimbotCheckbox.addEventListener("change", function() {
settings.aimbotEnabled = this.checked;
console.log("aimbot set to " + this.checked);
});
const aimbotLabel = document.createElement("label");
aimbotLabel.htmlFor = "aimbotToggle";
aimbotLabel.textContent = " Aimbot";
aimbotContainer.appendChild(aimbotCheckbox);
aimbotContainer.appendChild(aimbotLabel);
menu.appendChild(aimbotContainer);
const fovContainer = document.createElement("div");
const fovCheckbox = document.createElement("input");
fovCheckbox.type = "checkbox";
fovCheckbox.id = "fovToggle";
fovCheckbox.checked = fovCircleEnabled;
fovCheckbox.addEventListener("change", () => {
fovCircleEnabled = fovCheckbox.checked;
});
const fovLabel = document.createElement("label");
fovLabel.htmlFor = "fovToggle";
fovLabel.textContent = " FOV Circle";
fovContainer.appendChild(fovCheckbox);
fovContainer.appendChild(fovLabel);
menu.appendChild(fovContainer);
const savedName = localStorage.getItem("playerNickname") || "";
const nameButton = document.createElement("button");
nameButton.textContent = "Edit Name";
Object.assign(nameButton.style, {
marginTop: "10px",
padding: "5px 10px",
backgroundColor: "#7b3fa0",
color: "#fff",
border: "none",
borderRadius: "5px",
cursor: "pointer",
display: "block"
});
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);
let savedClass = localStorage.getItem("selectedClass");
const classBtn = document.createElement("button");
classBtn.textContent = "Select Class";
Object.assign(classBtn.style, {
marginTop: "10px",
padding: "5px 10px",
backgroundColor: "#7b3fa0",
color: "#fff",
border: "none",
borderRadius: "5px",
cursor: "pointer"
});
const classDropdown = document.createElement("div");
Object.assign(classDropdown.style, {
display: "none",
marginTop: "10px",
backgroundColor: "#673a91",
padding: "10px",
borderRadius: "8px"
});
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);
const keybindBtn = document.createElement("button");
keybindBtn.textContent = "Keybind Settings";
Object.assign(keybindBtn.style, {
marginTop: "10px",
padding: "5px 10px",
backgroundColor: "#7b3fa0",
color: "#fff",
border: "none",
borderRadius: "5px",
cursor: "pointer"
});
keybindBtn.addEventListener("click", () => {
keybindMenu.style.display = keybindMenu.style.display === "none" ? "block" : "none";
});
const keybindMenu = document.createElement("div");
Object.assign(keybindMenu.style, {
display: "none",
marginTop: "10px",
padding: "10px",
backgroundColor: "#673a91",
borderRadius: "8px"
});
const toggleLabel = document.createElement("label");
toggleLabel.textContent = "Toggle Menu Key: ";
toggleLabel.style.marginRight = "5px";
const toggleInput = document.createElement("input");
toggleInput.type = "text";
toggleInput.value = keybinds.toggleMenu;
toggleInput.maxLength = 10;
toggleInput.style.width = "60px";
toggleInput.addEventListener("keydown", (e) => {
e.preventDefault(); // Don't type into box
toggleInput.value = e.key;
keybinds.toggleMenu = e.key;
localStorage.setItem("zephKeybinds", JSON.stringify(keybinds));
});
keybindMenu.appendChild(toggleLabel);
keybindMenu.appendChild(toggleInput);
menu.appendChild(keybindBtn);
menu.appendChild(keybindMenu);
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);
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",
});
const skinHeader = document.createElement("div");
skinHeader.textContent = "Skin";
skinHeader.style.textAlign = "center";
skinHeader.style.fontWeight = "bold";
skinHeader.style.marginBottom = "10px";
skinMenu.appendChild(skinHeader);
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;
}
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;
}
window.addEventListener("keydown", (e) => {
if (e.key.toLowerCase() === "v") {
const savedClassID = localStorage.getItem("selectedClass");
if (
savedClassID !== null &&
window.location.href.includes("#")
) {
unityInstance.SendMessage("MapScripts", "ChangeClassTo", parseInt(savedClassID));
}
}
});
/***************************************
* Keybinds
***************************************/
let lastHash = window.location.hash;
setInterval(() => {
const currentHash = window.location.hash;
// Only run if hash has changed AND there's a # in the URL
if (currentHash !== lastHash && currentHash.includes("#")) {
lastHash = currentHash;
const storedName = localStorage.getItem("playerNickname");
if (storedName) {
unityInstance.SendMessage("MapScripts", "SetNickname", storedName);
}
}
}, 500);
let keybinds = {
toggleMenu: "o",
}
const savedKeybinds = localStorage.getItem("zephKeybinds");
if (savedKeybinds) {
try {
keybinds = JSON.parse(savedKeybinds);
} catch {}
}
document.addEventListener("keydown", function (e) {
if (e.key === keybinds.toggleMenu && !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";
document.getElementById("zephSkinMenu").style.display = "none";
}
}
}
});
window.addEventListener("load", createUI);
})();