diff --git a/OpenRA.Game/Traits/Player/DeveloperMode.cs b/OpenRA.Game/Traits/Player/DeveloperMode.cs index 5f5ee0fd2a..b3627627bc 100644 --- a/OpenRA.Game/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Game/Traits/Player/DeveloperMode.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -14,16 +14,16 @@ namespace OpenRA.Traits { public int Cash = 20000; public int ResourceGrowth = 100; - public bool FastBuild = false; - public bool FastCharge = false; - public bool DisableShroud = false; - public bool PathDebug = false; + public bool FastBuild; + public bool FastCharge; + public bool DisableShroud; + public bool PathDebug; public bool UnlimitedPower; public bool BuildAnywhere; public bool ShowCombatGeometry; public bool ShowDebugGeometry; - public object Create (ActorInitializer init) { return new DeveloperMode(this); } + public object Create(ActorInitializer init) { return new DeveloperMode(this); } } public class DeveloperMode : IResolveOrder, ISync @@ -37,7 +37,7 @@ namespace OpenRA.Traits [Sync] public bool UnlimitedPower; [Sync] public bool BuildAnywhere; - // Client size only + // Client side only public bool ShowCombatGeometry; public bool ShowDebugGeometry; @@ -54,9 +54,10 @@ namespace OpenRA.Traits ShowDebugGeometry = info.ShowDebugGeometry; } - public void ResolveOrder (Actor self, Order order) + public void ResolveOrder(Actor self, Order order) { - if (!self.World.LobbyInfo.GlobalSettings.AllowCheats) return; + if (!self.World.AllowDevCommands) + return; switch(order.OrderString) { @@ -65,22 +66,26 @@ namespace OpenRA.Traits AllTech ^= true; break; } + case "DevFastCharge": { FastCharge ^= true; break; } + case "DevFastBuild": { FastBuild ^= true; break; } + case "DevGiveCash": { var amount = order.ExtraData != 0 ? (int)order.ExtraData : Info.Cash; self.Trait().GiveCash(amount); break; } + case "DevGrowResources": { foreach (var a in self.World.ActorsWithTrait()) @@ -90,6 +95,7 @@ namespace OpenRA.Traits } break; } + case "DevShroudDisable": { DisableShroud ^= true; @@ -98,38 +104,42 @@ namespace OpenRA.Traits self.World.RenderPlayer = DisableShroud ? null : self.Owner; break; } + case "DevPathDebug": { PathDebug ^= true; break; } + case "DevGiveExploration": { self.Owner.Shroud.ExploreAll(self.World); break; } + case "DevResetExploration": { self.Owner.Shroud.ResetExploration(); break; } + case "DevUnlimitedPower": { UnlimitedPower ^= true; break; } + case "DevBuildAnywhere": { BuildAnywhere ^= true; break; } + default: return; } - Game.Debug("Cheat used: {0} by {1}" - .F(order.OrderString, self.Owner.PlayerName)); + Game.Debug("Cheat used: {0} by {1}".F(order.OrderString, self.Owner.PlayerName)); } } } - diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 4c3d4ce498..d0ffe74202 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -71,6 +71,11 @@ namespace OpenRA get { return orderManager.Connection is ReplayConnection; } } + public bool AllowDevCommands + { + get { return LobbyInfo.GlobalSettings.AllowCheats || LobbyInfo.IsSinglePlayer; } + } + public void SetLocalPlayer(string pr) { if (IsReplay) diff --git a/OpenRA.Mods.RA/Console/DevCommands.cs b/OpenRA.Mods.RA/Console/DevCommands.cs index 52ae80921b..1a2ba4a548 100644 --- a/OpenRA.Mods.RA/Console/DevCommands.cs +++ b/OpenRA.Mods.RA/Console/DevCommands.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using System.Collections.Generic; using System.Linq; using OpenRA.Graphics; @@ -29,26 +30,25 @@ namespace OpenRA.Mods.RA var console = world.WorldActor.Trait(); var help = world.WorldActor.Trait(); - console.RegisterCommand("disableshroud", this); - console.RegisterCommand("givecash", this); - console.RegisterCommand("instantbuild", this); - console.RegisterCommand("buildanywhere", this); - console.RegisterCommand("unlimitedpower", this); - console.RegisterCommand("enabletech", this); - console.RegisterCommand("instantcharge", this); + Action register = (name, helpText) => + { + console.RegisterCommand(name, this); + help.RegisterHelp(name, helpText); + }; - help.RegisterHelp("disableshroud", "toggles shroud."); - help.RegisterHelp("givecash", "gives the default or specified amount of money."); - help.RegisterHelp("instantbuild", "toggles instant building."); - help.RegisterHelp("buildanywhere", "toggles you the ability to build anywhere."); - help.RegisterHelp("unlimitedpower", "toggles infinite power."); - help.RegisterHelp("enabletech", "toggles the ability to build everything."); - help.RegisterHelp("instantcharge", "toggles instant support power charging."); + register("disableshroud", "toggles shroud."); + register("givecash", "gives the default or specified amount of money."); + register("instantbuild", "toggles instant building."); + register("buildanywhere", "toggles you the ability to build anywhere."); + register("unlimitedpower", "toggles infinite power."); + register("enabletech", "toggles the ability to build everything."); + register("instantcharge", "toggles instant support power charging."); + register("all", "toggles all cheats and gives you some cash for your trouble."); } public void InvokeCommand(string name, string arg) { - if (!world.LobbyInfo.GlobalSettings.AllowCheats) + if (!world.AllowDevCommands) { Game.Debug("Cheats are disabled."); return; @@ -74,6 +74,16 @@ namespace OpenRA.Mods.RA case "unlimitedpower": IssueDevCommand(world, "DevUnlimitedPower"); break; case "enabletech": IssueDevCommand(world, "DevEnableTech"); break; case "instantcharge": IssueDevCommand(world, "DevFastCharge"); break; + + case "all": + IssueDevCommand(world, "DevShroudDisable"); + IssueDevCommand(world, "DevFastBuild"); + IssueDevCommand(world, "DevBuildAnywhere"); + IssueDevCommand(world, "DevUnlimitedPower"); + IssueDevCommand(world, "DevEnableTech"); + IssueDevCommand(world, "DevFastCharge"); + IssueDevCommand(world, "DevGiveCash"); + break; } } diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index a4498859bb..22f45314d7 100644 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -96,7 +96,7 @@ namespace OpenRA.Mods.RA if (unit == null || !unit.Traits.Contains()) return 0; - if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().FastBuild) + if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) return 0; var time = (int)(unit.GetBuildTime() * Info.BuildSpeed); diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index 1e248d2c92..4dd1f06882 100644 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -184,7 +184,7 @@ namespace OpenRA.Mods.RA public virtual IEnumerable AllItems() { - if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().AllTech) + if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().AllTech) return Produceable.Select(a => a.Key); return Produceable.Where(a => a.Value.Buildable || a.Value.Visible).Select(a => a.Key); @@ -192,7 +192,7 @@ namespace OpenRA.Mods.RA public virtual IEnumerable BuildableItems() { - if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().AllTech) + if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().AllTech) return Produceable.Select(a => a.Key); return Produceable.Where(a => a.Value.Buildable).Select(a => a.Key); @@ -289,7 +289,7 @@ namespace OpenRA.Mods.RA if (unit == null || ! unit.Traits.Contains()) return 0; - if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().FastBuild) + if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) return 0; var time = unit.GetBuildTime() * Info.BuildSpeed;