From ecef573af50c6786840aecb935c5073673ac7008 Mon Sep 17 00:00:00 2001 From: OctoRocket <88291550+OctoRocket@users.noreply.github.com> Date: Thu, 8 Jun 2023 00:16:18 -0700 Subject: [PATCH] [Tweak] Default to Traitor instead of Extended when possible (#16386) --- .../GameTicking/GameTicker.GamePreset.cs | 37 ++++++++++++------- .../GameTicking/Rules/NukeopsRuleSystem.cs | 2 +- .../GameTicking/Rules/PiratesRuleSystem.cs | 2 +- .../GameTicking/Rules/SecretRuleSystem.cs | 4 +- .../GameTicking/Rules/TraitorRuleSystem.cs | 2 +- .../GameTicking/Rules/ZombieRuleSystem.cs | 4 +- Content.Shared/CCVar/CCVars.cs | 2 +- .../game-presets/preset-traitor.ftl | 2 +- 8 files changed, 34 insertions(+), 21 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 3b1bb03157..d3ab70a4f6 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -42,27 +42,38 @@ namespace Content.Server.GameTicking if (_configurationManager.GetCVar(CCVars.GameLobbyFallbackEnabled)) { - ClearGameRules(); - SetGamePreset(_configurationManager.GetCVar(CCVars.GameLobbyFallbackPreset)); - AddGamePresetRules(); - StartGamePresetRules(); + var fallbackPresets = _configurationManager.GetCVar(CCVars.GameLobbyFallbackPreset).Split(","); + var startFailed = true; - startAttempt.Uncancel(); - RaiseLocalEvent(startAttempt); + foreach (var preset in fallbackPresets) + { + ClearGameRules(); + SetGamePreset(preset); + AddGamePresetRules(); + StartGamePresetRules(); - _chatManager.DispatchServerAnnouncement( - Loc.GetString("game-ticker-start-round-cannot-start-game-mode-fallback", - ("failedGameMode", presetTitle), - ("fallbackMode", Loc.GetString(Preset!.ModeTitle)))); + startAttempt.Uncancel(); + RaiseLocalEvent(startAttempt); - if (startAttempt.Cancelled) + if (!startAttempt.Cancelled) + { + _chatManager.SendAdminAnnouncement( + Loc.GetString("game-ticker-start-round-cannot-start-game-mode-fallback", + ("failedGameMode", presetTitle), + ("fallbackMode", Loc.GetString(preset)))); + RefreshLateJoinAllowed(); + startFailed = false; + break; + } + } + + if (startFailed) { FailedPresetRestart(); return false; } - - RefreshLateJoinAllowed(); } + else { FailedPresetRestart(); diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index f343de3f8e..ca7a9854fc 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -825,7 +825,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem var minPlayers = nukeops.MinPlayers; if (!ev.Forced && ev.Players.Length < minPlayers) { - _chatManager.DispatchServerAnnouncement(Loc.GetString("nukeops-not-enough-ready-players", + _chatManager.SendAdminAnnouncement(Loc.GetString("nukeops-not-enough-ready-players", ("readyPlayersCount", ev.Players.Length), ("minimumPlayers", minPlayers))); ev.Cancel(); continue; diff --git a/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs b/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs index 86d4a8bcaa..2af25b3a96 100644 --- a/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/PiratesRuleSystem.cs @@ -267,7 +267,7 @@ public sealed class PiratesRuleSystem : GameRuleSystem var minPlayers = _cfg.GetCVar(CCVars.PiratesMinPlayers); if (!ev.Forced && ev.Players.Length < minPlayers) { - _chatManager.DispatchServerAnnouncement(Loc.GetString("nukeops-not-enough-ready-players", + _chatManager.SendAdminAnnouncement(Loc.GetString("nukeops-not-enough-ready-players", ("readyPlayersCount", ev.Players.Length), ("minimumPlayers", minPlayers))); ev.Cancel(); return; diff --git a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs index 8ad83ecd5d..8cf0959581 100644 --- a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs @@ -30,8 +30,8 @@ public sealed class SecretRuleSystem : GameRuleSystem private void PickRule(SecretRuleComponent component) { - // TODO: This doesn't consider what can't start due to minimum player count, but currently there's no way to know anyway. - // as they use cvars. + // TODO: This doesn't consider what can't start due to minimum player count, + // but currently there's no way to know anyway as they use cvars. var preset = _prototypeManager.Index("Secret").Pick(_random); Logger.InfoS("gamepreset", $"Selected {preset} for secret."); diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index f9e43a5aec..e23ac9fcc9 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -73,7 +73,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem var minPlayers = _cfg.GetCVar(CCVars.TraitorMinPlayers); if (!ev.Forced && ev.Players.Length < minPlayers) { - _chatManager.DispatchServerAnnouncement(Loc.GetString("traitor-not-enough-ready-players", + _chatManager.SendAdminAnnouncement(Loc.GetString("traitor-not-enough-ready-players", ("readyPlayersCount", ev.Players.Length), ("minimumPlayers", minPlayers))); ev.Cancel(); continue; diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index 7ae2c44711..0164adaaea 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -165,7 +165,9 @@ public sealed class ZombieRuleSystem : GameRuleSystem var minPlayers = _cfg.GetCVar(CCVars.ZombieMinPlayers); if (!ev.Forced && ev.Players.Length < minPlayers) { - _chatManager.DispatchServerAnnouncement(Loc.GetString("zombie-not-enough-ready-players", ("readyPlayersCount", ev.Players.Length), ("minimumPlayers", minPlayers))); + _chatManager.SendAdminAnnouncement(Loc.GetString("zombie-not-enough-ready-players", + ("readyPlayersCount", ev.Players.Length), + ("minimumPlayers", minPlayers))); ev.Cancel(); continue; } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 63fcf16bcd..e3757530ce 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -167,7 +167,7 @@ namespace Content.Shared.CCVar /// The preset for the game to fall back to if the selected preset could not be used, and fallback is enabled. /// public static readonly CVarDef - GameLobbyFallbackPreset = CVarDef.Create("game.fallbackpreset", "extended", CVar.ARCHIVE); + GameLobbyFallbackPreset = CVarDef.Create("game.fallbackpreset", "Traitor,Extended", CVar.ARCHIVE); /// /// Controls if people can win the game in Suspicion or Deathmatch. diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl index 5ce0d5be1f..4459cf5f90 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl @@ -28,7 +28,7 @@ traitor-objective-condition-fail = {$condition} | [color={$markupColor}]Failure! traitor-title = Traitor traitor-description = There are traitors among us... -traitor-not-enough-ready-players = Not enough players readied up for the game! There were {$readyPlayersCount} players readied up out of {$minimumPlayers} needed. +traitor-not-enough-ready-players = Not enough players readied up for the game! There were {$readyPlayersCount} players readied up out of {$minimumPlayers} needed. Can't start Traitor. traitor-no-one-ready = No players readied up! Can't start Traitor. ## TraitorDeathMatch