Beispiel #1
0
        public override void Draw()
        {
            if (AutoMenu.KeyBindValue("EQMOUSE") && BarrelsList.Count(b => b.Barrel.IsValidTarget(Q.Range)) < 1)
            {
                Drawing.DrawText(Game.CursorPos.WorldToScreen().X + 50, Game.CursorPos.WorldToScreen().Y, System.Drawing.Color.AliceBlue, "THERE ARE NO BARRELS NEARBY TRY TO CREATE ONE", 15);
            }

            if (DrawMenu.CheckBoxValue("Barrels"))
            {
                foreach (var A in BarrelsList)
                {
                    foreach (var B in BarrelsList.Where(b => b.Barrel.NetworkId != A.Barrel.NetworkId))
                    {
                        if (B.Barrel.Distance(A.Barrel) <= ConnectionRange)
                        {
                            Drawing.DrawLine(new Vector2(A.Barrel.ServerPosition.WorldToScreen().X, A.Barrel.ServerPosition.WorldToScreen().Y), new Vector2(B.Barrel.ServerPosition.WorldToScreen().X, B.Barrel.ServerPosition.WorldToScreen().Y), 2, System.Drawing.Color.Red);
                        }
                    }
                    if (KillableBarrel(A) != null)
                    {
                        Circle.Draw(EntityManager.Heroes.Enemies.Any(e => e.Distance(A.Barrel) <= E.Width && e.IsKillable()) ? Color.Red : Color.AliceBlue, 325, KillableBarrel(A));
                    }
                }
            }

            foreach (var spell in SpellList.Where(s => s != R && DrawMenu.CheckBoxValue(s.Slot)))
            {
                Circle.Draw(spell.IsReady() ? Color.Chartreuse : Color.OrangeRed, spell.Range, user);
            }
        }
Beispiel #2
0
 public override void LastHit()
 {
     if (LaneClearMenu.CheckBoxValue("QLH") && Q.IsReady())
     {
         var barrel = BarrelsList.OrderByDescending(b => b.Barrel.CountEnemyMinionsInRange(E.Width)).FirstOrDefault(m => KillableBarrel(m) != null && m.Barrel.CountEnemyMinionsInRange(E.Width) > 0 && (KillableBarrel(m).IsValidTarget(Q.Range) || KillableBarrel(m).IsInRange(user, user.GetAutoAttackRange())));
         if (barrel != null)
         {
             var EkillMinions = EntityManager.MinionsAndMonsters.EnemyMinions.Count(m => BarrelKill(m) && BarrelsList.Any(b => b.Barrel.IsInRange(m, E.Width)) && m.IsValidTarget())
                                >= LaneClearMenu.SliderValue("EKill");
             if (KillableBarrel(barrel).IsValidTarget(user.GetAutoAttackRange()))
             {
                 Orbwalker.ForcedTarget = KillableBarrel(barrel);
             }
             else
             {
                 if (KillableBarrel(barrel).IsValidTarget(Q.Range) && EkillMinions)
                 {
                     Q.Cast(barrel.Barrel);
                 }
             }
         }
         else
         {
             if (LaneClearMenu.CompareSlider("Qmana", user.ManaPercent))
             {
                 foreach (var minion in EntityManager.MinionsAndMonsters.EnemyMinions.OrderByDescending(m => m.Distance(user)).Where(m => m.IsKillable(Q.Range) && Q.WillKill(m) && !BarrelsList.Any(b => b.Barrel.Distance(m) <= E.Width)))
                 {
                     Q.Cast(minion);
                 }
             }
         }
     }
 }
Beispiel #3
0
 public override void KillSteal()
 {
     foreach (var enemy in EntityManager.Heroes.Enemies.Where(e => e.IsKillable()))
     {
         if (Q.IsReady() && Q.WillKill(enemy) && enemy.IsKillable(Q.Range) && KillStealMenu.CheckBoxValue(SpellSlot.Q))
         {
             Q.Cast(enemy);
         }
         if (R.IsReady() && enemy.Distance(user) >= Q.Range + 1000 && KillStealMenu.CheckBoxValue(SpellSlot.R) && R.WillKill(enemy, KillStealMenu.SliderValue("Rdmg"), Rdamage(enemy)))
         {
             Player.CastSpell(R.Slot, R.GetPrediction(enemy).CastPosition);
         }
         if (KillStealMenu.CheckBoxValue(SpellSlot.E))
         {
             foreach (var a in BarrelsList)
             {
                 if (BarrelKill(enemy))
                 {
                     if (KillableBarrel(a) != null)
                     {
                         if (KillableBarrel(a)?.Distance(enemy) <= E.Width)
                         {
                             Q.Cast(KillableBarrel(a));
                         }
                         if (BarrelsList.Any(b => b.Barrel.Distance(KillableBarrel(a)) <= ConnectionRange && enemy.Distance(b.Barrel) <= E.Width))
                         {
                             Q.Cast(KillableBarrel(a));
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #4
0
 public override void Active()
 {
     if (AutoMenu.KeyBindValue("EQMOUSE"))
     {
         var target = EntityManager.Heroes.Enemies.OrderBy(e => e.Distance(Game.CursorPos)).FirstOrDefault(e => e.IsKillable(E.Range));
         if (target != null)
         {
             var targetedbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(user)).FirstOrDefault(b => KillableBarrel(b) != null && KillableBarrel(b).IsValidTarget(Q.Range));
             if (targetedbarrel != null && Q.IsReady() && E.IsReady())
             {
                 var castpos = target.IsInRange(targetedbarrel.Barrel, ConnectionRange)
                                   ? E.GetPrediction(target).CastPosition
                                   : targetedbarrel.Barrel.ServerPosition.Extend(E.GetPrediction(target).CastPosition, ConnectionRange).To3D();
                 if (castpos.IsInRange(target, E.Width) && E.IsInRange(castpos))
                 {
                     Q.Cast(targetedbarrel.Barrel);
                 }
             }
         }
     }
     if (user.IsCC() && W.IsReady() && AutoMenu.CheckBoxValue("CC"))
     {
         W.Cast();
     }
 }
Beispiel #5
0
        public override void Active()
        {
            if (AutoMenu.KeyBindValue("EQMOUSE"))
            {
                var target = EntityManager.Heroes.Enemies.OrderBy(e => e.Distance(Game.CursorPos)).FirstOrDefault(e => e.IsKillable(E.Range));
                if (target != null)
                {
                    var targetedbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(user)).FirstOrDefault(b => KillableBarrel(b) != null && KillableBarrel(b).IsValidTarget(Q.Range));
                    if (targetedbarrel != null && Q.IsReady() && E.IsReady())
                    {
                        var castpos = target.IsInRange(targetedbarrel.Barrel, ConnectionRange)
                                          ? E.GetPrediction(target).CastPosition
                                          : targetedbarrel.Barrel.ServerPosition.Extend(E.GetPrediction(target).CastPosition, ConnectionRange).To3D();
                        if (castpos.IsInRange(target, E.Width) && E.IsInRange(castpos))
                        {
                            Q.Cast(targetedbarrel.Barrel);
                        }
                    }
                }
            }

            if (AutoMenu.CheckBoxValue("AutoQ") && Q.IsReady())
            {
                var target =
                    EntityManager.Heroes.Enemies.OrderByDescending(TargetSelector.GetPriority).FirstOrDefault(e => e.IsKillable() &&
                                                                                                              BarrelsList.Any(b => b.Barrel.IsValidTarget(Q.Range) && (KillableBarrel(b)?.Distance(e) <= E.Width || BarrelsList.Any(a => KillableBarrel(b)?.Distance(a.Barrel) <= ConnectionRange && e.Distance(b.Barrel) <= E.Width))))
                    ?? TargetSelector.GetTarget(E.Range, DamageType.Physical);
                if (target == null)
                {
                    return;
                }
                foreach (var A in BarrelsList.OrderBy(b => b.Barrel.Distance(target)))
                {
                    if (KillableBarrel(A) != null && KillableBarrel(A).IsValidTarget(Q.Range))
                    {
                        if (target.IsInRange(KillableBarrel(A), E.Width))
                        {
                            Q.Cast(KillableBarrel(A));
                        }

                        var Secondbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(target)).FirstOrDefault(b => b.Barrel.NetworkId != KillableBarrel(A).NetworkId&& b.Barrel.Distance(KillableBarrel(A)) <= ConnectionRange);
                        if (Secondbarrel != null)
                        {
                            if (target.IsInRange(Secondbarrel.Barrel, E.Width))
                            {
                                Q.Cast(KillableBarrel(A));
                            }
                            if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Any(b => b.Barrel.NetworkId != Secondbarrel.Barrel.NetworkId && b.Barrel.Distance(Secondbarrel.Barrel) <= ConnectionRange && b.Barrel.CountEnemiesInRange(E.Width) > 0))
                            {
                                Q.Cast(KillableBarrel(A));
                            }
                        }
                    }
                }
            }
        }
Beispiel #6
0
 public override void LaneClear()
 {
     Orbwalker.ForcedTarget = null;
     if (Q.IsReady())
     {
         if (E.IsReady() && LaneClearMenu.CheckBoxValue(SpellSlot.E))
         {
             foreach (var minion in EntityManager.MinionsAndMonsters.EnemyMinions.OrderBy(m => m.Health).Where(m => m.IsKillable(E.Range)))
             {
                 var pred = E.GetPrediction(minion);
                 if (EntityManager.MinionsAndMonsters.EnemyMinions.Count(e => e.Distance(pred.CastPosition) <= E.SetSkillshot().Width&& BarrelKill(e)) >= LaneClearMenu.SliderValue("EKill"))
                 {
                     if (BarrelsList.Count(b => b.Barrel.IsInRange(pred.CastPosition, E.SetSkillshot().Width)) < 1 ||
                         (BarrelsList.Count(b => b.Barrel.IsInRange(pred.CastPosition, ConnectionRange)) > 0 && BarrelsList.Count(b => b.Barrel.IsInRange(pred.CastPosition, E.SetSkillshot().Width)) < 1))
                     {
                         E.Cast(pred.CastPosition);
                         return;
                     }
                 }
             }
         }
         if (LaneClearMenu.CheckBoxValue(SpellSlot.Q))
         {
             var barrel = BarrelsList.OrderByDescending(b => b.Barrel.CountEnemyMinionsInRange(E.SetSkillshot().Width)).FirstOrDefault(m => KillableBarrel(m) != null && m.Barrel.CountEnemyMinionsInRange(E.SetSkillshot().Width) > 0 && (KillableBarrel(m).IsValidTarget(Q.Range) || KillableBarrel(m).IsInRange(user, user.GetAutoAttackRange())));
             if (barrel != null)
             {
                 var EkillMinions = EntityManager.MinionsAndMonsters.EnemyMinions.Count(m => BarrelKill(m) && BarrelsList.Any(b => b.Barrel.IsInRange(m, E.SetSkillshot().Width)) && m.IsValidTarget())
                                    >= LaneClearMenu.SliderValue("EKill");
                 var EHitMinions = EntityManager.MinionsAndMonsters.EnemyMinions.Count(m => BarrelsList.Any(b => b.Barrel.IsInRange(m, E.SetSkillshot().Width)) && m.IsValidTarget())
                                   >= LaneClearMenu.SliderValue("EHits");
                 if (KillableBarrel(barrel).IsValidTarget(user.GetAutoAttackRange()))
                 {
                     Orbwalker.ForcedTarget = KillableBarrel(barrel);
                 }
                 else
                 {
                     if (KillableBarrel(barrel).IsValidTarget(Q.Range) && (EkillMinions || EHitMinions))
                     {
                         Q.Cast(barrel.Barrel);
                     }
                 }
             }
             else
             {
                 if (LaneClearMenu.CompareSlider("Qmana", user.ManaPercent))
                 {
                     foreach (var minion in EntityManager.MinionsAndMonsters.EnemyMinions.OrderByDescending(m => m.Distance(user)).Where(m => m.IsKillable(Q.Range) && Q.WillKill(m) && !BarrelsList.Any(b => b.Barrel.Distance(m) <= E.SetSkillshot().Width)))
                     {
                         Q.Cast(minion);
                     }
                 }
             }
         }
     }
 }
Beispiel #7
0
        private static void Spellbook_OnCastSpell(Spellbook sender, SpellbookCastSpellEventArgs args)
        {
            if (sender.Owner.IsMe && Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo))
            {
                if (BarrelsList.All(b => b?.Barrel.NetworkId != args.Target?.NetworkId))
                {
                    return;
                }

                var target =
                    EntityManager.Heroes.Enemies.FirstOrDefault(e => e.IsKillable() &&
                                                                BarrelsList.Any(b => b.Barrel.IsValidTarget(Q.Range) && (KillableBarrel(b)?.Distance(e) <= E.SetSkillshot().Width || BarrelsList.Any(a => KillableBarrel(b)?.Distance(a.Barrel) <= ConnectionRange && e.Distance(b.Barrel) <= E.SetSkillshot().Width))))
                    ?? TargetSelector.GetTarget(E.Range, DamageType.Physical);
                var position      = Vector3.Zero;
                var startposition = Vector3.Zero;
                if (args.Slot == SpellSlot.Q && E.IsReady())
                {
                    var barrel       = BarrelsList.FirstOrDefault(b => b.Barrel.NetworkId == args.Target.NetworkId);
                    var Secondbarrel = BarrelsList.FirstOrDefault(b => b.Barrel.NetworkId != barrel?.Barrel.NetworkId && b.Barrel.Distance(args.Target) <= ConnectionRange);
                    if (barrel != null)
                    {
                        startposition = Secondbarrel?.Barrel.ServerPosition ?? barrel.Barrel.ServerPosition;
                    }
                    if (startposition != Vector3.Zero)
                    {
                        if (target != null && target.IsKillable(E.Range + E.SetSkillshot().Radius))
                        {
                            if (target.Distance(startposition) <= ConnectionRange + E.SetSkillshot().Radius&& target.Distance(startposition) > E.SetSkillshot().Width - 75)
                            {
                                var extended = startposition.Extend(E.GetPrediction(target).CastPosition, ConnectionRange).To3D();
                                position = !E.IsInRange(extended) ? E.GetPrediction(target).CastPosition : extended;
                            }
                        }
                        else
                        {
                            target = EntityManager.Heroes.Enemies.OrderBy(e => e.Distance(Game.CursorPos)).FirstOrDefault(e => e.IsKillable(E.Range));
                            if (target != null)
                            {
                                var extended = startposition.Extend(E.GetPrediction(target).CastPosition, ConnectionRange).To3D();
                                position = !E.IsInRange(extended) ? E.GetPrediction(target).CastPosition : extended;
                            }
                        }
                        if (position != Vector3.Zero)
                        {
                            if (BarrelsList.Count(b => b.Barrel.Distance(position) <= E.SetSkillshot().Width) < 1)
                            {
                                E.Cast(position);
                            }
                        }
                    }
                }
            }
        }
Beispiel #8
0
 public override void JungleClear()
 {
     foreach (var target in EntityManager.MinionsAndMonsters.GetJungleMonsters().OrderBy(m => m.MaxHealth).Where(m => m.IsKillable(Q.Range) && !m.IsMoving))
     {
         if (target != null)
         {
             if (Q.IsReady() && JungleClearMenu.CheckBoxValue(SpellSlot.Q) && JungleClearMenu.CompareSlider("Qmana", user.ManaPercent))
             {
                 var targetbarrel = BarrelsList.FirstOrDefault(b => KillableBarrel(b) != null && b.Barrel.IsInRange(target, E.Width));
                 Q.Cast(targetbarrel != null ? KillableBarrel(targetbarrel) : target);
             }
             if (E.IsReady() && JungleClearMenu.CheckBoxValue(SpellSlot.E) && BarrelsList.Count(b => b.Barrel.IsInRange(target, E.Width)) < 1)
             {
                 E.Cast(target);
             }
         }
     }
 }
Beispiel #9
0
 public override void KillSteal()
 {
     foreach (var enemy in EntityManager.Heroes.Enemies.Where(e => e.IsKillable()))
     {
         if (Q.IsReady() && Q.WillKill(enemy) && enemy.IsKillable(Q.Range) && KillStealMenu.CheckBoxValue(SpellSlot.Q))
         {
             Q.Cast(enemy);
         }
         if (R.IsReady() && enemy.CountEnemiesInRange(1000) >= enemy.CountAlliesInRange(1000) && enemy.Distance(user) >= Q.Range + 1000 && KillStealMenu.CheckBoxValue(SpellSlot.R))
         {
             if (KillStealMenu.CheckBoxValue("RSwitch") && Rdamage(enemy) > 0 ? Rdamage(enemy) >= enemy.TotalShieldHealth() : R.WillKill(enemy, KillStealMenu.SliderValue("Rdmg"), Rdamage(enemy)))
             {
                 if (KillStealMenu.CheckBoxValue("RSwitch") && Rdamage(enemy) > 0)
                 {
                     Player.CastSpell(SpellSlot.R, enemy.PredictPosition());
                 }
                 else
                 {
                     R.SetSkillshot().CastAOE(1, R.Range);
                 }
             }
         }
         if (KillStealMenu.CheckBoxValue(SpellSlot.E))
         {
             foreach (var a in BarrelsList)
             {
                 if (BarrelKill(enemy))
                 {
                     if (KillableBarrel(a) != null)
                     {
                         if (KillableBarrel(a)?.Distance(enemy) <= E.SetSkillshot().Width)
                         {
                             Q.Cast(KillableBarrel(a));
                         }
                         if (BarrelsList.Any(b => b.Barrel.Distance(KillableBarrel(a)) <= ConnectionRange && enemy.Distance(b.Barrel) <= E.SetSkillshot().Width))
                         {
                             Q.Cast(KillableBarrel(a));
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #10
0
        public override void Active()
        {
            if (AutoMenu.CheckBoxValue("AutoQ") && Q.IsReady())
            {
                var target =
                    EntityManager.Heroes.Enemies.OrderByDescending(TargetSelector.GetPriority).FirstOrDefault(e => e.IsKillable() &&
                                                                                                              BarrelsList.Any(b => b.Barrel.IsValidTarget(Q.Range) && (KillableBarrel(b)?.Distance(e) <= E.SetSkillshot().Width || BarrelsList.Any(a => KillableBarrel(b)?.Distance(a.Barrel) <= ConnectionRange && e.Distance(b.Barrel) <= E.SetSkillshot().Width))))
                    ?? TargetSelector.GetTarget(E.Range, DamageType.Physical);
                if (target == null)
                {
                    return;
                }
                foreach (var A in BarrelsList.OrderBy(b => b.Barrel.Distance(target)))
                {
                    if (KillableBarrel(A) != null && KillableBarrel(A).IsValidTarget(Q.Range))
                    {
                        if (target.IsInRange(KillableBarrel(A), E.SetSkillshot().Width))
                        {
                            Q.Cast(KillableBarrel(A));
                        }

                        var Secondbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(target)).FirstOrDefault(b => b.Barrel.NetworkId != KillableBarrel(A).NetworkId&& b.Barrel.Distance(KillableBarrel(A)) <= ConnectionRange);
                        if (Secondbarrel != null)
                        {
                            if (target.IsInRange(Secondbarrel.Barrel, E.SetSkillshot().Width))
                            {
                                Q.Cast(KillableBarrel(A));
                            }
                            if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Any(b => b.Barrel.NetworkId != Secondbarrel.Barrel.NetworkId && b.Barrel.Distance(Secondbarrel.Barrel) <= ConnectionRange && b.Barrel.CountEnemiesInRange(E.SetSkillshot().Width) > 0))
                            {
                                Q.Cast(KillableBarrel(A));
                            }
                        }
                    }
                }
            }
        }
Beispiel #11
0
        public override void Combo()
        {
            Orbwalker.ForcedTarget = null;
            if (R.IsReady() && ComboMenu.CheckBoxValue(SpellSlot.R))
            {
                R.SetSkillshot().CastAOE(ComboMenu.SliderValue("RAOE"), 3000);
            }

            var target =
                EntityManager.Heroes.Enemies.OrderByDescending(TargetSelector.GetPriority).FirstOrDefault(e => e.IsKillable() &&
                                                                                                          BarrelsList.Any(b => b.Barrel.IsValidTarget(Q.Range) && (KillableBarrel(b)?.Distance(e) <= E.SetSkillshot().Width || BarrelsList.Any(a => KillableBarrel(b)?.Distance(a.Barrel) <= ConnectionRange && e.Distance(b.Barrel) <= E.SetSkillshot().Width))))
                ?? TargetSelector.GetTarget(E.Range, DamageType.Physical);

            if (target == null || !target.IsKillable())
            {
                return;
            }

            var pred    = target.PredictPosition();
            var castpos = E.GetPrediction(target).CastPosition;

            if (AABarrel(target) != null)
            {
                var extended = AABarrel(target).ServerPosition.Extend(pred, ConnectionRange).To3D();
                castpos = !E.IsInRange(extended) ? pred : extended;
                Orbwalker.ForcedTarget = AABarrel(target);
                if (E.IsReady() && ComboMenu.CheckBoxValue(SpellSlot.E))
                {
                    if (BarrelsList.Count(b => b.Barrel.Distance(user) <= Q.Range) > 0 && BarrelsList.Count(b => b.Barrel.Distance(castpos) <= E.SetSkillshot().Width) < 1)
                    {
                        E.Cast(castpos);
                    }
                }
                Player.IssueOrder(GameObjectOrder.AttackUnit, AABarrel(target));
                return;
            }

            if (Q.IsReady())
            {
                if (ComboMenu.CheckBoxValue(SpellSlot.Q))
                {
                    if (((BarrelsList.Count(b => b.Barrel.IsInRange(target, E.SetSkillshot().Radius + ConnectionRange)) < 1 && (!E.IsReady() || E.Handle.Ammo < 1)) || Q.WillKill(target)) && target.IsKillable(Q.Range))
                    {
                        Q.Cast(target);
                    }

                    foreach (var A in BarrelsList.OrderBy(b => b.Barrel.Distance(target)))
                    {
                        if (KillableBarrel(A) != null && KillableBarrel(A).IsValidTarget(Q.Range))
                        {
                            if (pred.IsInRange(KillableBarrel(A), E.SetSkillshot().Width))
                            {
                                Q.Cast(KillableBarrel(A));
                            }

                            var Secondbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(target)).FirstOrDefault(b => b.Barrel.NetworkId != KillableBarrel(A).NetworkId&& b.Barrel.Distance(KillableBarrel(A)) <= ConnectionRange);
                            if (Secondbarrel != null)
                            {
                                if (pred.IsInRange(Secondbarrel.Barrel, E.SetSkillshot().Width))
                                {
                                    Q.Cast(KillableBarrel(A));
                                }
                                if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Any(b => b.Barrel.NetworkId != Secondbarrel.Barrel.NetworkId && b.Barrel.Distance(Secondbarrel.Barrel) <= ConnectionRange && b.Barrel.CountEnemiesInRange(E.SetSkillshot().Width) > 0))
                                {
                                    Q.Cast(KillableBarrel(A));
                                }
                            }
                            else
                            {
                                if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Any(b => b.Barrel.NetworkId != KillableBarrel(A).NetworkId&& b.Barrel.Distance(KillableBarrel(A)) <= ConnectionRange && b.Barrel.CountEnemiesInRange(E.SetSkillshot().Width) > 0))
                                {
                                    Q.Cast(KillableBarrel(A));
                                }
                            }
                        }
                    }
                }
                if (E.IsReady() && ComboMenu.CheckBoxValue(SpellSlot.E))
                {
                    if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Count(b => b.Barrel.IsInRange(target, E.SetSkillshot().Width)) < 1)
                    {
                        if (BarrelsList.OrderBy(b => b.Barrel.Distance(target)).Count(b => b.Barrel.IsInRange(target, E.SetSkillshot().Radius + ConnectionRange)) > 0)
                        {
                            var targetbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(target)).FirstOrDefault(b => KillableBarrel(b) != null && (b.Barrel.IsValidTarget(Q.Range) || b.Barrel.IsValidTarget(user.GetAutoAttackRange())) && b.Barrel.IsInRange(target, E.SetSkillshot().Radius + ConnectionRange));
                            if (KillableBarrel(targetbarrel) != null)
                            {
                                var Secondbarrel = BarrelsList.OrderBy(b => b.Barrel.Distance(target)).FirstOrDefault(b => b.Barrel.NetworkId != targetbarrel?.Barrel.NetworkId && b.Barrel.Distance(targetbarrel?.Barrel) <= ConnectionRange);

                                if (Secondbarrel != null)
                                {
                                    var extended = Secondbarrel.Barrel.ServerPosition.Extend(pred, ConnectionRange).To3D();
                                    castpos = !E.IsInRange(extended) ? pred : extended;
                                }
                                if ((castpos.Distance(KillableBarrel(targetbarrel)) <= ConnectionRange || Secondbarrel?.Barrel.Distance(castpos) <= ConnectionRange) && E.IsInRange(castpos))
                                {
                                    E.Cast(castpos);
                                }
                            }
                        }
                        else
                        {
                            if (E.Handle.Ammo > 1 && ComboMenu.CheckBoxValue("FB"))
                            {
                                if (Q.IsInRange(castpos))
                                {
                                    if (HPTiming() <= 1000 || target.IsCC())
                                    {
                                        E.Cast(castpos);
                                    }
                                }
                                else
                                {
                                    if (E.IsInRange(castpos))
                                    {
                                        E.Cast(castpos.Extend(user, ConnectionRange - 300).To3D());
                                    }
                                }

                                var circle = new Geometry.Polygon.Circle(castpos, ConnectionRange);
                                foreach (var point in circle.Points)
                                {
                                    circle = new Geometry.Polygon.Circle(point, E.SetSkillshot().Width);
                                    var grass = circle.Points.OrderBy(p => p.Distance(castpos)).FirstOrDefault(p => p.IsGrass() && Q.IsInRange(p.To3D()) && p.Distance(castpos) <= ConnectionRange);
                                    if (grass != null)
                                    {
                                        E.Cast(grass.To3D());
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }