Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
 public static void Add(GameQuest quest)
 {
     QuestDictionary.Add(quest.QuestID, quest);
 }