Veck.io Aimbot & ESP

Advanced aimbot and ESP for veck.io

Size

12.6 KB

Version

1.1.1

Created

Mar 16, 2026

Updated

about 1 month ago

1// ==UserScript==
2// @name		Veck.io Aimbot & ESP
3// @description		Advanced aimbot and ESP for veck.io
4// @version		1.1.1
5// @match		https://*.veck.io/*
6// @match		https://veck.io/*
7// @icon		https://robomonkey.io/favicon.ico
8// @grant		GM.getValue
9// @grant		GM.setValue
10// ==/UserScript==
11(function() {
12    'use strict';
13
14    console.log('[Veck.io Aimbot] Extension loaded');
15
16    // Configuration
17    let config = {
18        aimbotEnabled: true,
19        espEnabled: true,
20        aimbotFOV: 200,
21        aimbotSmooth: 0.3,
22        espBoxes: true,
23        espLines: true,
24        espHealth: true,
25        espDistance: true,
26        autoShoot: false
27    };
28
29    // State
30    let players = [];
31    let canvas = null;
32    let ctx = null;
33
34    // Create overlay canvas for ESP
35    function createOverlay() {
36        const unityCanvas = document.getElementById('unity-canvas');
37        if (!unityCanvas) {
38            console.log('[Veck.io Aimbot] Unity canvas not found, retrying...');
39            setTimeout(createOverlay, 1000);
40            return;
41        }
42
43        canvas = document.createElement('canvas');
44        canvas.id = 'aimbot-overlay';
45        canvas.width = unityCanvas.width || window.innerWidth;
46        canvas.height = unityCanvas.height || window.innerHeight;
47        canvas.style.cssText = `
48            position: fixed;
49            top: 0;
50            left: 0;
51            width: 100%;
52            height: 100%;
53            pointer-events: none;
54            z-index: 9999;
55        `;
56        document.body.appendChild(canvas);
57        ctx = canvas.getContext('2d');
58
59        console.log('[Veck.io Aimbot] Overlay created');
60
61        // Handle window resize
62        window.addEventListener('resize', () => {
63            canvas.width = window.innerWidth;
64            canvas.height = window.innerHeight;
65        });
66    }
67
68    // Hook into Unity game instance
69    function hookUnityGame() {
70        console.log('[Veck.io Aimbot] Attempting to hook Unity game...');
71
72        // Try to find Unity instance
73        const checkUnity = setInterval(() => {
74            if (window.unityInstance || window.gameInstance) {
75                console.log('[Veck.io Aimbot] Unity instance found!');
76                clearInterval(checkUnity);
77                interceptUnityMethods();
78            }
79        }, 1000);
80
81        // Fallback: Hook WebGL context
82        hookWebGLContext();
83    }
84
85    // Hook WebGL rendering to detect players
86    function hookWebGLContext() {
87        const originalGetContext = HTMLCanvasElement.prototype.getContext;
88        HTMLCanvasElement.prototype.getContext = function(type, ...args) {
89            const context = originalGetContext.call(this, type, ...args);
90            
91            if (type === 'webgl' || type === 'webgl2') {
92                console.log('[Veck.io Aimbot] WebGL context hooked');
93                hookWebGLMethods(context);
94            }
95            
96            return context;
97        };
98    }
99
100    // Hook WebGL methods to extract player data
101    function hookWebGLMethods(gl) {
102        const originalDrawElements = gl.drawElements;
103        const originalDrawArrays = gl.drawArrays;
104
105        gl.drawElements = function(...args) {
106            // Extract rendering data here
107            return originalDrawElements.apply(this, args);
108        };
109
110        gl.drawArrays = function(...args) {
111            // Extract rendering data here
112            return originalDrawArrays.apply(this, args);
113        };
114    }
115
116    // Intercept Unity methods
117    function interceptUnityMethods() {
118        // Hook into Unity's SendMessage
119        if (window.unityInstance && window.unityInstance.SendMessage) {
120            const originalSendMessage = window.unityInstance.SendMessage;
121            window.unityInstance.SendMessage = function(obj, method, value) {
122                console.log('[Unity SendMessage]', obj, method, value);
123                return originalSendMessage.call(this, obj, method, value);
124            };
125        }
126
127        // Try to access Unity Module
128        if (window.Module) {
129            console.log('[Veck.io Aimbot] Unity Module found');
130        }
131    }
132
133    // Simulate player detection (for demonstration)
134    function simulatePlayerDetection() {
135        // In a real implementation, this would extract actual player data from the game
136        players = [];
137        
138        // Generate random players for demonstration
139        for (let i = 0; i < 5; i++) {
140            players.push({
141                id: i,
142                x: Math.random() * canvas.width,
143                y: Math.random() * canvas.height,
144                distance: Math.random() * 100 + 10,
145                health: Math.random() * 100,
146                isEnemy: true
147            });
148        }
149    }
150
151    // Draw ESP
152    function drawESP() {
153        if (!ctx || !config.espEnabled) return;
154
155        ctx.clearRect(0, 0, canvas.width, canvas.height);
156
157        players.forEach(player => {
158            if (!player.isEnemy) return;
159
160            const x = player.x;
161            const y = player.y;
162            const boxWidth = 40;
163            const boxHeight = 60;
164
165            // Draw box
166            if (config.espBoxes) {
167                ctx.strokeStyle = player.health > 50 ? '#00ff00' : '#ff0000';
168                ctx.lineWidth = 2;
169                ctx.strokeRect(x - boxWidth/2, y - boxHeight/2, boxWidth, boxHeight);
170            }
171
172            // Draw line from center
173            if (config.espLines) {
174                ctx.strokeStyle = '#ffffff';
175                ctx.lineWidth = 1;
176                ctx.beginPath();
177                ctx.moveTo(canvas.width / 2, canvas.height);
178                ctx.lineTo(x, y);
179                ctx.stroke();
180            }
181
182            // Draw health bar
183            if (config.espHealth) {
184                const healthBarWidth = boxWidth;
185                const healthBarHeight = 4;
186                const healthPercent = player.health / 100;
187                
188                ctx.fillStyle = '#000000';
189                ctx.fillRect(x - healthBarWidth/2, y - boxHeight/2 - 10, healthBarWidth, healthBarHeight);
190                
191                ctx.fillStyle = player.health > 50 ? '#00ff00' : '#ff0000';
192                ctx.fillRect(x - healthBarWidth/2, y - boxHeight/2 - 10, healthBarWidth * healthPercent, healthBarHeight);
193            }
194
195            // Draw distance
196            if (config.espDistance) {
197                ctx.fillStyle = '#ffffff';
198                ctx.font = '12px Arial';
199                ctx.textAlign = 'center';
200                ctx.fillText(`${Math.round(player.distance)}m`, x, y + boxHeight/2 + 15);
201            }
202        });
203
204        // Draw FOV circle
205        if (config.aimbotEnabled) {
206            ctx.strokeStyle = 'rgba(255, 255, 255, 0.3)';
207            ctx.lineWidth = 2;
208            ctx.beginPath();
209            ctx.arc(canvas.width / 2, canvas.height / 2, config.aimbotFOV, 0, Math.PI * 2);
210            ctx.stroke();
211        }
212    }
213
214    // Find closest enemy in FOV
215    function findClosestEnemy() {
216        if (!config.aimbotEnabled || players.length === 0) return null;
217
218        const centerX = canvas.width / 2;
219        const centerY = canvas.height / 2;
220        let closest = null;
221        let closestDist = Infinity;
222
223        players.forEach(player => {
224            if (!player.isEnemy) return;
225
226            const dx = player.x - centerX;
227            const dy = player.y - centerY;
228            const dist = Math.sqrt(dx * dx + dy * dy);
229
230            if (dist < config.aimbotFOV && dist < closestDist) {
231                closest = player;
232                closestDist = dist;
233            }
234        });
235
236        return closest;
237    }
238
239    // Aimbot logic
240    function aimbot() {
241        if (!config.aimbotEnabled) return;
242
243        const target = findClosestEnemy();
244        if (!target) return;
245
246        // Calculate aim adjustment
247        const centerX = canvas.width / 2;
248        const centerY = canvas.height / 2;
249        const dx = target.x - centerX;
250        const dy = target.y - centerY;
251
252        // Smooth aiming
253        const adjustX = dx * config.aimbotSmooth;
254        const adjustY = dy * config.aimbotSmooth;
255
256        // Simulate mouse movement (this would need to be adapted for the actual game)
257        // In a real implementation, you would inject mouse events or modify game input
258        console.log(`[Aimbot] Aiming at target: dx=${adjustX.toFixed(2)}, dy=${adjustY.toFixed(2)}`);
259
260        // Auto shoot if enabled and on target
261        if (config.autoShoot && Math.abs(dx) < 10 && Math.abs(dy) < 10) {
262            console.log('[Aimbot] Auto-shooting!');
263            // Trigger shoot action
264        }
265    }
266
267    // Main loop
268    function mainLoop() {
269        simulatePlayerDetection(); // Replace with actual player detection
270        drawESP();
271        aimbot();
272        requestAnimationFrame(mainLoop);
273    }
274
275    // Create settings menu
276    function createSettingsMenu() {
277        const menu = document.createElement('div');
278        menu.id = 'aimbot-menu';
279        menu.style.cssText = `
280            position: fixed;
281            top: 10px;
282            right: 10px;
283            background: rgba(0, 0, 0, 0.9);
284            color: white;
285            padding: 15px;
286            border-radius: 8px;
287            font-family: Arial, sans-serif;
288            font-size: 14px;
289            z-index: 10000;
290            min-width: 200px;
291            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
292        `;
293
294        menu.innerHTML = `
295            <div style="font-weight: bold; margin-bottom: 10px; font-size: 16px; color: #00ff00;">Veck.io Aimbot</div>
296            <label style="display: block; margin: 8px 0; cursor: pointer;">
297                <input type="checkbox" id="toggle-aimbot" ${config.aimbotEnabled ? 'checked' : ''}> Aimbot
298            </label>
299            <label style="display: block; margin: 8px 0; cursor: pointer;">
300                <input type="checkbox" id="toggle-esp" ${config.espEnabled ? 'checked' : ''}> ESP
301            </label>
302            <label style="display: block; margin: 8px 0; cursor: pointer;">
303                <input type="checkbox" id="toggle-autoshoot" ${config.autoShoot ? 'checked' : ''}> Auto Shoot
304            </label>
305            <div style="margin: 10px 0;">
306                <label>FOV: <span id="fov-value">${config.aimbotFOV}</span></label>
307                <input type="range" id="fov-slider" min="50" max="500" value="${config.aimbotFOV}" style="width: 100%;">
308            </div>
309            <div style="margin: 10px 0;">
310                <label>Smooth: <span id="smooth-value">${config.aimbotSmooth}</span></label>
311                <input type="range" id="smooth-slider" min="0.1" max="1" step="0.1" value="${config.aimbotSmooth}" style="width: 100%;">
312            </div>
313            <div style="margin-top: 10px; font-size: 11px; color: #888;">
314                Press INSERT to toggle menu
315            </div>
316        `;
317
318        document.body.appendChild(menu);
319
320        // Event listeners
321        document.getElementById('toggle-aimbot').addEventListener('change', (e) => {
322            config.aimbotEnabled = e.target.checked;
323            console.log('[Aimbot] Aimbot:', config.aimbotEnabled);
324        });
325
326        document.getElementById('toggle-esp').addEventListener('change', (e) => {
327            config.espEnabled = e.target.checked;
328            console.log('[Aimbot] ESP:', config.espEnabled);
329        });
330
331        document.getElementById('toggle-autoshoot').addEventListener('change', (e) => {
332            config.autoShoot = e.target.checked;
333            console.log('[Aimbot] Auto Shoot:', config.autoShoot);
334        });
335
336        document.getElementById('fov-slider').addEventListener('input', (e) => {
337            config.aimbotFOV = parseInt(e.target.value);
338            document.getElementById('fov-value').textContent = config.aimbotFOV;
339        });
340
341        document.getElementById('smooth-slider').addEventListener('input', (e) => {
342            config.aimbotSmooth = parseFloat(e.target.value);
343            document.getElementById('smooth-value').textContent = config.aimbotSmooth.toFixed(1);
344        });
345
346        // Toggle menu with INSERT key
347        document.addEventListener('keydown', (e) => {
348            if (e.key === 'Insert') {
349                menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
350            }
351        });
352    }
353
354    // Initialize
355    function init() {
356        console.log('[Veck.io Aimbot] Initializing...');
357        
358        // Wait for game to load
359        setTimeout(() => {
360            createOverlay();
361            createSettingsMenu();
362            hookUnityGame();
363            mainLoop();
364            console.log('[Veck.io Aimbot] Fully initialized!');
365        }, 3000);
366    }
367
368    // Start when page loads
369    if (document.readyState === 'loading') {
370        document.addEventListener('DOMContentLoaded', init);
371    } else {
372        init();
373    }
374
375})();