From a248545e68e39fa5a6d6548549e21fc9505c32c4 Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Wed, 25 Mar 2026 11:27:11 -0400 Subject: [PATCH 1/2] bug: fix game pausing after match ended , if the game ended --- src/FiveStack.Commands/Timeout.cs | 10 ++++++++++ src/FiveStack.Events/GameEnd.cs | 4 ++++ src/FiveStack.Events/MapChange.cs | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/FiveStack.Commands/Timeout.cs b/src/FiveStack.Commands/Timeout.cs index f43a61b..a5aa664 100644 --- a/src/FiveStack.Commands/Timeout.cs +++ b/src/FiveStack.Commands/Timeout.cs @@ -13,6 +13,11 @@ public partial class FiveStackPlugin ] public void OnPause(CCSPlayerController? player, CommandInfo? command) { + if (gameEnded) + { + return; + } + _timeoutSystem.RequestPause(player); } @@ -32,6 +37,11 @@ public void OnResume(CCSPlayerController? player, CommandInfo? command) ] public void OnTimeout(CCSPlayerController? player, CommandInfo? command) { + if (gameEnded) + { + return; + } + _timeoutSystem.CallTacTimeout(player); } } diff --git a/src/FiveStack.Events/GameEnd.cs b/src/FiveStack.Events/GameEnd.cs index d7b03d5..0eabcc9 100644 --- a/src/FiveStack.Events/GameEnd.cs +++ b/src/FiveStack.Events/GameEnd.cs @@ -10,11 +10,15 @@ namespace FiveStack; public partial class FiveStackPlugin { + bool gameEnded = false; + [GameEventHandler] public HookResult OnGameEnd(EventCsWinPanelMatch @event, GameEventInfo info) { _logger.LogInformation("Game ended"); + gameEnded = true; + MatchManager? match = _matchService.GetCurrentMatch(); if (match == null) { diff --git a/src/FiveStack.Events/MapChange.cs b/src/FiveStack.Events/MapChange.cs index 3f60eb4..1be6617 100644 --- a/src/FiveStack.Events/MapChange.cs +++ b/src/FiveStack.Events/MapChange.cs @@ -14,6 +14,8 @@ public void ListenForMapChange() { _logger.LogInformation("map changed: precaching models"); + gameEnded = false; + Server.PrecacheModel(ModelPathCtmSas); Server.PrecacheModel(ModelPathTmPhoenix); From 416a6293e5c587816d384146c8ff5d27f1b0cfd7 Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Wed, 25 Mar 2026 11:28:08 -0400 Subject: [PATCH 2/2] wip --- src/FiveStack.Commands/Timeout.cs | 6 ++++-- src/FiveStack.Events/GameEnd.cs | 6 ++---- src/FiveStack.Events/MapChange.cs | 2 -- src/FiveStack.Services/MatchManager.cs | 3 +++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/FiveStack.Commands/Timeout.cs b/src/FiveStack.Commands/Timeout.cs index a5aa664..ba62f07 100644 --- a/src/FiveStack.Commands/Timeout.cs +++ b/src/FiveStack.Commands/Timeout.cs @@ -13,7 +13,8 @@ public partial class FiveStackPlugin ] public void OnPause(CCSPlayerController? player, CommandInfo? command) { - if (gameEnded) + MatchManager? match = _matchService.GetCurrentMatch(); + if (match != null && match.gameEnded) { return; } @@ -37,7 +38,8 @@ public void OnResume(CCSPlayerController? player, CommandInfo? command) ] public void OnTimeout(CCSPlayerController? player, CommandInfo? command) { - if (gameEnded) + MatchManager? match = _matchService.GetCurrentMatch(); + if (match != null && match.gameEnded) { return; } diff --git a/src/FiveStack.Events/GameEnd.cs b/src/FiveStack.Events/GameEnd.cs index 0eabcc9..4cad2bb 100644 --- a/src/FiveStack.Events/GameEnd.cs +++ b/src/FiveStack.Events/GameEnd.cs @@ -10,21 +10,19 @@ namespace FiveStack; public partial class FiveStackPlugin { - bool gameEnded = false; - [GameEventHandler] public HookResult OnGameEnd(EventCsWinPanelMatch @event, GameEventInfo info) { _logger.LogInformation("Game ended"); - gameEnded = true; - MatchManager? match = _matchService.GetCurrentMatch(); if (match == null) { return HookResult.Continue; } + match.gameEnded = true; + PublishRoundInformation(); MatchData? matchData = match.GetMatchData(); diff --git a/src/FiveStack.Events/MapChange.cs b/src/FiveStack.Events/MapChange.cs index 1be6617..3f60eb4 100644 --- a/src/FiveStack.Events/MapChange.cs +++ b/src/FiveStack.Events/MapChange.cs @@ -14,8 +14,6 @@ public void ListenForMapChange() { _logger.LogInformation("map changed: precaching models"); - gameEnded = false; - Server.PrecacheModel(ModelPathCtmSas); Server.PrecacheModel(ModelPathTmPhoenix); diff --git a/src/FiveStack.Services/MatchManager.cs b/src/FiveStack.Services/MatchManager.cs index e1daa1f..0460cab 100644 --- a/src/FiveStack.Services/MatchManager.cs +++ b/src/FiveStack.Services/MatchManager.cs @@ -19,6 +19,7 @@ public class MatchManager private MatchData? _matchData; private eMapStatus _currentMapStatus = eMapStatus.Unknown; private Timer? _resumeMessageTimer; + public bool gameEnded = false; private readonly MatchEvents _matchEvents; private readonly GameServer _gameServer; @@ -964,6 +965,8 @@ public void Reset() _currentMapStatus = eMapStatus.Unknown; + gameEnded = false; + readySystem.Reset(); captainSystem.Reset(); knifeSystem.Reset();