Relay vehicle controls; on shutdown tell players to reconnect (restart) instead of a final disconnect

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-27 16:51:48 +02:00
co-authored by Claude Opus 5.5
parent 0f62c17c90
commit 53cda0cbc2
3 changed files with 8 additions and 4 deletions
+4 -3
View File
@@ -162,8 +162,9 @@ public sealed class GameServer
foreach (var c in clients.Values)
{
// Grund mitschicken: die Spieler sehen ihn im Hauptmenü
if (c.State == ClientState.Joined) c.Conn.Send(MsgType.Reject, Wire.Build(w => w.Write("The server was shut down.")));
// Meist ein Neustart (Update, docker compose up): die Spieler verbinden sich automatisch neu, sobald der
// Server wieder da ist. Bleibt er aus, bekommen sie nach ein paar Versuchen einen Hinweis im Hauptmenü.
if (c.State == ClientState.Joined) c.Conn.Send(MsgType.Reconnect, Wire.Build(w => w.Write("The server is restarting - reconnecting...")));
c.Conn.CloseAfterSend("Server shutting down");
}
// Kurz warten, bis die Spieler die Meldung gelesen haben (sauber trennen statt hart abbrechen)
@@ -291,7 +292,7 @@ public sealed class GameServer
t is MsgType.Player or MsgType.ObjStates or MsgType.ObjOwn or MsgType.ObjRelease or MsgType.FsmEvent
or MsgType.VehicleFx or MsgType.WorldTime or MsgType.MoneyDelta or MsgType.DoorState or MsgType.Chat or MsgType.VarSync
or MsgType.SpawnItem or MsgType.ItemAppeared or MsgType.ObjDestroy or MsgType.VehicleDamage
or MsgType.TrafficStates or MsgType.WorldVars or MsgType.HingeStates;
or MsgType.TrafficStates or MsgType.WorldVars or MsgType.HingeStates or MsgType.VehicleControls;
/// <summary>Uhrzeit/Wetter gibt der Spieler mit der kleinsten ID vor (so rechnen es auch die Clients).</summary>
int WorldAuthorityId => clients.Values.Where(c => c.State == ClientState.Joined).Select(c => c.Id).DefaultIfEmpty(-1).Min();