private static bool ShouldWaitAllTogether() { /* var cEnemy = getCloestEnemyChamp(); * bool enemySoonInRange = cEnemy != null && * inAutoAttackRange(cEnemy, * LeagueSharp.Common.Prediction.GetPrediction(cEnemy,player.AttackDelay*1000).UnitPosition.To2D()); * if (enemySoonInRange) * return true;*/ foreach (var minion in MinionManager.GetMinions(GetTargetSearchDist(), MinionTypes.All)) { if (minion.IsValidTarget()) { //var hpKillable = HealthDeath.getLastHitPredPeriodic(minion, timeTillDamageOn(minion)); // if(hpKillable<0) // continue; var dmgAt = TimeTillDamageOn(minion); var hp = HealthDeath.GetLaneClearPred(minion, (int)((Player.AttackDelay * 1000) * 1.26f)); if (hp <= GetRealAaDmg(minion)) { return(true); } } } return(false); }
private static bool ShouldWaitMinion(Obj_AI_Base minion) { var hp = HealthDeath.GetLaneClearPred(minion, (int)((Player.AttackDelay * 1000) * 2.26f)); if (hp <= GetRealAaDmg(minion)) { return(true); } return(false); }
public static AttackableUnit GetBestTarget(bool onlySolider = false) { bool soliderHit = false; if (ForcedTarget != null && !onlySolider) { if (inAutoAttackRange(ForcedTarget)) { return(ForcedTarget); } ForcedTarget = null; } if (Azir) { EnemiesAround = ObjectManager.Get <Obj_AI_Base>() .Where(targ => targ.IsValid && inAutoAttackRange(targ) && targ.IsEnemy).ToList(); } else { EnemiesAround = ObjectManager.Get <Obj_AI_Base>() .Where(targ => targ.IsValidTarget(GetTargetSearchDist()) && targ.IsEnemy).ToList(); } Obj_AI_Base best = null; //Lat hit float bestPredHp = float.MaxValue; if (Azir) { var hero1 = GetBestHeroTarget(out soliderHit); if (hero1 != null && (EnemyInAzirRange(hero1) || hero1 is Obj_AI_Minion) && (!onlySolider || soliderHit)) { return(hero1); } } if (!onlySolider) { //check motherfuckers that are attacked by tower if (CurrentMode == Mode.Harass || CurrentMode == Mode.Lasthit || CurrentMode == Mode.LaneClear) { foreach (var targ in EnemiesAround) { var towerShot = HealthDeath.AttackedByTurret(targ); if (towerShot == null) { continue; } var hpOnDmgPred = HealthDeath.GetLaneClearPred(targ, towerShot.HitOn + 10 - Now); var aa = GetRealAaDmg(targ); // Console.WriteLine("AAdmg: " + aa + " Hp after: " + hpOnDmgPred + " hit: " + (towerShot.hitOn - now)); if (hpOnDmgPred > aa && hpOnDmgPred <= aa * 2f) { //Console.WriteLine("Tower under shoting"); //Notifications.AddNotification("Tower shoot"); //2x hit tower target return(targ); } } } } if (!onlySolider) { if (CurrentMode == Mode.Harass || CurrentMode == Mode.Lasthit || CurrentMode == Mode.LaneClear) { //Last hit foreach ( var targ in EnemiesAround.OrderByDescending( min => HealthDeath.GetLastHitPredPeriodic(min, TimeTillDamageOn(min)))) { var hpOnDmgPred = HealthDeath.GetLastHitPred(targ, TimeTillDamageOn(targ)); if (hpOnDmgPred <= 0 && (LastAutoAttackUnit == null || LastAutoAttackUnit.NetworkId != targ.NetworkId)) { FireOnUnkillable(Player, targ, HealthDeath.GetTimeTillDeath(targ)); } if (hpOnDmgPred <= 0 || hpOnDmgPred > (int)GetRealAaDmg(targ)) { continue; } var cannonBonus = (targ.BaseSkinName == "SRU_ChaosMinionSiege") ? 100 : 0; if (best == null || hpOnDmgPred - cannonBonus < bestPredHp) { best = targ; bestPredHp = hpOnDmgPred; } } if (best != null) { return(best); } } } var hero = GetBestHeroTarget(out soliderHit); if (hero != null && (!onlySolider || soliderHit)) { return(hero); } if (!onlySolider) { if (ShouldWaitAllTogether()) { return(null); } } /* turrets / inhibitors / nexus */ if (CurrentMode == Mode.LaneClear && 0 == 1) { /* turrets */ foreach (var turret in EnemyTowers.Where(t => t.IsValidTarget() && inAutoAttackRange(t))) { return(turret); } /* inhibitor */ foreach (var turret in EnemyBarracs.Where(t => t.IsValidTarget() && inAutoAttackRange(t))) { return(turret); } /* nexus */ foreach (var nexus in EnemyHq.Where(t => t.IsValidTarget() && inAutoAttackRange(t))) { return(nexus); } } if (!onlySolider) { //Laneclear if (CurrentMode == Mode.LaneClear) { best = EnemiesAround.Where(min => !ShouldWaitMinion(min)) .OrderByDescending(targ => targ.Health + (EnemyInAzirRange(targ) ? 1000 : 0)).FirstOrDefault(); } } return(best); }