Veck.io Aimbot & ESP

Aimbot and ESP features for veck.io FPS game

Size

13.5 KB

Version

1.1.1

Created

Jan 27, 2026

Updated

8 days ago

1// ==UserScript==
2// @name		Veck.io Aimbot & ESP
3// @description		Aimbot and ESP features for veck.io FPS game
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    console.log('[Veck.io Aimbot] Extension loaded');
14
15    // Configuration
16    let config = {
17        espEnabled: true,
18        aimbotEnabled: true,
19        espColor: '#00ff00',
20        espBoxColor: '#ff0000',
21        aimbotFOV: 200,
22        aimbotSmoothing: 0.3,
23        showFOVCircle: true
24    };
25
26    // Game state
27    let players = [];
28    let localPlayer = null;
29    let canvas = null;
30    let overlayCanvas = null;
31    let ctx = null;
32
33    // Initialize
34    async function init() {
35        console.log('[Veck.io Aimbot] Initializing...');
36        
37        // Load saved config
38        const savedConfig = await GM.getValue('veckio_config', null);
39        if (savedConfig) {
40            config = { ...config, ...JSON.parse(savedConfig) };
41        }
42
43        // Wait for game canvas
44        waitForCanvas();
45        
46        // Create overlay
47        createOverlay();
48        
49        // Create control panel
50        createControlPanel();
51        
52        // Hook into Unity game
53        hookUnityGame();
54        
55        // Start render loop
56        requestAnimationFrame(renderLoop);
57        
58        console.log('[Veck.io Aimbot] Initialized successfully');
59    }
60
61    function waitForCanvas() {
62        const checkCanvas = setInterval(() => {
63            canvas = document.querySelector('#unity-canvas');
64            if (canvas) {
65                console.log('[Veck.io Aimbot] Game canvas found');
66                clearInterval(checkCanvas);
67            }
68        }, 1000);
69    }
70
71    function createOverlay() {
72        // Create overlay canvas
73        overlayCanvas = document.createElement('canvas');
74        overlayCanvas.id = 'veckio-overlay';
75        overlayCanvas.style.cssText = `
76            position: absolute;
77            top: 0;
78            left: 0;
79            width: 100%;
80            height: 100%;
81            pointer-events: none;
82            z-index: 9999;
83        `;
84        
85        const container = document.querySelector('#unity-container');
86        if (container) {
87            container.style.position = 'relative';
88            container.appendChild(overlayCanvas);
89            
90            // Match canvas size
91            const resizeObserver = new ResizeObserver(() => {
92                if (canvas) {
93                    overlayCanvas.width = canvas.width;
94                    overlayCanvas.height = canvas.height;
95                }
96            });
97            resizeObserver.observe(container);
98            
99            ctx = overlayCanvas.getContext('2d');
100            console.log('[Veck.io Aimbot] Overlay created');
101        }
102    }
103
104    function createControlPanel() {
105        const panel = document.createElement('div');
106        panel.id = 'veckio-control-panel';
107        panel.innerHTML = `
108            <div style="background: rgba(0, 0, 0, 0.9); color: white; padding: 15px; border-radius: 8px; font-family: Arial; font-size: 12px; min-width: 200px;">
109                <h3 style="margin: 0 0 10px 0; font-size: 14px; color: #00ff00;">Veck.io Aimbot & ESP</h3>
110                <div style="margin-bottom: 8px;">
111                    <label style="display: flex; align-items: center; cursor: pointer;">
112                        <input type="checkbox" id="esp-toggle" ${config.espEnabled ? 'checked' : ''} style="margin-right: 8px;">
113                        <span>ESP (Wallhack) [G]</span>
114                    </label>
115                </div>
116                <div style="margin-bottom: 8px;">
117                    <label style="display: flex; align-items: center; cursor: pointer;">
118                        <input type="checkbox" id="aimbot-toggle" ${config.aimbotEnabled ? 'checked' : ''} style="margin-right: 8px;">
119                        <span>Aimbot [H]</span>
120                    </label>
121                </div>
122                <div style="margin-bottom: 8px;">
123                    <label style="display: flex; align-items: center; cursor: pointer;">
124                        <input type="checkbox" id="fov-toggle" ${config.showFOVCircle ? 'checked' : ''} style="margin-right: 8px;">
125                        <span>Show FOV Circle</span>
126                    </label>
127                </div>
128                <div style="margin-bottom: 8px;">
129                    <label style="display: block; margin-bottom: 4px;">Aimbot FOV: <span id="fov-value">${config.aimbotFOV}</span></label>
130                    <input type="range" id="fov-slider" min="50" max="500" value="${config.aimbotFOV}" style="width: 100%;">
131                </div>
132                <div style="margin-bottom: 8px;">
133                    <label style="display: block; margin-bottom: 4px;">Smoothing: <span id="smooth-value">${config.aimbotSmoothing}</span></label>
134                    <input type="range" id="smooth-slider" min="0.1" max="1" step="0.1" value="${config.aimbotSmoothing}" style="width: 100%;">
135                </div>
136                <div style="margin-top: 10px; padding-top: 10px; border-top: 1px solid #333; font-size: 10px; color: #888;">
137                    <div>Players detected: <span id="player-count" style="color: #00ff00;">0</span></div>
138                </div>
139            </div>
140        `;
141        panel.style.cssText = `
142            position: fixed;
143            top: 20px;
144            right: 20px;
145            z-index: 10000;
146            pointer-events: auto;
147        `;
148        document.body.appendChild(panel);
149
150        // Event listeners
151        document.getElementById('esp-toggle').addEventListener('change', async (e) => {
152            config.espEnabled = e.target.checked;
153            await saveConfig();
154        });
155
156        document.getElementById('aimbot-toggle').addEventListener('change', async (e) => {
157            config.aimbotEnabled = e.target.checked;
158            await saveConfig();
159        });
160
161        document.getElementById('fov-toggle').addEventListener('change', async (e) => {
162            config.showFOVCircle = e.target.checked;
163            await saveConfig();
164        });
165
166        document.getElementById('fov-slider').addEventListener('input', async (e) => {
167            config.aimbotFOV = parseInt(e.target.value);
168            document.getElementById('fov-value').textContent = config.aimbotFOV;
169            await saveConfig();
170        });
171
172        document.getElementById('smooth-slider').addEventListener('input', async (e) => {
173            config.aimbotSmoothing = parseFloat(e.target.value);
174            document.getElementById('smooth-value').textContent = config.aimbotSmoothing;
175            await saveConfig();
176        });
177
178        // Keyboard shortcuts
179        document.addEventListener('keydown', async (e) => {
180            if (e.key === 'g' || e.key === 'G') {
181                e.preventDefault();
182                config.espEnabled = !config.espEnabled;
183                document.getElementById('esp-toggle').checked = config.espEnabled;
184                await saveConfig();
185                console.log('[Veck.io Aimbot] ESP:', config.espEnabled ? 'ON' : 'OFF');
186            } else if (e.key === 'h' || e.key === 'H') {
187                e.preventDefault();
188                config.aimbotEnabled = !config.aimbotEnabled;
189                document.getElementById('aimbot-toggle').checked = config.aimbotEnabled;
190                await saveConfig();
191                console.log('[Veck.io Aimbot] Aimbot:', config.aimbotEnabled ? 'ON' : 'OFF');
192            }
193        });
194
195        console.log('[Veck.io Aimbot] Control panel created');
196    }
197
198    async function saveConfig() {
199        await GM.setValue('veckio_config', JSON.stringify(config));
200    }
201
202    function hookUnityGame() {
203        // Hook into Unity's WebGL memory to find player data
204        // This is a simplified version - real implementation would need to reverse engineer the game
205        console.log('[Veck.io Aimbot] Hooking into Unity game...');
206        
207        // Simulate player detection for demonstration
208        setInterval(() => {
209            // In a real implementation, this would read from Unity's memory
210            // For now, we'll create mock players for testing
211            players = generateMockPlayers();
212            updatePlayerCount();
213        }, 100);
214    }
215
216    function generateMockPlayers() {
217        // Mock player data for testing
218        // In production, this would come from Unity memory
219        const mockPlayers = [];
220        const numPlayers = Math.floor(Math.random() * 5) + 2;
221        
222        for (let i = 0; i < numPlayers; i++) {
223            mockPlayers.push({
224                id: i,
225                name: `Player${i}`,
226                position: {
227                    x: Math.random() * (overlayCanvas?.width || 800),
228                    y: Math.random() * (overlayCanvas?.height || 600),
229                    z: Math.random() * 100
230                },
231                health: Math.random() * 100,
232                isEnemy: true,
233                distance: Math.random() * 100
234            });
235        }
236        
237        return mockPlayers;
238    }
239
240    function updatePlayerCount() {
241        const countElement = document.getElementById('player-count');
242        if (countElement) {
243            countElement.textContent = players.length;
244        }
245    }
246
247    function renderLoop() {
248        if (!ctx || !overlayCanvas) {
249            requestAnimationFrame(renderLoop);
250            return;
251        }
252
253        // Clear canvas
254        ctx.clearRect(0, 0, overlayCanvas.width, overlayCanvas.height);
255
256        // Draw FOV circle
257        if (config.showFOVCircle && config.aimbotEnabled) {
258            drawFOVCircle();
259        }
260
261        // Draw ESP
262        if (config.espEnabled) {
263            drawESP();
264        }
265
266        // Process aimbot
267        if (config.aimbotEnabled) {
268            processAimbot();
269        }
270
271        requestAnimationFrame(renderLoop);
272    }
273
274    function drawFOVCircle() {
275        const centerX = overlayCanvas.width / 2;
276        const centerY = overlayCanvas.height / 2;
277
278        ctx.beginPath();
279        ctx.arc(centerX, centerY, config.aimbotFOV, 0, Math.PI * 2);
280        ctx.strokeStyle = 'rgba(255, 255, 255, 0.3)';
281        ctx.lineWidth = 2;
282        ctx.stroke();
283
284        // Draw crosshair
285        ctx.beginPath();
286        ctx.moveTo(centerX - 10, centerY);
287        ctx.lineTo(centerX + 10, centerY);
288        ctx.moveTo(centerX, centerY - 10);
289        ctx.lineTo(centerX, centerY + 10);
290        ctx.strokeStyle = 'rgba(0, 255, 0, 0.8)';
291        ctx.lineWidth = 2;
292        ctx.stroke();
293    }
294
295    function drawESP() {
296        players.forEach(player => {
297            if (!player.isEnemy) return;
298
299            const x = player.position.x;
300            const y = player.position.y;
301            const width = 40;
302            const height = 60;
303
304            // Draw box
305            ctx.strokeStyle = config.espBoxColor;
306            ctx.lineWidth = 2;
307            ctx.strokeRect(x - width/2, y - height/2, width, height);
308
309            // Draw health bar
310            const healthBarWidth = width;
311            const healthBarHeight = 5;
312            const healthPercent = player.health / 100;
313
314            ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
315            ctx.fillRect(x - healthBarWidth/2, y - height/2 - 10, healthBarWidth, healthBarHeight);
316
317            ctx.fillStyle = healthPercent > 0.5 ? '#00ff00' : healthPercent > 0.25 ? '#ffff00' : '#ff0000';
318            ctx.fillRect(x - healthBarWidth/2, y - height/2 - 10, healthBarWidth * healthPercent, healthBarHeight);
319
320            // Draw name and distance
321            ctx.font = '12px Arial';
322            ctx.fillStyle = config.espColor;
323            ctx.textAlign = 'center';
324            ctx.fillText(player.name, x, y - height/2 - 15);
325            ctx.fillText(`${Math.floor(player.distance)}m`, x, y + height/2 + 15);
326
327            // Draw line to player
328            ctx.beginPath();
329            ctx.moveTo(overlayCanvas.width / 2, overlayCanvas.height);
330            ctx.lineTo(x, y);
331            ctx.strokeStyle = 'rgba(0, 255, 0, 0.3)';
332            ctx.lineWidth = 1;
333            ctx.stroke();
334        });
335    }
336
337    function processAimbot() {
338        const centerX = overlayCanvas.width / 2;
339        const centerY = overlayCanvas.height / 2;
340
341        let closestPlayer = null;
342        let closestDistance = Infinity;
343
344        // Find closest player within FOV
345        players.forEach(player => {
346            if (!player.isEnemy) return;
347
348            const dx = player.position.x - centerX;
349            const dy = player.position.y - centerY;
350            const distance = Math.sqrt(dx * dx + dy * dy);
351
352            if (distance < config.aimbotFOV && distance < closestDistance) {
353                closestDistance = distance;
354                closestPlayer = player;
355            }
356        });
357
358        // Aim at closest player
359        if (closestPlayer) {
360            const targetX = closestPlayer.position.x;
361            const targetY = closestPlayer.position.y;
362
363            // Draw target indicator
364            ctx.beginPath();
365            ctx.arc(targetX, targetY, 20, 0, Math.PI * 2);
366            ctx.strokeStyle = 'rgba(255, 0, 0, 0.8)';
367            ctx.lineWidth = 3;
368            ctx.stroke();
369
370            // In a real implementation, this would move the mouse/camera
371            // For Unity games, you'd need to hook into the camera rotation
372            console.log(`[Veck.io Aimbot] Targeting ${closestPlayer.name} at distance ${Math.floor(closestDistance)}px`);
373        }
374    }
375
376    // Start the extension
377    if (document.readyState === 'loading') {
378        document.addEventListener('DOMContentLoaded', init);
379    } else {
380        init();
381    }
382
383})();
Veck.io Aimbot & ESP | Robomonkey