From 85e16032c2474ba6522fc85ca27a749aba785874 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 3 Jan 2026 14:30:15 +0000 Subject: [PATCH] Add Server.EnableMapGeneration setting. --- OpenRA.Game/Network/Session.cs | 3 ++- OpenRA.Game/Server/Server.cs | 8 ++++++-- OpenRA.Game/Settings.cs | 3 +++ .../Widgets/Logic/Ingame/IngameMenuLogic.cs | 4 ++-- OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs | 3 ++- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/Network/Session.cs b/OpenRA.Game/Network/Session.cs index 7807a00aa0..ba106b0a2b 100644 --- a/OpenRA.Game/Network/Session.cs +++ b/OpenRA.Game/Network/Session.cs @@ -213,9 +213,10 @@ namespace OpenRA.Network public bool AllowSpectators = true; public string GameUid; public bool EnableSingleplayer; + public bool EnableMapGeneration; + public bool EnableGameSaves; public bool EnableSyncReports; public bool Dedicated; - public bool GameSavesEnabled; // 120ms network frame interval for 40ms local tick public int NetFrameInterval = 3; diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 6942768e53..e042cf20aa 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -331,6 +331,7 @@ namespace OpenRA.Server RandomSeed = randomSeed, ServerName = settings.Name, EnableSingleplayer = settings.EnableSingleplayer || Type != ServerType.Dedicated, + EnableMapGeneration = settings.EnableMapGeneration, EnableSyncReports = settings.EnableSyncReports, GameUid = Guid.NewGuid().ToString(), Dedicated = Type == ServerType.Dedicated @@ -1122,6 +1123,9 @@ namespace OpenRA.Server if (!GetClient(conn).IsAdmin || State >= ServerState.GameStarted) break; + if (!LobbyInfo.GlobalSettings.EnableMapGeneration) + break; + try { var yaml = new MiniYaml(o.OrderString, MiniYaml.FromString(o.TargetString, o.OrderString)); @@ -1336,7 +1340,7 @@ namespace OpenRA.Server // Enable game saves for singleplayer missions only // TODO: Enable for multiplayer (non-dedicated servers only) once the lobby UI has been created - LobbyInfo.GlobalSettings.GameSavesEnabled = Type != ServerType.Dedicated && LobbyInfo.NonBotClients.Count() == 1; + LobbyInfo.GlobalSettings.EnableGameSaves = Type != ServerType.Dedicated && LobbyInfo.NonBotClients.Count() == 1; // Player list for win/loss tracking // HACK: NonCombatant and non-Playable players are set to null to simplify replay tracking @@ -1381,7 +1385,7 @@ namespace OpenRA.Server if (IsMultiplayer) OrderLatency = gameSpeed.OrderLatency; - if (GameSave == null && LobbyInfo.GlobalSettings.GameSavesEnabled) + if (GameSave == null && LobbyInfo.GlobalSettings.EnableGameSaves) GameSave = new GameSave(); var startGameData = ""; diff --git a/OpenRA.Game/Settings.cs b/OpenRA.Game/Settings.cs index 144ebe346e..702f4c3c80 100644 --- a/OpenRA.Game/Settings.cs +++ b/OpenRA.Game/Settings.cs @@ -129,6 +129,9 @@ namespace OpenRA [Desc("For dedicated servers only, controls whether a game can be started with just one human player in the lobby.")] public bool EnableSingleplayer = false; + [Desc("Controls whether generated maps can be used.")] + public bool EnableMapGeneration = true; + [Desc("Query map information from the Resource Center if they are not available locally.")] public bool QueryMapRepository = true; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs index 3849a34f39..4d20631b49 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs @@ -401,7 +401,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic void CreateLoadGameButton() { - if (world.Type != WorldType.Regular || !world.LobbyInfo.GlobalSettings.GameSavesEnabled || world.IsReplay) + if (world.Type != WorldType.Regular || !world.LobbyInfo.GlobalSettings.EnableGameSaves || world.IsReplay) return; var button = AddButton("LOAD_GAME", LoadGameButton); @@ -421,7 +421,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic void CreateSaveGameButton() { - if (world.Type != WorldType.Regular || !world.LobbyInfo.GlobalSettings.GameSavesEnabled || world.IsReplay) + if (world.Type != WorldType.Regular || !world.LobbyInfo.GlobalSettings.EnableGameSaves || world.IsReplay) return; var button = AddButton("SAVE_GAME", SaveGameButton); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index a1f8cb2a3d..6c169d691f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -272,6 +272,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic // Check for updated maps, if the user has edited a map we'll preselect it for them modData.MapCache.UpdateMaps(); + var enableMapGenerator = Game.IsHost && orderManager.LobbyInfo.GlobalSettings.EnableMapGeneration; Ui.OpenWindow("MAPCHOOSER_PANEL", new WidgetArgs() { { "initialMap", modData.MapCache.PickLastModifiedMap(MapVisibility.Lobby) ?? map.Uid }, @@ -280,7 +281,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { "initialTab", MapClassification.System }, { "onExit", modData.MapCache.UpdateMaps }, { "onSelect", Game.IsHost ? onSelect : null }, - { "onSelectGenerated", Game.IsHost ? onSelectGenerated : null }, + { "onSelectGenerated", enableMapGenerator ? onSelectGenerated : null }, { "filter", MapVisibility.Lobby }, }); };