Exemple #1
0
 private static void PanicE(AttackableUnit unit, AttackableUnit target)
 {
     if (unit.IsMe && target.GetType() == myHero.GetType())
     {
         _PanicE((Obj_AI_Base)target, new Vector3(0f, 0f, 0f), true);
     }
 }
Exemple #2
0
        private static void Orbwalker_OnPreAttack(AttackableUnit target, Orbwalker.PreAttackArgs args)
        {
            if (R.IsReady() && Settings.Combo.UseR && (target.GetType() == typeof(AIHeroClient)))
            {
                if (Player.Instance.CountEnemiesInRangeCached(1000) < Settings.Combo.RIfEnemiesHit)
                {
                    return;
                }

                var polygon = new Geometry.Polygon.Rectangle(Player.Instance.Position, Player.Instance.Position.Extend(args.Target, 850).To3D(), 65);

                var count =
                    StaticCacheProvider.GetChampions(CachedEntityType.EnemyHero,
                                                     x =>
                                                     !x.IsDead && x.IsValidTargetCached(950) &&
                                                     new Geometry.Polygon.Circle(x.Position, x.BoundingRadius).Points.Any(
                                                         k => polygon.IsInside(k))).Count();

                if (count >= Settings.Combo.RIfEnemiesHit)
                {
                    Misc.PrintInfoMessage("Casting R because it can hit <font color=\"#ff1493\">" + count + "</font>. enemies");
                    R.Cast();
                }
            }
        }
Exemple #3
0
        private static void Orbwalker_OnPreAttack(AttackableUnit target, Orbwalker.PreAttackArgs args)
        {
            IsPreAttack = true;

            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LaneClear))
            {
                var jungleMinions = StaticCacheProvider.GetMinions(CachedEntityType.Monsters, x => x.IsValidTargetCached(Player.Instance.GetAutoAttackRange())).ToList();
                var laneMinions   = StaticCacheProvider.GetMinions(CachedEntityType.EnemyMinion, x => x.IsValidTargetCached(Player.Instance.GetAutoAttackRange())).ToList();

                if (jungleMinions.Any())
                {
                    if (Settings.LaneClear.UseQInJungleClear && Q.IsReady() && (GetAxesCount() == 0) &&
                        (Player.Instance.ManaPercent >= Settings.LaneClear.MinManaQ))
                    {
                        Q.Cast();
                    }

                    if (Settings.LaneClear.UseWInJungleClear && W.IsReady() && (jungleMinions.Count > 1) &&
                        !HasAttackSpeedFuryBuff && (Player.Instance.ManaPercent >= Settings.LaneClear.MinManaW))
                    {
                        W.Cast();
                    }
                    return;
                }
                if (laneMinions.Any() && Modes.LaneClear.CanILaneClear())
                {
                    if (Settings.LaneClear.UseQInLaneClear && Q.IsReady() && (GetAxesCount() == 0) &&
                        (Player.Instance.ManaPercent >= Settings.LaneClear.MinManaQ))
                    {
                        Q.Cast();
                    }

                    if (Settings.LaneClear.UseWInLaneClear && W.IsReady() && (laneMinions.Count > 3) &&
                        !HasAttackSpeedFuryBuff && (Player.Instance.ManaPercent >= Settings.LaneClear.MinManaW))
                    {
                        W.Cast();
                    }
                    return;
                }
            }

            if ((target.GetType() != typeof(AIHeroClient)) || !Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                return;
            }

            if (Q.IsReady() && (GetAxesCount() == 0))
            {
                Q.Cast();
            }

            if (!W.IsReady() || !Settings.Combo.UseW || HasAttackSpeedFuryBuff || (Player.Instance.Mana - 40 < 145))
            {
                return;
            }

            W.Cast();
        }
Exemple #4
0
        private static void EWhitelist()
        {
            Spell spell = E;

            AttackableUnit target = Orbwalker.GetTarget();

            if (target != null && target.GetType() == typeof(AIHeroClient) && eSelector.GetValue <MenuBool>("eSelect" + ((AIHeroClient)target).CharacterName).Enabled&& spell.CanCast((AIHeroClient)target))
            {
                spell.Cast((AIHeroClient)target);
            }
        }
Exemple #5
0
        private static void Orbwalker_OnPostAttack(AttackableUnit target, EventArgs args)
        {
            if ((target?.GetType() != typeof(AIHeroClient)) || !Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                return;
            }

            if (Q.IsReady() && (GetAxesCount() != 0) && (GetAxesCount() < Settings.Combo.MaxAxesAmount))
            {
                Q.Cast();
            }
        }
Exemple #6
0
        private static void OnPostAttack(AttackableUnit target, EventArgs args)
        {
            if (target == null || !target.IsEnemy || target.GetType() != typeof(AIHeroClient))
            {
                return;
            }

            switch (Orbwalker.ActiveModesFlags)
            {
            case Orbwalker.ActiveModes.Combo:
                if (_comboMenu["com.itwitch.combo.useW"].Cast <CheckBox>().CurrentValue&& W.IsReady())
                {
                    if (_miscMenu["com.itwitch.misc.saveManaE"].Cast <CheckBox>().CurrentValue&&
                        ObjectManager.Player.Mana <= E.ManaCost + W.ManaCost)
                    {
                        return;
                    }

                    if (_miscMenu["com.itwitch.misc.noWTurret"].Cast <CheckBox>().CurrentValue&&
                        ObjectManager.Player.IsUnderTurret())
                    {
                        return;
                    }

                    var wTarget = TargetSelector.GetTarget(W.Range, DamageType.Physical);

                    if (wTarget != null &&
                        wTarget.Health
                        < ObjectManager.Player.GetAutoAttackDamage(wTarget, true)
                        * _miscMenu["com.itwitch.misc.noWAA"].Cast <Slider>().CurrentValue)
                    {
                        return;
                    }

                    if (wTarget.IsValidTarget(W.Range) &&
                        !ObjectManager.Player.HasBuff("TwitchHideInShadows"))
                    {
                        var prediction = W.GetPrediction(wTarget);
                        if (prediction.HitChance >= HitChance.High)
                        {
                            W.Cast(prediction.CastPosition);
                        }
                    }
                }
                break;
            }
        }
Exemple #7
0
        private static void Orbwalker_OnPostAttack(AttackableUnit target, EventArgs args)
        {
            if (target == null || target.IsMe || target.GetType() != typeof(AIHeroClient) ||
                !MenuManager.MenuValues["Activator.Enable"])
            {
                return;
            }

            if ((MenuManager.MenuValues["Activator.ItemsMenu.OnlyInCombo"] &&
                 Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo)) ||
                !MenuManager.MenuValues["Activator.ItemsMenu.OnlyInCombo"])
            {
                Items[ItemsEnum.ElixirofIron]?.UseItem();
                Items[ItemsEnum.ElixirofSorcery]?.UseItem();
                Items[ItemsEnum.ElixirofWrath]?.UseItem();

                foreach (var enumValues in from enumValues in Enum.GetValues(typeof(ItemsEnum)).Cast <ItemsEnum>()
                         where
                         Items[enumValues] != null && Items[enumValues].ItemUsageWhen == ItemUsageWhen.AfterAttack &&
                         Items[enumValues].ItemType == ItemType.Offensive
                         where
                         (int)Player.Instance.HealthPercent <=
                         MenuManager.MenuValues["Activator.ItemsMenu." + Items[enumValues].ItemName + ".MyMinHP", true] &&
                         (int)target.HealthPercent <=
                         MenuManager.MenuValues[
                             "Activator.ItemsMenu." + Items[enumValues].ItemName + ".TargetsMinHP", true] &&
                         Player.Instance.Position.CountEnemiesInRangeCached(Player.Instance.GetAutoAttackRange() + 250) >=
                         MenuManager.MenuValues[
                             "Activator.ItemsMenu." + Items[enumValues].ItemName + ".IfEnemiesNear", true]
                         where Items[enumValues].ToItem().IsReady() && Items[enumValues].Range > 0 &&
                         Items[enumValues].ToItem().IsInRange(target as AIHeroClient)
                         select enumValues)
                {
                    Items[enumValues].ToItem().Cast(target as AIHeroClient);
                }
            }
        }
Exemple #8
0
 private static void Orbwalker_OnPostAttack(AttackableUnit target, EventArgs args)
 {
     if (Q.IsReady() && Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo) && Settings.Combo.UseQ && (target?.GetType() == typeof(AIHeroClient)) &&
         target.IsValidTargetCached(Player.Instance.GetAutoAttackRange() - 100) &&
         (Player.Instance.Mana >= 130 + (R.IsReady() ? 100 : 0)))
     {
         Q.Cast();
     }
 }
Exemple #9
0
        private static void Orbwalker_OnPreAttack(AttackableUnit target, Orbwalker.PreAttackArgs args)
        {
            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LaneClear))
            {
                var jungleMinions =
                    EntityManager.MinionsAndMonsters.GetJungleMonsters(Player.Instance.Position,
                                                                       Player.Instance.GetAutoAttackRange()).ToList();

                var laneMinions =
                    EntityManager.MinionsAndMonsters.GetLaneMinions(EntityManager.UnitTeam.Enemy,
                                                                    Player.Instance.Position,
                                                                    Player.Instance.GetAutoAttackRange()).ToList();

                if (jungleMinions.Any())
                {
                    if (Settings.LaneClear.UseQInJungleClear && Q.IsReady() && GetAxesCount() == 0 &&
                        Player.Instance.ManaPercent >= Settings.LaneClear.MinManaQ)
                    {
                        Q.Cast();
                    }

                    if (Settings.LaneClear.UseWInJungleClear && W.IsReady() && jungleMinions.Count > 1 &&
                        !HasAttackSpeedFuryBuff &&
                        Player.Instance.ManaPercent >= Settings.LaneClear.MinManaW)
                    {
                        W.Cast();
                    }
                    return;
                }
                if (laneMinions.Any() && Modes.LaneClear.CanILaneClear())
                {
                    if (Settings.LaneClear.UseQInLaneClear && Q.IsReady() && GetAxesCount() == 0 &&
                        Player.Instance.ManaPercent >= Settings.LaneClear.MinManaQ)
                    {
                        Q.Cast();
                    }

                    if (Settings.LaneClear.UseWInLaneClear && W.IsReady() && laneMinions.Count > 3 &&
                        !HasAttackSpeedFuryBuff &&
                        Player.Instance.ManaPercent >= Settings.LaneClear.MinManaW)
                    {
                        W.Cast();
                    }
                    return;
                }
            }

            if (target.GetType() != typeof(AIHeroClient) || !Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                return;
            }

            if (Q.IsReady() && GetAxesCount() == 0)
            {
                Q.Cast();
            }

            if (!W.IsReady() || !Settings.Combo.UseW || HasAttackSpeedFuryBuff || !(Player.Instance.Mana - 40 > 145))
            {
                return;
            }

            var t = TargetSelector.GetTarget(Player.Instance.GetAutoAttackRange(), DamageType.Physical);

            if (t != null)
            {
                W.Cast();
            }
        }
Exemple #10
0
        private static void Orbwalker_OnPostAttack(AttackableUnit target, EventArgs args)
        {
            if (!Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                return;
            }

            var hero = R.GetTarget();

            if (hero != null && E.IsReady() && R.IsReady() && (Player.Instance.Mana - EMana - RMana > 0) && hero.CountEnemiesInRange(600) < 3 &&
                !hero.HasUndyingBuffA() &&
                (Player.Instance.HealthPercent > 40) && !hero.Position.IsVectorUnderEnemyTower())
            {
                var damage = Damage.GetQDamage(hero, true) +
                             Damage.GetWDamage(hero) +
                             Damage.GetRDamage(hero, true) +
                             Player.Instance.GetAutoAttackDamage(hero) * 2;

                if (hero.TotalHealthWithShields() > damage && hero.TotalHealthWithShields() > Player.Instance.GetAutoAttackDamage(hero))
                {
                    return;
                }

                DardochTrickTarget = hero;

                Core.DelayAction(() =>
                {
                    if (DardochTrickTarget == null)
                    {
                        return;
                    }

                    if (DardochTrickTarget.IsDead)
                    {
                        return;
                    }

                    var t = EntityManager.Heroes.Enemies.FirstOrDefault(x => x.NetworkId == DardochTrickTarget.NetworkId);

                    if (t == null)
                    {
                        return;
                    }

                    var rPred = R.GetPrediction(t);

                    if (rPred.HitChancePercent < 55)
                    {
                        return;
                    }

                    DardochTrick = true;

                    R.Cast(rPred.CastPosition);
                }, 250 + Game.Ping / 2);
            }

            if (target.GetType() != typeof(AIHeroClient) || target.IsMe || !Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))//no idea why it invokes twice
            {
                return;
            }

            if (!E.IsReady() || !Settings.Combo.UseE || Settings.Misc.EUsageMode != 1 || DardochTrick || GetAmmoCount > 1)
            {
                return;
            }

            var heroClient = TargetSelector.GetTarget(Player.Instance.GetAutoAttackRange() + 425, DamageType.Physical);
            var position   = Vector3.Zero;

            switch (Settings.Misc.EMode)
            {
            case 0:
                if (heroClient != null && Player.Instance.HealthPercent > 50 && heroClient.HealthPercent < 30 && heroClient.CountEnemiesInRange(600) < 2)
                {
                    if (!Player.Instance.Position.Extend(Game.CursorPos, 420)
                        .To3D()
                        .IsVectorUnderEnemyTower() &&
                        (!heroClient.IsMelee ||
                         Player.Instance.Position.Extend(Game.CursorPos, 420)
                         .IsInRange(heroClient, heroClient.GetAutoAttackRange() * 1.5f)))
                    {
                        Console.WriteLine("[DEBUG] 1v1 Game.CursorPos");
                        position = Game.CursorPos.Distance(Player.Instance) > E.Range
                                ? Player.Instance.Position.Extend(Game.CursorPos, 420).To3D()
                                : Game.CursorPos;
                    }
                }
                else if (heroClient != null)
                {
                    var closest =
                        EntityManager.Heroes.Enemies.Where(x => x.IsValidTarget(1300))
                        .OrderBy(x => x.Distance(Player.Instance)).ToArray()[0];

                    var list =
                        SafeSpotFinder.GetSafePosition(Player.Instance.Position.To2D(), 420,
                                                       1300,
                                                       heroClient.IsMelee ? heroClient.GetAutoAttackRange() * 2 : heroClient.GetAutoAttackRange())
                        .Where(
                            x =>
                            !x.Key.To3D().IsVectorUnderEnemyTower() &&
                            x.Key.IsInRange(Prediction.Position.PredictUnitPosition(closest, 850),
                                            Player.Instance.GetAutoAttackRange() - 50))
                        .Select(source => source.Key)
                        .ToList();

                    if (list.Any())
                    {
                        var paths =
                            EntityManager.Heroes.Enemies.Where(x => x.IsValidTarget(1300))
                            .Select(x => x.Path)
                            .Count(result => result != null && result.Last().Distance(Player.Instance) < 300);

                        var asc = Misc.SortVectorsByDistance(list, heroClient.Position.To2D())[0].To3D();
                        if (Player.Instance.CountEnemiesInRange(Player.Instance.GetAutoAttackRange()) == 0 &&
                            !EntityManager.Heroes.Enemies.Where(x => x.Distance(Player.Instance) < 1000).Any(
                                x => Prediction.Position.PredictUnitPosition(x, 800)
                                .IsInRange(asc,
                                           x.IsMelee ? x.GetAutoAttackRange() * 2 : x.GetAutoAttackRange())))
                        {
                            position = asc;

                            Console.WriteLine("[DEBUG] Paths low sorting Ascending");
                        }
                        else if (Player.Instance.CountEnemiesInRange(1000) <= 2 && (paths == 0 || paths == 1) &&
                                 ((closest.Health < Player.Instance.GetAutoAttackDamage(closest, true) * 2) ||
                                  (Orbwalker.LastTarget is AIHeroClient &&
                                   Orbwalker.LastTarget.Health <
                                   Player.Instance.GetAutoAttackDamage(closest, true) * 2)))
                        {
                            position = asc;
                        }
                        else
                        {
                            position =
                                Misc.SortVectorsByDistanceDescending(list, heroClient.Position.To2D())[0].To3D();
                            Console.WriteLine("[DEBUG] Paths high sorting Descending");
                        }
                    }
                    else
                    {
                        Console.WriteLine("[DEBUG] 1v1 not found positions...");
                    }
                }

                if (position != Vector3.Zero && EntityManager.Heroes.Enemies.Any(x => x.IsValidTarget(900)))
                {
                    E.Cast(position);
                }
                break;

            case 1:
                var enemies = Player.Instance.CountEnemiesInRange(1300);
                var pos     = Game.CursorPos.Distance(Player.Instance) > E.Range
                        ? Player.Instance.Position.Extend(Game.CursorPos, 420).To3D()
                        : Game.CursorPos;

                if (pos.IsVectorUnderEnemyTower())
                {
                    return;
                }

                if (heroClient == null)
                {
                    return;
                }

                if (enemies == 1 && heroClient.HealthPercent + 15 < Player.Instance.HealthPercent)
                {
                    if (heroClient.IsMelee &&
                        !pos.IsInRange(Prediction.Position.PredictUnitPosition(heroClient, 850),
                                       heroClient.GetAutoAttackRange() + 150))
                    {
                        E.Cast(pos);
                        return;
                    }
                    if (!heroClient.IsMelee)
                    {
                        E.Cast(pos);
                        return;
                    }
                }
                else if (enemies == 1 &&
                         !pos.IsInRange(Prediction.Position.PredictUnitPosition(heroClient, 850),
                                        heroClient.GetAutoAttackRange()))
                {
                    E.Cast(pos);
                    return;
                }
                else if (enemies == 2 && Player.Instance.CountAlliesInRange(850) >= 1)
                {
                    E.Cast(pos);
                    return;
                }
                else if (enemies >= 2)
                {
                    if (
                        !EntityManager.Heroes.Enemies.Any(
                            x =>
                            pos.IsInRange(Prediction.Position.PredictUnitPosition(x, 850),
                                          x.IsMelee ? x.GetAutoAttackRange() + 150 : x.GetAutoAttackRange())))
                    {
                        E.Cast(pos);
                        return;
                    }
                }
                E.Cast(pos);
                break;

            default:
                return;
            }
        }
Exemple #11
0
        private static void Orbwalker_OnPostAttack(AttackableUnit target, EventArgs args)
        {
            if (target.GetType() != typeof(AIHeroClient) || target.IsMe || !Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))//no idea why it invokes twice
            {
                return;
            }

            if (!E.IsReady() || !Settings.Combo.UseE || Settings.Misc.EUsageMode != 1 || Settings.Combo.UseEOnlyToDardoch || GetAmmoCount > 1)
            {
                return;
            }

            var heroClient = TargetSelector.GetTarget(Player.Instance.GetAutoAttackRange() + 425, DamageType.Physical);
            var position   = Vector3.Zero;

            if (heroClient == null)
            {
                return;
            }

            var dmg = Player.Instance.GetAutoAttackDamage(heroClient, true) * 2;

            if (Q.IsReady())
            {
                dmg += Player.Instance.GetSpellDamage(heroClient, SpellSlot.Q);
            }
            if (W.IsReady())
            {
                dmg += Player.Instance.GetSpellDamage(heroClient, SpellSlot.W);
            }
            if (R.IsReady())
            {
                dmg += Player.Instance.GetSpellDamage(heroClient, SpellSlot.R);
            }

            if (!((dmg < heroClient.TotalHealthWithShields()) || (Q.IsReady() && W.IsReady())))
            {
                return;
            }

            if (Settings.Misc.EMode == 0)
            {
                if (Player.Instance.HealthPercent > heroClient.HealthPercent + 5 && heroClient.CountEnemiesInRange(600) <= 2)
                {
                    if (!Player.Instance.Position.Extend(Game.CursorPos, 420)
                        .To3D()
                        .IsVectorUnderEnemyTower() &&
                        (!heroClient.IsMelee ||
                         Player.Instance.Position.Extend(Game.CursorPos, 420)
                         .IsInRange(heroClient, heroClient.GetAutoAttackRange() * 1.5f)))
                    {
                        Misc.PrintDebugMessage("1v1 Game.CursorPos");
                        position = Game.CursorPos.Distance(Player.Instance) > E.Range
                            ? Player.Instance.Position.Extend(Game.CursorPos, 420).To3D()
                            : Game.CursorPos;
                    }
                }
                else
                {
                    var closest =
                        EntityManager.Heroes.Enemies.Where(x => x.IsValidTarget(1300))
                        .OrderBy(x => x.Distance(Player.Instance)).ToArray()[0];

                    var list =
                        SafeSpotFinder.GetSafePosition(Player.Instance.Position.To2D(), 900,
                                                       1300,
                                                       heroClient.IsMelee ? heroClient.GetAutoAttackRange() * 2 : heroClient.GetAutoAttackRange())
                        .Where(
                            x =>
                            !x.Key.To3D().IsVectorUnderEnemyTower() &&
                            x.Key.IsInRange(Prediction.Position.PredictUnitPosition(closest, 850),
                                            Player.Instance.GetAutoAttackRange() - 50))
                        .Select(source => source.Key)
                        .ToList();

                    if (list.Any())
                    {
                        var paths =
                            EntityManager.Heroes.Enemies.Where(x => x.IsValidTarget(1300))
                            .Select(x => x.Path)
                            .Count(result => result != null && result.Last().Distance(Player.Instance) < 300);

                        var asc = Misc.SortVectorsByDistance(list, heroClient.Position.To2D())[0].To3D();
                        if (Player.Instance.CountEnemiesInRange(Player.Instance.GetAutoAttackRange()) == 0 &&
                            !EntityManager.Heroes.Enemies.Where(x => x.Distance(Player.Instance) < 1000).Any(
                                x => Prediction.Position.PredictUnitPosition(x, 800)
                                .IsInRange(asc,
                                           x.IsMelee ? x.GetAutoAttackRange() * 2 : x.GetAutoAttackRange())))
                        {
                            position = asc;

                            Misc.PrintDebugMessage("Paths low sorting Ascending");
                        }
                        else if (Player.Instance.CountEnemiesInRange(1000) <= 2 && (paths == 0 || paths == 1) &&
                                 ((closest.Health < Player.Instance.GetAutoAttackDamage(closest, true) * 2) ||
                                  (Orbwalker.LastTarget is AIHeroClient &&
                                   Orbwalker.LastTarget.Health <
                                   Player.Instance.GetAutoAttackDamage(closest, true) * 2)))
                        {
                            position = asc;
                        }
                        else
                        {
                            position =
                                Misc.SortVectorsByDistanceDescending(list, heroClient.Position.To2D())[0].To3D();
                            Misc.PrintDebugMessage("Paths high sorting Descending");
                        }
                    }
                    else
                    {
                        Misc.PrintDebugMessage("1v1 not found positions...");
                    }
                }

                if (position != Vector3.Zero && EntityManager.Heroes.Enemies.Any(x => x.IsValidTarget(900)))
                {
                    E.Cast(position.Distance(Player.Instance) > E.Range ? Player.Instance.Position.Extend(position, E.Range).To3D() : position);
                }
            }
            else if (Settings.Misc.EMode == 1)
            {
                var enemies = Player.Instance.CountEnemiesInRange(1300);
                var pos     = Game.CursorPos.Distance(Player.Instance) > E.Range
                    ? Player.Instance.Position.Extend(Game.CursorPos, 420).To3D()
                    : Game.CursorPos;

                if (!pos.IsVectorUnderEnemyTower())
                {
                    if (heroClient.IsMelee &&
                        !pos.IsInRange(Prediction.Position.PredictUnitPosition(heroClient, 850),
                                       heroClient.GetAutoAttackRange() + 150))
                    {
                        E.Cast(pos);
                        return;
                    }
                    if (!heroClient.IsMelee)
                    {
                        E.Cast(pos);
                    }
                }
                else if (enemies == 2 && Player.Instance.CountAlliesInRange(850) >= 1)
                {
                    E.Cast(pos);
                }
                else if (enemies >= 2)
                {
                    if (
                        !EntityManager.Heroes.Enemies.Any(
                            x =>
                            pos.IsInRange(Prediction.Position.PredictUnitPosition(x, 400),
                                          x.IsMelee ? x.GetAutoAttackRange() + 150 : x.GetAutoAttackRange())))
                    {
                        E.Cast(pos);
                    }
                }
            }
        }