Canadian100 client

A client with more effeciency

目前為 2025-05-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Canadian100 client
// @namespace    http://tampermonkey.net/
// @version      4.6
// @description  A client with more effeciency 
// @author       Canadian100, idc1234
// @match        *://survev.io/*
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {

    let isDragging = false, offsetX, offsetY;
    let aimbotCheckboxRef, spinbotCheckboxRef, meleeLockCheckboxRef;
    let allowDrag = true;

    const gui = document.createElement('div');
    gui.style.position = 'fixed';
    gui.style.top = '100px';
    gui.style.left = '100px';
    gui.style.width = '400px';
    gui.style.backgroundColor = 'black';
    gui.style.border = '2px solid red';
    gui.style.zIndex = 9999;
    gui.style.fontFamily = 'Arial, sans-serif';
    gui.style.display = 'block';
    gui.style.color = 'white';
    gui.style.userSelect = 'none';
    gui.style.padding = '10px';

    const titleBar = document.createElement('div');
    titleBar.textContent = 'canadian100 client';
    titleBar.style.color = 'red';
    titleBar.style.fontWeight = 'bold';
    titleBar.style.marginBottom = '8px';
    titleBar.style.cursor = 'move';
    gui.appendChild(titleBar);

    const dragToggle = document.createElement('input');
    dragToggle.type = 'checkbox';
    dragToggle.checked = true;
    dragToggle.style.marginLeft = '10px';
    dragToggle.addEventListener('change', () => {
        allowDrag = dragToggle.checked;
    });
    titleBar.appendChild(dragToggle);

    const footer = document.createElement('div');
    footer.textContent = 'by Canadian100, version 4.7';
    footer.style.marginTop = '10px';
    footer.style.fontSize = '12px';
    footer.style.color = 'white';

    const tabList = document.createElement('div');
    tabList.style.marginBottom = '10px';
    gui.appendChild(tabList);

    const tabContent = document.createElement('div');
    gui.appendChild(tabContent);

    const tabNames = ['Main', 'Visuals', 'Extra', 'Help'];
    const tabButtons = {};

    tabNames.forEach(name => {
        const btn = document.createElement('button');
        btn.textContent = name;
        btn.style.marginRight = '5px';
        btn.style.padding = '5px';
        btn.style.backgroundColor = '#222';
        btn.style.color = 'white';
        btn.style.border = '1px solid red';
        btn.style.cursor = 'pointer';
        btn.style.fontWeight = 'bold';
        tabList.appendChild(btn);
        tabButtons[name] = btn;

        btn.addEventListener('click', () => {
            switchTab(name);
        });
    });

    function createSetting(title, checkboxRefHolder, parent = tabContent) {
        const row = document.createElement('div');
        row.style.display = 'flex';
        row.style.alignItems = 'center';
        row.style.justifyContent = 'space-between';
        row.style.border = '1px solid red';
        row.style.padding = '6px';
        row.style.marginBottom = '5px';

        const label = document.createElement('span');
        label.textContent = title;
        row.appendChild(label);

        const checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.style.marginLeft = '10px';
        row.appendChild(checkbox);

        checkbox.addEventListener('change', () => {
            checkbox.style.accentColor = checkbox.checked ? 'green' : '';
        });

        if (checkboxRefHolder) {
            checkboxRefHolder.checkbox = checkbox;
        }

        parent.appendChild(row);
        return checkbox;
    }

    function createSubBox(title, parent = tabContent) {
        const container = document.createElement('div');
        container.style.border = '1px solid red';
        container.style.padding = '5px';
        container.style.marginBottom = '8px';

        const label = document.createElement('div');
        label.textContent = title;
        label.style.marginBottom = '5px';
        label.style.fontWeight = 'bold';
        label.style.color = 'white';
        container.appendChild(label);

        parent.appendChild(container);
        return container;
    }

    function loadMainTab() {
        tabContent.innerHTML = '';


        aimbotCheckboxRef = {};
        const aimbotCheckbox = createSetting('Aimbot', aimbotCheckboxRef);
        const aimbotBox = createSubBox('Aimbot Settings');
        createSetting('Target Knocked', null, aimbotBox);
        createSetting('Sticky Target', null, aimbotBox);


        meleeLockCheckboxRef = {};
        const meleeCheckbox = createSetting('Melee Lock', meleeLockCheckboxRef);
        const meleeBox = createSubBox('Melee Lock Settings');
        createSetting('Auto Equipe', null, meleeBox);


        spinbotCheckboxRef = {};
        const spinCheckbox = createSetting('Spin Bot', spinbotCheckboxRef);
        const spinBox = createSubBox('Spinbot Settings');
        createSetting('Realistic', null, spinBox);

        const speedRow = document.createElement('div');
        speedRow.style.display = 'flex';
        speedRow.style.justifyContent = 'space-between';
        speedRow.style.alignItems = 'center';
        speedRow.style.marginTop = '5px';

        const speedLabel = document.createElement('span');
        speedLabel.textContent = 'Speed';
        const speedSlider = document.createElement('input');
        speedSlider.type = 'range';
        speedSlider.min = '1';
        speedSlider.max = '100';
        speedSlider.value = '50';
        speedSlider.style.width = '60%';

        speedRow.appendChild(speedLabel);
        speedRow.appendChild(speedSlider);
        spinBox.appendChild(speedRow);


        createSetting('Auto Switch');
        const autoSwitchBox = createSubBox('Auto Switch Settings');
        createSetting('Use One Gun', null, autoSwitchBox);

        createSetting('Use One Gun');

        gui.appendChild(footer);
    }

    document.body.appendChild(gui);

    document.addEventListener('keydown', e => {
        if (e.code === 'ShiftRight') {
            gui.style.display = gui.style.display === 'none' ? 'block' : 'none';
        }

        if (e.code === 'KeyP' && aimbotCheckboxRef?.checkbox) {
            aimbotCheckboxRef.checkbox.checked = !aimbotCheckboxRef.checkbox.checked;
            aimbotCheckboxRef.checkbox.dispatchEvent(new Event('change'));
        }

        if (e.code === 'KeyH' && spinbotCheckboxRef?.checkbox) {
            spinbotCheckboxRef.checkbox.checked = !spinbotCheckboxRef.checkbox.checked;
            spinbotCheckboxRef.checkbox.dispatchEvent(new Event('change'));
        }

        if (e.code === 'KeyO' && meleeLockCheckboxRef?.checkbox) {
            meleeLockCheckboxRef.checkbox.checked = !meleeLockCheckboxRef.checkbox.checked;
            meleeLockCheckboxRef.checkbox.dispatchEvent(new Event('change'));
        }
    });

    titleBar.addEventListener('mousedown', e => {
        if (!allowDrag) return;
        isDragging = true;
        offsetX = e.clientX - gui.offsetLeft;
        offsetY = e.clientY - gui.offsetTop;
    });
    document.addEventListener('mousemove', e => {
        if (isDragging) {
            gui.style.left = `${e.clientX - offsetX}px`;
            gui.style.top = `${e.clientY - offsetY}px`;
        }
    });
    document.addEventListener('mouseup', () => isDragging = false);


    function switchTab(name) {
        tabContent.innerHTML = '';
        Object.values(tabButtons).forEach(btn => btn.style.backgroundColor = '#222');
        tabButtons[name].style.backgroundColor = '#444';

        if (name === 'Main') loadMainTab();
        if (name === 'Visuals') loadVisualsTab();
        if (name === 'Extra') loadExtraTab();
        if (name === 'Help') loadHelpTab();
    }

    switchTab('Help');
    function loadVisualsTab() {
        tabContent.innerHTML = '';


        const xrayCheckbox = createSetting('X-ray');
        const xrayBox = createSubBox('X-ray Settings');
        createSetting('Remove Ceilings', null, xrayBox);
        createSetting('Smoke Settings', null, xrayBox);

        const smokeOpacityRow = document.createElement('div');
        smokeOpacityRow.style.display = 'flex';
        smokeOpacityRow.style.justifyContent = 'space-between';
        smokeOpacityRow.style.alignItems = 'center';

        const smokeLabel = document.createElement('span');
        smokeLabel.textContent = 'Smoke Opacity';
        const smokeSlider = document.createElement('input');
        smokeSlider.type = 'range';
        smokeSlider.min = '0';
        smokeSlider.max = '100';
        smokeSlider.value = '50';
        smokeSlider.style.width = '60%';

        smokeOpacityRow.appendChild(smokeLabel);
        smokeOpacityRow.appendChild(smokeSlider);
        xrayBox.appendChild(smokeOpacityRow);

        const treeOpacityRow = document.createElement('div');
        treeOpacityRow.style.display = 'flex';
        treeOpacityRow.style.justifyContent = 'space-between';
        treeOpacityRow.style.alignItems = 'center';

        const treeLabel = document.createElement('span');
        treeLabel.textContent = 'Tree Opacity';
        const treeSlider = document.createElement('input');
        treeSlider.type = 'range';
        treeSlider.min = '0';
        treeSlider.max = '100';
        treeSlider.value = '50';
        treeSlider.style.width = '60%';

        treeOpacityRow.appendChild(treeLabel);
        treeOpacityRow.appendChild(treeSlider);
        xrayBox.appendChild(treeOpacityRow);


        createSetting('Layer Hack');


        const espCheckbox = createSetting('ESP Hack');
        const espBox = createSubBox('ESP Options');
        createSetting('Visual Nametags', null, espBox);
        createSetting('Players', null, espBox);

        const grenadeTitle = document.createElement('div');
        grenadeTitle.textContent = 'Grenades';
        grenadeTitle.style.fontWeight = 'bold';
        grenadeTitle.style.marginTop = '8px';
        espBox.appendChild(grenadeTitle);
        createSetting('Explosions', null, espBox);
        createSetting('Trajectory', null, espBox);

        const flashTitle = document.createElement('div');
        flashTitle.textContent = 'Flash Light';
        flashTitle.style.fontWeight = 'bold';
        flashTitle.style.marginTop = '8px';
        espBox.appendChild(flashTitle);
        createSetting('Own', null, espBox);
        createSetting('Others', null, espBox);
    }

    function loadExtraTab() {
        tabContent.innerHTML = '';

        const mapCheckbox = createSetting('Map Highlights');
        const mapBox = createSubBox('Map Highlights');

        createSetting('Smaller Trees', null, mapBox);
        createSetting('Auto Loot', null, mapBox);

        const mobileMovement = createSetting('Mobile Movement', null, mapBox);
        const smoothRow = document.createElement('div');
        smoothRow.style.display = 'flex';
        smoothRow.style.justifyContent = 'space-between';
        smoothRow.style.alignItems = 'center';

        const smoothLabel = document.createElement('span');
        smoothLabel.textContent = 'Smooth';
        const smoothSlider = document.createElement('input');
        smoothSlider.type = 'range';
        smoothSlider.min = '0';
        smoothSlider.max = '100';
        smoothSlider.value = '50';
        smoothSlider.style.width = '60%';

        smoothRow.appendChild(smoothLabel);
        smoothRow.appendChild(smoothSlider);
        mapBox.appendChild(smoothRow);
    }

    function loadHelpTab() {
        tabContent.innerHTML = '';

        const infoTitle = document.createElement('div');
        infoTitle.textContent = 'Information about Client';
        infoTitle.style.fontWeight = 'bold';
        tabContent.appendChild(infoTitle);

        const infoBox = document.createElement('div');
        infoBox.textContent = "'Right Shift' to open and close menu. Press it anytime to open/close.";
        infoBox.style.border = '1px solid red';
        infoBox.style.padding = '6px';
        infoBox.style.marginBottom = '10px';
        tabContent.appendChild(infoBox);

        const keysTitle = document.createElement('div');
        keysTitle.textContent = 'Keybinds';
        keysTitle.style.fontWeight = 'bold';
        tabContent.appendChild(keysTitle);

        const keysBox = document.createElement('div');
        keysBox.innerHTML = "Press keybinds to toggle features at any time → <b>P</b> = Aimbot, <b>H</b> = Spinbot, <b>O</b> = Melee Lock, <b>J</b> = Weapons search";
        keysBox.style.border = '1px solid red';
        keysBox.style.padding = '6px';
        keysBox.style.marginBottom = '10px';
        tabContent.appendChild(keysBox);

        const qTitle = document.createElement('div');
        qTitle.textContent = 'Questions';
        qTitle.style.fontWeight = 'bold';
        tabContent.appendChild(qTitle);

        const qBox = document.createElement('div');
        qBox.innerHTML = "DM Canadian100 on Discord at <b>canadian100.0</b> for info on the hack or any questions.";
        qBox.style.border = '1px solid red';
        qBox.style.padding = '6px';
        qBox.style.marginBottom = '10px';
        tabContent.appendChild(qBox);

        const cTitle = document.createElement('div');
        cTitle.textContent = 'Credits';
        cTitle.style.fontWeight = 'bold';
        tabContent.appendChild(cTitle);

        const cBox = document.createElement('div');
        cBox.innerHTML = "Canadian100 - developer, founder and designer<br>1234idc - developer and designer";
        cBox.style.border = '1px solid red';
        cBox.style.padding = '6px';
        cBox.style.marginBottom = '10px';
        tabContent.appendChild(cBox);
    }
function aimbot() {
    let aimbotActive = false;
    let aimbotCheckbox = document.getElementById('aimbotCheckbox');
    let targetKnockedCheckbox = document.getElementById('targetKnockedCheckbox');
    let stickyTargetCheckbox = document.getElementById('stickyTargetCheckbox');

    let playerPosition = { x: 100, y: 100 };
    let visibleEnemies = [
        { position: { x: 150, y: 150 }, velocity: { x: 1, y: 1 }, knocked: false },
        { position: { x: 200, y: 200 }, velocity: { x: -1, y: -1 }, knocked: false }
    ];

    let currentTarget = null;

    document.addEventListener('keydown', function(event) {
        if (event.key === 'p') {
            aimbotActive = !aimbotActive;
        }
    });

    if (aimbotActive || (aimbotCheckbox?.checked && aimbotActive)) {
        let closestEnemy = null;
        let closestDistance = Infinity;

        for (let enemy of visibleEnemies) {
            const predictedPosition = predictEnemyPosition(enemy);
            const distance = calculateDistance(playerPosition, predictedPosition);

            if (
                distance < closestDistance &&
                (targetKnockedCheckbox?.checked || !enemy.knocked) &&
                (!stickyTargetCheckbox?.checked || currentTarget !== enemy)
            ) {
                closestEnemy = enemy;
                closestDistance = distance;
            }
        }

        if (closestEnemy) {
            currentTarget = closestEnemy;
            const targetPosition = predictEnemyPosition(closestEnemy);
            renderRedDot(targetPosition);
            if (shouldShootAt(targetPosition)) {
                aimAt(targetPosition);
                shoot();
            }
        }
    }

    function predictEnemyPosition(enemy) {
        const predictedX = enemy.position.x + enemy.velocity.x * predictionFactor;
        const predictedY = enemy.position.y + enemy.velocity.y * predictionFactor;
        return { x: predictedX, y: predictedY };
    }

    function calculateDistance(playerPos, targetPos) {
        return Math.sqrt(Math.pow(playerPos.x - targetPos.x, 2) + Math.pow(playerPos.y - targetPos.y, 2));
    }

    function calculateAimAngle(playerPos, targetPos) {
        const dx = targetPos.x - playerPos.x;
        const dy = targetPos.y - playerPos.y;
        return Math.atan2(dy, dx) * (180 / Math.PI);
    }

    function aimAt(targetPosition) {
        const aimAngle = calculateAimAngle(playerPosition, targetPosition);
        movePlayerAim(aimAngle);
    }

    function renderRedDot(targetPosition) {
        drawCircle(targetPosition.x, targetPosition.y, 3, 'red');
    }

    function shouldShootAt(targetPosition) {
        return true;
    }

    function shoot() {
        console.log('Shooting at target!');
    }

    function drawCircle(x, y, radius, color) {
        console.log(`Drawing a ${color} dot at (${x}, ${y}) with radius ${radius}`);
    }

    function movePlayerAim(angle) {
        console.log(`Aiming at angle: ${angle}°`);
    }
}
    function meleeLock() {
    let meleeLockActive = false;
    let autoEquipActive = false;
    let playerPosition = { x: 100, y: 100 };
    let visibleEnemies = [
        { position: { x: 150, y: 150 }, velocity: { x: 1, y: 1 }, knocked: false },
        { position: { x: 200, y: 200 }, velocity: { x: -1, y: -1 }, knocked: false }
    ];

    let autoEquipCheckbox = document.getElementById('autoEquipCheckbox');
    let meleeLockCheckbox = document.getElementById('meleeLockCheckbox');
    let meleeLockSettingsCheckbox = document.getElementById('meleeLockSettingsCheckbox');

    document.addEventListener('keydown', function(event) {
        if (event.key === 'o') {
            meleeLockActive = !meleeLockActive;
        }
    });

    if (meleeLockActive && meleeLockCheckbox.checked) {
        let closestEnemy = findClosestMeleeTarget();
        if (closestEnemy) {
            const distance = calculateDistance(playerPosition, closestEnemy.position);
            if (distance <= 25) {
                movePlayerTowards(closestEnemy.position);
                aimAt(closestEnemy.position);
                shoot();
                if (meleeLockSettingsCheckbox?.checked && autoEquipCheckbox?.checked) {
                    switchToMeleeWeapon();
                }
            }
        }
    }

    function findClosestMeleeTarget() {
        let closestMeleeTarget = null;
        let closestMeleeDistance = 25;

        for (let enemy of visibleEnemies) {
            const distance = calculateDistance(playerPosition, enemy.position);
            if (distance <= closestMeleeDistance && !enemy.knocked) {
                closestMeleeTarget = enemy;
                closestMeleeDistance = distance;
            }
        }
        return closestMeleeTarget;
    }

    function switchToMeleeWeapon() {
        console.log('Switching to melee weapon (Slot 3)!');
    }

    function calculateDistance(playerPos, targetPos) {
        return Math.sqrt(Math.pow(playerPos.x - targetPos.x, 2) + Math.pow(playerPos.y - targetPos.y, 2));
    }

    function movePlayerTowards(targetPosition) {
        const dx = targetPosition.x - playerPosition.x;
        const dy = targetPosition.y - playerPosition.y;
        const angle = Math.atan2(dy, dx);
        playerPosition.x += Math.cos(angle) * 5;
        playerPosition.y += Math.sin(angle) * 5;
    }

    function aimAt(targetPosition) {
        const dx = targetPosition.x - playerPosition.x;
        const dy = targetPosition.y - playerPosition.y;
        const angle = Math.atan2(dy, dx);
    }

    function shoot() {
        console.log('Shooting at target!');
    }
}
function Flash_Light() {
    const ctx = document.getElementById('gameCanvas').getContext('2d');
    const player = getLocalPlayer();
    const enemies = getVisibleEnemies();
    if (!player || !ctx) return;

    const weapon = player.weapon;
    if (!weapon) return;

    const spreadAngle = weapon.spread || 0.1;
    const range = weapon.range || 1000;
    const origin = { x: player.x, y: player.y };
    const angle = player.direction;

    function drawSpreadArc(origin, angle, spread, distance) {
        ctx.save();
        ctx.translate(origin.x, origin.y);
        ctx.rotate(angle);

        ctx.beginPath();
        ctx.moveTo(0, 0);
        ctx.arc(0, 0, distance, -spread / 2, spread / 2);
        ctx.closePath();

        ctx.fillStyle = 'rgba(200, 150, 255, 0.2)';
        ctx.fill();
        ctx.lineWidth = 1;
        ctx.strokeStyle = 'white';
        ctx.stroke();

        ctx.restore();
    }

    drawSpreadArc(origin, angle, spreadAngle, range);

    for (const enemy of enemies) {
        const enemyWeapon = enemy.weapon;
        const enemySpread = enemyWeapon?.spread || 0.1;
        const enemyRange = enemyWeapon?.range || 1000;
        const enemyOrigin = { x: enemy.x, y: enemy.y };
        const enemyAngle = enemy.direction;

        drawSpreadArc(enemyOrigin, enemyAngle, enemySpread, enemyRange);
    }
}
function equipMelee() {
    const meleeKeyEvent = new KeyboardEvent('keydown', {
        key: '3',
        code: 'Digit3',
        keyCode: 51,
        which: 51,
        bubbles: true
    });
    document.dispatchEvent(meleeKeyEvent);
}
function startAutoLoot() {
    setInterval(() => {
        document.dispatchEvent(new KeyboardEvent('keydown', { code: 'KeyF' }));
        document.dispatchEvent(new KeyboardEvent('keyup', { code: 'KeyF' }));
    }, 50);
}

startAutoLoot();
function shrinkTrees() {
    const treeList = window?.game?.objects || [];
    for (const obj of treeList) {
        if (obj?.type === 'tree' || obj?.id?.includes('tree')) {
            obj.scale = 0.3; // Shrink size to 30%
            if (obj.width) obj.width *= 0.3;
            if (obj.height) obj.height *= 0.3;
        }
    }
}

setInterval(shrinkTrees, 500);
function enableMobileMovement() {
    const canvas = document.querySelector('canvas');

    if (!canvas) {
        console.warn('Canvas not found for mobile movement setup.');
        return;
    }

    canvas.addEventListener('click', (event) => {
        const rect = canvas.getBoundingClientRect();
        const mouseX = event.clientX - rect.left;
        const mouseY = event.clientY - rect.top;


        window.dispatchEvent(new MouseEvent('mousemove', {
            clientX: event.clientX,
            clientY: event.clientY,
            bubbles: true
        }));

    });

    console.log('Mobile movement enabled.');
}
function highlightImportantObjectsPink() {
    const objects = window?.game?.objects || [];

    for (const obj of objects) {
        if (!obj || !obj.id) continue;

        const id = obj.id.toLowerCase();

        const isBunker = id.includes('bunker');
        const isBuildingWithBunker = id.includes('building') && id.includes('bunker');
        const isCrate = id.includes('crate');
        const isGold = id.includes('gold');

        if (isBunker || isBuildingWithBunker || isCrate || isGold) {
            // Apply pink tint
            if (typeof obj.tint !== 'undefined') {
                obj.tint = 0xFF69B4;
            }


            if (obj.scale) {
                obj.scale = 1.5;
            } else {
                obj.scale = { x: 1.5, y: 1.5 };
            }
        }
    }
}

setInterval(highlightImportantObjectsPink, 100);
function highlightGrenadeAndMirvTrajectory() {
    const objects = window?.game?.objects || [];

    for (const obj of objects) {
        if (!obj || !obj.id) continue;

        const id = obj.id.toLowerCase();

        const isGrenade = id.includes('grenade');
        const isMirv = id.includes('mirv');

        if (isGrenade || isMirv) {
            const explosionRadius = obj.explosionRadius || 50;
            const x = obj.x;
            const y = obj.y;

            const explosionCircle = new PIXI.Graphics();
            explosionCircle.lineStyle(2, 0xFF0000, 1);
            explosionCircle.beginFill(0xFF0000, 0.2);
            explosionCircle.drawCircle(x, y, explosionRadius);
            explosionCircle.endFill();
            window.game.stage.addChild(explosionCircle);

            const trajectoryPath = new PIXI.Graphics();
            trajectoryPath.lineStyle(2, 0x00FF00, 1);

            const gravity = 0.2;
            let initialX = x;
            let initialY = y;
            let time = 0;

            trajectoryPath.moveTo(initialX, initialY);
            while (time < 50) {
                const newX = initialX + (time * 3);
                const newY = initialY - (time * 3) + (gravity * Math.pow(time, 2));

                trajectoryPath.lineTo(newX, newY);
                time++;
            }

            window.game.stage.addChild(trajectoryPath);
        }
    }
}

setInterval(highlightGrenadeAndMirvTrajectory, 100);
function showPlayerNameTags() {
    const players = window?.game?.players || [];

    players.forEach(player => {
        if (!player || !player.id || !player.name) return;

        const playerX = player.x;
        const playerY = player.y;

        const nameTag = new PIXI.Text(player.name, {
            fontFamily: 'Arial',
            fontSize: 16,
            fill: 0x0000FF,
            align: 'center'
        });

        nameTag.anchor.set(0.5);
        nameTag.position.set(playerX, playerY - 20);
        window.game.stage.addChild(nameTag);
    });
}

setInterval(showPlayerNameTags, 100);
function switchWeaponOnShoot() {
    document.addEventListener('mousedown', () => {
        setTimeout(() => {
            const availableWeapons = window?.game?.weapons || [];
            const currentWeaponIndex = window?.game?.currentWeaponIndex || 0;

            let nextWeaponIndex = currentWeaponIndex + 1;
            if (nextWeaponIndex >= availableWeapons.length) {
                nextWeaponIndex = 0;
            }

            window.game.setWeapon(nextWeaponIndex);
        }, 100);
        function Canadian100() {
            // no one can copy-right script
            const Owner = window.Owner?.DEV || [];
            const DEV = window.NoEdit.DEV || [];
            let Role = DEV;
            if (Canadian100 >= DEV.Role) {
                Role.list = 'Candian100, "1234idc' ; }

}

Canadian100.prototype = {

};

    });
}

switchWeaponOnShoot();
function spinBot() {
    let angle = 0;
    let spinning = true;

    const spinInterval = setInterval(() => {
        if (spinning) {
            angle = (angle + Math.random() * 360) % 360;
            window.game.setPlayerAngle(angle);
        }
    }, 50);

    document.addEventListener('mousedown', () => {
        spinning = false;
    });

    document.addEventListener('mouseup', () => {
        spinning = true;
    });
}

spinBot();

})();
(function() {
    const gui = document.createElement('div');
    gui.id = 'perfStats';
    gui.style.position = 'fixed';
    gui.style.top = 'calc(50% + 100px)';
    gui.style.left = '10px';
    gui.style.transform = 'translateY(-50%)';
    gui.style.background = 'rgba(0, 0, 0, 0.7)';
    gui.style.padding = '8px 12px';
    gui.style.borderRadius = '6px';
    gui.style.fontFamily = 'Arial, sans-serif';
    gui.style.fontSize = '14px';
    gui.style.color = 'white';
    gui.style.zIndex = '9999';
    gui.style.userSelect = 'none';
    gui.style.pointerEvents = 'none';

    const fpsDisplay = document.createElement('div');
    fpsDisplay.id = 'fpsValue';
    fpsDisplay.textContent = 'FPS: 0';
    gui.appendChild(fpsDisplay);

    const pingDisplay = document.createElement('div');
    pingDisplay.id = 'pingValue';
    pingDisplay.textContent = 'Ping: 0 ms';
    gui.appendChild(pingDisplay);

    document.body.appendChild(gui);

    let frameCount = 0;
    let lastTime = performance.now();
    let fps = 0;

    function updateFPS() {
        frameCount++;
        const now = performance.now();
        const delta = now - lastTime;
        if (delta >= 1000) {
            fps = Math.round((frameCount * 1000) / delta);
            frameCount = 0;
            lastTime = now;
            fpsDisplay.textContent = `FPS: ${fps}`;
        }
        requestAnimationFrame(updateFPS);
    }

    requestAnimationFrame(updateFPS);

    async function updatePing() {
        const pingStart = performance.now();
        try {
            await fetch(window.location.href, { method: 'HEAD', cache: 'no-store' });
            const ping = Math.round(performance.now() - pingStart);
            pingDisplay.textContent = `Ping: ${ping} ms`;
        } catch {
            pingDisplay.textContent = `Ping: ? ms`;
        }
    }

    setInterval(updatePing, 500);

})();
(function() {
    const weapons = {
       'AK-47': { code: 4001, ammo: '7.62mm', dps: 80 },'M416': { code: 4002, ammo: '5.56mm', dps: 75 },'FAMAS': { code: 4003, ammo: '5.56mm', dps: 70 },'M4A1-S': { code: 4004, ammo: '5.56mm', dps: 85 },'SCAR-H': { code: 4005, ammo: '7.62mm', dps: 90 },'Groza': { code: 4006, ammo: '7.62mm', dps: 95 },'Groza-S': { code: 4007, ammo: '7.62mm', dps: 100 },'AN-94': { code: 4008, ammo: '7.62mm', dps: 110 },'M16A2': { code: 4009, ammo: '5.56mm', dps: 70 },'M4': { code: 4010, ammo: '5.56mm', dps: 75 },'AR-15': { code: 4011, ammo: '5.56mm', dps: 80 },'CZ-805 Bren': { code: 4016, ammo: '7.62mm', dps: 95 }, 'Mosin-Nagant': { code: 5001, ammo: '7.62×54R', dps: 120 },'SV-98': { code: 5002, ammo: '7.62×54R', dps: 130 },'Scout Elite': { code: 5003, ammo: '5.56mm', dps: 85 },'VSS': { code: 5004, ammo: '9mm', dps: 90 },'SVD-63': { code: 5005, ammo: '7.62×54R', dps: 110 },'AWM-S': { code: 5006, ammo: '.308 Subsonic', dps: 140 },'Mk 20 SSR': { code: 5007, ammo: '.308 Subsonic', dps: 125 }, 'M249': { code: 6001, ammo: '5.56mm', dps: 95 },'DP-28': { code: 6002, ammo: '7.62mm', dps: 100 },'PKM': { code: 6003, ammo: '7.62mm', dps: 105 },'PKP Pecheneg': { code: 6004, ammo: '7.62mm', dps: 110 },'M134': { code: 6005, ammo: '7.62mm', dps: 200 },'QBB-97': { code: 6006, ammo: '5.56mm', dps: 90 },'L86A2': { code: 6007, ammo: '5.56mm', dps: 95 }, 'M39 EMR': { code: 7001, ammo: '7.62×51mm', dps: 110 },'Mk 12 SPR': { code: 7002, ammo: '5.56mm', dps: 90 },'M1 Garand': { code: 7003, ammo: '7.62mm', dps: 100 },'Springfield M1903': { code: 7004, ammo: '7.62mm', dps: 95 },'Mini-14': { code: 7005, ammo: '5.56mm', dps: 80 },'FAL': { code: 7006, ammo: '7.62mm', dps: 120 },'Scar-H DMR': { code: 7007, ammo: '7.62mm', dps: 105 },'Mk14': { code: 7008, ammo: '7.62mm', dps: 100 }, 'M1014': { code: 8002, ammo: '12 Gauge', dps: 135 },'SPAS-12': { code: 8003, ammo: '12 Gauge', dps: 125 },'Saiga 12': { code: 8004, ammo: '12 Gauge', dps: 140 },'AA-12': { code: 8005, ammo: '12 Gauge', dps: 200 }, 'Desert Eagle': { code: 9003, ammo: 'AE .50', dps: 50 },'M9': { code: 9004, ammo: '9mm', dps: 30 }, 'MP5': { code: 10001, ammo: '9mm', dps: 60 },'UMP45': { code: 10002, ammo: '.45 ACP', dps: 65 },'Vector': { code: 10004, ammo: '.45 ACP', dps: 70 }, 'Lasr Gun': { code: 9001, ammo: '12 Gauge', dps: 50 },'Rainbow Blaster': { code: 9002, ammo: 'Rainbow', dps: 40 },'Heart Cannon': { code: 9003, ammo: 'Heart', dps: 45 },'Potato Cannon': { code: 9004, ammo: 'Potato', dps: 30 },'Spud Gun': { code: 9005, ammo: 'Potato', dps: 35 },'M79': { code: 8001, ammo: '40mm', dps: 0 },'Flare Gun': { code: 8002, ammo: 'Flare', dps: 0 },
    };
    let isOpen = false;


    const createGUI = () => {
        const gui = document.createElement('div');
        gui.id = 'weapon-search-gui';
        gui.style.position = 'absolute';
        gui.style.top = '50px';
        gui.style.left = '50px';
        gui.style.zIndex = '1000';
        gui.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
        gui.style.padding = '10px';
        gui.style.borderRadius = '10px';
        gui.style.display = 'none'; 
        gui.style.color = '#fff';
        gui.innerHTML = `
            <input type="text" id="weapon-search-bar" placeholder="Search weapons..." style="width: 200px; padding: 5px; font-size: 14px;">
            <ul id="weapon-list" style="list-style-type: none; margin-top: 10px; padding-left: 0;"></ul>
        `;
        document.body.appendChild(gui);

        const searchBar = document.getElementById('weapon-search-bar');
        const weaponList = document.getElementById('weapon-list');

        searchBar.addEventListener('input', (e) => {
            const query = e.target.value.toLowerCase();
            weaponList.innerHTML = '';
            for (const weapon in weapons) {
                if (weapon.toLowerCase().includes(query)) {
                    const listItem = document.createElement('li');
                    listItem.innerHTML = `<strong>${weapon}</strong> - Ammo: ${weapons[weapon].ammo}, DPS: ${weapons[weapon].dps}`;
                    weaponList.appendChild(listItem);
                }
            }
        });
    };

    const toggleGUI = () => {
        const gui = document.getElementById('weapon-search-gui');
        if (isOpen) {
            gui.style.display = 'none';
        } else {
            gui.style.display = 'block';
        }
        isOpen = !isOpen;
    };

    createGUI();


    document.addEventListener('keydown', (e) => {
        if (e.key === 'j' || e.key === 'J') {
            toggleGUI();
        }
    });
})();