Пример #1
0
        public void SetUp()
        {
            QuestModel questMock = new QuestModel
            {
                id = MOCK_QUEST_ID, name = "name", description = "description",
            };
            QuestSection sectionMock = new QuestSection
            {
                id = MOCK_SECTION_ID
            };
            QuestTask taskMock = new QuestTask
            {
                id      = MOCK_TASK_ID,
                type    = "single",
                payload = JsonUtility.ToJson(new TaskPayload_Single
                {
                    isDone = false
                })
            };

            sectionMock.tasks = new []
            {
                taskMock
            };
            questMock.sections = new []
            {
                sectionMock
            };
            DataStore.i.Quests.quests.Set(new []
Пример #2
0
        public void Populate(QuestModel newQuest)
        {
            quest = newQuest;

            QuestTask incompletedTask = quest.sections.FirstOrDefault(x => x.progress < 1)?.tasks.FirstOrDefault(x => x.progress < 1);

            jumpInButton.gameObject.SetActive(incompletedTask != null && !string.IsNullOrEmpty(incompletedTask?.coordinates));
            jumpInDelegate = () => WebInterface.SendChatMessage(new ChatMessage
            {
                messageType = ChatMessage.Type.NONE,
                recipient   = string.Empty,
                body        = $"/goto {incompletedTask?.coordinates}",
            });

            readMoreDelegate = () => OnReadMoreClicked?.Invoke(quest.id);
            questName.text   = quest.name;
            description.text = quest.description;
            SetThumbnail(quest.thumbnail_entry);
            pinQuestToggle.SetIsOnWithoutNotify(pinnedQuests.Contains(quest.id));

            var questCompleted = quest.isCompleted;

            pinQuestToggle.gameObject.SetActive(!questCompleted);
            progressInTitle.fillAmount = quest.progress;
            completedProgressInTitle.gameObject.SetActive(questCompleted);
            completedMarkInTitle.gameObject.SetActive(questCompleted);
        }
Пример #3
0
    public void OnBeginQuest()
    {
        ActiveTask = ToTask(StartTaskID);

        uiManager.ShowQuestDialog(this);

        OnBeginTask(ActiveTask);
    }
Пример #4
0
 void OnAnswerChoose(object sender, DialogueEventArgs dea)
 {
     if (dea.AnswerId == 0 && dea.NodeId == 0)
     {
         QuestTask task = QuestManager.GetTask("quest1", 0);
         task.IsDone = !task.IsDone;
     }
 }
Пример #5
0
 public void SetTaskDescription(QuestTask[] tasks)
 {
     for (int i = 0; i < txtTasks.Length; i++)
     {
         QuestTask task = tasks[i];
         txtTasks[i].text = $"{task.Description} {task.ProgressFormatted}";
     }
 }
Пример #6
0
        public async Task <IActionResult> UpdateTask(int questId, int taskId, QuestTask task)
        {
            if (!IsMatchingTask(taskId, task) || !await IsQuestTask(questId, taskId))
            {
                return(BadRequest());
            }

            return(Ok(await _taskRepository.Update(task)));
        }
Пример #7
0
    public static void SendTaskProgressed(QuestModel quest, QuestSection section, QuestTask task)
    {
        var data = new Dictionary <string, string>();

        FillQuestData(data, quest);
        FillSectionData(data, section);
        FillTaskData(data, task);
        GenericAnalytics.SendAnalytic(TASK_PROGRESSED, data);
    }
Пример #8
0
 public void FulfilledQuestCondition(QuestTask task)
 {
     foreach (KeyValuePair <QuestID, Quest> activeQuest in activeQuests)
     {
         if (activeQuest.Value.conditions [activeQuest.Value.progressIndex].ContainsKey(task))
         {
             activeQuest.Value.conditions [activeQuest.Value.progressIndex] [task] = true;
         }
     }
 }
Пример #9
0
    private static void FillTaskData(Dictionary <string, string> data, QuestTask task)
    {
        if (task == null)
        {
            return;
        }

        data.Add("task_id", task.id);
        data.Add("task_name", task.name);
        data.Add("task_progress", task.progress.ToString());
        data.Add("task_status", task.status);
    }
Пример #10
0
    private void StartNextTask()
    {
        if (tasks.Count == 0)
        {
            onComplete?.Invoke();
            return;
        }
        Debug.Log("Quest :: StartNextTask -> " + gameObject.name);
        QuestTask questTask = tasks.Dequeue();

        questTask.onComplete += StartNextTask;
        questTask.Activate();
    }
Пример #11
0
        internal void CreateTask(QuestTask task)
        {
            GameObject prefab = factory.GetPrefab(task.type);

            if (prefab == null)
            {
                Debug.LogError($"Type: {task.type} was not found in QuestTaskFactory");
                return;
            }

            var taskUIEntry = Instantiate(prefab, tasksContainer).GetComponent <IQuestsPanelTask>();

            taskUIEntry.Populate(task);
        }
Пример #12
0
        public static QuestTask Load(GomObjectData obj, QuestStep step)
        {
            QuestTask task = new QuestTask();

            task.Step = step;
            task.Id   = (int)obj.ValueOrDefault <long>("qstTaskId", 0);

            task.CountMax     = (int)obj.ValueOrDefault <long>("qstTaskCountMax", 0);
            task.ShowTracking = obj.ValueOrDefault <bool>("qstTaskShowTracking", false);
            task.ShowCount    = obj.ValueOrDefault <bool>("qstTaskShowTrackingCount", false);
            task.Hook         = QuestHookExtensions.ToQuestHook((string)obj.ValueOrDefault <string>("qstHook", null));
            long stringId = 0;

            long.TryParse(obj.ValueOrDefault <string>("qstTaskStringid", null), out stringId);

            var txtLookup = step.Branch.Quest.TextLookup;

            if (txtLookup.ContainsKey(stringId))
            {
                task.String = StringTable.TryGetString(step.Branch.Quest.Fqn, (GomObjectData)txtLookup[stringId]);
            }

            task.TaskQuests = new List <Quest>();
            task.TaskNpcs   = new List <Npc>();
            var qstTaskObjects = (Dictionary <object, object>)obj.ValueOrDefault <Dictionary <object, object> >("qstTaskObjects", null);

            if (qstTaskObjects != null)
            {
                foreach (var taskObj in qstTaskObjects)
                {
                    string fqn = (string)taskObj.Key;
                    if (fqn.StartsWith("qst."))
                    {
                        var qst = QuestLoader.Load(fqn);
                        task.TaskQuests.Add(qst);
                    }
                    else if (fqn.StartsWith("npc."))
                    {
                        var npc = NpcLoader.Load(fqn);
                        task.TaskNpcs.Add(npc);
                    }
                    else if (fqn.StartsWith("plc."))
                    {
                    }
                }
            }

            return(task);
        }
Пример #13
0
        public async Task <IActionResult> CreateTask(int questId, QuestTask task)
        {
            var quest = await _questRepository.ReadById(questId);

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

            quest.Tasks.Add(task);

            await _questRepository.Update(quest);

            return(Ok(quest.Tasks.Max(t => t.Id)));
        }
Пример #14
0
        public void SetUp()
        {
            QuestModel questMock = new QuestModel {
                id = MOCK_QUEST_ID, status = QuestsLiterals.Status.ON_GOING
            };
            QuestSection sectionMock = new QuestSection {
                id = MOCK_SECTION_ID
            };
            QuestTask taskMock = new QuestTask {
                id = MOCK_TASK_ID
            };

            sectionMock.tasks  = new [] { taskMock };
            questMock.sections = new [] { sectionMock };
            DataStore.i.Quests.quests.Set(new []
Пример #15
0
        public void SetUp()
        {
            QuestModel questMock = new QuestModel {
                id = MOCK_QUEST_ID
            };
            QuestSection sectionMock = new QuestSection {
                id = MOCK_SECTION_ID
            };
            QuestTask taskMock = new QuestTask {
                id = MOCK_TASK_ID
            };

            sectionMock.tasks  = new [] { taskMock };
            questMock.sections = new [] { sectionMock };
            DataStore.i.Quests.quests.Set(new [] { (questMock.id, questMock) });
Пример #16
0
        public void Populate(QuestTask task)
        {
            payload = JsonUtility.FromJson <TaskPayload_Single>(task.payload);

            jumpInButton.gameObject.SetActive(task.progress < 1 && !string.IsNullOrEmpty(task.coordinates));
            jumpInDelegate = () => WebInterface.SendChatMessage(new ChatMessage
            {
                messageType = ChatMessage.Type.NONE,
                recipient   = string.Empty,
                body        = $"/goto {task.coordinates}",
            });

            taskName.text = task.name;
            status.isOn   = payload.isDone;
        }
Пример #17
0
        public TaskBuilder AddTask(QuestTask task)
        {
            task.TaskID = AllTasks.Count;
            AllTasks.Add(task);

            if (Start == null)
            {
                Start    = task;
                _current = Start;
                return(this);
            }

            _current.NextTask = task;
            _current          = task;
            return(this);
        }
Пример #18
0
 public bool QuestTaskComplete(Quest quest, QuestTask task)
 {
     if (quest == null)
     {
         return(false);
     }
     if (!quest.IsStarted())
     {
         return(false);
     }
     if (quest.CurrentTask() != task)
     {
         return(false);
     }
     QuestCurrentTaskComplete(quest);
     return(true);
 }
Пример #19
0
        public ReturnResult(QuestTask task, Player player, string feedback = "")
        {
            Task = new
            {
                task.Content, task.Title
            };

            Player = new
            {
                player.Name,
                player.Comment,
                player.HasFinished,
                player.TaskNumber,
                player.Token
            };

            Feedback = feedback;
        }
Пример #20
0
        public void Populate(QuestTask task)
        {
            payload = JsonUtility.FromJson <TaskPayload_Numeric>(task.payload);

            jumpInButton.gameObject.SetActive(task.progress < 1 && !string.IsNullOrEmpty(task.coordinates));
            jumpInDelegate = () => WebInterface.SendChatMessage(new ChatMessage
            {
                messageType = ChatMessage.Type.NONE,
                recipient   = string.Empty,
                body        = $"/goto {task.coordinates}",
            });

            taskName.text     = task.name;
            progressText.text = $"{payload.current}/{payload.end}";
            status.isOn       = task.progress >= 1;
            ongoingProgress.transform.localScale = new Vector3(task.progress, 1, 1);
            ongoingProgress.color = task.progress < 1 ? ongoinColor : completedcolor;
        }
        public void Populate(QuestTask task)
        {
            payload = JsonUtility.FromJson <TaskPayload_Numeric>(task.payload);

            jumpInButton.gameObject.SetActive(task.progress < 1 && !string.IsNullOrEmpty(task.coordinates));
            jumpInDelegate = () => WebInterface.SendChatMessage(new ChatMessage
            {
                messageType = ChatMessage.Type.NONE,
                recipient   = string.Empty,
                body        = $"/goto {task.coordinates}",
            });

            taskName.text = task.name;
            start.text    = payload.start.ToString();
            current.text  = payload.current.ToString();
            end.text      = payload.end.ToString();

            ongoingProgress.fillAmount = task.progress;
        }
        internal void CreateTask(QuestModel quest, QuestTask task)
        {
            if (task.status == QuestsLiterals.Status.BLOCKED)
            {
                return;
            }

            GameObject prefab = factory.GetPrefab(task.type);

            if (prefab == null)
            {
                Debug.LogError($"Type: {task.type} was not found in QuestTaskFactory");
                return;
            }

            var taskUIEntry = Instantiate(prefab, tasksContainer).GetComponent <IQuestsPanelTask>();

            taskUIEntry.Populate(quest, task);
        }
        public void Populate(QuestSection newSection)
        {
            sequenceState = SequenceState.NotStarted;
            ClearTaskRoutines();

            section = newSection;
            QuestTask[] allTasks = section.tasks;
            titleContainer.SetActive(!string.IsNullOrEmpty(section.name));
            sectionTitle.text = section.name;

            bool          hasCompletedTasksToShow = false;
            List <string> entriesToRemove         = taskEntries.Keys.ToList();

            for (int index = 0; index < allTasks.Length; index++)
            {
                QuestTask task = allTasks[index];
                //We only show completed quests that has been just completed to show the progress
                if (!taskEntries.ContainsKey(task.id) && (task.status == QuestsLiterals.Status.BLOCKED || (task.progress >= 1 && !task.justProgressed)))
                {
                    continue;
                }

                entriesToRemove.Remove(task.id);
                if (!taskEntries.TryGetValue(task.id, out QuestsTrackerTask taskEntry))
                {
                    taskEntry = CreateTask();
                    //New tasks are invisible
                    taskEntry.gameObject.SetActive(!task.justUnlocked);
                    taskEntries.Add(task.id, taskEntry);
                }

                taskEntry.Populate(task);
                taskEntry.transform.SetSiblingIndex(index);
            }

            for (int index = 0; index < entriesToRemove.Count; index++)
            {
                DestroyTaskEntry(entriesToRemove[index]);
            }
            OnLayoutRebuildRequested?.Invoke();
        }
Пример #24
0
        private void PopulateSubTasks(QuestTask[] tasks)
        {
            bool bolded = false;

            for (int i = 0; i < tasks.Length; i++)
            {
                QuestTask      task    = tasks[i];
                SubTaskDisplay display = subTaskDisplays[i];

                display.description = task.TaskDescription;
                display.progress    = task.ProgressString;
                display.cellphone   = task.isCellphoneRequired;
                display.SetActive(true);

                if (!bolded && task.Progress != 1.0f)
                {
                    bolded = true;
                    display.SetBolded(true);
                }
            }
        }
Пример #25
0
    public void QuestCurrentTaskComplete(Quest quest)
    {
        QuestTask l = quest.CurrentTask();
        QuestTask t = quest.NextTask();

        Debug.Log("Current: " + l.ToString() + " _ " + t);

        if (t == null && quest.Completed)
        {
            Debug.Log("Quest " + quest.QuestName + " is completed!!");
            InProgress.Remove(quest);
            Completed.Add(quest);
            if (ActiveQuest == quest)
            {
                ActiveQuest = null;
            }
        }
        else
        {
            Debug.Log("Task \'" + l.Description + "\' for quest " + quest.QuestName + " is complete. Next, " + t.Description);
        }
    }
Пример #26
0
        private Task GetNextTask(ApplicationDbContext db, bool isRight, int taskNumber, Progress current)
        {
            QuestTask nextTask = null;

            if (taskNumber == -1)
            {
                nextTask = db.QuestTask.SingleOrDefault(_ => _.Number == current.TaskNumber);
            }
            else if (isRight)
            {
                nextTask = db.QuestTask.FirstOrDefault(t => t.Id > taskNumber);
            }

            return(nextTask != null
                ? new Task
            {
                Number = nextTask.Number,
                Title = nextTask.Title,
                Content = nextTask.Content
            }
                : null);
        }
Пример #27
0
    public void CompleteTask(QuestTask task)
    {
        if (task != ActiveTask)
        {
            return;
        }

        OnEndTask(task);

        int nextIndex = QuestTasks.IndexOf(task) + 1;

        // All tasks have been completed
        if (QuestTasks.Count == nextIndex)
        {
            ActiveTask = null;
            GameManager.GetInstance().QuestManager.CompleteQuest(this);
        }
        else
        {
            ActiveTask = QuestTasks[nextIndex];
            OnBeginTask(ActiveTask);
        }
    }
    void OnAnswerChoose(object sender, DialogueEventArgs dea)
    {
        if (dea.AnswerId == 0 && dea.NodeId == 0)
        {
            QuestManager.StartQuest("rk_quest");
            QuestManager.ShowQuestNote(_QUEST, 0);
            QuestManager.ShowQuestNote(_QUEST, 1);
            QuestManager.ShowQuestNote(_QUEST, 2);
            QuestTask task = QuestManager.GetTask(_QUEST, 0);
            task.IsVisible = true;
            task.IsDone    = true;
        }
        if (dea.AnswerId == 1 && dea.NodeId == 0)
        {
            QuestTask task = QuestManager.GetTask(_QUEST, 0);
            task.IsVisible           = true;
            StateControl.currentStep = StateControl.QUEST_STEP.FIRST_TALK_FINISHED;
            UnityEngine.SceneManagement.SceneManager.LoadScene(1);
        }
//        if (dea.AnswerId == 2 && dea.NodeId == 0)
//        {
//            QuestTask task = QuestManager.GetTask(_QUEST, 1);
//            task.IsVisible = true;
//            StateControl.currentStep = StateControl.QUEST_STEP.SECOND_TALK_FINISHED;
//            UnityEngine.SceneManagement.SceneManager.LoadScene (1);
//        }
//        if (dea.AnswerId == 3 && dea.NodeId == 0)
//        {
//            QuestTask task = QuestManager.GetTask(_QUEST, 0);
//            task.IsVisible = true;
//            StateControl.currentStep = StateControl.QUEST_STEP.THIRD_TALK_FINISHED;
//            UnityEngine.SceneManagement.SceneManager.LoadScene (2);
//
//
//        }
    }
Пример #29
0
        public void Populate(QuestTask task)
        {
            taskTitle.text = task.name;
            jumpInDelegate = () => WebInterface.SendChatMessage(new ChatMessage
            {
                messageType = ChatMessage.Type.NONE,
                recipient   = string.Empty,
                body        = $"/goto {task.coordinates}",
            });

            jumpInButton.gameObject.SetActive(task.progress < 1 && !string.IsNullOrEmpty(task.coordinates));
            progressTarget = task.progress;
            switch (task.type)
            {
            case "single":
                SetProgressText(task.progress, 1);
                break;

            case "numeric":
                var payload = JsonUtility.FromJson <TaskPayload_Numeric>(task.payload);
                SetProgressText(payload.current, payload.end);
                break;
            }
        }
        public void Populate(QuestModel newQuest)
        {
            quest = newQuest;

            QuestTask incompletedTask = quest.sections.FirstOrDefault(x => x.progress < 1)?.tasks.FirstOrDefault(x => x.progress < 1);

            jumpInButton.gameObject.SetActive(incompletedTask != null && !string.IsNullOrEmpty(incompletedTask?.coordinates));
            jumpInDelegate = () =>
            {
                if (incompletedTask == null)
                {
                    return;
                }

                QuestsUIAnalytics.SendJumpInPressed(quest.id, incompletedTask.id, incompletedTask.coordinates, QuestsUIAnalytics.UIContext.QuestsLog);
                WebInterface.SendChatMessage(new ChatMessage
                {
                    messageType = ChatMessage.Type.NONE,
                    recipient   = string.Empty,
                    body        = $"/goto {incompletedTask.coordinates}",
                });
            };

            readMoreDelegate = () => OnReadMoreClicked?.Invoke(quest.id);
            questName.text   = quest.name;
            description.text = quest.description;
            SetThumbnail(quest.thumbnail_entry);
            pinQuestToggle.SetIsOnWithoutNotify(pinnedQuests.Contains(quest.id));

            pinQuestToggle.gameObject.SetActive(!quest.isCompleted);
            progressInTitle.transform.localScale = new Vector3(quest.progress, 1, 1);
            completedProgressInTitle.gameObject.SetActive(quest.isCompleted);
            completedMarkInTitle.gameObject.SetActive(quest.isCompleted);

            SetRewards(quest.rewards?.Length ?? 0);
        }
Пример #31
0
        public static XamlQuestTask CopyFrom(QuestTask task)
        {
            ItemQuestTask itemQuestTask = task as ItemQuestTask;
            if (itemQuestTask != null)
            {
                return new XamlItemQuestTask(itemQuestTask);
            }

            LocationQuestTask locationQuestTask = task as LocationQuestTask;
            if (locationQuestTask != null)
            {
                return new XamlLocationQuestTask(locationQuestTask);
            }

            MobQuestTask mobQuestTask = task as MobQuestTask;
            if (mobQuestTask != null)
            {
                return new XamlMobQuestTask(mobQuestTask);
            }

            DeathQuestTask deathQuestTask = task as DeathQuestTask;
            if (deathQuestTask != null)
            {
                return new XamlDeathQuestTask(deathQuestTask);
            }

            ReputationKillQuestTask reputationKillQuestTask = task as ReputationKillQuestTask;
            if (reputationKillQuestTask != null)
            {
                return new XamlReputationKillQuestTask(reputationKillQuestTask);
            }

            ReputationTargetQuestTask reputationTargetQuestTask = task as ReputationTargetQuestTask;
            if (reputationTargetQuestTask != null)
            {
                return new XamlReputationTargetQuestTask(reputationTargetQuestTask);
            }

            throw new NotImplementedException("Apparently I missed something.");
        }
Пример #32
0
 protected XamlQuestTask(QuestTask task)
 {
     this.TaskType = task.TaskType;
     this.Name = task.Name;
     this.Description = task.Description;
 }