Registriert seit: 10. Aug 2007
609 Beiträge
FreePascal / Lazarus
|
AW: [Client/Server]: Timer und Latenz-Kompensation
20. Aug 2010, 13:49
Was der Server weiß/wissen muss, hängt sehr stark vom Spiel ab.
Z.B. bei mmorpgs muss der Server ja wissen ob ein Spieler anfängt etwas zu casten, da andere Spieler dies sehen sollen und ihn ggf unterbrechen, usw.
Das jetzt ein Timer auf dem Server erzeugt wird, bezweifle ich. So wie ich es aus mmos kenn ist es so, dass alle Events beim Client berechnet und ausgeführt werden.
ZB sobald ein Spieler anfängt zu casten schickt er PLAYER_START_CAST_SKILL[73] an den Server. Sobald er erfolgreich den Cast ausgeführt hat, schickt er dann PLAYER_END_CAST_SKILL[73] bzw. PLAYER_ABORT_CAST_SKILL[73].
Der Server nimmt dann nur noch die Nachrichten entgegen, loggt+verteilt sie und prüft diese die Befehle zB auf Cheats. (zB damit nicht 100 mal nacheinander PLAYER_END_SKILL kommt ohne PLAYER_STARTS_CAST oder die Castzeit verändert wurde)
Eigentlich ist der Server immer so ausgelegt, dass er möglichst wenig Last hat, aber alles wichtige abfängt.
Achja und zur Latenz:
Da muss man im Spezialfall schaun was genommen wird. Entweder Servertime oder Clienttime. Bei Clienttime wird der Zeitpunkt der Aktion mitgesand.
Z.B.: Client fängt um 20:30:12 an zu casten. Der Befehl kommt um 20:30:13 beim Server an. Jetzt wird vsl die Serverzeit :13 genommen, da es sonst unfair gegenüber anderen Spielern wäre, die ne gute Latenzzeit haben.
Oftmals gibts auch so ein Zwichending, wie mans aus den alten Zeiten aus Guild Wars kennt. Da wird eine Bewegung beim Client gestartet und der Server ermittelt ein Mittelding aus Serverstart/Clientstart und passt dann den Charackter so an das es dem Client nichtmal auffällt, dass er jetzt 3 Pixel versetzt wurde.
Geändert von mleyen (20. Aug 2010 um 14:23 Uhr)
|