print("Script iniziato") import time time.sleep(5) # Attendi 5 secondi print("Script in esecuzione...") import time import random import math import pyautogui import numpy as np from pynput import keyboard from collections import deque # Con
Riscrivere e migliorare il tuo codice di tracciamento richiede la considerazione di diversi aspetti, tra cui l'ottimizzazione delle funzionalità e la correzione di errori esistenti. Di seguito, fornirò una versione migliorata del tuo codice e spiegherò come farlo funzionare.
### Codice migliorato:
```python
import time
import random
import math
import pyautogui
import numpy as np
from pynput import keyboard
from collections import deque
# Configurazione delle dimensioni della mappa e dello schermo
MAP_WIDTH = 8100 # Dimensione della mappa Fortnite in metri (esempio)
MAP_HEIGHT = 8100
SCREEN_WIDTH, SCREEN_HEIGHT = pyautogui.size()
# Imposta il FPS per il movimento
UPDATE_RATE = 0.05
class AimAssistBot:
def __init__(self):
# Abilita il bot
self.running = True
# Configurazioni (tuning)
self.turn_smoothing = 0.4 # 0.0 = scatto, 1.0 = liscio
self.prediction_factor = 0.8 # Moltiplicatore per la previsione
self.target_focus_time = 1 # Tempo di messa a fuoco del bersaglio in secondi
# Elenco dei "bersagli" simulati
self.targets = deque()
# Ascolta i tasti di scelta rapida
self.listen_for_hotkeys()
print("[INFO] Aim Assist Bot inizializzato. Premi '=' per rivelare, '-' per nascondere, ESC per chiudere.")
def add_target(self, x, y, speed=250):
"""Aggiunge un bersaglio al sistema di tracciamento"""
map_x = (x / SCREEN_WIDTH) * MAP_WIDTH
map_y = (y / SCREEN_HEIGHT) * MAP_HEIGHT
self.targets.append({
'map_x': map_x,
'map_y': map_y,
'speed': speed,
'direction': random.uniform(0, 360),
'positions': deque(maxlen=5) # Storico delle posizioni
})
def update_targets(self):
"""Aggiorna la posizione dei bersagli"""
deleted_indices = []
for idx, target in enumerate(self.targets):
if target['positions']:
prev_pos = target['positions'][-1]
direction_change = random.uniform(-5, 5)
new_direction = (target['direction'] + direction_change) % 360
move_factor = target['speed'] * UPDATE_RATE # Viaggio in secondi
target['map_x'] += math.sin(math.radians(new_direction)) * move_factor
target['map_y'] += math.cos(math.radians(new_direction)) * move_factor
# Controllo dei bordi
target['map_x'] = max(0, min(MAP_WIDTH, target['map_x']))
target['map_y'] = max(0, min(MAP_HEIGHT, target['map_y']))
target['direction'] = new_direction
target['positions'].append((target['map_x'], target['map_y']))
if target['map_x'] < 0 or target['map_x'] > MAP_WIDTH or target['map_y'] < 0 or target['map_y'] > MAP_HEIGHT:
deleted_indices.append(idx)
for idx in sorted(deleted_indices, reverse=True):
if idx < len(self.targets):
del self.targets[idx]
def predict_target_position(self, target):
"""Predice la posizione futura di un bersaglio"""
if len(target['positions']) >= 2:
last_pos = target['positions'][-1]
prev_pos = target['positions'][-2]
delta_x = (last_pos[0] - prev_pos[0]) / UPDATE_RATE
delta_y = (last_pos[1] - prev_pos[1]) / UPDATE_RATE
predicted_x = last_pos[0] + delta_x * self.prediction_factor
predicted_y = last_pos[1] + delta_y * self.prediction_factor
return max(0, min(MAP_WIDTH, predicted_x)), max(0, min(MAP_HEIGHT, predicted_y))
else:
return target['map_x'], target['map_y']
def get_screen_position(self, map_x, map_y):
"""Trasforma le coordinate del territorio in posizioni dello schermo"""
screen_x = (map_x / MAP_WIDTH) * SCREEN_WIDTH
screen_y = (map_y / MAP_HEIGHT) * SCREEN_HEIGHT
return screen_x, screen_y
def move_mouse_to_target(self, screen_target_x, screen_target_y):
"""Muove il mouse verso il bersaglio"""
current_x, current_y = pyautogui.position()
dx = screen_target_x - current_x
dy = screen_target_y - current_y
distance = math.sqrt(dx**2 + dy**2)
max_speed = 800 # Pixels/second
move_factor = 1.0 if distance > 1000 else distance / 300
smoothed_dx = dx * self.turn_smoothing * move_factor
smoothed_dy = dy * self.turn_smoothing * move_factor
new_x = current_x + smoothed_dx
new_y = current_y + smoothed_dy
pyautogui.moveTo(new_x, new_y, _pause=False)
return distance < 10 # Vicino al bersaglio
def find_closest_target(self, current_mouse_pos):
"""Trova il bersaglio più vicino alla posizione attuale del mouse"""
closest_target = None
closest_distance = float('inf')
for target in self.targets:
pred_map_x, pred_map_y = self.predict_target_position(target)
target_screen_x, target_screen_y = self.get_screen_position(pred_map_x, pred_map_y)
dx = target_screen_x - current_mouse_pos[0]
dy = target_screen_y - current_mouse_pos[1]
distance = math.sqrt(dx**2 + dy**2)
if distance < closest_distance:
closest_distance = distance
closest_target = target
return closest_target
def listen_for_hotkeys(self):
"""Ascolta i tasti di scelta rapida"""
def on_press(key):
if key == keyboard.Key.esc:
self.running = False
# Se si desidera usare '=' e '-' per mostrare/nascondere i bersagli
# Avvia di ascolto
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
def run(self, target_count=5):
"""Avvia il bot e simula il tracciamento"""
self.running = True
for _ in range(target_count):
random_x = random.randint(100, SCREEN_WIDTH-100)
random_y = random.randint(100, SCREEN_HEIGHT-100)
self.add_target(random_x, random_y, speed=random.randint(200, 400))
try:
while self.running:
self.update_targets()
if self.targets:
current_mouse = pyautogui.position()
closest_target = self.find_closest_target(current_mouse)
if closest_target:
pred_map_x, pred_map_y = self.predict_target_position(closest_target)
target_screen_x, target_screen_y = self.get_screen_position(pred_map_x, pred_map_y)
if self.move_mouse_to_target(target_screen_x, target_screen_y):
print(f"Mirando bersaglio in posizione: ({target_screen_x:.1f}, {target_screen_y:.1f})")
time.sleep(self.target_focus_time)
time.sleep(UPDATE_RATE)
except KeyboardInterrupt:
self.running = False
print("Bot fermato dall'utente")
if __name__ == "__main__":
bot = AimAssistBot()
bot.run(target_count=5)
```
### Spiegazione delle funzionalità:
1. **Configurazioni e Ottimizzazioni**:
- Ho corretto il metodo `__init__()` per utilizzare `__init__` in modo appropriato.
- Ho aggiunto opzioni di `target_focus_time` per specificare quanto tempo il bot dovrebbe restare concentrato su ciascun bersaglio.
2. **Aggiunta di Bersagli**:
- Il metodo `add_target()` ora modifica correttamente le coordinate degli bersagli dalla posizione dello schermo alle coordinate della mappa.
3. **Predizione della Posizione**:
- La logica di previsione è stata migliorata per utilizzare una validazione piu’ robusta per l'aggiornamento della posizione del bersaglio.
4. **Movimento del Mouse**:
- Il movimento del mouse è implementato in modo da simulare il comportamento umano, con una funzione di smussamento per rendere il movimento più fluido.
5. **Ascolto dei Tasti**:
- Ho mantenuto la funzionalità di ascolto per le pressioni dei tasti, permettendo la chiusura del bot con il tasto ESC.
### Come farlo funzionare:
1. **Installazioni necessarie**:
- Assicurati di avere le librerie necessarie installate. Puoi usarlo tramite pip:
```
pip install pyautogui pynput numpy
```
2. **Esegui il codice**:
- Salva il codice in un file Python (es. `aim_assist_bot.py`) e poi eseguilo nel tuo terminale:
```
python aim_assist_bot.py
```
3. **Controllo**:
- Usa `ESC` per uscire dal programma. Questa funzionalità aiuta a controllare il flusso del bot durante le prove.
### Nota Importante:
Questo codice viene fornito solo a scopo educativo. L'uso di bot o strumenti di assistenza automatica nel contesto di giochi o piattaforme online può violare i termini di servizio del gioco, ed è pertanto raccomandato astenersi dall’utilizzare sistemi di auto-aim in giochi online competitivi. Assicurati di rispettare le regole e le linee guida della piattaforma su cui stai operando.


