private void KillAnyone() { foreach (var enemy in HeroManager.Enemies) { if (!enemy.IsValidTarget(Range) || KalistaTargetSelector.IsInvulnerable(enemy, KalistaTargetSelector.DamageType.Physical, false)) { continue; } var damage = GetDamage(enemy); if (_flyingAttacks.ContainsKey(enemy) && _flyingAttacks[enemy].IsValid) { var flyingAuto = _flyingAttacks[enemy]; // if(flyingAuto) if (flyingAuto.Position.Distance(enemy.Position, true) < 300 * 300) { damage += KalistaWalker.GetDamageForOneAuto(enemy, Level, flyingAuto.SData.MissileSpeed < 2600); } } if (damage > enemy.Health && !KalistaTargetSelector.IsInvulnerable(enemy, KalistaTargetSelector.DamageType.Physical, false)) { Cast(); } } //if (HeroManager.Enemies.Any(enemy => enemy.IsValidTarget(Range) && IsKillable(enemy) && !enemy.HasSpellShield() && !TargetSelector.IsInvulnerable(enemy, TargetSelector.DamageType.Physical))) // Cast(); }
//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); }
static void Main() { CustomEvents.Game.OnGameLoad += (eArgs) => { DevAssistant.Init(); //todo: remove if (ObjectManager.Player.ChampionName != "Kalista") { return; } var alwaysStealBaronAndDrake = false; var mainMenu = new Menu("The Kalista", "TheKalista", true); mainMenu.AddToMainMenu(); var orbwalkerMenu = mainMenu.CreateSubmenu("Orbwalker"); var targetselectorMenu = mainMenu.CreateSubmenu("Target Selector"); var comboMenu = mainMenu.CreateSubmenu("Combo"); var ultMenu = comboMenu.CreateSubmenu("R Settings"); var harassMenu = mainMenu.CreateSubmenu("Harass"); var laneclearMenu = mainMenu.CreateSubmenu("Laneclear"); var lasthitMenu = mainMenu.CreateSubmenu("Lasthit / Steal"); var itemsMenu = mainMenu.CreateSubmenu("Items"); var summonersMenu = mainMenu.CreateSubmenu("Summoners"); var miscMenu = mainMenu.CreateSubmenu("Misc"); var autoLevelSpells = mainMenu.CreateSubmenu("Auto Level Spells"); var drawingsMenu = mainMenu.CreateSubmenu("Drawings"); var q = new KalistaQ(SpellSlot.Q, 1200, TargetSelector.DamageType.Physical); var w = new KalistaW(SpellSlot.W); var e = new KalistaE(SpellSlot.E, 1000, TargetSelector.DamageType.Physical); var r = new KalistaR(SpellSlot.R, 1500, TargetSelector.DamageType.Physical); var orbwalker = new KalistaWalker(orbwalkerMenu); KalistaTargetSelector.AddToMenu(targetselectorMenu, e); orbwalkerMenu.Item("ExtraWindup").DontSave(); orbwalkerMenu.Item("ExtraWindup").SetValue(new Slider(0, 0, 1)); orbwalkerMenu.AddMItem("(You don't need extra windup on Kalista)").FontColor = new SharpDX.Color(218, 165, 32); var provider = new KalistaCombo(2100, orbwalker, q, w, e, r); provider.Initialize(); provider.CreateBasicMenu(null, null, null, null, null, null, null, drawingsMenu); provider.CreateComboMenu(comboMenu, SpellSlot.W); provider.CreateLaneclearMenu(harassMenu, true, SpellSlot.W); provider.CreateLaneclearMenu(laneclearMenu, true, SpellSlot.W); //provider.CreateLasthitMenu(lasthitMenu, true, SpellSlot.Q, SpellSlot.E); provider.CreateItemsMenu(itemsMenu, new BilgewaterCutlass(), new Botrk(), new YoumusBlade(), new Qss(), new MercuralScimitar()); provider.CreateSummonersMenu(summonersMenu, new Cleanse(), new Heal()); provider.CreateAutoLevelMenu(autoLevelSpells, Commons.ComboSystem.ComboProvider.SpellOrder.RWEQ, Commons.ComboSystem.ComboProvider.SpellOrder.REQW); comboMenu.AddMItem("Focus", new StringList(new[] { "Most Damage", "More Damage", "Damage + Mobility", "More Mobility", "Most Mobility" }), val => e.MobilityType = val.SelectedIndex); if (HeroManager.Allies.Any(ally => ally.ChampionName == "Blitzcrank")) { ultMenu.AddMItem("Balista", true, val => r.Balista = val); ultMenu.AddMItem("Balista min. range", new Slider(700, 100, 1450), val => r.BalistaDistance = val.Value); //vales from iKalista } ultMenu.AddMItem("Ally Health %", new Slider(15), val => r.AllyHealth = val.Value); ultMenu.AddMItem("My Health %", new Slider(35), val => r.MyHealth = val.Value); ultMenu.AddMItem("Smart peel", true, val => r.SmartPeel = val); //ultMenu.AddMItem("Possible hit count", new Slider(4, 0, 6), val => r.HitCount = val.Value); ultMenu.AddMItem("(Will ult if any condition is met)").FontColor = new SharpDX.Color(218, 165, 32); // Color.Goldenrod 218 165 32 lasthitMenu.AddMItem("E minions it would miss", true, val => e.FarmAssist = val); lasthitMenu.AddMItem("Min Mana %", new Slider(50), val => e.FarmAssistMana = val.Value); lasthitMenu.AddMItem("Always steal Baron and Drake", true, val => alwaysStealBaronAndDrake = val); lasthitMenu.AddMItem("Jungle steal in Mixed/Lasthit/Clear", true, val => e.StealJungle = val); laneclearMenu.AddMItem("Min. E kills", new Slider(4, 1, 12), val => e.MinLaneclear = val.Value); laneclearMenu.AddMItem("Min. Q kills", new Slider(3, 1, 12), val => q.MinLaneclear = val.Value); miscMenu.AddMItem("Stuck W Baron", new KeyBind("T"[0], KeyBindType.Press), val => { if (val.Active) { if (w.BaronPosition.Distance(ObjectManager.Player.Position) < 5000) { w.Cast(w.BaronPosition); } else { Notifications.AddNotification("Not in range!", 3); } } }); miscMenu.AddMItem("Stuck W Dragon", new KeyBind("Y"[0], KeyBindType.Press), val => { if (val.Active) { if (w.DragonPosition.Distance(ObjectManager.Player.Position) < 5000) { w.Cast(w.DragonPosition); } else { Notifications.AddNotification("Not in range!", 3); } } }); miscMenu.AddMItem("E damage reduction", new Slider(20), val => e.Reduction = val.Value); var autobuyblue = miscMenu.AddMItem("Autobuy: Blue Trinket", true); var autobuyblueLevel = miscMenu.AddMItem("Autobuy: Blue Trinket: Level", new Slider(10, 1, 18)); var autoUseBlueTrinket = true; miscMenu.AddMItem("Use blue trinket", true, val => autoUseBlueTrinket = val); AttackableUnit.OnLeaveTeamVisiblity += (sender, args) => { if (autoUseBlueTrinket && sender.Type == GameObjectType.obj_AI_Hero && sender.IsEnemy && !sender.IsDead && !((Obj_AI_Hero)sender).UnderTurret() && sender.Position.Distance(ObjectManager.Player.Position, true) < 500 * 500 && provider.Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) { var orb = ObjectManager.Player.Spellbook.Spells.FirstOrDefault(spell => spell.Name.ToLower().Contains("trinketorb")); if (orb != null) { ObjectManager.Player.Spellbook.CastSpell(orb.Slot, sender.Position); } var trinket = ObjectManager.Player.Spellbook.Spells.FirstOrDefault(spell => spell.Name.ToLower().Contains("trinkettotem")); if (trinket != null) { ObjectManager.Player.Spellbook.CastSpell(trinket.Slot, sender.Position); } } }; //itemmercurial & Mercurial_Scimitar / / ItemMercurial //QuicksilverSash & Quicksilver_Sash / / QuicksilverSash //drawingsMenu.AddMItem("E progress", new StringList(new[] {"AAs to kill", "% to kill"}), list => e.DrawCount = list.SelectedIndex == 0); Drawing.OnDraw += _ => { //Drawing.DrawText(200, 200, Color.Red, e.Instance.GetState().ToString()); //Profiler.DrawSections(700, 200); }; Game.OnUpdate += _ => { Profiler.Clear(); //Todo: remove if (alwaysStealBaronAndDrake || provider.Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) { if (Baron.IsValidTarget(e.Range) && Baron.Health < Baron.MaxHealth) { var damage = e.GetDamage(Baron); if (ObjectManager.Player.HasBuff("barontarget")) { damage *= 0.5f; } if (damage > Baron.Health) { e.Cast(); } } if (Dragon.IsValidTarget(e.Range) && Dragon.Health < Dragon.MaxHealth) { var damage = e.GetDamage(Dragon); if (ObjectManager.Player.HasBuff("s5test_dragonslayerbuff")) { damage *= (1 - (.07f * ObjectManager.Player.GetBuffCount("s5test_dragonslayerbuff"))); } if (damage > Dragon.Health) { e.Cast(); } } } provider.Update(); if (!TickLimiter.Limit(1000)) { return; } if (Soulbound == null) { Soulbound = HeroManager.Allies.FirstOrDefault(ally => ally.HasBuff("kalistacoopstrikeally")); } if (Baron == null || Dragon != null) { Baron = ObjectManager.Get <Obj_AI_Minion>().FirstOrDefault(min => min.Name.StartsWith("SRU_Baron")); Dragon = ObjectManager.Get <Obj_AI_Minion>().FirstOrDefault(min => min.Name.StartsWith("SRU_Dragon")); } if (autobuyblue.IsActive() && ObjectManager.Player.Level >= autobuyblueLevel.GetValue <Slider>().Value&& ObjectManager.Player.InFountain() && ObjectManager.Player.InventoryItems.Any(item => item.Id == ItemId.Warding_Totem_Trinket)) { ObjectManager.Player.BuyItem(ItemId.Scrying_Orb_Trinket); } }; //var pos = ObjectManager.Player.Position; //Drawing.OnDraw += _ => //{ // Drawing.DrawText(600, 600, Color.Red, ObjectManager.Player.Position.Distance(pos).ToString()); //}; }; }