using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using IVDataFormat; using IVServerFormat; using TMPro; using System; public class DungeonMgr : MonoBehaviour { #region Const private static DungeonMgr curMgr = null; #endregion Const #region UI [SerializeField] private Canvas canvasUI; [SerializeField] TextMeshProUGUI txtMainT; [SerializeField] Button mainDungeonButton; GameObject mainLock; [SerializeField] Canvas dungeonLeftPn; GameObject leftCanvasUI; GameObject leftPanel; Image dungeonImage; TextMeshProUGUI dungeonName; //[SerializeField] //Sprite[] dungeonImageKind; [SerializeField] ButtonIV btnDungeonOut; [SerializeField] GoodsItem[] rewardItem; [SerializeField] GameObject[] dungeonPanel; TextMeshProUGUI[] txtDungeonPanel = new TextMeshProUGUI[5]; GameObject[] objDungeonSelect = new GameObject[5]; GameObject[] objDungeonLock = new GameObject[5]; ButtonIV btnDungeonSkip; TextMeshProUGUI txtDungeonSkip; [SerializeField] TextMeshProUGUI txtAutoProgress; GameObject DungeonPetSet; TextMeshProUGUI dungeonPetLevel; ButtonIV btnPrevLevel, btnNextLevel; [SerializeField] ButtonIV[] btnTabs; #endregion #region Escr [SerializeField] EScrController escrDungeonSelect; #endregion int iSelectArea = -1; bool isFirst = true; Toggle autoProgressToggle; [SerializeField] bool autoProgress = false; public static bool GetAutoProgress() { return curMgr.autoProgress; } public static void SetAutoProgress(bool onoff) { curMgr.autoProgress = onoff; } public enum DungeonKind //던전 종류 중 4번 과 5번 은 던전이 아닌 다른 곳을 눌러야 나타남 { GoldDG = 0, EnhanceStoneDG = 1, PetDG = 2, AwakenStoneDG = 3, AwakenDG = 4, GuardianDG = 5, relicDG = 6, total } private int iLoading = 1; private bool bReLocalize = true; private bool bReLocalizeDg = false; private int iSelectedTab = -1; DungeonKind dungeonKind; public static void SetDungeonKind(DungeonKind i) { curMgr.dungeonKind = i; } private int DungeonLevel = 1; private float DungeonBonus = 1; //프리셋 배열의 갯수는 스킬의 갯수가 아닌 던전의 갯수. int[] dungeonSkillPreset = { 0, 0, 0, 0, 0, 0,0 }; int[] dungeonPetPreset = { 0, 0, 0, 0, 0, 0,0 }; int[] dungeonAwakenPreset = { 0, 0, 0, 0, 0, 0,0 }; bool isUnlockDungeon = false; public static DungeonKind GetDungeonKind() { return curMgr.dungeonKind; } #region Base public static void SLocalize(bool bmain) { if (curMgr != null) curMgr.Localize(bmain); } // 번역. private void Localize(bool bmain) { if (bmain) { txtMainT.text = LocalizationText.GetText("dg_title"); } else { bReLocalize = false; canvasUI.transform.Find("txtT").GetComponent().text = LocalizationText.GetText("dungeon_title"); leftPanel = dungeonLeftPn.gameObject; dungeonImage = leftPanel.transform.Find("DungeonImage").GetComponent(); dungeonName = dungeonImage.transform.Find("DungeonName").GetComponent(); for (int i = 0; i < dungeonPanel.Length; i++) { txtDungeonPanel[i] = dungeonPanel[i].transform.Find("txtTabTitle").GetComponent(); objDungeonSelect[i] = dungeonPanel[i].transform.Find("select").gameObject; objDungeonLock[i] = dungeonPanel[i].transform.Find("DungeonLock").gameObject; } txtDungeonPanel[0].text = LocalizationText.GetText("gold_dungeon_title"); txtDungeonPanel[1].text = LocalizationText.GetText("enhance_stone_dungeon_title"); txtDungeonPanel[2].text = LocalizationText.GetText("pet_dungeon_title"); txtDungeonPanel[3].text = LocalizationText.GetText("awaken_stone_dungeon_title"); txtDungeonPanel[4].text = LocalizationText.GetText("mask_dungeon_title"); leftCanvasUI = dungeonLeftPn.gameObject; leftCanvasUI.transform.Find("txtT").GetComponent().text = LocalizationText.GetText("dungeon_info"); btnDungeonSkip = leftCanvasUI.transform.Find("btnSkip").GetComponent(); txtDungeonSkip = btnDungeonSkip.transform.Find("txt").GetComponent(); txtDungeonSkip.text = LocalizationText.GetText("dungeon_skip"); txtAutoProgress.text = LocalizationText.GetText("auto_progress"); DungeonPetSet = leftCanvasUI.transform.Find("PetDungeonSet").gameObject; dungeonPetLevel = DungeonPetSet.transform.Find("PetLevel").GetComponent(); dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), "1"); btnPrevLevel = DungeonPetSet.transform.Find("prevArrow").GetComponent(); btnNextLevel = DungeonPetSet.transform.Find("nextArrow").GetComponent(); dungeonName.text = LocalizationText.GetText("gold_dungeon_title"); autoProgressToggle = leftCanvasUI.transform.Find("txtCheckBox").transform.Find("CheckBox").GetComponent(); } } // 설정에서 언어 변경 시 처리. public static void SReLocalize() { curMgr.Localize(true); curMgr.bReLocalize = true; curMgr.bReLocalizeDg = true; } private void Awake() { curMgr = this; } void Start() { iLoading--; } public static bool SCloseMenu() { return curMgr.CloseMenu(); } private bool CloseMenu() { // 게임 시작 후 열린적 없음. if (iSelectedTab < 0) return false; if (canvasUI.enabled) { CloseDungeon(); return true; } return false; } #endregion Base #region UI public static void SMoveDungeon(eEventMoveType content)//다른 곳에서 던전 컨텐츠를 열어야 할 때. { curMgr.OpenDungeon(); switch (content) { case eEventMoveType.DgGold: curMgr.TabGoldDungeon(); break; case eEventMoveType.DgStone: curMgr.TabEnhanceStoneDungeon(); break; case eEventMoveType.DgPet: curMgr.TabPetDungeon(); break; case eEventMoveType.DgAwaken: curMgr.TabAwakenStoneDungeon(); break; case eEventMoveType.DgRelic: curMgr.TabRelicDungeon(); break; } } public void OpenDungeon()//던전 버튼으로 던전을 열 때. 최초 열 때는 골드던전이 활성화된다. { if (mainLock.activeSelf) { GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonMgr.DungeonKind.GoldDG).openStage));//펫 던전 해금될때 해금됨 return; } if (iLoading > 0) return; iLoading++; if (bReLocalize) Localize(false); if (iSelectedTab < 0) { TabGoldDungeon(); } canvasUI.enabled = true; dungeonLeftPn.enabled = true; GameUIMgr.SRightWindowClose(); GameUIMgr.SOpenLeftPanel(dggoldticket: true, dgenhanceticket: true, dgawakenticket: true, dgpetticket: true, dgrelicticket: true); GameUIMgr.SSetMainUiOn(false); objDungeonLock[0].SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonKind.GoldDG).openStage)); objDungeonLock[1].SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonKind.EnhanceStoneDG).openStage)); objDungeonLock[2].SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonKind.PetDG).openStage)); objDungeonLock[3].SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonKind.AwakenStoneDG).openStage)); objDungeonLock[4].SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonKind.relicDG).openStage)); //objDungeonLock[0].SetActive(false); btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab) > 0 && DungeonLevel > 1); if (isFirst)//처음 열어서 스크롤을 조정해야 할 때. { switch ((DungeonKind)iSelectedTab) { case DungeonKind.GoldDG: TabGoldDungeon(); break; case DungeonKind.EnhanceStoneDG: TabEnhanceStoneDungeon(); break; case DungeonKind.PetDG: TabPetDungeon(); break; case DungeonKind.AwakenStoneDG: TabAwakenStoneDungeon(); break; case (DungeonKind)4:// DungeonKind.relicDG: TabRelicDungeon(); break; }; } else { switch ((DungeonKind)iSelectedTab)//던전을 격파하고 나서 레벨이 오를때 오른 레벨을 반영해준다. { case DungeonKind.GoldDG: selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.GoldDG).lv; break; case DungeonKind.EnhanceStoneDG: selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.EnhanceStoneDG).lv; break; case DungeonKind.PetDG: selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.PetDG).lv; break; case DungeonKind.AwakenStoneDG: selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.AwakenStoneDG).lv; break; case (DungeonKind)4:// DungeonKind.relicDG: selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.relicDG).lv; break; }; switch ((DungeonKind)iSelectedTab)//수호령이나 훈련을 들렀다가 던전에 재진입했을때 던전 종류 세팅을 다시 해준다. { case DungeonKind.GoldDG: dungeonKind = DungeonKind.GoldDG; break; case DungeonKind.EnhanceStoneDG: dungeonKind = DungeonKind.EnhanceStoneDG; break; case DungeonKind.PetDG: dungeonKind = DungeonKind.PetDG; break; case DungeonKind.AwakenStoneDG: dungeonKind = DungeonKind.AwakenStoneDG; break; case DungeonKind.relicDG:// DungeonKind.relicDG: dungeonKind = DungeonKind.relicDG; break; }; //재사용 스크롤뷰 새로고침 escrDungeonSelect.scroller.RefreshActiveCellViews(); } SoundMgr.PlaySfx(SoundName.BtnPress); autoProgressToggle.isOn = autoProgress; if (bReLocalizeDg) { bReLocalizeDg = false; escrDungeonSelect.Localize(); escrDungeonSelect.scroller.RefreshActiveCellViews(); } //escrDungeonSelect.scroller.RefreshActiveCellViews(); autoScrollPos(); iLoading--; } public static void CloseDungeon()//던전을 닫을때 { if (curMgr.iLoading > 0) return; curMgr.iLoading++; curMgr.canvasUI.enabled = false; curMgr.dungeonLeftPn.enabled = false; GameUIMgr.SRightWindowClose(); GameUIMgr.SCloseLeftPanel(); GameUIMgr.SSetMainUiOn(true); SoundMgr.PlaySfx(SoundName.BtnPress); curMgr.iLoading--; } #endregion public static void IsUnlock()//메인창에서 던전이 해금되었는지의 여부를 분간한다. 해금되어있지 않으면 버튼색을 어둡게 하고 자물쇠를 건다. { if (curMgr.isUnlockDungeon) { return; } curMgr.mainLock = curMgr.mainDungeonButton.transform.Find("Image").gameObject; curMgr.mainLock.SetActive(!DataHandler.IsClearStage(DataHandler.GetDungeonTypeInfo(DungeonMgr.DungeonKind.GoldDG).openStage)); ColorBlock colorBlock = curMgr.mainDungeonButton.colors; if (curMgr.mainLock.activeSelf) { colorBlock.normalColor = new Color(0.5f, 0.5f, 0.5f); colorBlock.highlightedColor = new Color(0.5f, 0.5f, 0.5f); colorBlock.selectedColor = new Color(0.5f, 0.5f, 0.5f); colorBlock.pressedColor = new Color(0.5f, 0.5f, 0.5f); curMgr.mainDungeonButton.colors = colorBlock; } else { curMgr.isUnlockDungeon = true; colorBlock.normalColor = new Color(1f, 1f, 1f); colorBlock.highlightedColor = new Color(1f, 1f, 1f); colorBlock.selectedColor = new Color(1f, 1f, 1f); colorBlock.pressedColor = new Color(1f, 1f, 1f); curMgr.mainDungeonButton.colors = colorBlock; } } #region Tab public void TabGoldDungeon()//던전 항목의 각 탭을 클릭하면 던전의 종류와 레벨을 세팅하고 왼쪽에 있는 스크롤뷰의 정보를 갱신해준다. { iSelectedTab = 0; dungeonKind = DungeonKind.GoldDG; DungeonLevel = DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv; DungeonBonus = (BuffMgr.Instance.GetDgGoldBonus() - dConst.RateMaxFloat) / dConst.RateMaxFloat; //dungeonImage.sprite = dungeonImageKind[(int)dungeonKind]; dungeonImage.sprite = AddressableMgr.GetDungeonPanel((int)curMgr.dungeonKind); dungeonName.text = LocalizationText.GetText("gold_dungeon_title"); DungeonPetSet.SetActive(false); EnhancedUI.SmallList goldDungeon = new EnhancedUI.SmallList(); for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length; i++) { goldDungeon.Add(i + 1); } SoundMgr.PlaySfx(SoundName.BtnPress); AllSelectDisable(); objDungeonSelect[iSelectedTab].SetActive(true); btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab) > 0 && DungeonLevel > 1); selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv; selectPetArea = 0; escrDungeonSelect.LoadDatas(goldDungeon); SetRewardList(); SelectedBtn(0); autoScrollPos(); } public void TabEnhanceStoneDungeon()//강화석 던전 탭 터치 { if (objDungeonLock[1].activeSelf) { GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonKind.EnhanceStoneDG).openStage)); return; } iSelectedTab = 1; dungeonKind = DungeonKind.EnhanceStoneDG; DungeonLevel = DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv; DungeonBonus = (BuffMgr.Instance.GetDgReinStoneBonus() - dConst.RateMaxFloat) / dConst.RateMaxFloat; //dungeonImage.sprite = dungeonImageKind[(int)dungeonKind]; dungeonImage.sprite = AddressableMgr.GetDungeonPanel((int)curMgr.dungeonKind); dungeonName.text = LocalizationText.GetText("enhance_stone_dungeon_title"); DungeonPetSet.SetActive(false); EnhancedUI.SmallList eStoneDungeon = new EnhancedUI.SmallList(); for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length; i++) { eStoneDungeon.Add(i + 1); } SoundMgr.PlaySfx(SoundName.BtnPress); AllSelectDisable(); objDungeonSelect[iSelectedTab].SetActive(true); selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv; selectPetArea = 0; btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab) > 0 && DungeonLevel > 1); escrDungeonSelect.LoadDatas(eStoneDungeon); SetRewardList(); SelectedBtn(1); autoScrollPos(); } public void TabPetDungeon()//펫 던전 탭 터치 { if (objDungeonLock[2].activeSelf) { GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonKind.PetDG).openStage)); return; } iSelectedTab = 2; dungeonKind = DungeonKind.PetDG; DungeonLevel = DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv; DungeonBonus = (BuffMgr.Instance.GetDgPetBonus() - dConst.RateMaxFloat) / dConst.RateMaxFloat; //dungeonImage.sprite = dungeonImageKind[(int)dungeonKind]; dungeonImage.sprite = AddressableMgr.GetDungeonPanel((int)curMgr.dungeonKind); dungeonName.text = LocalizationText.GetText("pet_dungeon_title"); DungeonPetSet.SetActive(true); SetPetArea(DungeonLevel); //dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), (DungeonLevel + 1).ToString()); EnhancedUI.SmallList petDungeon = new EnhancedUI.SmallList(); //for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length; i++) //{ // petDungeon.Add(i + 1); //} for (int i = 0; i < DataHandler.Const.dungeonPetStageMax; i++) { petDungeon.Add(i + 1); } SoundMgr.PlaySfx(SoundName.BtnPress); if (DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv < DataHandler.GetDungeonTypeInfo(curMgr.dungeonKind).diffs.Length) SetPetArea((DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv - 1) / DataHandler.Const.dungeonPetStageMax); else SetPetArea((DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv - 2) / DataHandler.Const.dungeonPetStageMax); AllSelectDisable(); objDungeonSelect[iSelectedTab].SetActive(true); selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv; selectPetArea = (Mathf.Min(DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv, DataHandler.GetDungeonTypeInfo(curMgr.dungeonKind).diffs.Length) - 1) / 10; btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab) > 0 && DungeonLevel > 1); escrDungeonSelect.LoadDatas(petDungeon); escrDungeonSelect.scroller.RefreshActiveCellViews(); SetRewardList(); SelectedBtn(2); autoScrollPos(); } public void TabAwakenStoneDungeon()//각성석 던전 탭 터치 { if (objDungeonLock[3].activeSelf) { GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonKind.AwakenStoneDG).openStage)); return; } iSelectedTab = 3; dungeonKind = DungeonKind.AwakenStoneDG; DungeonLevel = DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv; DungeonBonus = (BuffMgr.Instance.GetDgAwakenStoneBonus() - dConst.RateMaxFloat) / dConst.RateMaxFloat; //dungeonImage.sprite = dungeonImageKind[(int)dungeonKind]; dungeonImage.sprite = AddressableMgr.GetDungeonPanel((int)curMgr.dungeonKind); dungeonName.text = LocalizationText.GetText("awaken_stone_dungeon_title"); DungeonPetSet.SetActive(false); EnhancedUI.SmallList aStoneDungeon = new EnhancedUI.SmallList(); for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length; i++) { aStoneDungeon.Add(i + 1); } SoundMgr.PlaySfx(SoundName.BtnPress); AllSelectDisable(); objDungeonSelect[iSelectedTab].SetActive(true); selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv; btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab) > 0 && DungeonLevel > 1); escrDungeonSelect.LoadDatas(aStoneDungeon); SetRewardList(); SelectedBtn(3); autoScrollPos(); } public void TabRelicDungeon()//유물석 던전 탭 터치 { if (objDungeonLock[4].activeSelf) { GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(DataHandler.GetDungeonTypeInfo(DungeonKind.relicDG).openStage)); return; } iSelectedTab = (int)DungeonKind.relicDG; dungeonKind = DungeonKind.relicDG; DungeonLevel = DataHandler.GetPlayerDungeonInfoKind(curMgr.dungeonKind).lv; //DungeonBonus = (BuffMgr.Instance.GetDgAwakenStoneBonus() - dConst.RateMaxFloat) / dConst.RateMaxFloat; //dungeonImage.sprite = dungeonImageKind[(int)dungeonKind]; dungeonImage.sprite = AddressableMgr.GetDungeonPanel((int)curMgr.dungeonKind); dungeonName.text = LocalizationText.GetText("mask_dungeon_title"); DungeonPetSet.SetActive(false); EnhancedUI.SmallList aStoneDungeon = new EnhancedUI.SmallList(); for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length; i++) { aStoneDungeon.Add(i + 1); } SoundMgr.PlaySfx(SoundName.BtnPress); AllSelectDisable(); objDungeonSelect[4].SetActive(true); selectDungeonLv = DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).lv; btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount(dungeonKind) > 0 && DungeonLevel > 1); escrDungeonSelect.LoadDatas(aStoneDungeon); SetRewardList(); SelectedBtn(6); autoScrollPos(); } public void autoScrollPos()//현재 던전 레벨에 맞춰서 자동으로 스크롤이 이뤄진다. { isFirst = false; SetRewardList(); switch (dungeonKind) { case DungeonKind.GoldDG: escrDungeonSelect.scroller.ScrollPosition = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.GoldDG).lv < 2 ? 0 : (DataHandler.GetPlayerDungeonInfoKind(DungeonKind.GoldDG).lv-1) * 80; SelectedBtn(0); break; case DungeonKind.EnhanceStoneDG: escrDungeonSelect.scroller.ScrollPosition = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.EnhanceStoneDG).lv < 2 ? 0 : (DataHandler.GetPlayerDungeonInfoKind(DungeonKind.EnhanceStoneDG).lv - 1) * 80; SelectedBtn(1); break; case DungeonKind.PetDG: SetPetArea(DataHandler.GetPlayerDungeonInfoKind(DungeonKind.PetDG).lv / 10); escrDungeonSelect.scroller.ScrollPosition = (DataHandler.GetPlayerDungeonInfoKind(DungeonKind.PetDG).lv - 1) % 10 + 1 < 2 ? 0 : ((DataHandler.GetPlayerDungeonInfoKind(DungeonKind.PetDG).lv - 1) % 10 + 1) * 80 - 80; SelectedBtn(2); break; case DungeonKind.AwakenStoneDG: escrDungeonSelect.scroller.ScrollPosition = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.AwakenStoneDG).lv < 2 ? 0 : (DataHandler.GetPlayerDungeonInfoKind(DungeonKind.AwakenStoneDG).lv - 1) * 80; SelectedBtn(3); break; case DungeonKind.relicDG: escrDungeonSelect.scroller.ScrollPosition = DataHandler.GetPlayerDungeonInfoKind(DungeonKind.relicDG).lv < 2 ? 0 : (DataHandler.GetPlayerDungeonInfoKind(DungeonKind.relicDG).lv - 1) * 80; SelectedBtn(6); break; } escrDungeonSelect.scroller.RefreshActiveCellViews(); } public void SelectedBtn(int inum)//선택되어있는 항목 재선택을 막음(한 항목을 연속으로 터치하면 스크롤뷰 자동 옮기는 부분에서 문제가 발생함) { int select; switch (inum) { case 0: case 1: case 2: case 3: select = inum; break; case 6: select = 4; break; default: select = -1; break; } if (select < 0) return; for(int i = 0; i= DataHandler.PlayDgPreset.dgPetPreset.Length) { Array.Resize(ref DataHandler.PlayDgPreset.dgPetPreset, (int)DungeonKind.total); isDirty = true; } if (idgtype >= DataHandler.PlayDgPreset.dgSkillPreset.Length) { Array.Resize(ref DataHandler.PlayDgPreset.dgSkillPreset, (int)DungeonKind.total); isDirty = true; } if (idgtype >= DataHandler.PlayDgPreset.dgAwakenPreset.Length) { Array.Resize(ref DataHandler.PlayDgPreset.dgAwakenPreset, (int)DungeonKind.total); isDirty = true; } if(isDirty) DataHandler.PlayDgPreset.Save(); dungeonSkillPreset = DataHandler.PlayDgPreset.dgSkillPreset; dungeonPetPreset = DataHandler.PlayDgPreset.dgPetPreset; dungeonAwakenPreset = DataHandler.PlayDgPreset.dgAwakenPreset; GameUIMgr.SOpenPopupPreset(dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[idgtype], DungeonStart); } public void DungeonStart()//던전을 시작하면 프리셋이 던전 전용으로 맞춰진다. 그다음 레벨을 세팅하고 던전을 비활성화하고 던전을 시작한다. { GameUIMgr.SPreservePreset(DataHandler.PlayData.usePreset, DataHandler.PlayData.usePetPreset, DataHandler.PlayAwaken.usePreset); GameUIMgr.SSetActiveHotTime(false); int idgtype = (int)GetDungeonKind(); int iskillpreset = GameUIMgr.SGetSkillPreset(); dungeonSkillPreset[idgtype] = iskillpreset; if (iskillpreset != DataHandler.PlayData.usePreset) { DataHandler.PlayData.usePreset = iskillpreset; SkillMgr.SResetPreset(); } int ipetpreset = GameUIMgr.SGetPetPreset(); dungeonPetPreset[idgtype] = ipetpreset; if (ipetpreset != DataHandler.PlayData.usePetPreset) { DataHandler.PlayData.usePetPreset = ipetpreset; BattleMgr.SSetPet(ipetpreset); DataHandler.CalcPetEquipExtra(ipetpreset); PetMgr.SResetPreset(); } int iawakenpreset = GameUIMgr.SGetAwakenPreset(); dungeonAwakenPreset[idgtype] = iawakenpreset; if (iawakenpreset != DataHandler.PlayAwaken.usePreset) { DataHandler.PlayAwaken.usePreset = iawakenpreset; EnhanceMgr.StartSetAwakenPreset(); EnhanceMgr.SResetAwakenPreset(); } DataHandler.PlayDgPreset.Save(); BattleMgr.SetBattleTypeDungeon(idgtype); BattleMgr.NoRewardRepeatDungeon(); GameUIMgr.SCloseMenu(); GameUIMgr.SOnOffDungeonButton(false); DungeonMgr.SetDungeonLevel(DungeonLevel); BattleMgr.DungeonStart(DungeonLevel); if (!autoProgress || canvasUI.isActiveAndEnabled) { DungeonMgr.CloseDungeon(); EnhanceMgr.CloseEnhance(); GuardianMgr.SGuardianWindowOff(); } MissionMgr.SCloseMission(); } public void AutoProgressOnOff()//자동진행 토글 { SoundMgr.PlaySfx(SoundName.BtnPress); if (autoProgress) { autoProgressToggle.isOn = false; autoProgress = false; } else { autoProgressToggle.isOn = true; autoProgress = true; } } public void SetActiveAutoToggle(bool active)//자동진행 버튼의 활성화 여부를 결정한다. 수호령과 각성 던전은 자동진행이 없다. { if(autoProgressToggle != null) autoProgressToggle.gameObject.SetActive(active); } //펫은 10 스테이지 단위로 던전이 끊긴다. 그걸 페이징하는 부분. #region PetStage private void SetPetArea(int iarea) { if (iarea == iSelectArea) { escrDungeonSelect.scroller.RefreshActiveCellViews(); return; } iSelectArea = iarea; escrDungeonSelect.SetType(iSelectArea); btnPrevLevel.interactable = iSelectArea > 0; btnNextLevel.interactable = iSelectArea < (DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length / DataHandler.Const.dungeonPetStageMax) - 1; dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), (iSelectArea + 1).ToString()); } // 이전 지역. public void BtnPrevArea() { if (iLoading > 0 || iSelectArea <= 0) return; iLoading++; SoundMgr.PlaySfx(SoundName.BtnPress); SetPetArea(iSelectArea - 1); selectPetArea--; dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), (iSelectArea + 1).ToString()); escrDungeonSelect.scroller.RefreshActiveCellViews(); iLoading--; } // 다음 지역. public void BtnNextArea() { if (iLoading > 0 || iSelectArea >= (DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length / DataHandler.Const.dungeonPetStageMax) - 1) return; iLoading++; SoundMgr.PlaySfx(SoundName.BtnPress); SetPetArea(iSelectArea + 1); selectPetArea++; dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), (iSelectArea + 1).ToString()); escrDungeonSelect.scroller.RefreshActiveCellViews(); iLoading--; } #endregion //잠재능력이 해금될때 여기서 해금 통신을 한다. #region LockOnOff nIdLvInfo dataSlot = null; public void AwakenSlotUnlock() { dataSlot = new nIdLvInfo(); dataSlot.awaken = DataHandler.GetServerAwakenSlots().awaken; SvConnectManager.Instance.RequestSvPost(true, 0, IVServerFormat.UrlApi.GetUrl(IVServerFormat.UrlApi.AwakenUp), typeof(nCharAwakenReturn), AAwakenUnlockSucc, AAwakenUnlockFail, DataHandler.GetServerAwakenSlots(), true); } //각성 슬롯 통신 실패 private void AAwakenUnlockFail(IVServerFormat.SvError error, object request) { DataHandler.GetServerAwakenSlots().awaken--; } // 각성 슬롯 통신 성공. private void AAwakenUnlockSucc(object result, object request) { nCharAwakenReturn data = result as nCharAwakenReturn; if (data == null) { AAwakenUnlockFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request); return; } DataHandler.GetServerAwakenSlots().awaken = data.playAwaken.awaken; EnhanceMgr.RecalculateRerollCost(); CoverCamera.Release(); } #endregion //던전 목록 아래쪽의 보상 세팅 public void SetRewardList() { for (int i = 0; i < rewardItem.Length; i++) { rewardItem[i].gameObject.SetActive(false); } nReward[] reward = DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[Mathf.Min(DungeonLevel - 1, DataHandler.GetDungeonTypeInfo(dungeonKind).diffs.Length - 1)].rewards; for (int i = 0; i < reward.Length; i++) { rewardItem[i].gameObject.SetActive(true); rewardItem[i].SetGoods(reward[i].rewardType, reward[i].rewardId, reward[i].rewardCount); if (reward[i].rewardCount <= 0) { rewardItem[i].gameObject.SetActive(false); } } } int selectDungeonLv = 1; int selectPetArea = 0; public static int GetSelectDgLv() { return curMgr.selectDungeonLv; } public static int GetSelectPetArea() { return curMgr.selectPetArea; } //특정 레벨의 보상 목록. 왼쪽 던전 레벨을 누르면 사용된다. public static void SetRewardList(int num) { curMgr.selectDungeonLv = num; for (int i = 0; i < curMgr.rewardItem.Length; i++) { curMgr.rewardItem[i].gameObject.SetActive(false); } nReward[] reward = DataHandler.GetDungeonTypeInfo(curMgr.dungeonKind).diffs[num - 1].rewards; for (int i = 0; i < reward.Length; i++) { curMgr.rewardItem[i].gameObject.SetActive(true); curMgr.rewardItem[i].SetGoods(reward[i].rewardType, reward[i].rewardId, reward[i].rewardCount); if (reward[i].rewardCount <= 0) { curMgr.rewardItem[i].gameObject.SetActive(false); } } curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); } public static int GetDungeonBg() { return DataHandler.GetDungeonTypeInfo(curMgr.dungeonKind).bgId; } public static void OnOffBtnDungeonOut(bool onoff) { curMgr.btnDungeonOut.interactable = onoff; } public static bool isForceOut { get; set; } = false; public void DungeonOutWindow()//던전 진행 도중 나가기 버튼을 누르면 물어보는 창이 뜬다. { isForceOut = true; SoundMgr.PlaySfx(SoundName.BtnPress); GameUIMgr.SOpenPopup2Button(LocalizationText.GetText("msg_dungeonout"), DungeonForceOut); SoundMgr.PlaySfx(SoundName.BtnPress); } //던전 진행 도중에 나갈 때 사용된다. public void DungeonForceOut() { if (BattleMgr.doNotInterupt) { GameUIMgr.SOpenToast(LocalizationText.GetText("donot_interupt")); return; } if (GetDungeonKind() == DungeonKind.GuardianDG) GuardianMgr.setActiveRobot(false); isForceOut = false; GameUIMgr.SOpenMenu(); GameUIMgr.SOnOffDungeonButton(true); BattleMgr.SGoToStage(DataHandler.PlayData.curStage / 100, DataHandler.PlayData.curStage % 100); GameUIMgr.SSetActiveHotTime(true); BattleMgr.SResetSkillCooltime(); GameUIMgr.SReturnToPreservePreset(); //MissionMgr.SRefreshMission(); MissionMgr.SOpenMission(); } //던전 소탕을 할 때 사용되는 부분. 주로 소탕 횟수를 지정하는 버튼 기능(+ - Max Min)이 있다. #region Skip public void WindowTicketConsume() { if (iSelectedTab < 0) return; if (iLoading > 0) return; iLoading++; iSelectedCount = 1; SoundMgr.PlaySfx(SoundName.BtnPress); switch (iSelectedTab) { case (int)DungeonKind.PetDG: GameUIMgr.SOpenPopupItemUse(new nGoods(cGoods.TDgTicketGold + iSelectedTab - 1, 1, DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab)), TicketConsumeSub, TicketConsumeAdd, TicketConsumeMin, TicketConsumeMax, TicketConsume, null, FormatString.StringFormat(LocalizationText.GetText("dungeon_skip_level"), DungeonLevel - 1), LocalizationText.GetText("all_use"), LocalizationText.GetText(Global.STR_CANCEL)); GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); break; case (int)DungeonKind.EnhanceStoneDG: GameUIMgr.SOpenPopupItemUse(new nGoods(cGoods.TDgTicketGold + iSelectedTab + 1, 1, DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab)), TicketConsumeSub, TicketConsumeAdd, TicketConsumeMin, TicketConsumeMax, TicketConsume, null, FormatString.StringFormat(LocalizationText.GetText("dungeon_skip_level"), DungeonLevel - 1), LocalizationText.GetText("all_use"), LocalizationText.GetText(Global.STR_CANCEL)); GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); break; case (int)DungeonKind.relicDG: GameUIMgr.SOpenPopupItemUse(new nGoods(cGoods.TDgTicketGold + iSelectedTab - 2, 1, DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab)), TicketConsumeSub, TicketConsumeAdd, TicketConsumeMin, TicketConsumeMax, TicketConsume, null, FormatString.StringFormat(LocalizationText.GetText("dungeon_skip_level"), DungeonLevel - 1), LocalizationText.GetText("all_use"), LocalizationText.GetText(Global.STR_CANCEL)); GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); break; default: GameUIMgr.SOpenPopupItemUse(new nGoods(cGoods.TDgTicketGold + iSelectedTab, 1, DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab)), TicketConsumeSub, TicketConsumeAdd, TicketConsumeMin, TicketConsumeMax, TicketConsume, null, FormatString.StringFormat(LocalizationText.GetText("dungeon_skip_level"), DungeonLevel - 1), LocalizationText.GetText("all_use"), LocalizationText.GetText(Global.STR_CANCEL)); GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); break; } //GameUIMgr.SOpenPopupItemUse(new nGoods(cGoods.TDgTicketGold + iSelectedTab, 1, DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab)), // TicketConsumeSub, TicketConsumeAdd, TicketConsumeMin, TicketConsumeMax, TicketConsume, null, // FormatString.StringFormat(LocalizationText.GetText("dungeon_skip_level"), DungeonLevel - 1), LocalizationText.GetText("all_use"), LocalizationText.GetText(Global.STR_CANCEL)); //GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); iLoading--; } //int iSelectedId = -1; int iSelectedCount = 0; // 소모품 사용 수 감소. private void TicketConsumeSub() { if (iLoading > 0) return; iLoading++; if (iSelectedCount <= 1) { iLoading--; return; } iSelectedCount--; GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); iLoading--; } // 소모품 사용 수 증가. private void TicketConsumeAdd() { if (iLoading > 0) return; iLoading++; int imaxcount = DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab); if (iSelectedCount >= imaxcount) { iLoading--; return; } iSelectedCount++; GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); iLoading--; } // 소모품 사용 수 최소. private void TicketConsumeMin() { if (iLoading > 0) return; iLoading++; if (iSelectedCount <= 1) { iLoading--; return; } iSelectedCount = 1; GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); iLoading--; } // 소모품 사용 수 최대. private void TicketConsumeMax() { if (iLoading > 0) return; iLoading++; int imaxcount = DataHandler.GetDungeonTicketCount((DungeonKind)iSelectedTab); if (iSelectedCount >= imaxcount) { iLoading--; return; } iSelectedCount = imaxcount; GameUIMgr.SSetPopupItemUseCount(iSelectedCount, iSelectedCount); iLoading--; } // 소모품 사용하기. private void TicketConsume() { if (iLoading > 0) return; iLoading++; ADungeonTrySv(curMgr.DungeonLevel - 1, true, true, iSelectedCount, curMgr.DungeonBonus); } #endregion IVDataFormat.nDungeonTryInfo tryData = null; //던전이 성공했는지 실패했는지 혹은 소탕한건지를 저장해서 서버통신을 한다. #region Server public void ADungeonTrySv(int lv, bool clear, bool isskip,int skipcnt,float ibonus) { CoverCamera.Hold(); int idgtype = (int)GetDungeonKind(); if (isskip == true)//소탕기능을 사용했다면 바로 서버와 통신한다. { tryData = new nDungeonTryInfo(lv, clear, isskip, skipcnt, dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[idgtype], ibonus); } else { switch (dungeonKind)//소탕기능을 사용하지 않았다면 종류별로 다르게 통신을 시도한다. 여기서는 통신에 사용할 데이터를 할당한다. { case DungeonKind.GoldDG: case DungeonKind.EnhanceStoneDG: case DungeonKind.PetDG: case DungeonKind.AwakenStoneDG: case DungeonKind.relicDG: tryData = new nDungeonTryInfo(lv, clear, isskip, skipcnt, dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[(int)DungeonMgr.GetDungeonKind()], ibonus); break; case DungeonKind.AwakenDG: SetActiveAutoToggle(false); tryData = new nDungeonTryInfo(lv, clear, dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[idgtype]); break; case DungeonKind.GuardianDG: SetActiveAutoToggle(false); tryData = new nDungeonTryInfo(lv, GuardianMgr.GetGuardianId(), clear, dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[idgtype]); break; default: break; } } switch (dungeonKind)//할당한 데이터를 통해 여기서 서버 통신을 시도한다. { case DungeonKind.GoldDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonGold), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; case DungeonKind.EnhanceStoneDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonReinStone), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; case DungeonKind.PetDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonPet), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; case DungeonKind.AwakenStoneDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonAwakenStone), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; case DungeonKind.AwakenDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonAwaken), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; case DungeonKind.GuardianDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonGuardian), typeof(nDungeonResultReturn), AGuardianDungeonTrySucc, AGuardianDungeonTryFail, tryData, true); break; case DungeonKind.relicDG: SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonRelic), typeof(nDungeonResultReturn), ADungeonTrySucc, ADungeonTryFail, tryData, true); break; default: break; } } private void ADungeonTryFail(SvError error, object request) { BattleMgr.ChangeBattleTypeNormal(); CoverCamera.Release(); iLoading--; } // 던전 성패 통신 성공. private void ADungeonTrySucc(object result, object request) { nDungeonResultReturn data = result as nDungeonResultReturn; if (data == null) { ADungeonTryFail(new SvError(eErrorCode.NULL_OR_EMPTY), request); return; } GuardianMgr.setActiveRobot(false); if (tryData.clear) { if (!tryData.isSkip)//소탕하지 않았을때 { switch (dungeonKind) { case DungeonKind.GoldDG: BattleMgr.GetClearDungeonReward(DataHandler.GetDungeonTypeInfo(DungeonKind.GoldDG).diffs[curMgr.DungeonLevel - 1].rewards); DataHandler.PlayDgGold = data.playDgGold; curMgr.SetRewardList(); DungeonLevel++; curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.EnhanceStoneDG: BattleMgr.GetClearDungeonReward(DataHandler.GetDungeonTypeInfo(DungeonKind.EnhanceStoneDG).diffs[curMgr.DungeonLevel - 1].rewards); DataHandler.SetEnhanceStone(data.playCurrency.gearReinStone); DataHandler.PlayDgReinStone = data.playDgReinStone; curMgr.SetRewardList(); DungeonLevel++; curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.PetDG: BattleMgr.GetClearDungeonReward(DataHandler.GetDungeonTypeInfo(DungeonKind.PetDG).diffs[curMgr.DungeonLevel - 1].rewards); DataHandler.SetPudding(data.playCurrency.pudding); DataHandler.PlayDgPet = data.playDgPet; curMgr.SetRewardList(); DungeonLevel++; curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.AwakenStoneDG: BattleMgr.GetClearDungeonReward(DataHandler.GetDungeonTypeInfo(DungeonKind.AwakenStoneDG).diffs[curMgr.DungeonLevel - 1].rewards); DataHandler.SetAwakenStone(data.playCurrency.gearAwakenStone); DataHandler.PlayDgAwakenStone = data.playDgAwakenStone; curMgr.SetRewardList(); DungeonLevel++; curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.AwakenDG: BattleMgr.AwakenSuccessWindowEnable(); DataHandler.PlayAwaken = data.playAwaken; DataHandler.PlayDgAwaken = data.playDgAwaken; SetActiveAutoToggle(true); if (curMgr.DungeonLevel <= 6) DataHandler.AwakenSlotUnlock(curMgr.DungeonLevel); //curMgr.AwakenSlotUnlock(); EnhanceMgr.RecalculateRerollCost(); //GameUIMgr.SOpenPopup1Button(FormatString.StringFormat(LocalizationText.GetText("dungeon_clear"), curMgr.DungeonLevel.ToString())); //if(GetDungeonLevel() != 1) BuffMgr.Instance.ChangeAwakenDungeonStat(GetDungeonLevel());// EnhanceMgr.SCalcMyInfoStat(); break; case DungeonKind.relicDG: BattleMgr.GetClearDungeonReward(DataHandler.GetDungeonTypeInfo(DungeonKind.relicDG).diffs[curMgr.DungeonLevel - 1].rewards); DataHandler.SetGoods(data.playCurrency, false); DataHandler.PlayDgRelic = data.playDgRelic; curMgr.SetRewardList(); DungeonLevel++; curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; default: break; } if (autoProgress && IsDungeonProgressOK(0) && dungeonKind != DungeonKind.AwakenDG) { DungeonStart(); } else { BattleMgr.ChangeBattleTypeNormal(); } } else { int noreward = 0; int norewardfront = 0; for(int i=0;i< DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards.Length; i++) { if(DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards[i].rewardCount == 0) { noreward++; } } nGoods[] reward = new nGoods[DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards.Length - noreward]; for (int i = 0; i < DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards.Length; i++) { if (DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards[i].rewardCount != 0) { nReward rewarditem = DataHandler.GetDungeonTypeInfo(dungeonKind).diffs[curMgr.DungeonLevel - 2].rewards[i]; //rewarditem.rewardCount *= iSelectedCount; reward[i - norewardfront] = new nGoods(rewarditem); } else { norewardfront++; } } switch (dungeonKind) { case DungeonKind.GoldDG: BattleMgr.GetClearDungeonSkipReward(DataHandler.GetDungeonTypeInfo(DungeonKind.GoldDG).diffs[curMgr.DungeonLevel - 2].rewards, iSelectedCount,tryData.bonus); DataHandler.PlayDgGold = data.playDgGold; reward[0].propertyCount = reward[0].propertyCount * (int)((tryData.bonus + 1.0f) * dConst.RateMaxFloat) / dConst.RateMaxBi * iSelectedCount; GameUIMgr.SOpenPopupGoods(reward); curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.EnhanceStoneDG: BattleMgr.GetClearDungeonSkipReward(DataHandler.GetDungeonTypeInfo(DungeonKind.EnhanceStoneDG).diffs[curMgr.DungeonLevel - 2].rewards, iSelectedCount); DataHandler.SetEnhanceStone(data.playCurrency.gearReinStone); DataHandler.PlayDgReinStone = data.playDgReinStone; reward[0].propertyCount = reward[0].propertyCount * (int)((tryData.bonus + 1.0f) * dConst.RateMaxFloat) / dConst.RateMaxBi * iSelectedCount; GameUIMgr.SOpenPopupGoods(reward); curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.PetDG: BattleMgr.GetClearDungeonSkipReward(DataHandler.GetDungeonTypeInfo(DungeonKind.PetDG).diffs[curMgr.DungeonLevel - 2].rewards, iSelectedCount); DataHandler.SetPudding(data.playCurrency.pudding); DataHandler.PlayDgPet = data.playDgPet; reward[0].propertyCount = reward[0].propertyCount * (int)((tryData.bonus + 1.0f) * dConst.RateMaxFloat) / dConst.RateMaxBi * iSelectedCount; GameUIMgr.SOpenPopupGoods(reward); curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.AwakenStoneDG: BattleMgr.GetClearDungeonSkipReward(DataHandler.GetDungeonTypeInfo(DungeonKind.AwakenStoneDG).diffs[curMgr.DungeonLevel - 2].rewards, iSelectedCount); DataHandler.SetAwakenStone(data.playCurrency.gearAwakenStone); DataHandler.PlayDgAwakenStone = data.playDgAwakenStone; reward[0].propertyCount = reward[0].propertyCount * (int)((tryData.bonus + 1.0f) * dConst.RateMaxFloat) / dConst.RateMaxBi * iSelectedCount; GameUIMgr.SOpenPopupGoods(reward); curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; case DungeonKind.relicDG: BattleMgr.GetClearDungeonSkipReward(DataHandler.GetDungeonTypeInfo(DungeonKind.relicDG).diffs[curMgr.DungeonLevel - 2].rewards, iSelectedCount, tryData.bonus); DataHandler.PlayDgRelic = data.playDgRelic; reward[0].propertyCount = reward[0].propertyCount * (int)((tryData.bonus + 1.0f) * dConst.RateMaxFloat) / dConst.RateMaxBi * iSelectedCount; GameUIMgr.SOpenPopupGoods(reward); curMgr.escrDungeonSelect.scroller.RefreshActiveCellViews(); break; default: break; } autoProgress = false; btnDungeonSkip.interactable = (DataHandler.GetDungeonTicketCount(dungeonKind) > 0 && DungeonLevel > 1); BattleMgr.ChangeBattleTypeNormal(); } } else { switch (dungeonKind) { case DungeonKind.GoldDG: DataHandler.PlayDgGold = data.playDgGold; break; case DungeonKind.EnhanceStoneDG: DataHandler.PlayDgReinStone = data.playDgReinStone; break; case DungeonKind.PetDG: DataHandler.PlayDgPet = data.playDgPet; break; case DungeonKind.AwakenStoneDG: DataHandler.PlayDgAwakenStone = data.playDgAwakenStone; break; case DungeonKind.AwakenDG: DataHandler.PlayDgAwaken = data.playDgAwaken; break; case DungeonKind.GuardianDG: DataHandler.PlayDgGuardian[1] = data.playDgGuardian; break; case DungeonKind.relicDG: DataHandler.PlayDgRelic = data.playDgRelic; break; default: break; } } MissionMgr.SRefreshMission(); GameUIMgr.SSetGoods(); BattleMgr.SResetSkillCooltime(); tryData = null; CoverCamera.Release(); iLoading--; } public static bool IsDungeonProgressOK(int isNotSV) { if (curMgr.DungeonLevel + isNotSV > DataHandler.GetDungeonTypeInfo(curMgr.dungeonKind).diffs.Length) { return false; } if (DataHandler.GetDungeonTicketCount(curMgr.dungeonKind) - isNotSV <= 0) { return false; } return true; } #endregion //구 수호령 던전 서버 통신. 역할은 서버와 동일. #region Guardian public void ADungeonGuardianTrySv(int lv, bool clear, bool isskip, int skipcnt, float ibonus) { CoverCamera.Hold(); int idgtype = (int)GetDungeonKind(); tryData = new nDungeonTryInfo(lv, clear, dungeonSkillPreset[idgtype], dungeonPetPreset[idgtype], dungeonAwakenPreset[idgtype]); SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.DungeonGuardian), typeof(nDungeonResultReturn), AGuardianDungeonTrySucc, AGuardianDungeonTryFail, tryData, true); } private void AGuardianDungeonTryFail(SvError error, object request) { BattleMgr.ChangeBattleTypeNormal(); CoverCamera.Release(); tryData = null; iLoading--; } // 던전 성패 통신 성공. private void AGuardianDungeonTrySucc(object result, object request) { nDungeonResultReturn data = result as nDungeonResultReturn; if (data == null) { ADungeonTryFail(new SvError(eErrorCode.NULL_OR_EMPTY), request); return; } if (tryData.clear) { switch (dungeonKind) { case DungeonKind.GuardianDG: DataHandler.PlayDgGuardian[GuardianMgr.GetGuardianId()] = data.playDgGuardian; break; default: break; } BattleMgr.ChangeBattleTypeNormal(); } else { switch (dungeonKind) { case DungeonKind.GoldDG: DataHandler.PlayDgGold = data.playDgGold; break; case DungeonKind.EnhanceStoneDG: DataHandler.PlayDgReinStone = data.playDgReinStone; break; case DungeonKind.PetDG: DataHandler.PlayDgPet = data.playDgPet; break; case DungeonKind.AwakenStoneDG: DataHandler.PlayDgAwakenStone = data.playDgAwakenStone; break; case DungeonKind.AwakenDG: DataHandler.PlayDgAwaken = data.playDgAwaken; break; case DungeonKind.GuardianDG: DataHandler.PlayDgGuardian[GuardianMgr.GetGuardianId()] = data.playDgGuardian; break; case DungeonKind.relicDG: DataHandler.PlayDgRelic = data.playDgRelic; break; default: break; } } MissionMgr.SRefreshMission(); GameUIMgr.SSetGoods(); DataHandler.SetPlayGuardian(data.playGuardian.guardianType, data.playGuardian); GuardianMgr.SCalcGuardian(); BattleMgr.SSetGuardian(); GuardianMgr.setActiveRobot(false); tryData = null; CoverCamera.Release(); iLoading--; } #endregion }