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.
1375 lines
46 KiB
1375 lines
46 KiB
using IVDataFormat;
|
|
using IVServerFormat;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Security.Policy;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class SkillMgr : MonoBehaviour
|
|
{
|
|
#region Const
|
|
private static SkillMgr curMgr = null;
|
|
#endregion Const
|
|
|
|
#region UI
|
|
[Header("UI")]
|
|
[SerializeField]
|
|
private TextMeshProUGUI txtMainT;
|
|
|
|
[SerializeField]
|
|
private Canvas canvasUI;
|
|
private ButtonIV[] btnTabs;
|
|
private Image[] imgTabLineBottoms;
|
|
private Image[] imgTabLineRights;
|
|
private RectTransform rtrfSvSkill;
|
|
|
|
// 통합 레벨 효과.
|
|
private TextMeshProUGUI txtTotalEfcT, txtTotalLv, txtTotalEfc;
|
|
|
|
// 프리셋.
|
|
private GameObject groupPreset;
|
|
private ButtonIV[] btnPresetTabs;
|
|
private GoodsItem[] goodsPresets;
|
|
private GameObject[] goPresetUnsets, goPresetEmptys;
|
|
|
|
[SerializeField] float activeSkillScrTopValue = 352f;
|
|
[SerializeField] float pasiveSkillScrTopValue = 232f;
|
|
[SerializeField] EScrController escrSkill;
|
|
|
|
// 왼쪽 정보창.
|
|
[SerializeField]
|
|
Canvas skillLeftInfo;
|
|
private GoodsItem goodsInfo;
|
|
private GameObject goBtnInfoHelp;
|
|
private TextMeshProUGUI txtInfoUnlockLv;
|
|
private TextMeshProUGUI txtInfoName;
|
|
private GraphicsColorSetter txtInfoNameColorSetter;
|
|
private TextMeshProUGUI txtInfoLv;
|
|
private GameObject goInfoMax;
|
|
private Image imgBtnInfoEnhance;
|
|
private ButtonIV btnInfoEnhance, btnInfoAwaken;
|
|
private TextMeshProUGUI txtInfoEnhance;
|
|
|
|
// 스킬 효과 탭.
|
|
private GameObject goBtnInfoEfcAddLock;
|
|
private Image imgTabInfoLineRight;
|
|
private ButtonIV btnTabInfoEffect, btnTabInfoEffectAdd;
|
|
private GameObject groupInfoSkillEffect, groupInfoSkillEffectAdd;
|
|
private GameObject[] goInfoEfcs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcTs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcCurs;
|
|
[SerializeField] GameObject[] InfoEfcArrowObjs;
|
|
[SerializeField] TextMeshProUGUI[] txtInfoEfcNexts;
|
|
[SerializeField] TextMeshProUGUI txtInfoEfcDesc;
|
|
|
|
// 스킬 추가 효과.
|
|
private EfcAddItem[] efcAddItems;
|
|
#endregion UI
|
|
|
|
|
|
#region Variables
|
|
private int iLoading = 1;
|
|
private bool bReLocalize = true;
|
|
private bool bReLocalizeSkill = false;
|
|
private bool bInitNeedActive = true;
|
|
private bool bInitNeedPassive = true;
|
|
|
|
private int iSelectedTab = -1;
|
|
private int iSelectedPreset = -1;
|
|
private int iSvType = -1;
|
|
private int iSelectedId = -1;
|
|
private int[][] iPresetSkills;
|
|
private bool bChangePreset = false;
|
|
|
|
private EnhancedUI.SmallList<int> activeRows;
|
|
private int[] activeIds;
|
|
private EnhancedUI.SmallList<int> passiveRows;
|
|
private int[] passiveIds;
|
|
|
|
private bool bClicking = false;
|
|
private nIdEnhance dataEnhance = null;
|
|
#endregion Variables
|
|
|
|
|
|
#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("skill_title");
|
|
}
|
|
else
|
|
{
|
|
bReLocalize = false;
|
|
Transform trfcanvas = canvasUI.transform;
|
|
trfcanvas.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_title");
|
|
btnTabs = trfcanvas.Find("tabWrapTop").GetComponentsInChildren<ButtonIV>(true);
|
|
|
|
btnTabs[0].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_active");
|
|
btnTabs[1].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_passive");
|
|
|
|
imgTabLineBottoms = new Image[btnTabs.Length];
|
|
imgTabLineRights = new Image[btnTabs.Length];
|
|
|
|
for (int i = 0; i < btnTabs.Length; i++)
|
|
{
|
|
imgTabLineBottoms[i] = btnTabs[i].transform.Find("linebottom").GetComponent<Image>();
|
|
imgTabLineRights[i] = btnTabs[i].transform.Find("lineright").GetComponent<Image>();
|
|
}
|
|
|
|
rtrfSvSkill = trfcanvas.Find("SvSkill").GetComponent<RectTransform>();
|
|
|
|
Transform trfefc = trfcanvas.Find("groupTotalEffect");
|
|
trfefc.Find("txtTotalLvT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_totallv");
|
|
txtTotalEfcT = trfefc.Find("txtTotalEfcT").GetComponent<TextMeshProUGUI>();
|
|
txtTotalLv = trfefc.Find("txtTotalLv").GetComponent<TextMeshProUGUI>();
|
|
txtTotalEfc = trfefc.Find("txtTotalEfc").GetComponent<TextMeshProUGUI>();
|
|
|
|
Transform trfpreset = trfcanvas.Find("groupPreset");
|
|
groupPreset = trfpreset.gameObject;
|
|
trfpreset.Find("btnSave").Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_save");
|
|
btnPresetTabs = new ButtonIV[6];
|
|
btnPresetTabs[0] = trfpreset.Find("tab0").GetComponent<ButtonIV>();
|
|
btnPresetTabs[1] = trfpreset.Find("tab1").GetComponent<ButtonIV>();
|
|
btnPresetTabs[2] = trfpreset.Find("tab2").GetComponent<ButtonIV>();
|
|
btnPresetTabs[3] = trfpreset.Find("tab3").GetComponent<ButtonIV>();
|
|
btnPresetTabs[4] = trfpreset.Find("tab4").GetComponent<ButtonIV>();
|
|
btnPresetTabs[5] = trfpreset.Find("tab5").GetComponent<ButtonIV>();
|
|
|
|
goodsPresets = trfpreset.GetComponentsInChildren<GoodsItem>(true);
|
|
goPresetUnsets = new GameObject[goodsPresets.Length];
|
|
goPresetEmptys = new GameObject[goodsPresets.Length];
|
|
for (int i = 0; i < goodsPresets.Length; i++)
|
|
{
|
|
goPresetUnsets[i] = goodsPresets[i].transform.Find("unset").gameObject;
|
|
goPresetEmptys[i] = goodsPresets[i].transform.Find("empty").gameObject;
|
|
}
|
|
|
|
// 왼쪽 정보창.
|
|
Transform trfleft = skillLeftInfo.transform;
|
|
trfleft.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_info");
|
|
goodsInfo = trfleft.Find("GoodsItem").GetComponent<GoodsItem>();
|
|
goBtnInfoHelp = trfleft.Find("btnInfo").gameObject;
|
|
|
|
txtInfoUnlockLv = trfleft.Find("txtUnlockLv").GetComponent<TextMeshProUGUI>();
|
|
txtInfoName = trfleft.Find("txtName").GetComponent<TextMeshProUGUI>();
|
|
txtInfoNameColorSetter = txtInfoName.GetComponent<GraphicsColorSetter>();
|
|
txtInfoLv = trfleft.Find("txtLv").GetComponent<TextMeshProUGUI>();
|
|
|
|
btnInfoEnhance = trfleft.Find("btnEnhance").GetComponent<ButtonIV>();
|
|
imgBtnInfoEnhance = btnInfoEnhance.GetComponent<Image>();
|
|
txtInfoEnhance = btnInfoEnhance.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
|
|
btnInfoEnhance.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_enhance");
|
|
btnInfoAwaken = trfleft.Find("btnAwaken").GetComponent<ButtonIV>();
|
|
btnInfoAwaken.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_awaken");
|
|
goInfoMax = trfleft.Find("goMax").gameObject;
|
|
goInfoMax.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText(Global.STR_MAX);
|
|
|
|
goBtnInfoEfcAddLock = trfleft.Find("goEffectAddLock").gameObject;
|
|
imgTabInfoLineRight = trfleft.Find("tabSubLine2").GetComponent<Image>();
|
|
btnTabInfoEffect = trfleft.Find("tabEffect").GetComponent<ButtonIV>();
|
|
btnTabInfoEffect.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("skill_efcuse");
|
|
btnTabInfoEffectAdd = trfleft.Find("tabEffectAdd").GetComponent<ButtonIV>();
|
|
btnTabInfoEffectAdd.transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_effectadd");
|
|
|
|
// 스킬 사용 효과.
|
|
groupInfoSkillEffect = trfleft.Find("groupEffect").gameObject;
|
|
Transform trfinfoefc = groupInfoSkillEffect.transform;
|
|
goInfoEfcs = new GameObject[4];
|
|
for (int i = 0; i < goInfoEfcs.Length; i++)
|
|
goInfoEfcs[i] = trfinfoefc.GetChild(i).gameObject;
|
|
|
|
// 스킬 추가 효과.
|
|
groupInfoSkillEffectAdd = trfleft.Find("groupEffectAdd").gameObject;
|
|
efcAddItems = groupInfoSkillEffectAdd.GetComponentsInChildren<EfcAddItem>();
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
efcAddItems[i].Init();
|
|
efcAddItems[i].SetCondition(i + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 설정에서 언어 변경 시 처리.
|
|
public static void SReLocalize()
|
|
{
|
|
curMgr.Localize(true);
|
|
curMgr.bReLocalize = true;
|
|
curMgr.bReLocalizeSkill = true;
|
|
}
|
|
|
|
// 백버튼 처리.
|
|
public static bool SCloseMenu()
|
|
{
|
|
return curMgr.CloseMenu();
|
|
}
|
|
|
|
private bool CloseMenu()
|
|
{
|
|
// 게임 시작 후 열린적 없음.
|
|
if (iSelectedTab < 0)
|
|
return false;
|
|
|
|
if (canvasUI.enabled)
|
|
{
|
|
CloseSkill();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
curMgr = this;
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
iLoading--;
|
|
}
|
|
#endregion Base
|
|
|
|
|
|
#region UI
|
|
public static void SMoveSkill(eEventMoveType content)
|
|
{
|
|
curMgr.OpenSkill();
|
|
switch (content)
|
|
{
|
|
case eEventMoveType.skillActive:
|
|
curMgr.TabPress(0);
|
|
break;
|
|
case eEventMoveType.skillPassive:
|
|
curMgr.TabPress(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void OpenSkill()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (bReLocalize)
|
|
Localize(false);
|
|
if (iSelectedTab < 0)
|
|
{
|
|
iPresetSkills = new int[6][];
|
|
for (int i = 0; i < iPresetSkills.Length; i++)
|
|
{
|
|
iPresetSkills[i] = new int[4];
|
|
for (int k = 0; k < iPresetSkills[i].Length; k++)
|
|
{
|
|
iPresetSkills[i][k] = DataHandler.PlayData.skillPresets[i][k];
|
|
}
|
|
}
|
|
TabPreset(DataHandler.PlayData.usePreset);
|
|
TabPress(0);
|
|
}
|
|
else
|
|
{
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
SetLeftSkillInfo();
|
|
TabLeftEffect();
|
|
}
|
|
SetTotalLvEfc();
|
|
|
|
canvasUI.enabled = true;
|
|
skillLeftInfo.enabled = true;
|
|
GameUIMgr.SRightWindowClose();
|
|
GameUIMgr.SOpenLeftPanel(skill : true, awakenskill: true);
|
|
GameUIMgr.SSetMainUiOn(false);
|
|
BattleMgr.CloseFailScroll();
|
|
|
|
if (bReLocalizeSkill)
|
|
{
|
|
bReLocalizeSkill = false;
|
|
escrSkill.Localize();
|
|
}
|
|
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
iLoading--;
|
|
}
|
|
|
|
public void CloseSkill()
|
|
{
|
|
if (!canvasUI.enabled)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
ResetSkillPreset();
|
|
MissionMgr.SRefreshMission();
|
|
DataHandler.CheckAchivement(eContent.Battle);
|
|
|
|
canvasUI.enabled = false;
|
|
skillLeftInfo.enabled = false;
|
|
GameUIMgr.SCloseLeftPanel();
|
|
GameUIMgr.SSetMainUiOn(true);
|
|
|
|
if (isSave > 0)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
isSave = 0;
|
|
}
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 도움말 열기.
|
|
public void OpenHelp()
|
|
{
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
}
|
|
#endregion UI
|
|
|
|
|
|
#region Tab
|
|
public void TabPress(int index)
|
|
{
|
|
if (iSelectedTab == index)
|
|
return;
|
|
iLoading++;
|
|
|
|
if (iSelectedTab >= 0)
|
|
{
|
|
btnTabs[iSelectedTab].interactable = true;
|
|
}
|
|
iSelectedTab = index;
|
|
btnTabs[iSelectedTab].interactable = false;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
|
|
// 액티브.
|
|
if (iSelectedTab == 0)
|
|
{
|
|
Vector2 v2pos = rtrfSvSkill.offsetMax;
|
|
v2pos.y = -activeSkillScrTopValue;
|
|
rtrfSvSkill.offsetMax = v2pos;
|
|
groupPreset.SetActive(true);
|
|
|
|
iSvType = cGoods.TSkillActive;
|
|
escrSkill.SetType(iSvType);
|
|
|
|
if (bInitNeedActive)
|
|
{
|
|
bInitNeedActive = false;
|
|
// 초기화.
|
|
int irowcnt = 4;
|
|
Dictionary<int, dSkillActive> datas = DataHandler.GetSkillActives();
|
|
activeRows = new EnhancedUI.SmallList<int>();
|
|
activeIds = new int[datas.Count];
|
|
|
|
int itemindex = 0;
|
|
foreach (var item in datas)
|
|
{
|
|
if (itemindex % irowcnt == 0)
|
|
activeRows.Add(activeRows.Count);
|
|
activeIds[itemindex] = item.Key;
|
|
itemindex++;
|
|
}
|
|
}
|
|
|
|
int iskill = DataHandler.PlayData.skillPresets[iSelectedPreset][0] - 1;
|
|
if (iskill < 0)
|
|
SelectSkill(iSvType, 0, 0,true);
|
|
else
|
|
SelectSkill(iSvType, iskill / 4, iskill % 4,true);
|
|
escrSkill.LoadDatas(activeRows);
|
|
}
|
|
// 패시브.
|
|
else
|
|
{
|
|
Vector2 v2pos = rtrfSvSkill.offsetMax;
|
|
v2pos.y = -pasiveSkillScrTopValue;
|
|
rtrfSvSkill.offsetMax = v2pos;
|
|
groupPreset.SetActive(false);
|
|
|
|
iSvType = cGoods.TSkillPassive;
|
|
escrSkill.SetType(iSvType);
|
|
|
|
if (bInitNeedPassive)
|
|
{
|
|
bInitNeedPassive = false;
|
|
// 초기화.
|
|
int irowcnt = 4;
|
|
Dictionary<int, dSkillPassive> datas = DataHandler.GetSkillPassives();
|
|
passiveRows = new EnhancedUI.SmallList<int>();
|
|
passiveIds = new int[datas.Count];
|
|
|
|
int itemindex = 0;
|
|
foreach (var item in datas)
|
|
{
|
|
if (itemindex % irowcnt == 0)
|
|
passiveRows.Add(passiveRows.Count);
|
|
passiveIds[itemindex] = item.Key;
|
|
itemindex++;
|
|
}
|
|
}
|
|
|
|
SelectSkill(iSvType, 0, 0,true);
|
|
escrSkill.LoadDatas(passiveRows);
|
|
}
|
|
|
|
// 선 표시.
|
|
for (int i = 0; i < imgTabLineBottoms.Length; i++)
|
|
{
|
|
imgTabLineBottoms[i].enabled = iSelectedTab != i;
|
|
if (i == iSelectedTab)
|
|
{
|
|
imgTabLineBottoms[i].enabled = false;
|
|
imgTabLineRights[i].enabled = true;
|
|
}
|
|
else
|
|
{
|
|
imgTabLineBottoms[i].enabled = true;
|
|
imgTabLineRights[i].enabled = true;
|
|
}
|
|
}
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 총합 레벨 효과 표시.
|
|
private void SetTotalLvEfc()
|
|
{
|
|
int[] ilvefcs = DataHandler.GetSkillTotalLevels();
|
|
txtTotalLv.text = FormatString.TextLv(ilvefcs[1]);
|
|
txtTotalEfc.text = FormatString.TextCntPerBlank(ilvefcs[0].ToString(), ilvefcs[3].ToString());
|
|
txtTotalEfcT.text = FormatString.StringFormat(LocalizationText.GetText("skill_addefc"), FormatString.TextEffectValue(eEffectType.SkillDamage, ilvefcs[2]));
|
|
}
|
|
#endregion Tab
|
|
|
|
|
|
#region Skill
|
|
public static int SGetSkillId(int isvtype, int irow, int icolumn)
|
|
{
|
|
return curMgr.GetSkillId(isvtype, irow, icolumn);
|
|
}
|
|
|
|
// 스킬 번호.
|
|
private int GetSkillId(int isvtype, int irow, int icolumn)
|
|
{
|
|
int index = irow * 4 + icolumn;
|
|
if (isvtype == cGoods.TSkillActive)
|
|
{
|
|
if (index >= activeIds.Length)
|
|
return -1;
|
|
return activeIds[index];
|
|
}
|
|
|
|
if (index >= passiveIds.Length)
|
|
return -1;
|
|
return passiveIds[index];
|
|
}
|
|
|
|
public static bool SIsSetSkill(int idx)
|
|
{
|
|
return curMgr.IsSetSkill(idx);
|
|
}
|
|
|
|
// 프리셋에 장착된 스킬인지.
|
|
private bool IsSetSkill(int idx)
|
|
{
|
|
if (iSelectedPreset < 0)
|
|
return false;
|
|
|
|
int[] ipresets = iPresetSkills[iSelectedPreset];
|
|
for (int i = 0; i < ipresets.Length; i++)
|
|
{
|
|
if (ipresets[i] == idx)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// 선택된 스킬인지.
|
|
public static bool SIsSelectSkill(int idx)
|
|
{
|
|
return idx == curMgr.iSelectedId;
|
|
}
|
|
|
|
public static void SSelectSkill(int isvtype, int irow, int icolumn)
|
|
{
|
|
if (curMgr.iLoading > 0)
|
|
return;
|
|
curMgr.SelectSkill(isvtype, irow, icolumn, false);
|
|
}
|
|
|
|
// 스킬 선택.
|
|
public void SelectSkill(int isvtype, int irow, int icolumn, bool isOpen)
|
|
{
|
|
iLoading++;
|
|
|
|
int key = GetSkillId(isvtype, irow, icolumn);
|
|
iSelectedId = key;
|
|
SetLeftSkillInfo();
|
|
TabLeftEffect();
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
|
|
iLoading--;
|
|
if (!isOpen)
|
|
{
|
|
for(int i = 0; i < 4; i++)
|
|
{
|
|
if (AutoBtnPresetSlot(i))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
#endregion Skill
|
|
|
|
|
|
#region Preset
|
|
// 프리셋 버튼 선택.
|
|
public void TabPreset(int index)
|
|
{
|
|
if (iSelectedPreset == index)
|
|
return;
|
|
|
|
if (iSelectedPreset >= 0)
|
|
btnPresetTabs[iSelectedPreset].interactable = true;
|
|
iSelectedPreset = index;
|
|
btnPresetTabs[iSelectedPreset].interactable = false;
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
SetSkillPreset();
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
}
|
|
|
|
int isSave = 0;
|
|
|
|
// 프리셋 세팅.
|
|
private void SetSkillPreset()
|
|
{
|
|
for (int k = 0; k < goodsPresets.Length; k++)
|
|
{
|
|
if (iPresetSkills[iSelectedPreset][k] < 0)
|
|
{
|
|
goodsPresets[k].ReleaseData();
|
|
goPresetUnsets[k].SetActive(false);
|
|
goPresetEmptys[k].SetActive(true);
|
|
goodsPresets[k].SetActiveContent(star: false, rarity: false, count: false);
|
|
}
|
|
else
|
|
{
|
|
goodsPresets[k].SetGoods(cGoods.TSkillActive, iPresetSkills[iSelectedPreset][k], 0L);
|
|
goPresetUnsets[k].SetActive(true);
|
|
goPresetEmptys[k].SetActive(false);
|
|
goodsPresets[k].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
}
|
|
|
|
if (iSelectedTab >= 0)
|
|
{
|
|
isSave++;
|
|
//GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
}
|
|
|
|
}
|
|
|
|
// 프리셋 초기화. 수정한 내용 취소.
|
|
private void ResetSkillPreset()
|
|
{
|
|
if (!bChangePreset)
|
|
return;
|
|
bChangePreset = false;
|
|
for (int i = 0; i < iPresetSkills.Length; i++)
|
|
{
|
|
for (int k = 0; k < iPresetSkills[i].Length; k++)
|
|
{
|
|
if (iPresetSkills[i][k] == DataHandler.PlayData.skillPresets[i][k])
|
|
continue;
|
|
iPresetSkills[i][k] = DataHandler.PlayData.skillPresets[i][k];
|
|
|
|
if (i == iSelectedPreset)
|
|
{
|
|
if (iPresetSkills[i][k] < 0)
|
|
{
|
|
goodsPresets[k].ReleaseData();
|
|
goPresetUnsets[k].SetActive(false);
|
|
goPresetEmptys[k].SetActive(true);
|
|
goodsPresets[k].SetActiveContent(star: false, rarity: false, count: false);
|
|
}
|
|
else
|
|
{
|
|
goodsPresets[k].SetGoods(cGoods.TSkillActive, iPresetSkills[i][k], 0L);
|
|
goPresetUnsets[k].SetActive(true);
|
|
goPresetEmptys[k].SetActive(false);
|
|
goodsPresets[k].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 프리셋 저장.
|
|
public void ApplySkillPreset()
|
|
{
|
|
if (iLoading > 0 || !bChangePreset)
|
|
return;
|
|
iLoading++;
|
|
|
|
bool[] bchanges = new bool[6];
|
|
for (int i = 0; i < iPresetSkills.Length; i++)
|
|
{
|
|
for (int k = 0; k < iPresetSkills[i].Length; k++)
|
|
{
|
|
if (iPresetSkills[i][k] != DataHandler.PlayData.skillPresets[i][k])
|
|
{
|
|
bchanges[i] = true;
|
|
DataHandler.EditSkillPreset(i, k, iPresetSkills[i][k]);
|
|
}
|
|
}
|
|
}
|
|
BattleMgr.SetDpsSkill();
|
|
|
|
if (bchanges[0] || bchanges[1] || bchanges[2] || bchanges[3] || bchanges[4] || bchanges[5])
|
|
{
|
|
DataHandler.PlayData.Save();
|
|
isSave++;
|
|
//GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
|
|
}
|
|
if (bchanges[DataHandler.PlayData.usePreset])
|
|
BattleMgr.SResetSkillPreset();
|
|
|
|
bChangePreset = false;
|
|
iLoading--;
|
|
}
|
|
|
|
// 프리셋의 슬롯 자동 선택.
|
|
public bool AutoBtnPresetSlot(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return false;
|
|
if (iLoading > 0)
|
|
return false;
|
|
iLoading++;
|
|
|
|
// 선택중인 스킬이 없는 경우.
|
|
if (iSelectedId < 0)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 오픈되지 않은 스킬.
|
|
if (DataHandler.GetSkillActive(iSelectedId).level <= 0)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 선택중인 스킬에 있는 스킬이 선택된 슬롯에 이미 장착되어 있으면 아무것도 하지 않음.
|
|
if (iPresetSkills[iSelectedPreset][islotindex] == iSelectedId)
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
|
|
// 선택중인 스킬이 해당 프리셋의 다른 슬롯에 있는지 확인.
|
|
int iprevslot = -1;
|
|
for (int k = 0; k < iPresetSkills[iSelectedPreset].Length; k++)
|
|
{
|
|
if (iPresetSkills[iSelectedPreset][k] == iSelectedId)
|
|
{
|
|
iprevslot = k;
|
|
iLoading--;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 선택한 슬롯에 다른 스킬 없으면 스킬 세팅.
|
|
if (iPresetSkills[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
//// 선택중인 스킬이 이미 다른 슬롯에 있으면 그 슬롯 해제.
|
|
//if (iprevslot >= 0)
|
|
//{
|
|
// iPresetSkills[iSelectedPreset][iprevslot] = -1;
|
|
// goodsPresets[iprevslot].ReleaseData();
|
|
// goPresetUnsets[iprevslot].SetActive(false);
|
|
// goPresetEmptys[iprevslot].SetActive(true);
|
|
//}
|
|
|
|
// 선택한 슬롯에 스킬 세팅.
|
|
iPresetSkills[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TSkillActive, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
goodsPresets[islotindex].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
// 선택한 슬롯에 이미 장착된 다른 스킬이 있는 경우 서로 교체.
|
|
else
|
|
{
|
|
iLoading--;
|
|
return false;
|
|
//// 선택중인 스킬이 이미 다른 슬롯에 있으면 그 슬롯에 선택한 슬롯에 장착중인 스킬을 장착.
|
|
//if (iprevslot >= 0)
|
|
//{
|
|
// iPresetSkills[iSelectedPreset][iprevslot] = iPresetSkills[iSelectedPreset][islotindex];
|
|
// goodsPresets[iprevslot].SetGoods(cGoods.TSkillActive, iPresetSkills[iSelectedPreset][iprevslot], 0L);
|
|
// goPresetUnsets[iprevslot].SetActive(true);
|
|
// goPresetEmptys[iprevslot].SetActive(false);
|
|
//}
|
|
//
|
|
//// 선택한 슬롯에 스킬 세팅.
|
|
//iPresetSkills[iSelectedPreset][islotindex] = iSelectedId;
|
|
//goodsPresets[islotindex].SetGoods(cGoods.TSkillActive, iSelectedId, 0L);
|
|
//goPresetUnsets[islotindex].SetActive(true);
|
|
//goPresetEmptys[islotindex].SetActive(false);
|
|
}
|
|
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplySkillPreset();
|
|
|
|
return true;
|
|
}
|
|
|
|
// 프리셋의 슬롯 선택.
|
|
public void BtnPresetSlot(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 선택중인 스킬이 없는 경우.
|
|
if (iSelectedId < 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 오픈되지 않은 스킬.
|
|
if (DataHandler.GetSkillActive(iSelectedId).level <= 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택중인 스킬에 있는 스킬이 선택된 슬롯에 이미 장착되어 있으면 아무것도 하지 않음.
|
|
if (iPresetSkills[iSelectedPreset][islotindex] == iSelectedId)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택중인 스킬이 해당 프리셋의 다른 슬롯에 있는지 확인.
|
|
int iprevslot = -1;
|
|
for (int k = 0; k < iPresetSkills[iSelectedPreset].Length; k++)
|
|
{
|
|
if (iPresetSkills[iSelectedPreset][k] == iSelectedId)
|
|
{
|
|
iprevslot = k;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 선택한 슬롯에 다른 스킬 없으면 스킬 세팅.
|
|
if (iPresetSkills[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
// 선택중인 스킬이 이미 다른 슬롯에 있으면 그 슬롯 해제.
|
|
if (iprevslot >= 0)
|
|
{
|
|
iPresetSkills[iSelectedPreset][iprevslot] = -1;
|
|
goodsPresets[iprevslot].ReleaseData();
|
|
goPresetUnsets[iprevslot].SetActive(false);
|
|
goPresetEmptys[iprevslot].SetActive(true);
|
|
goodsPresets[iprevslot].SetActiveContent(star: false, rarity: false, count: false);
|
|
}
|
|
|
|
// 선택한 슬롯에 스킬 세팅.
|
|
iPresetSkills[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TSkillActive, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
goodsPresets[islotindex].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
// 선택한 슬롯에 이미 장착된 다른 스킬이 있는 경우 서로 교체.
|
|
else
|
|
{
|
|
// 선택중인 스킬이 이미 다른 슬롯에 있으면 그 슬롯에 선택한 슬롯에 장착중인 스킬을 장착.
|
|
if (iprevslot >= 0)
|
|
{
|
|
iPresetSkills[iSelectedPreset][iprevslot] = iPresetSkills[iSelectedPreset][islotindex];
|
|
goodsPresets[iprevslot].SetGoods(cGoods.TSkillActive, iPresetSkills[iSelectedPreset][iprevslot], 0L);
|
|
goPresetUnsets[iprevslot].SetActive(true);
|
|
goPresetEmptys[iprevslot].SetActive(false);
|
|
goodsPresets[islotindex].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
|
|
// 선택한 슬롯에 스킬 세팅.
|
|
iPresetSkills[iSelectedPreset][islotindex] = iSelectedId;
|
|
goodsPresets[islotindex].SetGoods(cGoods.TSkillActive, iSelectedId, 0L);
|
|
goPresetUnsets[islotindex].SetActive(true);
|
|
goPresetEmptys[islotindex].SetActive(false);
|
|
goodsPresets[islotindex].SetActiveContent(star: false, rarity: true, count: false);
|
|
}
|
|
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplySkillPreset();
|
|
}
|
|
|
|
// 프리셋의 슬롯 해제.
|
|
public void BtnPresetRelease(int islotindex)
|
|
{
|
|
if (iSelectedTab > 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 슬롯에 스킬 없으면 아무것도 하지 않음.
|
|
if (iPresetSkills[iSelectedPreset][islotindex] < 0)
|
|
{
|
|
iLoading--;
|
|
return;
|
|
}
|
|
|
|
// 선택한 슬롯에 있는 스킬을 해제.
|
|
iPresetSkills[iSelectedPreset][islotindex] = -1;
|
|
goodsPresets[islotindex].ReleaseData();
|
|
goPresetUnsets[islotindex].SetActive(false);
|
|
goPresetEmptys[islotindex].SetActive(true);
|
|
goodsPresets[islotindex].SetActiveContent(star: false, rarity: false, count: false);
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
bChangePreset = true;
|
|
iLoading--;
|
|
|
|
ApplySkillPreset();
|
|
}
|
|
#endregion Preset
|
|
|
|
|
|
#region Left Info
|
|
// 왼쪽 정보창 스킬 정보 표시.
|
|
private void SetLeftSkillInfo()
|
|
{
|
|
int itype = 0;
|
|
bool bhave = false;
|
|
int imaxlv = 0;
|
|
int iopenlv = 0;
|
|
int ilevel = 0;
|
|
bool bmaxlv = false;
|
|
long iprice = 0L;
|
|
int iawaken = 1;
|
|
int imaxawaken = 1;
|
|
|
|
int rarity = 1;
|
|
|
|
// 액티브.
|
|
if (iSvType == cGoods.TSkillActive)
|
|
{
|
|
dSkillActive skill = DataHandler.GetSkillActive(iSelectedId);
|
|
itype = cGoods.TSkillActive;
|
|
imaxlv = DataHandler.GetSkillMaxLv(itype, iSelectedId);
|
|
iopenlv = skill.openLv;
|
|
ilevel = skill.level;
|
|
iawaken = skill.awaken;
|
|
imaxawaken = skill.maxAwaken;
|
|
bhave = DataHandler.PlayData.playerLv >= skill.openLv;
|
|
bmaxlv = skill.level >= imaxlv;
|
|
iprice = (ilevel - 1) * skill.buyingCntInc + skill.buyingCnt;
|
|
|
|
int icalclv = ilevel - 1;
|
|
if (icalclv < 0)
|
|
icalclv = 1;
|
|
|
|
rarity = skill.rarity;
|
|
|
|
txtInfoEfcTs[0].text = LocalizationText.GetText("skill_damage");
|
|
txtInfoEfcTs[2].text = LocalizationText.GetText("skill_range");
|
|
txtInfoEfcTs[3].text = LocalizationText.GetText("skill_cool");
|
|
txtInfoEfcCurs[0].text = FormatString.TextIntPer0(icalclv * skill.atkValueInc + skill.atkValue);
|
|
txtInfoEfcCurs[2].text = BattleMgr.SGetSkillRange(iSelectedId).ToString();
|
|
txtInfoEfcCurs[3].text = FormatString.TextTimeSec(DataHandler.GetSkillCool(iSelectedId));
|
|
txtInfoEfcDesc.text = LocalizationText.GetText(FormatString.CombineAllString(FormatString.SkillActiveDesc, iSelectedId.ToString()));
|
|
txtInfoEfcDesc.enabled = true;
|
|
goInfoEfcs[2].SetActive(true);
|
|
goInfoEfcs[3].SetActive(true);
|
|
|
|
// 상태이상 있음.
|
|
if (skill.debuffType != eSkillDebuff.None)
|
|
{
|
|
txtInfoEfcTs[1].text = FormatString.TextDebuffTitle(skill.debuffType);
|
|
txtInfoEfcCurs[1].text = FormatString.TextDebuffValue(skill.debuffType, icalclv * skill.debuffValueInc + skill.debuffValue, skill.debuffTime);
|
|
InfoEfcArrowObjs[1].SetActive(false);
|
|
txtInfoEfcNexts[1].enabled = false;
|
|
goInfoEfcs[1].SetActive(true);
|
|
}
|
|
// 상태이상 없음.
|
|
else
|
|
{
|
|
goInfoEfcs[1].SetActive(false);
|
|
}
|
|
|
|
// 최고 레벨 또는 미소지.
|
|
if (bmaxlv || !bhave)
|
|
{
|
|
InfoEfcArrowObjs[0].SetActive(false);
|
|
txtInfoEfcNexts[0].enabled = false;
|
|
InfoEfcArrowObjs[1].SetActive(false);
|
|
txtInfoEfcNexts[1].enabled = false;
|
|
}
|
|
// 최고 레벨 아님.
|
|
else
|
|
{
|
|
txtInfoEfcNexts[0].text = FormatString.TextIntPer0(ilevel * skill.atkValueInc + skill.atkValue);
|
|
InfoEfcArrowObjs[0].SetActive(true);
|
|
txtInfoEfcNexts[0].enabled = true;
|
|
// 상태이상 있음.
|
|
if (skill.debuffType != eSkillDebuff.None && skill.debuffValueInc > 0)
|
|
{
|
|
txtInfoEfcNexts[1].text = FormatString.TextDebuffValue(skill.debuffType, ilevel * skill.debuffValueInc + skill.debuffValue, skill.debuffTime);
|
|
InfoEfcArrowObjs[1].SetActive(true);
|
|
txtInfoEfcNexts[1].enabled = true;
|
|
}
|
|
else
|
|
{
|
|
InfoEfcArrowObjs[1].SetActive(false);
|
|
txtInfoEfcNexts[1].enabled = false;
|
|
}
|
|
}
|
|
}
|
|
// 패시브.
|
|
else
|
|
{
|
|
dSkillPassive skill = DataHandler.GetSkillPassive(iSelectedId);
|
|
itype = cGoods.TSkillPassive;
|
|
imaxlv = DataHandler.GetSkillMaxLv(itype, iSelectedId);
|
|
iopenlv = skill.openLv;
|
|
ilevel = skill.level;
|
|
iawaken = 1;
|
|
imaxawaken = 1;
|
|
bhave = DataHandler.PlayData.playerLv >= skill.openLv;
|
|
bmaxlv = skill.level >= imaxlv;
|
|
iprice = (ilevel - 1) * skill.buyingCntInc + skill.buyingCnt;
|
|
|
|
int icalclv = ilevel - 1;
|
|
if (icalclv < 0)
|
|
icalclv = 1;
|
|
|
|
rarity = skill.rarity;
|
|
|
|
txtInfoEfcTs[0].text = FormatString.TextEffectTitle(skill.abilityType);
|
|
txtInfoEfcCurs[0].text = FormatString.TextEffectValue(skill.abilityType, icalclv * skill.abilityValueInc + skill.abilityValue, true);
|
|
txtInfoEfcDesc.enabled = false;
|
|
for (int i = 1; i < goInfoEfcs.Length; i++)
|
|
goInfoEfcs[i].SetActive(false);
|
|
|
|
// 최고 레벨 또는 미소지.
|
|
if (bmaxlv || !bhave)
|
|
{
|
|
InfoEfcArrowObjs[0].SetActive(false);
|
|
txtInfoEfcNexts[0].enabled = false;
|
|
}
|
|
// 최고 레벨 아님.
|
|
else
|
|
{
|
|
txtInfoEfcNexts[0].text = FormatString.TextEffectValue(skill.abilityType, ilevel * skill.abilityValueInc + skill.abilityValue, true);
|
|
InfoEfcArrowObjs[0].SetActive(true);
|
|
txtInfoEfcNexts[0].enabled = true;
|
|
}
|
|
}
|
|
|
|
bool bmaxawaken = iawaken >= imaxawaken;
|
|
|
|
goodsInfo.SetGoods(itype, iSelectedId, 0L);
|
|
txtInfoUnlockLv.text = FormatString.CombineAllString(LocalizationText.GetText("all_openlv"), iopenlv.ToString());
|
|
txtInfoName.text = FormatString.GetGoodsName(itype, iSelectedId);
|
|
txtInfoNameColorSetter?.SetColor(rarity.ToString());
|
|
txtInfoLv.text = FormatString.TextLvPerMax(bhave ? ilevel : 0, imaxlv);
|
|
|
|
// 최고 레벨이 아니면 강화 버튼 표시.
|
|
btnInfoEnhance.gameObject.SetActive(!bmaxlv);
|
|
// 최고 레벨에 각성이 가능하면 각성 버튼 표시.
|
|
btnInfoAwaken.gameObject.SetActive(bmaxlv && !bmaxawaken);
|
|
// 최고 레벨에 각성이 불가능하면 Max 버튼 표시.
|
|
goInfoMax.SetActive(bmaxlv && bmaxawaken);
|
|
// 각성 가능 스킬은 추가 효과 탭 표시.
|
|
imgTabInfoLineRight.enabled = imaxawaken > 1;
|
|
btnTabInfoEffectAdd.gameObject.SetActive(imgTabInfoLineRight.enabled);
|
|
goBtnInfoEfcAddLock.SetActive(imgTabInfoLineRight.enabled && iawaken <= 1);
|
|
//goBtnInfoHelp.SetActive(imgTabInfoLineRight.enabled);
|
|
goBtnInfoHelp.SetActive(false);
|
|
|
|
// 미소지.
|
|
if (!bhave)
|
|
{
|
|
txtInfoEnhance.text = FormatString.S_Hypen;
|
|
btnInfoEnhance.interactable = false;
|
|
}
|
|
// 최고 레벨 아님.
|
|
else if (!bmaxlv)
|
|
{
|
|
txtInfoEnhance.text = FormatString.TextInt(iprice);
|
|
btnInfoEnhance.interactable = iprice <= DataHandler.Goods.skillReinStone;
|
|
}
|
|
imgBtnInfoEnhance.raycastTarget = btnInfoEnhance.interactable;
|
|
}
|
|
|
|
// 추가 효과 표시.
|
|
private void SetEfcAddList()
|
|
{
|
|
dSkillActive skill = DataHandler.GetSkillActive(iSelectedId);
|
|
dAwaken[] awakens = DataHandler.GetSkillAwakens();
|
|
|
|
for (int i = 0; i < efcAddItems.Length; i++)
|
|
{
|
|
if (i + 1 >= skill.maxAwaken)
|
|
{
|
|
efcAddItems[i].gameObject.SetActive(false);
|
|
continue;
|
|
}
|
|
efcAddItems[i].gameObject.SetActive(true);
|
|
bool bopen = skill.awaken > i + 1;
|
|
efcAddItems[i].SetOpen(bopen);
|
|
if (bopen)
|
|
{
|
|
efcAddItems[i].SetEffect(eEffectType.SkillCool, awakens[i + 1].coolTimeDec);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 왼쪽 정보창 스킬 효과 탭.
|
|
public void TabLeftEffect()
|
|
{
|
|
iLoading++;
|
|
|
|
btnTabInfoEffect.interactable = false;
|
|
btnTabInfoEffectAdd.interactable = true;
|
|
groupInfoSkillEffect.SetActive(true);
|
|
groupInfoSkillEffectAdd.SetActive(false);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 왼쪽 정보창 추가 효과 탭.
|
|
public void TabLeftEffectAdd()
|
|
{
|
|
if (goBtnInfoEfcAddLock.activeSelf)
|
|
{
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_skillawakenneed"));
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
return;
|
|
}
|
|
iLoading++;
|
|
|
|
btnTabInfoEffect.interactable = true;
|
|
btnTabInfoEffectAdd.interactable = false;
|
|
groupInfoSkillEffect.SetActive(false);
|
|
groupInfoSkillEffectAdd.SetActive(true);
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
SetEfcAddList();
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 왼쪽 정보창 도움말.
|
|
public void OpenInfoHelp()
|
|
{
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
}
|
|
#endregion Left Info
|
|
|
|
|
|
#region Skill Enhance
|
|
// 스킬 강화 시작.
|
|
public void OnBtnSkillEnhanceDown()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
if (bClicking)
|
|
return;
|
|
iLoading++;
|
|
|
|
bClicking = true;
|
|
int ibeflv = 1;
|
|
if (iSvType == cGoods.TSkillActive)
|
|
ibeflv = DataHandler.GetSkillActive(iSelectedId).level;
|
|
else
|
|
ibeflv = DataHandler.GetSkillPassive(iSelectedId).level;
|
|
dataEnhance = new nIdEnhance(iSelectedId, ibeflv);
|
|
StartCoroutine(nameof(CSkillEnhance));
|
|
}
|
|
|
|
// 스킬 강화 진행.
|
|
private IEnumerator CSkillEnhance()
|
|
{
|
|
int imaxlv = DataHandler.GetSkillMaxLv(iSvType, iSelectedId);
|
|
int ipricebase = 0;
|
|
int ipriceinc = 0;
|
|
if (iSvType == cGoods.TSkillActive)
|
|
{
|
|
dSkillActive skill = DataHandler.GetSkillActive(iSelectedId);
|
|
ipricebase = skill.buyingCnt;
|
|
ipriceinc = skill.buyingCntInc;
|
|
}
|
|
else
|
|
{
|
|
dSkillPassive skill = DataHandler.GetSkillPassive(iSelectedId);
|
|
ipricebase = skill.buyingCnt;
|
|
ipriceinc = skill.buyingCntInc;
|
|
}
|
|
|
|
int iprice = (dataEnhance.aftLv - 1) * ipriceinc + ipricebase;
|
|
if (iprice > DataHandler.Goods.skillReinStone || dataEnhance.aftLv >= imaxlv)
|
|
{
|
|
OnBtnSkillEnhanceUp();
|
|
yield break;
|
|
}
|
|
|
|
dataEnhance.aftLv++;
|
|
dataEnhance.tryCount++;
|
|
dataEnhance.useGoods += iprice;
|
|
DataHandler.SubSkillStone(iprice);
|
|
DataHandler.LvUpSkill(iSvType, iSelectedId, dataEnhance.aftLv);
|
|
SetLeftSkillInfo();
|
|
GameUIMgr.SPlayEfcLeftEnhance();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
SoundMgr.PlaySfx(SoundName.ReinforceSuccess);
|
|
|
|
yield return YieldInstructionCache.WaitForSeconds(0.4f);
|
|
|
|
while (bClicking)
|
|
{
|
|
isMultiEnhance = true;
|
|
|
|
iprice = (dataEnhance.aftLv - 1) * ipriceinc + ipricebase;
|
|
if (iprice > DataHandler.Goods.skillReinStone || dataEnhance.aftLv >= imaxlv)
|
|
{
|
|
OnBtnSkillEnhanceUp();
|
|
yield break;
|
|
}
|
|
|
|
dataEnhance.aftLv++;
|
|
dataEnhance.tryCount++;
|
|
dataEnhance.useGoods += iprice;
|
|
DataHandler.SubSkillStone(iprice);
|
|
DataHandler.LvUpSkill(iSvType, iSelectedId, dataEnhance.aftLv);
|
|
SetLeftSkillInfo();
|
|
GameUIMgr.SPlayEfcLeftEnhance();
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
SoundMgr.PlaySfx(SoundName.ReinforceSuccess);
|
|
|
|
yield return YieldInstructionCache.WaitForSeconds(0.1f);
|
|
}
|
|
}
|
|
|
|
bool isMultiEnhance = false;
|
|
|
|
// 스킬 강화 종료.
|
|
public void OnBtnSkillEnhanceUp()
|
|
{
|
|
if (!bClicking)
|
|
return;
|
|
CoverCamera.Hold();
|
|
StopCoroutine(nameof(CSkillEnhance));
|
|
bClicking = false;
|
|
|
|
string url;
|
|
if (iSvType == cGoods.TSkillActive)
|
|
url = UrlApi.GetUrl(UrlApi.SkillEnhanceActive);
|
|
else
|
|
url = UrlApi.GetUrl(UrlApi.SkillEnhancePassive);
|
|
|
|
if (isMultiEnhance==true)
|
|
{
|
|
isMultiEnhance=false;
|
|
StartCoroutine(StartSVSkillEnhance(0.3f, url));
|
|
}
|
|
else
|
|
{
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, url, typeof(nSkillReturn), ASkillEnhanceSucc, ASkillEnhanceFail, dataEnhance, false);
|
|
}
|
|
}
|
|
|
|
IEnumerator StartSVSkillEnhance(float time,string url)
|
|
{
|
|
yield return new WaitForSeconds(time);
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, url, typeof(nSkillReturn), ASkillEnhanceSucc, ASkillEnhanceFail, dataEnhance, false);
|
|
}
|
|
|
|
// 스킬 강화 통신 실패.
|
|
private void ASkillEnhanceFail(SvError error, object request)
|
|
{
|
|
DataHandler.AddEnhanceStone(dataEnhance.useGoods);
|
|
DataHandler.LvUpSkill(iSvType, dataEnhance.sid, dataEnhance.befLv);
|
|
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
SetTotalLvEfc();
|
|
SetLeftSkillInfo();
|
|
dataEnhance = null;
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 스킬 강화 통신 성공.
|
|
private void ASkillEnhanceSucc(object result, object request)
|
|
{
|
|
nSkillReturn data = result as nSkillReturn;
|
|
if (data == null)
|
|
{
|
|
ASkillEnhanceFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.SetGoods(data.playCurrency, true);
|
|
nIdLvInfo datalv;
|
|
if (iSvType == cGoods.TSkillActive)
|
|
datalv = data.playCharSkillActive;
|
|
else
|
|
datalv = data.playCharSkillPassive;
|
|
DataHandler.LvUpSkill(iSvType, datalv.sid, datalv.lv);
|
|
|
|
escrSkill.scroller.RefreshActiveCellViews();
|
|
SetTotalLvEfc();
|
|
SetLeftSkillInfo();
|
|
dataEnhance = null;
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
#endregion Skill Enhance
|
|
|
|
|
|
#region Skill Awaken
|
|
// 스킬 각성.
|
|
public void BtnSkillAwaken()
|
|
{
|
|
if (iSelectedId < 0)
|
|
return;
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
|
|
// 모자, 망토, 신발
|
|
dAwaken awaken = DataHandler.GetSkillAwakenNext(iSvType, iSelectedId);
|
|
int[] igearneeds = DataHandler.GetSkillAwakenNeeds(iSvType, iSelectedId);
|
|
int[] ihavecounts = new int[4] { DataHandler.GetGearEquip(cGoods.TBagArmorHat, igearneeds[0]).count, DataHandler.GetGearEquip(cGoods.TBagArmorCape, igearneeds[1]).count,
|
|
DataHandler.GetGearEquip(cGoods.TBagArmorShoes, igearneeds[2]).count, DataHandler.Goods.gearAwakenStone };
|
|
int[] ineedcounts = new int[4] { awaken.buyingCnt1, awaken.buyingCnt2, awaken.buyingCnt3, awaken.AwakenStoneCnt };
|
|
|
|
nGoods[] goodsneeds = new nGoods[4]
|
|
{
|
|
new nGoods(cGoods.TBagArmorHat, igearneeds[0], ihavecounts[0]),
|
|
new nGoods(cGoods.TBagArmorCape, igearneeds[1], ihavecounts[1]),
|
|
new nGoods(cGoods.TBagArmorShoes, igearneeds[2], ihavecounts[2]),
|
|
new nGoods(cGoods.TCurrency, cGoods.CAwakenStoneGear, ihavecounts[3])
|
|
};
|
|
|
|
SoundMgr.PlaySfx(SoundName.BtnPress);
|
|
|
|
GameUIMgr.SOpenPopupItemsUseTo(goodsneeds, new nGoods(iSvType, iSelectedId, -1), ASkillAwaken, null,
|
|
LocalizationText.GetText("skill_awaken"), LocalizationText.GetText("skill_awakenmsg"), LocalizationText.GetText("all_awakengo"), LocalizationText.GetText(Global.STR_CANCEL));
|
|
GameUIMgr.SSetPopupItemsUseToCount(ihavecounts, ineedcounts);
|
|
|
|
iLoading--;
|
|
}
|
|
|
|
// 스킬 각성하기.
|
|
private void ASkillAwaken()
|
|
{
|
|
if (iLoading > 0)
|
|
return;
|
|
iLoading++;
|
|
CoverCamera.Hold();
|
|
|
|
SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.SkillAwakenActive), typeof(nSkillReturn), ASkillAwakenSucc, ASkillAwakenFail, new nIdCnt(iSelectedId), false);
|
|
}
|
|
|
|
// 스킬 각성 통신 실패.
|
|
private void ASkillAwakenFail(SvError error, object request)
|
|
{
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
|
|
// 스킬 각성 통신 성공.
|
|
private void ASkillAwakenSucc(object result, object request)
|
|
{
|
|
nSkillReturn data = result as nSkillReturn;
|
|
if (data == null)
|
|
{
|
|
ASkillAwakenFail(new SvError(eErrorCode.NULL_OR_EMPTY), request);
|
|
return;
|
|
}
|
|
|
|
DataHandler.SetGoods(data.playCurrency, true);
|
|
|
|
dAwaken awaken = DataHandler.GetSkillAwakenNext(iSvType, iSelectedId);
|
|
int[] igearneeds = DataHandler.GetSkillAwakenNeeds(iSvType, iSelectedId);
|
|
// 장비 수량 감소.
|
|
DataHandler.SubGearEquip(cGoods.TBagArmorHat, igearneeds[0], awaken.buyingCnt1);
|
|
DataHandler.SubGearEquip(cGoods.TBagArmorCape, igearneeds[1], awaken.buyingCnt1);
|
|
DataHandler.SubGearEquip(cGoods.TBagArmorShoes, igearneeds[2], awaken.buyingCnt1);
|
|
// 스킬 각성.
|
|
DataHandler.AwakenSkill(iSvType, iSelectedId, data.playCharSkillActive.awaken);
|
|
|
|
SetLeftSkillInfo();
|
|
if (groupInfoSkillEffectAdd.activeSelf)
|
|
{
|
|
SetEfcAddList();
|
|
}
|
|
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_skillawaken"));
|
|
BattleMgr.SRecalcSkillCool(iSelectedId);
|
|
|
|
CoverCamera.Release();
|
|
iLoading--;
|
|
}
|
|
#endregion Skill Awaken
|
|
|
|
public static void SResetPreset()
|
|
{
|
|
if (curMgr.iSelectedTab < 0)
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < curMgr.iPresetSkills.Length; i++)
|
|
{
|
|
for (int k = 0; k < curMgr.iPresetSkills[i].Length; k++)
|
|
{
|
|
curMgr.iPresetSkills[i][k] = DataHandler.PlayData.skillPresets[i][k];
|
|
}
|
|
}
|
|
curMgr.TabPreset(DataHandler.PlayData.usePreset);
|
|
}
|
|
}
|