2010-04-29 15 views
28

Qualcosa che mi sono sempre chiesto, soprattutto dal momento che mi ha ispirato a iniziare a programmare da bambino, era come funzionano i robot dei videogiochi? Sono sicuro che ci sono molti metodi diversi, ma per quanto riguarda l'automazione per i MMORPG? O anche i bot di tipo FPS?Robot per videogiochi?

Sto parlando di robot di automazione creati dai giocatori.

+2

C'è una grande differenza tra i due tipi. Non ho alcuna esperienza in entrambi, ma sono abbastanza sicuro che i MMORPG stiano simulando l'input dell'utente (in realtà facendo clic su parti dello schermo o simulando pressioni dei tasti) dove i FPS che vengono con il gioco sono scritti dai programmatori del gioco e probabilmente hanno accesso ad ulteriori informazioni (come dove sono i muri in modo che non debbano schermare per capire se stanno sbattendo contro un muro) –

+8

'Attenzione!' Questa domanda sembra essere postata da un bot! Ci stanno spiando per vedere se li capiamo. ;-) Scherzi a parte, questa domanda è piuttosto "ampia e superficiale", non diversamente da alcune cose che riceviamo dai bot ... – mjv

risposta

41

Per "bot" un gioco, è necessario essere in grado di fare due cose a livello di codice: rilevare cosa sta succedendo nel gioco e fornire input al gioco.

Rilevare che cosa sta succedendo nel gioco tende ad essere il più difficile dei due. Alcuni metodi per fare questo sono:

  • Screen-Scraping Questa tecnica cattura l'immagine sullo schermo e lo analizza, alla ricerca di cose come i nemici, lo stato di giocatore, power-up, messaggi di gioco, orologi di tempo, ecc Questo tende essere un metodo particolarmente difficile.Le tecniche OCR possono essere utilizzate per elaborare il testo, ma se il testo è scritto in cima al mondo di gioco (anziché su un elemento dell'interfaccia utente con uno sfondo solido), lo sfondo in continua evoluzione può rendere difficile ottenere risultati accurati e coerenti. Trovare oggetti non di testo sullo schermo può essere ancora più difficile, specialmente nei mondi 3D, a causa delle numerose posizioni e orientamenti che possono esistere in un singolo oggetto.
  • Audio Cue In alcuni giochi, azioni ed eventi sono accompagnati da effetti sonori unici. È possibile rilevare questi eventi monitorando l'uscita audio del gioco e confrontandola con una registrazione dell'effetto sonoro associato. Alcuni giochi consentono al giocatore di fornire i propri effetti sonori per gli eventi, il che consente l'uso di effetti sonori progettati per essere facili da ascoltare e filtrare.
  • Monitoraggio memoria Se i meccanismi interni del gioco sono ben compresi, è possibile monitorare lo stato di un gioco controllando lo spazio di memoria del gioco. Alcuni trucchi per i sistemi di console (come lo Game Genie) utilizzano questo metodo. Rilevando la memoria che il gioco aggiorna, è possibile rilevare cosa sta facendo il gioco. Alcuni giochi randomizzano le posizioni di memoria che usano ogni volta che vengono lanciati nel tentativo di sventare questa vulnerabilità.
  • Analisi pacchetto Con i driver appropriati, è possibile intercettare i pacchetti di dati del gioco mentre vengono inviati o recuperati dalla scheda di rete (per i giochi giocati online). Analysis di questi pacchetti può rivelare ciò che il client di gioco sta comunicando al server, che di solito ruota attorno a azioni giocatore/nemico.
  • Game Scripting Alcuni giochi hanno un'interfaccia di scripting incorporata. Se disponibile, questo è di solito il metodo più semplice perché è qualcosa che il software di gioco è progettato per fare (i metodi precedenti sarebbero tutti considerati come "hack"). Alcuni script devono essere eseguiti in-game (tramite una console o un sistema aggiuntivo) e alcuni possono essere eseguiti da programmi esterni che comunicano attraverso il gioco tramite un'API pubblicata.

Generare nuovamente gli eventi di input nel gioco è in genere il compito più facile. Alcuni metodi includono:

  • memoria "frugando" Simile alla sezione di monitoraggio di memoria sopra, la memoria frugando è l'atto di scrittura dei dati direttamente nello spazio di memoria del gioco. Questo è il metodo utilizzato da Game Genie per applicare i suoi codici cheat. Data la complessità dei giochi moderni, questo è un compito molto difficile e può potenzialmente bloccare l'intero gioco.
  • Emulazione di input I segnali di tastiera o mouse "falsi" possono essere generati al posto dell'interazione diretta dell'uomo. Questo può essere fatto nel software usando strumenti come AutoIt. Si possono usare anche hack hardware, come i dispositivi che si collegano alla porta USB o PS/2 del computer e che appaiono come se fossero una tastiera, ma invece generano falsi eventi keypress basati su segnali ricevuti dal computer (ad esempio, su un porta seriale). Questi metodi possono essere più difficili da rilevare per i giochi.
  • Game Scripting Come accennato in precedenza, alcuni giochi offrono metodi incorporati per controllarlo a livello di programmazione, e l'utilizzo di tali strumenti è solitamente la tecnica più semplice (ma forse non la più potente).

Nota che eseguire un "bot" in un gioco è di solito una violazione dei Termini d'uso del gioco e può farti sospendere, vietare o peggio. In alcune giurisdizioni, questo può comportare sanzioni penali.Questo è un altro vantaggio per l'utilizzo delle funzionalità di scripting integrate di un gioco; se è progettato per far parte del software di gioco, l'editore del gioco probabilmente non vieterà di usarlo.

0

Si chiama AI (intelligenza artificiale) e in realtà non è così difficile da replicare, un insieme di regole e comandi nel linguaggio di programmazione del tuo gioco farà il trucco. Ad esempio un bot FPS funzionerebbe ottenendo le coordinate del corpo del tuo giocatore e impostando la pistola del tuo bot nemico per mirare a quella coordinata e iniziare a sparare quando si trova in un certo intervallo.

+0

Mi chiedo quali sono le tecniche per ottenere le coordinate effettive del corpo del tuo giocatore, ecc. t capisco come vorrei "collegare" il mio programma a un altro programma se non fornisce nulla per me per "connettersi" a. – cam

+0

@cam - nel caso di giochi di prima o terza persona (console o PC) l'intelligenza artificiale è incorporata nel codice di gioco in modo che abbia accesso a tutte le informazioni di gioco necessarie. Non sono sicuro dei MMORPG, ma sospetto che il codice AI sia nel motore del server di gioco. – ChrisF

+0

Ispezionare o altrimenti interferire con le operazioni di un altro programma non è il modo in cui vengono guidate le entità nei videogiochi. Generalmente c'è un programma che fa tutta la logica sulle proprie strutture dati interne. Certo, il programma può consistere di molti thread e processi, ma a ciascuno di essi i dati di cui hanno bisogno sono interni. –

10

Una volta ho scritto un semplice bot MMORPG da solo. Ho usato AutoHotkey.

  • Fornisce molti metodi per simulare l'input dell'utente: uno funzionerà. È noioso programmarne uno funzionante in C++ da soli (o esaminare la fonte di AutoHotkey).
  • Si può cercare direttamente la schermata per modelli di pixel, anche schermate di gioco (DirectX)

Quindi quello che ho fatto è stato quello di cercare la schermata per il nome di un nemico (memorizzato come immagine con font del gioco) e lo script fa clic su alcuni pixel sotto di esso per attaccare. Traccia anche la barra della salute e le pentole se è troppo bassa.

Molto trival. Ma so di un bot WoW che viene realizzato anche con AutoHotkey. E io see molte altre persone avevano la stessa idea (il mio non era per WoW, ma probabilmente anche illegale).

More advanced techniques non acquisire lo schermo ma direttamente read the game's memory. Devi fare molto lavoro di reverse engineering per farlo funzionare. E smette di funzionare quando il gioco viene aggiornato.

4

Come fa una persona a fare il proprio giorno per giorno?

Questo è il tipo di problema che risolve l'intelligenza artificiale nei giochi.

Che cosa vuoi che faccia la tua entità? Codice la tua entità per farlo. Se vuoi che il tuo mostro insegua l'avatar del giocatore, il mostro deve solo affrontare l'avatar e poi muoversi verso di esso. Quando quel mostro si trova a una distanza adeguata, può scegliere di mordere l'avatar del giocatore, e questa scelta può essere semplice come AmICloseEnough(monster, player); o più complessa o anche casuale.

I robot di un FPS sono difficili da ottenere perché è facile renderli perfetti ma non così facili da renderli divertenti. Per esempio. sanno sempre esattamente dove si trova il giocatore (gPlayer.GetPosition()), quindi è sempre facile sparare alla testa del giocatore ogni volta. Ci vuole un po 'di "arte" per far muovere il robot come un essere umano.

+0

Non so perché questo ha avuto un downvote. +1. –

+0

Non l'ho sottovalutato, ma ho pensato che non fosse troppo chiaro per alzare la voce. – Earlz

+0

Scusate se non è chiaro - non sono sicuro di come renderlo più chiaro però; la tua entità ha bisogno di un obiettivo, quindi il codice deve capire come raggiungere quell'obiettivo.Data la domanda (al momento) non c'è davvero una risposta migliore di quella. (Posso prendere downvotes ma fa schifo quando arrivano dopo che la domanda è stata modificata e il downvote è perché la risposta era per la versione precedente della domanda.) –

0

BTA ha dato una buona risposta. Volevo solo aggiungere che i diversi metodi sono sospettabili per diversi metodi di rilevamento da parte della società di gioco. L'hacking nel client di gioco tramite il monitoraggio della memoria o l'analisi dei pacchetti è generalmente più facilmente rilevabile. Generalmente non lo consiglio perché puoi farti prendere facilmente.

Lo screen-scraping utilizzato con l'emulazione di input è generalmente il modo più sicuro per eseguire il gioco e non farsi prendere. Molte persone (me compreso) lo fanno da anni senza problemi.

Inoltre, per aggiungere un ulteriore passaggio tra la rilevazione di ciò che accade nel gioco e l'immissione di dati, alcuni giochi richiedono un calcolo completo prima di poter decidere quale tipo di input fornire al gioco. Per esempio, c'era un gioco in cui dovevo calcolare il numero di navi da inviare quando attaccavo il nemico, e questo era basato sul numero di navi che avevo, sul tipo di navi, su chi e che tipo di nemico fosse. Il calcolo è generalmente la parte "facile" poiché è possibile farlo solitamente in quasi tutti i linguaggi di programmazione.

-1

Come vedo i robot sono veri e propri killer in vari giochi/industria del gioco d'azzardo. Gli hacker usano i robot per giocare per loro conto e questo costituisce un serio fattore di fiducia per gli altri umani che non entrano nelle pratiche scorrette. Come Ryan ha menzionato che i robot più intelligenti usano il raschia schermo, ma non sono d'accordo con lui sul fatto che i bot raschia schermo non possano essere catturati. Esistono più servizi di prevenzione dello scraping dello schermo che includono ShieldSquare.

Disclaimer: io sono uno dei co-fondatore di ShieldSquare

Problemi correlati