示例#1
0
        public ActionResult UpdatePlayerInfo()
        {
            var tournaments = ApiCaller.CallTournamentApi();

            foreach (var tournament in tournaments)
            {
                if (tournament.completed_at == null)
                {
                    continue;
                }

                if (!tournament.game_name.Equals("Super Smash Bros. Melee"))
                {
                    continue;
                }

                var participants = ApiCaller.CallParticipantApi(tournament.id);

                foreach (var participant in participants)
                {
                    var player = _context.Players.SingleOrDefault(
                        p => p.Name.ToLower().Equals(participant.name.ToLower()));
                    if (player == null)
                    {
                        continue;
                    }
                    var updateSetWinCheck  = player.SetWins;
                    var updateSetLoseCheck = player.SetLoses;

                    var current = _context.CurrentPlayers.SingleOrDefault(
                        c => c.Name.ToLower().Equals(participant.name.ToLower()));
                    if (current == null)
                    {
                        continue;
                    }

                    if (player.LastUpdated.HasValue)
                    {
                        if (player.LastUpdated >= tournament.completed_at)
                        {
                            continue;
                        }
                    }

                    if (current.LastUpdated.HasValue)
                    {
                        if (current.LastUpdated >= tournament.completed_at)
                        {
                            continue;
                        }
                    }

                    // Helps give edge to Second place over Third
                    if (participant.final_rank == 2)
                    {
                        player.Bonus  = 5;
                        current.Bonus = 5;
                    }

                    var matches = ApiCaller.CallMatchApi(tournament.id, participant.id);

                    foreach (var match in matches)
                    {
                        // Helps track index used to get score for scores array
                        var winningScoreId = 0;
                        var losingScoreId  = 1;
                        if (participant.id == match.player2_id)
                        {
                            winningScoreId = 1;
                            losingScoreId  = 0;
                        }

                        //Get Split Scores into an int[]
                        int[] scores = Array.ConvertAll(match.scores_csv.Split('-'), Int32.Parse);
                        if (participant.id == match.winner_id)
                        {
                            player.SetWins++;
                            current.SetWins++;

                            player.MatchWins   += scores[winningScoreId];
                            player.MatchLoses  += scores[losingScoreId];
                            current.MatchWins  += scores[winningScoreId];
                            current.MatchLoses += scores[losingScoreId];
                        }
                        else if (participant.id == match.loser_id)
                        {
                            player.SetLoses++;
                            current.SetLoses++;

                            player.MatchWins   += scores[winningScoreId];
                            player.MatchLoses  += scores[losingScoreId];
                            current.MatchWins  += scores[winningScoreId];
                            current.MatchLoses += scores[losingScoreId];
                        }
                    }

                    if (player.SetWins == updateSetWinCheck && player.SetLoses == updateSetLoseCheck)
                    {
                        continue;
                    }

                    player.LastUpdated  = tournament.completed_at;
                    current.LastUpdated = tournament.completed_at;
                    player.LastUpdated  = player.LastUpdated.Value.AddMinutes(1);
                    current.LastUpdated = player.LastUpdated.Value.AddMinutes(1);

                    _context.SaveChanges();
                }
            }

            foreach (var player in _context.Players)
            {
                var power = Convert.ToInt32(CalculatePowerRank(player.SetWins, player.SetLoses,
                                                               player.MatchWins, player.MatchLoses));

                player.PowerRank  = power;
                player.PowerRank += player.Bonus;
                player.Bonus      = 0;
            }

            foreach (var player in _context.CurrentPlayers)
            {
                var power = Convert.ToInt32(CalculatePowerRank(player.SetWins, player.SetLoses,
                                                               player.MatchWins, player.MatchLoses));

                player.PowerRank  = power;
                player.PowerRank += player.Bonus;
                player.Bonus      = 0;
            }

            _context.SaveChanges();

            return(RedirectToAction("Index", "Home"));
        }