Size
12.6 KB
Version
1.1.1
Created
Mar 10, 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})();