diff --git a/OpenRA.Mods.RA/AutoTarget.cs b/OpenRA.Mods.RA/AutoTarget.cs index 2155222cb3..1d0c2b58a1 100644 --- a/OpenRA.Mods.RA/AutoTarget.cs +++ b/OpenRA.Mods.RA/AutoTarget.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA public object Create(ActorInitializer init) { return new AutoTarget(init.self, this); } } - public enum UnitStance { HoldFire, ReturnFire, AttackAnything }; + public enum UnitStance { HoldFire, ReturnFire, Defend, AttackAnything }; public class AutoTarget : INotifyIdle, INotifyDamage, ITick, IResolveOrder { @@ -64,26 +64,25 @@ namespace OpenRA.Mods.RA if (e.Damage < 0) return; // don't retaliate against healers - attack.AttackTarget(Target.FromActor(e.Attacker), false, Info.AllowMovement); + attack.AttackTarget(Target.FromActor(e.Attacker), false, Info.AllowMovement && stance != UnitStance.Defend); } public void TickIdle(Actor self) { - if (stance < UnitStance.AttackAnything) return; + if (stance < UnitStance.Defend) return; var target = ScanForTarget(self, null); if (target != null) { self.SetTargetLine(Target.FromActor(target), Color.Red, false); - self.QueueActivity(attack.GetAttackActivity(self, - Target.FromActor(target), - Info.AllowMovement)); + attack.AttackTarget(Target.FromActor(target), false, Info.AllowMovement && stance != UnitStance.Defend); } } public void Tick(Actor self) { - --nextScanTime; + if (nextScanTime > 0) + --nextScanTime; } public Actor ScanForTarget(Actor self, Actor currentTarget) @@ -101,7 +100,7 @@ namespace OpenRA.Mods.RA { var targetActor = ScanForTarget(self, null); if (targetActor != null) - attack.AttackTarget(Target.FromActor(targetActor), false, allowMovement); + attack.AttackTarget(Target.FromActor(targetActor), false, allowMovement && stance != UnitStance.Defend); } Actor ChooseTarget(Actor self, float range)