From 78085855dbd18e593424bfa6e7c84313eda4c6eb Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 23 Jun 2020 21:30:37 +0200 Subject: [PATCH] Fix a late joining client not knowing if the lobby has been paused (#1199) * Fix client not knowing that the lobby is paused when joining after the pause Also fixes a client thinking that a lobby is paused when joining a new one after leaving a previously paused one * Add server announcement to delaying and pausing round start --- Content.Client/GameTicking/ClientGameTicker.cs | 1 + Content.Server/GameTicking/GameTicker.cs | 7 +++++++ Content.Shared/SharedGameTicker.cs | 3 +++ 3 files changed, 11 insertions(+) diff --git a/Content.Client/GameTicking/ClientGameTicker.cs b/Content.Client/GameTicking/ClientGameTicker.cs index 194f600657..a80f606215 100644 --- a/Content.Client/GameTicking/ClientGameTicker.cs +++ b/Content.Client/GameTicking/ClientGameTicker.cs @@ -55,6 +55,7 @@ namespace Content.Client.GameTicking StartTime = message.StartTime; IsGameStarted = message.IsRoundStarted; AreWeReady = message.YouAreReady; + Paused = message.Paused; LobbyStatusUpdated?.Invoke(); } diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 93581796ac..51b0136957 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -437,6 +437,8 @@ namespace Content.Server.GameTicking lobbyCountdownMessage.Paused = Paused; _netManager.ServerSendToAll(lobbyCountdownMessage); + _chatManager.DispatchServerAnnouncement($"Round start has been delayed for {time.TotalSeconds} seconds."); + return true; } @@ -463,6 +465,10 @@ namespace Content.Server.GameTicking lobbyCountdownMessage.Paused = Paused; _netManager.ServerSendToAll(lobbyCountdownMessage); + _chatManager.DispatchServerAnnouncement(Paused + ? "Round start has been paused." + : "Round start countdown is now resumed."); + return true; } @@ -838,6 +844,7 @@ namespace Content.Server.GameTicking msg.IsRoundStarted = RunLevel != GameRunLevel.PreRoundLobby; msg.StartTime = _roundStartTimeUtc; msg.YouAreReady = ready; + msg.Paused = Paused; return msg; } diff --git a/Content.Shared/SharedGameTicker.cs b/Content.Shared/SharedGameTicker.cs index c4dd450c8b..2fea6dd16b 100644 --- a/Content.Shared/SharedGameTicker.cs +++ b/Content.Shared/SharedGameTicker.cs @@ -66,6 +66,7 @@ namespace Content.Shared public bool YouAreReady { get; set; } // UTC. public DateTime StartTime { get; set; } + public bool Paused { get; set; } public override void ReadFromBuffer(NetIncomingMessage buffer) { @@ -78,6 +79,7 @@ namespace Content.Shared YouAreReady = buffer.ReadBoolean(); StartTime = new DateTime(buffer.ReadInt64(), DateTimeKind.Utc); + Paused = buffer.ReadBoolean(); } public override void WriteToBuffer(NetOutgoingMessage buffer) @@ -91,6 +93,7 @@ namespace Content.Shared buffer.Write(YouAreReady); buffer.Write(StartTime.Ticks); + buffer.Write(Paused); } }