private static void SoulBoundSaver() { if (SoulBound == null) { SoulBound = HeroManager.Allies.Find( h => !h.IsMe && h.Buffs.Any(b => b.Caster.IsMe && b.Name == "kalistacoopstrikeally")); } else if (Program.Config.Item("SoulBoundSaver").GetValue <bool>() && R.IsReady()) { if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemiesInRange(500) > 0 || IncomingDamage > SoulBound.Health) { R.Cast(); } } var itemsToRemove = incomingDamage.Where(entry => entry.Key < Game.Time).ToArray(); foreach (var item in itemsToRemove) { incomingDamage.Remove(item.Key); } itemsToRemove = InstantDamage.Where(entry => entry.Key < Game.Time).ToArray(); foreach (var item in itemsToRemove) { InstantDamage.Remove(item.Key); } }
private static void OnTick(EventArgs args) { // SoulBound is not found yet! if (SoulBound == null) { SoulBound = EntityManager.Heroes.Allies.Find(h => !h.IsMe && h.Buffs.Any(b => b.Caster.IsMe && b.Name == "kalistacoopstrikeally")); } else if (Settings.SaveSouldBound && R.IsReady()) { // Ult casting if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemyChampionsInRange(500) > 0 || IncomingDamage > SoulBound.Health) { R.Cast(); } } // Check spell arrival foreach (var entry in IncDamage.Where(entry => entry.Key < Game.Time).ToArray()) { IncDamage.Remove(entry.Key); } // Instant damage removal foreach (var entry in InstDamage.Where(entry => entry.Key < Game.Time).ToArray()) { InstDamage.Remove(entry.Key); } }
private static void Game_OnGameUpdate(EventArgs args) { // SoulBound is not found yet! if (SoulBound == null) { // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally"))); } else if (R.IsEnabledAndReady("misc")) { // Ult casting if (SoulBound.HealthPercent < 5 && SoulBound.CountEnemiesInRange(500) > 0 || IncomingDamage > SoulBound.Health) { R.Cast(); } } // Check spell arrival var itemsToRemove = _incomingDamage.Where(entry => entry.Key < Game.Time).ToArray(); foreach (var item in itemsToRemove) { _incomingDamage.Remove(item.Key); } // Instant damage removal itemsToRemove = _instantDamage.Where(entry => entry.Key < Game.Time).ToArray(); foreach (var item in itemsToRemove) { _instantDamage.Remove(item.Key); } }
private void OnObjAiBaseProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { try { if (sender.IsMe) { if (args.SData.Name == "KalistaExpungeWrapper") { Orbwalking.ResetAutoAttackTimer(); } } if (!sender.IsEnemy || SoulBound.Unit == null || R.Level == 0 || !Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>()) { return; } if (args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId && (!(sender is Obj_AI_Hero) || args.SData.IsAutoAttack())) { SoulBound.Add( SoulBound.Unit.ServerPosition.Distance(sender.ServerPosition) / args.SData.MissileSpeed + Game.Time, (float)sender.GetAutoAttackDamage(SoulBound.Unit)); } else { var hero = sender as Obj_AI_Hero; if (hero != null) { var slot = hero.GetSpellSlot(args.SData.Name); if (slot != SpellSlot.Unknown) { var damage = 0f; if (args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId && slot == hero.GetSpellSlot("SummonerDot")) { damage = (float)hero.GetSummonerSpellDamage(SoulBound.Unit, Damage.SummonerSpell.Ignite); } else if ((slot == SpellSlot.Q || slot == SpellSlot.W || slot == SpellSlot.E || slot == SpellSlot.R) && ((args.Target != null && args.Target.NetworkId == SoulBound.Unit.NetworkId) || args.End.Distance(SoulBound.Unit.ServerPosition, true) < Math.Pow(args.SData.LineWidth, 2))) { damage = (float)hero.GetSpellDamage(SoulBound.Unit, slot); } if (damage > 0) { SoulBound.Add(Game.Time + 2, damage); } } } } } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
private static void OnUpdate(EventArgs args) { // SoulBound is not found yet! if (SoulBound == null) { // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally"))); } else if (Settings.SaveSouldBound && R.IsReady()) { // Ult casting if (SoulBound.HealthPercentage() < 5 && SoulBound.CountEnemiesInRange(500) > 0 || IncomingDamage > SoulBound.Health) { R.Cast(); } // Get enemies foreach (var unit in ObjectManager.Get <Obj_AI_Hero>().Where(h => h.IsEnemy && h.IsHPBarRendered)) { // Get buffs for (int i = 0; i < unit.Buffs.Count(); i++) { // Check if the Soulbound is in a good range var enemy = HeroManager.Enemies.Where(x => SoulBound.Distance(x.Position) > 800); // Check if the Soulbound is a Blitzcrank // Check if the enemy is hooked // Check if target was far enough for ult if (SoulBound.ChampionName == "Blitzcrank" && unit.Buffs[i].Name == "rocketgrab2" && unit.Buffs[i].IsActive && enemy.Count() > 0 && Config.Misc.UseKaliscrank) { R.Cast(); } } } } // Check spell arrival foreach (var entry in _incomingDamage) { if (entry.Key < Game.Time) { _incomingDamage.Remove(entry.Key); } } // Instant damage removal foreach (var entry in _instantDamage) { if (entry.Key < Game.Time) { _instantDamage.Remove(entry.Key); } } }
private static void OnUpdate(EventArgs args) { // SoulBound is not found yet! if (SoulBound == null) { // TODO: Get the buff display name, I'm not at home so I needed to use xQx' method, which I don't like :D SoulBound = HeroManager.Allies.Find(h => h.Buffs.Any(b => b.Caster.IsMe && b.Name.Contains("kalistacoopstrikeally"))); } else if (Settings.SaveSouldBound && R.IsReady()) { // Ult casting if (SoulBound.HealthPercentage() < 5 && SoulBound.CountEnemiesInRange(500) > 0 || IncomingDamage > SoulBound.Health) { R.Cast(); } } // Check spell arrival foreach (var entry in _incomingDamage) { if (entry.Key < Game.Time) { _incomingDamage.Remove(entry.Key); } } // Instant damage removal foreach (var entry in _instantDamage) { if (entry.Key < Game.Time) { _instantDamage.Remove(entry.Key); } } }
protected override void OnPreUpdate() { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit) { var eBig = Menu.Item(Menu.Name + ".lasthit.e-big").GetValue <bool>(); var eJungle = Menu.Item(Menu.Name + ".lasthit.e-jungle").GetValue <bool>(); var eSiege = Menu.Item(Menu.Name + ".lasthit.e-siege").GetValue <bool>(); var eTurret = Menu.Item(Menu.Name + ".lasthit.e-turret").GetValue <bool>(); var eReset = Menu.Item(Menu.Name + ".miscellaneous.e-reset").GetValue <bool>(); IEnumerable <Obj_AI_Minion> minions = new HashSet <Obj_AI_Minion>(); if (eSiege || eTurret || eReset) { minions = GameObjects.EnemyMinions.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, true)); } if (E.IsReady()) { if (ManaManager.Check("lasthit")) { if (eSiege) { if ( minions.Any( m => (m.CharData.BaseSkinName.Contains("MinionSiege") || m.CharData.BaseSkinName.Contains("Super")))) { E.Cast(); return; } } if (eTurret) { if (minions.Any(m => Utils.UnderAllyTurret(m.Position))) { E.Cast(); return; } } } if (eBig || eJungle) { var enemySmites = GameObjects.EnemyHeroes.Where( e => !e.IsDead && e.Distance(Player) < SummonerManager.Smite.Range * 1.5f && SummonerManager.IsSmiteReady(e)); var allySmites = (from ally in GameObjects.AllyHeroes.Where( e => !e.IsDead && e.Distance(Player) < SummonerManager.Smite.Range) let spell = SummonerManager.GetSmiteSpell(ally) where spell != null && (spell.IsReady() || spell.Cooldown - spell.CooldownExpires - Game.Time <= 3) select ally).ToList(); if (eJungle && Player.Level > 3 || eBig && (enemySmites.Any() || !allySmites.Any() || Player.CountEnemiesInRange(1000) > 1)) { var creeps = GameObjects.Jungle.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, false)) .ToList(); if (eJungle && creeps.Any() || eBig && creeps.Any( m => (m.CharData.BaseSkinName.StartsWith("SRU_Dragon") || m.CharData.BaseSkinName.StartsWith("SRU_Baron")))) { E.Cast(); return; } } } } if (eReset && E.IsReady() && ManaManager.Check("misc") && GameObjects.EnemyHeroes.Any(e => Rend.HasBuff(e) && e.IsValidTarget(E.Range))) { if (minions.Any()) { E.Cast(); return; } } } if (Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>() && SoulBound.Unit != null && R.IsReady() && !SoulBound.Unit.InFountain()) { SoulBound.Clean(); var enemies = SoulBound.Unit.CountEnemiesInRange(500); if ((SoulBound.Unit.HealthPercent <= 10 && SoulBound.Unit.CountEnemiesInRange(500) > 0) || (SoulBound.Unit.HealthPercent <= 5 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies == 0) || (SoulBound.Unit.HealthPercent <= 50 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies > 0)) { R.Cast(); } } if (Menu.Item(Menu.Name + ".miscellaneous.w-baron").GetValue <KeyBind>().Active&& W.IsReady() && Player.Distance(SummonersRift.River.Baron) <= W.Range) { W.Cast(SummonersRift.River.Baron); } if (Menu.Item(Menu.Name + ".miscellaneous.w-dragon").GetValue <KeyBind>().Active&& W.IsReady() && Player.Distance(SummonersRift.River.Dragon) <= W.Range) { W.Cast(SummonersRift.River.Dragon); } if (SoulBound.Unit == null) { SoulBound.Unit = GameObjects.AllyHeroes.FirstOrDefault( a => a.Buffs.Any( b => b.Caster.IsMe && b.Name.Equals("kalistacoopstrikeally", StringComparison.OrdinalIgnoreCase))); } if (SoulBound.Unit != null && SoulBound.Unit.Distance(Player) < R.Range && R.IsReady()) { var blitz = Menu.Item(Menu.Name + ".ultimate.blitzcrank.r").GetValue <bool>(); var tahm = Menu.Item(Menu.Name + ".ultimate.tahm-kench.r").GetValue <bool>(); foreach (var enemy in GameObjects.EnemyHeroes.Where(e => (blitz || tahm) && !e.IsDead && e.Distance(Player) < 3000)) { if (blitz) { var blitzBuff = enemy.Buffs.FirstOrDefault( b => b.IsActive && b.Caster.NetworkId.Equals(SoulBound.Unit.NetworkId) && b.Name.Equals("rocketgrab2", StringComparison.OrdinalIgnoreCase)); if (blitzBuff != null) { if (!HeroListManager.Check("blitzcrank", enemy)) { if (!SoulBound.Unit.UnderTurret(false) && SoulBound.Unit.Distance(enemy) > 750f && SoulBound.Unit.Distance(Player) > R.Range / 3f) { R.Cast(); } } return; } } if (tahm) { var tahmBuff = enemy.Buffs.FirstOrDefault( b => b.IsActive && b.Caster.NetworkId.Equals(SoulBound.Unit.NetworkId) && b.Name.Equals("tahmkenchwdevoured", StringComparison.OrdinalIgnoreCase)); if (tahmBuff != null) { if (!HeroListManager.Check("tahm-kench", enemy)) { if (!SoulBound.Unit.UnderTurret(false) && (SoulBound.Unit.Distance(enemy) > Player.AttackRange || GameObjects.AllyHeroes.Where( a => a.NetworkId != SoulBound.Unit.NetworkId && a.NetworkId != Player.NetworkId) .Any(t => t.Distance(Player) > 600) || GameObjects.AllyTurrets.Any(t => t.Distance(Player) < 600))) { R.Cast(); } } return; } } } } }
private void OnCorePreUpdate(EventArgs args) { try { if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Combo && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) { var eBig = Menu.Item(Menu.Name + ".lasthit.e-big").GetValue <bool>(); var eTurret = Menu.Item(Menu.Name + ".lasthit.e-turret").GetValue <bool>(); var eReset = Menu.Item(Menu.Name + ".miscellaneous.e-reset").GetValue <bool>(); IEnumerable <Obj_AI_Minion> minions = new HashSet <Obj_AI_Minion>(); if (eBig || eTurret || eReset) { minions = GameObjects.EnemyMinions.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, true)); } if (E.IsReady()) { if (eBig) { var creeps = GameObjects.Jungle.Where(e => e.IsValidTarget(E.Range) && Rend.IsKillable(e, false)) .Concat(minions) .ToList(); if ( creeps.Any( m => (m.CharData.BaseSkinName.Contains("MinionSiege") || m.CharData.BaseSkinName.Contains("Super") || m.CharData.BaseSkinName.StartsWith("SRU_Dragon") || m.CharData.BaseSkinName.StartsWith("SRU_Baron")))) { E.Cast(); return; } } if (eTurret && ManaManager.Check("lasthit")) { var minion = minions.FirstOrDefault( m => Utils.UnderAllyTurret(m.Position) && Rend.IsKillable(m, false)); if (minion != null) { E.Cast(); return; } } } if (eReset && E.IsReady() && ManaManager.Check("misc") && GameObjects.EnemyHeroes.Any(e => Rend.HasBuff(e) && e.IsValidTarget(E.Range))) { if (minions.Any()) { E.Cast(); return; } } } if (Menu.Item(Menu.Name + ".ultimate.save").GetValue <bool>() && SoulBound.Unit != null && R.IsReady() && !SoulBound.Unit.InFountain()) { SoulBound.Clean(); var enemies = SoulBound.Unit.CountEnemiesInRange(500); if ((SoulBound.Unit.HealthPercent <= 10 && SoulBound.Unit.CountEnemiesInRange(500) > 0) || (SoulBound.Unit.HealthPercent <= 5 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies == 0) || (SoulBound.Unit.HealthPercent <= 50 && SoulBound.TotalDamage > SoulBound.Unit.Health && enemies > 0)) { R.Cast(); } } if (Menu.Item(Menu.Name + ".miscellaneous.w-baron").GetValue <KeyBind>().Active&& W.IsReady() && Player.Distance(SummonersRift.River.Baron) <= W.Range) { W.Cast(SummonersRift.River.Baron); } if (Menu.Item(Menu.Name + ".miscellaneous.w-dragon").GetValue <KeyBind>().Active&& W.IsReady() && Player.Distance(SummonersRift.River.Dragon) <= W.Range) { W.Cast(SummonersRift.River.Dragon); } if (SoulBound.Unit == null) { SoulBound.Unit = GameObjects.AllyHeroes.FirstOrDefault( a => a.Buffs.Any( b => b.Caster.IsMe && b.Name.Equals("kalistacoopstrikeally", StringComparison.OrdinalIgnoreCase))); } } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
/// <summary> /// Fired when the game is updated. /// </summary> public void Automatic() { if (SoulBound == null) { var possibleSoulBound = ObjectCache.AllyHeroes.FirstOrDefault(a => a.HasBuff("kalistacoopstrikeally")); if (possibleSoulBound != null) { SoulBound = possibleSoulBound; } } if (UtilityClass.Player.IsRecalling()) { return; } /// <summary> /// The Automatic E Logics. /// </summary> if (SpellClass.E.Ready && MenuClass.E["beforedeath"].Enabled && LocalPlayer.Instance.HPPercent() <= MenuClass.E["beforedeath"].Value) { SpellClass.E.Cast(); } /// <summary> /// The R Logics. /// </summary> if (SpellClass.R.Ready && SoulBound != null) { /// <summary> /// The Lifesaver R Logic. /// </summary> if (SoulBound.EnemyHeroesCount(800f) > 0 && SoulBound.HPPercent() <= MenuClass.R["lifesaver"].Value && MenuClass.R["lifesaver"].Enabled) { SpellClass.R.Cast(); } /// <summary> /// The Offensive R Logics. /// </summary> if (RLogics.ContainsKey(SoulBound.CharName)) { var option = RLogics.FirstOrDefault(k => k.Key == SoulBound.CharName).Value; var buffName = option.Item1; var menuOption = option.Item2; var target = ObjectCache.EnemyHeroes.FirstOrDefault(t => t.HasBuff(buffName)); if (target != null && MenuClass.R[menuOption].Enabled) { var buff = target.GetBuff(buffName); if (buff.Caster == SoulBound && target.DistanceToPlayer() > UtilityClass.Player.GetAutoAttackRange(target)) { SpellClass.R.Cast(); } } } } /// <summary> /// The Spot W Logic. /// </summary> if (SpellClass.W.Ready && !UtilityClass.Player.Position.IsUnderEnemyTurret() && Orbwalker.Mode == OrbwalkingMode.None && UtilityClass.Player.EnemyHeroesCount(1500f) == 0 && UtilityClass.Player.MPPercent() > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.W["logical"]) && MenuClass.W["logical"].Enabled) { foreach (var loc in Locations.Where(l => UtilityClass.Player.Distance(l) <= SpellClass.W.Range && !ObjectCache.AllMinions.Any(m => m.Distance(l) <= 1000f && m.ModelName.Equals("KalistaSpawn")))) { SpellClass.W.Cast(loc); } } }
/// <summary> /// Fired when the game is updated. /// </summary> public void Automatic() { var passiveObject = ObjectManager.Get <GameObject>().FirstOrDefault(o => o.IsValid && o.Name == "Kalista_Base_P_LinkIcon.troy"); if (passiveObject != null) { SoulBound = GameObjects.AllyHeroes .Where(a => !a.IsMe) .MinBy(o => o.Distance(passiveObject)); } if (UtilityClass.Player.IsRecalling()) { return; } /// <summary> /// The R Logics. /// </summary> if (SpellClass.R.Ready && SoulBound != null) { /// <summary> /// The Lifesaver R Logic. /// </summary> if (SoulBound.CountEnemyHeroesInRange(800f) > 0 && SoulBound.HealthPercent() <= MenuClass.Spells["r"]["lifesaver"].As <MenuSliderBool>().Value&& MenuClass.Spells["r"]["lifesaver"].As <MenuSliderBool>().Enabled) { SpellClass.R.Cast(); } var option = RLogics.FirstOrDefault(k => k.Key == SoulBound.ChampionName).Value; if (option != null) { var buffName = option.Item1; var menuOption = option.Item2; /// <summary> /// The Offensive R Logics. /// </summary> if (RLogics.ContainsKey(SoulBound.ChampionName) && GameObjects.EnemyHeroes.Any(t => t.HasBuff(buffName) && MenuClass.Spells["r"][menuOption].As <MenuBool>().Enabled&& t.Distance(UtilityClass.Player.ServerPosition) > UtilityClass.Player.GetFullAttackRange(t))) { SpellClass.R.Cast(); } } } /// <summary> /// The Spot W Logic. /// </summary> if (SpellClass.W.Ready && !UtilityClass.Player.IsUnderEnemyTurret() && ImplementationClass.IOrbwalker.Mode == OrbwalkingMode.None && UtilityClass.Player.CountEnemyHeroesInRange(1500f) == 0 && UtilityClass.Player.ManaPercent() > ManaManager.GetNeededMana(SpellClass.W.Slot, MenuClass.Spells["w"]["logical"]) && MenuClass.Spells["w"]["logical"].As <MenuSliderBool>().Enabled) { foreach (var loc in Locations.Where(l => UtilityClass.Player.Distance(l) <= SpellClass.W.Range && !ObjectManager.Get <Obj_AI_Minion>().Any(m => m.Distance(l) <= 1000f && m.UnitSkinName.Equals("KalistaSpawn")))) { SpellClass.W.Cast(loc); } } }