Come accennato, questo è impossibile, quindi proverei un altro approccio:
Se non si dispone di un server dedicato, eleggere un client partecipante per diventare l'host (questo può essere trasferito in caso di necessità).
L'host eseguirà ora tutte le logiche di gioco importanti, come il rilevamento dei colpi, i controlli AI, la gestione dell'inventario, ecc., Nonché il monitoraggio del tempo (ad esempio, il tempo di gioco dettato).
Gli altri client cercheranno semplicemente di rimanere sincronizzati con l'host, provando a stimare o approssimare il valore previsto. Se il ritardo aumenta o si verifica una perdita di pacchetti, le cose potrebbero diventare instabili, ma è banale recuperare il ritardo, essenzialmente solo aspettando il prossimo aggiornamento.
La maggior parte dei giochi (in particolare FPS) nasconde questo fatto facendo il proprio calcolo locale per i movimenti del giocatore, i colpi sparati, ecc. Per evitare che il gioco si senta ritardato. Tutto è ancora corretto in base ai dati del server. Ciò può creare confusione, ad esempio ti vedi sparare al nemico, ma nello stesso momento in cui cadi morto (senza che il nemico subisca un colpo), ma è ancora un approccio molto migliore della sincronizzazione completa.
Se insisti ancora a mantenere tutto sincronizzato, probabilmente vorrai creare una sorta di contatore di passi o frame, quindi tutti i client elaborano solo un passo logico, quindi sincronizzando i loro dati, ecc. Tieni presente che questa può essere sia larghezza di banda intensivo e lento, quindi non consiglierei di farlo a meno che tu non abbia molti altri dati e il tuo gameplay è a turni (ad esempio giochi in stile artiglieria / vermi).