Chi esegue i calcoli AI in un MMO?


30

Sto creando un MMO e voglio aggiungere NPC. Il fatto è che non conosco il design di base. Cosa fanno i calcoli, i client o il server? Comprenderei il server che calcola gli eventi e le reazioni, ma quando si tratta di pathfinding, posizione e movimento del giocatore, chi lo calcola?

Chi calcola l'IA il server o il client? Non riuscivo a immaginare il server che calcolasse il percorso, la posizione, il movimento e così via. Per favore, ho bisogno di aiuto per capirlo, grazie, tutto sarà d'aiuto.


2
Attento alla tua terminologia: gli NPC non sono giocatori, per esempio.
Kylotan,

Risposte:


25

La maggior parte degli MMO in questi giorni ha fatto qualcosa di importante sul lato server, per motivi di sicurezza. Non è possibile scaricare molto sul client, motivo per cui una delle prime cose assecondate sono le routine AI. Penso che la maggior parte degli sviluppatori consideri il lato client come hackerabile come una regola, non un'eccezione.

Badify di Scalify ( http://www.scalify.com/badumna.php ) tenta di scaricare parte di esso sui client in quanto avranno i calcoli eseguiti sul lato client e inviati l'un l'altro; alcuni dati vengono inoltre inviati a un peer autorevole per essere convalidati prima di essere passati ai client, proprio come un server dedicato. Il problema è che TUTTI i dati in una partita multiplayer DEVONO essere inviati attraverso un pari autorevole se si desidera evitare l'inganno. Ho cresciuto Badumna perché mi sembrava il più vicino a ciò che potevi desiderare, ma anche quello non sarebbe stato in grado di catturare gli imbroglioni - potrebbe catturarne alcuni, ma qualsiasi cosa critica (cioè tutto, praticamente) deve essere fatta server- lato.

Potrei espanderne un po 'su Badumna, perché potrebbe essere comunque qualcosa che troverai utile (ma ti esorto a riconsiderare lo scaricamento di qualsiasi cosa importante sui client, perché i client tradiranno).

Badumna offre un'architettura ibrida per le operazioni sui dati. Fornisce il controllo completo allo sviluppatore nel decidere cosa è critico (e deve essere verificato) e cosa non lo è (e quindi può essere inviato dalla rete decentralizzata).

Se un MMO richiede che ogni singolo bit di informazioni debba essere verificato, Badumna funzionerà come una soluzione client-server. Tuttavia, credo che ci siano diverse categorie di applicazioni MMO con requisiti diversi. Ad esempio, abbastanza spesso un MMO avrà zone di combattimento in cui è probabile che i giocatori imbrogliano e quindi ogni bit di informazione deve essere verificato. Tuttavia, ci sono anche zone in cui i giocatori possono solo camminare / correre / ballare / chattare. Tali zone non richiedono una verifica completa e possono utilizzare la rete decentralizzata di Badumna e trarre vantaggio dalla scalabilità che può offrire.

In secondo luogo, Badumna fornisce funzionalità di sicurezza aggiuntive a cui gli sviluppatori possono accedere come la protezione dell'identità (in modo che gli utenti non possano fingere di essere qualcun altro), proxy dei reclami (che consente ai client di essere configurati per segnalare giocatori malintenzionati / imbroglioni a una fonte attendibile) e una lista nera (vietando ai giocatori malintenzionati di giocare).

Non ho esplorato così tanto Badumna, quindi potrebbero esserci problemi e caratteristiche di cui non sono a conoscenza, ma almeno ho dato un'occhiata superficiale.

tl; dr: il client dovrebbe davvero essere solo una tastiera e un mouse collegati a Internet.


9

La risposta breve è che per un MMO standard, i calcoli AI vengono sempre eseguiti dal server.

Alcuni giochi faranno tentare al cliente di prevedere l'intelligenza artificiale, in modo che gli NPC sembrino reagire più rapidamente, ma questa è solo un'illusione; il vero NPC è sempre controllato dal server.


5

Un MMO è un server pubblico (Internet). Qualunque cosa tu voglia essere in grado di controllare completamente non dovrebbe essere accessibile al pubblico, altrimenti rischi di consentire a un utente malintenzionato di controllare gli NPC. A meno che tu non stia eseguendo una sorta di crittografia sui tuoi comandi (che influirà sulle prestazioni), non puoi fidarti del client che esegue solo il tuo codice.

Prevedere i movimenti degli NPC sul client per compensare il ritardo è un'ottima idea; potresti teoricamente includere tutto il comportamento dell'IA che desideri nel programma client e farli sincronizzare periodicamente, ma consentire al cliente di dettare il comportamento di un NPC garantirebbe al cliente il potenziale di confondere il mondo di gioco. Se il client si sincronizza dal mondo di gioco sul server, finirai con NPC canaglia incontrollabili.

Il che è davvero un peccato, perché la distribuzione dell'IA sui client potrebbe influire sulla scalabilità.


2
La crittografia è per lo più inutile: il client deve essere in grado di decrittografare qualsiasi cosa gli venga inviata e il client può essere decodificato. Nella migliore delle ipotesi, la crittografia rallenta qualcuno che crea un client imbroglione.
Adam,

2

Di solito il server dovrebbe calcolare o convalidare tutti i dati passati o ricevuti dal client. Ma dipende da quanto puoi fidarti del cliente e da quanto sia importante quel calcolo. A volte il calcolo principale potrebbe essere eseguito sul client e il server potrebbe essere in grado di utilizzare un metodo semplice per convalidare i dati risultanti.


1

Per basarsi sulle altre risposte, la strategia di "scarico e verifica" potrebbe effettivamente essere utile, in situazioni in cui la verifica è più semplice del calcolo originale (o dove sarebbero sufficienti solo controlli a campione occasionali per catturare gli imbroglioni).

Ad esempio, se il client eseguisse la ricerca del percorso A * e inviasse i risultati al server, tutto ciò che il server dovrebbe fare è verificare che a) il percorso sia valido e b) non sia presente un percorso più breve. Il controllo della validità del percorso dovrebbe essere facile e il controllo dell'ottimalità potrebbe essere più semplice rispetto alla ricerca del percorso ottimale per iniziare, poiché ora hai un limite superiore sulla lunghezza dei percorsi che devi controllare. (In particolare, se il cliente restituisce un percorso rettilineo, è ovviamente ottimale fintanto che è valido.) Ad essere sincero, non ho idea se questo particolare trucco sarebbe utile nella pratica, ma non vedo alcun ostacolo fondamentale ad esso.

Si noti, tuttavia, che se si scarica l'IA NPC sui client, un client compromesso potrebbe potenzialmente utilizzarlo per prevedere in anticipo il comportamento dell'NPC. Per alcuni tipi di giochi o situazioni questo potrebbe essere un problema serio.


1

Probabilmente è meglio avere alcune semplici routine AI e calcoli critici per il gioco sul lato server, mentre si gestiscono le complesse operazioni non critiche sul lato client.

Ad esempio, il server sa dove si trova un NPC ostile e dove si trovano i personaggi del giocatore. Quando il personaggio del giocatore si trova nel raggio d'azione dell'NPC, è possibile eseguire un calcolo sul lato server per vedere se l'NPC dovrebbe attaccare il giocatore, e un semplice instradamento del percorso può essere fatto per determinare quanto tempo impiegherà l'NPC a raggiungere il giocatore.

Una volta che l'NPC è stato trasferito allo stato di attacco, il client può gestire l'animazione e la ricerca di percorsi dettagliati. Quando l'NPC è abbastanza vicino al client per attaccare, il server può eseguire calcoli per vedere se l'attacco ha colpito, qual è stato il danno, ecc ...

Ti consigliamo di assicurarti che tutti i calcoli che incidono realmente sull'esito del gioco siano gestiti dal server e passati al client, mentre i calcoli non critici sono gestiti dal client.

Nel caso più semplice manterrai il client in sincronia con dove si aspetta che si trovi il server, il server verificherà, quindi il client calcolerà di nuovo.

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.