public static bool ShouldRecall() { if (Me.HealthPercent >= 80 && MyADC.HealthPercent >= 80) { return(false); } if (MyADC.IsDead) { return(true); } if (MyADC.IsRecalling() || MyADC.IsInShopRange()) { return(true); } if (Me.HealthPercent <= 25 && MyADC.HealthPercent <= 25) { return(true); } if (Me.Gold >= 1500 && MyADC.HealthPercent >= 70 && Me.HealthPercent <= 50) { return(true); } return(false); }
private static void Drawing_OnDraw(System.EventArgs args) { if (DrawReady) { if (DrawQ && Q.IsReady()) { Me.DrawCircle((int)Q.Range, QColor); } if (DrawW && W.IsReady()) { Me.DrawCircle((int)W.Range, WColor); } if (DrawE && E.IsReady()) { Me.DrawCircle((int)E.Range, EColor); } if (DrawR && R.IsReady()) { Me.DrawCircle((int)R.Range, RColor); } } else { if (DrawQ) { Me.DrawCircle((int)Q.Range, QColor); } if (DrawW) { Me.DrawCircle((int)W.Range, WColor); } if (DrawE) { Me.DrawCircle((int)E.Range, EColor); } if (DrawR) { Me.DrawCircle((int)R.Range, RColor); } } if (MyADC.IsValidTarget()) { MyADC.DrawCircle((int)MyADC.BoundingRadius + 50, Color.Aqua, 15f); //PositionManager.Position.DrawCircle(25, SharpDX.Color.AliceBlue, 10); DangerManager.DrawSpells(Color.Black); } foreach (var enemy in EntityManager.Heroes.AllHeroes) { enemy.DrawCircle((int)enemy.BoundingRadius, enemy.IsBeingAutoAttacked() ? Color.Red: Color.Green, 8f); } }
public override void Execute() { Target = TargetSelector.GetTarget(2000, DamageType.Physical); if (MyADC == null) { return; } if (!Me.IsRecalling()) { PositionManager.Position = PositionManager.BestPosition(); Orbwalker.OverrideOrbwalkPosition += OverrideOrbwalkPosition; } if (MyADC.IsAttacking()) { E.Cast(MyADC); } if (MyADC.IsInDanger(300, 90)) { E.Cast(MyADC); } if (Me.IsInDanger(300, 90)) { E.Cast(Me); } #region Debug if (!DebugDanger) { return; } foreach (var hero in EntityManager.Heroes.AllHeroes) { if (hero.IsInDanger(350, 90)) { Console.WriteLine(hero.BaseSkinName + " Is In Danger"); } } #endregion Debug }
public static Vector3 BestRecallPosition() { var nearestEnemyTower = EntityManager.Turrets.Allies.Where(t => t.Health > 10).OrderBy(t => t.Distance(Me)).FirstOrDefault(); /* * var nearestAllyTower = * EntityManager.Turrets.Allies.Where(t => t.Health > 10 && t.IsInRange(Me, 1500)).OrderBy(t => t.Distance(Me)).FirstOrDefault(); * * * * if (nearestAllyTower != null && nearestEnemyTower != null) * { * return nearestEnemyTower.Position.Extend(nearestAllyTower, nearestEnemyTower.Distance(nearestAllyTower) + 250).To3D(); * } */ if (MyADC.IsValidTarget(1000)) { return(MyADC.Position.Extend(nearestEnemyTower, 250f).To3DWorld()); } var nearestEnemy = EntityManager.Heroes.Enemies.Where(e => e.IsValidTarget(1500)).OrderBy(e => e.Distance(Me)).FirstOrDefault(); if (nearestEnemy != null) { var nearestBush = Bushes.OrderBy(b => b.Distance(Me)).ThenByDescending(b => b.Distance(nearestEnemy)).FirstOrDefault(); if (nearestBush != null) { return(nearestBush.Position); } } else { var nearestBush = Bushes.OrderBy(b => b.Distance(Me)).FirstOrDefault(); if (nearestBush != null) { return(nearestBush.Position); } } return(Vector3.Zero); }
public static Vector3 BestPosition() { if (MyADC.IsDead) { return(RecallManager.BestRecallPosition()); } if (Recalling) { Orbwalker.DisableMovement = true; Orbwalker.DisableAttacking = true; if (!Me.IsRecalling()) { Recalling = false; PreparingToRecall = false; Orbwalker.DisableMovement = false; Orbwalker.DisableAttacking = false; } return(Vector3.Zero); } if (RecallManager.ShouldRecall() || PreparingToRecall) { Chat.Print("Should Recall"); var bestRecallPos = RecallManager.BestRecallPosition(); if (!PreparingToRecall) { PreparingToRecall = true; return(bestRecallPos); } if (PreparingToRecall) { if (Me.Distance(bestRecallPos) < 120) { PreparingToRecall = false; Recalling = true; Player.CastSpell(SpellSlot.Recall); } return(bestRecallPos); } } if (WardManager.CanWard()) { return(WardManager.BestWardPostion()); } if (MyADC.IsInRange(Me, 1000)) { if (Target != null) { var posTarget = Target.Position.Extend(MyADC.Position, Target.Distance(MyADC) + GetRandomNumber(MinChampDist, MaxChampDist)); posTarget.X += GetRandomNumber(MinRandom, MaxRandom); posTarget.Y += GetRandomNumber(MinRandom, MaxRandom); return(posTarget.To3D((int)MyADC.Position.Y)); } var minions = EntityManager.MinionsAndMonsters.GetLaneMinions().Where(m => m != null && m.IsValidTarget(1500) && m.IsEnemy); var minionBestPos = EntityManager.MinionsAndMonsters.GetCircularFarmLocation(minions, 800, 1500); if (minionBestPos.HitNumber > 0) { var posMinion = minionBestPos.CastPosition.Extend(MyADC.Position, GetRandomNumber((int)((MinChampDist * 1.3f) + MyADC.Distance(minionBestPos.CastPosition)), (int)((MaxChampDist * 1.3f) + MyADC.Distance(minionBestPos.CastPosition)))); posMinion.X += GetRandomNumber(MinRandom, MaxRandom); posMinion.Y += GetRandomNumber(MinRandom, MaxRandom); return(posMinion.To3D((int)MyADC.Position.Y)); } var nearestTower = EntityManager.Turrets.Allies.Where(t => t.Health > 10).OrderBy(t => t.Distance(Me)).FirstOrDefault(t => t.IsInRange(Me, 3000)); if (nearestTower != null) { var posTower = MyADC.Position.Extend(nearestTower.Position, GetRandomNumber(MinChampDist, MaxChampDist)); posTower.X += GetRandomNumber(MinRandom, MaxRandom); posTower.Y += GetRandomNumber(MinRandom, MaxRandom); return(posTower.To3D((int)MyADC.Position.Y)); } var nearestEnemyTower = EntityManager.Turrets.Enemies.Where(t => t.Health > 10).OrderBy(t => t.Distance(Me)).FirstOrDefault(t => t.IsInRange(Me, 3000)); if (nearestEnemyTower != null) { var posEnemyTower = nearestEnemyTower.Position.Extend(MyADC.Position, GetRandomNumber((int)((MinChampDist * 1.6f) + MyADC.Distance(nearestEnemyTower)), (int)((MaxChampDist * 1.6f) + MyADC.Distance(nearestEnemyTower)))); posEnemyTower.X += GetRandomNumber(MinRandom, MaxRandom); posEnemyTower.Y += GetRandomNumber(MinRandom, MaxRandom); return(posEnemyTower.To3D((int)MyADC.Position.Y)); } } var pos = MyADC.Position.Extend(MyADC.Direction(), -GetRandomNumber(MinChampDist, MaxChampDist)); pos.X += GetRandomNumber(-200, 200); pos.Y += GetRandomNumber(-200, 200); return(pos.To3D((int)MyADC.Position.Y)); }