diff --git a/OpenRA.Mods.RA/Air/Helicopter.cs b/OpenRA.Mods.RA/Air/Helicopter.cs index ae5b77aa21..a90f08246d 100755 --- a/OpenRA.Mods.RA/Air/Helicopter.cs +++ b/OpenRA.Mods.RA/Air/Helicopter.cs @@ -109,6 +109,17 @@ namespace OpenRA.Mods.RA.Air self.QueueActivity(Info.RearmBuildings.Contains(order.TargetActor.Info.Name) ? (IActivity)new Rearm() : new Repair(order.TargetActor)); } + + if (order.OrderString == "Stop") + { + self.CancelActivity(); + + if (Info.LandWhenIdle) + { + self.QueueActivity(new Turn(Info.InitialFacing)); + self.QueueActivity(new HeliLand(true)); + } + } } int offsetTicks = 0; diff --git a/OpenRA.Mods.RA/Air/Plane.cs b/OpenRA.Mods.RA/Air/Plane.cs index 467f0c17de..2d57942deb 100755 --- a/OpenRA.Mods.RA/Air/Plane.cs +++ b/OpenRA.Mods.RA/Air/Plane.cs @@ -112,6 +112,11 @@ namespace OpenRA.Mods.RA.Air info.RearmBuildings.Contains(order.TargetActor.Info.Name) ? (IActivity)new Rearm() : new Repair(order.TargetActor)); } + else if (order.OrderString == "Stop") + { + UnReserve(); + self.CancelActivity(); + } else { // Game.Debug("Unreserve due to unhandled order: {0}".F(order.OrderString)); diff --git a/OpenRA.Mods.RA/AttackBase.cs b/OpenRA.Mods.RA/AttackBase.cs index ce92bf3436..1333941b02 100644 --- a/OpenRA.Mods.RA/AttackBase.cs +++ b/OpenRA.Mods.RA/AttackBase.cs @@ -149,7 +149,7 @@ namespace OpenRA.Mods.RA return null; } - public void ResolveOrder(Actor self, Order order) + public virtual void ResolveOrder(Actor self, Order order) { if (order.OrderString == "Attack" || order.OrderString == "AttackHold") { diff --git a/OpenRA.Mods.RA/AttackTurreted.cs b/OpenRA.Mods.RA/AttackTurreted.cs index 554efe47cc..0322fd0a29 100644 --- a/OpenRA.Mods.RA/AttackTurreted.cs +++ b/OpenRA.Mods.RA/AttackTurreted.cs @@ -53,6 +53,14 @@ namespace OpenRA.Mods.RA return new AttackActivity( newTarget ); } + public override void ResolveOrder(Actor self, Order order) + { + base.ResolveOrder(self, order); + + if (order.OrderString == "Stop") + target = Target.None; + } + bool buildComplete = false; public void BuildingComplete(Actor self) { buildComplete = true; } diff --git a/OpenRA.Mods.RA/Move/Mobile.cs b/OpenRA.Mods.RA/Move/Mobile.cs index b3314864c8..7851821789 100755 --- a/OpenRA.Mods.RA/Move/Mobile.cs +++ b/OpenRA.Mods.RA/Move/Mobile.cs @@ -205,6 +205,11 @@ namespace OpenRA.Mods.RA.Move var target = order.TargetLocation.Clamp(self.World.Map.Bounds); PerformMove(self, target, order.Queued && !self.IsIdle); } + + if (order.OrderString == "Stop") + { + self.CancelActivity(); + } } public string VoicePhraseForOrder(Actor self, Order order)