Netcode-Fallen: Nachrichten, die stumm verschwinden
- Marcel Dütscher
- 21. Juni
- 1 Min. Lesezeit
Aktualisiert: vor 5 Tagen
Multiplayer-Bugs sind eine eigene Gattung: Nichts stürzt ab, nichts loggt einen Fehler — es passiert einfach nichts. Zwei unserer liebsten Fallen aus dem eigenen Netzwerk-Code, als Warnung und Unterhaltung.
Falle 1: die unregistrierte Nachricht. Unser Netzwerkprotokoll kennt Nachrichtenklassen — „Block geändert", „Spieler bewegt", „Chat". Jede neue Nachrichtenart muss beim Codec registriert werden, damit sie eine ID bekommt und serialisiert werden kann. Vergisst man das, passiert das Schlimmstmögliche: Der Sendeaufruf schlägt fehl, aber an einer Stelle, an der der Fehler still geschluckt wird. Kein Absturz, kein Log — das Feature „geht einfach nicht". Wir haben das mehr als einmal debuggt, bis der Reflex saß: Neue Nachrichtenklasse? Erste Frage: Ist sie registriert?
Falle 2: der Geisterblock. Wenn der Server einen Block ändert — etwa weil ein Skript Terrain umbaut — muss er das allen verbundenen Spielern aktiv mitteilen. Vergisst man den Broadcast, entsteht ein Geisterblock: Der Server weiß, dass dort ein Block steht, der Client zeigt Luft. Der Spieler läuft gegen eine unsichtbare Wand — oder schlimmer, er baut an einer Stelle, die es serverseitig gar nicht mehr gibt. Erst ein Neu-Laden des Chunks bringt beide Welten wieder in Deckung.
Der gemeinsame Nenner: Im Multiplayer gibt es immer zwei Wahrheiten — die des Servers und die des Clients — und jede Stelle, die beide synchron halten muss, ist eine potenzielle Falle. Unsere Konsequenz waren Tests, die genau diese Synchronisation prüfen, und Checklisten für neue Nachrichten. Unspektakulär, aber seitdem sind die Geister selten geworden.
Kommentare