From 2e16ad47e58d8e11301652ef24cc8fec2e74a865 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 12 Dec 2025 15:02:08 +0000 Subject: [PATCH] Migrate skirmish state to a mod-specific settings module. --- .../ServerTraits/SkirmishLogic.cs | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/OpenRA.Mods.Common/ServerTraits/SkirmishLogic.cs b/OpenRA.Mods.Common/ServerTraits/SkirmishLogic.cs index 7a64b49606..9259b2abc0 100644 --- a/OpenRA.Mods.Common/ServerTraits/SkirmishLogic.cs +++ b/OpenRA.Mods.Common/ServerTraits/SkirmishLogic.cs @@ -10,7 +10,6 @@ #endregion using System.Collections.Generic; -using System.IO; using System.Linq; using OpenRA.Network; using OpenRA.Primitives; @@ -22,6 +21,9 @@ namespace OpenRA.Mods.Common.Server { public class SkirmishLogic : ServerTrait, IClientJoined, INotifySyncLobbyInfo { + [YamlNode("Skirmish", shared: false)] + public class SkirmishSettings : SettingsModule { } + sealed class SkirmishSlot { static string LoadSlot(MiniYaml yaml) => yaml.Value; @@ -64,12 +66,9 @@ namespace OpenRA.Mods.Common.Server } } - static bool TryInitializeFromFile(S server, string path, Connection conn) + static bool TryInitializeFromSettings(S server, SkirmishSettings skirmishSettings, Connection conn) { - if (!File.Exists(path)) - return false; - - var nodes = new MiniYaml("", MiniYaml.FromFile(path)); + var nodes = skirmishSettings.Yaml.Build(); var mapNode = nodes.NodeWithKeyOrDefault("Map"); if (mapNode == null) return false; @@ -157,9 +156,8 @@ namespace OpenRA.Mods.Common.Server if (server.Type != ServerType.Skirmish) return; - var path = Path.Combine(Platform.SupportDir, $"skirmish.{server.ModData.Manifest.Id}.yaml"); var playerClient = server.LobbyInfo.NonBotClients.First(); - new List + var nodes = new List { new("Map", server.LobbyInfo.GlobalSettings.Map), new("Options", new MiniYaml("", server.LobbyInfo.GlobalSettings.LobbyOptions @@ -167,7 +165,11 @@ namespace OpenRA.Mods.Common.Server new("Player", new SkirmishSlot(playerClient).ToYaml()), new("Bots", new MiniYaml("", server.LobbyInfo.Clients.Where(c => c.IsBot) .Select(b => new MiniYamlNode(b.Bot, new SkirmishSlot(b).ToYaml())))) - }.WriteToFile(path); + }; + + var skirmishSettings = server.ModData.GetSettings(); + skirmishSettings.Yaml.Nodes = new MiniYamlBuilder("", nodes).Nodes; + skirmishSettings.Save(); } void IClientJoined.ClientJoined(S server, Connection conn) @@ -175,8 +177,8 @@ namespace OpenRA.Mods.Common.Server if (server.Type != ServerType.Skirmish) return; - var skirmishFile = Path.Combine(Platform.SupportDir, $"skirmish.{server.ModData.Manifest.Id}.yaml"); - if (TryInitializeFromFile(server, skirmishFile, conn)) + var skirmishSettings = server.ModData.GetSettings(); + if (TryInitializeFromSettings(server, skirmishSettings, conn)) return; var slot = server.LobbyInfo.FirstEmptyBotSlot();