From 753f3660aaeb39290ed4073386aa0ae65efe5def Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 13 May 2010 19:57:13 +1200 Subject: [PATCH] fix exploitable support powers --- OpenRA.Game/Traits/SupportPowers/SupportPower.cs | 2 +- OpenRA.Mods.RA/AirstrikePower.cs | 2 ++ OpenRA.Mods.RA/IronCurtainPower.cs | 2 ++ OpenRA.Mods.RA/ParatroopersPower.cs | 2 ++ OpenRA.Mods.RA/SonarPulsePower.cs | 2 ++ OpenRA.Mods.RA/SpyPlanePower.cs | 2 ++ OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs | 12 ++++-------- OpenRA.Mods.RA/SupportPowers/NukePower.cs | 2 ++ mods/ra/system.yaml | 3 +++ 9 files changed, 20 insertions(+), 9 deletions(-) diff --git a/OpenRA.Game/Traits/SupportPowers/SupportPower.cs b/OpenRA.Game/Traits/SupportPowers/SupportPower.cs index 2a49365bec..cb49c4b53d 100644 --- a/OpenRA.Game/Traits/SupportPowers/SupportPower.cs +++ b/OpenRA.Game/Traits/SupportPowers/SupportPower.cs @@ -50,7 +50,7 @@ namespace OpenRA.Traits public int TotalTime { get { return (int)(Info.ChargeTime * 60 * 25); } } public bool IsUsed; public bool IsAvailable; - public bool IsReady { get { return RemainingTime == 0; } } + public bool IsReady { get { return IsAvailable && RemainingTime == 0; } } public readonly Player Owner; bool notifiedCharging; diff --git a/OpenRA.Mods.RA/AirstrikePower.cs b/OpenRA.Mods.RA/AirstrikePower.cs index ef48bda92f..ff45e33827 100644 --- a/OpenRA.Mods.RA/AirstrikePower.cs +++ b/OpenRA.Mods.RA/AirstrikePower.cs @@ -42,6 +42,8 @@ namespace OpenRA.Mods.RA public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "Airstrike") { var startPos = Owner.World.ChooseRandomEdgeCell(); diff --git a/OpenRA.Mods.RA/IronCurtainPower.cs b/OpenRA.Mods.RA/IronCurtainPower.cs index fe105fced2..9bab23b682 100644 --- a/OpenRA.Mods.RA/IronCurtainPower.cs +++ b/OpenRA.Mods.RA/IronCurtainPower.cs @@ -44,6 +44,8 @@ namespace OpenRA.Mods.RA public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "IronCurtain") { if (self.Owner == self.World.LocalPlayer) diff --git a/OpenRA.Mods.RA/ParatroopersPower.cs b/OpenRA.Mods.RA/ParatroopersPower.cs index c5e95b3f9c..77f00cb4fa 100644 --- a/OpenRA.Mods.RA/ParatroopersPower.cs +++ b/OpenRA.Mods.RA/ParatroopersPower.cs @@ -45,6 +45,8 @@ namespace OpenRA.Mods.RA public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "ParatroopersActivate") { if (self.Owner == self.World.LocalPlayer) diff --git a/OpenRA.Mods.RA/SonarPulsePower.cs b/OpenRA.Mods.RA/SonarPulsePower.cs index 6f6c4e47dd..be0e3c7eae 100644 --- a/OpenRA.Mods.RA/SonarPulsePower.cs +++ b/OpenRA.Mods.RA/SonarPulsePower.cs @@ -41,6 +41,8 @@ namespace OpenRA.Mods.RA public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "SonarPulse") { // TODO: Reveal submarines diff --git a/OpenRA.Mods.RA/SpyPlanePower.cs b/OpenRA.Mods.RA/SpyPlanePower.cs index b984372e88..3caa89843e 100644 --- a/OpenRA.Mods.RA/SpyPlanePower.cs +++ b/OpenRA.Mods.RA/SpyPlanePower.cs @@ -44,6 +44,8 @@ namespace OpenRA.Mods.RA public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "SpyPlane") { FinishActivate(); diff --git a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs index 66c3e9930b..9f1bbf9216 100755 --- a/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ChronoshiftPower.cs @@ -35,16 +35,12 @@ namespace OpenRA.Mods.RA.SupportPowers class ChronoshiftPower : SupportPower, IResolveOrder { public ChronoshiftPower(Actor self, ChronoshiftPowerInfo info) : base(self, info) { } - protected override void OnBeginCharging() { Sound.PlayToPlayer(Owner, "chrochr1.aud"); } - protected override void OnFinishCharging() { Sound.PlayToPlayer(Owner, "chrordy1.aud"); } - protected override void OnActivate() - { - Game.controller.orderGenerator = new SelectTarget(); - Sound.Play("slcttgt1.aud"); - } + protected override void OnActivate() { Game.controller.orderGenerator = new SelectTarget(); } public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "ChronosphereSelect" && self.Owner == self.World.LocalPlayer) { Game.controller.orderGenerator = new SelectDestination(order.TargetActor); @@ -67,7 +63,7 @@ namespace OpenRA.Mods.RA.SupportPowers var chronosphere = self.World.Queries .OwnedBy[self.Owner] .WithTrait() - .Select(x=>x.Actor).FirstOrDefault(); + .Select(x => x.Actor).FirstOrDefault(); bool success = order.TargetActor.traits.Get().Activate(order.TargetActor, order.TargetLocation, diff --git a/OpenRA.Mods.RA/SupportPowers/NukePower.cs b/OpenRA.Mods.RA/SupportPowers/NukePower.cs index 4373a9eebd..d9c3fb9694 100755 --- a/OpenRA.Mods.RA/SupportPowers/NukePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/NukePower.cs @@ -43,6 +43,8 @@ namespace OpenRA.Mods.RA.SupportPowers public void ResolveOrder(Actor self, Order order) { + if (!IsAvailable) return; + if (order.OrderString == "NuclearMissile") { var silo = self.World.Queries.OwnedBy[self.Owner] diff --git a/mods/ra/system.yaml b/mods/ra/system.yaml index 9635659906..1ab871d9f6 100644 --- a/mods/ra/system.yaml +++ b/mods/ra/system.yaml @@ -22,6 +22,9 @@ Player: TechLevel: 12 Duration: 3 KillCargo: yes + SelectTargetSound: slcttgt1.aud + BeginChargeSound: chrochr1.aud + EndChargeSound: chrordy1.aud IronCurtainPower: Image: infxicon ChargeTime: 11