2010-05-16 11 views
7

Un mio amico e io stavamo discutendo su come un server FPS aggiorna i client ad esso connessi. Abbiamo guardato uno video di un ragazzo che tradisce in Battlefield: Bad Company 2 e ho visto come ha evidenziato la posizione dei nemici sullo schermo e ci ha fatto riflettere.Quali sono le strategie generali per il server di un gioco multiplayer FPS per aggiornare i propri client?

La sua tesi era che il server aggiorna solo il client con informazioni che sono immediatamente rilevanti per il cliente. Cioè il server non invierà informazioni sui giocatori nemici se sono troppo lontani dal cliente o fuori dalla linea di vista del cliente per ragioni di efficienza. Tuttavia non era sicuro - ha riportato l'esempio di qualcuno che si nasconde dietro una roccia, non in grado di vedere nessuno. Se il giocatore dovesse improvvisamente comparire dove aveva tre giocatori nella sua linea di vista, ci sarebbe stato un ritardo di 50ms prima che venissero visualizzati sullo schermo mentre il server trasmetteva le informazioni necessarie.

La mia contesa era l'opposto: il server invia al client tutte le informazioni su ogni giocatore e consente al client di risolvere ciò che è consentito e ciò che non lo è. Immaginai che sarebbe stato meno costoso computazionalmente per il server semplicemente inviare tutto al client e lasciare che il client facesse il lavoro pesante, per così dire. Ho anche capito che questo è il modo in cui funzionano i programmi cheat: intercettano i pacchetti del server, ottengono la posizione dei nemici, quindi li mostrano sulla vista del cliente.

Quindi la domanda: quali sono alcune politiche o strategie generali che un server di sparatutto in prima persona moderno impiega per mantenere aggiornati i propri clienti?

risposta

11

È un compromesso tra la tua posizione e la posizione del tuo amico, e ogni gioco prenderà una decisione leggermente diversa su questo per ottenere il trade-off desiderato. Il server potrebbe provare a non inviare più informazioni di quelle necessarie, ad es. eseguire il controllo della distanza, ma invierà inevitabilmente alcune informazioni che possono essere sfruttate, come l'invio della posizione di un nemico che si trova dietro una roccia, semplicemente perché è troppo costoso per il server calcolare ogni volta la linea di vista esatta e anche per il problema di latenza che dici.

In genere, i giochi FPS tendono a "perdere" più informazioni rispetto ad altri perché sono più interessati a un'esperienza di gioco fluida che richiede una velocità di aggiornamento più rapida e regolare. Inoltre, a differenza degli MMO, un giocatore FPS di solito è libero di spostarsi su un altro server se sta trovando il gioco rovinato da trucchi.

qualche lettura supplementare:

+0

Avete risorse online dove posso saperne di più? –

+2

Ho aggiunto alcuni collegamenti alla risposta. Imparo molto leggendo il forum Gamedev.net in particolare. – Kylotan

+1

Risorse eccellenti; in particolare Source Multiplayer Networking. Stavo per rispondere con quello. +1 – Leftium

3

La politica generale deve essere non fidarsi dei client, nel senso che lo sviluppatore dovrebbe assumere che chiunque sia in grado di riscrivere il client da zero.

Detto questo, penso che sia difficile evitare di inviare questo tipo di informazioni al cliente (e prevenire questo tipo di imbrogli). Anche se non esiste una linea di vista, potrebbe essere ancora necessario inviare posizioni (indirettamente) poiché i clienti potrebbero voler utilizzare un sistema surround-sound che richiede percorsi 3D di sorgenti sonore ecc.

+1

Purtroppo, * Dovrebbe Essere Terra * è una terra lontana, non rappresentativo della realtà. ;) –

+1

Il punto è ancora valido: tu non puoi fidarti dei clienti, perché le persone sfruttano questa fiducia per imbrogliare.Questo vale sia per dare al cliente più informazioni di quelle che dovrebbe conoscere e anche per ricevere comandi accurati (ad es. Il client dice al server che sta tagliando i muri). – Numeron

Problemi correlati