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