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(); }
public bool GetQuestIsCompletedInProgress(int questCode) { QuestTotalProgress totalProgress = null; if (questsInProgress.TryGetValue(questCode, out totalProgress)) { if (totalProgress.Completed) { return(true); } else { return(false); } } return(false); }
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>(); } }