You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1543 lines
59 KiB

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<TextMeshProUGUI>().text = LocalizationText.GetText("dungeon_title");
leftPanel = dungeonLeftPn.gameObject;
dungeonImage = leftPanel.transform.Find("DungeonImage").GetComponent<Image>();
dungeonName = dungeonImage.transform.Find("DungeonName").GetComponent<TextMeshProUGUI>();
for (int i = 0; i < dungeonPanel.Length; i++)
{
txtDungeonPanel[i] = dungeonPanel[i].transform.Find("txtTabTitle").GetComponent<TextMeshProUGUI>();
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<TextMeshProUGUI>().text = LocalizationText.GetText("dungeon_info");
btnDungeonSkip = leftCanvasUI.transform.Find("btnSkip").GetComponent<ButtonIV>();
txtDungeonSkip = btnDungeonSkip.transform.Find("txt").GetComponent<TextMeshProUGUI>();
txtDungeonSkip.text = LocalizationText.GetText("dungeon_skip");
txtAutoProgress.text = LocalizationText.GetText("auto_progress");
DungeonPetSet = leftCanvasUI.transform.Find("PetDungeonSet").gameObject;
dungeonPetLevel = DungeonPetSet.transform.Find("PetLevel").GetComponent<TextMeshProUGUI>();
dungeonPetLevel.text = FormatString.StringFormat(LocalizationText.GetText("dungeon_pet_level"), "1");
btnPrevLevel = DungeonPetSet.transform.Find("prevArrow").GetComponent<ButtonIV>();
btnNextLevel = DungeonPetSet.transform.Find("nextArrow").GetComponent<ButtonIV>();
dungeonName.text = LocalizationText.GetText("gold_dungeon_title");
autoProgressToggle = leftCanvasUI.transform.Find("txtCheckBox").transform.Find("CheckBox").GetComponent<Toggle>();
}
}
// 설정에서 언어 변경 시 처리.
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<int> goldDungeon = new EnhancedUI.SmallList<int>();
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<int> eStoneDungeon = new EnhancedUI.SmallList<int>();
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<int> petDungeon = new EnhancedUI.SmallList<int>();
//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<int> aStoneDungeon = new EnhancedUI.SmallList<int>();
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<int> aStoneDungeon = new EnhancedUI.SmallList<int>();
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<btnTabs.Length; i++)
{
if (i == select)
btnTabs[i].interactable = false;
else
btnTabs[i].interactable = true;
}
}
void AllSelectDisable()//던전 선택할때 나오는 하얀색 테두리 비활성화.
{
for (int i = 0; i < objDungeonSelect.Length; i++)
{
objDungeonSelect[i].SetActive(false);
}
}
#endregion
#region Dungeon
public static void SetDungeonLevel(int DGLevel)
{
curMgr.DungeonLevel = DGLevel;
}
public static int GetDungeonLevel()
{
return curMgr.DungeonLevel;
}
public static void GetSuccessOrFail(bool success)//던전 성공과 실패여부를 서버에 통신함(주석은 먼 옛날 서버가 없었을 적 코드)
{
if (success)//성공했을때. 소탕시에는 여기를 거치지 않음
{
curMgr.ADungeonTrySv(curMgr.DungeonLevel, true, false, 1, curMgr.DungeonBonus);
}
else//실패했을때
{
curMgr.ADungeonTrySv(curMgr.DungeonLevel, false, false, 1, curMgr.DungeonBonus);
}
if (!curMgr.autoProgress || DataHandler.GetPlayerDungeonInfoKind(GetDungeonKind()).ticket <= 1) //자동진행중이 아닐때와 티켓 갯수가 1개 이하일때는 자동진행이 풀림
{
GameUIMgr.SCloseMenu();
GameUIMgr.SOnOffDungeonButton(true);
}
GameUIMgr.SReturnToPreservePreset();
MissionMgr.SOpenMission();
}
#endregion
public static void SPresetSetting()
{
curMgr.PresetSetting();
}
private void PresetSetting()//던전별 프리셋 저장.
{
int idgtype = (int)GetDungeonKind();
bool isDirty = false;
if (idgtype >= 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.Instance.ResetSkillCooltime();
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.Instance.ResetSkillCooltime();
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
}