diff --git a/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs b/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs index 24f96070ec..7504c4e75c 100644 --- a/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/GuardOrderGenerator.cs @@ -31,9 +31,11 @@ namespace OpenRA.Mods.Common.Orders yield break; world.CancelInputMode(); + + var queued = mi.Modifiers.HasModifier(Modifiers.Shift); foreach (var subject in Subjects) if (subject != target) - yield return new Order(OrderName, subject, false) { TargetActor = target }; + yield return new Order(OrderName, subject, queued) { TargetActor = target }; } public override void Tick(World world) diff --git a/OpenRA.Mods.Common/Traits/Guard.cs b/OpenRA.Mods.Common/Traits/Guard.cs index 04b9dcf89b..01ffb25d1e 100644 --- a/OpenRA.Mods.Common/Traits/Guard.cs +++ b/OpenRA.Mods.Common/Traits/Guard.cs @@ -41,19 +41,18 @@ namespace OpenRA.Mods.Common.Traits public void ResolveOrder(Actor self, Order order) { if (order.OrderString == "Guard") - { - var target = Target.FromActor(order.TargetActor); - - GuardTarget(self, target); - } + GuardTarget(self, Target.FromActor(order.TargetActor), order.Queued); } - public void GuardTarget(Actor self, Target target) + public void GuardTarget(Actor self, Target target, bool queued = false) { + if (!queued) + self.CancelActivity(); + self.SetTargetLine(target, Color.Yellow); var range = target.Actor.Info.TraitInfo().Range; - self.QueueActivity(false, new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range))); + self.QueueActivity(new AttackMoveActivity(self, move.MoveFollow(self, target, WDist.Zero, range))); } public string VoicePhraseForOrder(Actor self, Order order)