/// <summary> /// 퀘스트를 받을 수 있는지 /// </summary> /// <returns></returns> public bool IsAcceptQuest(string questKey) { //선행 조건 키를 받아와 언락을 시도함 return(UnlockManager.IsUnlock(QuestDatabase.GetInfo(questKey).preKey)); }
/// <summary> /// 퀘스트를 클리어한다. 진행도 상관없이 클리어 하기 때문에 /// 반드시 퀘스트 클리어 가능한지 여부를 확인할 것. /// </summary> /// <param name="questKey"></param> public void ClearQuest(string questKey) { // 현재 퀘스트 정보 var currQuestInfo = QuestDatabase.GetInfo(questKey); // 아이템을 회수해야 하는경우 여기서 회수한다 for (int i = 0; i < currQuestInfo.requestKey.Length; i++) { string chKey = currQuestInfo.requestKey[i]; // 수집퀘스트키는 아이템을 회수 if (chKey.Contains(QuestCheckKey.QuestKey_Collect_)) { UserManager.AccumItem(chKey.Substring(QuestCheckKey.QuestKey_Collect_.Length), -currQuestInfo.request[i]); } } // 관련 키를 언락한다. for (int i = 0; i < currQuestInfo.unlockKey.Length; i++) { UnlockManager.UnlockKey(currQuestInfo.unlockKey[i]); } // 퀘스트 보상을 준다 for (int i = 0; i < currQuestInfo.rewardKey.Length; i++) { if (currQuestInfo.rewardKey[i] == "Coin") { UserManager.AccumCoin(currQuestInfo.reward[i]); StageMaster.current.playerController.hud.ViewEventText(string.Format("코인 획득 ({0})", currQuestInfo.reward[i])); } else { UserManager.AccumItem(currQuestInfo.rewardKey[i], currQuestInfo.reward[i]); StageMaster.current.playerController.hud.ViewEventText(string.Format("{0} 획득 ({1})", ItemDatabase.GetItemInfo(currQuestInfo.rewardKey[i]).itemName, currQuestInfo.reward[i])); } } // 퀘스트를 비운다. for (int i = 0; i < UserData.quests.Count; i++) { if (UserData.quests[i].key == questKey) { UserData.quests.RemoveAt(i); } } // 퀘스트 클리어됨 UserData.clearedQuest.Add(questKey); // 퀵뷰에 데이터가 남아있으면 삭제 if (HasQuickView(questKey)) { RemoveQuickView(questKey); } // 데이터 최종 적용 UserData.UpdateData(); this.onQuestClear?.Invoke(questKey); KLog.Log(string.Format("<color=red>{0} Clear Quest</color>", questKey)); }