//private static Vector2 FindIntersectionSpot(Obj_AI_Hero enemy, Obj_AI_Hero enemy2) //{ // if (enemy.NetworkId == enemy2.NetworkId) return Vector2.Zero; // // Find the distance between the centers. // float dx = enemy.Position.X - enemy2.Position.X; // float dy = enemy.Position.Y - enemy2.Position.Y; // double dist = Math.Sqrt(dx * dx + dy * dy); // // See how many solutions there are. // if (dist > ObjectManager.Player.AttackRange * 2) // { // return Vector2.Zero; // } // // Find a and h. // double a = (dist * dist) / (2 * dist); // double h = Math.Sqrt(ObjectManager.Player.AttackRange * ObjectManager.Player.AttackRange - a * a); // // Find P2. // double cx2 = enemy.Position.X + a * (enemy2.Position.X - enemy.Position.X) / dist; // double cy2 = enemy.Position.Y + a * (enemy2.Position.Y - enemy.Position.Y) / dist; // // Get the points P3. // var intersection1 = new SharpDX.Vector2( // (float)(cx2 + h * (enemy2.Position.Y - enemy.Position.Y) / dist), // (float)(cy2 - h * (enemy2.Position.X - enemy.Position.X) / dist)); // var intersection2 = new SharpDX.Vector2( // (float)(cx2 - h * (enemy2.Position.Y - enemy.Position.Y) / dist), // (float)(cy2 + h * (enemy2.Position.X - enemy.Position.X) / dist)); // var mindst = float.MaxValue; // var minspot = ObjectManager.Player.Position.To2D(); // if (HeroManager.Enemies.All(nmy => nmy == enemy || nmy == enemy2 || nmy.Position.To2D().Distance(intersection1, true) > ObjectManager.Player.AttackRange * ObjectManager.Player.AttackRange)) // { // var dst = intersection1.Distance(ObjectManager.Player, true); // if (dst < mindst) // { // mindst = dst; // minspot = intersection1; // } // } // if (HeroManager.Enemies.All(nmy => nmy == enemy || nmy == enemy2 || nmy.Position.To2D().Distance(intersection2, true) > ObjectManager.Player.AttackRange * ObjectManager.Player.AttackRange)) // { // var dst = intersection1.Distance(ObjectManager.Player, true); // if (dst < mindst) // { // return minspot; // } // } // return minspot; //} //private static List<Vector2> FindKiteSpots(IEnumerable<Obj_AI_Hero> src) //{ // var minDst = float.MaxValue; // var spots = new List<Vector2>(); // foreach (var enemy in src) // { // foreach (var enemy2 in HeroManager.Enemies) // { // spots.Add(FindIntersectionSpot(enemy, enemy2)); // } // } // return spots; //} //private static Vector2 FindBestKiteFleeSpot() //{ // var minSpot = Vector2.Zero; // var minDst = float.MaxValue; // foreach (var spot in FindKiteSpots(HeroManager.Enemies)) // { // var currDst = spot.Distance(ObjectManager.Player, true); // if (currDst < minDst) // { // minDst = currDst; // minSpot = spot; // } // } // return minSpot; //} //public void AutoKite() //{ // throw new NotImplementedException(); // Vector2 spot = ObjectManager.Player.Position.To2D(); // if (HeroManager.Enemies.Any(enemy => enemy.Position.Distance(ObjectManager.Player.Position, true) < ObjectManager.Player.AttackRange / 2 * ObjectManager.Player.AttackRange / 2)) // { // spot = FindBestKiteFleeSpot(); // } // else if (!Orbwalker.InAutoAttackRange(Target)) // { // spot = ((Target.Position - ObjectManager.Player.Position).Normalized() * (ObjectManager.Player.AttackRange - 50) + Target.Position).To2D(); // } // else // { // var sideSpots = FindKiteSpots(new Obj_AI_Hero[] { Target }); // } // Orbwalker.ActiveMode = Orbwalking.OrbwalkingMode.Combo; // Orbwalker.SetOrbwalkingPoint(spot.To3D2()); //} protected override LeagueSharp.Obj_AI_Hero SelectTarget() { var target = Orbwalker.GetTarget(); if (target != null && target.Type == LeagueSharp.GameObjectType.obj_AI_Hero) { return((Obj_AI_Hero)target); } return(KalistaTargetSelector.GetTarget(TargetRange, (KalistaTargetSelector.DamageType)DamageType)); }
public override LeagueSharp.AttackableUnit GetTarget() { if ((ActiveMode == Orbwalking.OrbwalkingMode.Mixed || ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) && HeroManager.Enemies.Any(enemy => enemy.IsValidTarget(1000) && enemy.HasBuff("Kalistaexpungemarker"))) { if (ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { return(FindAutoPlusRendMinion(MinionManager.GetMinions(ObjectManager.Player.AttackRange, MinionTypes.All, MinionTeam.NotAlly, MinionOrderTypes.None)) ?? base.GetTarget()); } var entity = base.GetTarget(); if (entity == null) { return(FindAutoPlusRendMinion(MinionManager.GetMinions(ObjectManager.Player.AttackRange, MinionTypes.All, MinionTeam.NotAlly, MinionOrderTypes.None))); } return(entity); } if (ActiveMode != Orbwalking.OrbwalkingMode.Combo) { return(base.GetTarget()); } var target = KalistaTargetSelector.GetTarget(-1, KalistaTargetSelector.DamageType.Physical); //if (!_e.IsReady()) return target; if (target == null && HeroManager.Enemies.Any(enemy => enemy.IsValidTarget(2000))) { var minions = MinionManager.GetMinions(ObjectManager.Player.AttackRange, MinionTypes.All, MinionTeam.NotAlly, MinionOrderTypes.None); var optimalMinion = FindAutoPlusRendMinion(minions); if (optimalMinion == null && ObjectManager.Player.AttackDelay < 1.10f) { return(minions.FirstOrDefault()); } return(optimalMinion); } return(target); }