public static bool DeffensiveAutoUsage(Hero allyHero, Hero me, Hero[] enemyHeroes, float ping) { var hero = allyHero; var heroName = NameManager.Name(hero); // var heroDistance = position.Distance2D(hero); var heroMissingHp = hero.MaximumHealth - hero.Health; var heroMissingMana = hero.MaximumMana - hero.Mana; var heroManaPercentage = (hero.Mana / hero.MaximumMana) * 100; var heroHpPercentage = ((float)hero.Health / hero.MaximumHealth) * 100; foreach (var data in MyAbilities.DeffensiveAbilities.Where( x => (x.Value.IsValid && (x.Value.CanBeCasted() || (x.Value.CanBeCasted(SoulRing.ManaGained) && SoulRing.Check(x.Value))) && ((x.Value is Item && me.CanUseItems()) || (!(x.Value is Item) && me.CanCast())) && (Utils.SleepCheck(x.Value.Handle.ToString()) || (!x.Value.IsInAbilityPhase && x.Value.FindCastPoint() > 0))))) { var ability = data.Value; var name = NameManager.Name(ability); if (name == "item_soul_ring") { continue; } if (hero.IsMagicImmune() && ability.ImmunityType != (ImmunityType)1) { continue; } var category = data.Key.Substring(name.Length); var handleString = ability.Handle.ToString(); if (!CastingChecks.All(name, hero)) { continue; } var delay = ability.GetCastDelay(me, hero, abilityName: name) * 1000; var canHit = ability.CanHit(hero, MyHeroInfo.Position, name); if (category == "heal" && !hero.HasModifier("modifier_ice_blast") && MainMenu.Menu.Item("healsToggler").GetValue<AbilityToggler>().IsEnabled(name) && ((!(name == "item_soul_ring" || name == "item_magic_wand" || name == "item_magic_stick") && Heals.HealsMenuDictionary[name].Item(name + "useonallies") .GetValue<HeroToggler>() .IsEnabled(heroName)) || hero.Equals(AbilityMain.Me)) && canHit && (name == "item_arcane_boots" ? (Heals.HealsMenuDictionary[name].Item(name + "missingmanamin").GetValue<Slider>().Value < heroMissingMana && Heals.HealsMenuDictionary[name].Item(name + "manapercentbelow") .GetValue<Slider>() .Value > heroManaPercentage && (!AllyHeroes.Heroes.Any( x => !x.Equals(hero) && Heals.HealsMenuDictionary[name].Item(name + "useonallies") .GetValue<HeroToggler>() .IsEnabled(x.Name) && x.Distance2D(AbilityMain.Me) < Heals.HealsMenuDictionary[name].Item(name + "waitrange").GetValue<Slider>().Value && !ability.CanHit(x, MyHeroInfo.Position)))) : (Heals.HealsMenuDictionary[name].Item(name + "missinghpmin").GetValue<Slider>().Value < heroMissingHp && Heals.HealsMenuDictionary[name].Item(name + "hppercentbelow").GetValue<Slider>().Value > heroHpPercentage)) && (name == "item_urn_of_shadows" ? (!enemyHeroes.Any(x => x.Distance2D(hero) < Math.Max(x.GetAttackRange(), 500)) && !hero.HasModifiers( new[] { "modifier_doom_bringer_doom", "modifier_axe_battle_hunger", "modifier_queenofpain_shadow_strike", "modifier_phoenix_fire_spirit_burn", "modifier_venomancer_poison_nova", "modifier_venomancer_venomous_gale" }, false)) : (name == "item_arcane_boots" || (enemyHeroes.Count( x => (!Heals.HealsMenuDictionary[name].Item(name + "usenearbool").GetValue<bool>() || Heals.HealsMenuDictionary[name].Item(name + "usenear") .GetValue<HeroToggler>() .IsEnabled(NameManager.Name(x))) && (x.Distance2D(hero) < Math.Max(x.GetAttackRange(), 700))) - 1 >= Heals.HealsMenuDictionary[name].Item(name + "minenemiesaround") .GetValue<StringList>() .SelectedIndex))) && (name != "omniknight_purification" || hero.Health < hero.MaximumHealth * 0.22 || enemyHeroes.Any( x => x.Predict(Game.Ping).Distance2D(hero.Predict(Game.Ping)) <= ability.GetRadius(name))) && (!(name == "item_mekansm" || name == "item_guardian_greaves" || name == "chen_hand_of_god") || ((!AllyHeroes.Heroes.Any( x => !x.Equals(hero) && Heals.HealsMenuDictionary[name].Item(name + "useonallies") .GetValue<HeroToggler>() .IsEnabled(x.Name) && x.Distance2D(AbilityMain.Me) < Heals.HealsMenuDictionary[name].Item(name + "waitrange").GetValue<Slider>().Value && !ability.CanHit(x, MyHeroInfo.Position))) && Heals.HealsMenuDictionary[name].Item(name + "minalliesheal") .GetValue<StringList>() .SelectedIndex <= AllyHeroes.Heroes.Count( x => !x.Equals(me) && ability.CanHit(x, MyHeroInfo.Position, name) && (x.MaximumHealth - x.Health) > Heals.HealsMenuDictionary[name].Item(name + "missinghpmin").GetValue<Slider>().Value) - 1)) && Heal.Cast(ability, hero, name)) { if (name == "item_urn_of_shadows") { Console.WriteLine( hero.HasModifiers( new[] { "modifier_doom_bringer_doom", "modifier_axe_battle_hunger", "modifier_queenofpain_shadow_strike", "modifier_phoenix_fire_spirit_burn", "modifier_venomancer_poison_nova", "modifier_venomancer_venomous_gale" }, false)); } Utils.Sleep(ability.GetCastDelay(me, hero, abilityName: name) * 1000 + ping + 100, handleString); if (name == "item_tango" || name == "item_tango_single") { Utils.Sleep(16000, handleString); } Utils.Sleep(delay, "GlobalCasting"); Utils.Sleep(delay, "casting"); Utils.Sleep(delay, "cancelorder"); return true; } if (category == "shield" && MainMenu.Menu.Item("shieldsToggler").GetValue<AbilityToggler>().IsEnabled(name) && canHit && (!(!ability.IsAbilityBehavior(AbilityBehavior.NoTarget, name) || (name == "item_pipe" || name == "item_buckler" || name == "omniknight_guardian_angel" || name == "item_crimson_guard")) || Shields.ShieldsMenuDictionary[name].Item(name + "useonallies") .GetValue<HeroToggler>() .IsEnabled(heroName)) && (Shields.ShieldsMenuDictionary[name].Item(name + "missinghpmin").GetValue<Slider>().Value < heroMissingHp && Shields.ShieldsMenuDictionary[name].Item(name + "hppercentbelow").GetValue<Slider>().Value > heroHpPercentage || Shields.ShieldsMenuDictionary[name].Item(name + "ondisabletoggler") .GetValue<HeroToggler>() .IsEnabled(heroName) && CastingChecks.DisabledAlly(hero)) && (enemyHeroes.Count( x => (!Shields.ShieldsMenuDictionary[name].Item(name + "usenearbool").GetValue<bool>() || Shields.ShieldsMenuDictionary[name].Item(name + "usenear") .GetValue<HeroToggler>() .IsEnabled(NameManager.Name(x))) && (x.Distance2D(hero) < Math.Max(x.GetAttackRange(), 700))) - 1) >= Shields.ShieldsMenuDictionary[name].Item(name + "minenemiesaround") .GetValue<StringList>() .SelectedIndex && (!(name == "item_pipe" || name == "item_buckler" || name == "omniknight_guardian_angel" || name == "item_crimson_guard") || (Shields.ShieldsMenuDictionary[name].Item(name + "minalliesaffect") .GetValue<StringList>() .SelectedIndex <= (AllyHeroes.Heroes.Count( x => !x.Equals(me) && ability.CanHit(x, MyHeroInfo.Position, name)) - 1))) && Shield.Cast(ability, hero, name)) { Utils.Sleep(ability.GetCastDelay(me, hero, abilityName: name) * 1000 + ping + 100, handleString); Utils.Sleep(delay, "GlobalCasting"); Utils.Sleep(delay, "casting"); Utils.Sleep(delay, "cancelorder"); return true; } } return false; }