Esempio n. 1
0
        public void CompleteQuest(int id, QuestCompletionDto completionData)
        {
            var quest = ldmeContext.Quests.Include(q => q.QuestOwner).Single(x => x.Id == id);

            if (quest.QuestOwnerId != completionData.CopletedBy ||
                quest.QuestCreatorId != completionData.CopletedBy)
            {
                throw new Exception("Only owner or creator of this quest can complete it");
            }

            if (!quest.Accepted)
            {
                throw new Exception("Cannot complete not accepted quest");
            }

            if (quest.DeadlineDate.HasValue && (
                    (completionData.CompletionDate.HasValue && quest.DeadlineDate.Value < completionData.CompletionDate) ||
                    quest.DeadlineDate.Value < DateTime.UtcNow))
            {
                throw new Exception("Cannot complete quest after its deadline");
            }

            if (quest.FinishedDate.HasValue)
            {
                throw new Exception("Cannot complete already finished quest");
            }

            if (quest.QuestType == QuestType.Daily)
            {
                ldmeContext.Repetitions.Add(new Repetition
                {
                    CompletionDate  = completionData.CompletionDate ?? DateTime.UtcNow,
                    GoldGain        = quest.GoldReward,
                    HonorGain       = quest.HonorReward,
                    ReferencedQuest = quest,
                    TagingPlayerId  = completionData.CopletedBy
                });
            }
            else
            {
                quest.QuestState   = QuestState.Completed;
                quest.FinishedDate = completionData.CompletionDate ?? DateTime.UtcNow;
            }

            var questOwner = quest.QuestOwner;

            questOwner.Gold  += quest.GoldReward;
            questOwner.Honor += quest.HonorReward;
        }
Esempio n. 2
0
        public void CompleteQuest(int id, QuestCompletionDto completionData)
        {
            var quest = questRepository.GetQuest(id);

            if (quest.QuestOwnerId != completionData.CopletedBy ||
                quest.QuestCreatorId != completionData.CopletedBy)
            {
                throw new Exception("Only owner or creator of this quest can complete it");
            }

            if (!quest.Accepted)
            {
                throw new Exception("Cannot complete not accepted quest");
            }

            if (quest.DeadlineDate.HasValue && (
                    (completionData.CompletionDate.HasValue && quest.DeadlineDate.Value < completionData.CompletionDate) ||
                    quest.DeadlineDate.Value < DateTime.UtcNow))
            {
                throw new Exception("Cannot complete quest after its deadline");
            }

            if (quest.FinishedDate.HasValue)
            {
                throw new Exception("Cannot complete already finished quest");
            }

            var questOwner = quest.QuestOwner;

            if (quest.QuestType == QuestType.Daily)
            {
                var rep = repRepository.CreateRepetition(quest, completionData.CopletedBy);

                questOwner.Gold  += rep.GoldGain;
                questOwner.Honor += quest.HonorReward;
            }
            else
            {
                quest.QuestState   = QuestState.Completed;
                quest.FinishedDate = completionData.CompletionDate ?? DateTime.UtcNow;

                questOwner.Gold  += quest.GoldReward;
                questOwner.Honor += quest.HonorReward;
            }

            questRepository.SaveChanges();
        }
Esempio n. 3
0
        public IActionResult Post(int id, [FromBody] QuestCompletionDto completionData)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _logger.LogDebug("Trying to complete quest");
                    questDomain.CompleteQuest(id, completionData);
                    return(Ok());
                }
                catch (Exception e)
                {
                    _logger.LogExceptions(e, this);
                    return(this.HandleErrors(e));
                }
            }

            return(BadRequest(new ErrorDto(ModelState)));
        }