diff --git a/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs b/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs index 5115996c21..3fa7e64f1a 100644 --- a/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs +++ b/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs @@ -1,3 +1,4 @@ +using Content.Server.Maps; using Content.Shared.CCVar; using Robust.Shared.Configuration; using Robust.Shared.Console; @@ -49,27 +50,34 @@ public sealed class ForceMapTest var entMan = server.EntMan; var configManager = server.ResolveDependency(); var consoleHost = server.ResolveDependency(); + var gameMapMan = server.ResolveDependency(); await server.WaitAssertion(() => { // Make sure we're set to the default map - Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(DefaultMapName), + Assert.That(gameMapMan.GetSelectedMap()?.ID, Is.EqualTo(DefaultMapName), $"Test didn't start on expected map ({DefaultMapName})!"); // Try changing to a map that doesn't exist consoleHost.ExecuteCommand($"forcemap {BadMapName}"); - Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(DefaultMapName), + Assert.That(gameMapMan.GetSelectedMap()?.ID, Is.EqualTo(DefaultMapName), $"Forcemap succeeded with a map that does not exist ({BadMapName})!"); // Try changing to a valid map consoleHost.ExecuteCommand($"forcemap {TestMapEligibleName}"); - Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(TestMapEligibleName), + Assert.That(gameMapMan.GetSelectedMap()?.ID, Is.EqualTo(TestMapEligibleName), $"Forcemap failed with a valid map ({TestMapEligibleName})"); // Try changing to a map that exists but is ineligible consoleHost.ExecuteCommand($"forcemap {TestMapIneligibleName}"); - Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(TestMapIneligibleName), + Assert.That(gameMapMan.GetSelectedMap()?.ID, Is.EqualTo(TestMapIneligibleName), $"Forcemap failed with valid but ineligible map ({TestMapIneligibleName})!"); + + // Try clearing the force-selected map + consoleHost.ExecuteCommand("forcemap \"\""); + Assert.That(gameMapMan.GetSelectedMap(), Is.Null, + $"Running 'forcemap \"\"' did not clear the forced map!"); + }); // Cleanup diff --git a/Content.Server/GameTicking/Commands/ForceMapCommand.cs b/Content.Server/GameTicking/Commands/ForceMapCommand.cs index 76777623a2..4cc30ff38a 100644 --- a/Content.Server/GameTicking/Commands/ForceMapCommand.cs +++ b/Content.Server/GameTicking/Commands/ForceMapCommand.cs @@ -29,14 +29,19 @@ namespace Content.Server.GameTicking.Commands var gameMap = IoCManager.Resolve(); var name = args[0]; - if (!gameMap.CheckMapExists(name)) + // An empty string clears the forced map + if (!string.IsNullOrEmpty(name) && !gameMap.CheckMapExists(name)) { shell.WriteLine(Loc.GetString("forcemap-command-map-not-found", ("map", name))); return; } _configurationManager.SetCVar(CCVars.GameMap, name); - shell.WriteLine(Loc.GetString("forcemap-command-success", ("map", name))); + + if (string.IsNullOrEmpty(name)) + shell.WriteLine(Loc.GetString("forcemap-command-cleared")); + else + shell.WriteLine(Loc.GetString("forcemap-command-success", ("map", name))); } public CompletionResult GetCompletion(IConsoleShell shell, string[] args) diff --git a/Resources/Locale/en-US/game-ticking/forcemap-command.ftl b/Resources/Locale/en-US/game-ticking/forcemap-command.ftl index 6a4399cdcf..573aa78a28 100644 --- a/Resources/Locale/en-US/game-ticking/forcemap-command.ftl +++ b/Resources/Locale/en-US/game-ticking/forcemap-command.ftl @@ -5,4 +5,5 @@ forcemap-command-help = forcemap forcemap-command-need-one-argument = forcemap takes one argument, the path to the map file. forcemap-command-map-not-found = No eligible map exists with name { $map }. forcemap-command-success = Forced the game to start with map { $map } next round. +forcemap-command-cleared = Cleared the forced map setting. forcemap-command-arg-map =