public virtual double CalculateAADamage(AIHeroClient target, int aacount = 2) { return(AutoAttack.GetDamage(target) * aacount); }
private static AIHeroClient GetNewTarget(float range, DamageType dmgType = DamageType.Physical, Vector3?_from = null) { if (range == -1) { range = Utility.GetAARange(); } if (ConfigMenu.OnlyAttackSelected) { if (SelectedTarget != null) { if (SelectedTarget.IsValidTarget(range)) { return(SelectedTarget); } if (SelectedTarget.IsValidTarget()) { return(null); } } } if (ConfigMenu.FocusSelected) { if (SelectedTarget != null) { if (SelectedTarget.IsValidTarget(range)) { return(SelectedTarget); } if (ConfigMenu.FocusExtraRange > 0 && SelectedTarget.IsValidTarget(range + ConfigMenu.FocusExtraRange)) { return(null); } } } var from = _from ?? ObjectManager.Player.ServerPosition; var enemies = HeroManager.Enemies.Where( p => p.IsValidTarget(range + p.BoundingRadius, true, from) && !IsInvulnerable(p, dmgType)); if (enemies.Count() == 0) { return(null); } switch (ConfigMenu.TargettingMode) { case 1: return(enemies.MinOrDefault(hero => hero.Health)); case 2: return(enemies.MaxOrDefault(hero => hero.BaseAttackDamage + hero.FlatPhysicalDamageMod)); case 3: return(enemies.MaxOrDefault(hero => hero.BaseAbilityDamage + hero.FlatMagicDamageMod)); case 4: return (enemies.MinOrDefault( hero => (_from ?? ObjectManager.Player.ServerPosition).Distance( hero.ServerPosition, true))); case 5: return(enemies.Find(hero => hero.Distance(Game.CursorPos, true) < 22500)); // 150 * 150 case 6: return (enemies.MaxOrDefault( hero => ObjectManager.Player.CalcDamage(hero, DamageType.Physical, 100) / (1 + hero.Health) * GetPriority(hero))); case 7: return (enemies.MaxOrDefault( hero => ObjectManager.Player.CalcDamage(hero, DamageType.Magical, 100) / (1 + hero.Health) * GetPriority(hero))); case 0: { var killableWithAA = enemies.Where(p => p.Health <= AutoAttack.GetDamage(p, true)).FirstOrDefault(); if (killableWithAA != null) { return(killableWithAA); } var possibleTargets = enemies.OrderByDescending(GetPriority); if (possibleTargets.Count() == 1) { return(possibleTargets.First()); } if (possibleTargets.Count() > 1) { var killableTarget = possibleTargets.OrderByDescending(GetTotalADAPMultipler) .FirstOrDefault(q => GetHealthMultipler(q) >= 10); if (killableTarget != null) { return(killableTarget); } var targets = possibleTargets.OrderBy(p => ObjectManager.Player.Distance(p.ServerPosition)); AIHeroClient mostImportant = null; double mostImportantsDamage = 0; foreach (var target in targets) { var dmg = target.CalcDamage(ObjectManager.Player, DamageType.Physical, 100) + target.CalcDamage(ObjectManager.Player, DamageType.Magical, 100); if (mostImportant == null) { mostImportant = target; mostImportantsDamage = dmg; } else { if (Utility.InAARange(ObjectManager.Player, target) && !Utility.InAARange(ObjectManager.Player, mostImportant)) { mostImportant = target; mostImportantsDamage = dmg; } else if ((Utility.InAARange(ObjectManager.Player, target) && Utility.InAARange(ObjectManager.Player, mostImportant)) || (!Utility.InAARange(ObjectManager.Player, target) && !Utility.InAARange(ObjectManager.Player, mostImportant))) { if (mostImportantsDamage < dmg / 2f) { mostImportant = target; mostImportantsDamage = dmg; continue; } if ((mostImportant.IsMelee && !target.IsMelee) || (!mostImportant.IsMelee && target.IsMelee)) { var targetMultp = GetHealthMultipler(target); var mostImportantsMultp = GetHealthMultipler(mostImportant); if (mostImportantsMultp < targetMultp) { mostImportant = target; mostImportantsDamage = dmg; } } } } } return(mostImportant); } return(null); } } return(null); }