Beispiel #1
0
 public void Cant_start_quests_if_not_female_and_needs_female()
 {
     questStart.RequiredGender = (int)QuestStatics.Gender.Female;
     player.Gender             = PvPStatics.GenderMale;
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.False);
 }
Beispiel #2
0
 public void Cant_start_quests_if_level_too_high()
 {
     questStart.MinStartLevel = 3;
     player.Level             = 2;
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.False);
 }
Beispiel #3
0
 public void Cant_start_quests_if_quest_already_completed()
 {
     questPlayerStatuses.Add(new QuestPlayerStatus
     {
         QuestId = fakeTestId,
         Outcome = (int)QuestStatics.QuestOutcomes.Completed
     });
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.False);
 }
Beispiel #4
0
 public void Can_start_quests_if_quest_not_recently_failed()
 {
     questPlayerStatuses.Add(new QuestPlayerStatus
     {
         QuestId       = fakeTestId,
         Outcome       = (int)QuestStatics.QuestOutcomes.Failed,
         LastEndedTurn = turnNumber - QuestStatics.QuestFailCooldownTurnLength - 1
     });
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.True);
 }
Beispiel #5
0
        public void Can_start_quest_if_prerequisite_test_is_completed()
        {
            questStart.PrerequisiteQuest = 2;

            questPlayerStatuses.Add(new QuestPlayerStatus
            {
                QuestId = 2,
                Outcome = (int)QuestStatics.QuestOutcomes.Completed
            });

            Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                        Is.True);
        }
Beispiel #6
0
 public void Cant_start_quest_if_prerequisite_test_not_completed()
 {
     questStart.PrerequisiteQuest = 2;
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.False);
 }
Beispiel #7
0
 public void Cant_start_quests_that_are_not_live()
 {
     questStart.IsLive = false;
     Assert.That(QuestProcedures.PlayerCanBeginQuest(player, questStart, questPlayerStatuses, turnNumber),
                 Is.False);
 }
        public virtual ActionResult StartQuest(int Id)
        {
            var myMembershipId = User.Identity.GetUserId();

            if (PvPStatics.AnimateUpdateInProgress)
            {
                TempData["Error"]    = "Player update portion of the world update is still in progress.";
                TempData["SubError"] = "Try again a bit later when the update has progressed farther along.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId);

            // assert player is in an okay form to do this
            if (me.Mobility != PvPStatics.MobilityFull)
            {
                TempData["Error"] = "You must be animate in order to begin a quest.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            // assert that this player is not in a duel
            if (me.InDuel > 0)
            {
                TempData["Error"] = "You must finish your duel before you begin a quest.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            // assert that this player is not in a quest
            if (me.InQuest > 0)
            {
                TempData["Error"] = "You must finish your current quest before you start another.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            // assert player has not been in combat recently
            var lastAttackTimeAgo = Math.Abs(Math.Floor(me.GetLastCombatTimestamp().Subtract(DateTime.UtcNow).TotalMinutes));

            if (lastAttackTimeAgo < TurnTimesStatics.GetMinutesSinceLastCombatBeforeQuestingOrDuelling())
            {
                TempData["Error"]    = "You have been in combat too recently in order to begin this quest.";
                TempData["SubError"] = "You must stay out of combat for another " + (TurnTimesStatics.GetMinutesSinceLastCombatBeforeQuestingOrDuelling() - lastAttackTimeAgo) + " minutes.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            var questStart = QuestProcedures.GetQuest(Id);

            // assert player is in the correct place
            if (me.dbLocationName != questStart.Location)
            {
                TempData["Error"] = "You are not in the correct location to begin this quest.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            var gameTurnNum = PvPWorldStatProcedures.GetWorldTurnNumber();

            // assert player did not fail or abandon this quest too soon ago
            var lastTurnAttempted = QuestProcedures.GetLastTurnQuestEnded(me, questStart.Id);

            if (PvPWorldStatProcedures.GetWorldTurnNumber() - lastTurnAttempted < QuestStatics.QuestFailCooldownTurnLength)
            {
                TempData["Error"]    = "You recently failed or abandoned this quest.";
                TempData["SubError"] = "You must wait another " + (QuestStatics.QuestFailCooldownTurnLength - (gameTurnNum - lastTurnAttempted)) + " turns before you can attempt this quest again.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            var questPlayerStatuses = QuestProcedures.GetQuestPlayerStatuses(me);

            var canStartQuest = QuestProcedures.PlayerCanBeginQuest(me, questStart, questPlayerStatuses, gameTurnNum);

            // assert player meets level / game turn requirements for this quest
            if (!canStartQuest)
            {
                TempData["Error"] = "You do not meet all of the criteria to begin this quest.";
                return(RedirectToAction(MVC.PvP.Play()));
            }

            // all checks have passed; start the player on this quest
            QuestProcedures.PlayerBeginQuest(me, questStart);
            LocationLogProcedures.AddLocationLog(me.dbLocationName, "<span class='playerMediatingNotification'><b>" + me.GetFullName() + "</b> began the quest <b>" + questStart.Name + "</b> here.</span>");

            TempData["Result"] = "You started the quest " + questStart.Name + ".";
            return(RedirectToAction(MVC.Quest.Questing()));
        }