Sto realizzando un semplice MOBA solo per divertimento. Stavo realizzando tutto per giocatore singolo, poi ho capito "oh merda, probabilmente dovrei aggiungere il multiplayer, eh."
Non ho mai fatto nulla con il networking prima, quindi imparare a integrare Lidgren nel mio gioco è stato divertente e fantastico. Il fatto è che praticamente so che il modo in cui sto facendo le cose è sbagliato, perché non è abbastanza robusto per essere utilizzato dai giochi tradizionali, per quanto ne so, ma cosa c'è che non va?
Quello che sto facendo è, fondamentalmente, ogni volta che un giocatore fa un'azione, invia un messaggio al server dicendo "hey, ho appena fatto questa cosa". Il server e il client eseguono entrambi la stessa simulazione. Il server quindi invia un messaggio a tutti gli altri client dicendo loro che quel tipo ha fatto quella cosa.
Per la maggior parte, tranne in alcuni casi, quando un giocatore fa una cosa, il cliente assume che sia bello e lo fa da solo. Quindi, quando fai clic con il pulsante destro del mouse da qualche parte per spostarti lì, il client di quel giocatore inizia a spostare lì il suo ragazzo e quindi invia un messaggio al server raccontandolo.
Quindi in poche parole:
- Il giocatore 1 lancia un incantesimo per farlo muovere più velocemente del 100% per sei secondi
- Il client locale del giocatore 1 aggiunge quel buff al suo oggetto Unit
- Il client del giocatore 1 invia un messaggio al server dicendo "hey ho appena lanciato questo incantesimo"
- Il server si assicura che avesse davvero abbastanza mana per lanciare quell'incantesimo e, in tal caso, aggiunge quel buff alla copia del server dell'oggetto Unit
- Il server invia un messaggio a tutti gli altri client dicendo "hey questo ragazzo ha appena lanciato questo incantesimo"
- Ogni altro client riceve il messaggio e va "ah va bene," e aggiunge quel buff all'oggetto Unità locale per quel giocatore
Ho sfogliato le cose per vedere come i grandi giochi fanno il multiplayer, ed è un po 'confuso per qualcuno che sta appena iniziando a dilettarsi in queste cose, ma sembra che il motore di Source mandi un pacchetto contenente tutte le modifiche a tutto ciò che è nel mondo ogni tick? Ancora una volta, totalmente nuovo a questa roba, ma puoi davvero spingere così tanti dati così frequentemente?
Scusate se è un po 'sconclusionato, ma in sostanza, mi chiedevo perché il mio sistema più semplice non è la strada giusta da percorrere, perché se lo fosse, altri giochi lo userebbero, giusto?