Esempio n. 1
0
        public TryToPassConditionOutput TryToPassCondition(TryToPassConditionInput input)
        {
            bool result = false;

            #region Retrieving current player career

            UserRepository.Includes.Add(r => r.PlayerCareers);
            UserRepository.Includes.Add(r => r.PlayerCareers.Select(e => e.Team.PlayerCareers));

            PlayerCareer currCareer = UserRepository.Get(Session.UserId ?? 0)
                                      .PlayerCareers.Where(r => r.CareerDateEnd == null).SingleOrDefault();

            UserRepository.Includes.Clear();

            #endregion

            if (currCareer != null)
            {
                #region Retrieving current condition

                ConditionRepository.Includes.Add(r => r.GameTask.Game);
                ConditionRepository.Includes.Add(r => r.ConditionType);

                Condition currentCondition = ConditionRepository.Get(input.ConditionId);
                if (currentCondition == null || currentCondition.GameTask == null || currentCondition.GameTask.Game == null ||
                    !GamePolicy.CanRetrieveEntityLight(currentCondition.GameTask.Game))
                {
                    //throw new CityQuestPolicyException(CityQuestConsts.CQPolicyExceptionRetrieveDenied, "\"Game\"");
                    return(new TryToPassConditionOutput()
                    {
                        Result = result
                    });
                }

                ConditionRepository.Includes.Clear();

                #endregion

                IList <long> teamPlayerCareerIds        = currCareer.Team.PlayerCareers.Select(e => e.Id).ToList();
                bool         alreadyPassedThisCondition = TeamGameTaskStatisticRepository.GetAll()
                                                          .Where(r => r.TeamId == currCareer.TeamId && r.GameTaskId == currentCondition.GameTaskId).Count() != 0 ||
                                                          PlayerGameTaskStatisticRepository.GetAll()
                                                          .Where(r => teamPlayerCareerIds.Contains(r.PlayerCareerId) && r.GameTaskId == currentCondition.GameTaskId).Count() != 0;
                if (!alreadyPassedThisCondition)
                {
                    result = HandleAttempt(currentCondition, currCareer, input.Value);
                }
            }

            return(new TryToPassConditionOutput()
            {
                Result = result
            });
        }
Esempio n. 2
0
        private void HandleCalculatingGameStatistics(long gameId, DateTime gameStartTime, DateTime gameEndTime)
        {
            #region Checking\Deleting old game statistics
            // No way to have game statistics here if business process was not wrong
            // but ppl like to make incorrect DB changes using scripts (without CityQuest ui)
            // thats why would be better to check this here and delete.

            IList <PlayerGameStatistic> oldPlayerGameStatistics = PlayerGameStatisticRepository.GetAll().Where(r => r.GameId == gameId).ToList();

            if (oldPlayerGameStatistics.Count > 0)
            {
                //Log this WARNING
                PlayerGameStatisticRepository.RemoveRange(oldPlayerGameStatistics);
            }

            IList <TeamGameStatistic> oldTeamGameStatistics = TeamGameStatisticRepository.GetAll().Where(r => r.GameId == gameId).ToList();

            if (oldPlayerGameStatistics.Count > 0)
            {
                //Log this WARNING
                TeamGameStatisticRepository.RemoveRange(oldTeamGameStatistics);
            }

            #endregion

            #region Calculating game statistic for players

            PlayerGameTaskStatisticRepository.Includes.Add(r => r.GameTask);

            List <PlayerGameTaskStatistic> playerGameTaskStatistics = PlayerGameTaskStatisticRepository.GetAll()
                                                                      .Where(r => r.GameTask.GameId == gameId).ToList();

            IList <PlayerGameStatistic> newPlayerGameStatistics = new List <PlayerGameStatistic>();
            foreach (long playerCareerId in playerGameTaskStatistics.Select(r => r.PlayerCareerId).Distinct().ToList())
            {
#warning TODO: Calculate parameters here
                newPlayerGameStatistics.Add(new PlayerGameStatistic(gameId, playerCareerId, gameStartTime, gameEndTime,
                                                                    playerGameTaskStatistics.Select(r => r.ReceivedPoints ?? 0).Sum()));
            }
            PlayerGameStatisticRepository.AddRange(newPlayerGameStatistics);

            UowManager.Current.Completed += (sender, e) =>
            {
                StatisticsChangesNotifier.RaiseOnPlayerGameStatisticChanged(
                    new PlayerGameStatisticChangedMessage(gameId, playerGameTaskStatistics.Select(r => r.PlayerCareerId).Distinct().ToList()));
            };

            PlayerGameTaskStatisticRepository.Includes.Clear();

            #endregion

            #region Calculating game statistic for teams

            TeamGameTaskStatisticRepository.Includes.Add(r => r.GameTask);

            List <TeamGameTaskStatistic> teamGameTaskStatistics = TeamGameTaskStatisticRepository.GetAll()
                                                                  .Where(r => r.GameTask.GameId == gameId).ToList();

            IList <TeamGameStatistic> newTeamGameStatistics = new List <TeamGameStatistic>();
            foreach (long teamId in teamGameTaskStatistics.Select(r => r.TeamId).Distinct().ToList())
            {
#warning TODO: Calculate parameters here
                newTeamGameStatistics.Add(new TeamGameStatistic(gameId, teamId, gameStartTime, gameEndTime,
                                                                teamGameTaskStatistics.Select(r => r.ReceivedPoints ?? 0).Sum()));
            }
            TeamGameStatisticRepository.AddRange(newTeamGameStatistics);

            UowManager.Current.Completed += (sender, e) =>
            {
                StatisticsChangesNotifier.RaiseOnTeamGameStatisticChanged(
                    new TeamGameStatisticChangedMessage(gameId, teamGameTaskStatistics.Select(r => r.TeamId).Distinct().ToList()));
            };

            TeamGameTaskStatisticRepository.Includes.Clear();

            #endregion
        }