示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }