Friendly cheats by W cheats

Make ur game easier (veck.io)

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

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

})();