public virtual ActionResult AbandonConfirm() { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); // assert that this player is in a quest if (me.InQuest <= 0) { TempData["Error"] = "You are not in a quest."; return(RedirectToAction(MVC.PvP.Play())); } // assert player is not currently in a quest with an end state var state = QuestProcedures.GetQuestState(me.InQuestState); if (state.QuestEnds != null && state.QuestEnds.Any()) { TempData["Error"] = "It is too late to abandon this quest."; TempData["SubError"] = "You must accept the consequences of your actions, be they for good or ill!"; return(RedirectToAction(MVC.Quest.Questing())); } QuestProcedures.PlayerEndQuest(me, (int)QuestStatics.QuestOutcomes.Failed); TempData["Result"] = "You abandoned your quest."; return(RedirectToAction(MVC.PvP.Play())); }
public virtual ActionResult EndQuest(bool restore) { var myMembershipId = User.Identity.GetUserId(); var me = PlayerProcedures.GetPlayerFromMembership(myMembershipId); // assert that this player is in a quest if (me.InQuest <= 0) { TempData["Error"] = "You are not in a quest."; return(RedirectToAction(MVC.PvP.Play())); } var quest = QuestProcedures.GetQuest(me.InQuest); var state = QuestProcedures.GetQuestState(me.InQuestState); // assert that there is an end state to this quest state if (!state.QuestEnds.Any()) { TempData["Error"] = "You are not yet at the end of your quest!"; TempData["SubError"] = "If it is impossible for you to continue with this quest, you may abandon it."; return(RedirectToAction(MVC.Quest.Quest())); } var endType = state.QuestEnds.First().EndType; // if the player is not animate, either restore them or create a new item for them to exist as if (me.Mobility != PvPStatics.MobilityFull) { if (restore && me.Mobility != PvPStatics.MobilityFull) { PlayerProcedures.InstantRestoreToBase(me); } else if (!restore) { var newform = FormStatics.GetForm(me.FormSourceId); ItemProcedures.PlayerBecomesItem(me, newform, null); } } // fail! if (endType == (int)QuestStatics.QuestOutcomes.Failed) { QuestProcedures.PlayerEndQuest(me, (int)QuestStatics.QuestOutcomes.Failed); QuestProcedures.ClearQuestPlayerVariables(me.Id, me.InQuest); StatsProcedures.AddStat(me.MembershipId, StatsProcedures.Stat__QuestsFailed, 1); TempData["Result"] = "You unfortunately failed the quest <b>" + quest.Name + "</b>. Better luck next time! If there is one..."; return(RedirectToAction(MVC.PvP.Play())); } // pass! var victoryMessage = QuestProcedures.PlayerEndQuest(me, (int)QuestStatics.QuestOutcomes.Completed); QuestProcedures.ClearQuestPlayerVariables(me.Id, me.InQuest); StatsProcedures.AddStat(me.MembershipId, StatsProcedures.Stat__QuestsPassed, 1); TempData["Result"] = "Congratulations, you completed the quest <b>" + quest.Name + "</b>!" + victoryMessage; return(RedirectToAction(MVC.PvP.Play())); }