From 56714528a2f89a7ccff21e0155e7fc072ed90359 Mon Sep 17 00:00:00 2001 From: faketuna Date: Wed, 24 Sep 2025 21:06:58 +0900 Subject: [PATCH 1/3] modify: change map cooldown behaviour --- .../Modules/MapCycle/McsMapCycleController.cs | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs index 47b2f26..a5d69be 100644 --- a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs +++ b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs @@ -264,12 +264,13 @@ private void OnClientPutInServer(int slot) private void OnMapStart(string mapName) { ExtendCount = 0; - - DecrementAllMapCooldown(CurrentMap); CurrentMap = NextMap; NextMap = null; + DecrementAllMapCooldown(CurrentMap); + ApplyCooldownToCurrentMap(CurrentMap); + Server.NextFrame(ExecuteMapLimitConfig); // Wait for first people joined @@ -323,22 +324,24 @@ private void DecrementAllMapCooldown(IMapConfig? previousMap) if (value.MapCooldown.CurrentCooldown > 0) value.MapCooldown.CurrentCooldown--; } - - // Set previous map cooldown if defined in config - if (previousMap != null) - { - _mcsDatabaseProvider.MapInfoRepository.UpsertMapCooldownAsync(previousMap.MapName, previousMap.MapCooldown.MapConfigCooldown).ConfigureAwait(false); - previousMap.MapCooldown.CurrentCooldown = previousMap.MapCooldown.MapConfigCooldown; + } + + private void ApplyCooldownToCurrentMap(IMapConfig? currentMap) + { + if (currentMap == null) + return; - foreach (IMapGroupSettings setting in previousMap.GroupSettings) - { - _mcsDatabaseProvider.GroupInfoRepository.UpsertGroupCooldownAsync(setting.GroupName, setting.GroupCooldown.MapConfigCooldown).ConfigureAwait(false); - setting.GroupCooldown.CurrentCooldown = setting.GroupCooldown.MapConfigCooldown; - } + _mcsDatabaseProvider.MapInfoRepository.UpsertMapCooldownAsync(currentMap.MapName, currentMap.MapCooldown.MapConfigCooldown).ConfigureAwait(false); + currentMap.MapCooldown.CurrentCooldown = currentMap.MapCooldown.MapConfigCooldown; + + foreach (IMapGroupSettings setting in currentMap.GroupSettings) + { + _mcsDatabaseProvider.GroupInfoRepository.UpsertGroupCooldownAsync(setting.GroupName, setting.GroupCooldown.MapConfigCooldown).ConfigureAwait(false); + setting.GroupCooldown.CurrentCooldown = setting.GroupCooldown.MapConfigCooldown; } } - + private HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info) { if (!_isMapStarted) From 1786a1aa6c75620ec2e2e45d35d0e366850c1035 Mon Sep 17 00:00:00 2001 From: faketuna Date: Wed, 24 Sep 2025 21:16:48 +0900 Subject: [PATCH 2/3] modify: map cooldown now applied asynchronously (completely) --- .../Modules/MapCycle/McsMapCycleController.cs | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs index a5d69be..8874bdd 100644 --- a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs +++ b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs @@ -267,9 +267,20 @@ private void OnMapStart(string mapName) CurrentMap = NextMap; NextMap = null; + + Task.Run(async void() => + { + try + { + await DecrementAllMapCooldown(); + await ApplyCooldownToCurrentMap(CurrentMap); + } + catch (Exception e) + { + Logger.LogError(e, "Exception occured while applying map/group cooldown."); + } + }); - DecrementAllMapCooldown(CurrentMap); - ApplyCooldownToCurrentMap(CurrentMap); Server.NextFrame(ExecuteMapLimitConfig); @@ -304,15 +315,15 @@ private void ObtainCurrentMap(string mapName) ExtendLimit = CurrentMap?.MaxExtends ?? DefaultMapExtends; } - private void DecrementAllMapCooldown(IMapConfig? previousMap) + private async Task DecrementAllMapCooldown() { // To prevent unxpected cooldown reduction if (!IsFirstMapEnded || !IsSecondMapIsPassed) return; // Decrement all cooldowns - _mcsDatabaseProvider.MapInfoRepository.DecrementAllCooldownsAsync().ConfigureAwait(false); - _mcsDatabaseProvider.GroupInfoRepository.DecrementAllCooldownsAsync().ConfigureAwait(false); + await _mcsDatabaseProvider.MapInfoRepository.DecrementAllCooldownsAsync(); + await _mcsDatabaseProvider.GroupInfoRepository.DecrementAllCooldownsAsync(); foreach (var (key, value) in _mcsInternalMapConfigProviderApi.GetMapConfigs()) { foreach (IMapGroupSettings setting in value.GroupSettings) @@ -326,17 +337,17 @@ private void DecrementAllMapCooldown(IMapConfig? previousMap) } } - private void ApplyCooldownToCurrentMap(IMapConfig? currentMap) + private async Task ApplyCooldownToCurrentMap(IMapConfig? currentMap) { if (currentMap == null) return; - _mcsDatabaseProvider.MapInfoRepository.UpsertMapCooldownAsync(currentMap.MapName, currentMap.MapCooldown.MapConfigCooldown).ConfigureAwait(false); + await _mcsDatabaseProvider.MapInfoRepository.UpsertMapCooldownAsync(currentMap.MapName, currentMap.MapCooldown.MapConfigCooldown); currentMap.MapCooldown.CurrentCooldown = currentMap.MapCooldown.MapConfigCooldown; foreach (IMapGroupSettings setting in currentMap.GroupSettings) { - _mcsDatabaseProvider.GroupInfoRepository.UpsertGroupCooldownAsync(setting.GroupName, setting.GroupCooldown.MapConfigCooldown).ConfigureAwait(false); + await _mcsDatabaseProvider.GroupInfoRepository.UpsertGroupCooldownAsync(setting.GroupName, setting.GroupCooldown.MapConfigCooldown); setting.GroupCooldown.CurrentCooldown = setting.GroupCooldown.MapConfigCooldown; } } From 6209326d453109faa34308c50004a0e91b2a4215 Mon Sep 17 00:00:00 2001 From: faketuna Date: Wed, 24 Sep 2025 21:41:19 +0900 Subject: [PATCH 3/3] modify: refactor --- MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs index 8874bdd..dd6700d 100644 --- a/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs +++ b/MapChooserSharp/Modules/MapCycle/McsMapCycleController.cs @@ -268,7 +268,7 @@ private void OnMapStart(string mapName) CurrentMap = NextMap; NextMap = null; - Task.Run(async void() => + Task.Run(async () => { try {