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