protected void GetPlayerInfo(ResponseGameInfo gameInfo, uint playerId, string opponentId) { string enemyName = string.Empty; foreach (var playerInfo in gameInfo.PlayerInfo) { if (playerInfo.PlayerId == playerId) { ActualRace = playerInfo.RaceActual; SelectedRace = playerInfo.RaceRequested; } else { if (playerInfo.PlayerName != null) { enemyName = playerInfo.PlayerName; } EnemyRace = playerInfo.RaceRequested; EnemySelectedRace = playerInfo.RaceRequested; } } EnemyPlayer = EnemyPlayerService.Enemies.FirstOrDefault(e => e.Id == opponentId); if (opponentId == "test" && EnemyPlayer == null) { EnemyPlayer = new EnemyPlayer.EnemyPlayer { ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = "test" }; } if (EnemyPlayer == null) { EnemyPlayer = new EnemyPlayer.EnemyPlayer { ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = enemyName }; } }
public List <string> GetBestBuild(EnemyPlayer.EnemyPlayer enemyBot, List <List <string> > buildSequences, string map, List <EnemyPlayer.EnemyPlayer> enemyBots, Race enemyRace) { List <string> debugMessage = new List <string>(); debugMessage.Add($"Choosing build against {enemyBot.Name} - {enemyBot.Id} on {map}"); Console.WriteLine($"Choosing build against {enemyBot.Name} - {enemyBot.Id} on {map}"); var bestBuildSequence = buildSequences.First(); var mapGames = enemyBot.Games.Where(g => g.MapName == map).Where(g => g.EnemyRace == enemyRace); // it is possible a bot could be updated and change races on the ladder Record bestRecord = null; //GetSequenceRecord(mapGames, bestBuildSequence); //Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); //debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); var record = GetRecord(mapGames); Console.WriteLine($"Same enemy, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); debugMessage.Add($"Same enemy, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); if (mapGames.Count() > 0) { // check games on this map foreach (var buildSequence in buildSequences) { var buildRecord = GetSequenceRecord(mapGames, buildSequence); if (BetterBuild(bestRecord, buildRecord)) { bestBuildSequence = buildSequence; bestRecord = buildRecord; Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); } } } record = GetRecord(enemyBot.Games.Where(g => g.EnemyRace == enemyRace)); Console.WriteLine($"Same enemy, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); debugMessage.Add($"Same enemy, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); if (bestRecord == null || bestRecord.Wins.Count() == 0) { // check games on other maps foreach (var buildSequence in buildSequences) { if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0) { continue; } var buildRecord = GetSequenceRecord(enemyBot.Games.Where(g => g.EnemyRace == enemyRace), buildSequence); Debug.WriteLine($"{string.Join(" ", buildSequence)} {buildRecord.Wins.Count()}-{buildRecord.Ties.Count()}-{buildRecord.Losses.Count()}"); if (BetterBuild(bestRecord, buildRecord)) { bestBuildSequence = buildSequence; bestRecord = buildRecord; Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); } } } record = GetRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace).Where(g => g.MapName == map)); Console.WriteLine($"All enemies, same race, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); debugMessage.Add($"All enemies, same race, same map: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); if (bestRecord.Wins.Count() == 0) { // check games on this map from other bots of the same race foreach (var buildSequence in buildSequences) { if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0) { continue; } var buildRecord = GetSequenceRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace).Where(g => g.MapName == map), buildSequence); if (BetterBuild(bestRecord, buildRecord)) { bestBuildSequence = buildSequence; bestRecord = buildRecord; Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); } } } record = GetRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace)); Console.WriteLine($"All enemies, same race, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); debugMessage.Add($"All enemies, same race, all maps: {record.Wins.Count()}-{record.Losses.Count()}-{record.Ties.Count()}"); if (bestRecord.Wins.Count() == 0) { // check games on other maps from other bots of the same race foreach (var buildSequence in buildSequences) { if (GetSequenceRecord(mapGames, buildSequence).Losses.Count() > 0) { continue; } var buildRecord = GetSequenceRecord(enemyBots.SelectMany(b => b.Games).Where(g => g.EnemyRace == enemyRace), buildSequence); if (BetterBuild(bestRecord, buildRecord)) { bestBuildSequence = buildSequence; bestRecord = buildRecord; Console.WriteLine($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); debugMessage.Add($"choice: {string.Join(" ", bestBuildSequence)}, {bestRecord.Wins.Count()}-{bestRecord.Losses.Count()}-{bestRecord.Ties.Count()}"); } } } Console.WriteLine($"Chosen Build Sequence: {string.Join(" ", bestBuildSequence)}"); debugMessage.Add($"Chosen Build Sequence: {string.Join(" ", bestBuildSequence)}"); Console.WriteLine($"Record: Wins: {bestRecord.Wins.Count()} Losses: {bestRecord.Losses.Count()} Ties: {bestRecord.Ties.Count()}"); debugMessage.Add($"Record: Wins: {bestRecord.Wins.Count()} Losses: {bestRecord.Losses.Count()} Ties: {bestRecord.Ties.Count()}"); //ChatManager.SendDebugChatMessages(debugMessage); return(bestBuildSequence); }