public static bool IsTotallySafe(this Vector3 position, bool noQIntoEnemiesCheck = false)
{
if (Variables.UnderEnemyTower((Vector2)position) && !Variables.UnderEnemyTower((Vector2)Variables._Player.Position))
{
return false;
}
var allies = position.CountAlliesInRange(Variables._Player.AttackRange);
var enemies = position.CountEnemiesInRange(Variables._Player.AttackRange);
var lhEnemies = position.GetLhEnemiesNear(Variables._Player.AttackRange, 15).Count();
if (enemies <= 1) ////It's a 1v1, safe to assume I can Q
{
return true;
}
if (position.UnderAllyTurret_Ex())
{
var nearestAllyTurret = ObjectManager.Get<Obj_AI_Turret>().Where(a => a.IsAlly).OrderBy(d => d.Distance(position, true)).FirstOrDefault();
if (nearestAllyTurret != null)
{
////We're adding more allies, since the turret adds to the firepower of the team.
allies += 2;
}
}
////Adding 1 for my Player
var normalCheck = (allies + 1 > enemies - lhEnemies);
var QEnemiesCheck = true;
if (Manager.MenuManager.DontuseQintoenemies && noQIntoEnemiesCheck)
{
if (!Manager.MenuManager.DontuseQintoenemies)
{
var Vector2Position = position.To2D();
var enemyPoints = Manager.MenuManager.Dynamicsafety
? GetEnemyPoints()
: GetEnemyPoints(false);
if (enemyPoints.Contains(Vector2Position) &&
!Manager.MenuManager.SpamQ)
{
QEnemiesCheck = false;
}
var closeEnemies =
EntityManager.Heroes.Enemies.FindAll(en => en.IsValidTarget(1500f) && !(en.Distance(Variables._Player.ServerPosition) < en.AttackRange + 65f))
.OrderBy(en => en.Distance(position));
if (
!closeEnemies.All(
enemy =>
position.CountEnemiesInRange(
Manager.MenuManager.Dynamicsafety
? enemy.AttackRange
: 405f) <= 1))
{
QEnemiesCheck = false;
}
}
else
{
var closeEnemies =
EntityManager.Heroes.Enemies.FindAll(en => en.IsValidTarget(1500f)).OrderBy(en => en.Distance(position));
if (closeEnemies.Any())
{
QEnemiesCheck =
!closeEnemies.All(
enemy =>
position.CountEnemiesInRange(
Manager.MenuManager.Dynamicsafety
? enemy.AttackRange
: 405f) <= 1);
}
}
}
return normalCheck && QEnemiesCheck;
}