Wie bereits erwähnt, ist dies unmöglich, daher würde ich einen anderen Ansatz ausprobieren:
Wenn Sie keinen dedizierten Server haben, wählen Sie einen teilnehmenden Client als Host aus (dieser kann bei Bedarf übertragen werden).
Der Host führt nun alle wichtigen Spielelogiken wie Treffererkennung, KI-Steuerung, Inventarverwaltung usw. sowie Zeiterfassung (dh Diktieren der Spielzeit) aus.
Die anderen Clients versuchen lediglich, mit dem Host synchron zu bleiben und den erwarteten Wert zu schätzen oder zu approximieren. Wenn die Verzögerung zunimmt oder ein Paketverlust auftritt, werden die Dinge möglicherweise unruhig, aber es ist trivial, aufzuholen und im Wesentlichen nur auf das nächste Update zu warten.
Die meisten Spiele (insbesondere FPS) verbergen diese Tatsache, indem sie ihre eigene lokale Berechnung für die eigene Bewegung des Spielers, abgefeuerte Schüsse usw. durchführen, um zu vermeiden, dass sich das Spiel verzögert anfühlt. Alles wird immer noch basierend auf Serverdaten korrigiert. Dies kann zu Verwirrung führen, z. B. wenn Sie sehen, wie Sie den Feind erschießen, aber im selben Moment, in dem Sie tot umfallen (ohne dass der Feind einen Treffer erzielt), ist dies jedoch ein weitaus besserer Ansatz als die vollständige Synchronisierung.
Wenn Sie immer noch darauf bestehen, alles synchron zu halten, möchten Sie wahrscheinlich eine Art Schritt- oder Frame-Zähler erstellen, sodass alle Clients nur einen logischen Schritt verarbeiten und dann ihre Daten usw. synchronisieren. Beachten Sie, dass dies beide Bandbreiten sein können intensiv und verzögert, daher würde ich dies nicht empfehlen, es sei denn, Sie haben ansonsten viele Daten und Ihr Gameplay ist rundenbasiert (z. B. Spiele im Artillerie- / Worms-Stil).