Use DefaultCash for the default cash.

This commit is contained in:
Paul Chote
2016-02-29 19:57:30 +00:00
parent 76b1810925
commit e34864fe40
4 changed files with 18 additions and 13 deletions

View File

@@ -60,7 +60,6 @@ namespace OpenRA
{ {
public bool? Creeps; public bool? Creeps;
public bool? AllyBuildRadius; public bool? AllyBuildRadius;
public int? StartingCash;
public string TechLevel; public string TechLevel;
public bool ConfigurableStartingUnits = true; public bool ConfigurableStartingUnits = true;
public string[] Difficulties = { }; public string[] Difficulties = { };
@@ -72,8 +71,6 @@ namespace OpenRA
settings.Creeps = Creeps.Value; settings.Creeps = Creeps.Value;
if (AllyBuildRadius.HasValue) if (AllyBuildRadius.HasValue)
settings.AllyBuildRadius = AllyBuildRadius.Value; settings.AllyBuildRadius = AllyBuildRadius.Value;
if (StartingCash.HasValue)
settings.StartingCash = StartingCash.Value;
if (ShortGame.HasValue) if (ShortGame.HasValue)
settings.ShortGame = ShortGame.Value; settings.ShortGame = ShortGame.Value;
} }

View File

@@ -16,9 +16,15 @@ namespace OpenRA.Traits
{ {
public class PlayerResourcesInfo : ITraitInfo public class PlayerResourcesInfo : ITraitInfo
{ {
[Desc("Starting cash options that are available in the lobby options.")]
public readonly int[] SelectableCash = { 2500, 5000, 10000, 20000 }; public readonly int[] SelectableCash = { 2500, 5000, 10000, 20000 };
[Desc("Default starting cash option: should be one of the SelectableCash options.")]
public readonly int DefaultCash = 5000; public readonly int DefaultCash = 5000;
[Desc("Force the DefaultCash option by disabling changes in the lobby.")]
public readonly bool DefaultCashLocked = false;
public object Create(ActorInitializer init) { return new PlayerResources(init.Self, this); } public object Create(ActorInitializer init) { return new PlayerResources(init.Self, this); }
} }

View File

@@ -648,13 +648,14 @@ namespace OpenRA.Mods.Common.Server
return true; return true;
} }
if (server.Map.Options.StartingCash.HasValue) var playerResources = server.Map.Rules.Actors["player"].TraitInfo<PlayerResourcesInfo>();
if (playerResources.DefaultCashLocked)
{ {
server.SendOrderTo(conn, "Message", "Map has disabled cash configuration."); server.SendOrderTo(conn, "Message", "Map has disabled cash configuration.");
return true; return true;
} }
var startingCashOptions = server.Map.Rules.Actors["player"].TraitInfo<PlayerResourcesInfo>().SelectableCash; var startingCashOptions = playerResources.SelectableCash;
var requestedCash = Exts.ParseIntegerInvariant(s); var requestedCash = Exts.ParseIntegerInvariant(s);
if (!startingCashOptions.Contains(requestedCash)) if (!startingCashOptions.Contains(requestedCash))
{ {
@@ -1026,6 +1027,9 @@ namespace OpenRA.Mods.Common.Server
gs.Fog = shroud.FogEnabled; gs.Fog = shroud.FogEnabled;
gs.Shroud = !shroud.ExploredMapEnabled; gs.Shroud = !shroud.ExploredMapEnabled;
var resources = server.Map.Rules.Actors["player"].TraitInfo<PlayerResourcesInfo>();
gs.StartingCash = resources.DefaultCash;
server.Map.Options.UpdateServerSettings(server.LobbyInfo.GlobalSettings); server.Map.Options.UpdateServerSettings(server.LobbyInfo.GlobalSettings);
} }

View File

@@ -465,12 +465,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var startingCash = optionsBin.GetOrNull<DropDownButtonWidget>("STARTINGCASH_DROPDOWNBUTTON"); var startingCash = optionsBin.GetOrNull<DropDownButtonWidget>("STARTINGCASH_DROPDOWNBUTTON");
if (startingCash != null) if (startingCash != null)
{ {
startingCash.IsDisabled = () => configurationDisabled() || Map.Options.StartingCash.HasValue; var playerResources = new CachedTransform<Map, PlayerResourcesInfo>(
map => map.Rules.Actors["player"].TraitInfo<PlayerResourcesInfo>());
startingCash.IsDisabled = () => configurationDisabled() || playerResources.Update(Map).DefaultCashLocked;
startingCash.GetText = () => MapPreview.Status != MapStatus.Available || startingCash.GetText = () => MapPreview.Status != MapStatus.Available ||
Map == null || Map.Options.StartingCash.HasValue ? "Not Available" : "${0}".F(orderManager.LobbyInfo.GlobalSettings.StartingCash); Map == null || playerResources.Update(Map).DefaultCashLocked ? "Not Available" : "${0}".F(orderManager.LobbyInfo.GlobalSettings.StartingCash);
startingCash.OnMouseDown = _ => startingCash.OnMouseDown = _ =>
{ {
var options = modRules.Actors["player"].TraitInfo<PlayerResourcesInfo>().SelectableCash.Select(c => new DropDownOption var options = playerResources.Update(Map).SelectableCash.Select(c => new DropDownOption
{ {
Title = "${0}".F(c), Title = "${0}".F(c),
IsSelected = () => orderManager.LobbyInfo.GlobalSettings.StartingCash == c, IsSelected = () => orderManager.LobbyInfo.GlobalSettings.StartingCash == c,
@@ -776,11 +779,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
// Tell the server that we have the map // Tell the server that we have the map
orderManager.IssueOrder(Order.Command("state {0}".F(Session.ClientState.NotReady))); orderManager.IssueOrder(Order.Command("state {0}".F(Session.ClientState.NotReady)));
// Restore default starting cash if the last map set it to something invalid
var pri = modRules.Actors["player"].TraitInfo<PlayerResourcesInfo>();
if (!currentMap.Options.StartingCash.HasValue && !pri.SelectableCash.Contains(orderManager.LobbyInfo.GlobalSettings.StartingCash))
orderManager.IssueOrder(Order.Command("startingcash {0}".F(pri.DefaultCash)));
} }
}); });
}).Start(); }).Start();