Greasy Fork is available in English.

🔥ঔৣƗNĐƗȺ»Official Mod for Shell Shockers-Aimbot, ESP and MOAR!🔥

Join Our Discord Server! Shell Shockers ESP (Extra Sensory Perception), tracers, and aimbot features. Plz note that the Aimbot,ESp and Tracers are form Libertymutual.

// ==UserScript==
// @name        🔥ঔৣƗNĐƗȺ»Official Mod for Shell Shockers-Aimbot, ESP and MOAR!🔥
// @namespace  https://greasyfork.org/en/scripts/489957-%E0%A6%94%E0%A7%A3%C9%A8n%C4%91%C9%A8%E2%B1%A5-%C5%A7%C5%82%C7%A5%C9%87%C9%BD%E0%A6%94%E0%A7%A3-aimbot-for-shell-shockers/code
// @license      GPL-3.0
// @version      1.2.4pre4
// @author      onlypuppy7 and🔥ঔৣƗNĐƗȺ»ŦłǤɆⱤঔৣ🔥
// @description Join Our Discord Server! Shell Shockers ESP (Extra Sensory Perception), tracers, and aimbot features.  Plz note that the Aimbot,ESp and Tracers are form Libertymutual.
// @match        *://algebra.best/*
// @match        *://algebra.vip/*
// @match        *://biologyclass.club/*
// @match        *://deadlyegg.com/*
// @match        *://deathegg.world/*
// @match        *://eggcombat.com/*
// @match        *://egg.dance/*
// @match        *://eggfacts.fun/*
// @match        *://egghead.institute/*
// @match        *://eggisthenewblack.com/*
// @match        *://eggsarecool.com/*
// @match        *://geometry.best/*
// @match        *://geometry.monster/*
// @match        *://geometry.pw/*
// @match        *://geometry.report/*
// @match        *://hardboiled.life/*
// @match        *://hardshell.life/*
// @match        *://humanorganising.org/*
// @match        *://mathdrills.info/*
// @match        *://mathfun.rocks/*
// @match        *://mathgames.world/*
// @match        *://math.international/*
// @match        *://mathlete.fun/*
// @match        *://mathlete.pro/*
// @match        *://overeasy.club/*
// @match        *://scrambled.best/*
// @match        *://scrambled.tech/*
// @match        *://scrambled.today/*
// @match        *://scrambled.us/*
// @match        *://scrambled.world/*
// @match        *://shellshockers.club/*
// @match        *://shellshockers.site/*
// @match        *://shellshockers.us/*
// @match        *://shellshockers.world/*
// @match        *://softboiled.club/*
// @match        *://violentegg.club/*
// @match        *://violentegg.fun/*
// @match        *://yolk.best/*
// @match        *://yolk.life/*
// @match        *://yolk.rocks/*
// @match        *://yolk.tech/*
// @match        *://shellshock.io/*
// @match        *://zygote.cafe/*
// @discord      https://discord.gg/qUJSdRJvVV/
// @homepage   https://greasyfork.org/en/scripts/492659/
// @greasyfork  https://greasyfork.org/en/users/1228152-%E0%A6%94%E0%A7%A3%C9%A8-%E2%86%81%C9%A8%E2%B1%A5%E0%A6%94%E0%A7%A3/
// @grant        none
// @run-at       document-start
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @require      https://cdn.jsdelivr.net/npm/babylonjs@3.3.0/babylon.min.js
// ==/UserScript==


(function () {

    let originalReplace = String.prototype.replace;
    String.prototype.originalReplace = function() {
        return originalReplace.apply(this, arguments);
    };

    let enableESP = true;
    let enableTracers = true;
    let RMB = false;


    const originalXHROpen = XMLHttpRequest.prototype.open;
    const originalXHRGetResponse = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'response');
    let shellshockjs;
    XMLHttpRequest.prototype.open = function(...args) {
        const url = args[1];
        if (url && url.includes("js/shellshock.js")) {
            shellshockjs = this;
        }
        originalXHROpen.apply(this, args);
    };
    Object.defineProperty(XMLHttpRequest.prototype, 'response', {
        get: function() {
            if (this === shellshockjs) {
                return applyLibertyMutual(originalXHRGetResponse.get.call(this));
            }
            return originalXHRGetResponse.get.call(this);
        }
    });

    let F = [];
    let H = {};
    let functionNames = [];
    let ESPArray = [];

    const getScrambled = function() {
        return Array.from({length: 10}, () => String.fromCharCode(97 + Math.floor(Math.random() * 26))).join('');
    };

    const createAnonFunction = function(name, func) {
        const funcName = getScrambled();
        window[funcName] = func;
        F[name] = window[funcName];
        functionNames[name] = funcName;
    };

    const fetchTextContent = function(url) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, false); // Make the request synchronous
        xhr.send();
        if (xhr.status === 200) {
            return xhr.responseText;
        } else {
            console.error("Error fetching text content. Status:", xhr.status);
            return null;
        }
    };

    const applyLibertyMutual = function(js) {
        let hash = CryptoJS.SHA256(js).toString(CryptoJS.enc.Hex);
        let clientKeys;
        onlineClientKeys = fetchTextContent("https://raw.githubusercontent.com/StateFarmNetwork/client-keys/main/libertymutual_" + hash + ".json");

        if (onlineClientKeys == "value_undefined" || onlineClientKeys == null) {
            let userInput = prompt('Valid keys could not be retrieved online. Enter keys if you have them. Join the StateFarm Network Discord server to generate keys! https://discord.gg/HYJG3jXVJF', '');
            if (userInput !== null && userInput !== '') {
                alert('Aight, let\'s try this. If it is invalid, it will just crash.');
                clientKeys = JSON.parse(userInput);
            } else {
                alert('You did not enter anything, this is gonna crash (LOL).');
            }
        } else {
            clientKeys = JSON.parse(onlineClientKeys);
        }

        H = clientKeys.vars;

        let injectionString = "";

        const modifyJS = function(find,replace) {
            let oldJS = js;
            js = js.originalReplace(find,replace);
            if (oldJS !== js) {
                console.log("%cReplacement successful! Injected code: "+replace, 'color: green; font-weight: bold; font-size: 0.6em; text-decoration: italic;');
            } else {
                console.log("%cReplacement failed! Attempted to replace "+find+" with: "+replace, 'color: red; font-weight: bold; font-size: 0.6em; text-decoration: italic;');
            }
        };

        console.log('%cATTEMPTING TO START LIBERTYMUTUAL', 'color: magenta; font-weight: bold; font-size: 1.5em; text-decoration: underline;');
        const variableNameRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
        for (let name in H) {
            deobf = H[name];
            if (variableNameRegex.test(deobf)) {
                injectionString = `${injectionString}${name}: (() => { try { return ${deobf}; } catch (error) { return "value_undefined"; } })(),`;
            } else {
                alert("Message from the LibertyMutual Devs: WARNING! The keys inputted contain non-variable characters! There is a possibility that this could run code unintended by the LibertyMutual team, although possibly there is also a mistake. Do NOT proceed with using this, and report to the LibertyMutual developers what is printed in the console.");
                console.log("REPORT THIS IN THE DISCORD SERVER:", clientKeys);
                const crashplease = "balls";
                crashplease = "balls2";
            }
        }
        console.log(injectionString);
        console.log('%cLIBERTYMUTUAL INJECTION: INJECT VAR RETRIEVAL FUNCTION AND MAIN LOOP', 'color: yellow; font-weight: bold; font-size: 1.2em; text-decoration: underline;');
        modifyJS(H.SCENE+'.render',`window["${functionNames.retrieveFunctions}"]({${injectionString}},true)||${H.SCENE}.render`);
        console.log('%cSuccess! Variable retrieval and main loop hooked.', 'color: green; font-weight: bold;');
        modifyJS(`{if(${H.CULL})`,`{if(true)`);
        console.log('%cSuccess! Cull inhibition hooked.', 'color: green; font-weight: bold;');
        modifyJS("Not playing in iframe", "LIBERTYMUTUAL ACTIVE!");
        console.log(H);
        return js;
    };

    createAnonFunction("retrieveFunctions", function(vars) {
        ss = vars;
        F.LIBERTYMUTUAL();
    });

    createAnonFunction("LIBERTYMUTUAL", function() {
        ss.PLAYERS.forEach(PLAYER=>{
            if (PLAYER.hasOwnProperty("ws")) {
                ss.MYPLAYER = PLAYER;
            }
        });

        H.actor = findKeyWithProperty(ss.MYPLAYER,H.mesh);

        let TARGETED;
        let CROSSHAIRS = new BABYLON.Vector3();
        CROSSHAIRS.copyFrom(ss.MYPLAYER[H.actor][H.mesh].position);
        const horizontalOffset = Math.sin(ss.MYPLAYER[H.actor][H.mesh].rotation.y);
        const verticalOffset = Math.sin(-ss.MYPLAYER[H.pitch]);
        CROSSHAIRS.x += horizontalOffset;
        CROSSHAIRS.y += verticalOffset + 0.4;
        CROSSHAIRS.z += Math.cos(ss.MYPLAYER[H.actor][H.mesh].rotation.y);

        const timecode = Date.now();
        let minValue = 99999;
        ss.PLAYERS.forEach(PLAYER=>{
            if (PLAYER) {
                PLAYER.timecode = timecode;
                if ((PLAYER!==ss.MYPLAYER) && ((ss.MYPLAYER.team==0)||(PLAYER.team!==ss.MYPLAYER.team))) {
                    if ((!PLAYER.generatedESP)) {
                        const boxSize = {width: 0.4, height: 0.65, depth: 0.4};
                        const vertices = [
                            new BABYLON.Vector3(-boxSize.width / 2, 0, -boxSize.depth / 2),
                            new BABYLON.Vector3(boxSize.width / 2, 0, -boxSize.depth / 2),
                            new BABYLON.Vector3(boxSize.width / 2, 0 + boxSize.height, -boxSize.depth / 2),
                            new BABYLON.Vector3(-boxSize.width / 2, 0 + boxSize.height, -boxSize.depth / 2),
                            new BABYLON.Vector3(-boxSize.width / 2, 0, boxSize.depth / 2),
                            new BABYLON.Vector3(boxSize.width / 2, 0, boxSize.depth / 2),
                            new BABYLON.Vector3(boxSize.width / 2, 0 + boxSize.height, boxSize.depth / 2),
                            new BABYLON.Vector3(-boxSize.width / 2, 0 + boxSize.height, boxSize.depth / 2),
                        ];
                        const lines = [];
                        for (let i = 0; i < 4; i++) {
                            lines.push([vertices[i], vertices[(i + 1) % 4]]);
                            lines.push([vertices[i + 4], vertices[(i + 1) % 4 + 4]]);
                            lines.push([vertices[i], vertices[i + 4]]);
                        }
                        const box = BABYLON.MeshBuilder.CreateLineSystem(getScrambled(), { lines }, PLAYER[H.actor].scene);
                        box.renderingGroupId = 1;
                        box.parent = PLAYER[H.actor][H.mesh];
                        const tracers = BABYLON.MeshBuilder.CreateLines('lines', { points: [PLAYER[H.actor][H.mesh].position, CROSSHAIRS] }, PLAYER[H.actor].scene);
                        tracers.alwaysSelectAsActiveMesh = true;
                        tracers.renderingGroupId = 1;

                        PLAYER.box = box;
                        PLAYER.tracers = tracers;
                        PLAYER.generatedESP = true;
                        ESPArray.push([box, tracers, PLAYER]);
                    }
                    PLAYER.tracers.setVerticesData(BABYLON.VertexBuffer.PositionKind, [CROSSHAIRS.x, CROSSHAIRS.y, CROSSHAIRS.z, PLAYER[H.actor][H.mesh].position.x, PLAYER[H.actor][H.mesh].position.y, PLAYER[H.actor][H.mesh].position.z]);
                    PLAYER.box.visibility = enableESP;
                    PLAYER.tracers.visibility = (PLAYER[H.playing] && enableTracers);

                    const distance = Math.hypot(PLAYER[H.x]-ss.MYPLAYER[H.x], PLAYER[H.y]-ss.MYPLAYER[H.y], PLAYER[H.z]-ss.MYPLAYER[H.z]);

                    if (distance < minValue) {
                        TARGETED = PLAYER;
                        minValue = distance;
                    }
                }
            }
            if (RMB && TARGETED && TARGETED[H.playing]) {
                const directionVector={
                    [H.x]: TARGETED[H.x]-ss.MYPLAYER[H.x],
                    [H.y]: TARGETED[H.y]-ss.MYPLAYER[H.y]-0.05,
                    [H.z]: TARGETED[H.z]-ss.MYPLAYER[H.z],
                };
                ss.MYPLAYER[H.yaw]=F.calculateYaw(directionVector);
                ss.MYPLAYER[H.pitch]=F.calculatePitch(directionVector);
            }
        });
        for ( let i=0;i<ESPArray.length;i++) {
            if (ESPArray[i][2] && ESPArray[i][2].timecode==timecode) {
            } else {
                ESPArray[i][0].dispose();
                ESPArray[i][1].dispose();
                ESPArray.splice(i,1);
            }
        }
    });

    createAnonFunction("setPrecision", function (value) {
        return Math.floor(value * 8192) / 8192;
    });

    createAnonFunction("calculateYaw", function (pos) {
        return F.setPrecision(Math.mod(Math.atan2(pos[H.x],pos[H.z]), Math.PI2));
    });

    createAnonFunction("calculatePitch", function (pos) {
        return F.setPrecision(-Math.atan2(pos[H.y],Math.hypot(pos[H.x],pos[H.z]))%1.5);
    });

    let guiVisible = true;
    let espColor = { r: 255, g: 255, b: 255 };

    const findKeyWithProperty = function(obj, propertyToFind) {
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (key === propertyToFind) {
                    return [key];
                } else if (
                    typeof obj[key] === 'object' &&
                    obj[key] !== null &&
                    obj[key].hasOwnProperty(propertyToFind)
                ) {
                    return key;
                }
            }
        }
        return null;
    };

    const guiHtml = `
        <style>
             #libertyMutualGui {
                position: fixed;
                top: 20px;
                left: 20px;
                background-color: rgba(0, 0, 0, 0.8);
                padding: 10px;
                border: 4px solid black;
                border-radius: 5px;
                z-index: 9999;
                font-family: 'Agency FB', sans-serif;
                font-style: italic;
                font-weight: bold;
                font-size: 10px;

            }
            #libertyMutualGui input[type="range"] {
                width: 100px;
                margin-bottom: 5px;
            }
            #toggleGuiButton {
                margin-top: 5px;
                padding: 5px;
                cursor: pointer;

            input[type="range"] {
        background: linear-gradient(to right, red 0%, red 100%);

            }
</style>
<div id="libertyMutualGui" style="font-family: 'Agency FB', sans-serif; padding: 14px; border: 2px solid red; border-radius: 5px; position: fixed; top: 20px; left: 20px; z-index: 9999;">
    <div>
      <h3 style="color: #FF0000; font-family: 'Agency FB', sans-serif; font-style: italic; font-weight: bold; text-align: center;">Settings</h3>
        <input type="checkbox" id="espCheckbox" checked> <span style="color: red;">ESP</span> [V]<br>
        <input type="checkbox" id="tracersCheckbox" checked> <span style="color: red;">TRACERS</span> [N]<br>
        <input type="checkbox" id="rmbCheckbox"> <span style="color: red;">Aimbot</span>[C]<br>
        <input type="checkbox" id="toggleAllCheckbox"> <span style="color: red;">God Mode</span><br>
        <input type="checkbox" id="visualUtilsOnly"> <span style="color: red;">Visual Utlities Only</span><br>
        <br>
        <div>
            <input type="range" id="redSlider" min="0" max="255" value="255">
            <input type="number" id="redValue" min="0" max="255" value="255">
            <span style="color: red;">ESP RED</span>
            <br>
            <input type="range" id="greenSlider" min="0" max="255" value="255">
            <input type="number" id="greenValue" min="0" max="255" value="255">
            <span style="color: red;">ESP GREEN</span>
            <br>
            <input type="range" id="blueSlider" min="0" max="255" value="255">
            <input type="number" id="blueValue" min="0" max="255" value="255">
            <span style="color: red;">ESP BLUE</span>
            <br>
            <br>
            <input type="range" id="espRedSlider" min="0" max="255" value="255">
            <input type="number" id="espRedValue" min="0" max="255" value="255">
            <span style="color: red;">TRACERS RED</span>
            <br>
            <input type="range" id="espGreenSlider" min="0" max="255" value="255">
            <input type="number" id="espGreenValue" min="0" max="255" value="255">
            <span style="color: red;">TRACERS GREEN</span>
            <br>
            <input type="range" id="espBlueSlider" min="0" max="255" value="255">
            <input type="number" id="espBlueValue" min="0" max="255" value="255">
            <span style="color: red;">TRACERS BLUE</span>
        </div>
        <!-- Aimbot Settings -->
        <h3>Aimbot Settings</h3>
        <label for="aimbotSensitivity">Aimbot Sensitivity:</label>
        <input type="range" id="aimbotSensitivity" min="1" max="10" value="5">
        <span id="aimbotSensitivityValue">5</span><br>
        <label for="aimbotFOV">Aimbot FOV:</label>
        <input type="range" id="aimbotFOV" min="1" max="100" value="50">
        <span id="aimbotFOVValue">50</span><br>
        <div>
        <h3>Links</h3>
        <div>
            <a href="https://greasyfork.org/en/users/1228152-%E0%A6%94%E0%A7%A3%C9%A8n%C4%91%C9%A8%E2%B1%A5%E0%A6%94%E0%A7%A3">Author's Page</a>
        <div>
            <a href="https://greasyfork.org/en/scripts/492659">Homepage</a>
        </div>
           <a href="https://discord.gg/qUJSdRJvVV">Discord</a>
        </div>
          <a  href="https://github.com/Indian81/India-Shell-Shockers-Mod--Aimbot-ESP-and-MOAR-">Github</a>
    </div>
    <button id="toggleGuiButton">Toggle GUI (H)</button>
</div>
    `;

    document.body.insertAdjacentHTML('beforeend', guiHtml);
    let espLineColor = { r: 255, g: 255, b: 255 };

function updateESPLineColor() {
    for (let i = 0; i < ESPArray.length; i++) {
        const tracers = ESPArray[i][1];
        if (tracers) {
            tracers.color.r = espLineColor.r / 255;
            tracers.color.g = espLineColor.g / 255;
            tracers.color.b = espLineColor.b / 255;
        }
    }
}


// Modernized game settings object using ES6 class syntax
class GameSettings {
  constructor() {
    this._aimbotSensitivity = 5; // Default sensitivity
    this._aimbotFOV = 50; // Default FOV
  }

  // Getter for aimbot sensitivity
  get aimbotSensitivity() {
    return this._aimbotSensitivity;
  }

  // Setter for aimbot sensitivity
  set aimbotSensitivity(sensitivity) {
    this._aimbotSensitivity = sensitivity;
    console.log(`Aimbot sensitivity updated to: ${sensitivity}`);
    // Add logic to apply sensitivity in your game
  }

  // Getter for aimbot FOV
  get aimbotFOV() {
    return this._aimbotFOV;
  }

  // Setter for aimbot FOV
  set aimbotFOV(fov) {
    this._aimbotFOV = fov;
    console.log(`Aimbot FOV updated to: ${fov}`);
    // Add logic to apply FOV in your game
  }
}

// Create an instance of GameSettings
const gameSettings = new GameSettings();

// Function to update sensitivity settings in your game
const updateAimbotSensitivity = sensitivity => {
  gameSettings.aimbotSensitivity = sensitivity;
};

// Function to update FOV settings in your game
const updateAimbotFOV = fov => {
  gameSettings.aimbotFOV = fov;
};

// Event listeners for existing checkboxes and sliders
document.getElementById('espCheckbox').addEventListener('change', function() {
    espEnabled = this.checked;
    displayWatermark(`ESP ${enableESP ? "Enabled" : "Disabled"}`);
});

document.getElementById('tracersCheckbox').addEventListener('change', function() {
    tracersEnabled = this.checked;
    displayWatermark(`Tracers ${enableTracers ? "Enabled" : "Disabled"}`);
});

document.getElementById('rmbCheckbox').addEventListener('change', function() {
    rmbAimbot = this.checked;
    displayWatermark(`Aimbot ${RMB ? "Enabled" : "Disabled"}`);
});


// Event listener for the "Toggle All" checkbox
document.getElementById('toggleAllCheckbox').addEventListener('change', function() {
    const isChecked = this.checked;
    document.getElementById('espCheckbox').checked = isChecked;
    document.getElementById('tracersCheckbox').checked = isChecked;
    document.getElementById('rmbCheckbox').checked = isChecked;
    // Additional checkboxes can be added here if needed

    // Trigger change events manually to ensure associated functionality updates
    document.getElementById('espCheckbox').dispatchEvent(new Event('change'));
    document.getElementById('tracersCheckbox').dispatchEvent(new Event('change'));
    document.getElementById('rmbCheckbox').dispatchEvent(new Event('change'));
    // Additional checkboxes' change events can be triggered here if needed
});

document.getElementById('visualUtilsOnly').addEventListener('change', function() {
    const isChecked = this.checked;
    document.getElementById('espCheckbox').checked = isChecked;
    document.getElementById('tracersCheckbox').checked = isChecked;

    document.getElementById('espCheckbox').dispatchEvent(new Event('change'));
    document.getElementById('tracersCheckbox').dispatchEvent(new Event('change'));

});

document.getElementById('redSlider').addEventListener('input', function() {
    espColor.r = parseInt(this.value);
    document.getElementById('redValue').value = this.value;
    updateESPColor();
});

document.getElementById('greenSlider').addEventListener('input', function() {
    espColor.g = parseInt(this.value);
    document.getElementById('greenValue').value = this.value;
    updateESPColor();
});

document.getElementById('blueSlider').addEventListener('input', function() {
    espColor.b = parseInt(this.value);
    document.getElementById('blueValue').value = this.value;
    updateESPColor();
});

document.getElementById('espRedSlider').addEventListener('input', function() {
    espLineColor.r = parseInt(this.value);
    document.getElementById('espRedValue').value = this.value;
    updateESPLineColor();
});

document.getElementById('espGreenSlider').addEventListener('input', function() {
    espLineColor.g = parseInt(this.value);
    document.getElementById('espGreenValue').value = this.value;
    updateESPLineColor();
});

document.getElementById('espBlueSlider').addEventListener('input', function() {
    espLineColor.b = parseInt(this.value);
    document.getElementById('espBlueValue').value = this.value;
    updateESPLineColor();
});

document.getElementById('redValue').addEventListener('input', function() {
    espColor.r = parseInt(this.value);
    document.getElementById('redSlider').value = this.value;
    updateESPColor();
});

document.getElementById('greenValue').addEventListener('input', function() {
    espColor.g = parseInt(this.value);
    document.getElementById('greenSlider').value = this.value;
    updateESPColor();
});

document.getElementById('blueValue').addEventListener('input', function() {
    espColor.b = parseInt(this.value);
    document.getElementById('blueSlider').value = this.value;
    updateESPColor();
});

document.getElementById('espRedValue').addEventListener('input', function() {
    espLineColor.r = parseInt(this.value);
    document.getElementById('espRedSlider').value = this.value;
    updateESPLineColor();
});

document.getElementById('espGreenValue').addEventListener('input', function() {
    espLineColor.g = parseInt(this.value);
    document.getElementById('espGreenSlider').value = this.value;
    updateESPLineColor();
});

document.getElementById('espBlueValue').addEventListener('input', function() {
    espLineColor.b = parseInt(this.value);
    document.getElementById('espBlueSlider').value = this.value;
    updateESPLineColor();
});

document.getElementById('toggleGuiButton').addEventListener('click', function() {
    guiVisible = !guiVisible;
    document.getElementById('libertyMutualGui').style.display = guiVisible ? 'block' : 'none';

    const watermark = document.getElementById('watermark');
    if (guiVisible) {
        watermark.textContent = "TOGGLED GUI";
        watermark.style.display = 'block'; // Show watermark
    } else {
        watermark.style.display = 'none'; // Hide watermark
    }
});

// Event listeners for the new aimbot settings sliders
document.getElementById('aimbotSensitivity').addEventListener('input', function() {
  const sensitivity = parseInt(this.value);
  updateAimbotSensitivity(sensitivity);
});

document.getElementById('aimbotFOV').addEventListener('input', function() {
  const fov = parseInt(this.value);
  updateAimbotFOV(fov);
});


const toggleGuiButton = document.getElementById('toggleGuiButton');
toggleGuiButton.addEventListener('click', function() {
    guiVisible = !guiVisible;
    document.getElementById('libertyMutualGui').style.display = guiVisible ? 'block' : 'none';
});

document.addEventListener('keydown', function(event) {
    if (event.key === 'h' || event.key === 'H') {
        guiVisible = !guiVisible;
        document.getElementById('libertyMutualGui').style.display = guiVisible ? 'block' : 'none';
        displayWatermark('Toggled Panel');
    }

    if (event.key === 'v' || event.key === 'V') {
        enableESP = !enableESP;
        displayWatermark(`ESP ${enableESP ? "!Enabled!" : "!Disabled!"}`);
        console.log("ESP is now:", enableESP ? "enabled" : "disabled");
        espCheckbox.checked = enableESP;
    }

    if (event.key === 'n' || event.key === 'N') {
        enableTracers = !enableTracers;
        displayWatermark(`ESP Lines ${enableTracers ? "!Enabled!" : "!Disabled!"}`);
        console.log("ESP lines are now:", enableTracers ? "enabled" : "disabled");
        tracersCheckbox.checked = enableTracers;
    }

    if (event.key === 'c' || event.key === 'C') {
        RMB = !RMB;
        displayWatermark(` Aimbot ${RMB ? "Enabled" : "Disabled"}`);
        console.log(" (Aimbot) is now:", RMB ? "enabled" : "disabled");
        rmbCheckbox.checked = RMB;
    }

 function displayWatermark(text) {
    const watermark = document.createElement('div');
    watermark.textContent = text;
    watermark.style.position = 'fixed';
    watermark.style.bottom = '10px';
    watermark.style.left = '10px';
    watermark.style.padding = '5px 10px';
    watermark.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
    watermark.style.color = 'red';
    watermark.style.borderRadius = '3px';
    watermark.style.zIndex = '9999';
    watermark.style.fontFamily = 'Agency FB, italic, sans-serif';
    watermark.style.fontSize = '18px';
    watermark.style.fontWeight = 'bold';
    watermark.style.textTransform = 'uppercase';
    watermark.style.transition = 'transform 1s linear, left 1s ease-in-out';
    watermark.style.border = '2px solid #ff0000'; // Red border, 2px width
    document.body.appendChild(watermark);

    void watermark.offsetWidth;

    setTimeout(function() {
        watermark.style.opacity = '0';
        setTimeout(function() {
            watermark.remove();
        }, 2000);
    }, 2000);
}
});

    function updateESPColor() {
        for (let i = 0; i < ESPArray.length; i++) {
            const box = ESPArray[i][0];
            if (box) {
                box.color.r = espColor.r / 255;
                box.color.g = espColor.g / 255;
                box.color.b = espColor.b / 255;
            }
        }
    }
})();