public bool BeginQuest(PC questor, bool inform) { GameQuest newQuest = questor.GetQuest(this.QuestID); if (newQuest != null) { DateTime start; DateTime.TryParse(newQuest.StartDate, out start); if (start < DateTime.Now && !newQuest.CompletedSteps.Contains(newQuest.TotalSteps) && !newQuest.IsRepeatable) { if (inform) { questor.WriteToDisplay("You have already started this quest \"" + this.Name + "\"."); return(false); } } else { if (newQuest.IsRepeatable) { goto verifyQuestRequirements; } if (inform) { questor.WriteToDisplay("You have already completed the quest " + this.Name + "."); } } return(false); } verifyQuestRequirements: if (!PlayerMeetsRequirements(questor, true)) { return(false); } if (questor.QuestList.Contains(newQuest)) { for (int qc = 0; qc < questor.QuestList.Count; qc++) { if (questor.QuestList[qc].questID == newQuest.questID) { questor.QuestList[qc].StartDate = DateTime.Now.ToString(); questor.QuestList[qc].CurrentStep = 1; } } } else { newQuest = (GameQuest)this.MemberwiseClone(); newQuest.StartDate = DateTime.Now.ToString(); newQuest.CurrentStep = 1; questor.QuestList.Add(newQuest); } return(true); }
public bool PlayerMeetsRequirements(PC player, bool inform) { if (!this.IsRepeatable) { GameQuest qCheck = player.GetQuest(this.QuestID); if (qCheck != null && qCheck.TimesCompleted >= 1) { if (inform) { player.WriteToDisplay("You have already completed the quest \"" + this.Name + "\"."); } return(false); } } foreach (string reqFlag in this.RequiredFlags) { if (player.QuestFlags.IndexOf(reqFlag) == -1) { if (inform) { player.WriteToDisplay("You do not have the required flags for the quest \"" + this.Name + "\"."); } return(false); } } if (this.IsAlignmentRestricted) { if (!this.Alignments.Contains(player.Alignment)) { if (inform) { player.WriteToDisplay("You do not meet the alignment requirement for the quest \"" + this.Name + "\"."); } return(false); } } if (this.IsClassRestricted) { // TODO: search sub classes if (!this.ClassTypes.Contains(player.BaseProfession)) { if (inform) { player.WriteToDisplay("You do not meet the profession requirement for the quest \"" + this.Name + "\"."); } return(false); } } if (this.IsLevelRestricted) { if (this.minimumLevel > 0) { if (Rules.GetExpLevel(player.Experience) < this.minimumLevel) { if (inform) { player.WriteToDisplay("You do not meet the minimum experience level requirement for the quest \"" + this.Name + "\"."); } return(false); } } if (this.MaximumLevel > 0) { if (Rules.GetExpLevel(player.Experience) > this.maximumLevel) { if (inform) { player.WriteToDisplay("Your experience level is too high for the quest \"" + this.Name + "\"."); } return(false); } } } if (!this.PlayerMeetsKarmaRequirement(player)) { if (inform) { player.WriteToDisplay("You do not meet the karma requirements for the quest \"" + this.Name + "\"."); } return(false); } return(true); }
public static void Add(GameQuest quest) { QuestDictionary.Add(quest.QuestID, quest); }