Ejemplo n.º 1
0
 /// <summary>
 /// 퀘스트를 받을 수 있는지
 /// </summary>
 /// <returns></returns>
 public bool IsAcceptQuest(string questKey)
 {
     //선행 조건 키를 받아와 언락을 시도함
     return(UnlockManager.IsUnlock(QuestDatabase.GetInfo(questKey).preKey));
 }
Ejemplo n.º 2
0
        /// <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));
        }