예제 #1
0
        private async void Button_Train_Click(object sender, RoutedEventArgs e)
        {
            RefreshField();
            Info.Visibility = Visibility.Visible;
            Info.Content    = "Training\nin progress...";
            await Task.Run(() =>
            {
                for (int i = 0; i < 100000; i++)
                {
                    _opponentInstance.Refresh();
                    _assistantInstance.Refresh();
                    Mark[,] gameField = new Mark[GameField.RowDefinitions.Count, GameField.ColumnDefinitions.Count];
                    var gameState     = CheckWinningState(gameField);
                    while (!gameState.winningState && gameField.Cast <Mark>().ToList().Contains(Mark.Blank))
                    {
                        var decision = _assistantInstance.TakeTurn(gameField);
                        gameField[(int)decision.Y, (int)decision.X] = _assistantInstance.InstanceRole;
                        gameState = CheckWinningState(gameField);

                        if (!gameState.winningState && gameField.Cast <Mark>().ToList().Contains(Mark.Blank))
                        {
                            decision = _opponentInstance.TakeTurn(gameField);
                            gameField[(int)decision.Y, (int)decision.X] = _opponentInstance.InstanceRole;
                            gameState = CheckWinningState(gameField);
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (!gameState.winningState)
                    {
                        _assistantInstance.ProcessResult(GameResult.Draw, 0.1);
                        _opponentInstance.ProcessResult(GameResult.Draw, 0.1);
                    }
                    else
                    {
                        _assistantInstance.ProcessResult(gameState.winningMark == _assistantInstance.InstanceRole ? GameResult.Won : GameResult.Lost, 0.1);
                        _opponentInstance.ProcessResult(gameState.winningMark == _opponentInstance.InstanceRole ? GameResult.Won : GameResult.Lost, 0.1);
                    }
                }
            });

            Info.Visibility = Visibility.Hidden;
            AI.SaveWeights();
        }
예제 #2
0
        public static void UseSummoner(SummonerSpellsEnum summoner)
        {
            switch (summoner)
            {
            case SummonerSpellsEnum.Exhaust:
            {
                if (Exhaust == null || !Exhaust.IsReady() || !Main.SpellsMenu.VChecked("Exhaust.Enabled") || (Player.HasBuffOfType(BuffType.Invisibility) && Main.SpellsMenu.VChecked("Exhaust.Stealth")) ||
                    (Main.SpellsMenu.VChecked("Exhaust.Combo") && !Orbwalker.ActiveModes.Combo.IsOrb()))
                {
                    break;
                }
                var target = EntityManager.Heroes.Enemies.Where(x => x.IsValidTarget(Exhaust.Range) &&
                                                                (Main.SpellsMenu.VSliderValue("Exhaust.EnemyHP") <= x.HealthPercent ||
                                                                 EntityManager.Heroes.Allies.Any(ally => ally.IsValidTarget(800) && Main.SpellsMenu.VSliderValue("Exhaust.AllyHP") <= ally.HealthPercent)));
                switch (Main.SpellsMenu.VComboValue("Exhaust.Target"))
                {
                case 0:
                {
                    target.OrderByDescending(x => TargetSelector.GetPriority(x));
                }
                break;

                case 1:
                {
                    target.OrderBy(x => x.Health);
                }
                break;

                case 2:
                {
                    target.OrderByDescending(x => x.TotalAttackDamage);
                }
                break;

                case 3:
                {
                    target.OrderByDescending(x => x.TotalMagicalDamage);
                }
                break;

                case 4:
                {
                    target.OrderByDescending(x => x.MoveSpeed);
                }
                break;

                case 5:
                {
                    target.OrderByDescending(x => x.PercentAttackSpeedMod);
                }
                break;
                }
                if (target.Any())
                {
                    Exhaust.Cast(target.First());
                }
            }
            break;

            case SummonerSpellsEnum.Heal:
            {
                if (Heal == null || !Heal.IsReady() || !Main.SpellsMenu.VChecked("Heal.Enabled") || (Player.HasBuffOfType(BuffType.Invisibility) && Main.SpellsMenu.VChecked("Heal.Stealth")) ||
                    (Main.SpellsMenu.VChecked("Heal.Combo") && !Orbwalker.ActiveModes.Combo.IsOrb()))
                {
                    break;
                }
                var allies = EntityManager.Heroes.Allies.Where(x => x.IsValidTarget(Heal.Range) && x.HealthPercent <= (x.IsMe ? Main.SpellsMenu.VSliderValue("Heal.MyHP") : Main.SpellsMenu.VSliderValue("Heal.AllyHP")));
                if (!allies.Any())
                {
                    break;
                }
                var dic = new Dictionary <Obj_AI_Base, int>();
                foreach (var ally in allies)
                {
                    dic.Add(ally, 500);
                }
                if (!Main.SpellsMenu.VChecked("Heal.Smart") || Prediction.Health.GetPrediction(dic).Any(x => x.Value <= 0))
                {
                    Heal.Cast();
                }
            }
            break;

            case SummonerSpellsEnum.Ignite:
            {
                if (Ignite == null || !Ignite.IsReady() || !Main.SpellsMenu.VChecked("Ignite.Enabled") ||
                    (Main.SpellsMenu.VChecked("Ignite.Combo") && !Orbwalker.ActiveModes.Combo.IsOrb()))
                {
                    break;
                }
                var target = EntityManager.Heroes.Enemies.Where(t =>
                                                                t.IsValidTarget(Ignite.Range) &&
                                                                t.Health <= Player.Instance.GetSummonerSpellDamage(t, DamageLibrary.SummonerSpells.Ignite)).FirstOrDefault();

                if (target == null)
                {
                    break;
                }
                Ignite.Cast(target);
            }
            break;

            case SummonerSpellsEnum.Mark:
            {
                if (Mark == null || !Mark.IsReady() || !Main.SpellsMenu.VChecked("Mark.Enabled") ||
                    !Orbwalker.ActiveModes.Combo.IsOrb())
                {
                    break;
                }
                var target = Mark.GetTarget();
                if (target == null)
                {
                    break;
                }
                var pred = Mark.GetPrediction(target);
                if (pred.CanNext(Mark, Main.SpellsMenu.VSliderValue("Mark.Percent"), true))
                {
                    Mark.Cast(pred.CastPosition);
                }
            }
            break;

            case SummonerSpellsEnum.Smite:
            {
                if (Smite == null || !Smite.IsReady() || !Main.SpellsMenu.VChecked("Smite.Enabled"))
                {
                    break;
                }
                var target = EntityManager.Heroes.Enemies.Where(t =>
                                                                t.IsValidTarget(Smite.Range) &&
                                                                t.Health <= Player.Instance.GetSummonerSpellDamage(t, DamageLibrary.SummonerSpells.Smite)).FirstOrDefault();
                var minion = ObjectManager.Get <Obj_AI_Minion>()
                             .FirstOrDefault(m => m.Health < Player.Instance.GetSummonerSpellDamage(m, DamageLibrary.SummonerSpells.Smite) &&
                                             m != null && m.IsMonster && m.IsImportant() && Smite.IsInRange(m));
                if (minion != null)
                {
                    Smite.Cast(minion);
                }
                if (target != null)
                {
                    Smite.Cast(target);
                }
            }
            break;

            case SummonerSpellsEnum.Barrier:
            {
                if (Barrier == null || !Barrier.IsReady() || !Main.SpellsMenu.VChecked("Barrier.Enabled") || (Player.HasBuffOfType(BuffType.Invisibility) && Main.SpellsMenu.VChecked("Barrier.Stealth")) ||
                    (Main.SpellsMenu.VChecked("Barrier.Combo") && !Orbwalker.ActiveModes.Combo.IsOrb()) || Player.Instance.HealthPercent > Main.SpellsMenu.VSliderValue("Barrier.MyHP"))
                {
                    break;
                }
                if (!Main.SpellsMenu.VChecked("Barrier.Smart") || Prediction.Health.GetPrediction(Player.Instance, 800) <= 0)
                {
                    Barrier.Cast();
                }
            }
            break;

            default:
            {
                break;
            }
            }
        }