diff --git a/OpenRA.Mods.RA/Guard.cs b/OpenRA.Mods.RA/Guard.cs index 6c0696cc85..12efeca889 100644 --- a/OpenRA.Mods.RA/Guard.cs +++ b/OpenRA.Mods.RA/Guard.cs @@ -61,8 +61,9 @@ namespace OpenRA.Mods.RA if (target == null || subjects.All(s => s.IsDead())) yield break; - foreach (var actor in subjects) - yield return new Order("Guard", actor, false) { TargetActor = target }; + foreach (var subject in subjects) + if (subject != target) + yield return new Order("Guard", subject, false) { TargetActor = target }; } public void Tick(World world) @@ -76,10 +77,13 @@ namespace OpenRA.Mods.RA public string GetCursor(World world, CPos xy, MouseInput mi) { - return world.Map.IsInMap(xy) - && FriendlyGuardableUnitsAtMouse(world, mi).Any() - ? "guard" - : "move-blocked"; + if (world.Map.IsInMap(xy)) + { + var targets = FriendlyGuardableUnitsAtMouse(world, mi); + if (targets.Any() && (subjects.Count() > 1 || (subjects.Count() == 1 && subjects.First() != targets.First()))) + return "guard"; + } + return "move-blocked"; } static IEnumerable FriendlyGuardableUnitsAtMouse(World world, MouseInput mi) diff --git a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs index b9c54387ec..7e96ba8847 100644 --- a/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs +++ b/OpenRA.Mods.RA/Widgets/WorldCommandWidget.cs @@ -150,7 +150,7 @@ namespace OpenRA.Mods.RA.Widgets bool PerformGuard() { - var actors = World.Selection.Actors.Where(a => a.Owner == World.LocalPlayer && a.HasTrait()); + var actors = World.Selection.Actors.Where(a => !a.Destroyed && a.Owner == World.LocalPlayer && a.HasTrait()); if (actors.Any()) World.OrderGenerator = new GuardOrderGenerator(actors);