/// <summary> /// Returns the number of feathers which can hit the target unit. /// </summary> /// <param name="unit">The unit.</param> public int CountFeathersHitOnUnit(Obj_AI_Base unit) { var hit = 0; foreach (var feather in Feathers) { var playerToFeatherRectangle = new Vector2Geometry.Rectangle((Vector2)UtilityClass.Player.ServerPosition, (Vector2)feather.Value, SpellClass.E.Width); if (playerToFeatherRectangle.IsInside((Vector2)unit.ServerPosition)) { hit++; } } return(hit); }
/// <summary> /// Gets the approximative number of mines hit by the target inside the MineField after W Cast. /// </summary> /// <param name="unit">The unit.</param> public int GetBestBouldersHitPositionHitBoulders(Obj_AI_Base unit) { var mostBouldersHit = 0; foreach (var mine in MineField) { var unitToMineRectangle = new Vector2Geometry.Rectangle((Vector2)unit.ServerPosition, (Vector2)unit.ServerPosition.Extend((Vector2)mine.Value, WPushDistance), unit.BoundingRadius); var bouldersHit = MineField.Count(o => unitToMineRectangle.IsInside((Vector2)o.Value)); if (bouldersHit > mostBouldersHit) { mostBouldersHit = bouldersHit; } } return(mostBouldersHit); }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.Q.Range, 30, Color.LightGreen); } /// <summary> /// Loads the Feather linking drawing. /// </summary> if (!UtilityClass.Player.SpellBook.GetSpell(SpellSlot.E).State.HasFlag(SpellState.Cooldown) && MenuClass.Drawings["feathers"].As <MenuBool>().Enabled) { foreach (var feather in Feathers) { var drawFeatherPos = feather.Value.FixHeight(); var realFeatherHitbox = new Vector2Geometry.Rectangle((Vector2)UtilityClass.Player.ServerPosition, (Vector2)drawFeatherPos, SpellClass.E.Width); var drawFeatherHitbox = new Vector3Geometry.Rectangle(UtilityClass.Player.Position, drawFeatherPos, SpellClass.E.Width); drawFeatherHitbox.Draw( GameObjects.EnemyHeroes.Any(h => h.IsValidTarget() && realFeatherHitbox.IsInside((Vector2)h.Position)) ? Color.Blue : Color.Yellow); Render.Circle(drawFeatherPos, SpellClass.E.Width, 5, Color.OrangeRed); } } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready && MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } }
/// <summary> /// Fired when the game is updated. /// </summary> public void Laneclear() { if (BallPosition == null) { return; } /// <summary> /// The Laneclear W Logic. /// </summary> if (SpellClass.W.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.Spells["w"]["laneclear"]) && MenuClass.Spells["w"]["laneclear"].As <MenuSliderBool>().Enabled) { if (Extensions.GetEnemyLaneMinionsTargets().Count(m => m.IsValidTarget(SpellClass.W.Width, false, true, (Vector3)BallPosition)) >= MenuClass.Spells["w"]["customization"]["laneclear"].As <MenuSlider>().Value) { SpellClass.W.Cast(); } } /// <summary> /// The Laneclear E Logic. /// </summary> if (SpellClass.E.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.E.Slot, MenuClass.Spells["e"]["laneclear"]) && MenuClass.Spells["e"]["laneclear"].As <MenuSliderBool>().Enabled) { var polygon = new Vector2Geometry.Rectangle( (Vector2)UtilityClass.Player.ServerPosition, (Vector2)UtilityClass.Player.ServerPosition.Extend((Vector3)BallPosition, UtilityClass.Player.Distance((Vector3)BallPosition)), SpellClass.E.Width); if (Extensions.GetEnemyLaneMinionsTargets().Count(t => t.IsValidTarget() && !polygon.IsOutside((Vector2)t.ServerPosition)) >= MenuClass.Spells["e"]["customization"]["laneclear"].As <MenuSlider>().Value) { UtilityClass.CastOnUnit(SpellClass.E, UtilityClass.Player); } } /// <summary> /// The Q Farmhelper Logic. /// </summary> if (SpellClass.Q.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellSlot.Q, MenuClass.Spells["q"]["farmhelper"]) && MenuClass.Spells["q"]["farmhelper"].As <MenuSliderBool>().Enabled) { foreach (var minion in Extensions.GetEnemyLaneMinionsTargetsInRange(SpellClass.Q.Range).Where(m => !m.IsValidTarget(UtilityClass.Player.GetFullAttackRange(m)))) { if (minion.GetRealHealth() < UtilityClass.Player.GetSpellDamage(minion, SpellSlot.Q)) { SpellClass.Q.GetPredictionInput(minion).From = (Vector3)BallPosition; SpellClass.Q.Cast(SpellClass.Q.GetPrediction(minion).CastPosition); } } } /// <summary> /// The Laneclear Q Logic. /// </summary> if (SpellClass.Q.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.Q.Slot, MenuClass.Spells["q"]["laneclear"]) && MenuClass.Spells["q"]["laneclear"].As <MenuSliderBool>().Enabled) { /* * var farmLocation = SpellClass.Q.GetLinearFarmLocation(Extensions.GetEnemyLaneMinionsTargets(), SpellClass.Q.Width); * if (farmLocation.MinionsHit >= MenuClass.Spells["q"]["customization"]["laneclear"].As<MenuSlider>().Value) * { * SpellClass.Q.Cast(farmLocation.Position); * } */ } }
/// <summary> /// Called on tick update. /// </summary> public void Combo() { if (BallPosition == null) { return; } /// <summary> /// The W Combo Logic. /// </summary> if (SpellClass.W.Ready && MenuClass.Spells["w"]["combo"].As <MenuBool>().Enabled) { if (GameObjects.EnemyHeroes.Any(t => !Invulnerable.Check(t, DamageType.Magical, false) && t.IsValidTarget(SpellClass.W.Width - t.BoundingRadius - SpellClass.W.Delay * t.BoundingRadius, false, false, (Vector3)BallPosition))) { SpellClass.W.Cast(); } } /// <summary> /// The E Logics. /// </summary> if (SpellClass.E.Ready) { /// <summary> /// The E Engager Logic. /// </summary> if (MenuClass.Spells["r"]["aoe"] != null && MenuClass.Spells["r"]["aoe"].As <MenuSliderBool>().Enabled&& MenuClass.Spells["e"]["engager"].As <MenuBool>().Enabled) { var bestAllies = GameObjects.AllyHeroes .Where(a => !a.IsMe && a.IsValidTarget(SpellClass.E.Range, true) && MenuClass.Spells["e"]["engagerswhitelist"][a.ChampionName.ToLower()].As <MenuBool>().Enabled); var bestAlly = bestAllies .FirstOrDefault(a => GameObjects.EnemyHeroes.Count(t => !Invulnerable.Check(t, DamageType.Magical, false) && t.IsValidTarget(SpellClass.R.Width - t.BoundingRadius - SpellClass.R.Delay * t.BoundingRadius, false, false, a.ServerPosition)) >= MenuClass.Spells["r"]["aoe"].As <MenuSliderBool>().Value); if (bestAlly != null) { UtilityClass.CastOnUnit(SpellClass.E, bestAlly); } } /// <summary> /// The E Combo Logic. /// </summary> if (MenuClass.Spells["e"]["combo"].As <MenuBool>().Enabled) { var bestAllies = GameObjects.AllyHeroes .Where(a => a.IsValidTarget(SpellClass.E.Range, true) && MenuClass.Spells["e"]["combowhitelist"][a.ChampionName.ToLower()].As <MenuBool>().Enabled) .OrderBy(o => o.GetRealHealth()); foreach (var ally in bestAllies) { var allyToBallRectangle = new Vector2Geometry.Rectangle( (Vector2)ally.ServerPosition, (Vector2)ally.ServerPosition.Extend((Vector3)BallPosition, ally.Distance((Vector3)BallPosition) + 30f), SpellClass.E.Width); if (GameObjects.EnemyHeroes.Any(t => t.IsValidTarget() && !Invulnerable.Check(t, DamageType.Magical) && allyToBallRectangle.IsInside((Vector2)t.ServerPosition))) { UtilityClass.CastOnUnit(SpellClass.E, ally); return; } } } } /// <summary> /// The Combo Q Logic. /// </summary> if (SpellClass.Q.Ready && MenuClass.Spells["q"]["combo"].As <MenuBool>().Enabled) { var bestTarget = Extensions.GetBestEnemyHeroTargetInRange(SpellClass.Q.Range); if (bestTarget != null) { if (SpellClass.E.Ready && !UtilityClass.Player.HasBuff("orianaghostself") && bestTarget.Distance((Vector3)BallPosition) >= bestTarget.Distance(UtilityClass.Player) && MenuClass.E2["gaine"].As <MenuBool>().Enabled) { UtilityClass.CastOnUnit(SpellClass.E, UtilityClass.Player); return; } SpellClass.Q.GetPredictionInput(bestTarget).From = (Vector3)BallPosition; SpellClass.Q.Cast(SpellClass.Q.GetPrediction(bestTarget).CastPosition); } } }
/// <summary> /// Fired when the game is updated. /// </summary> public void Jungleclear() { if (BallPosition == null) { return; } /// <summary> /// The Jungleclear W Logic. /// </summary> if (SpellClass.W.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.Spells["w"]["jungleclear"]) && MenuClass.Spells["w"]["jungleclear"].As <MenuSliderBool>().Enabled) { if (Extensions.GetGenericJungleMinionsTargets().Any(m => m.IsValidTarget(SpellClass.W.Width, false, true, (Vector3)BallPosition))) { SpellClass.W.Cast(); } } var jungleTarget = ObjectManager.Get <Obj_AI_Minion>() .Where(m => Extensions.GetGenericJungleMinionsTargets().Contains(m)) .MinBy(m => m.Distance(UtilityClass.Player)); if (jungleTarget == null || jungleTarget.GetRealHealth() < UtilityClass.Player.GetAutoAttackDamage(jungleTarget) * 3) { return; } /// <summary> /// The Jungleclear E Logic. /// </summary> if (SpellClass.E.Ready && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.E.Slot, MenuClass.Spells["e"]["jungleclear"]) && MenuClass.Spells["e"]["jungleclear"].As <MenuSliderBool>().Enabled) { var polygon = new Vector2Geometry.Rectangle( (Vector2)UtilityClass.Player.ServerPosition, (Vector2)UtilityClass.Player.ServerPosition.Extend((Vector3)BallPosition, UtilityClass.Player.Distance((Vector3)BallPosition)), SpellClass.E.Width); if (!polygon.IsOutside((Vector2)jungleTarget.ServerPosition)) { UtilityClass.CastOnUnit(SpellClass.E, UtilityClass.Player); } } /// <summary> /// The Jungleclear Q Logic. /// </summary> if (SpellClass.Q.Ready && jungleTarget.IsValidTarget(SpellClass.Q.Range) && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.Q.Slot, MenuClass.Spells["q"]["jungleclear"]) && MenuClass.Spells["q"]["jungleclear"].As <MenuSliderBool>().Enabled) { SpellClass.Q.GetPredictionInput(jungleTarget).From = (Vector3)BallPosition; SpellClass.Q.Cast(SpellClass.Q.GetPrediction(jungleTarget).CastPosition); } }