In che modo i robot di gioco percepiscono il mondo di gioco e altre entità?


52

Questa domanda è stata nella mia mente per un po '... principalmente perché vedo robot per tutti i tipi di giochi come WoW e altri. La mia domanda è; come fanno i robot a sapere cosa appare sullo schermo? Non gioco a WoW quindi il mio esempio potrebbe essere sbagliato ma se per esempio c'è un mostro, come fa il bot a sapere dove si trova quel mostro sullo schermo e come fa a interagire con esso?

Puoi applicarlo a qualsiasi gioco o è specifico per ogni gioco? Mi dispiace se la domanda non è chiara ... e non sto chiedendo come creare un bot, più chiedendo come rilevano le cose sullo schermo perché è abbastanza affascinante per me!

Grazie in anticipo :)


14
Il più delle volte, questi robot si agganciano alla memoria del gioco e leggono direttamente la posizione dell'elemento di gioco, invece di cercare di capire cosa c'è sullo schermo.
Alexandre Desbiens,

2
Aceboy1993, sei un programmatore? Modifica la domanda e facci sapere in entrambi i modi. Probabilmente le risposte devono essere fatte in modo leggermente diverso, a seconda di ciò.
Panzercrisis,

3
Giusto per essere chiari; stai parlando di automazione non integrata del gameplay, giusto? Robot per la coltivazione dell'oro, pali della mira e simili? O intendi solo giocatori AI?
Anko,

Ciao, sono un programmatore. Sì, sto parlando di robot per la coltivazione dell'oro e robot di mira, ma sono anche interessato ai giocatori di intelligenza artificiale :)
TheRapture87

3
@ Aceboy1993 Coprendo entrambi renderebbe questa domanda troppo ampia. Per favore, dividili.
Mast

Risposte:


77

Ci sono molti punti in cui un bot può inserirsi nel gioco.

  • Lo schermo è uno di questi, ma di gran lunga non il più utile. Tuttavia, una volta ho visto un obiettivo molto presto per Counter Strike che utilizzava la codifica a colori. È arrivato con modelli di personaggi alternativi con trame a un colore (il gioco era abbastanza adatto al modding per consentirlo) e poi ha appena rilevato pixel di quei colori. Tuttavia, non è un metodo molto efficace. All'epoca era già piuttosto ingombrante e diventa sempre meno praticabile perché i motori grafici diventano sempre più potenti, il che significa sempre più dettagli per confondere eventuali algoritmi di riconoscimento ottico.

  • Un altro punto è leggere direttamente la memoria [1] . È possibile avere un programma sul tuo computer per leggere la memoria di un altro. Quindi lo sviluppatore deve solo scoprire a quale indirizzo di memoria il gioco sta salvando le informazioni rilevanti per il bot. Esistono strumenti che aiutano lo sviluppatore a trovare ciò che vogliono creando un'immagine di memoria e fornendo vari strumenti di ricerca. Una contromisura consiste nell'utilizzare la randomizzazione del layout dell'indirizzo, ma uno smart bot potrebbe essere ancora in grado di trovare automaticamente ciò che stanno cercando.

  • È possibile modificare il file eseguibile stesso. Per fare ciò, gli sviluppatori di bot devono essere in grado di leggere e programmare in assembler, il che non è poi così difficile con un po 'di pratica. Quindi cercano il codice che gestisce le informazioni a cui sono interessati e lo riscrivono per passarlo al proprio bot. Una possibile contromisura dal punto di vista dello sviluppatore del gioco consiste nell'utilizzare un offuscatore per rendere meno leggibile il codice dell'assemblatore del gioco, ma questi di solito non sono buoni per le prestazioni e ci sono strumenti per molti offuscatori che invertono il loro lavoro.

  • E poi c'è il netcode. In un gioco online, il server invia le proprietà e le posizioni di tutti gli oggetti nel gioco tramite la rete. Il flusso di dati di rete tra server e client può essere intercettato e analizzato. Uno strumento popolare per farlo è WireShark. Quando lo sviluppatore ha decodificato il netcode, può scrivere un bot che intercetta il traffico di rete proprio come fa Wireshark e usa le informazioni per prendere la sua decisione. Quando lo sviluppatore è più motivato, può persino sviluppare da zero un client di gioco completo che implementa il protocollo di rete e gioca senza nemmeno avere un output grafico. Tali robot sono molto popolari tra i coltivatori di oro perché senza l'output grafico il client è di solito molto più efficiente in termini di risorse, il che significa che possono eseguirne molti contemporaneamente su un piccolo server.


1: da quando hai citato WoW, vale la pena sottolineare che il primo e famigerato programma di botting WoWGlider utilizzava l'accesso diretto alla memoria. Blizzard aveva un sottoprogramma chiamato Warden che era progettato per rilevare e impedire ai programmi esterni di accedere allo stato di gioco interno di WoW. Poiché il programma bot ha aggirato questa protezione e letto la memoria senza permesso, la causa 2006 MDY v Blizzard è stata decisa a favore di Blizzard sulla base del fatto che il produttore di bot stava incoraggiando e consentendo ai suoi utenti di commettere una violazione del copyright e violare il DMCA .


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Josh

18

I robot sono giocatori. Leggono semplicemente le posizioni del giocatore / mostro dal server proprio come fanno tutti gli altri giocatori e usano quei valori combinati con un semplice script AI per eseguire azioni nel gioco simulando le battute della tastiera e i clic del mouse a livello di programmazione. Se i robot avessero effettivamente un algoritmo per rilevare quale mostro è sullo schermo e interagire con esso, sarebbe un software abbastanza impressionante che varrebbe milioni. Questo è fondamentalmente AI per i robot.


2
È più semplice eseguire alcuni controlli di occlusione e cast ray per verificare se il bot avrebbe visto il mostro e quindi utilizzare lo stato di animazione per verificare cosa sta facendo il mostro.
maniaco del cricchetto,

Per fare ciò, dovrai decodificare il gioco, implementare ray casting e leggere anche lo stato di animazione del mostro, che richiederebbe l'iniezione di codice e la modifica di .exe. In che modo è più semplice che leggere i pacchetti di rete che ricevi dal server (usando WireShark come suggerito da Phillip) e quindi semplicemente avere uno script AI per simulare le azioni di tastiera / mouse, basato sui pacchetti di rete?
dimitris93,

2
Stavo assumendo un bot "avversario AI" anziché un bot client modificato.
maniaco del cricchetto,

3
@ratchetfreak Oh ora ha senso. Il riferimento WoW nella domanda implica in realtà che i "robot" sono fondamentalmente coltivatori di oro, non avversari dell'IA.
dimitris93,

7

Phillip ha già fornito un'ottima panoramica di come funzionano la maggior parte dei robot, ma volevo solo coprire le cose in modo un po 'più dettagliato, dato che ho un po' di esperienza personale che si sviluppa su o per tutti i tipi di robot che ha coperto.

In Runescape, c'era un grande progetto (RSBot) che copiava il contenuto della memoria dal client Runescape nella sua memoria locale, dove poteva quindi visualizzare l'intero stato del gioco senza il rischio che il client prendesse piede. Richiedeva un po 'di reverse engineering per determinare dove cercare in memoria per trovare i puntatori ai dati, ma una volta che lo avevano fatto, hanno esposto un'API per sfruttare le informazioni. Saprebbe esattamente cosa si trovava nel mondo ottenendo le coordinate di un oggetto e poi trasformandole con la matrice di trasformazione della telecamera per ottenere la posizione sullo schermo. Le maschere di hit erano anche leggibili, quindi era banale determinare esattamente in quale intervallo spostare il mouse per ottenere il risultato desiderato.

Il bot ha fornito una serie di informazioni di debug, come le annotazioni che indicavano allo sviluppatore quali coordinate del riquadro sono dove, quale ID ha questo oggetto, quale ID appartiene a un determinato elemento, ecc. Queste informazioni potrebbero quindi essere utilizzate per creare robot. Il processo effettivo di creazione degli script dei bot era in realtà abbastanza semplice. Il framework forniva molte funzioni di utilità, come move_to(world_coordinates)o mouse_move(x,y)che avrebbero eseguito le azioni specificate in un modo abbastanza credibile (spostando il mouse lungo una spline casuale, spostandosi ripetutamente sia sulla minimappa che sullo schermo, e così via)

Anche in Runescape, hai la possibilità di ridurre drasticamente la qualità della grafica. In realtà è stato abbastanza facile creare alcuni tipi di robot filmando lo schermo e applicando alcuni concetti di base di visione artificiale al fine di costruire un modello del mondo. Ho creato sia una maledizione che una fusione utilizzando questa tecnica, che ha funzionato abbastanza bene. Prenderebbe semplicemente il fotogramma, aumenterebbe la saturazione il più possibile e quindi proverebbe a estrarre i pattern da esso che potrebbe quindi generare una mappa di probabilità per le zone di clic.

Nel caso del robot maledetto, il bersaglio era un demone minore, che è solo un'enorme cosa rossa, che è banale da trovare. Nel caso del robot da fusione, cercherebbe un piccolo trapezio arancione circondato dal grigio, e quella sarebbe la fornace. Proverebbe anche a trovare una grande forma a "L" grigio chiaro, che sarebbe la scrivania della banca. Ciò è stato appena fatto con il ridimensionamento e l'euristica di base. Potrebbe anche orientarsi con la pratica bussola accanto alla minimappa, quindi orientare la telecamera in una posizione più affidabile per trovare gli oggetti target.

In vari giochi Nexon, i server si fidano molto dei client. Ho abusato di questo in Maplestory modificando le mappe per rimuovere i pericoli o aggiungere orditi in modo che un robot non debba essere altrettanto sofisticato. Vorrei anche monitorare il traffico da e verso il server al fine di costruire un modello del mondo che possa quindi essere utilizzato per trovare e uccidere rapidamente i mostri.

Una volta capito che in realtà non giocavo più agli MMO e li ho semplicemente automatizzati, ho deciso di smettere del tutto di giocare. Se non fossi così preoccupato di espormi legalmente, avrei probabilmente potuto uccidere vendendo robot MMO, ma non volevo davvero essere denunciato. Questo è il motivo per cui passo il mio tempo a programmare veramente in questi giorni!


Amen all'ultimo paragrafo. Mi sono trovato a programmare 1) giocando a WoW 2) imbottigliando WoW 3) iniziando a scrivere il mio bot per WoW. Le conoscenze di programmazione che ho acquisito in soli 2 anni sono state più preziose di qualsiasi altra cosa ho imparato durante gli studi (beh, almeno per la programmazione "pratica").
Sebastian Graf,

2

La risposta di Phillip è ottima, ma solo una breve nota sul modello / vista / modello Controller o MVC in breve.

Lo schermo fa parte della "vista", che presenta i dati del "modello", che è lo stato reale del gioco, se lo desideri. I robot e il tuo personaggio "esistono" (in un certo senso) all'interno del modello. Immagina di aver scollegato lo schermo: il gioco continuerebbe anche se la vista è sparita.

In un gioco in rete, il concetto di "modello" è un po 'complicato, dato che in realtà hai molti modelli. Si dispone del modello sul server e quindi di un modello su ciascun client, che si aggiorna in parte a causa dei dati che riceve dal server. Potresti pensare al "modello" come a comprendere il modello del server e il modello del tuo cliente, oppure potresti considerarlo solo come il modello del tuo cliente. In entrambi i casi, è qui che vivono i robot. Quindi, le loro "percezioni", che potremmo usare come scorciatoia per il loro input e stato di dati, sono basate sullo stato del modello in quel momento e sull'interazione tra le diverse entità / oggetti all'interno di quel modello. In pratica, ogni bot potrebbe avere una funzione chiamata "refreshState" che viene eseguita una volta per frame o qualcosa del genere e che lo fa aggiornare '


0

Possono leggere i coords da un file o da un server ma anche con un sistema di rilevamento delle collisioni di raggi. È comune usare raggi che vanno dal robot (in quel caso) all'esterno di lui. Se il raggio si scontra con qualcosa, restituisce al bot alcune informazioni come se ciò che il raggio avesse trovato fosse un giocatore, un robot, un animale o un semplice muro. Questo perché nel caso del giocatore e del bot, ad esempio, hanno una capsula invisibile che li coinvolge interamente con informazioni sul suo tipo, ad esempio (umana, bot, ...). Con ciò possono evitare di schiantarsi con muri e altri eletti se ti stanno seguendo, per esempio.

È possibile visualizzare la parte Rilevamento collisioni di questa pagina


Ciò richiederebbe di inserire il codice nel gioco vero e proprio
dimitris93,

Sì, naturalmente. È tutto programmato ma è utile per percorsi liberi o casi come i robot che ti seguono e così via. Nei giochi 3D è il modo più comune in cui AFAIK ha studiato almeno quello che non è mmorp ... forse wow ha tutte le informazioni sul server ma è diverso in quanto è un grande mmorp.
Megasa3,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.