private static IEnumerable<Obj_AI_Base> GetEvadeTargets(
EvadeSpellData spell,
bool onlyGood = false,
bool dontCheckForSafety = false)
{
var badTargets = new List<Obj_AI_Base>();
var goodTargets = new List<Obj_AI_Base>();
var allTargets = new List<Obj_AI_Base>();
foreach (var targetType in spell.ValidTargets)
{
switch (targetType)
{
case SpellTargets.AllyChampions:
allTargets.AddRange(
EntityManager.Heroes.Allies.Where(i => i.IsValidTarget(spell.MaxRange, false) && !i.IsMe));
break;
case SpellTargets.AllyMinions:
allTargets.AddRange(EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Ally, ObjectManager.Player.ServerPosition, spell.MaxRange));
break;
case SpellTargets.AllyWards:
allTargets.AddRange(
ObjectManager.Get<Obj_AI_Minion>()
.Where(
i =>
i.IsValidTarget(spell.MaxRange, false) && i.Team == ObjectManager.Player.Team));
break;
case SpellTargets.EnemyChampions:
allTargets.AddRange(EntityManager.Heroes.Enemies.Where(i => i.IsValidTarget(spell.MaxRange)));
break;
case SpellTargets.EnemyMinions:
allTargets.AddRange(EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Enemy, ObjectManager.Player.ServerPosition, spell.MaxRange));
break;
}
}
foreach (var target in
allTargets.Where(i => dontCheckForSafety || IsSafePoint(i.ServerPosition.To2D()).IsSafe))
{
if (spell.Name == "YasuoDashWrapper" && target.HasBuff("YasuoDashWrapper"))
{
continue;
}
var pathToTarget = new List<Vector2> { ObjectManager.Player.ServerPosition.To2D(), target.ServerPosition.To2D() };
if (IsSafePath(pathToTarget, Configs.EvadingFirstTimeOffset, spell.Speed, spell.Delay).IsSafe)
{
goodTargets.Add(target);
}
if (IsSafePath(pathToTarget, Configs.EvadingSecondTimeOffset, spell.Speed, spell.Delay).IsSafe)
{
badTargets.Add(target);
}
}
return goodTargets.Any() ? goodTargets : (onlyGood ? new List<Obj_AI_Base>() : badTargets);
}