From f44993e4f7506f65dbbdf253fb85e37803be4d7f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 29 Feb 2016 18:21:21 +0000 Subject: [PATCH] Move crates option to rules. --- OpenRA.Game/Map/Map.cs | 3 --- OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs | 6 +++++- OpenRA.Mods.Common/Traits/World/CrateSpawner.cs | 12 +++++++++--- OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs | 8 +++++++- mods/cnc/maps/the-hot-box/map.yaml | 1 - mods/cnc/mod.yaml | 1 - mods/d2k/mod.yaml | 1 - mods/ra/mod.yaml | 1 - mods/ts/mod.yaml | 1 - 9 files changed, 21 insertions(+), 13 deletions(-) diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index f101d62e41..b4060660db 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -58,7 +58,6 @@ namespace OpenRA public class MapOptions { - public bool? Crates; public bool? Creeps; public bool? Fog; public bool? Shroud; @@ -71,8 +70,6 @@ namespace OpenRA public void UpdateServerSettings(Session.Global settings) { - if (Crates.HasValue) - settings.Crates = Crates.Value; if (Creeps.HasValue) settings.Creeps = Creeps.Value; if (Fog.HasValue) diff --git a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs index 052fcf2541..a1cd48ac2e 100644 --- a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs @@ -519,7 +519,8 @@ namespace OpenRA.Mods.Common.Server return true; } - if (server.Map.Options.Crates.HasValue) + var crateSpawner = server.Map.Rules.Actors["world"].TraitInfoOrDefault(); + if (crateSpawner == null || crateSpawner.Locked) { server.SendOrderTo(conn, "Message", "Map has disabled crate configuration."); return true; @@ -1015,6 +1016,9 @@ namespace OpenRA.Mods.Common.Server var gs = server.LobbyInfo.GlobalSettings; var devMode = server.Map.Rules.Actors["player"].TraitInfo(); gs.AllowCheats = devMode.Enabled; + + var crateSpawner = server.Map.Rules.Actors["world"].TraitInfoOrDefault(); + gs.Crates = crateSpawner != null && crateSpawner.Enabled; server.Map.Options.UpdateServerSettings(server.LobbyInfo.GlobalSettings); } diff --git a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs index f3afbd039e..f030c469a3 100644 --- a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs +++ b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs @@ -20,6 +20,12 @@ namespace OpenRA.Mods.Common.Traits { public class CrateSpawnerInfo : ITraitInfo { + [Desc("Default value of the crates checkbox in the lobby.")] + public readonly bool Enabled = true; + + [Desc("Prevent the crates state from being changed in the lobby.")] + public readonly bool Locked = false; + [Desc("Minimum number of crates.")] public readonly int Minimum = 1; @@ -42,14 +48,14 @@ namespace OpenRA.Mods.Common.Traits public readonly int WaterChance = 20; [ActorReference] - [Desc("Crate actors to drop")] + [Desc("Crate actors to drop.")] public readonly string[] CrateActors = { "crate" }; - [Desc("Chance of each crate actor spawning")] + [Desc("Chance of each crate actor spawning.")] public readonly int[] CrateActorShares = { 10 }; [ActorReference] - [Desc("If a DeliveryAircraft: is specified, then this actor will deliver crates")] + [Desc("If a DeliveryAircraft: is specified, then this actor will deliver crates.")] public readonly string DeliveryAircraft = null; [Desc("Number of facings that the delivery aircraft may approach from.")] diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 704f4dd120..fc44d10250 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -361,8 +361,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic var crates = optionsBin.GetOrNull("CRATES_CHECKBOX"); if (crates != null) { + var cratesLocked = new CachedTransform(map => + { + var crateSpawner = map.Rules.Actors["world"].TraitInfoOrDefault(); + return crateSpawner == null || crateSpawner.Locked; + }); + crates.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.Crates; - crates.IsDisabled = () => configurationDisabled() || Map.Options.Crates.HasValue; + crates.IsDisabled = () => configurationDisabled() || cratesLocked.Update(Map); crates.OnClick = () => orderManager.IssueOrder(Order.Command( "crates {0}".F(!orderManager.LobbyInfo.GlobalSettings.Crates))); } diff --git a/mods/cnc/maps/the-hot-box/map.yaml b/mods/cnc/maps/the-hot-box/map.yaml index 62408c3270..14762935d8 100644 --- a/mods/cnc/maps/the-hot-box/map.yaml +++ b/mods/cnc/maps/the-hot-box/map.yaml @@ -21,7 +21,6 @@ Type: Drop Zone Videos: Options: - Crates: True Fog: False Shroud: False AllyBuildRadius: False diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 84257f7d57..0637ae230e 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -163,7 +163,6 @@ ServerTraits: LobbySettingsNotification LobbyDefaults: - Crates: true StartingUnitsClass: light FragileAlliances: false Shroud: true diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index c68c5a5ea4..facd112935 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -156,7 +156,6 @@ ServerTraits: LobbySettingsNotification LobbyDefaults: - Crates: true StartingUnitsClass: none FragileAlliances: false Shroud: true diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index d3fcfeb8c0..78eb72da55 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -166,7 +166,6 @@ ServerTraits: LobbySettingsNotification LobbyDefaults: - Crates: true StartingUnitsClass: none FragileAlliances: false Shroud: true diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 54daa296fe..f502654808 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -215,7 +215,6 @@ ServerTraits: LobbySettingsNotification LobbyDefaults: - Crates: true StartingUnitsClass: none FragileAlliances: false Shroud: true