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(); }
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; } } }