public void Play(ColdBot.Models.Magic.Command command, String channel) { var teams = new List <Team>(); var decks = command.Decks; var gameMode = command.GameMode; var ratings = getRatings(decks, gameMode, channel); int playersPerTeam = command.GameMode.ShortName.Equals("ffa") ? 1 : 2; if (ratings == null) { slackService.SendMessage("Rating were not properly fetched. The game was not recorded.", channel); return; } if (decks.Count % playersPerTeam != 0) { slackService.SendMessage("Actual numbers players are not divisible by players per team. The game was not recorded.", channel); return; } var playersWithRating = new List <Tuple <Player, Rating> >(); // Player names and their rating from the database to TrueSkill objects for (int i = 0; i < decks.Count; i++) { var player = new Player(decks[i].Player.Name); var rating = new Rating(ratings[i].Mean, ratings[i].StandardDeviation); playersWithRating.Add((new Tuple <Player, Rating>(player, rating))); } // Divide players to teams while (playersWithRating.Count > 0) { var playersInTeam = new List <Tuple <Player, Rating> >(); for (int i = 0; i < playersPerTeam; i++) { playersInTeam.Add(new Tuple <Player, Rating>(playersWithRating[0].Item1, playersWithRating[0].Item2)); playersWithRating.RemoveAt(0); } var team = new Team(); foreach (var player in playersInTeam) { team.AddPlayer(player.Item1, player.Item2); } teams.Add(team); } // Calculate new rating var newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(teams.ToArray()), generateRanking(teams.Count).ToArray()); // For each new rating match with fetched ratings and update values in DB foreach (var playerWithRating in newRatings) { var rating = ratings .Where(x => x.Player.Name.ToLower().Equals(playerWithRating.Key.Id.ToString().ToLower())) .Where(x => x.GameMode.Equals(gameMode)) .FirstOrDefault(); rating.Mean = playerWithRating.Value.Mean; rating.StandardDeviation = playerWithRating.Value.StandardDeviation; rating.ConservativeRating = playerWithRating.Value.ConservativeRating; } context.SaveChanges(); }
private void handleHelp(Command command, string channel) { StringBuilder sb = new StringBuilder(); sb.Append("*Commands:*\n"); sb.Append("> magic help\n"); sb.Append("> magic players\n"); sb.Append("> magic players add <name> [<name2>..<nameX>]\n"); sb.Append("> magic players stats <gamemode> (ffa, 1v1, 2v2, 2hg)\n"); sb.Append("> magic game ffa <winner:deck> <loser1:deck> <loser2:deck> [<loser3:deck>..<loserX:deck>]\n"); sb.Append("> magic game 1v1 <winner:deck> <loser:deck>\n"); sb.Append("> magic game 2v2 <winner1:deck> <winner2:deck> <loser1:deck> <loser2:deck>\n"); sb.Append("> magic game 2hg <winner1:deck> <winner2:deck> <loser1:deck> <loser2:deck>\n"); sb.Append("> magic random <player1> <player2> <player3> <player4>\n"); slackService.SendMessage(sb.ToString(), channel); }