diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs index b9508be1b0..8011aff53c 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs @@ -111,7 +111,7 @@ namespace OpenRA.Mods.Common.Traits a.CheckFire(self, facing, target); } - public IEnumerable Orders + IEnumerable IIssueOrder.Orders { get { @@ -127,7 +127,7 @@ namespace OpenRA.Mods.Common.Traits } } - public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) + Order IIssueOrder.IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) { if (order is AttackOrderTargeter) { @@ -145,7 +145,7 @@ namespace OpenRA.Mods.Common.Traits return null; } - public virtual void ResolveOrder(Actor self, Order order) + void IResolveOrder.ResolveOrder(Actor self, Order order) { var forceAttack = order.OrderString == forceAttackOrderName; if (forceAttack || order.OrderString == attackOrderName) @@ -159,7 +159,12 @@ namespace OpenRA.Mods.Common.Traits } if (order.OrderString == "Stop") - self.CancelActivity(); + OnStopOrder(self); + } + + protected virtual void OnStopOrder(Actor self) + { + self.CancelActivity(); } static Target TargetFromOrder(Actor self, Order order) @@ -184,7 +189,7 @@ namespace OpenRA.Mods.Common.Traits return Target.Invalid; } - public string VoicePhraseForOrder(Actor self, Order order) + string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) { return order.OrderString == attackOrderName || order.OrderString == forceAttackOrderName ? Info.Voice : null; } diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs index 3dfced6d90..ee3bb48dee 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackFollow.cs @@ -46,12 +46,10 @@ namespace OpenRA.Mods.Common.Traits return new AttackActivity(self, newTarget, allowMove, forceAttack); } - public override void ResolveOrder(Actor self, Order order) + protected override void OnStopOrder(Actor self) { - base.ResolveOrder(self, order); - - if (order.OrderString == "Stop") - Target = Target.Invalid; + Target = Target.Invalid; + base.OnStopOrder(self); } public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) diff --git a/OpenRA.Mods.D2k/Traits/Sandworm.cs b/OpenRA.Mods.D2k/Traits/Sandworm.cs index 1130bb0c27..fbf6ea3ed4 100644 --- a/OpenRA.Mods.D2k/Traits/Sandworm.cs +++ b/OpenRA.Mods.D2k/Traits/Sandworm.cs @@ -82,11 +82,12 @@ namespace OpenRA.Mods.D2k.Traits // If close enough, we don't care about other actors. var target = self.World.FindActorsInCircle(self.CenterPosition, WormInfo.IgnoreNoiseAttackRange) - .FirstOrDefault(x => attackTrait.HasAnyValidWeapons(Target.FromActor(x))); - if (target != null) + .Select(t => Target.FromActor(t)) + .FirstOrDefault(t => attackTrait.HasAnyValidWeapons(t)); + + if (target.Type == TargetType.Actor) { - self.CancelActivity(); - attackTrait.ResolveOrder(self, new Order("Attack", target, true) { TargetActor = target }); + attackTrait.AttackTarget(target, false, true, false); return; }