Ejemplo n.º 1
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalDistinctHardcoreGamesThatTakeALongTime =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId &&
                       ((((x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.MinPlayTime ?? 0)
                          + (x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.MaxPlayTime ?? 0)) / 2) >= THREE_HOURS_WORTH_OF_MINUTES) &&
                       x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                       >= WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_HARDCORE)
                .Select(x => x.PlayedGame.GameDefinitionId)
                .Distinct()
                .ToList();

            result.PlayerProgress  = totalDistinctHardcoreGamesThatTakeALongTime.Count;
            result.RelatedEntities = totalDistinctHardcoreGamesThatTakeALongTime.ToList();
            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded =
                LevelThresholds.OrderByDescending(l => l.Value)
                .FirstOrDefault(l => l.Value <= result.PlayerProgress)
                .Key;
            return(result);
        }
Ejemplo n.º 2
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var yearsOfGamesPlayed =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId && x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.YearPublished != null)
                .GroupBy(x => x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.YearPublished)
                .Select(y => y.Key)
                .ToList();

            result.PlayerProgress = yearsOfGamesPlayed.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 3
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalTeamLosses =
                DataContext
                    .GetQueryable<PlayedGame>()
                    .Where(x => x.PlayerGameResults.Any(player => player.PlayerId == playerId)
                        && x.WinnerType == WinnerTypes.TeamLoss)
                    .Select(x => x.Id)
                    .ToList();

            result.PlayerProgress = totalTeamLosses.Count;
            result.RelatedEntities = totalTeamLosses.ToList();
            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded =
                LevelThresholds.OrderByDescending(l => l.Value)
                    .FirstOrDefault(l => l.Value <= result.PlayerProgress)
                    .Key;
            return result;
        }
Ejemplo n.º 4
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var categoryGames =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId
                                && x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.Mechanics.Any(o => o.MechanicName == MechanicName))
                    .Select(x => x.PlayedGame.GameDefinitionId)
                    .Distinct()
                    .ToList();

            result.PlayerProgress = categoryGames.Count;
            result.RelatedEntities = categoryGames.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 5
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var minions = DataContext.GetQueryable<Nemesis>()
                .Include(n => n.MinionPlayer)
                .Where(n => n.NemesisPlayerId == playerId && n.MinionPlayer.NemesisId == n.Id)
                .Select(n => n.MinionPlayerId).
                ToList();



            result.PlayerProgress = minions.Count;
            result.RelatedEntities = minions;


            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return result;
        }
Ejemplo n.º 6
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var gamesPlayed =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(pgr => pgr.PlayerId == playerId &&
                       ((pgr.PlayedGame.DatePlayed.Month == 12 && pgr.PlayedGame.DatePlayed.Day >= 24) ||
                        (pgr.PlayedGame.DatePlayed.Month == 1 && pgr.PlayedGame.DatePlayed.Day == 1)))
                .Select(pg => pg.PlayedGameId).ToList();

            result.RelatedEntities = gamesPlayed;
            result.PlayerProgress  = gamesPlayed.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 7
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allTeamGameIds =
                DataContext
                .GetQueryable <PlayedGame>()
                .Where(x => (x.WinnerType == WinnerTypes.TeamLoss || x.WinnerType == WinnerTypes.TeamWin) &&
                       x.PlayerGameResults.Any(y => y.PlayerId == playerId))
                .Select(z => z.Id)
                .Distinct()
                .ToList();

            result.PlayerProgress  = allTeamGameIds.Count;
            result.RelatedEntities = allTeamGameIds;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 8
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allNickeledGameIds =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId)
                    .GroupBy(x => x.PlayedGame.GameDefinitionId)
                    .Select(group => new { group.Key, Count = group.Count() })
                    .Where(a => a.Count >= 5)
                    .ToList();

            result.PlayerProgress = allNickeledGameIds.Count();
            result.RelatedEntities = allNickeledGameIds.Select(y => y.Key).ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return result;
        }
Ejemplo n.º 9
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var revengedPlayerIds =
                DataContext
                .GetQueryable <Nemesis>()
                .Where(nem => nem.NemesisPlayerId == playerId &&
                       nem.NemesisPlayer.CurrentAndPriorNemeses.Any(
                           min => min.NemesisPlayerId == nem.MinionPlayerId &&
                           min.DateCreated < nem.DateCreated))
                .Select(nem => nem.MinionPlayerId)
                .Distinct()
                .ToList();

            result.RelatedEntities = revengedPlayerIds;
            result.PlayerProgress  = revengedPlayerIds.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 10
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var gamesPlayed =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(pgr => pgr.PlayerId == playerId
                                  && ((pgr.PlayedGame.DatePlayed.Month == 12 && pgr.PlayedGame.DatePlayed.Day >= 24)
                                      || (pgr.PlayedGame.DatePlayed.Month == 1 && pgr.PlayedGame.DatePlayed.Day == 1)))
                    .Select(pg => pg.PlayedGameId).ToList();

            result.RelatedEntities = gamesPlayed;
            result.PlayerProgress = gamesPlayed.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 11
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var categoryGames =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId &&
                       x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.Categories.Any(o => o.CategoryName == CategoryName))
                .Select(x => x.PlayedGame.GameDefinitionId)
                .Distinct()
                .ToList();

            result.PlayerProgress  = categoryGames.Count;
            result.RelatedEntities = categoryGames.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 12
0
        private void CreateOrUpdateAchievement(Player player, IAchievement achievement, PlayerAchievement currentPlayerAchievement,
                                               AchievementAwarded achievementAwarded)
        {
            if (currentPlayerAchievement == null)
            {
                var playerAchievement = new PlayerAchievement
                {
                    DateCreated      = DateTime.UtcNow,
                    LastUpdatedDate  = DateTime.UtcNow,
                    PlayerId         = player.Id,
                    AchievementId    = achievement.Id,
                    AchievementLevel = achievementAwarded.LevelAwarded.Value,
                    RelatedEntities  = achievementAwarded.RelatedEntities
                };

                _dataContext.Save(playerAchievement, new AnonymousApplicationUser());
                _dataContext.CommitAllChanges();

                NotifyPlayer(player, achievement, achievementAwarded.LevelAwarded);
            }
            else
            {
                currentPlayerAchievement.RelatedEntities = achievementAwarded.RelatedEntities;

                if ((int)achievementAwarded.LevelAwarded.Value > (int)currentPlayerAchievement.AchievementLevel)
                {
                    currentPlayerAchievement.AchievementLevel = achievementAwarded.LevelAwarded.Value;
                    currentPlayerAchievement.LastUpdatedDate  = DateTime.UtcNow;
                    _dataContext.AdminSave(currentPlayerAchievement);
                    _dataContext.CommitAllChanges();

                    NotifyPlayer(player, achievement, achievementAwarded.LevelAwarded);
                }
            }
        }
Ejemplo n.º 13
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalPoints =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(pgr => pgr.PlayerId == playerId)
                .Select(pg => pg.TotalPoints)
                .DefaultIfEmpty(0)
                .Sum();


            result.PlayerProgress = totalPoints;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(totalPoints);
            return(result);
        }
Ejemplo n.º 14
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var playerHasAWin = DataContext.GetQueryable <PlayerGameResult>().Any(x => x.PlayerId == playerId && x.GameRank == 1);

            if (playerHasAWin)
            {
                return(result);
            }

            //TODO how to combine this into a single query with the previous query?
            var numberOfGamesWithoutWinning =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(y => y.PlayerId == playerId)
                .Select(pg => pg.PlayedGameId);

            result.PlayerProgress  = numberOfGamesWithoutWinning.Count();
            result.RelatedEntities = numberOfGamesWithoutWinning.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 15
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalDistinctHardcoreGamesThatTakeALongTime =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId
                                && ((((x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.MinPlayTime ?? 0)
                                        + (x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.MaxPlayTime ?? 0)) / 2) >= THREE_HOURS_WORTH_OF_MINUTES)
                                && x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                                >= WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_HARDCORE)
                    .Select(x => x.PlayedGame.GameDefinitionId)
                    .Distinct()
                    .ToList();

            result.PlayerProgress = totalDistinctHardcoreGamesThatTakeALongTime.Count;
            result.RelatedEntities = totalDistinctHardcoreGamesThatTakeALongTime.ToList();
            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded =
                LevelThresholds.OrderByDescending(l => l.Value)
                    .FirstOrDefault(l => l.Value <= result.PlayerProgress)
                    .Key;
            return result;
        }
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };
            var startDate = new DateTime(Year, 1, 1);
            var endDate   = new DateTime(Year, 12, 31);

            var numberOfGamesWith10PlaysInYear =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(
                    x =>
                    x.PlayerId == playerId && x.PlayedGame.DatePlayed >= startDate &&
                    x.PlayedGame.DatePlayed <= endDate)
                .GroupBy(x => x.PlayedGame.GameDefinitionId)
                .Select(group => new { group.Key, Count = group.Count() })
                .Where(x => x.Count >= 10)
                .Select(s => s.Key)
                .ToList();

            result.PlayerProgress = numberOfGamesWith10PlaysInYear.Count;
            if (result.PlayerProgress == LevelThresholds[AchievementLevel.Gold])
            {
                result.RelatedEntities = numberOfGamesWith10PlaysInYear;
                result.LevelAwarded    = AchievementLevel.Gold;
            }
            return(result);
        }
Ejemplo n.º 17
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalPoints =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(pgr => pgr.PlayerId == playerId)
                    .Select(pg => pg.TotalPoints)
                    .DefaultIfEmpty(0)
                    .Sum();

            
            result.PlayerProgress = totalPoints;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(totalPoints);
            return result;
        }
Ejemplo n.º 18
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allNickeledGameIds =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId)
                .GroupBy(x => x.PlayedGame.GameDefinitionId)
                .Select(group => new { group.Key, Count = group.Count() })
                .Where(a => a.Count >= 5)
                .ToList();

            result.PlayerProgress  = allNickeledGameIds.Count();
            result.RelatedEntities = allNickeledGameIds.Select(y => y.Key).ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 19
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allTeamGameIds =
                DataContext
                    .GetQueryable<PlayedGame>()
                    .Where(x => (x.WinnerType == WinnerTypes.TeamLoss || x.WinnerType == WinnerTypes.TeamWin)
                                && x.PlayerGameResults.Any(y => y.PlayerId == playerId))
                    .Select(z => z.Id)
                    .Distinct()
                    .ToList();

            result.PlayerProgress = allTeamGameIds.Count;
            result.RelatedEntities = allTeamGameIds;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
               
            return result;
        }
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };
            var startDate = new DateTime(Year, 1, 1);
            var endDate = new DateTime(Year, 12, 31);

            var numberOfGamesWith10PlaysInYear =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(
                        x =>
                            x.PlayerId == playerId && x.PlayedGame.DatePlayed >= startDate &&
                            x.PlayedGame.DatePlayed <= endDate)
                    .GroupBy(x => x.PlayedGame.GameDefinitionId)
                    .Select(group => new { group.Key, Count = group.Count() })
                    .Where(x => x.Count >= 10)
                    .Select(s => s.Key)
                    .ToList();

            result.PlayerProgress = numberOfGamesWith10PlaysInYear.Count();
            if (result.PlayerProgress == LevelThresholds[AchievementLevel.Gold])
            {
                result.RelatedEntities = numberOfGamesWith10PlaysInYear;
                result.LevelAwarded = AchievementLevel.Gold;
            }
            return result;
        }
Ejemplo n.º 21
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var revengedPlayerIds =
                DataContext
                    .GetQueryable<Nemesis>()
                    .Where(nem => nem.NemesisPlayerId == playerId
                                  && nem.NemesisPlayer.CurrentAndPriorNemeses.Any(
                                      min => min.NemesisPlayerId == nem.MinionPlayerId
                                             && min.DateCreated < nem.DateCreated))
                    .Select(nem => nem.MinionPlayerId)
                    .Distinct()
                    .ToList();

            result.RelatedEntities = revengedPlayerIds;
            result.PlayerProgress = revengedPlayerIds.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 22
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayerIdsPlayedWith =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayedGame.PlayerGameResults.Any(y => y.PlayerId == playerId) && x.PlayerId != playerId)
                .Select(z => z.PlayerId)
                .Distinct()
                .ToList();

            result.PlayerProgress  = allPlayerIdsPlayedWith.Count;
            result.RelatedEntities = allPlayerIdsPlayedWith;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 23
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var totalTeamLosses =
                DataContext
                .GetQueryable <PlayedGame>()
                .Where(x => x.PlayerGameResults.Any(player => player.PlayerId == playerId) &&
                       x.WinnerType == WinnerTypes.TeamLoss)
                .Select(x => x.Id)
                .ToList();

            result.PlayerProgress  = totalTeamLosses.Count;
            result.RelatedEntities = totalTeamLosses.ToList();
            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded =
                LevelThresholds.OrderByDescending(l => l.Value)
                .FirstOrDefault(l => l.Value <= result.PlayerProgress)
                .Key;
            return(result);
        }
Ejemplo n.º 24
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var yearsOfGamesPlayed =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId && x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.YearPublished != null)
                    .GroupBy(x => x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.YearPublished)
                    .Select(y => y.Key)
                    .ToList();

            result.PlayerProgress = yearsOfGamesPlayed.Count();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 25
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var minions = DataContext.GetQueryable <Nemesis>()
                          .Include(n => n.MinionPlayer)
                          .Where(n => n.NemesisPlayerId == playerId && n.MinionPlayer.NemesisId == n.Id)
                          .Select(n => n.MinionPlayerId).
                          ToList();



            result.PlayerProgress  = minions.Count;
            result.RelatedEntities = minions;


            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 26
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var numberOfGamesAsSoleWinner =
                DataContext
                .GetQueryable <PlayedGame>()
                .Where(x => x.PlayerGameResults.Any(y => y.PlayerId == playerId && y.GameRank == 1) &&
                       !x.PlayerGameResults.Any(y => y.PlayerId != playerId && y.GameRank == 1) &&
                       x.NumberOfPlayers >= 10)
                .Select(g => g.Id);

            result.PlayerProgress  = numberOfGamesAsSoleWinner.Count();
            result.RelatedEntities = numberOfGamesAsSoleWinner.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 27
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId )
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var numberOfGamesAsSoleWinner =
                DataContext
                    .GetQueryable<PlayedGame>()
                    .Where(x => x.PlayerGameResults.Any(y => y.PlayerId == playerId && y.GameRank == 1)
                                && !x.PlayerGameResults.Any(y => y.PlayerId != playerId && y.GameRank == 1)
                                && x.NumberOfPlayers >= 10)
                    .Select(g => g.Id);

            result.PlayerProgress = numberOfGamesAsSoleWinner.Count();
            result.RelatedEntities = numberOfGamesAsSoleWinner.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayerIdsPlayedWith =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayedGame.PlayerGameResults.Any(y => y.PlayerId == playerId) && x.PlayerId != playerId)
                    .Select(z => z.PlayerId)
                    .Distinct()
                    .ToList();

            result.PlayerProgress = allPlayerIdsPlayedWith.Count;
            result.RelatedEntities = allPlayerIdsPlayedWith;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
               
            return result;
        }
Ejemplo n.º 29
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var playerHasAWin = DataContext.GetQueryable<PlayerGameResult>().Any(x => x.PlayerId == playerId && x.GameRank == 1);

            if (playerHasAWin)
            {
                return result;
            }

            //TODO how to combine this into a single query with the previous query?
            var numberOfGamesWithoutWinning =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(y => y.PlayerId == playerId)
                    .Select(pg => pg.PlayedGameId);

            result.PlayerProgress = numberOfGamesWithoutWinning.Count();
            result.RelatedEntities = numberOfGamesWithoutWinning.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 30
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayedGameIdsWherePlayerRankedSecond =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId && x.GameRank == 2 && x.PointsScored != null)
                .Select(x => x.PlayedGameId)
                .ToList();

            var gamesWherePlayerRankedSecondRankTwo =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId && x.GameRank == 2 && x.PointsScored != null)
                .Select(x => new GameScores()
            {
                PlayedGameId = x.PlayedGameId, GameRank = x.GameRank, PointsScored = x.PointsScored
            })
                .ToList();

            var gamesWherePlayerRankedSecondRankOne =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => allPlayedGameIdsWherePlayerRankedSecond.Contains(x.PlayedGameId) && x.GameRank == 1 && x.PointsScored != null)
                .Select(x => new GameScores()
            {
                PlayedGameId = x.PlayedGameId, GameRank = x.GameRank, PointsScored = x.PointsScored
            })
                .ToList();

            var combinedList =
                from rankOne in gamesWherePlayerRankedSecondRankOne
                join rankTwo in gamesWherePlayerRankedSecondRankTwo on rankOne.PlayedGameId equals rankTwo.PlayedGameId
                where (rankOne.PointsScored - rankTwo.PointsScored.Value) == 1
                select rankOne.PlayedGameId;

            result.PlayerProgress  = combinedList.Count();
            result.RelatedEntities = combinedList.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 31
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            if (this.Winners.Value.Any(w => w.PlayerId == playerId))
            {
                result.PlayerProgress = 1;
                result.LevelAwarded   = AchievementLevel.Gold;
            }
            return(result);
        }
Ejemplo n.º 32
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {

            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            if (this.Winners.Value.Any(w => w.PlayerId == playerId))
            {
                result.PlayerProgress = 1;
                result.LevelAwarded = AchievementLevel.Gold;
            }
            return result;
        }
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var thisPlayerEarnedTheAchievement = DataContext.GetQueryable <PlayerAchievement>().Any(x => x.PlayerId == playerId && x.AchievementId == AchievementId.Collaborator);

            if (thisPlayerEarnedTheAchievement)
            {
                result.PlayerProgress = 1;
                result.LevelAwarded   = AchievementLevel.Gold;
            }
            return(result);
        }
Ejemplo n.º 34
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayedGameIdsWherePlayerRankedSecond =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId && x.GameRank == 2 && x.PointsScored != null)
                    .Select(x => x.PlayedGameId)
                    .ToList();

            var gamesWherePlayerRankedSecondRankTwo =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId && x.GameRank == 2 && x.PointsScored != null)
                    .Select(x => new GameScores() { PlayedGameId = x.PlayedGameId, GameRank = x.GameRank, PointsScored = x.PointsScored } )
                    .ToList();

            var gamesWherePlayerRankedSecondRankOne =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => allPlayedGameIdsWherePlayerRankedSecond.Contains(x.PlayedGameId) && x.GameRank == 1 && x.PointsScored != null )
                    .Select(x => new GameScores() { PlayedGameId = x.PlayedGameId, GameRank = x.GameRank, PointsScored = x.PointsScored })
                    .ToList();

            var combinedList =
                from rankOne in gamesWherePlayerRankedSecondRankOne
                join rankTwo in gamesWherePlayerRankedSecondRankTwo on rankOne.PlayedGameId equals rankTwo.PlayedGameId
                where (rankOne.PointsScored - rankTwo.PointsScored.Value) == 1
                select rankOne.PlayedGameId;

            result.PlayerProgress = combinedList.Count();
            result.RelatedEntities = combinedList.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 35
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allWeightedGames =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId)
                    .GroupBy(x => new {
                        WeightTier = x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                                        < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_EASY ? WeightTierEnum.Casual :
                                        x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                                        < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_ADVANCED ? WeightTierEnum.Easy :
                                        x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                                        < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_CHALLENGING ? WeightTierEnum.Challenging :
                                        x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                                        < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_HARDCORE ? WeightTierEnum.Advanced :
                                        WeightTierEnum.Hardcore
                    })
                    .Select(group => new { group.Key, Count = group.Count() })
                    .ToList();

            var noUnknownGames =
                (from item in allWeightedGames
                    where item.Key.WeightTier != WeightTierEnum.Unknown
                    select item).ToList();
                

            if (noUnknownGames.Count() == 5)
            {
                result.PlayerProgress = noUnknownGames.Min(p => p.Count);
            }
            else
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return result;
        }
Ejemplo n.º 36
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allWeightedGames =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId)
                .GroupBy(x => new {
                WeightTier = x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                             < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_EASY ? WeightTierEnum.Casual :
                             x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                             < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_ADVANCED ? WeightTierEnum.Easy :
                             x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                             < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_CHALLENGING ? WeightTierEnum.Challenging :
                             x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight
                             < WeightTierCalculator.BOARD_GAME_GEEK_WEIGHT_INCLUSIVE_LOWER_BOUND_FOR_HARDCORE ? WeightTierEnum.Advanced :
                             WeightTierEnum.Hardcore
            })
                .Select(group => new { group.Key, Count = group.Count() })
                .ToList();

            var noUnknownGames =
                (from item in allWeightedGames
                 where item.Key.WeightTier != WeightTierEnum.Unknown
                 select item).ToList();


            if (noUnknownGames.Count() == 5)
            {
                result.PlayerProgress = noUnknownGames.Min(p => p.Count);
            }
            else
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 37
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var longestWinStreak = _entityFrameworkPlayerRepository.GetLongestWinningStreak(playerId, DataContext);

            result.PlayerProgress = longestWinStreak;

            if (longestWinStreak < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(longestWinStreak);
            return(result);
        }
Ejemplo n.º 38
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var longestWinStreak = _entityFrameworkPlayerRepository.GetLongestWinningStreak(playerId);
            result.PlayerProgress = longestWinStreak;

            if (longestWinStreak < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(longestWinStreak);
            return result;
        }
Ejemplo n.º 39
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var gamesForUsurperAchievement = _championRepository.GetUsurperAchievementData(playerId);

            result.RelatedEntities = gamesForUsurperAchievement;
            result.PlayerProgress  = gamesForUsurperAchievement.Count;

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 40
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var player = DataContext.GetQueryable<Player>().FirstOrDefault(p => p.Id == playerId);

            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            if (player != null)
            {

                var nemePointsDictionary = (from playerGameResult in DataContext.GetQueryable<PlayerGameResult>()
                                            where playerGameResult.PlayedGame.GamingGroupId == player.GamingGroupId
                                            group playerGameResult by playerGameResult.PlayerId
                    into groupedResults
                                            select
                                                new
                                                {
                                                    BasePoints = groupedResults.Sum(x => x.NemeStatsPointsAwarded),
                                                    GameDurationBonusPoints = groupedResults.Sum(x => x.GameDurationBonusPoints),
                                                    WeightBonusPoints = groupedResults.Sum(x => x.GameWeightBonusPoints),
                                                    PlayerId = groupedResults.Key
                                                }).ToDictionary(key => key.PlayerId,
                            value =>
                                new NemePointsSummary(value.BasePoints, value.GameDurationBonusPoints,
                                    value.WeightBonusPoints))
                    .OrderByDescending(r => r.Value.TotalPoints);

                if (nemePointsDictionary.First().Key == player.Id && nemePointsDictionary.First().Value.TotalPoints >= MinNemePointsToUnlock)
                {
                    result.LevelAwarded = LevelThresholds.First().Key;
                    result.PlayerProgress = 1;

                }
            }

            return result;
        }
Ejemplo n.º 41
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = this.Id
            };

            var differentPlayedGames =
                DataContext.GetQueryable <PlayerGameResult>()
                .Where(pgr => pgr.PlayerId == playerId)
                .Select(pgr => pgr.PlayedGame.GameDefinition.Id)
                .Distinct()
                .ToList();

            if (differentPlayedGames.Any())
            {
                var count = differentPlayedGames.Count;
                result.PlayerProgress  = count;
                result.LevelAwarded    = GetLevelAwarded(count);
                result.RelatedEntities = differentPlayedGames.ToList();
            }
            return(result);
        }
Ejemplo n.º 42
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allWeightedGames =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId)
                .GroupBy(x => new {
                // World's best change
                WeightTier = WeightTierCalculator.GetTheRealWeightTier(x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.AverageWeight)
            })
                .Select(group => new { group.Key, Count = group.Count() })
                .ToList();

            var noUnknownGames =
                (from item in allWeightedGames
                 where item.Key.WeightTier != WeightTierEnum.Unknown
                 select item).ToList();


            if (noUnknownGames.Count == 5)
            {
                result.PlayerProgress = noUnknownGames.Min(p => p.Count);
            }
            else
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);

            return(result);
        }
Ejemplo n.º 43
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayedGamesWithCategories =
                DataContext
                .GetQueryable <PlayerGameResult>()
                .Where(x => x.PlayerId == playerId)
                .Select(x => x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.Categories)
                .Where(y => y.Count != 0)
                .ToList();

            // Brute forced, could not figure out LINQ query for this. Probably needs cleaning up.
            List <string> finalCategoryList = new List <string>();

            foreach (var subList in allPlayedGamesWithCategories)
            {
                foreach (var subSubList in subList)
                {
                    finalCategoryList.Add(subSubList.CategoryName);
                }
            }

            result.PlayerProgress = finalCategoryList.Distinct().Count();
            //result.RelatedEntities = allPlayedCategories.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return(result);
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return(result);
        }
Ejemplo n.º 44
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var player = DataContext.GetQueryable <Player>().FirstOrDefault(p => p.Id == playerId);

            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            if (player != null)
            {
                var nemePointsDictionary = (from playerGameResult in DataContext.GetQueryable <PlayerGameResult>()
                                            where playerGameResult.PlayedGame.GamingGroupId == player.GamingGroupId
                                            group playerGameResult by playerGameResult.PlayerId
                                            into groupedResults
                                            select
                                            new
                {
                    BasePoints = groupedResults.Sum(x => x.NemeStatsPointsAwarded),
                    GameDurationBonusPoints = groupedResults.Sum(x => x.GameDurationBonusPoints),
                    WeightBonusPoints = groupedResults.Sum(x => x.GameWeightBonusPoints),
                    PlayerId = groupedResults.Key
                }).ToDictionary(key => key.PlayerId,
                                value =>
                                new NemePointsSummary(value.BasePoints, value.GameDurationBonusPoints,
                                                      value.WeightBonusPoints))
                                           .OrderByDescending(r => r.Value.TotalPoints);

                if (nemePointsDictionary.First().Key == player.Id && nemePointsDictionary.First().Value.TotalPoints >= MinNemePointsToUnlock)
                {
                    result.LevelAwarded   = LevelThresholds.First().Key;
                    result.PlayerProgress = 1;
                }
            }

            return(result);
        }
Ejemplo n.º 45
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = this.Id
            };

            var championedGames =
                DataContext.GetQueryable <Champion>()
                .Where(c => c.PlayerId == playerId)
                .Select(c => c.GameDefinitionId)
                .Distinct()
                .ToList();

            if (championedGames.Any())
            {
                var count = championedGames.Count;
                result.LevelAwarded    = GetLevelAwarded(count);
                result.PlayerProgress  = count;
                result.RelatedEntities = championedGames.ToList();
            }

            return(result);
        }
Ejemplo n.º 46
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {

            var result = new AchievementAwarded
            {
                AchievementId = this.Id
            };

            var differentPlayedGames =
                DataContext.GetQueryable<PlayerGameResult>()
                    .Where(pgr => pgr.PlayerId == playerId)
                    .Select(pgr => pgr.PlayedGame.GameDefinition.Id)
                    .Distinct()
                    .ToList();

            if (differentPlayedGames.Any())
            {
                var count = differentPlayedGames.Count;
                result.PlayerProgress = count;
                result.LevelAwarded = GetLevelAwarded(count);
                result.RelatedEntities = differentPlayedGames.ToList();
            }
            return result;
        }
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = Id
            };

            var allPlayedGamesWithCategories =
                DataContext
                    .GetQueryable<PlayerGameResult>()
                    .Where(x => x.PlayerId == playerId)
                    .Select(x => x.PlayedGame.GameDefinition.BoardGameGeekGameDefinition.Categories)
                    .Where(y => y.Count != 0)
                    .ToList();

            // Brute forced, could not figure out LINQ query for this. Probably needs cleaning up.
            List<string> finalCategoryList = new List<string>();
            foreach (var subList in allPlayedGamesWithCategories)
            {
                foreach (var subSubList in subList)
                {
                    finalCategoryList.Add(subSubList.CategoryName);
                }
            }

            result.PlayerProgress = finalCategoryList.Distinct().Count();
            //result.RelatedEntities = allPlayedCategories.ToList();

            if (result.PlayerProgress < LevelThresholds[AchievementLevel.Bronze])
            {
                return result;
            }

            result.LevelAwarded = GetLevelAwarded(result.PlayerProgress);
            return result;
        }
Ejemplo n.º 48
0
        public override AchievementAwarded IsAwardedForThisPlayer(int playerId)
        {
            var result = new AchievementAwarded
            {
                AchievementId = this.Id
            };

            var championedGames =
                DataContext.GetQueryable<Champion>()
                    .Where(c => c.PlayerId == playerId)
                    .Select(c => c.GameDefinitionId)
                    .Distinct()
                    .ToList();
            
            if (championedGames.Any())
            {
                var count = championedGames.Count;
                result.LevelAwarded = GetLevelAwarded(count);
                result.PlayerProgress = count;
                result.RelatedEntities = championedGames.ToList();
            }
            
            return result;
        }