/// <summary> 테이블 데이터 셋팅 </summary>
    void SetDataTable(List <DataChapter> dataList, uint addStageId)
    {
        Dictionary <uint, NetData.ClearSingleStageData> clearStageDic = NetData.instance.GetUserInfo().ClearSingleStageDic;

        bool curStage = false;

        int chapCount  = addStageId >= 10000 ? 6 : (int)SystemDefine.MaxChapter;
        int stageCount = addStageId >= 10000 ? 3 : (int)SystemDefine.MaxChapter;

        //일반 스테이지
        for (int i = 0; i < /*SystemDefine.MaxChapter*/ chapCount; i++)
        {
            int chapterNumber   = i + 1;
            int totalClearGrade = 0;

            List <DataStage> stageList = new List <DataStage>();

            for (int j = 0; j < /*SystemDefine.MaxStage*/ stageCount; j++)
            {
                DataStage data = new DataStage();

                byte[] clearGrade = new byte[3];
                short  state      = 0;//1;//클리어한 지역.

                uint stageId    = addStageId + (uint)((chapterNumber * 100) + (j + 1));
                int  clearCount = 0;
                NetData.ClearSingleStageData clearStageData = null;
                if (!clearStageDic.TryGetValue(stageId, out clearStageData))
                {
                    //추후에 살려놔야함 지금은 모든걸 오픈
                    if (!curStage)
                    {
                        curStage = true;
                        state    = 0;
                    }
                    else//활성화 되지 않은 지역.
                    {
                        state = -1;
                    }
                }
                else
                {
                    state = 1;

                    clearGrade[0] = clearStageData.Clear_0;
                    clearGrade[1] = clearStageData.Clear_1;
                    clearGrade[2] = clearStageData.Clear_2;

                    totalClearGrade += clearStageData.Clear_0 + clearStageData.Clear_1 + clearStageData.Clear_2;
                    clearCount       = clearStageData.DailyClearCount;
                }

                if (data.InitStageData(stageId, clearGrade, state, clearCount))
                {
                    stageList.Add(data);
                }
                else//어려움일 경우 이럴수 있다 아니라면 문제가있는것.
                {
                    break;
                }
            }

            if (stageList.Count <= 0)
            {
                break;
            }

            NetData.StageStarRewardData rewardData = new NetData.StageStarRewardData();
            DataChapter dataChap = new DataChapter(chapterNumber, stageList[0]._StageLowData.type == 2, rewardData, stageList);//totalClearGrade,
            dataList.Add(dataChap);
        }
    }
    /// <summary> 난이도에 따라 변경될 챕터들 </summary>
    void SetChapter(int chapterNum, bool leveldifficulty)
    {
        bool isPrevEnable = true;
        bool isNextEnable = true;
        List <DataChapter> chapterList = null;
        Transform          ChapterRoot;

        if (leveldifficulty)   //true일경우 Hard Chapter로.
        {
            ChapterRoot = HardChapterParent;
            chapterList = HardChapterList;
        }
        else  //false일경우 Normal Chapter로.
        {
            chapterList = ChapterList;
            ChapterRoot = ChapterParent;
        }

        //챕터 개수가 넘어가거나 모자를 경우의 예외처리.
        if (chapterList.Count <= chapterNum)
        {
            chapterNum   = (int)chapterList.Count;
            isNextEnable = false;
        }
        else if (chapterNum <= 1)
        {
            chapterNum   = 1;
            isPrevEnable = false;
        }
        ////4챕터까지만.. (판호용)
        //if (chapterNum >= 4)
        //    isNextEnable = false;

        //현제 보려는 챕터를 찾는다.
        for (int i = 0; i < chapterList.Count; i++)
        {
            if (chapterList[i].number != chapterNum)
            {
                continue;
            }
            else if (chapterList[i].stageList[0].State == -1)//진행 불가능한 스테이지
            {
                uiMgr.AddPopup(141, 761, 117);
                return;
            }

            CurChapter = chapterList[i];
            break;
        }

        //처음이거나 마지막 챕터일 경우 버튼을 꺼놓는다
        Btns[(uint)BUTTON_TYPE.PREV].gameObject.SetActive(isPrevEnable);
        Btns[(uint)BUTTON_TYPE.NEXT].gameObject.SetActive(isNextEnable);

        ChapterObject chap = null, changeChap = null;

        if (1 <= ChapterRoot.childCount)//이미 있는 챕터가 있다면 만들지 않는다.
        {
            string chapObj = leveldifficulty ? "HardChapter_0" : "Chapter_0";
            string path    = string.Format("UI/UIObject/{0}{1}", chapObj, chapterNum);

            //string path = string.Format("UI/UIObject/Chapter_0{0}", chapterNum);
            GameObject obj = ResourceMgr.Load(path) as GameObject;

            changeChap = obj.GetComponent <ChapterObject>();
            chap       = ChapterRoot.GetChild(0).GetComponent <ChapterObject>();
        }
        else//처음 시작했을 경우 실행됨.
        {
            GameObject go = UIHelper.CreateUIChapter(chapterNum, ChapterRoot, leveldifficulty);
            chap = go.GetComponent <ChapterObject>();
        }

        if (chap != null)           //없으면 오류
        {
            if (changeChap != null) //없을 수 있음
            {
                chap.ChangeLocalData(changeChap);
            }

            chap.SetChapter(CurChapter.stageList, OnClickStage, chapterNum.ToString());
            chap.gameObject.SetActive(true);
        }

        //별보상 셋팅
        SetGradeInfo();

        //진행중인 값 및 스테이지 셋팅
        CurChapterNum = chapterNum;

        BtnNormal.gameObject.SetActive(leveldifficulty);
        BtnHard.gameObject.SetActive(!leveldifficulty);

        bool activeHardMode = true;

        if (!leveldifficulty && CurChapter.stageList[9].State != 1)
        {
            activeHardMode = false;
        }


        BtnHard.transform.FindChild("On").gameObject.SetActive(activeHardMode);
        BtnHard.transform.FindChild("Off").gameObject.SetActive(!activeHardMode);

        /*
         * if (BtnHard.transform.FindChild("On").gameObject.activeSelf)
         * {
         *  //이펙트 껏다키면 안나오므로 다시생성해줌
         *  if(BtnHard.gameObject.activeSelf && BtnHard.transform.FindChild("On/eff").childCount>0)
         *  {
         *      DestroyImmediate(BtnHard.transform.FindChild("On/eff").GetChild(0).gameObject);
         *      UIHelper.CreateEffectInGame(BtnHard.transform.FindChild("On/eff"), "Fx_UI_HardMode_01");
         *  }
         * }
         */
        ChapterParent.gameObject.SetActive(!leveldifficulty);
        HardChapterParent.gameObject.SetActive(leveldifficulty);

        IsLevelHard = leveldifficulty;

        //챕터의 이름 셋팅
        ChapterNameLabel.text     = string.Format("{0}", CurChapter.name);
        HardChapterNameLabel.text = string.Format("{0}", CurChapter.name);

        NameRoot.transform.FindChild("normal").gameObject.SetActive(!leveldifficulty);
        NameRoot.transform.FindChild("Hard").gameObject.SetActive(leveldifficulty);

        /*
         * //현재 퀘스트에 던전입장이 걸려있는가?
         * Quest.QuestInfo quest = QuestManager.instance.GetCurrentQuest();
         * if (quest != null && quest.type == 1)
         * {
         *
         * }
         */
        if (leveldifficulty && SceneManager.instance.CurTutorial == TutorialType.CHAPTER_HARD)
        {
            TutorialSupport tuto      = StagePopup.GetStartTuto();
            TutorialSupport stageTuto = chap.StageObjs[0].GetComponent <TutorialSupport>();
            stageTuto.NextTuto = tuto;
            stageTuto.OnTutoSupportStart();

            tuto.TutoType = TutorialType.CHAPTER_HARD;
            tuto.SortId   = 4;
        }
    }