public static List<Obj_AI_Base> GetEvadeTargets( EvadeSpellData spell, bool isBlink = false, 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( GameObjects.AllyHeroes.Where(i => i.IsValidTarget(spell.MaxRange, false) && !i.IsMe)); break; case SpellTargets.AllyMinions: allTargets.AddRange(GameObjects.AllyMinions.Where(i => i.IsValidTarget(spell.MaxRange, false))); break; case SpellTargets.AllyWards: allTargets.AddRange(GameObjects.AllyWards.Where(i => i.IsValidTarget(spell.MaxRange, false))); break; case SpellTargets.EnemyChampions: allTargets.AddRange(GameObjects.EnemyHeroes.Where(i => i.IsValidTarget(spell.MaxRange))); break; case SpellTargets.EnemyMinions: allTargets.AddRange(GameObjects.EnemyMinions.Where(i => i.IsValidTarget(spell.MaxRange))); break; case SpellTargets.EnemyWards: allTargets.AddRange(GameObjects.EnemyWards.Where(i => i.IsValidTarget(spell.MaxRange))); break; } } foreach (var target in allTargets.Where(i => dontCheckForSafety || IsSafePoint(i.ServerPosition.ToVector2()).IsSafe) .Where(i => spell.Name != "YasuoDashWrapper" || !i.HasBuff("YasuoDashWrapper"))) { if (isBlink) { if (Variables.TickCount - LastWardJumpAttempt < 250 || IsSafeToBlink(target.ServerPosition.ToVector2(), Configs.EvadingFirstTimeOffset, spell.Delay)) { goodTargets.Add(target); } if (Variables.TickCount - LastWardJumpAttempt < 250 || IsSafeToBlink( target.ServerPosition.ToVector2(), Configs.EvadingSecondTimeOffset, spell.Delay)) { badTargets.Add(target); } } else { var pathToTarget = new List<Vector2> { Evade.PlayerPosition, target.ServerPosition.ToVector2() }; if (Variables.TickCount - LastWardJumpAttempt < 250 || IsSafePath(pathToTarget, Configs.EvadingFirstTimeOffset, spell.Speed, spell.Delay).IsSafe) { goodTargets.Add(target); } if (Variables.TickCount - LastWardJumpAttempt < 250 || IsSafePath(pathToTarget, Configs.EvadingSecondTimeOffset, spell.Speed, spell.Delay).IsSafe) { badTargets.Add(target); } } } return goodTargets.Count > 0 ? goodTargets : (onlyGood ? new List<Obj_AI_Base>() : badTargets); }