Exemplo n.º 1
0
    public void StartQuest(int npcCode, int questCode)
    {
        QuestTotalProgress newProgress = new QuestTotalProgress();

        newProgress.Completed         = false;
        newProgress.OriginalQuestData = QuestDB.Instance.GetQuestData(questCode);
        questsInProgress.Add(questCode, newProgress);

        string[] categorys = newProgress.OriginalQuestData.QuestCategorys;
        for (int categoryIdx = 0; categoryIdx < categorys.Length; ++categoryIdx)
        {
            switch (categorys[categoryIdx])
            {
            case "Discussion":
                TargetNPCData[] npcDatas = newProgress.OriginalQuestData.Behaviour_Discussion.TargetNPC;

                int[] npcCodes = new int[npcDatas.Length];
                for (int i = 0; i < npcCodes.Length; ++i)
                {
                    npcCodes[i] = npcDatas[i].NPCCode;
                }

                questProgress_Discussion.StartQuest(questCode, npcCodes);
                break;

            case "KillMonster":
                TargetMonsterData[] monsterDatas = newProgress.OriginalQuestData.Behaviour_KillMonster.TargetMonster;
                questProgress_KillMonster.StartQuest(questCode, monsterDatas);
                break;

            case "GetItem":
                newProgress.OriginalQuestData.Behaviour_GetItem.Initialize();
                for (int i = 0; i < questObservers.Count; ++i)
                {
                    newProgress.OriginalQuestData.Behaviour_GetItem.AddObserver(questObservers[i]);
                }
                break;

            case "Building":
                newProgress.OriginalQuestData.Behaviour_Building.Initialize();
                for (int i = 0; i < questObservers.Count; ++i)
                {
                    newProgress.OriginalQuestData.Behaviour_Building.AddObserver(questObservers[i]);
                }
                break;
            }
        }

        UpdateAllQuestProgress();
        NPC_ControllerGroup.Instance.QuestStateWasChanged();
    }
Exemplo n.º 2
0
    public bool GetQuestIsCompletedInProgress(int questCode)
    {
        QuestTotalProgress totalProgress = null;

        if (questsInProgress.TryGetValue(questCode, out totalProgress))
        {
            if (totalProgress.Completed)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        return(false);
    }
Exemplo n.º 3
0
    public void Initialize()
    {
        questObservers = new List <QuestObserver>();
        questObservers.Add(QuestNoticePopup.Instance.GetComponent <QuestObserver>());

        // 퀘스트 진행상황 불러오기
        questsInProgress = new Dictionary <int, QuestTotalProgress>();
        completedQuests  = new Dictionary <int, QuestData>();

        questProgress_Discussion  = UserQuestProvider.Instance.QuestProgress_Discussion;
        questProgress_KillMonster = UserQuestProvider.Instance.QuestProgress_KillMonster;
        for (int i = 0; i < questObservers.Count; ++i)
        {
            questProgress_Discussion.AddObserver(questObservers[i]);
            questProgress_KillMonster.AddObserver(questObservers[i]);
        }

        if (UserQuestProvider.Instance.QuestDatasInProgress.Count > 0)
        {
            for (int i = 0; i < UserQuestProvider.Instance.QuestDatasInProgress.Count; ++i)
            {
                QuestTotalProgress totalProgress = new QuestTotalProgress();
                totalProgress.Completed         = false;
                totalProgress.OriginalQuestData = UserQuestProvider.Instance.QuestDatasInProgress[i];
                for (int questTypeIdx = 0; i < totalProgress.OriginalQuestData.QuestCategorys.Length; ++i)
                {
                    switch (totalProgress.OriginalQuestData.QuestCategorys[questTypeIdx])
                    {
                    case "GetItem":
                        totalProgress.OriginalQuestData.Behaviour_GetItem.Initialize();
                        for (int observerIdx = 0; observerIdx < questObservers.Count; ++observerIdx)
                        {
                            totalProgress.OriginalQuestData.Behaviour_GetItem.AddObserver(questObservers[observerIdx]);
                        }
                        break;

                    case "Building":
                        totalProgress.OriginalQuestData.Behaviour_Building.Initialize();
                        for (int observerIdx = 0; observerIdx < questObservers.Count; ++observerIdx)
                        {
                            totalProgress.OriginalQuestData.Behaviour_Building.AddObserver(questObservers[observerIdx]);
                        }
                        break;
                    }
                }

                questsInProgress.Add(totalProgress.OriginalQuestData.QuestCode, totalProgress);
            }
            UpdateAllQuestProgress();
        }

        // 완료된 퀘스트 불러오기
        if (UserQuestProvider.Instance.CompletedQuests.Count > 0)
        {
            for (int i = 0; i < UserQuestProvider.Instance.CompletedQuests.Count; ++i)
            {
                QuestData data = UserQuestProvider.Instance.CompletedQuests[i];
                completedQuests.Add(data.QuestCode, data);
            }
        }
        else
        {
            completedQuests = new Dictionary <int, QuestData>();
        }
    }