static void Main(string[] args) { bool debugMode = args.Contains("-debug"); Cleanup(); CurrentMapId = GetMapId(); while (true) { Console.WriteLine("\n\n--------------------------\nPress ENTER to take a screenshot and start the calculation."); Console.WriteLine("Write 'map' to choose map."); var readLine = Console.ReadLine(); if (readLine == "map") { CurrentMapId = GetMapId(); continue; } Console.WriteLine("Taking screenshot in 3 seconds..."); Thread.Sleep(3000); Console.WriteLine("Taking sceenshot."); var activeScreenCapture = ScreenCapturer.GetActiveScreenCapture( ScreenBoundsCalculator.GetRectangleByScreenResolution( ScreenResolution.FullHD)); Console.WriteLine("Screenshot saved. Extracting hero data from screenshot."); IEnumerable <int> enemyHeroIds = HeroScreenshotIdentityExtractor.FindEnemyHeroesByScreenshot(activeScreenCapture); Console.WriteLine($"Enemy heroes found: { JsonConvert.SerializeObject(enemyHeroIds?.Select(heroId => new { Hero = MetaDataHelper.GetHeroNameById(heroId) }))}"); Logger.Info($"Enemy heroes found: { JsonConvert.SerializeObject(enemyHeroIds?.Select(heroId => new { Hero = MetaDataHelper.GetHeroNameById(heroId) })) }"); IEnumerable <int> friendlyHeroIds = HeroScreenshotIdentityExtractor.FindAlliedHeroesByScreenshot(activeScreenCapture); Console.WriteLine($"Friendly heroes found: { JsonConvert.SerializeObject(friendlyHeroIds?.Select(heroId => new { Hero = MetaDataHelper.GetHeroNameById(heroId) }))}"); Logger.Info($"Friendly heroes found: { JsonConvert.SerializeObject(friendlyHeroIds?.Select(heroId => new { Hero = MetaDataHelper.GetHeroNameById(heroId) }))}"); Console.WriteLine("Calculating winrates."); IEnumerable <int> bestHeroIds = StatisticsCalculator.GetBestOrderedHeroIdCountersForTeamComposition( enemyHeroIds, CurrentMapId); Console.WriteLine("Calculation finished."); Console.WriteLine($"\nBest hero to chose (in order): "); int i = 1; foreach (var heroId in bestHeroIds.Take(10)) { Console.WriteLine($"{i}. { MetaDataHelper.GetHeroNameById(heroId)} "); i++; } } }