Пример #1
0
        private void DrawRanges(EventArgs args)
        {
            if (!KoreanUtils.GetParamBool(champion.MainMenu, "drawskillranges"))
            {
                return;
            }

            if (KoreanUtils.GetParamKeyBind(champion.MainMenu, "flashult") && (spells.R.IsReady()) &&
                (FlashSpell.Flash(champion.Player).IsReady))
            {
                Render.Circle.DrawCircle(champion.Player.Position, champion.Spells.RFlash.Range, Color.DarkGreen, 5);
            }
            else if (spells.Q.IsReady() && spells.Q.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.Q.Range, Color.DarkGreen, 5);
            }
            else if (spells.W.IsReady() && spells.W.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.W.Range, Color.DarkGreen, 5);
            }
            else if (spells.R.IsReady() && spells.R.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.R.Range, Color.DarkGreen, 5);
            }
        }
Пример #2
0
        public override void LastHitMode()
        {
            if (!KoreanUtils.GetParamBool(champion.MainMenu, "useqtofarm"))
            {
                return;
            }

            Obj_AI_Base target =
                MinionManager.GetMinions(champion.Player.Position, Q.Range)
                .Where(
                    minion =>
                    !champion.Player.CanAttack ||
                    (champion.Player.CanAttack &&
                     champion.Player.Distance(minion) > Orbwalking.GetRealAutoAttackRange(champion.Player)))
                .FirstOrDefault(
                    minion =>
                    Q.GetDamage(minion) >
                    HealthPrediction.GetHealthPrediction(minion,
                                                         (int)(champion.Player.Distance(minion) / Q.Speed) * 1000, (int)Q.Delay * 1000));

            if (target != null)
            {
                UseQ(target);
            }
        }
Пример #3
0
        public AnnieButtons(Annie annie)
        {
            this.annie = annie;

            ShowEasyButton = (KoreanUtils.GetParamBool(annie.MainMenu, "showeeasybutton"));

            int posX = KoreanUtils.GetParamInt(annie.MainMenu, "easybuttonpositionx");

            posX = (posX == 0) ? 50 : posX;
            int posY = KoreanUtils.GetParamInt(annie.MainMenu, "easybuttonpositiony");

            posY = (posY == 0) ? 50 : posY;
            Vector2 pos = new Vector2(posX, posY);

            StunButtonOn       = new Render.Sprite(Resources.StunON, pos);
            StunButtonOn.Scale = new Vector2(0.90f, 0.90f);
            StunButtonOn.Add();

            StunButtonOff       = new Render.Sprite(Resources.StunOFF, pos);
            StunButtonOff.Scale = new Vector2(0.90f, 0.90f);
            StunButtonOff.Add();

            if (ShowEasyButton)
            {
                StunButtonOn.Visible  = KoreanUtils.GetParamBool(annie.MainMenu, "savestunforcombo");
                StunButtonOff.Visible = !StunButtonOn.Visible;
            }

            KoreanUtils.GetParam(annie.MainMenu, "savestunforcombo").ValueChanged += SaveStunForComboValueChanged;
            Game.OnWndProc += ButtonControl;
        }
Пример #4
0
        private void ButtonControl(WndEventArgs args)
        {
            ShowEasyButton = (KoreanUtils.GetParamBool(annie.MainMenu, "showeeasybutton"));

            if (ShowEasyButton)
            {
                if ((args.Msg == (uint)WindowsMessages.WM_LBUTTONUP) &&
                    (MouseOnButton(StunButtonOn) || MouseOnButton(StunButtonOff)))
                {
                    if (StunButtonOn.Visible)
                    {
                        KoreanUtils.SetValueBool(annie.MainMenu, "savestunforcombo", false);
                    }
                    else if (StunButtonOff.Visible)
                    {
                        KoreanUtils.SetValueBool(annie.MainMenu, "savestunforcombo", true);
                    }
                }
                else if ((args.Msg == (uint)WindowsMessages.WM_MOUSEMOVE) && (args.WParam == 5) &&
                         (MouseOnButton(StunButtonOn) || MouseOnButton(StunButtonOff)))
                {
                    MoveButtons(
                        new Vector2(Utils.GetCursorPos().X - (StunButtonOn.Width / 2), Utils.GetCursorPos().Y - 10));
                }

                StunButtonOn.Visible  = KoreanUtils.GetParamBool(annie.MainMenu, "savestunforcombo");
                StunButtonOff.Visible = !StunButtonOn.Visible;
            }
            else
            {
                StunButtonOff.Visible = false;
                StunButtonOn.Visible  = false;
            }
        }
Пример #5
0
        public override void LastHitMode()
        {
            if (KoreanUtils.GetParamBool(champion.MainMenu, "useqtofarm") && Q.IsReady())
            {
                Obj_AI_Base target =
                    MinionManager.GetMinions(Q.Range).OrderByDescending(minion => minion.MaxHealth)
                    .FirstOrDefault(minion =>
                                    Q.GetDamage(minion) >
                                    HealthPrediction.GetHealthPrediction(minion,
                                                                         (int)(champion.Player.Distance(minion) / Q.Speed) * 1000, (int)Q.Delay * 1000));

                if (target != null)
                {
                    Q.Cast(target);
                }
            }

            if (E.IsReady() && !Q.IsReady())
            {
                int farmCount = MinionManager.GetMinions(E.Range).Count(minion => E.IsKillable(minion));

                if (farmCount >= 2)
                {
                    E.Cast();
                }
            }
        }
Пример #6
0
 private void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser)
 {
     if (KoreanUtils.GetParamBool(vlady.MainMenu, "antigapcloser") && W.IsReady())
     {
         W.Cast();
     }
 }
Пример #7
0
        private void UseOffensiveItems(Obj_AI_Base target)
        {
            if (target == null)
            {
                return;
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "usebilgewatercutlass") &&
                ItemData.Bilgewater_Cutlass.GetItem().IsReady())
            {
                ItemData.Bilgewater_Cutlass.GetItem().Cast(target);
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "usehextechgunblade") &&
                ItemData.Hextech_Gunblade.GetItem().IsReady())
            {
                ItemData.Hextech_Gunblade.GetItem().Cast(target);
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "usebotrk") &&
                ItemData.Blade_of_the_Ruined_King.GetItem().IsReady())
            {
                ItemData.Blade_of_the_Ruined_King.GetItem().Cast(target);
            }
        }
Пример #8
0
        private static bool ExtendedQIsReady(CommonChampion lucian, bool laneclear = false)
        {
            Spell q = lucian.Spells.Q;

            if (!KoreanUtils.GetParamBool(lucian.MainMenu, "extendedq") || !q.IsReady())
            {
                return(false);
            }

            List <Obj_AI_Base> minions = MinionManager.GetMinions(AdvancedQ.Range);

            if (minions.Count == 0)
            {
                return(false);
            }

            if (!laneclear)
            {
                if (lucian.Player.CountEnemiesInRange(AdvancedQ.Range) == 0)
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #9
0
 private bool CheckHaras(AIHeroClient target)
 {
     if (target == null)
     {
         return(false);
     }
     return(KoreanUtils.GetParamBool(lucian.MainMenu, target.ChampionName.ToLowerInvariant()));
 }
Пример #10
0
 private void Drawing_OnDraw(EventArgs args)
 {
     if (KoreanUtils.GetParamBool(lucian.MainMenu, "drawingetext"))
     {
         Text.X = (int)lucian.Player.HPBarPosition.X + 5;
         Text.Y = (int)lucian.Player.HPBarPosition.Y + 180;
         Text.OnEndScene();
     }
 }
Пример #11
0
        private static bool CheckHaras(CommonChampion lucian, Obj_AI_Hero target)
        {
            if (target == null)
            {
                return(false);
            }

            return(KoreanUtils.GetParamBool(lucian.MainMenu, target.ChampionName.ToLowerInvariant()));
        }
Пример #12
0
        public StackPassive(CommonChampion champion)
        {
            R             = champion.Spells.R;
            this.champion = champion;

            if (KoreanUtils.GetParamBool(champion.MainMenu, "autostackpassive"))
            {
                Orbwalking.BeforeAttack += StackR;
            }
        }
Пример #13
0
        public SemiAutomaticE(Lucian lucian)
        {
            this.lucian = lucian;
            E           = lucian.Spells.E;

            if (KoreanUtils.GetParamBool(lucian.MainMenu, "dashmode"))
            {
                Game.OnWndProc += Game_OnWndProc;
            }
        }
Пример #14
0
 public override void Ultimate(AIHeroClient target)
 {
     if (target == null)
     {
         R.Cast(Game.CursorPos);
     }
     else if (KoreanUtils.GetParamBool(champion.MainMenu, "lockr"))
     {
         R.Cast(target.Position);
     }
 }
Пример #15
0
        public override void LaneClearMode()
        {
            if (CheckPassive())
            {
                return;
            }

            lock (lockObject)
            {
                if (Q.UseOnLaneClear && Q.IsReady() && Q.CanCast() && !CheckPassive() && HaveManaToLaneclear() &&
                    champion.CastExtendedQToLaneClear())
                {
                    ProcessSpell();
                }

                if (W.UseOnLaneClear && W.IsReady() && W.CanCast() && !CheckPassive() && HaveManaToHaras())
                {
                    List <Obj_AI_Base>         minions      = MinionManager.GetMinions(W.Range).ToList();
                    MinionManager.FarmLocation farmLocation = W.GetCircularFarmLocation(minions);

                    int minMinions = KoreanUtils.GetParamSlider(champion.MainMenu, "wcounthit");

                    if (farmLocation.MinionsHit >= minMinions && minions.Count >= minMinions)
                    {
                        if (W.Cast(farmLocation.Position))
                        {
                            ProcessSpell();
                        }
                    }
                }

                if (E.UseOnLaneClear && lucian.semiAutomaticE.Holding && E.IsReady() && E.CanCast() && !CheckPassive() &&
                    (E.Instance.SData.Mana.Equals(0) || (E.Instance.SData.Mana > 0 && HaveManaToHaras())))
                {
                    Obj_AI_Base target =
                        MinionManager.GetMinions(E.Range + Orbwalking.GetRealAutoAttackRange(champion.Player))
                        .FirstOrDefault(
                            minion =>
                            champion.Player.Distance(minion) > Orbwalking.GetRealAutoAttackRange(champion.Player) &&
                            Game.CursorPos.Distance(minion.Position) < champion.Player.Distance(minion));

                    if (target != null && lucian.semiAutomaticE.Cast(target))
                    {
                        ProcessSpell();
                        champion.Orbwalker.ForceTarget(target);
                    }
                }
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "harasonlaneclear"))
            {
                HarasMode();
            }
        }
Пример #16
0
        private void DrawRanges(EventArgs args)
        {
            if (!KoreanUtils.GetParamBool(champion.MainMenu, "drawskillranges"))
            {
                return;
            }

            Render.Circle.DrawCircle(
                champion.Player.Position,
                spells.MaxRangeCombo,
                Color.FromArgb(150, Color.DarkGreen),
                10);
        }
Пример #17
0
        public override void LaneClearMode()
        {
            if (E.IsReady() && E.UseOnLaneClear)
            {
                if (MinionManager.GetMinions(E.Range).Count >= KoreanUtils.GetParamSlider(champion.MainMenu, "minminionstoe"))
                {
                    E.Cast();
                }

                if (E.IsReady())
                {
                    if (MinionManager.GetMinions(E.Range, MinionTypes.All, MinionTeam.Neutral).Count > 0)
                    {
                        E.Cast();
                    }
                }
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "saveqtofarm") &&
                KoreanUtils.GetParamBool(champion.MainMenu, "useqtofarm"))
            {
                LastHitMode();
            }
            else if (Q.IsReady() && Q.UseOnLaneClear)
            {
                Obj_AI_Base minion =
                    MinionManager.GetMinions(Q.Range).OrderByDescending(x => x.MaxHealth).FirstOrDefault();

                if (minion != null)
                {
                    Q.Cast(minion);
                }
            }

            if (Q.IsReady() && Q.UseOnLaneClear)
            {
                Obj_AI_Base jungleMob =
                    MinionManager.GetMinions(E.Range, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth)
                    .FirstOrDefault();

                if (jungleMob != null)
                {
                    Q.Cast(jungleMob);
                }
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "harasonlaneclear"))
            {
                HarasMode();
            }
        }
Пример #18
0
        public KillSteal(CommonChampion champion)
        {
            orbwalker = champion.Orbwalker;
            player    = champion.Player;
            e         = champion.Spells.E;
            w         = champion.Spells.W;
            aaRange   = Orbwalking.GetRealAutoAttackRange(champion.Player);
            aaDamage  = target => (float)champion.Player.GetAutoAttackDamage(target);

            if (KoreanUtils.GetParamBool(champion.MainMenu, "killsteal"))
            {
                Game.OnUpdate += KS;
            }
        }
Пример #19
0
 private void LoadLambdaExpressions()
 {
     ParamName       = s => KoreanUtils.ParamName(MainMenu, s);
     GetParamBool    = s => KoreanUtils.GetParamBool(MainMenu, s);
     SetValueBool    = (s, b) => KoreanUtils.SetValueBool(MainMenu, s, b);
     GetParamSlider  = s => KoreanUtils.GetParamSlider(MainMenu, s);
     GetParamKeyBind = s => KoreanUtils.GetParamKeyBind(MainMenu, s);
     CanFarm         =
         () =>
         (!GetParamBool("supportmode")) ||
         ((GetParamBool("supportmode")) && (Player.CountAlliesInRange(1500f) == 1));
     CheckStun = () => Player.HasBuff("pyromania_particle");
     SaveStun  = () => (CheckStun() && (GetParamBool("savestunforcombo")));
 }
Пример #20
0
        private void LockR(Spellbook sender, SpellbookCastSpellEventArgs args)
        {
            if (args.Slot != SpellSlot.R)
            {
                return;
            }

            lock (lockObject)
            {
                Spellbook.OnCastSpell -= LockR;

                if (KoreanUtils.GetParamBool(champion.MainMenu, "useyoumuu") &&
                    ItemData.Youmuus_Ghostblade.GetItem().IsReady())
                {
                    ItemData.Youmuus_Ghostblade.GetItem().Cast();
                }

                if (KoreanUtils.GetParamBool(champion.MainMenu, "lockr"))
                {
                    AIHeroClient target = null;

                    if (TargetSelector.SelectedTarget != null &&
                        TargetSelector.SelectedTarget.Distance(champion.Player.Position) < R.Range + 400F)
                    {
                        target = TargetSelector.SelectedTarget;
                    }
                    else
                    {
                        target = TargetSelector.GetTarget(
                            champion.Player,
                            R.Range + 400f,
                            TargetSelector.DamageType.Physical);
                    }

                    if (target != null)
                    {
                        args.Process = false;
                        if (R.Cast(target.Position))
                        {
                            ProcessSpell();
                        }
                    }
                }

                Spellbook.OnCastSpell += LockR;
            }
        }
Пример #21
0
        private void DrawRanges(EventArgs args)
        {
            if (!KoreanUtils.GetParamBool(champion.MainMenu, "drawskillranges"))
            {
                return;
            }

            if (spells.R.IsReady() && spells.R.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.R.Range, Color.DarkGreen, 5);
            }
            else if (spells.Q.IsReady() && spells.Q.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.Q.Range, Color.DarkGreen, 5);
            }
            else if (spells.E.IsReady() && spells.E.CanCast())
            {
                Render.Circle.DrawCircle(champion.Player.Position, spells.E.Range, Color.DarkGreen, 5);
            }
        }
Пример #22
0
        public override void LaneClearMode()
        {
            if (!HaveManaToLaneclear())
            {
                return;
            }
            if (spells.Q.UseOnLaneClear && spells.Q.IsReady() && spells.Q.CanCast())
            {
                List <AIBaseClient>        minions      = MinionManager.GetMinions(champion.Player.Position, spells.Q.Range);
                MinionManager.FarmLocation farmLocation = spells.Q.GetCircularFarmLocation(minions);

                if (farmLocation.MinionsHit >= KoreanUtils.GetParamSlider(champion.MainMenu, "minminionstoq"))
                {
                    spells.Q.Cast(farmLocation.Position);
                }
            }

            if (!HaveManaToLaneclear())
            {
                return;
            }

            if (spells.W.UseOnLaneClear && spells.W.IsReady() && spells.W.CanCast())
            {
                List <AIBaseClient> minions = MinionManager.GetMinions(champion.Player.Position, spells.W.Range);

                MinionManager.FarmLocation wFarmLocation = spells.W.GetCircularFarmLocation(minions);

                if (wFarmLocation.MinionsHit >= KoreanUtils.GetParamSlider(champion.MainMenu, "minminionstow"))
                {
                    spells.W.Cast(wFarmLocation.Position);
                }
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "harasonlaneclear"))
            {
                HarasMode();
            }
        }
Пример #23
0
        private bool IsOffensiveItemsReady()
        {
            if (KoreanUtils.GetParamBool(champion.MainMenu, "usebilgewatercutlass") &&
                ItemData.Bilgewater_Cutlass.GetItem().IsReady())
            {
                return(true);
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "usehextechgunblade") &&
                ItemData.Hextech_Gunblade.GetItem().IsReady())
            {
                return(true);
            }

            if (KoreanUtils.GetParamBool(champion.MainMenu, "usebotrk") &&
                ItemData.Blade_of_the_Ruined_King.GetItem().IsReady())
            {
                return(true);
            }

            return(false);
        }
Пример #24
0
        public override void LaneClearMode()
        {
            if (Q.UseOnLaneClear && Q.IsReady() &&
                champion.Player.ManaPercent > KoreanUtils.GetParamSlider(champion.MainMenu, "minenergytolaneclear"))
            {
                if (KoreanUtils.GetParamBool(champion.MainMenu, "saveqtofarm"))
                {
                    LastHitMode();
                }
                else
                {
                    Q.Cast(MinionManager.GetMinions(Q.Range).FirstOrDefault());
                }
            }

            if (E.UseOnLaneClear && E.IsReady() &&
                champion.Player.ManaPercent > KoreanUtils.GetParamSlider(champion.MainMenu, "minenergytolaneclear") &&
                MinionManager.GetMinions(E.Range).Count >=
                KoreanUtils.GetParamSlider(champion.MainMenu, "minminionstoe"))
            {
                E.Cast();
            }
        }
Пример #25
0
        private void Game_OnUpdate(EventArgs args)
        {
            if (choGath.Spells.R.IsReady() && flash.IsReady && KoreanUtils.GetParamKeyBind(choGath.MainMenu, "flashult"))
            {
                AIHeroClient target =
                    HeroManager.Enemies.FirstOrDefault(
                        champ =>
                        choGath.Spells.RFlash.Range - 20f >= choGath.Player.Distance(champ) &&
                        choGath.Spells.R.GetDamage(champ) > champ.Health + 20f);

                if (target != null)
                {
                    choGath.Player.Spellbook.CastSpell(flash.Slot, target.Position);
                    Utility.DelayAction.Add(50, () => choGath.Spells.R.Cast(target.Position));
                }

                if (KoreanUtils.GetParamBool(choGath.MainMenu, "orbwalktoflashult"))
                {
                    choGath.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPosRaw);
                }
                choGath.ChoGathOrbwalker.ComboMode();
            }
        }
Пример #26
0
        private void Game_OnUpdate(EventArgs args)
        {
            if (!KoreanUtils.GetParamBool(Vladimir.MainMenu, "autostackeactive"))
            {
                return;
            }

            if (Vladimir.Player.IsRecalling() || Vladimir.Player.InFountain())
            {
                return;
            }

            if (Vladimir.Player.HealthPercent < KoreanUtils.GetParamSlider(Vladimir.MainMenu, "autostackelimit") ||
                Math.Round(Vladimir.Player.HPRegenRate * 5, 0) <
                KoreanUtils.GetParamSlider(Vladimir.MainMenu, "autostackehealthregen"))
            {
                return;
            }

            if (NextCicleOn <= Game.Time)
            {
                Utility.DelayAction.Add(100, () => E.Cast());
            }
        }
Пример #27
0
 private void SmartUse(Orbwalking.BeforeAttackEventArgs args)
 {
     if (E.Instance.ToggleState == 2)
     {
         if ((args.Target is AITurretClient && champion.Player.CountEnemiesInRange(1000f) > 0) ||
             (champion.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit ||
              champion.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) ||
             (champion.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear &&
              !KoreanUtils.GetParamBool(champion.MainMenu, "useetolaneclear")))
         {
             E.Cast();
         }
     }
     else if (E.Instance.ToggleState < 2)
     {
         if ((args.Target is AITurretClient && champion.Player.CountEnemiesInRange(1000f) == 0) ||
             (champion.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear &&
              KoreanUtils.GetParamBool(champion.MainMenu, "useetolaneclear")) ||
             (champion.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo))
         {
             E.Cast();
         }
     }
 }
Пример #28
0
        public override void ComboMode()
        {
            Obj_AI_Hero target;

            if (W.UseOnCombo && !CheckPassive() && W.IsReady() && W.CanCast())
            {
                target = TargetSelector.GetTarget(champion.Player, W.Range, TargetSelector.DamageType.Physical);

                PredictionOutput wPrediction = W.GetPrediction(target);

                if (wPrediction != null && wPrediction.Hitchance >= HitChance.VeryHigh &&
                    wPrediction.CastPosition != Vector3.Zero)
                {
                    if (W.Cast(wPrediction.CastPosition))
                    {
                        ProcessSpell();
                    }
                }
                else if (target != null &&
                         target.Distance(champion.Player) <= Orbwalking.GetRealAutoAttackRange(champion.Player))
                {
                    if (W.Cast(target.Position))
                    {
                        ProcessSpell();
                    }
                }
            }

            if (Q.UseOnCombo && Q.IsReady() && Q.CanCast())
            {
                if (!CheckPassive())
                {
                    target = TargetSelector.GetTarget(champion.Player, Q.Range, TargetSelector.DamageType.Physical);

                    if (target != null && Q.IsReadyToCastOn(target) && Q.CanCast(target))
                    {
                        if (Q.CastOnUnit(target))
                        {
                            ProcessSpell();
                        }
                    }
                }

                if (champion.CastExtendedQ())
                {
                    ProcessSpell();
                }
            }

            if (E.UseOnCombo && !CheckPassive() && E.IsReady() && E.CanCast() &&
                (!KoreanUtils.GetParamBool(champion.MainMenu, "dashmode") ||
                 (KoreanUtils.GetParamBool(champion.MainMenu, "dashmode") && lucian.semiAutomaticE.Holding)))
            {
                target = TargetSelector.GetTarget(
                    E.Range + Orbwalking.GetRealAutoAttackRange(champion.Player) - 25f,
                    TargetSelector.DamageType.Physical);

                if (target != null && target.IsEnemy && target.IsValid && !target.IsDead && lucian.semiAutomaticE.Cast(target))
                {
                    ProcessSpell();
                }
            }
        }
Пример #29
0
        public override void ComboMode()
        {
            //IDK why but i need this code since the patch 5.17
            if (champion.Player.IsChannelingImportantSpell())
            {
                Orbwalking.MoveTo(Game.CursorPos);
                return;
            }

            AIHeroClient target;

            if (W.UseOnCombo && !CheckPassive() && W.IsReady() && W.CanCast())
            {
                target = TargetSelector.GetTarget(champion.Player, W.Range, TargetSelector.DamageType.Physical);

                if (target != null)
                {
                    PredictionOutput wPrediction = W.GetPrediction(target);

                    if (wPrediction != null && wPrediction.Hitchance >= HitChance.High &&
                        wPrediction.CastPosition != Vector3.Zero)
                    {
                        if (W.Cast(wPrediction.CastPosition))
                        {
                            ProcessSpell();
                        }
                    }
                    else if (target != null &&
                             target.Distance(champion.Player) <= Orbwalking.GetRealAutoAttackRange(champion.Player))
                    {
                        if (W.Cast(target.ServerPosition))
                        {
                            ProcessSpell();
                        }
                    }
                }
            }

            if (Q.UseOnCombo && Q.IsReady() && Q.CanCast())
            {
                if (!CheckPassive())
                {
                    target = TargetSelector.GetTarget(champion.Player, Q.Range, TargetSelector.DamageType.Physical);

                    if (target != null)
                    {
                        if (target != null && Q.IsReadyToCastOn(target) && Q.CanCast(target))
                        {
                            if (Q.CastOnUnit(target))
                            {
                                ProcessSpell();
                            }
                        }
                    }
                }

                if (champion.CastExtendedQ())
                {
                    ProcessSpell();
                }
            }

            if (E.UseOnCombo && !CheckPassive() && E.IsReady() && E.CanCast() &&
                (!KoreanUtils.GetParamBool(champion.MainMenu, "dashmode") ||
                 (KoreanUtils.GetParamBool(champion.MainMenu, "dashmode") && lucian.semiAutomaticE.Holding)))
            {
                target = TargetSelector.GetTarget(
                    E.Range + Orbwalking.GetRealAutoAttackRange(champion.Player) - 25f,
                    TargetSelector.DamageType.Physical);

                if (target != null && target.IsEnemy && target.IsValid && !target.IsDead && lucian.semiAutomaticE.Cast(target))
                {
                    ProcessSpell();
                }
            }
        }