Friendly cheats by W cheats

Make ur game easier (veck.io)

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Friendly cheats by W cheats
// @namespace    W cheats
// @version      1.5
// @description  Make ur game easier (veck.io)
// @author       W cheats Hub
// @match        https://Veck.io/*
// @grant        none
// @license      Friends
// ==/UserScript==

(function () {
    'use strict';

    // --- Variables ---
    let autoSprint = false;
    let sprintInterval = null;
    const sprintKey = 'Shift';
    const sprintCode = 'ShiftLeft';
    const sprintKeyCode = 16;

    let autoJump = false;
    let jumpInterval = null;
    const jumpKey = ' ';
    const jumpCode = 'Space';
    const jumpKeyCode = 32;

    let autoReload = false;
    let reloadInterval = null;
    const reloadKey = 'r';
    const reloadCode = 'KeyR';
    const reloadKeyCode = 82;

    const autoReloadKey = 'u';
    const autoReloadCode = 'KeyU';
    const autoReloadKeyCode = 85;

    // Anti Lag variables
    let antiLag = false;

    // --- Create Menu ---
    const menu = document.createElement('div');
    menu.id = 'xdcheats-menu';
    menu.style.position = 'fixed';
    menu.style.top = '12px';
    menu.style.left = '12px';
    menu.style.background = 'rgba(0, 0, 0, 0.7)';
    menu.style.color = '#0f0';
    menu.style.padding = '10px';
    menu.style.fontFamily = 'monospace';
    menu.style.fontSize = '14px';
    menu.style.border = '2px solid #0f0';
    menu.style.borderRadius = '8px';
    menu.style.zIndex = 99999;
    menu.style.cursor = 'default';
    menu.innerHTML = `
        <div id="W cheats-drag" style="font-weight:bold; cursor:move; user-select:none;">W cheats</div>
        <div>This mod is not against TOS</div>
        <div>This mod will make you feel comfortable for your little finger</div>
        <hr style="border-color:#0f0; margin: 6px 0;">
        <div><b>T</b> - Toggle Auto Sprint</div>
        <div><b>Y</b> - Toggle Auto Jump (1 ms spam)</div>
        <div><b>U</b> - Toggle Auto Reload</div>
        <div><b>R</b> - Manual Reload (single press)</div>
        <div><b>L</b> - Toggle Anti Lag</div>
        <div><b>-</b> - Show/Hide This Menu</div>
        <div id="sprint-status" style="margin-top:8px;">Auto Sprint: OFF</div>
        <div id="jump-status" style="margin-top:4px;">Auto Jump: OFF</div>
        <div id="reload-status" style="margin-top:4px;">Auto Reload: OFF</div>
        <div id="antilag-status" style="margin-top:4px;">Anti Lag: OFF</div>
    `;
    document.body.appendChild(menu);

    // --- Drag Logic ---
    const dragHandle = document.getElementById('W cheats-drag');
    let isDragging = false;
    let offsetX = 0;
    let offsetY = 0;

    dragHandle.addEventListener('mousedown', (e) => {
        isDragging = true;
        offsetX = e.clientX - menu.getBoundingClientRect().left;
        offsetY = e.clientY - menu.getBoundingClientRect().top;
        document.body.style.userSelect = 'none';
    });

    window.addEventListener('mousemove', (e) => {
        if (isDragging) {
            menu.style.left = (e.clientX - offsetX) + 'px';
            menu.style.top = (e.clientY - offsetY) + 'px';
        }
    });

    window.addEventListener('mouseup', () => {
        isDragging = false;
        document.body.style.userSelect = '';
    });

    // --- Helper to dispatch keyboard events ---
    function dispatchKeyEvent(type, key, code, keyCode) {
        const target = document.querySelector('canvas') || window;
        const event = new KeyboardEvent(type, {
            key,
            code,
            keyCode,
            which: keyCode,
            bubbles: true,
            cancelable: true
        });
        try {
            Object.defineProperty(event, 'keyCode', { get: () => keyCode });
            Object.defineProperty(event, 'which', { get: () => keyCode });
        } catch (e) {}
        target.dispatchEvent(event);
    }

    // --- Auto Sprint ---
    function updateSprintStatus() {
        const status = document.getElementById('sprint-status');
        if (status) status.textContent = `Auto Sprint: ${autoSprint ? 'ON' : 'OFF'}`;
    }
    function startAutoSprint() {
        if (autoSprint) return;
        autoSprint = true;
        dispatchKeyEvent('keydown', sprintKey, sprintCode, sprintKeyCode);
        sprintInterval = setInterval(() => {
            dispatchKeyEvent('keydown', sprintKey, sprintCode, sprintKeyCode);
        }, 150);
        updateSprintStatus();
    }
    function stopAutoSprint() {
        if (!autoSprint) return;
        autoSprint = false;
        clearInterval(sprintInterval);
        sprintInterval = null;
        dispatchKeyEvent('keyup', sprintKey, sprintCode, sprintKeyCode);
        updateSprintStatus();
    }

    // --- Auto Jump ---
    function updateJumpStatus() {
        const status = document.getElementById('jump-status');
        if (status) status.textContent = `Auto Jump: ${autoJump ? 'ON' : 'OFF'}`;
    }
    function startAutoJump() {
        if (autoJump) return;
        autoJump = true;
        dispatchKeyEvent('keydown', jumpKey, jumpCode, jumpKeyCode);
        jumpInterval = setInterval(() => {
            dispatchKeyEvent('keydown', jumpKey, jumpCode, jumpKeyCode);
            dispatchKeyEvent('keyup', jumpKey, jumpCode, jumpKeyCode);
        }, 1);
        updateJumpStatus();
    }
    function stopAutoJump() {
        if (!autoJump) return;
        autoJump = false;
        clearInterval(jumpInterval);
        jumpInterval = null;
        dispatchKeyEvent('keyup', jumpKey, jumpCode, jumpKeyCode);
        updateJumpStatus();
    }

    // --- Auto Reload ---
    function updateReloadStatus() {
        const status = document.getElementById('reload-status');
        if (status) status.textContent = `Auto Reload: ${autoReload ? 'ON' : 'OFF'}`;
    }
    function startAutoReload() {
        if (autoReload) return;
        autoReload = true;
        reloadInterval = setInterval(() => {
            dispatchKeyEvent('keydown', reloadKey, reloadCode, reloadKeyCode);
            dispatchKeyEvent('keyup', reloadKey, reloadCode, reloadKeyCode);
        }, 500);
        updateReloadStatus();
    }
    function stopAutoReload() {
        if (!autoReload) return;
        autoReload = false;
        clearInterval(reloadInterval);
        reloadInterval = null;
        dispatchKeyEvent('keyup', reloadKey, reloadCode, reloadKeyCode);
        updateReloadStatus();
    }
    // --- Manual Reload ---
    function manualReload() {
        dispatchKeyEvent('keydown', reloadKey, reloadCode, reloadKeyCode);
        dispatchKeyEvent('keyup', reloadKey, reloadCode, reloadKeyCode);
    }

    // --- Anti Lag ---
    function updateAntiLagStatus() {
        const status = document.getElementById('antilag-status');
        if (status) status.textContent = `Anti Lag: ${antiLag ? 'ON' : 'OFF'}`;
    }
    function startAntiLag() {
        if (antiLag) return;
        antiLag = true;
        const style = document.createElement('style');
        style.id = 'anti-lag-style';
        style.textContent = `
            .particles, .effects, .animations {
                display: none !important;
            }
        `;
        document.head.appendChild(style);
        const canvas = document.querySelector('canvas');
        if (canvas) {
            canvas.style.imageRendering = 'pixelated';
            canvas.style.width = '75%';
            canvas.style.height = '75%';
        }
        updateAntiLagStatus();
    }
    function stopAntiLag() {
        if (!antiLag) return;
        antiLag = false;
        const style = document.getElementById('anti-lag-style');
        if (style) style.remove();
        const canvas = document.querySelector('canvas');
        if (canvas) {
            canvas.style.width = '';
            canvas.style.height = '';
            canvas.style.imageRendering = '';
        }
        updateAntiLagStatus();
    }

    // --- Keybinds ---
    window.addEventListener('keydown', (e) => {
        if (e.code === 'KeyT') {
            autoSprint ? stopAutoSprint() : startAutoSprint();
        }
        if (e.code === 'KeyY') {
            autoJump ? stopAutoJump() : startAutoJump();
        }
        if (e.code === 'KeyU') {
            autoReload ? stopAutoReload() : startAutoReload();
        }
        if (e.code === 'KeyR') {
            manualReload();
        }
        if (e.code === 'KeyL') {
            antiLag ? stopAntiLag() : startAntiLag();
        }
        if (e.key === '-' || e.code === 'Minus') {
            menu.style.display = (menu.style.display === 'none') ? 'block' : 'none';
        }
    });

    // --- Clean up on unload ---
    window.addEventListener('beforeunload', () => {
        stopAutoSprint();
        stopAutoJump();
        stopAutoReload();
        stopAntiLag();
    });

})();