public override bool SelectTarget(out IEnumerable <IWowUnit> possibleTargets) { possibleTargets = Bot.Objects.All.OfType <IWowUnit>() .Where(e => TargetValidator.IsValid(e) && e.IsInCombat) .OrderByDescending(e => IsPriorityTarget(e)) .ThenByDescending(e => e.Type) .ThenBy(e => e.DistanceTo(Bot.Player)); return(possibleTargets != null && possibleTargets.Any()); }
public override bool SelectTarget(out IEnumerable <IWowUnit> possibleTargets) { possibleTargets = null; IEnumerable <IWowUnit> unitsAroundMe = Bot.Objects.All .OfType <IWowUnit>() .Where(e => TargetValidator.IsValid(e) && e.IsInCombat) .OrderByDescending(e => e.Type) .ThenByDescending(e => e.MaxHealth); IEnumerable <IWowUnit> targetsINeedToTank = unitsAroundMe .Where(e => e.Type != WowObjectType.Player && e.TargetGuid != Bot.Wow.PlayerGuid && Bot.Objects.PartymemberGuids.Contains(e.TargetGuid)); if (targetsINeedToTank.Any()) { possibleTargets = targetsINeedToTank; return(true); } else { if (Bot.Objects.Partymembers.Any()) { Dictionary <IWowUnit, int> targets = new(); foreach (IWowUnit unit in Bot.Objects.Partymembers) { if (unit.TargetGuid > 0) { IWowUnit targetUnit = Bot.GetWowObjectByGuid <IWowUnit>(unit.TargetGuid); if (targetUnit != null && Bot.Db.GetReaction(targetUnit, Bot.Player) != WowUnitReaction.Friendly) { if (!targets.ContainsKey(targetUnit)) { targets.Add(targetUnit, 1); } else { ++targets[targetUnit]; } } } } possibleTargets = targets.OrderBy(e => e.Value).Select(e => e.Key); return(true); } possibleTargets = unitsAroundMe; return(true); } }
public override bool SelectTarget(out IEnumerable <IWowUnit> possibleTargets) { List <IWowUnit> healableUnits = new(Bot.Objects.Partymembers) { Bot.Player }; // healableUnits.AddRange(Bot.ObjectManager.PartyPets); possibleTargets = healableUnits .Where(e => TargetValidator.IsValid(e) && e.Health > 1 && e.Health < e.MaxHealth) .OrderByDescending(e => e.Type) .ThenByDescending(e => e.MaxHealth - e.Health); return(possibleTargets.Any()); }