Exemple #1
0
        public void Update()
        {
            if (BotData.CannotContinueMovement())
            {
                return;
            }

            if (BotData.IsInDanger)
            {
                KeyManager.ChangeKey(GlobalKeys.LastHitKey);
                return;
            }

            var safeToHit = !Global.Player.UnderEnemyTURRET(1000) && GameObjects.EnemyHeroes.Count(x => x.UnderEnemyTURRET(900) && x.IsValidTarget(1400, true)) == 0 && !BotData.IsInDanger;

            if (Global.Player.CountEnemyHeroesInRange(BotData.IsAggressive() ? 1100 : BotData.MyRange * 1.1f) >= 1 && safeToHit)
            {
                KeyManager.ChangeKey(GlobalKeys.ComboKey);
                return;
            }

            var minion      = GameObjects.EnemyMinions.FirstOrDefault(x => x.IsValidTarget(BotData.MyRange));
            var jungleMob   = GameObjects.Jungle.FirstOrDefault(x => !x.IsAlly && x.IsValidTarget(BotData.MyRange));
            var enemyTurret = GameObjects.EnemyTurrets.FirstOrDefault(x => x.IsValidTarget(BotData.MyRange + 100));

            if (enemyTurret != null || (minion != null || jungleMob != null) && Global.Player.CountEnemyHeroesInRange(BotData.MyRange) <= 0)
            {
                KeyManager.ChangeKey(GlobalKeys.WaveClearKey);
            }

            else if (safeToHit)
            {
                KeyManager.ChangeKey(GlobalKeys.MixedKey);
            }
        }
Exemple #2
0
        public void Update()
        {
            if (BotData.CannotContinueMovement() || !Global.Orbwalker.CanMove() || Environment.TickCount - BotData.LastStepTick <= Global.Random.Next(700, 1700) || Environment.TickCount - lastFoundGrassTick <= 8000)
            {
                return;
            }

            if (Game.ClockTime >= 105 &&
                BotData.EnemyCount == 0 &&
                !GameObjects.Minions.Any(x => x.IsValidTarget(1800, true) && x.Distance(Global.Player) <= 1800) &&
                !(Global.Player.Distance(BotData.GetBotPushLane()) <= 800) &&
                GameObjects.AllyHeroes.Any(x => x.IsValidTarget(3000, true)))
            {
                DebugConsole.WriteLine($"Running to: BEST LANE", MessageState.Debug);

                BotData.SetNewMovePosition(BotData.GetBotPushLane());
                return;
            }

            if (Game.ClockTime <= 82)
            {
                DebugConsole.WriteLine($"Running to: PRE LANE-PHASE POSITION", MessageState.Debug);

                BotData.SetNewMovePosition(BotData.GetBotPreLanePhase(), false);
                return;
            }

            if (Game.ClockTime <= 87)
            {
                var allyJungler = GameObjects.AllyHeroes.FirstOrDefault(x => x.IsJungler());
                if (allyJungler != null && allyJungler.Distance(BotData.GetBotPushLane()) <= 4500)
                {
                    DebugConsole.WriteLine($"Running to: ALLY JUNGLER", MessageState.Debug);
                    var pos = allyJungler.ServerPosition.Extend(Global.Player.ServerPosition, BotData.MyRange / 2f);
                    BotData.SetNewMovePosition(pos);

                    return;
                }
            }

            if (Game.ClockTime <= 95)
            {
                DebugConsole.WriteLine($"Running to: STARTING POSITION", MessageState.Debug);

                BotData.SetNewMovePosition(BotData.GetBotPushLane().Extend(Global.Player.ServerPosition, Global.Player.AttackRange), false);
                return;
            }

            if (BotData.IsInDanger ||
                Global.Player.UnderEnemyTURRET() && GameObjects.AllyMinions.Count(x => x.IsValidTarget(1100, true) && x.UnderEnemyTURRET()) <= 3)
            {
                BotData.SetDanger();
                DebugConsole.WriteLine($"ATTACKED OR WILL BE ATTACKED BY TURRET", MessageState.Warn);
                GetToSafety(AllyTurret, false);
                return;
            }

            if (Environment.TickCount - turretDestroyTick <= 6500 &&
                Game.ClockTime < 650 &&
                GameObjects.EnemyTurrets.Count() >= 7 &&
                BotData.EnemyCount == 0 &&
                !GameObjects.EnemyMinions.Any(x => x.Distance(Global.Player) <= 1000))
            {
                DebugConsole.WriteLine($"RECALLING (Killed turret)", MessageState.Debug);
                Global.Player.SpellBook.CastSpell(SpellSlot.Recall);
                BotData.LastRecallAttempt = Environment.TickCount;
                return;
            }

            if (BotData.MinionAttacks.Count >= 4 && Game.ClockTime < 650 ||
                Global.Player.HealthPercent() <= 25 ||
                Global.Player.HealthPercent() <= 40 &&
                GameObjects.EnemyHeroes.Any(x => x.IsValidTarget(1300) &&
                                            x.HealthPercent() >= 60) &&
                BotData.EnemyCount > BotData.AllyCount ||
                BotData.EnemyCount >= 2 && !BotData.IsAggressive() ||
                !GameObjects.AllyMinions.Any(x => x.UnderEnemyTURRET() && x.Distance(Global.Player) <= 950 * 2) && Global.Player.UnderEnemyTURRET())
            {
                var noAggro = BotData.EnemyCount == 0 &&
                              GameObjects.EnemyMinions.OrderBy(x => x.Distance(Global.Player)).Count(x => x.Distance(Global.Player) <= 500) <= 2;

                if (noAggro && BotData.MinionAttacks.Count <= 0 && !Global.Player.UnderFountain() && Global.Player.Distance(BotData.MovePosition) <= 100)
                {
                    DebugConsole.WriteLine($"RECALLING", MessageState.Debug);
                    Global.Player.SpellBook.CastSpell(SpellSlot.Recall);
                    BotData.LastRecallAttempt = Environment.TickCount;
                    return;
                }
                BotData.SetDanger();
                DebugConsole.WriteLine($"NEED TO GET TO SAFE POSITION", MessageState.Warn);
                GetToSafety(AllyTurret, noAggro);
                return;
            }

            if (GameObjects.AllyMinions.Count(x => x.IsValidTarget(950, true) && x.UnderEnemyTURRET(850)) >= 2 &&
                EnemyTurret != null &&
                !GameObjects.EnemyHeroes.Any(x => x.Distance(Global.Player) <= BotData.MyRange))
            {
                DebugConsole.WriteLine($"Running to: ENEMY TURRET | ATTACKING", MessageState.Debug);
                BotData.SetNewMovePosition(EnemyTurret.ServerPosition.Extend(Global.Player.ServerPosition, Global.Player.AttackRange), false);
                return;
            }

            var minion = GameObjects.EnemyMinions.OrderBy(x => x.Health).ThenBy(x => x.Distance(Global.Player)).FirstOrDefault(x => x.IsValidTarget(1500));

            if (minion != null &&
                AllyTurret != null &&
                !minion.UnderEnemyTURRET() && !(GameObjects.AllyMinions.Count(x => x.IsValidTarget(1000, true, true, minion.ServerPosition)) <= 1 && Game.ClockTime <= 600) &&
                Global.Player.CountEnemyHeroesInRange(2000) <= 3)
            {
                DebugConsole.WriteLine($"Running to: ENEMY MINION", MessageState.Debug);
                var pos = minion.ServerPosition.Extend(AllyTurret.ServerPosition, Global.Player.AttackRange * .85f);
                BotData.SetNewMovePosition(pos, true, 300);
                return;
            }

            var target = Global.TargetSelector.GetTarget(BotData.IsAggressive() ? 1500 : BotData.MyRange);

            if (target != null &&
                !target.UnderEnemyTURRET(970) &&
                !Global.Player.UnderEnemyTURRET(1000) &&
                BotData.EnemyCount <= 4 &&
                !(BotData.MinionAttacks.Count >= 4 && Game.ClockTime <= 640))
            {
                DebugConsole.WriteLine($"Running to: TARGET", MessageState.Debug);
                var pos = target.ServerPosition.Extend(Global.Player.ServerPosition,
                                                       Global.Player.IsRanged ? Global.Player.AttackRange * .8f : Global.Player.AttackRange * .25f);
                BotData.SetNewMovePosition(pos, true, 180);
                return;
            }

            if (AllyHero != null)
            {
                DebugConsole.WriteLine($"Running to: ALLY HEROES", MessageState.Debug);
                var pos = AllyHero.ServerPosition.Extend(Global.Player.ServerPosition, -BotData.MyRange * .25f);
                BotData.SetNewMovePosition(pos, true, 700);
                return;
            }

            if (Allyminion != null && AllyTurret != null)
            {
                DebugConsole.WriteLine($"Running to: ALLY MINIONS", MessageState.Debug);
                var path      = Allyminion.Path.LastOrDefault();
                var minionPos = Allyminion.ServerPosition;
                var pathPos   = path + (path - minionPos).Normalized() * (2.75f * Allyminion.MoveSpeed);
                BotData.SetNewMovePosition(Allyminion.HasPath ? pathPos : Allyminion.ServerPosition.Extend(AllyTurret.ServerPosition, 100));
                return;
            }

            DebugConsole.WriteLine($"BOT CONFUSED", MessageState.Error);
            BotData.SetNewMovePosition(BotData.GetBotPushLane(), false);
        }
Exemple #3
0
        public void Update()
        {
            if (BotData.CannotContinueMovement() || !Global.Orbwalker.CanMove() || Environment.TickCount - BotData.LastStepTick <= Global.Random.Next(700, 1700))
            {
                return;
            }

            if (Game.ClockTime <= 55)
            {
                DebugConsole.WriteLine($"Running to: LANE", MessageState.Debug);

                BotData.SetNewMovePosition(BotData.GetBotPushLaneAram());
                return;
            }

            var allyTurret = GameObjects.AllyTurrets.Where(x => !x.IsDead).OrderBy(x => Global.Player.Distance(x)).FirstOrDefault();

            var enemyTurret = GameObjects.EnemyTurrets.Where(x => !x.IsDead).OrderBy(x => Global.Player.Distance(x)).FirstOrDefault();

            var allyHero = GameObjects.AllyHeroes.
                           OrderBy(x => x.Distance(Global.Player)).
                           ThenByDescending(x => x.Health).
                           FirstOrDefault(x => x.NetworkId != Global.Player.NetworkId && !x.IsRecalling() && x.HealthPercent() > 40 && x.Distance(Global.Player) <= 2000);

            var allyminion = GameObjects.AllyMinions.
                             Where(x => x.IsValidTarget(3000, true) && x.IsMinion).
                             OrderBy(x => x.MaxHealth).
                             ThenBy(x => Global.Player.Distance(x)).
                             FirstOrDefault(x => x.Team == Global.Player.Team);


            if (BotData.IsInDanger || Global.Player.UnderEnemyTURRET() && GameObjects.AllyMinions.Count(x => x.IsValidTarget(1100, true) && x.UnderEnemyTURRET()) <= 3)
            {
                GetToSafety(allyTurret);
                return;
            }

            var shield = RelicShield.GetClosestShield();

            if (shield.IsZero && Global.Player.HealthPercent() <= 50)
            {
                BotData.SetNewMovePosition(shield, false);
            }

            if (Global.Player.HealthPercent() <= 30 ||
                Global.Player.HealthPercent() <= 40 &&
                GameObjects.EnemyHeroes.Any(x => x.IsValidTarget(1300) &&
                                            x.HealthPercent() >= 60) &&
                BotData.EnemyCount > BotData.AllyCount ||
                !GameObjects.AllyMinions.Any(x => x.IsUnderEnemyTurret() && x.Distance(Global.Player) <= 950 * 2) && Global.Player.IsUnderEnemyTurret())
            {
                DebugConsole.WriteLine($"ATTACKED OR WILL BE ATTACKED BY TURRET", MessageState.Warn);
                GetToSafety(allyTurret);
                return;
            }

            if (allyminion != null && allyminion.IsUnderEnemyTurret() && enemyTurret != null && !GameObjects.EnemyHeroes.Any(x => x.Distance(Global.Player) <= 1000))
            {
                DebugConsole.WriteLine($"Running to: ENEMY TURRET | ATTACKING", MessageState.Debug);
                BotData.SetNewMovePosition(enemyTurret.ServerPosition.Extend(Global.Player.ServerPosition, Global.Player.AttackRange), false);
                return;
            }

            var minion = GameObjects.EnemyMinions.OrderBy(x => x.Health).ThenBy(x => x.Distance(Global.Player)).FirstOrDefault(x => x.IsValidTarget(1500));

            if (minion != null &&
                allyTurret != null &&
                !minion.UnderEnemyTURRET() && !(GameObjects.AllyMinions.Count(x => x.IsValidTarget(1000, true, true, minion.ServerPosition)) <= 1 && Game.ClockTime <= 600) &&
                Global.Player.CountEnemyHeroesInRange(2000) <= 3)
            {
                DebugConsole.WriteLine($"Running to: ENEMY MINION", MessageState.Debug);
                var pos = minion.ServerPosition.Extend(allyTurret.ServerPosition, Global.Player.AttackRange * .85f);
                BotData.SetNewMovePosition(pos, true, 300);
                return;
            }

            var target = Global.TargetSelector.GetTarget(BotData.IsAggressive() ? 1500 : BotData.MyRange);

            if (target != null &&
                !target.UnderEnemyTURRET(970) &&
                !Global.Player.UnderEnemyTURRET(1000) &&
                BotData.EnemyCount <= 4 &&
                !(BotData.MinionAttacks.Count >= 4 && Game.ClockTime <= 640))
            {
                DebugConsole.WriteLine($"Running to: TARGET", MessageState.Debug);
                var pos = target.ServerPosition.Extend(Global.Player.ServerPosition,
                                                       Global.Player.IsRanged ? Global.Player.AttackRange * .8f : Global.Player.AttackRange * .25f);
                BotData.SetNewMovePosition(pos, true, 180);
                return;
            }

            if (allyHero != null)
            {
                DebugConsole.WriteLine($"Running to: ALLY HEROES", MessageState.Debug);
                var pos = allyHero.ServerPosition.Extend(Global.Player.ServerPosition, -BotData.MyRange * .25f);
                BotData.SetNewMovePosition(pos, true, 700);
                return;
            }

            if (allyminion != null && allyTurret != null)
            {
                DebugConsole.WriteLine($"Running to: ALLY MINIONS", MessageState.Debug);
                var path      = allyminion.Path.LastOrDefault();
                var minionPos = allyminion.ServerPosition;
                var pathPos   = path + (path - minionPos).Normalized() * (2.75f * allyminion.MoveSpeed);
                BotData.SetNewMovePosition(allyminion.HasPath ? pathPos : allyminion.ServerPosition);
                return;
            }

            DebugConsole.WriteLine($"BOT CONFUSED", MessageState.Error);
            BotData.SetNewMovePosition(BotData.GetBotPushLaneAram(), false);
        }