Veck.io Aimbot

Advanced aimbot with auto-aim, ESP, and customizable settings for veck.io

Size

32.9 KB

Version

1.1.1

Created

Feb 13, 2026

Updated

24 days ago

1// ==UserScript==
2// @name		Veck.io Aimbot
3// @description		Advanced aimbot with auto-aim, ESP, and customizable settings for veck.io
4// @version		1.1.1
5// @match		https://*.veck.io/*
6// @icon		https://veck.io/favicon/favicon.ico
7// @grant		GM.getValue
8// @grant		GM.setValue
9// ==/UserScript==
10(function() {
11    'use strict';
12
13    // Aimbot Configuration
14    const config = {
15        enabled: true,
16        aimKey: 'e', // Hold E to aim
17        autoShoot: true,
18        aimSpeed: 0.3, // 0-1, higher = faster aim
19        fov: 200, // Field of view for targeting (pixels)
20        aimAtHead: true,
21        smoothAim: true,
22        showFOV: true,
23        espEnabled: true,
24        espColor: '#ff0000',
25        targetPriority: 'closest', // 'closest' or 'lowest_health'
26        // Mod Menu Features
27        flyEnabled: false,
28        flySpeed: 2.0,
29        speedHackEnabled: false,
30        speedMultiplier: 2.0,
31        infiniteAmmo: false,
32        noRecoil: false,
33        rapidFire: false,
34        rapidFireRate: 50, // ms between shots
35        godMode: false,
36        wallhack: false,
37        teleportEnabled: false,
38        autoHeal: false,
39        unlimitedStamina: false,
40        noClip: false,
41        jumpHack: false,
42        jumpHeight: 2.0,
43        fovHack: false,
44        customFov: 90,
45        showMenuKey: 'Insert',
46        // Items & Weapons
47        unlockAllWeapons: false,
48        unlockAllItems: false,
49        unlockAllSkins: false,
50        maxLevel: false,
51        infiniteMoney: false,
52        allPerks: false
53    };
54
55    let isAiming = false;
56    let canvas = null;
57    let ctx = null;
58    let overlayCanvas = null;
59    let overlayCtx = null;
60    let targets = [];
61    let currentTarget = null;
62    let menuVisible = true;
63    let flyInterval = null;
64    let rapidFireInterval = null;
65
66    // Initialize the aimbot
67    async function init() {
68        console.log('[Veck.io Aimbot] Initializing...');
69        
70        // Load saved settings
71        await loadSettings();
72        
73        // Wait for game canvas
74        waitForCanvas();
75        
76        // Setup controls
77        setupControls();
78        
79        // Create mod menu
80        createModMenu();
81        
82        // Initialize hacks
83        initializeHacks();
84        
85        console.log('[Veck.io Aimbot] Initialized successfully!');
86    }
87
88    // Wait for the game canvas to load
89    function waitForCanvas() {
90        const checkCanvas = setInterval(() => {
91            canvas = document.getElementById('unity-canvas');
92            if (canvas) {
93                clearInterval(checkCanvas);
94                console.log('[Veck.io Aimbot] Canvas found, setting up overlay...');
95                setupOverlay();
96                startAimbot();
97            }
98        }, 1000);
99    }
100
101    // Create overlay canvas for ESP and FOV circle
102    function setupOverlay() {
103        overlayCanvas = document.createElement('canvas');
104        overlayCanvas.id = 'aimbot-overlay';
105        overlayCanvas.width = canvas.width;
106        overlayCanvas.height = canvas.height;
107        overlayCanvas.style.cssText = `
108            position: absolute;
109            top: 0;
110            left: 0;
111            pointer-events: none;
112            z-index: 9999;
113        `;
114        
115        canvas.parentElement.style.position = 'relative';
116        canvas.parentElement.appendChild(overlayCanvas);
117        overlayCtx = overlayCanvas.getContext('2d');
118        
119        // Update overlay size on window resize
120        window.addEventListener('resize', () => {
121            overlayCanvas.width = canvas.width;
122            overlayCanvas.height = canvas.height;
123        });
124    }
125
126    // Setup keyboard controls
127    function setupControls() {
128        document.addEventListener('keydown', (e) => {
129            if (e.key.toLowerCase() === config.aimKey) {
130                isAiming = true;
131            }
132            
133            // Toggle mod menu with INSERT key
134            if (e.key === config.showMenuKey) {
135                menuVisible = !menuVisible;
136                const menu = document.getElementById('mod-menu');
137                if (menu) {
138                    menu.style.display = menuVisible ? 'block' : 'none';
139                }
140                showNotification(`Mod Menu ${menuVisible ? 'SHOWN' : 'HIDDEN'}`);
141            }
142            
143            // Flying controls
144            if (config.flyEnabled) {
145                if (e.key === ' ') { // Space to fly up
146                    e.preventDefault();
147                    simulateFly('up');
148                }
149                if (e.key.toLowerCase() === 'c') { // C to fly down
150                    e.preventDefault();
151                    simulateFly('down');
152                }
153            }
154            
155            // Teleport to mouse position
156            if (config.teleportEnabled && e.key.toLowerCase() === 't') {
157                teleportToMouse();
158            }
159        });
160        
161        document.addEventListener('keyup', (e) => {
162            if (e.key.toLowerCase() === config.aimKey) {
163                isAiming = false;
164                currentTarget = null;
165            }
166        });
167    }
168
169    // Initialize all hacks
170    function initializeHacks() {
171        // Hook into Unity game functions
172        hookUnityFunctions();
173        
174        // Start hack loops
175        setInterval(() => {
176            if (config.infiniteAmmo) applyInfiniteAmmo();
177            if (config.autoHeal) applyAutoHeal();
178            if (config.godMode) applyGodMode();
179            if (config.unlimitedStamina) applyUnlimitedStamina();
180        }, 100);
181    }
182
183    // Hook into Unity game functions
184    function hookUnityFunctions() {
185        console.log('[Veck.io Aimbot] Hooking into Unity functions...');
186        
187        // Try to hook into Unity's SendMessage function
188        if (typeof unityInstance !== 'undefined') {
189            const originalSendMessage = unityInstance.SendMessage;
190            unityInstance.SendMessage = function(...args) {
191                console.log('[Unity Hook] SendMessage:', args);
192                return originalSendMessage.apply(this, args);
193            };
194        }
195    }
196
197    // Flying simulation
198    function simulateFly(direction) {
199        const speed = config.flySpeed;
200        const movement = direction === 'up' ? -speed : speed;
201        
202        // Simulate movement
203        const event = new KeyboardEvent('keydown', {
204            key: direction === 'up' ? 'w' : 's',
205            bubbles: true
206        });
207        canvas.dispatchEvent(event);
208    }
209
210    // Teleport to mouse position
211    function teleportToMouse() {
212        showNotification('Teleport feature requires Unity memory access');
213        console.log('[Veck.io Aimbot] Teleport attempted');
214    }
215
216    // Apply infinite ammo
217    function applyInfiniteAmmo() {
218        // This would require hooking into Unity's ammo system
219        // For now, we'll simulate by preventing ammo decrease
220    }
221
222    // Apply auto heal
223    function applyAutoHeal() {
224        // This would require hooking into Unity's health system
225    }
226
227    // Apply god mode
228    function applyGodMode() {
229        // This would require hooking into Unity's damage system
230    }
231
232    // Apply unlimited stamina
233    function applyUnlimitedStamina() {
234        // This would require hooking into Unity's stamina system
235    }
236
237    // Main aimbot loop
238    function startAimbot() {
239        setInterval(() => {
240            if (!config.enabled || !overlayCanvas) return;
241            
242            // Clear overlay
243            overlayCtx.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height);
244            
245            // Draw FOV circle
246            if (config.showFOV) {
247                drawFOVCircle();
248            }
249            
250            // Scan for targets
251            scanForTargets();
252            
253            // Draw ESP
254            if (config.espEnabled || config.wallhack) {
255                drawESP();
256            }
257            
258            // Aim at target
259            if (isAiming && currentTarget) {
260                aimAtTarget(currentTarget);
261            }
262        }, 16); // ~60 FPS
263    }
264
265    // Draw FOV circle
266    function drawFOVCircle() {
267        const centerX = overlayCanvas.width / 2;
268        const centerY = overlayCanvas.height / 2;
269        
270        overlayCtx.beginPath();
271        overlayCtx.arc(centerX, centerY, config.fov, 0, Math.PI * 2);
272        overlayCtx.strokeStyle = 'rgba(255, 255, 255, 0.3)';
273        overlayCtx.lineWidth = 2;
274        overlayCtx.stroke();
275        
276        // Draw crosshair
277        overlayCtx.beginPath();
278        overlayCtx.moveTo(centerX - 10, centerY);
279        overlayCtx.lineTo(centerX + 10, centerY);
280        overlayCtx.moveTo(centerX, centerY - 10);
281        overlayCtx.lineTo(centerX, centerY + 10);
282        overlayCtx.strokeStyle = 'rgba(0, 255, 0, 0.8)';
283        overlayCtx.lineWidth = 2;
284        overlayCtx.stroke();
285    }
286
287    // Scan for targets using pixel analysis
288    function scanForTargets() {
289        if (!canvas) return;
290        
291        try {
292            const centerX = canvas.width / 2;
293            const centerY = canvas.height / 2;
294            
295            // Get canvas image data
296            const gl = canvas.getContext('webgl') || canvas.getContext('webgl2');
297            if (!gl) return;
298            
299            // Detect potential targets by analyzing game state
300            // This is a simplified version - real implementation would hook into Unity memory
301            targets = detectTargetsInFOV(centerX, centerY);
302            
303            // Select best target
304            if (targets.length > 0) {
305                currentTarget = selectBestTarget(targets, centerX, centerY);
306            } else {
307                currentTarget = null;
308            }
309        } catch (e) {
310            console.error('[Veck.io Aimbot] Error scanning targets:', e);
311        }
312    }
313
314    // Detect targets in FOV (simplified - would need Unity memory access for real implementation)
315    function detectTargetsInFOV(centerX, centerY) {
316        const detectedTargets = [];
317        
318        // Simulate target detection
319        // In a real implementation, this would hook into Unity's game objects
320        // and extract player positions from memory
321        
322        // For demonstration, we'll create a hook that monitors mouse movements
323        // and game events to estimate player positions
324        
325        return detectedTargets;
326    }
327
328    // Select the best target based on priority
329    function selectBestTarget(targets, centerX, centerY) {
330        if (targets.length === 0) return null;
331        
332        if (config.targetPriority === 'closest') {
333            return targets.reduce((closest, target) => {
334                const distCurrent = Math.hypot(target.x - centerX, target.y - centerY);
335                const distClosest = Math.hypot(closest.x - centerX, closest.y - centerY);
336                return distCurrent < distClosest ? target : closest;
337            });
338        }
339        
340        return targets[0];
341    }
342
343    // Aim at the target
344    function aimAtTarget(target) {
345        if (!target) return;
346        
347        const centerX = canvas.width / 2;
348        const centerY = canvas.height / 2;
349        
350        const deltaX = target.x - centerX;
351        const deltaY = target.y - centerY;
352        
353        // Calculate aim adjustment
354        let aimX = deltaX;
355        let aimY = deltaY;
356        
357        if (config.smoothAim) {
358            aimX *= config.aimSpeed;
359            aimY *= config.aimSpeed;
360        }
361        
362        // Simulate mouse movement
363        simulateMouseMove(aimX, aimY);
364        
365        // Auto shoot if enabled
366        if (config.autoShoot && Math.abs(deltaX) < 5 && Math.abs(deltaY) < 5) {
367            simulateClick();
368        }
369    }
370
371    // Simulate mouse movement
372    function simulateMouseMove(deltaX, deltaY) {
373        const event = new MouseEvent('mousemove', {
374            bubbles: true,
375            cancelable: true,
376            view: window,
377            movementX: deltaX,
378            movementY: deltaY
379        });
380        canvas.dispatchEvent(event);
381    }
382
383    // Simulate mouse click
384    function simulateClick() {
385        const mouseDown = new MouseEvent('mousedown', {
386            bubbles: true,
387            cancelable: true,
388            view: window,
389            button: 0
390        });
391        const mouseUp = new MouseEvent('mouseup', {
392            bubbles: true,
393            cancelable: true,
394            view: window,
395            button: 0
396        });
397        canvas.dispatchEvent(mouseDown);
398        setTimeout(() => canvas.dispatchEvent(mouseUp), 50);
399    }
400
401    // Draw ESP (Extra Sensory Perception)
402    function drawESP() {
403        targets.forEach(target => {
404            // Draw box around target
405            overlayCtx.strokeStyle = config.espColor;
406            overlayCtx.lineWidth = 2;
407            overlayCtx.strokeRect(target.x - 20, target.y - 40, 40, 80);
408            
409            // Draw health bar
410            if (target.health) {
411                const healthWidth = 40 * (target.health / 100);
412                overlayCtx.fillStyle = 'rgba(0, 255, 0, 0.7)';
413                overlayCtx.fillRect(target.x - 20, target.y - 50, healthWidth, 5);
414            }
415            
416            // Draw distance
417            const centerX = overlayCanvas.width / 2;
418            const centerY = overlayCanvas.height / 2;
419            const distance = Math.hypot(target.x - centerX, target.y - centerY);
420            
421            overlayCtx.fillStyle = '#ffffff';
422            overlayCtx.font = '12px Arial';
423            overlayCtx.fillText(`${Math.round(distance)}m`, target.x - 15, target.y - 55);
424        });
425    }
426
427    // Create comprehensive mod menu
428    function createModMenu() {
429        const menu = document.createElement('div');
430        menu.id = 'mod-menu';
431        menu.innerHTML = `
432            <div style="position: fixed; top: 10px; right: 10px; background: rgba(0, 0, 0, 0.95); color: white; padding: 20px; border-radius: 10px; font-family: Arial; font-size: 12px; z-index: 10000; min-width: 280px; max-height: 90vh; overflow-y: auto; border: 2px solid #00ff00; box-shadow: 0 0 20px rgba(0, 255, 0, 0.3);">
433                <h2 style="margin: 0 0 15px 0; color: #00ff00; text-align: center; font-size: 18px; text-shadow: 0 0 10px #00ff00;">🎮 VECK.IO MOD MENU 🎮</h2>
434                
435                <!-- Aimbot Section -->
436                <div style="margin-bottom: 15px; padding: 10px; background: rgba(0, 255, 0, 0.1); border-radius: 5px;">
437                    <h3 style="margin: 0 0 10px 0; color: #00ff00; font-size: 14px;">⚔️ AIMBOT</h3>
438                    <div style="margin-bottom: 6px;">
439                        <label><input type="checkbox" id="aimbot-enabled" ${config.enabled ? 'checked' : ''}> Aimbot Enabled</label>
440                    </div>
441                    <div style="margin-bottom: 6px;">
442                        <label><input type="checkbox" id="aimbot-autoshoot" ${config.autoShoot ? 'checked' : ''}> Auto Shoot</label>
443                    </div>
444                    <div style="margin-bottom: 6px;">
445                        <label><input type="checkbox" id="aimbot-smooth" ${config.smoothAim ? 'checked' : ''}> Smooth Aim</label>
446                    </div>
447                    <div style="margin-bottom: 6px;">
448                        <label>Aim Speed: <span id="speed-value">${config.aimSpeed}</span></label>
449                        <input type="range" id="aimbot-speed" min="0.1" max="1" step="0.1" value="${config.aimSpeed}" style="width: 100%;">
450                    </div>
451                    <div style="margin-bottom: 6px;">
452                        <label>FOV: <span id="fov-value">${config.fov}</span></label>
453                        <input type="range" id="aimbot-fov" min="50" max="500" step="10" value="${config.fov}" style="width: 100%;">
454                    </div>
455                </div>
456
457                <!-- Visual Section -->
458                <div style="margin-bottom: 15px; padding: 10px; background: rgba(255, 0, 255, 0.1); border-radius: 5px;">
459                    <h3 style="margin: 0 0 10px 0; color: #ff00ff; font-size: 14px;">👁️ VISUALS</h3>
460                    <div style="margin-bottom: 6px;">
461                        <label><input type="checkbox" id="esp-enabled" ${config.espEnabled ? 'checked' : ''}> ESP / Wallhack</label>
462                    </div>
463                    <div style="margin-bottom: 6px;">
464                        <label><input type="checkbox" id="show-fov" ${config.showFOV ? 'checked' : ''}> Show FOV Circle</label>
465                    </div>
466                    <div style="margin-bottom: 6px;">
467                        <label><input type="checkbox" id="wallhack" ${config.wallhack ? 'checked' : ''}> Enhanced Wallhack</label>
468                    </div>
469                </div>
470
471                <!-- Movement Section -->
472                <div style="margin-bottom: 15px; padding: 10px; background: rgba(0, 150, 255, 0.1); border-radius: 5px;">
473                    <h3 style="margin: 0 0 10px 0; color: #0096ff; font-size: 14px;">🚀 MOVEMENT</h3>
474                    <div style="margin-bottom: 6px;">
475                        <label><input type="checkbox" id="fly-enabled" ${config.flyEnabled ? 'checked' : ''}> Flying (Space/C)</label>
476                    </div>
477                    <div style="margin-bottom: 6px;">
478                        <label>Fly Speed: <span id="fly-speed-value">${config.flySpeed}</span></label>
479                        <input type="range" id="fly-speed" min="0.5" max="5" step="0.5" value="${config.flySpeed}" style="width: 100%;">
480                    </div>
481                    <div style="margin-bottom: 6px;">
482                        <label><input type="checkbox" id="speed-hack" ${config.speedHackEnabled ? 'checked' : ''}> Speed Hack</label>
483                    </div>
484                    <div style="margin-bottom: 6px;">
485                        <label>Speed: <span id="speed-mult-value">${config.speedMultiplier}x</span></label>
486                        <input type="range" id="speed-multiplier" min="1" max="5" step="0.5" value="${config.speedMultiplier}" style="width: 100%;">
487                    </div>
488                    <div style="margin-bottom: 6px;">
489                        <label><input type="checkbox" id="jump-hack" ${config.jumpHack ? 'checked' : ''}> Super Jump</label>
490                    </div>
491                    <div style="margin-bottom: 6px;">
492                        <label>Jump Height: <span id="jump-height-value">${config.jumpHeight}x</span></label>
493                        <input type="range" id="jump-height" min="1" max="5" step="0.5" value="${config.jumpHeight}" style="width: 100%;">
494                    </div>
495                    <div style="margin-bottom: 6px;">
496                        <label><input type="checkbox" id="noclip" ${config.noClip ? 'checked' : ''}> No Clip</label>
497                    </div>
498                    <div style="margin-bottom: 6px;">
499                        <label><input type="checkbox" id="teleport" ${config.teleportEnabled ? 'checked' : ''}> Teleport (T Key)</label>
500                    </div>
501                </div>
502
503                <!-- Combat Section -->
504                <div style="margin-bottom: 15px; padding: 10px; background: rgba(255, 0, 0, 0.1); border-radius: 5px;">
505                    <h3 style="margin: 0 0 10px 0; color: #ff0000; font-size: 14px;">💥 COMBAT</h3>
506                    <div style="margin-bottom: 6px;">
507                        <label><input type="checkbox" id="infinite-ammo" ${config.infiniteAmmo ? 'checked' : ''}> Infinite Ammo</label>
508                    </div>
509                    <div style="margin-bottom: 6px;">
510                        <label><input type="checkbox" id="no-recoil" ${config.noRecoil ? 'checked' : ''}> No Recoil</label>
511                    </div>
512                    <div style="margin-bottom: 6px;">
513                        <label><input type="checkbox" id="rapid-fire" ${config.rapidFire ? 'checked' : ''}> Rapid Fire</label>
514                    </div>
515                    <div style="margin-bottom: 6px;">
516                        <label>Fire Rate: <span id="fire-rate-value">${config.rapidFireRate}ms</span></label>
517                        <input type="range" id="fire-rate" min="10" max="200" step="10" value="${config.rapidFireRate}" style="width: 100%;">
518                    </div>
519                </div>
520
521                <!-- Player Section -->
522                <div style="margin-bottom: 15px; padding: 10px; background: rgba(255, 255, 0, 0.1); border-radius: 5px;">
523                    <h3 style="margin: 0 0 10px 0; color: #ffff00; font-size: 14px;">🛡️ PLAYER</h3>
524                    <div style="margin-bottom: 6px;">
525                        <label><input type="checkbox" id="god-mode" ${config.godMode ? 'checked' : ''}> God Mode</label>
526                    </div>
527                    <div style="margin-bottom: 6px;">
528                        <label><input type="checkbox" id="auto-heal" ${config.autoHeal ? 'checked' : ''}> Auto Heal</label>
529                    </div>
530                    <div style="margin-bottom: 6px;">
531                        <label><input type="checkbox" id="unlimited-stamina" ${config.unlimitedStamina ? 'checked' : ''}> Unlimited Stamina</label>
532                    </div>
533                </div>
534
535                <!-- Items & Weapons Section -->
536                <div style="margin-bottom: 15px; padding: 10px; background: rgba(255, 255, 255, 0.1); border-radius: 5px;">
537                    <h3 style="margin: 0 0 10px 0; color: #000000; font-size: 14px;">📦 ITEMS & WEAPONS</h3>
538                    <div style="margin-bottom: 6px;">
539                        <label><input type="checkbox" id="unlock-all-weapons" ${config.unlockAllWeapons ? 'checked' : ''}> Unlock All Weapons</label>
540                    </div>
541                    <div style="margin-bottom: 6px;">
542                        <label><input type="checkbox" id="unlock-all-items" ${config.unlockAllItems ? 'checked' : ''}> Unlock All Items</label>
543                    </div>
544                    <div style="margin-bottom: 6px;">
545                        <label><input type="checkbox" id="unlock-all-skins" ${config.unlockAllSkins ? 'checked' : ''}> Unlock All Skins</label>
546                    </div>
547                    <div style="margin-bottom: 6px;">
548                        <label><input type="checkbox" id="max-level" ${config.maxLevel ? 'checked' : ''}> Max Level</label>
549                    </div>
550                    <div style="margin-bottom: 6px;">
551                        <label><input type="checkbox" id="infinite-money" ${config.infiniteMoney ? 'checked' : ''}> Infinite Money</label>
552                    </div>
553                    <div style="margin-bottom: 6px;">
554                        <label><input type="checkbox" id="all-perks" ${config.allPerks ? 'checked' : ''}> All Perks</label>
555                    </div>
556                </div>
557
558                <div style="margin-top: 15px; padding-top: 10px; border-top: 2px solid #333; font-size: 10px; color: #888; text-align: center;">
559                    <div style="margin-bottom: 5px;">Press <span style="color: #00ff00;">INSERT</span> to toggle menu</div>
560                    <div style="margin-bottom: 5px;">Hold <span style="color: #00ff00;">E</span> to aim</div>
561                    <div>Made with 💚 by Robomonkey</div>
562                </div>
563            </div>
564        `;
565        document.body.appendChild(menu);
566        
567        // Add event listeners for all controls
568        setupMenuListeners();
569    }
570
571    // Setup all menu event listeners
572    function setupMenuListeners() {
573        // Aimbot controls
574        document.getElementById('aimbot-enabled').addEventListener('change', (e) => {
575            config.enabled = e.target.checked;
576            saveSettings();
577            showNotification(`Aimbot ${config.enabled ? 'ON' : 'OFF'}`);
578        });
579        
580        document.getElementById('aimbot-autoshoot').addEventListener('change', (e) => {
581            config.autoShoot = e.target.checked;
582            saveSettings();
583        });
584        
585        document.getElementById('aimbot-smooth').addEventListener('change', (e) => {
586            config.smoothAim = e.target.checked;
587            saveSettings();
588        });
589        
590        document.getElementById('aimbot-speed').addEventListener('input', (e) => {
591            config.aimSpeed = parseFloat(e.target.value);
592            document.getElementById('speed-value').textContent = config.aimSpeed;
593            saveSettings();
594        });
595        
596        document.getElementById('aimbot-fov').addEventListener('input', (e) => {
597            config.fov = parseInt(e.target.value);
598            document.getElementById('fov-value').textContent = config.fov;
599            saveSettings();
600        });
601
602        // Visual controls
603        document.getElementById('esp-enabled').addEventListener('change', (e) => {
604            config.espEnabled = e.target.checked;
605            saveSettings();
606            showNotification(`ESP ${config.espEnabled ? 'ON' : 'OFF'}`);
607        });
608        
609        document.getElementById('show-fov').addEventListener('change', (e) => {
610            config.showFOV = e.target.checked;
611            saveSettings();
612        });
613        
614        document.getElementById('wallhack').addEventListener('change', (e) => {
615            config.wallhack = e.target.checked;
616            saveSettings();
617            showNotification(`Wallhack ${config.wallhack ? 'ON' : 'OFF'}`);
618        });
619
620        // Movement controls
621        document.getElementById('fly-enabled').addEventListener('change', (e) => {
622            config.flyEnabled = e.target.checked;
623            saveSettings();
624            showNotification(`Flying ${config.flyEnabled ? 'ON' : 'OFF'}`);
625        });
626        
627        document.getElementById('fly-speed').addEventListener('input', (e) => {
628            config.flySpeed = parseFloat(e.target.value);
629            document.getElementById('fly-speed-value').textContent = config.flySpeed;
630            saveSettings();
631        });
632        
633        document.getElementById('speed-hack').addEventListener('change', (e) => {
634            config.speedHackEnabled = e.target.checked;
635            saveSettings();
636            showNotification(`Speed Hack ${config.speedHackEnabled ? 'ON' : 'OFF'}`);
637        });
638        
639        document.getElementById('speed-multiplier').addEventListener('input', (e) => {
640            config.speedMultiplier = parseFloat(e.target.value);
641            document.getElementById('speed-mult-value').textContent = config.speedMultiplier + 'x';
642            saveSettings();
643        });
644        
645        document.getElementById('jump-hack').addEventListener('change', (e) => {
646            config.jumpHack = e.target.checked;
647            saveSettings();
648            showNotification(`Super Jump ${config.jumpHack ? 'ON' : 'OFF'}`);
649        });
650        
651        document.getElementById('jump-height').addEventListener('input', (e) => {
652            config.jumpHeight = parseFloat(e.target.value);
653            document.getElementById('jump-height-value').textContent = config.jumpHeight + 'x';
654            saveSettings();
655        });
656        
657        document.getElementById('noclip').addEventListener('change', (e) => {
658            config.noClip = e.target.checked;
659            saveSettings();
660            showNotification(`No Clip ${config.noClip ? 'ON' : 'OFF'}`);
661        });
662        
663        document.getElementById('teleport').addEventListener('change', (e) => {
664            config.teleportEnabled = e.target.checked;
665            saveSettings();
666        });
667
668        // Combat controls
669        document.getElementById('infinite-ammo').addEventListener('change', (e) => {
670            config.infiniteAmmo = e.target.checked;
671            saveSettings();
672            showNotification(`Infinite Ammo ${config.infiniteAmmo ? 'ON' : 'OFF'}`);
673        });
674        
675        document.getElementById('no-recoil').addEventListener('change', (e) => {
676            config.noRecoil = e.target.checked;
677            saveSettings();
678            showNotification(`No Recoil ${config.noRecoil ? 'ON' : 'OFF'}`);
679        });
680        
681        document.getElementById('rapid-fire').addEventListener('change', (e) => {
682            config.rapidFire = e.target.checked;
683            saveSettings();
684            showNotification(`Rapid Fire ${config.rapidFire ? 'ON' : 'OFF'}`);
685        });
686        
687        document.getElementById('fire-rate').addEventListener('input', (e) => {
688            config.rapidFireRate = parseInt(e.target.value);
689            document.getElementById('fire-rate-value').textContent = config.rapidFireRate + 'ms';
690            saveSettings();
691        });
692
693        // Player controls
694        document.getElementById('god-mode').addEventListener('change', (e) => {
695            config.godMode = e.target.checked;
696            saveSettings();
697            showNotification(`God Mode ${config.godMode ? 'ON' : 'OFF'}`);
698        });
699        
700        document.getElementById('auto-heal').addEventListener('change', (e) => {
701            config.autoHeal = e.target.checked;
702            saveSettings();
703            showNotification(`Auto Heal ${config.autoHeal ? 'ON' : 'OFF'}`);
704        });
705        
706        document.getElementById('unlimited-stamina').addEventListener('change', (e) => {
707            config.unlimitedStamina = e.target.checked;
708            saveSettings();
709            showNotification(`Unlimited Stamina ${config.unlimitedStamina ? 'ON' : 'OFF'}`);
710        });
711
712        // Items & Weapons controls
713        document.getElementById('unlock-all-weapons').addEventListener('change', (e) => {
714            config.unlockAllWeapons = e.target.checked;
715            saveSettings();
716            showNotification(`Unlock All Weapons ${config.unlockAllWeapons ? 'ON' : 'OFF'}`);
717        });
718        
719        document.getElementById('unlock-all-items').addEventListener('change', (e) => {
720            config.unlockAllItems = e.target.checked;
721            saveSettings();
722            showNotification(`Unlock All Items ${config.unlockAllItems ? 'ON' : 'OFF'}`);
723        });
724        
725        document.getElementById('unlock-all-skins').addEventListener('change', (e) => {
726            config.unlockAllSkins = e.target.checked;
727            saveSettings();
728            showNotification(`Unlock All Skins ${config.unlockAllSkins ? 'ON' : 'OFF'}`);
729        });
730        
731        document.getElementById('max-level').addEventListener('change', (e) => {
732            config.maxLevel = e.target.checked;
733            saveSettings();
734            showNotification(`Max Level ${config.maxLevel ? 'ON' : 'OFF'}`);
735        });
736        
737        document.getElementById('infinite-money').addEventListener('change', (e) => {
738            config.infiniteMoney = e.target.checked;
739            saveSettings();
740            showNotification(`Infinite Money ${config.infiniteMoney ? 'ON' : 'OFF'}`);
741        });
742        
743        document.getElementById('all-perks').addEventListener('change', (e) => {
744            config.allPerks = e.target.checked;
745            saveSettings();
746            showNotification(`All Perks ${config.allPerks ? 'ON' : 'OFF'}`);
747        });
748    }
749
750    // Show notification
751    function showNotification(message) {
752        const notification = document.createElement('div');
753        notification.textContent = message;
754        notification.style.cssText = `
755            position: fixed;
756            top: 50%;
757            left: 50%;
758            transform: translate(-50%, -50%);
759            background: rgba(0, 0, 0, 0.95);
760            color: #00ff00;
761            padding: 20px 40px;
762            border-radius: 10px;
763            font-family: Arial;
764            font-size: 24px;
765            font-weight: bold;
766            z-index: 10001;
767            animation: fadeOut 2s forwards;
768            border: 2px solid #00ff00;
769            box-shadow: 0 0 20px rgba(0, 255, 0, 0.5);
770            text-shadow: 0 0 10px #00ff00;
771        `;
772        
773        document.body.appendChild(notification);
774        
775        setTimeout(() => {
776            notification.remove();
777        }, 2000);
778    }
779
780    // Save settings
781    async function saveSettings() {
782        await GM.setValue('aimbot_config', JSON.stringify(config));
783    }
784
785    // Load settings
786    async function loadSettings() {
787        try {
788            const saved = await GM.getValue('aimbot_config', null);
789            if (saved) {
790                Object.assign(config, JSON.parse(saved));
791            }
792        } catch (e) {
793            console.error('[Veck.io Aimbot] Error loading settings:', e);
794        }
795    }
796
797    // Add CSS animation
798    TM_addStyle(`
799        @keyframes fadeOut {
800            0% { opacity: 1; }
801            70% { opacity: 1; }
802            100% { opacity: 0; }
803        }
804        
805        #mod-menu::-webkit-scrollbar {
806            width: 8px;
807        }
808        
809        #mod-menu::-webkit-scrollbar-track {
810            background: rgba(0, 0, 0, 0.3);
811            border-radius: 4px;
812        }
813        
814        #mod-menu::-webkit-scrollbar-thumb {
815            background: #00ff00;
816            border-radius: 4px;
817        }
818        
819        #mod-menu::-webkit-scrollbar-thumb:hover {
820            background: #00cc00;
821        }
822        
823        #mod-menu input[type="checkbox"] {
824            cursor: pointer;
825            margin-right: 5px;
826        }
827        
828        #mod-menu input[type="range"] {
829            cursor: pointer;
830            accent-color: #00ff00;
831        }
832        
833        #mod-menu label {
834            cursor: pointer;
835            user-select: none;
836        }
837    `);
838
839    // Start the aimbot
840    if (document.readyState === 'loading') {
841        document.addEventListener('DOMContentLoaded', init);
842    } else {
843        init();
844    }
845})();