Canadian100 client

A client with more effeciency

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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();
        }
    });
})();