public static Obj_AI_Hero GetTarget(Obj_AI_Base champion, float range, DamageType type, bool ignoreShieldSpells = true, IEnumerable <Obj_AI_Hero> ignoredChamps = null, Vector3?rangeCheckFrom = null) { try { if (ignoredChamps == null) { ignoredChamps = new List <Obj_AI_Hero>(); } var damageType = (Damage.DamageType)Enum.Parse(typeof(Damage.DamageType), type.ToString()); if (_configMenu != null && IsValidTarget( SelectedTarget, _configMenu.Item("ForceFocusSelected").GetValue <bool>() ? float.MaxValue : range, type, ignoreShieldSpells, rangeCheckFrom)) { return(SelectedTarget); } if (_configMenu != null && _configMenu.Item("TargetingMode") != null && Mode == TargetingMode.AutoPriority) { var menuItem = _configMenu.Item("TargetingMode").GetValue <StringList>(); Enum.TryParse(menuItem.SList[menuItem.SelectedIndex], out Mode); } var targets = HeroManager.Enemies .FindAll( hero => !IsInvulnerable(hero, type) && ignoredChamps.All(ignored => ignored.NetworkId != hero.NetworkId) && IsValidTarget(hero, range, type, ignoreShieldSpells, rangeCheckFrom)); switch (Mode) { case TargetingMode.LowHP: return(targets.MinOrDefault(hero => hero.Health)); case TargetingMode.MostAD: return(targets.MaxOrDefault(hero => hero.BaseAttackDamage + hero.FlatPhysicalDamageMod)); case TargetingMode.MostAP: return(targets.MaxOrDefault(hero => hero.BaseAbilityDamage + hero.FlatMagicDamageMod)); case TargetingMode.Closest: return (targets.MinOrDefault( hero => (rangeCheckFrom.HasValue ? rangeCheckFrom.Value : champion.ServerPosition).Distance( hero.ServerPosition, true))); case TargetingMode.NearMouse: return(targets.Find(hero => hero.Distance(Game.CursorPos, true) < 22500)); // 150 * 150 case TargetingMode.AutoPriority: return(ObjectManager.Player.BaseSkinName == "Vayne" ? (targets.FirstOrDefault(h => h.Health < ObjectManager.Player.GetAutoAttackDamage(h) * 3 + ObjectManager.Player.GetSpellDamage(h, LeagueSharp.SpellSlot.W)) ?? (ChallengerPlugin.ComboMenu.Item("FocusTwoW").GetValue <bool>() ? targets.FirstOrDefault(h => h.VayneWStacks() == 2) : null) ?? targets.MaxOrDefault( hero => (champion.CalcDamage(hero, damageType, 100) / (1 + hero.Health)) * GetPriority(hero))) : targets.MaxOrDefault(hero => (champion.CalcDamage(hero, damageType, 100) / (1 + hero.Health)) * GetPriority(hero))); case TargetingMode.LessAttack: return (targets.MaxOrDefault( hero => champion.CalcDamage(hero, Damage.DamageType.Physical, 100) / (1 + hero.Health) * GetPriority(hero))); case TargetingMode.LessCast: return (targets.MaxOrDefault( hero => champion.CalcDamage(hero, Damage.DamageType.Magical, 100) / (1 + hero.Health) * GetPriority(hero))); } } catch (Exception e) { Console.WriteLine(e); } return(null); }
public static Obj_AI_Hero GetTarget(Obj_AI_Base champion, float range, DamageType type, bool ignoreShieldSpells = true, IEnumerable<Obj_AI_Hero> ignoredChamps = null, Vector3? rangeCheckFrom = null) { try { if (ignoredChamps == null) { ignoredChamps = new List<Obj_AI_Hero>(); } var damageType = (Damage.DamageType)Enum.Parse(typeof(Damage.DamageType), type.ToString()); if (_configMenu != null && IsValidTarget( SelectedTarget, _configMenu.Item("ForceFocusSelected").GetValue<bool>() ? float.MaxValue : range, type, ignoreShieldSpells, rangeCheckFrom)) { return SelectedTarget; } if (_configMenu != null && _configMenu.Item("TargetingMode") != null && Mode == TargetingMode.AutoPriority) { var menuItem = _configMenu.Item("TargetingMode").GetValue<StringList>(); Enum.TryParse(menuItem.SList[menuItem.SelectedIndex], out Mode); } var targets = HeroManager.Enemies .FindAll( hero => !IsInvulnerable(hero, type) && ignoredChamps.All(ignored => ignored.NetworkId != hero.NetworkId) && IsValidTarget(hero, range, type, ignoreShieldSpells, rangeCheckFrom)); switch (Mode) { case TargetingMode.LowHP: return targets.MinOrDefault(hero => hero.Health); case TargetingMode.MostAD: return targets.MaxOrDefault(hero => hero.BaseAttackDamage + hero.FlatPhysicalDamageMod); case TargetingMode.MostAP: return targets.MaxOrDefault(hero => hero.BaseAbilityDamage + hero.FlatMagicDamageMod); case TargetingMode.Closest: return targets.MinOrDefault( hero => (rangeCheckFrom.HasValue ? rangeCheckFrom.Value : champion.ServerPosition).Distance( hero.ServerPosition, true)); case TargetingMode.NearMouse: return targets.Find(hero => hero.Distance(Game.CursorPos, true) < 22500); // 150 * 150 case TargetingMode.AutoPriority: return ObjectManager.Player.BaseSkinName == "Vayne" ? (targets.FirstOrDefault(h =>h.Health < ObjectManager.Player.GetAutoAttackDamage(h)*3 + ObjectManager.Player.GetSpellDamage(h, LeagueSharp.SpellSlot.W)) ?? (ChallengerPlugin.ComboMenu.Item("FocusTwoW").GetValue<bool>() ? targets.FirstOrDefault(h => h.VayneWStacks() == 2) : null) ?? targets.MaxOrDefault( hero => (champion.CalcDamage(hero, damageType, 100)/(1 + hero.Health))* GetPriority(hero))) : targets.MaxOrDefault(hero => (champion.CalcDamage(hero, damageType, 100)/(1 + hero.Health))* GetPriority(hero)); case TargetingMode.LessAttack: return targets.MaxOrDefault( hero => champion.CalcDamage(hero, Damage.DamageType.Physical, 100) / (1 + hero.Health) * GetPriority(hero)); case TargetingMode.LessCast: return targets.MaxOrDefault( hero => champion.CalcDamage(hero, Damage.DamageType.Magical, 100) / (1 + hero.Health) * GetPriority(hero)); } } catch (Exception e) { Console.WriteLine(e); } return null; }