Esempio n. 1
0
 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);
 }