Пример #1
0
        void SetQuest(string id, QuestStatus status)
        {
            QuestEntryDetails quest = _GetQuest(id);

            if (quest != null)
            {
                quest.status = status;
            }
        }
Пример #2
0
        /// <summary>
        /// Verifies a quest is of a specific status
        /// </summary>
        /// <returns><c>true</c> if this instance is quest status the specified id status; otherwise, <c>false</c>.</returns>
        /// <param name="id">Identifier.</param>
        /// <param name="status">Status.</param>
        bool IsQuestStatus(string id, QuestStatus status)
        {
            QuestEntryDetails quest = ctrl._GetQuest(id);

            if (quest != null)
            {
                return(quest.status == status);
            }

            return(false);
        }
Пример #3
0
        public void EndQuest(string id, bool success = true)
        {
            QuestEntryDetails quest = _GetQuest(id);

            if (quest == null)
            {
                return;
            }

            if (success)
            {
                quest.status = QuestStatus.Success;
                quest.defenition.Reward();
            }
            else
            {
                quest.status = QuestStatus.Failure;
            }
        }
Пример #4
0
        public QuestTaskDetails _GetQuest(string id, string taskId)
        {
            QuestEntryDetails quest = _GetQuest(id);
            QuestTaskDetails  task  = _GetTask(id);

            if (quest == null || task == null)
            {
                return(null);
            }

            if (quest.defenition.Tasks.Contains(task.defenition))
            {
                return(task);
            }
            else
            {
                Debug.LogErrorFormat("Quest ID {0} does not contain task ID {1}. Please fix.", id, taskId);
                return(null);
            }
        }
Пример #5
0
        // @TODO Test and make sure sorting actually works how it should
        // Returns a list of all currently active quests
        public List <QuestEntryDetails> GetActive()
        {
            List <QuestEntryDetails> active = new List <QuestEntryDetails>();

            foreach (QuestEntry q in defenitions.Quests)
            {
                QuestEntryDetails quest = _GetQuest(q.id);
                if (quest.status != QuestStatus.Undefined)
                {
                    active.Add(quest);
                }
            }

            // Sort by start date, priorty, ongoing items
            active.OrderByDescending(q => q.startTime)
            .OrderBy(q => q.defenition.sideQuest)
            .OrderByDescending(q => q.status == QuestStatus.Ongoing);

            return(active);
        }
Пример #6
0
        // User boots up and starts a quest
        public void BeginQuest(string id)
        {
            // Get the quest and first task, mark them as ongoing, set start timestamp
            QuestEntryDetails quest = _GetQuest(id);

            if (quest != null)
            {
                quest.status    = QuestStatus.Ongoing;
                quest.startTime = System.DateTime.Now;
                if (quest.defenition.Tasks != null && quest.defenition.Tasks.Count > 0)
                {
                    QuestTaskDetails task = _GetQuest(id, quest.defenition.Tasks[0].id);
                    if (task != null)
                    {
                        // @TODO Poll the requirements of the task to check if they've already been completed
                        task.status    = QuestStatus.Ongoing;
                        task.startTime = System.DateTime.Now;
                    }
                }
            }
        }
Пример #7
0
        public QuestText GetQuestText(string questId)
        {
            QuestEntryDetails quest = _GetQuest(questId);

            if (quest == null)
            {
                return(null);
            }

            QuestText questText = new QuestText {
                title       = quest.Title,
                description = quest.defenition.description
            };

            if (quest.status == QuestStatus.Success)
            {
                questText.description += string.Format(" \n {0}", quest.defenition.successMessage);
            }
            else if (quest.status == QuestStatus.Failure)
            {
                questText.description += string.Format(" \n {0}", quest.defenition.failMessage);
            }
            else
            {
                // Generate a list of tasks
                List <QuestTaskText> tasks = new List <QuestTaskText>();
                foreach (QuestTask t in quest.defenition.Tasks)
                {
                    QuestTaskDetails task = _GetTask(t.id);
                    tasks.Add(new QuestTaskText {
                        title  = t.displayName,
                        status = task.status
                    });
                }

                questText.tasks = tasks;
            }

            return(questText);
        }
Пример #8
0
        // @TODO Incomplete
        public bool NextTask(string questId)
        {
            if (status.IsQuestActive(questId))
            {
                Debug.LogErrorFormat("Quest {0} is no longer active or not started.", questId);
                return(false);
            }

            QuestEntryDetails quest = _GetQuest(questId);
            QuestTaskDetails  task  = GetCurrentTask(questId);

            // Checks if all requirements have been fullfilled on the current task
            if (task.defenition.CheckRequirements())
            {
                task.status = QuestStatus.Success;

                if (quest.currentTaskIndex + 1 >= quest.defenition.Tasks.Count)
                {
                    // Quest has been completed
                    EndQuest(questId);
                    Debug.LogWarning("Quest {0} was marked as success from calling NextTask(). Please use EndQuest() to mark a quest as complete.");
                }
                else
                {
                    // Update the next task and quest index
                    quest.currentTaskIndex += 1;
                    quest.status            = QuestStatus.Ongoing;
                }

                quest.currentTaskIndex += 1;
            }
            else
            {
                return(false);
            }

            return(true);
        }
Пример #9
0
        public QuestTaskDetails GetCurrentTask(string questId)
        {
            QuestEntryDetails quest = _GetQuest(questId);

            return(_GetTask(quest.defenition.Tasks[quest.currentTaskIndex].id));
        }