コード例 #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
            });
        }
コード例 #2
0
        private bool HandleAttemptForTimeCondition(Condition condition, PlayerCareer playerCareer)
        {
            bool     attemptResult   = false;
            DateTime attemptDateTime = (DateTime.Now).RoundDateTime();

#warning TODO: handle Condition_Time
            if (true)
            {
                attemptResult = true;

                SuccessfulPlayerAttempt newSuccessfullAttempt = new SuccessfulPlayerAttempt()
                {
                    AttemptDateTime = attemptDateTime,
                    ConditionId     = condition.Id,
                    InputedValue    = String.Empty,
                    PlayerCareerId  = playerCareer.Id
                };
                SuccessfullPlayerAttemptRepository.Insert(newSuccessfullAttempt);

                IList <long> userCompleterIds = new List <long>();

                #region Creating Statistic entities

                List <DateTime> previousTaskEndDTs = TeamGameTaskStatisticRepository.GetAll()
                                                     .Where(r => r.TeamId == playerCareer.TeamId)
                                                     .Select(r => r.GameTaskEndDateTime)
                                                     .Distinct().ToList();
                DateTime gameTaskStartTime = previousTaskEndDTs.Count > 0 ? previousTaskEndDTs.Max() : condition.GameTask.Game.StartDate;

                IList <PlayerGameTaskStatistic> newPlayerGameTaskStatistics = new List <PlayerGameTaskStatistic>();
                foreach (var item in playerCareer.Team.PlayerCareers)
                {
                    newPlayerGameTaskStatistics.Add(new PlayerGameTaskStatistic(condition.GameTaskId,
                                                                                item.Id, gameTaskStartTime, attemptDateTime, (condition.Points ?? 0)));
                    userCompleterIds.Add(item.UserId);
                }
                PlayerGameTaskStatisticRepository.AddRange(newPlayerGameTaskStatistics);

                TeamGameTaskStatistic newTeamGameTaskStatistic = new TeamGameTaskStatistic(condition.GameTaskId,
                                                                                           playerCareer.TeamId, gameTaskStartTime, attemptDateTime, (condition.Points ?? 0));
                TeamGameTaskStatisticRepository.Insert(newTeamGameTaskStatistic);

                #endregion

                UowManager.Current.Completed += (sender, e) =>
                {
                    StatisticsChangesNotifier.RaiseOnGameTaskCompleted(new GameTaskCompletedMessage(condition.GameTaskId, userCompleterIds));
                };
            }
            return(attemptResult);
        }
コード例 #3
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
        }