/// <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>() && Ekko.Orbwalker.ActiveMode.Equals(Orbwalking.OrbwalkingMode.LastHit)) { 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); } } } }
/// <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.OldHealth.ContainsKey(Ekko.GameTime - 4000)) { if (Ekko.OldHealth[Ekko.GameTime - 4000] / Ekko.Player.MaxHealth * 100 > 5 && Ekko.Player.Health / Ekko.OldHealth[Ekko.GameTime - 4000] * 100 <= Ekko.Menu.Item("l33t.ekko.combo.rback").GetValue <Slider>().Value) { Spells[SpellSlot.R].Cast(); } } } } }
/// <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(); } } } } }