"die Informationen die der Server hat liegen immer etwas in der Vergangenheit" sehr gefährlich. Wenn dann sollte der Server immer der "aktuelle" sein.
Jaein, der Server gibt vor wie es zu sein hat.
Ich gebe den P1 und P2 mal ein paar Namen um es zu veranschaulichen. P1 = Nox, P2 = Jar (schöne kurze Namen wie ich finde)
Erstmal generell was ich mit in Vergangenheit liegen meine:
Der Server bekommt Input von allen Clients zuzüglich Timestamps.
Der Server updatet den Status der Welt.
Der Server schickt das Ergebnis (in diskreten Zeitschritten) an die Clients.
Client macht Eingaben und diese werden lokal schon mal berechnet. (Client Side Predicicion)
Client bekommt update vom Server und synchronisiert den Status seiner Welt mit der des Servers und interpoliert gegeben falls Positionen.
Du als Spieler hast dadurch den Effekt, dass du selbst im Präsenz bist. Alle anderen Figuren sind aber in der Vergangenheit.
Jetzt kommt dein dein Szenario und die Lösung:
Nox schießt auf Jar (Nox schickt Schussinfos + Timestamp an den Server)
Server rekonstruiert sich die Position von Jar zum übergebenen Zeitpunkt.
Server guckt ob Jar getroffen wurde. --> Wenn ja, Jar bekommt keine Schaden... ist ja sein Spiel
Jar schießt zur selben Zeit auf Nox (Jar schickt Schussinfos + Timestamp an den Server)
Server rekonstruiert sich die Position von Nox zum übergebenen Zeitpunkt.
Server guckt ob Nox getroffen wurde. --> Wenn ja, Nox bekommt Schaden.
...äquivalent läuft das Springen ab.
Der Server muss dafür natürlich einige Zeitschritte in die Vergangenheit gucken können (das habe ich vielleicht nicht erwähnt).
Genauso muss der Client in die Vergangenheit gucken können um mögliche Rücksetzungen des Servers 'smooth' zu interpolieren.
(Hacker läuft mit 1000 km/h, Server sagt Nö --> Hacker wird 'smooth' zurückgesetzt)