Esempio n. 1
0
        private static void SoulBoundSaver()
        {
            if (SoulBound == null)
            {
                SoulBound =
                    HeroManager.Allies.Find(
                        h => !h.IsMe && h.Buffs.Any(b => b.Caster.IsMe && b.Name == "kalistacoopstrikeally"));
            }
            else if (Program.Config.Item("SoulBoundSaver").GetValue <bool>() && R.IsReady())
            {
                if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemiesInRange(500) > 0 ||
                    IncomingDamage > SoulBound.Health)
                {
                    R.Cast();
                }
            }

            var itemsToRemove = incomingDamage.Where(entry => entry.Key < Game.Time).ToArray();

            foreach (var item in itemsToRemove)
            {
                incomingDamage.Remove(item.Key);
            }

            itemsToRemove = InstantDamage.Where(entry => entry.Key < Game.Time).ToArray();
            foreach (var item in itemsToRemove)
            {
                InstantDamage.Remove(item.Key);
            }
        }
Esempio n. 2
0
        private static void OnTick(EventArgs args)
        {
            // SoulBound is not found yet!
            if (SoulBound == null)
            {
                SoulBound = EntityManager.Heroes.Allies.Find(h => !h.IsMe && h.Buffs.Any(b => b.Caster.IsMe && b.Name == "kalistacoopstrikeally"));
            }
            else if (Settings.SaveSouldBound && R.IsReady())
            {
                // Ult casting
                if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemyChampionsInRange(500) > 0 ||
                    IncomingDamage > SoulBound.Health)
                {
                    R.Cast();
                }
            }

            // Check spell arrival
            foreach (var entry in IncDamage.Where(entry => entry.Key < Game.Time).ToArray())
            {
                IncDamage.Remove(entry.Key);
            }

            // Instant damage removal
            foreach (var entry in InstDamage.Where(entry => entry.Key < Game.Time).ToArray())
            {
                InstDamage.Remove(entry.Key);
            }
        }
Esempio n. 3
0
        private static void Game_OnGameUpdate(EventArgs args)
        {
            // SoulBound is not found yet!
            if (SoulBound == null)
            {
                // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D
                SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally")));
            }
            else if (R.IsEnabledAndReady("misc"))
            {
                // Ult casting
                if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemiesInRange(500) > 0 ||
                    IncomingDamage > SoulBound.Health)
                {
                    R.Cast();
                }
            }

            // Check spell arrival
            var itemsToRemove = _incomingDamage.Where(entry => entry.Key < Game.Time).ToArray();

            foreach (var item in itemsToRemove)
            {
                _incomingDamage.Remove(item.Key);
            }


            // Instant damage removal
            itemsToRemove = _instantDamage.Where(entry => entry.Key < Game.Time).ToArray();
            foreach (var item in itemsToRemove)
            {
                _instantDamage.Remove(item.Key);
            }
        }
Esempio n. 4
0
 private void OnObjAiBaseProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
 {
     try
     {
         if (sender.IsMe)
         {
             if (args.SData.Name == "KalistaExpungeWrapper")
             {
                 Orbwalking.ResetAutoAttackTimer();
             }
         }
         if (!sender.IsEnemy || SoulBound.Unit == null || R.Level == 0 ||
             !Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>())
         {
             return;
         }
         if (args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId &&
             (!(sender is Obj_AI_Hero) || args.SData.IsAutoAttack()))
         {
             SoulBound.Add(
                 SoulBound.Unit.ServerPosition.Distance(sender.ServerPosition) / args.SData.MissileSpeed +
                 Game.Time, (float)sender.GetAutoAttackDamage(SoulBound.Unit));
         }
         else
         {
             var hero = sender as Obj_AI_Hero;
             if (hero != null)
             {
                 var slot = hero.GetSpellSlot(args.SData.Name);
                 if (slot != SpellSlot.Unknown)
                 {
                     var damage = 0f;
                     if (args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId &&
                         slot == hero.GetSpellSlot("SummonerDot"))
                     {
                         damage =
                             (float)hero.GetSummonerSpellDamage(SoulBound.Unit, Damage.SummonerSpell.Ignite);
                     }
                     else if ((slot == SpellSlot.Q || slot == SpellSlot.W || slot == SpellSlot.E ||
                               slot == SpellSlot.R) &&
                              ((args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId) ||
                               args.End.Distance(SoulBound.Unit.ServerPosition, true) <
                               Math.Pow(args.SData.LineWidth, 2)))
                     {
                         damage = (float)hero.GetSpellDamage(SoulBound.Unit, slot);
                     }
                     if (damage > 0)
                     {
                         SoulBound.Add(Game.Time + 2, damage);
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Global.Logger.AddItem(new LogItem(ex));
     }
 }
Esempio n. 5
0
        private static void OnUpdate(EventArgs args)
        {
            // SoulBound is not found yet!
            if (SoulBound == null)
            {
                // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D
                SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally")));
            }
            else if (Settings.SaveSouldBound && R.IsReady())
            {
                // Ult casting
                if (SoulBound.HealthPercentage() < 5 && SoulBound.CountEnemiesInRange(500) > 0 ||
                    IncomingDamage > SoulBound.Health)
                {
                    R.Cast();
                }
                // Get enemies
                foreach (var unit in ObjectManager.Get <Obj_AI_Hero>().Where(h => h.IsEnemy && h.IsHPBarRendered))
                {
                    // Get buffs
                    for (int i = 0; i < unit.Buffs.Count(); i++)
                    {
                        // Check if the Soulbound is in a good range
                        var enemy = HeroManager.Enemies.Where(x => SoulBound.Distance(x.Position) > 800);
                        // Check if the Soulbound is a Blitzcrank
                        // Check if the enemy is hooked
                        // Check if target was far enough for ult
                        if (SoulBound.ChampionName == "Blitzcrank" && unit.Buffs[i].Name == "rocketgrab2" && unit.Buffs[i].IsActive && enemy.Count() > 0 && Config.Misc.UseKaliscrank)
                        {
                            R.Cast();
                        }
                    }
                }
            }

            // Check spell arrival
            foreach (var entry in _incomingDamage)
            {
                if (entry.Key < Game.Time)
                {
                    _incomingDamage.Remove(entry.Key);
                }
            }

            // Instant damage removal
            foreach (var entry in _instantDamage)
            {
                if (entry.Key < Game.Time)
                {
                    _instantDamage.Remove(entry.Key);
                }
            }
        }
Esempio n. 6
0
        private static void OnUpdate(EventArgs args)
        {
            // SoulBound is not found yet!
            if (SoulBound == null)
            {
                // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D
                SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally")));
            }
            else if (Settings.SaveSouldBound && R.IsReady())
            {
                // Ult casting
                if (SoulBound.HealthPercentage() < 5 && SoulBound.CountEnemiesInRange(500) > 0 ||
                    IncomingDamage > SoulBound.Health)
                {
                    R.Cast();
                }
            }

            // Check spell arrival
            foreach (var entry in _incomingDamage)
            {
                if (entry.Key < Game.Time)
                {
                    _incomingDamage.Remove(entry.Key);
                }
            }

            // Instant damage removal
            foreach (var entry in _instantDamage)
            {
                if (entry.Key < Game.Time)
                {
                    _instantDamage.Remove(entry.Key);
                }
            }
        }
Esempio n. 7
0
        protected override void OnPreUpdate()
        {
            if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear ||
                Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit)
            {
                var eBig    = Menu.Item(Menu.Name + ".lasthit.e-big").GetValue <bool>();
                var eJungle = Menu.Item(Menu.Name + ".lasthit.e-jungle").GetValue <bool>();
                var eSiege  = Menu.Item(Menu.Name + ".lasthit.e-siege").GetValue <bool>();
                var eTurret = Menu.Item(Menu.Name + ".lasthit.e-turret").GetValue <bool>();
                var eReset  = Menu.Item(Menu.Name + ".miscellaneous.e-reset").GetValue <bool>();

                IEnumerable <Obj_AI_Minion> minions = new HashSet <Obj_AI_Minion>();
                if (eSiege || eTurret || eReset)
                {
                    minions = GameObjects.EnemyMinions.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, true));
                }

                if (E.IsReady())
                {
                    if (ManaManager.Check("lasthit"))
                    {
                        if (eSiege)
                        {
                            if (
                                minions.Any(
                                    m =>
                                    (m.CharData.BaseSkinName.Contains("MinionSiege") ||
                                     m.CharData.BaseSkinName.Contains("Super"))))
                            {
                                E.Cast();
                                return;
                            }
                        }
                        if (eTurret)
                        {
                            if (minions.Any(m => Utils.UnderAllyTurret(m.Position)))
                            {
                                E.Cast();
                                return;
                            }
                        }
                    }
                    if (eBig || eJungle)
                    {
                        var enemySmites =
                            GameObjects.EnemyHeroes.Where(
                                e =>
                                !e.IsDead && e.Distance(Player) < SummonerManager.Smite.Range * 1.5f &&
                                SummonerManager.IsSmiteReady(e));
                        var allySmites =
                            (from ally in
                             GameObjects.AllyHeroes.Where(
                                 e => !e.IsDead && e.Distance(Player) < SummonerManager.Smite.Range)
                             let spell = SummonerManager.GetSmiteSpell(ally)
                                         where
                                         spell != null &&
                                         (spell.IsReady() || spell.Cooldown - spell.CooldownExpires - Game.Time <= 3)
                                         select ally).ToList();

                        if (eJungle && Player.Level > 3 ||
                            eBig && (enemySmites.Any() || !allySmites.Any() || Player.CountEnemiesInRange(1000) > 1))
                        {
                            var creeps =
                                GameObjects.Jungle.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, false))
                                .ToList();
                            if (eJungle && creeps.Any() ||
                                eBig &&
                                creeps.Any(
                                    m =>
                                    (m.CharData.BaseSkinName.StartsWith("SRU_Dragon") ||
                                     m.CharData.BaseSkinName.StartsWith("SRU_Baron"))))
                            {
                                E.Cast();
                                return;
                            }
                        }
                    }
                }

                if (eReset && E.IsReady() && ManaManager.Check("misc") &&
                    GameObjects.EnemyHeroes.Any(e => Rend.HasBuff(e) && e.IsValidTarget(E.Range)))
                {
                    if (minions.Any())
                    {
                        E.Cast();
                        return;
                    }
                }
            }
            if (Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>() && SoulBound.Unit != null && R.IsReady() &&
                !SoulBound.Unit.InFountain())
            {
                SoulBound.Clean();
                var enemies = SoulBound.Unit.CountEnemiesInRange(500);
                if ((SoulBound.Unit.HealthPercent <= 10 && SoulBound.Unit.CountEnemiesInRange(500) > 0) ||
                    (SoulBound.Unit.HealthPercent <= 5 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies == 0) ||
                    (SoulBound.Unit.HealthPercent <= 50 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies > 0))
                {
                    R.Cast();
                }
            }
            if (Menu.Item(Menu.Name + ".miscellaneous.w-baron").GetValue <KeyBind>().Active&& W.IsReady() &&
                Player.Distance(SummonersRift.River.Baron) <= W.Range)
            {
                W.Cast(SummonersRift.River.Baron);
            }
            if (Menu.Item(Menu.Name + ".miscellaneous.w-dragon").GetValue <KeyBind>().Active&& W.IsReady() &&
                Player.Distance(SummonersRift.River.Dragon) <= W.Range)
            {
                W.Cast(SummonersRift.River.Dragon);
            }

            if (SoulBound.Unit == null)
            {
                SoulBound.Unit =
                    GameObjects.AllyHeroes.FirstOrDefault(
                        a =>
                        a.Buffs.Any(
                            b =>
                            b.Caster.IsMe &&
                            b.Name.Equals("kalistacoopstrikeally", StringComparison.OrdinalIgnoreCase)));
            }
            if (SoulBound.Unit != null && SoulBound.Unit.Distance(Player) < R.Range && R.IsReady())
            {
                var blitz = Menu.Item(Menu.Name + ".ultimate.blitzcrank.r").GetValue <bool>();
                var tahm  = Menu.Item(Menu.Name + ".ultimate.tahm-kench.r").GetValue <bool>();
                foreach (var enemy in
                         GameObjects.EnemyHeroes.Where(e => (blitz || tahm) && !e.IsDead && e.Distance(Player) < 3000))
                {
                    if (blitz)
                    {
                        var blitzBuff =
                            enemy.Buffs.FirstOrDefault(
                                b =>
                                b.IsActive && b.Caster.NetworkId.Equals(SoulBound.Unit.NetworkId) &&
                                b.Name.Equals("rocketgrab2", StringComparison.OrdinalIgnoreCase));
                        if (blitzBuff != null)
                        {
                            if (!HeroListManager.Check("blitzcrank", enemy))
                            {
                                if (!SoulBound.Unit.UnderTurret(false) && SoulBound.Unit.Distance(enemy) > 750f &&
                                    SoulBound.Unit.Distance(Player) > R.Range / 3f)
                                {
                                    R.Cast();
                                }
                            }
                            return;
                        }
                    }
                    if (tahm)
                    {
                        var tahmBuff =
                            enemy.Buffs.FirstOrDefault(
                                b =>
                                b.IsActive && b.Caster.NetworkId.Equals(SoulBound.Unit.NetworkId) &&
                                b.Name.Equals("tahmkenchwdevoured", StringComparison.OrdinalIgnoreCase));
                        if (tahmBuff != null)
                        {
                            if (!HeroListManager.Check("tahm-kench", enemy))
                            {
                                if (!SoulBound.Unit.UnderTurret(false) &&
                                    (SoulBound.Unit.Distance(enemy) > Player.AttackRange ||
                                     GameObjects.AllyHeroes.Where(
                                         a => a.NetworkId != SoulBound.Unit.NetworkId && a.NetworkId != Player.NetworkId)
                                     .Any(t => t.Distance(Player) > 600) ||
                                     GameObjects.AllyTurrets.Any(t => t.Distance(Player) < 600)))
                                {
                                    R.Cast();
                                }
                            }
                            return;
                        }
                    }
                }
            }
        }
Esempio n. 8
0
        private void OnCorePreUpdate(EventArgs args)
        {
            try
            {
                if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Combo &&
                    Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee)
                {
                    var eBig    = Menu.Item(Menu.Name + ".lasthit.e-big").GetValue <bool>();
                    var eTurret = Menu.Item(Menu.Name + ".lasthit.e-turret").GetValue <bool>();
                    var eReset  = Menu.Item(Menu.Name + ".miscellaneous.e-reset").GetValue <bool>();

                    IEnumerable <Obj_AI_Minion> minions = new HashSet <Obj_AI_Minion>();
                    if (eBig || eTurret || eReset)
                    {
                        minions =
                            GameObjects.EnemyMinions.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, true));
                    }

                    if (E.IsReady())
                    {
                        if (eBig)
                        {
                            var creeps =
                                GameObjects.Jungle.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, false))
                                .Concat(minions)
                                .ToList();
                            if (
                                creeps.Any(
                                    m =>
                                    (m.CharData.BaseSkinName.Contains("MinionSiege") ||
                                     m.CharData.BaseSkinName.Contains("Super") ||
                                     m.CharData.BaseSkinName.StartsWith("SRU_Dragon") ||
                                     m.CharData.BaseSkinName.StartsWith("SRU_Baron"))))
                            {
                                E.Cast();
                                return;
                            }
                        }

                        if (eTurret && ManaManager.Check("lasthit"))
                        {
                            var minion =
                                minions.FirstOrDefault(
                                    m => Utils.UnderAllyTurret(m.Position) && Rend.IsKillable(m, false));
                            if (minion != null)
                            {
                                E.Cast();
                                return;
                            }
                        }
                    }

                    if (eReset && E.IsReady() && ManaManager.Check("misc") &&
                        GameObjects.EnemyHeroes.Any(e => Rend.HasBuff(e) && e.IsValidTarget(E.Range)))
                    {
                        if (minions.Any())
                        {
                            E.Cast();
                            return;
                        }
                    }
                }
                if (Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>() && SoulBound.Unit != null && R.IsReady() &&
                    !SoulBound.Unit.InFountain())
                {
                    SoulBound.Clean();
                    var enemies = SoulBound.Unit.CountEnemiesInRange(500);
                    if ((SoulBound.Unit.HealthPercent <= 10 && SoulBound.Unit.CountEnemiesInRange(500) > 0) ||
                        (SoulBound.Unit.HealthPercent <= 5 && SoulBound.TotalDamage > SoulBound.Unit.Health &&
                         enemies == 0) ||
                        (SoulBound.Unit.HealthPercent <= 50 && SoulBound.TotalDamage > SoulBound.Unit.Health &&
                         enemies > 0))
                    {
                        R.Cast();
                    }
                }
                if (Menu.Item(Menu.Name + ".miscellaneous.w-baron").GetValue <KeyBind>().Active&& W.IsReady() &&
                    Player.Distance(SummonersRift.River.Baron) <= W.Range)
                {
                    W.Cast(SummonersRift.River.Baron);
                }
                if (Menu.Item(Menu.Name + ".miscellaneous.w-dragon").GetValue <KeyBind>().Active&& W.IsReady() &&
                    Player.Distance(SummonersRift.River.Dragon) <= W.Range)
                {
                    W.Cast(SummonersRift.River.Dragon);
                }

                if (SoulBound.Unit == null)
                {
                    SoulBound.Unit =
                        GameObjects.AllyHeroes.FirstOrDefault(
                            a =>
                            a.Buffs.Any(
                                b =>
                                b.Caster.IsMe &&
                                b.Name.Equals("kalistacoopstrikeally", StringComparison.OrdinalIgnoreCase)));
                }
            }
            catch (Exception ex)
            {
                Global.Logger.AddItem(new LogItem(ex));
            }
        }
Esempio n. 9
0
        /// <summary>
        ///     Fired when the game is updated.
        /// </summary>
        public void Automatic()
        {
            if (SoulBound == null)
            {
                var possibleSoulBound = ObjectCache.AllyHeroes.FirstOrDefault(a => a.HasBuff("kalistacoopstrikeally"));
                if (possibleSoulBound != null)
                {
                    SoulBound = possibleSoulBound;
                }
            }

            if (UtilityClass.Player.IsRecalling())
            {
                return;
            }

            /// <summary>
            ///     The Automatic E Logics.
            /// </summary>
            if (SpellClass.E.Ready &&
                MenuClass.E["beforedeath"].Enabled &&
                LocalPlayer.Instance.HPPercent() <= MenuClass.E["beforedeath"].Value)
            {
                SpellClass.E.Cast();
            }

            /// <summary>
            ///     The R Logics.
            /// </summary>
            if (SpellClass.R.Ready &&
                SoulBound != null)
            {
                /// <summary>
                ///     The Lifesaver R Logic.
                /// </summary>
                if (SoulBound.EnemyHeroesCount(800f) > 0 &&
                    SoulBound.HPPercent() <=
                    MenuClass.R["lifesaver"].Value &&
                    MenuClass.R["lifesaver"].Enabled)
                {
                    SpellClass.R.Cast();
                }

                /// <summary>
                ///     The Offensive R Logics.
                /// </summary>
                if (RLogics.ContainsKey(SoulBound.CharName))
                {
                    var option     = RLogics.FirstOrDefault(k => k.Key == SoulBound.CharName).Value;
                    var buffName   = option.Item1;
                    var menuOption = option.Item2;

                    var target = ObjectCache.EnemyHeroes.FirstOrDefault(t => t.HasBuff(buffName));
                    if (target != null &&
                        MenuClass.R[menuOption].Enabled)
                    {
                        var buff = target.GetBuff(buffName);
                        if (buff.Caster == SoulBound &&
                            target.DistanceToPlayer() >
                            UtilityClass.Player.GetAutoAttackRange(target))
                        {
                            SpellClass.R.Cast();
                        }
                    }
                }
            }

            /// <summary>
            ///     The Spot W Logic.
            /// </summary>
            if (SpellClass.W.Ready &&
                !UtilityClass.Player.Position.IsUnderEnemyTurret() &&
                Orbwalker.Mode == OrbwalkingMode.None &&
                UtilityClass.Player.EnemyHeroesCount(1500f) == 0 &&
                UtilityClass.Player.MPPercent()
                > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.W["logical"]) &&
                MenuClass.W["logical"].Enabled)
            {
                foreach (var loc in Locations.Where(l =>
                                                    UtilityClass.Player.Distance(l) <= SpellClass.W.Range &&
                                                    !ObjectCache.AllMinions.Any(m => m.Distance(l) <= 1000f && m.ModelName.Equals("KalistaSpawn"))))
                {
                    SpellClass.W.Cast(loc);
                }
            }
        }
Esempio n. 10
0
        /// <summary>
        ///     Fired when the game is updated.
        /// </summary>
        public void Automatic()
        {
            var passiveObject = ObjectManager.Get <GameObject>().FirstOrDefault(o => o.IsValid && o.Name == "Kalista_Base_P_LinkIcon.troy");

            if (passiveObject != null)
            {
                SoulBound = GameObjects.AllyHeroes
                            .Where(a => !a.IsMe)
                            .MinBy(o => o.Distance(passiveObject));
            }

            if (UtilityClass.Player.IsRecalling())
            {
                return;
            }

            /// <summary>
            ///     The R Logics.
            /// </summary>
            if (SpellClass.R.Ready &&
                SoulBound != null)
            {
                /// <summary>
                ///     The Lifesaver R Logic.
                /// </summary>
                if (SoulBound.CountEnemyHeroesInRange(800f) > 0 &&
                    SoulBound.HealthPercent() <=
                    MenuClass.Spells["r"]["lifesaver"].As <MenuSliderBool>().Value&&
                    MenuClass.Spells["r"]["lifesaver"].As <MenuSliderBool>().Enabled)
                {
                    SpellClass.R.Cast();
                }

                var option = RLogics.FirstOrDefault(k => k.Key == SoulBound.ChampionName).Value;
                if (option != null)
                {
                    var buffName   = option.Item1;
                    var menuOption = option.Item2;

                    /// <summary>
                    ///     The Offensive R Logics.
                    /// </summary>
                    if (RLogics.ContainsKey(SoulBound.ChampionName) &&
                        GameObjects.EnemyHeroes.Any(t =>
                                                    t.HasBuff(buffName) &&
                                                    MenuClass.Spells["r"][menuOption].As <MenuBool>().Enabled&&
                                                    t.Distance(UtilityClass.Player.ServerPosition) > UtilityClass.Player.GetFullAttackRange(t)))
                    {
                        SpellClass.R.Cast();
                    }
                }
            }

            /// <summary>
            ///     The Spot W Logic.
            /// </summary>
            if (SpellClass.W.Ready &&
                !UtilityClass.Player.IsUnderEnemyTurret() &&
                ImplementationClass.IOrbwalker.Mode == OrbwalkingMode.None &&
                UtilityClass.Player.CountEnemyHeroesInRange(1500f) == 0 &&
                UtilityClass.Player.ManaPercent()
                > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.Spells["w"]["logical"]) &&
                MenuClass.Spells["w"]["logical"].As <MenuSliderBool>().Enabled)
            {
                foreach (var loc in Locations.Where(l =>
                                                    UtilityClass.Player.Distance(l) <= SpellClass.W.Range &&
                                                    !ObjectManager.Get <Obj_AI_Minion>().Any(m => m.Distance(l) <= 1000f && m.UnitSkinName.Equals("KalistaSpawn"))))
                {
                    SpellClass.W.Cast(loc);
                }
            }
        }