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