// ==UserScript== // @name Enhanced Aim Assist with Bounding Box // @namespace ViolentMonkey Scripts // @version 1.1 // @description Aims at detected players with bounding boxes around them (for educational use only) // @author You // @match https://www.xbox.com/en-US/play/launch/fortnite/BT5P2X999VH2 // @grant none // @downloadURL none // ==/UserScript== (async function() { 'use strict'; // Include TensorFlow.js and Coco-SSD model const scriptTensorFlow = document.createElement('script'); scriptTensorFlow.src = 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs'; document.head.appendChild(scriptTensorFlow); const scriptCocoSSD = document.createElement('script'); scriptCocoSSD.src = 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-models@2.1.0/coco-ssd'; document.head.appendChild(scriptCocoSSD); // Wait for TensorFlow.js and Coco-SSD to load await new Promise(resolve => { scriptTensorFlow.onload = scriptCocoSSD.onload = resolve; }); // Configuration Settings const aimAssistConfig = { sensitivity: 0.5, // Sensitivity: Higher values = slower aim movement assistEnabled: false, // Whether aim assist is on or off toggleKeys: ['4', 't'], // Keys to toggle the assist on/off detectionInterval: 100, // Milliseconds between detections boxColor: 'rgba(0, 255, 0, 0.6)', // Color for the bounding box }; // Track key presses for toggling aim assist let keySequence = []; document.addEventListener("keydown", (e) => { keySequence.push(e.key.toLowerCase()); if (keySequence.slice(-2).join('') === aimAssistConfig.toggleKeys.join('')) { aimAssistConfig.assistEnabled = !aimAssistConfig.assistEnabled; console.log(`Aim assist ${aimAssistConfig.assistEnabled ? 'enabled' : 'disabled'}`); keySequence = []; } }); // Capture the game feed (assuming video element or canvas) const videoElement = document.querySelector('video'); // Modify if game uses a different element if (!videoElement) { console.error("Game video feed not found."); return; } // Initialize the canvas for object detection const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); document.body.appendChild(canvas); // Optional: to debug by showing canvas // Load the Coco-SSD model let model; try { model = await cocoSsd.load(); console.log("Coco-SSD model loaded."); } catch (error) { console.error("Error loading model: ", error); return; } // Object detection and aim assist loop async function aimAssistLoop() { if (aimAssistConfig.assistEnabled) { // Draw the video frame to the canvas canvas.width = videoElement.videoWidth; canvas.height = videoElement.videoHeight; context.drawImage(videoElement, 0, 0, canvas.width, canvas.height); // Detect objects in the frame const predictions = await model.detect(canvas); if (predictions.length > 0) { // Prioritize targets (e.g., prioritize persons/players) const target = prioritizeTargets(predictions); if (target) { // Draw bounding box around the detected player drawBoundingBox(target); // Simulate aiming at the target adjustAimToTarget(target); } } } setTimeout(aimAssistLoop, aimAssistConfig.detectionInterval); } // Prioritize the best target (filter relevant objects) function prioritizeTargets(predictions) { // Filter to get the player/people with high confidence score const target = predictions.find(pred => pred.class === 'person' && pred.score > 0.5); if (target) { return target; } return null; } // Draw a bounding box around the detected player function drawBoundingBox(target) { const [x, y, width, height] = target.bbox; context.strokeStyle = aimAssistConfig.boxColor; context.lineWidth = 3; context.beginPath(); context.rect(x, y, width, height); context.stroke(); } // Adjust aim by simulating mouse movement function adjustAimToTarget(target) { const [x, y, width, height] = target.bbox; const targetCenterX = x + width / 2; const targetCenterY = y + height / 2; // Calculate the adjustment needed to center the aim on the target const deltaX = targetCenterX - canvas.width / 2; const deltaY = targetCenterY - canvas.height / 2; // Apply sensitivity to the movement const newX = canvas.width / 2 + deltaX * aimAssistConfig.sensitivity; const newY = canvas.height / 2 + deltaY * aimAssistConfig.sensitivity; // Simulate the mouse movement to adjust the aim const mouseEvent = new MouseEvent('mousemove', { clientX: newX, clientY: newY, }); document.dispatchEvent(mouseEvent); console.log(`Aiming at target: (${newX}, ${newY})`); } // Start the detection loop aimAssistLoop(); })();