Exemple #1
0
        /// <summary>
        ///     Process the farming.
        /// </summary>
        public static void ProcessFarm()
        {
            if (Spells[SpellSlot.Q].IsReady())
            {
                if (Ekko.Orbwalker.ActiveMode.Equals(Orbwalking.OrbwalkingMode.LaneClear) &&
                    Ekko.Menu.Item("l33t.ekko.farming.lcq").GetValue <bool>())
                {
                    var farmLocation =
                        MinionManager.GetBestLineFarmLocation(
                            GameObjects.EnemyMinions.Where(
                                m => m.IsValidTarget() && m.Distance(Player.Position) <= Spells[SpellSlot.Q].Range)
                            .Select(m => m.Position.To2D())
                            .ToList(),
                            Spells[SpellSlot.Q].Width,
                            Spells[SpellSlot.Q].Range);

                    if (farmLocation.MinionsHit >= Ekko.Menu.Item("l33t.ekko.farming.lcqh").GetValue <Slider>().Value)
                    {
                        Spells[SpellSlot.Q].Cast(farmLocation.Position);
                    }
                }
                else if (Ekko.Menu.Item("l33t.ekko.farming.lhq").GetValue <bool>())
                {
                    var farmLocation =
                        GetBestLineFarmLocation(
                            GameObjects.EnemyMinions.Where(
                                m => m.IsValidTarget() && m.Distance(Player.Position) <= Spells[SpellSlot.Q].Range)
                            .ToList(),
                            Spells[SpellSlot.Q].Width,
                            Spells[SpellSlot.Q].Range);

                    if (farmLocation.MinionsHit >= Ekko.Menu.Item("l33t.ekko.farming.lhqh").GetValue <Slider>().Value &&
                        farmLocation.Minions.Count(m => m.Health <= Damages.GetDamageQ(m))
                        >= Ekko.Menu.Item("l33t.ekko.farming.lhqh").GetValue <Slider>().Value)
                    {
                        Spells[SpellSlot.Q].Cast(farmLocation.Position);
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        ///     Processes combo.
        /// </summary>
        /// <param name="harass">
        ///     Indicates which mode.
        /// </param>
        public static void ProcessSpells(bool harass = false)
        {
            var target = TargetSelector.GetTarget(Spells[SpellSlot.Q].Range, TargetSelector.DamageType.Magical);

            if (!target.IsValidTarget())
            {
                return;
            }

            var targetPos =
                Prediction.GetPrediction(target, Spells[SpellSlot.Q].Delay, target.BoundingRadius, target.MoveSpeed)
                .UnitPosition;

            if (Spells[SpellSlot.Q].IsReady() &&
                Ekko.Menu.Item(harass ? "l33t.ekko.harass.q" : "l33t.ekko.combo.q").GetValue <bool>() &&
                targetPos.Distance(Player.Position) <= Spells[SpellSlot.Q].Range)
            {
                var pred = Spells[SpellSlot.Q].GetPrediction(
                    target,
                    false,
                    Spells[SpellSlot.Q].Range - 50f,
                    new[] { CollisionableObjects.YasuoWall });
                if (!pred.CollisionObjects.Contains(ObjectManager.Player))
                {
                    if (pred.Hitchance >= HitChance.Medium)
                    {
                        Spells[SpellSlot.Q].Cast(pred.CastPosition);
                        lastQCastTick = Ekko.GameTime;
                    }
                }
            }

            if (Spells[SpellSlot.E].IsReady() &&
                Ekko.Menu.Item(harass ? "l33t.ekko.harass.e" : "l33t.ekko.combo.e").GetValue <bool>())
            {
                if (Ekko.EkkoField != null && Ekko.EkkoField.IsValid)
                {
                    var targets =
                        GameObjects.EnemyHeroes.Where(e => e.Distance(Ekko.EkkoField.Position) <= 375f).ToList();
                    if (targets.Count()
                        >= Ekko.Menu.Item(harass ? "l33t.ekko.harass.ehitc" : "l33t.ekko.combo.ehitc")
                        .GetValue <Slider>()
                        .Value)
                    {
                        var farTarget =
                            targets.Where(t => t.Distance(Player.Position) <= Spells[SpellSlot.E].Range + 425f)
                            .OrderBy(t => t.Distance(Player.Position))
                            .LastOrDefault();
                        if (farTarget != null && farTarget.IsValidTarget())
                        {
                            Spells[SpellSlot.E].Cast(farTarget);
                        }
                    }

                    if (Ekko.EkkoField.Position.Distance(Player.Position) <= 375f + Spells[SpellSlot.E].Range &&
                        targetPos.Distance(Ekko.EkkoField.Position) <= 375f)
                    {
                        Spells[SpellSlot.E].Cast(Ekko.EkkoField.Position);
                    }

                    if (Ekko.EkkoField.Position.Distance(Player.Position) <= 375f + Spells[SpellSlot.E].Range)
                    {
                        if (
                            targetPos.Distance(
                                Player.Position.Extend(Ekko.EkkoField.Position, Spells[SpellSlot.E].Range)) <= 425f)
                        {
                            Spells[SpellSlot.E].Cast(Ekko.EkkoField.Position);
                        }
                    }
                }

                if (targetPos.Distance(Player.Position) <= Spells[SpellSlot.E].Range + 425f)
                {
                    var dash = Player.Position.Extend(targetPos, Spells[SpellSlot.E].Range);
                    if (dash.IsWall())
                    {
                        var longestDash = Player.Position;
                        for (var i = 1; i < Spells[SpellSlot.E].Range; ++i)
                        {
                            if (!Player.Position.Extend(targetPos, i).IsWall())
                            {
                                longestDash = Player.Position.Extend(targetPos, i);
                            }
                        }

                        if (longestDash.Distance(targetPos) <= 425f)
                        {
                            Spells[SpellSlot.E].Cast(dash);
                        }
                    }
                    else
                    {
                        if (dash.Distance(targetPos) <= 425f)
                        {
                            Spells[SpellSlot.E].Cast(dash);
                        }
                    }
                }
            }

            if (Spells[SpellSlot.W].IsReady() &&
                Ekko.Menu.Item(harass ? "l33t.ekko.harass.w" : "l33t.ekko.combo.w").GetValue <bool>())
            {
                if (Player.Distance(targetPos) <= Spells[SpellSlot.Q].Range - Player.AttackRange &&
                    Ekko.GameTime - lastQCastTick < 7000 + 1000 * Spells[SpellSlot.Q].Level - 1)
                {
                    // q + w
                    var targetPosition =
                        Prediction.GetPrediction(
                            target,
                            3f,
                            target.BoundingRadius,
                            target.MoveSpeed * new float[] { 40, 50, 60, 70, 80 }[Spells[SpellSlot.W].Level - 1])
                        .UnitPosition;
                    if (targetPosition.Distance(Player.Position) <= Spells[SpellSlot.W].Range)
                    {
                        var castPos = targetPos + (targetPos - targetPosition);
                        if (!castPos.IsWall())
                        {
                            Spells[SpellSlot.W].Cast(targetPos + (targetPos - targetPosition));
                        }
                    }
                }

                var targets =
                    GameObjects.EnemyHeroes.Where(e => e.Distance(Player.Position) <= Spells[SpellSlot.W].Range)
                    .ToList();
                if (targets.Count()
                    >= Ekko.Menu.Item(harass ? "l33t.ekko.harass.whitc" : "l33t.ekko.combo.whitc")
                    .GetValue <Slider>()
                    .Value)
                {
                    // multi w
                    var predictions =
                        targets.Where(wTarget => wTarget != null && wTarget.IsValidTarget())
                        .Select(
                            wTarget =>
                            Prediction.GetPrediction(
                                wTarget,
                                Spells[SpellSlot.E].Delay + Game.Ping / 2f,
                                wTarget.BoundingRadius,
                                wTarget.MoveSpeed))
                        .ToList();
                    var center = predictions.Aggregate(
                        new Vector3(),
                        (current, position) => current + position.UnitPosition);

                    if (!center.IsWall() && center.Distance(Player.Position) <= Spells[SpellSlot.W].Range &&
                        predictions.All(p => p.UnitPosition.Distance(center) <= Spells[SpellSlot.W].Range))
                    {
                        Spells[SpellSlot.W].Cast(center);
                    }
                }

                {
                    // w on slowed.
                    var targetPosition =
                        Prediction.GetPrediction(target, 3f, target.BoundingRadius, target.MoveSpeed).UnitPosition;
                    if (!targetPosition.IsWall() &&
                        targetPosition.Distance(Player.Position) <= Spells[SpellSlot.W].Range &&
                        target.Distance(Player.Position) <= Spells[SpellSlot.E].Range + 425f)
                    {
                        Spells[SpellSlot.W].Cast(targetPosition);
                    }
                }
            }

            if (!harass)
            {
                if (Spells[SpellSlot.R].IsReady() && Ekko.Menu.Item("l33t.ekko.combo.r").GetValue <bool>() &&
                    Ekko.EkkoGhost != null && Ekko.EkkoGhost.IsValid)
                {
                    var ultimateDelay =
                        Prediction.GetPrediction(target, 0.25f, target.BoundingRadius, target.MoveSpeed).UnitPosition;
                    if (Ekko.Menu.Item("l33t.ekko.combo.rkill").GetValue <bool>())
                    {
                        if (ultimateDelay.Distance(Ekko.EkkoGhost.Position) <= Spells[SpellSlot.R].Range)
                        {
                            var damage = Damages.GetDamageE(target) + Damages.GetDamageQ(target)
                                         + Damages.GetDamageR(target) + Player.GetAutoAttackDamage(target);
                            if (damage >= target.Health)
                            {
                                Spells[SpellSlot.R].Cast();
                            }
                        }
                    }

                    if (target.Health <= Damages.GetDamageR(target) &&
                        target.Health
                        >= Damages.GetDamageQ(target) + Player.GetAutoAttackDamage(target) + Damages.GetDamageE(target) &&
                        ultimateDelay.Distance(Ekko.EkkoGhost.Position) <= Spells[SpellSlot.R].Range)
                    {
                        Spells[SpellSlot.R].Cast();
                    }

                    if (
                        GameObjects.EnemyHeroes.Where(e => e != null && e.IsValidTarget())
                        .Count(
                            e =>
                            Prediction.GetPrediction(e, 0.25f, e.BoundingRadius, e.MoveSpeed)
                            .UnitPosition.Distance(Ekko.EkkoGhost.Position) <= Spells[SpellSlot.R].Range)
                        >= Ekko.Menu.Item("l33t.ekko.combo.rifhit").GetValue <Slider>().Value)
                    {
                        Spells[SpellSlot.R].Cast();
                    }

                    if (Ekko.Menu.Item("l33t.ekko.combo.rbackenable").GetValue <bool>() &&
                        Ekko.OldHealthPercent.ContainsKey(Ekko.GameTime - 4000))
                    {
                        if (Ekko.OldHealthPercent[Ekko.GameTime - 4000] - Player.HealthPercent
                            <= Ekko.Menu.Item("l33t.ekko.combo.rback").GetValue <Slider>().Value)
                        {
                            Spells[SpellSlot.R].Cast();
                        }
                    }
                }
            }
        }
Exemple #3
0
        /// <summary>
        ///     Process <c>Killsteal</c>.
        /// </summary>
        public static void ProcessKillsteal()
        {
            var lowestTarget = GameObjects.EnemyHeroes.OrderBy(h => h.Health).FirstOrDefault();

            if (!lowestTarget.IsValidTarget() || lowestTarget == null)
            {
                return;
            }

            var targetPos =
                Prediction.GetPrediction(
                    lowestTarget,
                    Spells[SpellSlot.Q].Delay,
                    lowestTarget.BoundingRadius,
                    lowestTarget.MoveSpeed).UnitPosition;

            if (Spells[SpellSlot.Q].IsReady() && Ekko.Menu.Item("l33t.ekko.ks.q").GetValue <bool>() &&
                targetPos.Distance(Player.Position) <= Spells[SpellSlot.Q].Range &&
                lowestTarget.Health <= Damages.GetDamageQ(lowestTarget))
            {
                var pred = Spells[SpellSlot.Q].GetPrediction(
                    lowestTarget,
                    false,
                    Spells[SpellSlot.Q].Range - 50f,
                    new[] { CollisionableObjects.YasuoWall });
                if (!pred.CollisionObjects.Contains(ObjectManager.Player))
                {
                    if (pred.Hitchance >= HitChance.Medium)
                    {
                        Spells[SpellSlot.Q].Cast(pred.CastPosition);
                        lastQCastTick = Ekko.GameTime;
                    }
                }
            }

            if (Spells[SpellSlot.E].IsReady() && Ekko.Menu.Item("l33t.ekko.ks.e").GetValue <bool>() &&
                lowestTarget.Distance(Player.Position) <= Spells[SpellSlot.E].Range + 425f &&
                lowestTarget.Health <= Player.GetAutoAttackDamage(lowestTarget) + Damages.GetDamageE(lowestTarget))
            {
                var dash = Player.Position.Extend(targetPos, Spells[SpellSlot.E].Range);
                if (dash.IsWall())
                {
                    var longestDash = Player.Position;
                    while (!longestDash.IsWall())
                    {
                        longestDash = longestDash.Extend(targetPos, 1f);
                    }

                    if (longestDash.Distance(targetPos) <= 425f)
                    {
                        Spells[SpellSlot.E].Cast(dash);
                    }
                }
                else
                {
                    if (dash.Distance(targetPos) <= 425f)
                    {
                        Spells[SpellSlot.E].Cast(dash);
                    }
                }
            }

            if (Spells[SpellSlot.R].IsReady() && Ekko.EkkoGhost != null && Ekko.EkkoGhost.IsValid &&
                Ekko.Menu.Item("l33t.ekko.ks.r").GetValue <bool>())
            {
                var enemies =
                    GameObjects.EnemyHeroes.Where(
                        e =>
                        e != null && e.IsValidTarget() &&
                        Prediction.GetPrediction(e, 0.25f, e.BoundingRadius, e.MoveSpeed)
                        .UnitPosition.Distance(Ekko.EkkoGhost.Position) <= Spells[SpellSlot.R].Range).ToList();
                if (enemies.Any())
                {
                    if (enemies.Count() >= Ekko.Menu.Item("l33t.ekko.ks.mr").GetValue <Slider>().Value)
                    {
                        var count = enemies.Count(e => e.Health <= Damages.GetDamageR(e));
                        if (count >= Ekko.Menu.Item("l33t.ekko.ks.mr").GetValue <Slider>().Value)
                        {
                            Spells[SpellSlot.R].Cast();
                        }
                    }
                }
            }
        }