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.
 
 
 
 
 
 

1757 lines
56 KiB

using IVDataFormat;
using Spine;
using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Vector3 = UnityEngine.Vector3;
public class EnhanceMgr : MonoSingleton<EnhanceMgr>
{
#region UI
[Header("UI")]
[SerializeField]
private TextMeshProUGUI txtMainT;
[SerializeField]
GameObject mainEnhanceBedge;
[SerializeField]
GameObject goldEnhanceBedge;
[SerializeField]
GameObject pointEnhanceBedge;
[SerializeField]
private Canvas canvasUI;
[SerializeField]
private Canvas leftWindow;
private ButtonIV[] btnTabs;
private GameObject[] groupTabs;
[SerializeField]
EScrController escrCharGoldEnhance;
[SerializeField]
EScrController escrCharLvPointEnhance;
[SerializeField]
EScrController escrAutoRerollConfig;
[SerializeField]
EScrController escrAwakenDungeon;
GameObject goldMulti;
GameObject lvPointMulti;
GameObject AwakenImage;
GameObject AwakenBottom;
[SerializeField]
ButtonIV[] goldMultiButton;
[SerializeField]
ButtonIV[] lvPointMultiButton;
[SerializeField] ViewGroup tabGoldViewGroup;
[SerializeField] ViewGroup tabLvPointViewGroup;
[SerializeField] ViewGroup tabAwakenViewGroup;
#endregion UI
private int iLoading = 1;
private bool bReLocalize = true;
private bool bReLocalizeGold, bReLocalizeLvPoint, bReLocalizeAwaken = false;
private bool bInitNeed = true;
private bool bInitNeedGold = true;
private bool bInitNeedLvPoint = true;
private bool blnitNeedAwaken = true;
private int iSelectedTab = -1;
private Texture2D tx2dSelectedCloth = null;
#region LeftWindow
TextMeshProUGUI txtLeftWindow;
GameObject myInfo;
GameObject myAwaken;
GameObject ChangeButtonSet;
GameObject AutoChanging;
GameObject AutoConfig;
TextMeshProUGUI txtInfo;
TextMeshProUGUI txtProgress;
TextMeshProUGUI txtRareity;
RareityAutoReroll[] rareityAutos;
GameObject SelectConfig;
ButtonIV btnAutoSpend;
TextMeshProUGUI txtSelectConfig;
[SerializeField]
ButtonIV btnStoneSpend;
TextMeshProUGUI txtChange;
TextMeshProUGUI txtChangeCost;
[SerializeField]
ButtonIV btnStoneSpendAuto;
TextMeshProUGUI txtChangeAuto;
TextMeshProUGUI txtChangeCostAuto;
GameObject goLeftBtnInfo;
GameObject goLeftBack;
#endregion
#region PlayerInfo
GameObject playerLevelInfo;
TextMeshProUGUI lvTxt;
TextMeshProUGUI lvPercentTxt;
Slider ExpFill;
ButtonIV btnReset;
TextMeshProUGUI txtReset;
TextMeshProUGUI txtPrice;
Image imgPicon;
#endregion
#region Awaken
[SerializeField]
GameObject awakenLock;
[SerializeField]
GameObject awakenVerticalList;
[SerializeField]
GameObject awakenButtonPrefab;
AwakenEffectItem[] awakenButton;
int rerollCost;
[SerializeField]
TextMeshProUGUI txtRewardList;
[SerializeField]
TextMeshProUGUI txtRewardDia;
[SerializeField]
GameObject awakenAutoButton;
[SerializeField]
ButtonIV[] btnAbilityPreset;
[SerializeField]
TextMeshProUGUI txtSave;
[SerializeField]
TextMeshProUGUI txtEffect, txtValue;
private eEffectType[] efcOptions;
private bool[] bSelectedOptions;
#endregion
#region MyInfo
[SerializeField]
private IVCharSimple ivChar;
[SerializeField]
GameObject StatInfoT;
TextMeshProUGUI[] charInfoNameT;
TextMeshProUGUI[] charInfoNumberT;
[SerializeField]
GameObject StatInfoB;
TextMeshProUGUI[] charInfoNameB;
TextMeshProUGUI[] charInfoNumberB;
#endregion
#region Base
public static void SLocalize(bool bmain)
{
if (Instance != null)
Instance.Localize(bmain);
}
// 번역.
private void Localize(bool bmain)
{
if (bmain)
{
txtMainT.text = LocalizationText.GetText("enhance_title");
}
else
{
bReLocalize = false;
canvasUI.transform.Find("txtT").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("enhance_title");
btnTabs[0].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("enhance_gold");
btnTabs[1].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("enhance_lvpoint");
btnTabs[2].transform.Find("txt").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("enhance_awaken");
txtInfo.text = LocalizationText.GetText("awaken_auto_info");
txtRareity.text = LocalizationText.GetText("awaken_grade_kind");
for (int i = 0; i < rareityAutos.Length; i++)
rareityAutos[i].Localize();
txtSelectConfig.text = LocalizationText.GetText("awaken_ability_kind");
txtProgress.text = LocalizationText.GetText("all_autoprocessing");
txtChange.text = LocalizationText.GetText("all_changego");
txtChangeAuto.text = LocalizationText.GetText("all_changego");
txtRewardList.text = LocalizationText.GetText("reward_list");
txtSave.text = LocalizationText.GetText("all_save");
for (int i = 0; i < charInfoNameT.Length; i++)
{
charInfoNameT[i].text = LocalizationText.GetText(FormatString.CombineAllString("stat_kind_top", (i + 1).ToString()));
}
for (int i = 0; i < charInfoNameB.Length; i++)
{
charInfoNameB[i].text = LocalizationText.GetText(FormatString.CombineAllString("stat_kind_bottom", (i + 1).ToString()));
}
}
}
// 설정에서 언어 변경 시 처리.
public static void SReLocalize()
{
Instance.Localize(true);
Instance.bReLocalize = true;
Instance.bReLocalizeGold = true;
Instance.bReLocalizeLvPoint = true;
Instance.bReLocalizeAwaken = true;
}
void Start()
{
CheckBedge();
StartSetAwakenPreset();
iLoading--;
}
private void Init()
{
bInitNeed = false;
btnTabs = canvasUI.transform.Find("tabWrapTop").GetComponentsInChildren<ButtonIV>(true);
goldEnhanceBedge = btnTabs[0].transform.Find("badge").gameObject;
pointEnhanceBedge = btnTabs[1].transform.Find("badge").gameObject;
groupTabs = new GameObject[btnTabs.Length];
groupTabs[0] = canvasUI.transform.Find("SvGold").gameObject;
groupTabs[1] = canvasUI.transform.Find("SvLvPoint").gameObject;
groupTabs[2] = canvasUI.transform.Find("SvAwaken").gameObject;
goldMulti = canvasUI.transform.Find("MultiGoldGroup").gameObject;
lvPointMulti = canvasUI.transform.Find("LvPointGroup").gameObject;
playerLevelInfo = lvPointMulti.transform.Find("PlayerLvInfo").gameObject;
AwakenImage = canvasUI.transform.Find("AwakenImage").gameObject;
AwakenBottom = canvasUI.transform.Find("AwakenBottom").gameObject;
lvTxt = playerLevelInfo.transform.Find("Lvtxt").GetComponent<TextMeshProUGUI>();
lvPercentTxt = playerLevelInfo.transform.Find("LvPercenttxt").GetComponent<TextMeshProUGUI>();
ExpFill = playerLevelInfo.transform.Find("sliderBg").GetComponent<Slider>();
btnReset = playerLevelInfo.transform.Find("btnReset").GetComponent<ButtonIV>();
imgPicon = playerLevelInfo.transform.Find("picon").GetComponent<Image>();
imgPicon.sprite = AddressableMgr.GetPlayerIcon(DataHandler.PlayData.playerIcon);
txtReset = btnReset.transform.Find("txtReset").GetComponent<TextMeshProUGUI>();
txtPrice = btnReset.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
awakenButton = new AwakenEffectItem[6];
txtLeftWindow = leftWindow.transform.Find("txtT").GetComponent<TextMeshProUGUI>();
myInfo = leftWindow.transform.Find("MyInfo").gameObject;
myAwaken = leftWindow.transform.Find("MyAwaken").gameObject;
AutoConfig = leftWindow.transform.Find("AutoConfig").gameObject;
txtInfo = AutoConfig.transform.Find("txtInfo").GetComponent<TextMeshProUGUI>();
txtRareity = AutoConfig.transform.Find("RareitySet").Find("txtRareity").GetComponent<TextMeshProUGUI>();
rareityAutos = AutoConfig.transform.Find("RareitySet").Find("rareitySelect").GetComponentsInChildren<RareityAutoReroll>(true);
for (int i = 0; i < rareityAutos.Length; i++)
rareityAutos[i].Init();
SelectConfig = AutoConfig.transform.Find("SelectConfig").gameObject;
btnAutoSpend = SelectConfig.transform.Find("btnStoneSpend (1)").GetComponent<ButtonIV>();
txtSelectConfig = SelectConfig.transform.Find("txtSelectConfig").GetComponent<TextMeshProUGUI>();
goLeftBack = leftWindow.transform.Find("back").gameObject;
goLeftBtnInfo = myAwaken.transform.Find("btnInfo").gameObject;
ChangeButtonSet = myAwaken.transform.Find("ChangeButtonSet").gameObject;
AutoChanging = myAwaken.transform.Find("AutoChanging").gameObject;
txtProgress = AutoChanging.transform.Find("txtProgress").GetComponent<TextMeshProUGUI>();
txtChange = btnStoneSpend.transform.Find("txtChange").GetComponent<TextMeshProUGUI>();
txtChangeCost = btnStoneSpend.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
txtChangeAuto = btnStoneSpendAuto.transform.Find("txtChange").GetComponent<TextMeshProUGUI>();
txtChangeCostAuto = btnStoneSpendAuto.transform.Find("txtPrice").GetComponent<TextMeshProUGUI>();
charInfoNameT = new TextMeshProUGUI[2];
charInfoNumberT = new TextMeshProUGUI[2];
TextMeshProUGUI[] objListT = StatInfoT.GetComponentsInChildren<TextMeshProUGUI>(true);
for (int i = 0; i < objListT.Length; i += 2)
{
charInfoNameT[i / 2] = objListT[i];
charInfoNumberT[i / 2] = objListT[i + 1];
}
charInfoNameB = new TextMeshProUGUI[15];
charInfoNumberB = new TextMeshProUGUI[15];
TextMeshProUGUI[] objListB = StatInfoB.GetComponentsInChildren<TextMeshProUGUI>(true);
for (int i = 0; i < objListB.Length; i += 2)
{
charInfoNameB[i / 2] = objListB[i];
charInfoNumberB[i / 2] = objListB[i + 1];
}
awakenAutoButton.transform.Find("txtAuto").GetComponent<TextMeshProUGUI>().text = LocalizationText.GetText("all_changeauto");
}
public static bool SCloseMenu()
{
return Instance.CloseMenu();
}
private bool CloseMenu()
{
// 게임 시작 후 열린적 없음.
if (iSelectedTab < 0)
return false;
// 추가 효과 자동 변경 설정.
if (AutoConfig.activeSelf)
{
ExitAutoRerollConfig();
return true;
}
// 추가 효과 자동 변경 진행중.
if (autoReroll)
{
ForceAutoStop();
return true;
}
if (canvasUI.enabled)
{
CloseEnhance();
return true;
}
return false;
}
#endregion Base
#region UI
public void MoveEnhance(eEventMoveType content)
{
OpenEnhance();
switch (content)
{
case eEventMoveType.EnhnaceGold: TabGold(); break;
case eEventMoveType.EnhancePoint: TabLvPoint(); break;
case eEventMoveType.EnhanceAwakne: TabTrain(); break;
}
}
// 강화창 열기.
public void OpenEnhance()
{
if (iLoading > 0) return;
GameModDataGroup.Instance.TryGetModData(TrainDgProp.CodeName, out TrainDgData modData);
Debug.Assert(modData != null, "invalid dungeon data");
iLoading++;
canvasUI.enabled = true;
leftWindow.enabled = true;
GameUIMgr.SRightWindowClose();
GameUIMgr.SOpenLeftPanel(gold : true, dia : true, lvpoint : true , change : true);
GameUIMgr.SSetMainUiOn(false);
BattleMgr.CloseFailScroll();
if (bInitNeed)
{
Init();
ivChar.Init();
for (int i = 0; i < awakenButton.Length; i++)
{
awakenButton[i] = Instantiate(awakenButtonPrefab, awakenVerticalList.transform).GetComponent<AwakenEffectItem>();
awakenButton[i].SetIndex(i);
}
SetAwakenLockSlot(DataHandler.PlayAwaken.awakenUnlock[DataHandler.PlayAwaken.usePreset]);
}
StartCoroutine(nameof(LoadCostume));
if (bReLocalize)
{
int tab = 0;
if (iSelectedTab >= 0)
{
tab = iSelectedTab;
btnTabs[iSelectedTab].interactable = true;
iSelectedTab = -1;
}
Localize(false);
if (tab == 0)
TabGold();
else if (tab == 1)
TabLvPoint();
else if (tab == 2)
TabTrain();
}
//경험치 재계산과 스텟 재계산
RefreshPlayerExpInfo();
CalcPlayerInfoStat();
//각 항목의 Escr 새로고침
if (iSelectedTab == 0)
{
bReLocalizeGold = false;
escrCharGoldEnhance.scroller.RefreshActiveCellViews();
myInfo.SetActive(true);
myAwaken.SetActive(false);
}
else if (iSelectedTab == 1)
{
bReLocalizeLvPoint = false;
escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
myInfo.SetActive(true);
myAwaken.SetActive(false);
}
else if (iSelectedTab == 2)
{
for (int i = 0; i < awakenButton.Length; i++)
{
if(bReLocalizeAwaken)
{
awakenButton[i].Localize();
}
awakenButton[i].RefreshLockState();
}
bReLocalizeAwaken = false;
selectedTrainLevel = (int)modData.Level;
txtEffect.text = FormatString.StringFormat("{0} {1}", LocalizationText.GetText("efc11"), FormatString.TextIntPer0CommaBi(DataHandler.SysAwakenRewards[selectedTrainLevel].awakenInc));
float scrollPosition = 0;
if (modData.Level >= 2)
scrollPosition = escrAwakenDungeon.scroller.GetScrollPositionForCellViewIndex((int)modData.Level - 2, EnhancedUI.EnhancedScroller.EnhancedScroller.CellViewPositionEnum.Before);
escrAwakenDungeon.scroller.SetScrollPositionImmediately(scrollPosition);
escrAwakenDungeon.scroller.RefreshActiveCellViews();
myInfo.SetActive(false);
myAwaken.SetActive(true);
RecalculateRerollCost();
}
iLoading--;
imgPicon.sprite = AddressableMgr.GetPlayerIcon(DataHandler.PlayData.playerIcon);
//뱃지 확인
CheckBedge();
awakenLock.SetActive(!DataHandler.IsClearStage(modData.OpenStage));
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
//전투 창의 강화버튼 뱃지 체크. 체크는 골드를 정산받을때 한다.
public static bool IsMainEnhanceBedgeOn()
{
return Instance.mainEnhanceBedge.activeSelf;
}
//골드와 포인트쪽 뱃지 체크. 두개가 끝나면 전투창 뱃지를 체크한다.
public static void CheckBedge()
{
CalcGoldEnhance();
CalcPointEnhance();
Instance.EnhanceBedgeSetActive();
}
//골드 escr 새로고침
public static void RefreshGoldAll()
{
Instance.escrCharGoldEnhance.scroller.RefreshActiveCellViews();
}
// 강화창 닫기.
public static void CloseEnhance()
{
if (Instance.bInitNeed)
return;
if (!Instance.canvasUI.enabled)
return;
if (!Instance.autoReroll)
{
Instance.ivChar.gameObject.SetActive(false);
if (Instance.iLoading > 0)
return;
Instance.iLoading++;
DataHandler.CheckAchivement(eContent.Battle);
Instance.canvasUI.enabled = false;
Instance.leftWindow.enabled = false;
Instance.myInfo.SetActive(false);
GameUIMgr.SCloseLeftPanel();
GameUIMgr.SSetMainUiOn(true);
MissionMgr.SRefreshMission();
if (Instance.iSelectedTab == 2)
{
Instance.ExitAutoRerollConfig();
Instance.CancelAwakenPresetSet();
}
Instance.iLoading--;
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
}
#endregion UI
//내 정보에 표기되는 플레이어 애니메이션.
#region Costume
// 창을 열 때 창의 의상/무기 세팅.
private IEnumerator LoadCostume()
{
ivChar.gameObject.SetActive(true);
RectTransform rtrfchar = ivChar.GetComponent<RectTransform>();
Vector3 v3pos = rtrfchar.anchoredPosition3D;
v3pos.z = -10000f;
rtrfchar.anchoredPosition3D = v3pos;
ivChar.SetSkin(DataHandler.PlayEquipCostume.outfitId, DataHandler.PlayEquipCostume.weaponId);
yield return null;
v3pos.z = -0f;
rtrfchar.anchoredPosition3D = v3pos;
}
#endregion Costume
#region Tab
//골드 탭을 눌렀을때
public void TabGold()
{
if (!Instance.autoReroll)
{
if (iSelectedTab == 0)
return;
if (iSelectedTab >= 0)
{
btnTabs[iSelectedTab].interactable = true;
groupTabs[iSelectedTab].SetActive(false);
AllEnhanceActiveFalse();
}
iSelectedTab = 0;
btnTabs[iSelectedTab].interactable = false;
groupTabs[iSelectedTab].SetActive(true);
goldMulti.SetActive(true);
myInfo.SetActive(true);
myAwaken.SetActive(false);
AutoConfig.SetActive(false);
txtLeftWindow.text = LocalizationText.GetText("left_myinfo");
if (bInitNeedGold)
{
bInitNeedGold = false;
bReLocalizeGold = false;
Dictionary<int, dCharStat> datas = DataHandler.GetCharStats();
EnhancedUI.SmallList<int> goldEnhance = new EnhancedUI.SmallList<int>();
for (int i = 0; i < datas.Count; i++)
{
if (datas[i + 1].abilityType != eEffectType.CrtRate || datas[i + 1].level != datas[i + 1].maxLv)
goldEnhance.Add(datas[i + 1].id);
}
for (int i = 0; i < datas.Count; i++)
{
if (datas[i + 1].level == datas[i + 1].maxLv && datas[i + 1].abilityType == eEffectType.CrtRate)
goldEnhance.Add(datas[i + 1].id);
}
escrCharGoldEnhance.LoadDatas(goldEnhance);
}
else
{
bReLocalizeGold = false;
escrCharGoldEnhance.scroller.RefreshActiveCellViews();
}
tabGoldViewGroup.Active();
tabLvPointViewGroup.Deactive();
tabAwakenViewGroup.Deactive();
EnhanceMgr.Instance.CalcPlayerInfoStat();
CancelAwakenPresetSet();
EnhanceBedgeSetActive();
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
}
//포인트 탭을 눌렀을때
public void TabLvPoint()
{
if (!Instance.autoReroll)
{
if (iSelectedTab == 1)
return;
if (iSelectedTab >= 0)
{
btnTabs[iSelectedTab].interactable = true;
groupTabs[iSelectedTab].SetActive(false);
AllEnhanceActiveFalse();
}
iSelectedTab = 1;
btnTabs[iSelectedTab].interactable = false;
groupTabs[iSelectedTab].SetActive(true);
lvPointMulti.SetActive(true);
myInfo.SetActive(true);
myAwaken.SetActive(false);
AutoConfig.SetActive(false);
txtLeftWindow.text = LocalizationText.GetText("left_myinfo");
if (bInitNeedLvPoint)
{
Dictionary<int, dCharStat> datas = DataHandler.GetCharLvPoints();
bInitNeedLvPoint = false;
bReLocalizeLvPoint = false;
EnhancedUI.SmallList<int> lvPointEnhance = new EnhancedUI.SmallList<int>();
for (int i = 0; i < datas.Count; i++)
{
lvPointEnhance.Add(datas[i + 1].id);
}
escrCharLvPointEnhance.LoadDatas(lvPointEnhance);
}
else
{
bReLocalizeLvPoint = false;
escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
}
tabGoldViewGroup.Deactive();
tabLvPointViewGroup.Active();
tabAwakenViewGroup.Deactive();
EnhanceMgr.Instance.CalcPlayerInfoStat();
CancelAwakenPresetSet();
EnhanceBedgeSetActive();
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
//레벨포인트의 플레이어 정보 갱신
txtReset.text = FormatString.StringFormat(LocalizationText.GetText("all_reset"));
txtPrice.text = DataHandler.Const.lvPointResetPrice.ToString();
}
}
//각성 탭을 눌렀을때
public void TabTrain()
{
GameModDataGroup.Instance.TryGetModData(TrainDgProp.CodeName, out TrainDgData modData);
if (awakenLock.activeSelf)
{
GameUIMgr.SOpenToast(FormatString.TextOpenStageClear(modData.OpenStage));
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
return;
}
if (iSelectedTab >= 0)
{
btnTabs[iSelectedTab].interactable = true;
groupTabs[iSelectedTab].SetActive(false);
AllEnhanceActiveFalse();
}
iSelectedTab = 2;
btnTabs[iSelectedTab].interactable = false;
groupTabs[iSelectedTab].SetActive(true);
AwakenImage.SetActive(true);
AwakenBottom.SetActive(true);
myInfo.SetActive(false);
myAwaken.SetActive(true);
AutoConfig.SetActive(false);
goLeftBack.SetActive(false);
goLeftBtnInfo.SetActive(true);
txtLeftWindow.text = LocalizationText.GetText("left_hiddenpower");
RecalculateRerollCost();
ChangeButtonSetOnoff(true);
if (blnitNeedAwaken)
{
blnitNeedAwaken = false;
AutoConfig.SetActive(true);
for (int i = 0; i < awakenButton.Length; i++)
{
if (bReLocalizeAwaken)
awakenButton[i].Localize();
if (i + 1 < modData.Level)
awakenButton[i].UnlockSlot();
}
bReLocalizeAwaken = false;
var dicdatas = DataHandler.GetExtraAbilityIds()[0];
var datas = new EnhancedUI.SmallList<int>();
bSelectedOptions = new bool[dicdatas.Count];
efcOptions = new eEffectType[dicdatas.Count];
int index = 0;
foreach (var item in dicdatas)
{
bSelectedOptions[index] = true;
efcOptions[index] = DataHandler.GetExtraAbility(item.Value).abilityType;
datas.Add(index);
index++;
}
escrAutoRerollConfig.LoadDatas(datas);
AutoConfig.SetActive(false);
var awakenDungeon = new EnhancedUI.SmallList<int>();
for (int i = 0; i < modData.MaxLevel; i++)
{
awakenDungeon.Add(i + 1);
}
escrAwakenDungeon.LoadDatas(awakenDungeon);
}
else
{
for (int i = 0; i < awakenButton.Length; i++)
{
if (bReLocalizeAwaken)
awakenButton[i].Localize();
if (i + 1 < modData.Level)
awakenButton[i].UnlockSlot();
}
bReLocalizeAwaken = false;
escrAutoRerollConfig.scroller.RefreshActiveCellViews();
}
tabGoldViewGroup.Deactive();
tabLvPointViewGroup.Deactive();
tabAwakenViewGroup.Active();
selectedTrainLevel = (int)modData.Level;
txtEffect.text = FormatString.StringFormat("{0} {1}", LocalizationText.GetText("efc11"), FormatString.TextIntPer0CommaBi(DataHandler.SysAwakenRewards[selectedTrainLevel].awakenInc));
float scrollPosition = 0;
if (modData.Level >= 2)
scrollPosition = escrAwakenDungeon.scroller.GetScrollPositionForCellViewIndex((int)modData.Level - 2, EnhancedUI.EnhancedScroller.EnhancedScroller.CellViewPositionEnum.Before);
escrAwakenDungeon.scroller.SetScrollPositionImmediately(scrollPosition);
escrAwakenDungeon.scroller.RefreshActiveCellViews();
for (int i = 0; i < btnAbilityPreset.Length; i++)
{
btnAbilityPreset[i].interactable = DataHandler.PlayAwaken.usePreset != i;
}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
//각성의 자동변경 버튼을 눌렀을때
public void TabAutoRerollConfig()
{
myAwaken.SetActive(false);
AutoConfig.SetActive(true);
goLeftBack.SetActive(true);
goLeftBtnInfo.SetActive(false);
txtChangeCostAuto.text = rerollCost.ToString();
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
//각성의 자동변경을 닫았을때
public void ExitAutoRerollConfig()
{
myAwaken.SetActive(true);
AutoConfig.SetActive(false);
goLeftBack.SetActive(false);
goLeftBtnInfo.SetActive(true);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
//모든 탭창 비활성화. 다른 탭을 눌렀을때 겹치지 않도록 하기 위해 실행한다.
void AllEnhanceActiveFalse()
{
goldMulti.SetActive(false);
lvPointMulti.SetActive(false);
AwakenImage.SetActive(false);
AwakenBottom.SetActive(false);
}
void ChangeButtonSetOnoff(bool onoff)
{
ChangeButtonSet.SetActive(onoff);
AutoChanging.SetActive(!onoff);
}
#endregion Tab
Dictionary<int, BigInteger> goldEnhancePrice = new Dictionary<int, BigInteger>();
int iupgradeMulti = 1;//강화 횟수
int abilityValue = 0;
int abilityValueInc = 1;
BigInteger buyingCnt = 0L;
int buyingCntInc = 1;
int level = 1;
int iMaxLv = 100;
bool isUnlock = false;
BigInteger calcmultiply = 0;
BigInteger calcdivide = 0;
BigInteger iprice = 0;
long icurValue = 0;
BigInteger inextValue = 0;
#region GoldMath
int iresetValue = 0;
public static BigInteger SSingleRecalcGoldPrice(int enhenceId)
{
return Instance.SingleRecalcGoldPrice(enhenceId);
}
public BigInteger SingleRecalcGoldPrice(int enhenceId)
{
dCharStat charData = DataHandler.GetCharStat(enhenceId);
iupgradeMulti = GetMultifulGoldEnhance();//강화 횟수
abilityValue = 0;
abilityValueInc = 1;
buyingCnt = 0L;
buyingCntInc = 1;
level = 1;
isUnlock = false;
abilityValue = charData.abilityValue;
abilityValueInc = charData.abilityValueInc;
buyingCnt = charData.buyingCount;
buyingCntInc = charData.buyingCntInc;
iMaxLv = charData.maxLv;
level = charData.level;
// 현재레벨 + 강화횟수가 만렙보다 높으면
if (charData.level + iupgradeMulti > iMaxLv)
{
iupgradeMulti = iMaxLv - level;//만렙 제한
}
iprice = 0L;
if (enhenceId == 1)
{
iprice = CalcCharLvUpPriceAccum1(level % 1000, iupgradeMulti, (double)buyingCntInc / dConst.RateMax, DataHandler.GetGoldLevelInterval(level));
}
else if (enhenceId == 2)
{
iprice = CalcCharLvUpPriceAccum1(level % 1000, iupgradeMulti, (double)buyingCntInc / dConst.RateMax, DataHandler.GetHpLevelInterval(level));
}
else
{
iprice = CalcCharLvUpPriceAccum1(level, iupgradeMulti, (double)buyingCntInc / dConst.RateMax, buyingCnt);
}
inextValue = abilityValue + (abilityValueInc * (level + iupgradeMulti));
iresetValue = abilityValue + (abilityValueInc * level);
return iprice;
}
public BigInteger CalcCharLvUpPriceAccum1(int curlevel, int addlevel, double buyingCntInc, BigInteger buyingCnt)
{
if (addlevel < 1)
return buyingCnt;
double ftargetlv = curlevel + addlevel - 1d;
ftargetlv = System.Math.Pow(buyingCntInc, ftargetlv) - 1d;
double fcurlv = curlevel - 1d;
fcurlv = System.Math.Pow(buyingCntInc, fcurlv) - 1d;
ftargetlv -= fcurlv;
ftargetlv *= buyingCntInc;
ftargetlv /= (buyingCntInc - 1d);
return buyingCnt * (BigInteger)(ftargetlv * 100) / 100;
}
#endregion
public static void RefreshPlayerExpInfo()
{
if (!Instance.canvasUI.isActiveAndEnabled)
{
return;
}
Instance.lvTxt.text = FormatString.TextLv(DataHandler.PlayData.playerLv);
Instance.lvPercentTxt.text = FormatString.StringFormat("{0:N0}%", DataHandler.GetPlayerExpRate() * 100);
Instance.ExpFill.value = DataHandler.GetPlayerExpRate();
if (DataHandler.Goods.Dia >= DataHandler.Const.lvPointResetPrice)
{
Instance.btnReset.interactable = true;
}
else
{
Instance.btnReset.interactable = false;
}
}
public void ResetLvPointConfirm()
{
if (DataHandler.Goods.point >= DataHandler.PlayData.playerLv - 1)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("reset_level_no"));
return;
}
GameUIMgr.SOpenPopup2Button(LocalizationText.GetText("reset_level_q"), ResetLvPoint);
}
//주석은 옛날 서버연동 없을 적 코드라서 삭제해도 무방. 서버와 통신해서 레벨포인트를 리셋한다. 단, 레벨포인트가 레벨 -1 만큼 남아있으면 리셋 금지.
public void ResetLvPoint()
{
SvConnectManager.Instance.RequestSvPost(true, 0, IVServerFormat.UrlApi.GetUrl(IVServerFormat.UrlApi.PointReset), typeof(nCharEnhancePointReturn), APointResetSucc, APointResetFail, null, true);
}
private void APointResetFail(IVServerFormat.SvError error, object request)
{
CoverCamera.Release();
iLoading--;
}
// 레벨 리셋 통신 성공.
private void APointResetSucc(object result, object request)
{
nCharEnhancePointReturn data = result as nCharEnhancePointReturn;
if (data == null)
{
APointEnhanceFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request);
return;
}
DataHandler.AllResetLvPoint();
DataHandler.SetGoods(data.playCurrency, false);
EnhanceMgr.Instance.CalcPlayerInfoStat();
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
if (DataHandler.Goods.Dia >= DataHandler.Const.lvPointResetPrice)
{
Instance.btnReset.interactable = true;
}
else
{
Instance.btnReset.interactable = false;
}
GameUIMgr.SOpenToast(LocalizationText.GetText("reset_level_confirm"));
CoverCamera.Release();
iLoading--;
}
int goldMultiful = 1;
int lvPointMultiful = 1;
//골드 쪽 한번에 강화. x10 x100.
public static void MultifulGoldEnhance(int multi)
{
Instance.goldMultiful = multi;
ResetMultifulGold();
switch (multi)
{
case 1:
Instance.goldMultiButton[0].interactable = false;
break;
case 10:
Instance.goldMultiButton[1].interactable = false;
break;
case 100:
Instance.goldMultiButton[2].interactable = false;
break;
}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
Instance.escrCharGoldEnhance.scroller.RefreshActiveCellViews();
}
public static void ResetMultifulGold()
{
Instance.goldMultiButton[0].interactable = true;
Instance.goldMultiButton[1].interactable = true;
Instance.goldMultiButton[2].interactable = true;
}
public static int GetMultifulGoldEnhance()
{
return Instance.goldMultiful;
}
//레벨포인트 한번에 강화.
public static void MultifulLvPointEnhance(int multi)
{
Instance.lvPointMultiful = multi;
ResetMultifulLvPoint();
switch (multi)
{
case 1:
Instance.lvPointMultiButton[0].interactable = false;
break;
case 10:
Instance.lvPointMultiButton[1].interactable = false;
break;
case 100:
Instance.lvPointMultiButton[2].interactable = false;
break;
}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
}
public static void ResetMultifulLvPoint()
{
Instance.lvPointMultiButton[0].interactable = true;
Instance.lvPointMultiButton[1].interactable = true;
Instance.lvPointMultiButton[2].interactable = true;
}
public static int GetMultifulLvPointEnhance()
{
return Instance.lvPointMultiful;
}
#region Enhance
// 골드 강화.
//안 쓰이는 코드. 서버연결 없을 적.
public static void SLevelUpCharStatMulti(int key, int upLevel, int cost, int nextStat)
{
int level = DataHandler.GetCharStatLevel(key) + upLevel;
if (DataHandler.LvUpCharStatMulti(key, level, cost, nextStat))
{
Instance.escrCharGoldEnhance.scroller.RefreshActiveCellViews();
}
}
//안 쓰이는 코드. 서버연결 없을 적.
public static void SLevelUpCharLvPointMulti(int key,int upLevel,int cost, int nextStat)
{
int level = DataHandler.GetCharLvPointLevel(key) + upLevel;
if (DataHandler.LvUpCharLvPointMulti(key, level, cost, nextStat))
{
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
}
}
//서버연결이 있는 골드강화.
public static void SLevelUpCharStatServer(int key, int upLevel, BigInteger biprice, int nextStat)
{
int level = DataHandler.GetCharStatLevel(key) + upLevel;
DataHandler.LvUpCharStatServer(key, level, biprice, nextStat);
//curMgr.escrCharGoldEnhance.scroller.RefreshActiveCellViews();
}
//서버연결이 있는 포인트강화.
public static void SLevelUpCharPointServer(int key, int upLevel, int iprice, int nextStat)
{
int level = DataHandler.GetCharLvPointLevel(key) + upLevel;
DataHandler.LvUpCharPointServer(key, level, iprice, nextStat);
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
}
nIdEnhance dataEnhance = null;
public static bool IsILoadingSetOne()
{
if (Instance.iLoading > 0)
{
return true;
}
Instance.iLoading++;
return false;
}
public static void MinusILoading()
{
Instance.iLoading--;
}
//레벨 포인트를 강화하기전에 서버 저장 상태랄ㅇ 다르면 저장을 한번 한다.
//그리고 통신을 시도한다.
public static void TrySVPointEnhance(nIdEnhance data)
{
Instance.dataEnhance = data;
if (DataHandler.IsNeedDataSave)
{
SingleMgr.SaveDataPointEnhanceConsume();
}
else
{
Instance.APointEnhance();
}
}
public static void SAPointEnhance()
{
Instance.APointEnhance();
}
int coverCameraCount = 0;
private void APointEnhance()
{
CoverCamera.Hold();
coverCameraCount++;
SvConnectManager.Instance.RequestSvPost(true, 0, IVServerFormat.UrlApi.GetUrl(IVServerFormat.UrlApi.PointEnhance), typeof(nCharEnhancePointReturn), APointEnhanceSucc, APointEnhanceFail, dataEnhance, true);
}
private void APointEnhanceFail(IVServerFormat.SvError error, object request)
{
CoverCamera.Release();
DataHandler.AddLvPoint(dataEnhance.useGoods);
SLevelUpCharPointServer(dataEnhance.sid, -(dataEnhance.aftLv - dataEnhance.befLv), dataEnhance.useGoods, 0);
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
dataEnhance = null;
iLoading--;
}
// 레벨 강화 통신 성공.
private void APointEnhanceSucc(object result, object request)
{
nCharEnhancePointReturn data = result as nCharEnhancePointReturn;
if (data == null)
{
APointEnhanceFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request);
return;
}
nIdLv datalv;
datalv = data.playCharEnhancePoint;
EnhanceMgr.Instance.CalcPlayerInfoStat();
CheckBedge();
BattleMgr.StatRecalc();
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
BattleMgr.EnhanceHeal((dataEnhance.aftLv - dataEnhance.befLv) * DataHandler.GetCharStats()[2].abilityValueInc);
dataEnhance = null;
while (coverCameraCount > 0)
{
CoverCamera.Release();
coverCameraCount--;
}
while (iLoading > 0)
{
iLoading--;
}
}
#endregion Enhance
#region Awaken
bool autoReroll = false;
int selectedTrainLevel = 1;
public int GetSelected()
{
return selectedTrainLevel;
}
public void SetSelected(int key)
{
selectedTrainLevel = key;
txtEffect.text = FormatString.StringFormat("{0} {1}" ,LocalizationText.GetText("efc11"), FormatString.TextIntPer0CommaBi(DataHandler.SysAwakenRewards[key].awakenInc));
escrAwakenDungeon.scroller.RefreshActiveCellViews();
}
int prevPreset = -1;
//각성 잠재능력 프리셋 선택
public void btnAwakenPresetSet(int preset)
{
if (prevPreset == -1)
{
prevPreset = DataHandler.PlayAwaken.usePreset;
}
DataHandler.btnAwakenPresetSet(preset,false);
SetAwakenLockSlot(DataHandler.PlayAwaken.awakenUnlock[DataHandler.PlayAwaken.usePreset]);
AwakenButtonRefresh();
for (int i = 0; i < btnAbilityPreset.Length; i++)
btnAbilityPreset[i].interactable = DataHandler.PlayAwaken.usePreset != i;
SaveAwakenPresetSet();
}
//사용 프리셋 저장.
public void SaveAwakenPresetSet()
{
prevPreset = -1;
StartSetAwakenPreset();
GameUIMgr.SOpenToast(LocalizationText.GetText(Global.STR_Saved));
}
//프리셋 취소. 저장 버튼이 있었을 적에 사용됨.
void CancelAwakenPresetSet()
{
if (prevPreset != -1)
{
btnAwakenPresetSet(prevPreset);
StartSetAwakenPreset();
prevPreset = -1;
}
}
//잠재능력 스텟을 토대로 스텟 계산
public static void StartSetAwakenPreset()
{
BuffMgr.Instance.AwakenReset();
for (int i = 0; i < 6; i++)
{
if (DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i] >= 0)
{
BuffMgr.Instance.ChangeAwakenStat(DataHandler.GetExtraAbility(DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i]).abilityType, DataHandler.GetExtraAbility(DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i]).abilityValue, false);
}
}
DataHandler.PlayAwaken.Save();
}
//잠재능력 슬롯 새로고침
public void AwakenButtonRefresh()
{
for (int i = 0; i < 6; i++)
{
awakenButton[i].RefreshView();
}
}
//잠재능력 슬롯 해금
public void UnlockSlot(int key)
{
awakenButton[key - 1].UnlockSlot();
}
public bool GetAutoReroll() => autoReroll;
eRarity autoRareity = eRarity.Hero;
public static void SetAutoRareity(eRarity rareity)
{
Instance.autoRareity = rareity;
}
//잠재능력 돌리기 비용 재계산
public void RecalculateRerollCost()
{
int awaken = Mathf.Min(DataHandler.PlayAwaken.awaken, 6);
rerollCost = 10;
int slotLock = 0;
int slotUnlock = 6;
for(int i = 0; i < awakenButton.Length; i++)
{
if (awakenButton[i].GetIsAbilityLock())
{
slotLock++;
slotUnlock--;
}
awakenButton[i].RefreshView();
}
rerollCost = DataHandler.Const.awakenChangeStonePrice * (slotUnlock - (6 - awaken));
if(slotUnlock - (6 - awaken) == 0)
{
rerollCost = DataHandler.Const.awakenChangeStonePrice;
}
txtChangeCost.text = rerollCost.ToString();
btnStoneSpend.interactable = rerollCost <= DataHandler.Goods.changeStone && slotUnlock - (6 - awaken) > 0;
btnStoneSpendAuto.interactable = rerollCost <= DataHandler.Goods.changeStone;
btnAutoSpend.interactable = rerollCost <= DataHandler.Goods.changeStone;
}
//잠재능력 슬롯 잠금여부 판별
public void SetAwakenLockSlot(bool[] lockset)
{
for(int i = 0; i < 6; i++)
{
awakenButton[i].SetIsUnlock(lockset[i]);
}
}
//잠재능력 돌리기 전에 확인하는 용도.
public void RerollCheckAbility()
{
int serverSlot = 0b00111111;
if (rerollCost <= DataHandler.Goods.changeStone)
{
for (int i = 0; i < awakenButton.Length; i++)
{
if (!awakenButton[i].IsUnlock())
{
serverSlot -= 1 << i;
}
else if (awakenButton[i].GetIsAbilityLock())
{
serverSlot -= 1 << i;
}
else
{
awakenButton[i].RefreshView();
dExtraAbility ability = DataHandler.GetExtraAbility(DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i]);
if (ability != null)
{
if (ability.rarity >= (int)eRarity.Legend)
{
GameUIMgr.SOpenPopup2Button(LocalizationText.GetText("msg_highgrade"), RerollAwakenAbility);
return;
}
}
}
}
if (serverSlot == 0)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_noslotchange"));
return;
}
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
RerollServerAwakenAbility(DataHandler.PlayAwaken.usePreset + 1, serverSlot);
}
}
public void RerollServerAwakenAbility(int preset, int slot)
{
var dataSlot = new nAwakenPresetSlot(preset, slot);
CoverCamera.Hold();
SvConnectManager.Instance.RequestSvPost(true, 0, IVServerFormat.UrlApi.GetUrl(IVServerFormat.UrlApi.AwakenEnhance), typeof(nCharAwakenReturn), AAwakenEnhanceSucc, AAwakenEnhanceFail, dataSlot, true);
}
// 각성 강화 통신 성공.
private void AAwakenEnhanceSucc(object result, object request)
{
var data = result as nCharAwakenReturn;
if (data == null)
{
AAwakenEnhanceFail(new IVServerFormat.SvError(IVServerFormat.eErrorCode.NULL_OR_EMPTY), request);
return;
}
BuffMgr.Instance.AwakenReset();
DataHandler.SetServerAwakenSlot(data.playAwaken,DataHandler.PlayAwaken.usePreset);
DataHandler.SubChangeStone(DataHandler.Goods.changeStone - data.playCurrency.changeStone);
DataHandler.PlayAwaken.OnAfterDeserialize();
for (int i = 0; i < 6; i++)
{
if (data.playAwaken.extras[DataHandler.PlayAwaken.usePreset][i] >= 0)
{
BuffMgr.Instance.ChangeAwakenStat(DataHandler.GetExtraAbility(data.playAwaken.extras[DataHandler.PlayAwaken.usePreset][i]).abilityType, DataHandler.GetExtraAbility(data.playAwaken.extras[DataHandler.PlayAwaken.usePreset][i]).abilityValue, false);
awakenButton[i].RefreshView();
}
}
BuffMgr.Instance.CalcAllStat();
EnhanceMgr.Instance.CalcPlayerInfoStat();
CoverCamera.Release();
}
//각성 강화 통신 실패
private void AAwakenEnhanceFail(IVServerFormat.SvError error, object request)
{
CoverCamera.Release();
}
//잠재능력 돌리기
public void RerollAwakenAbility()
{
int serverSlot = 0b00111111;
if (rerollCost > DataHandler.Goods.changeStone) return;
for (int i = 0; i < awakenButton.Length; i++)
{
if (!awakenButton[i].IsUnlock())
{
serverSlot -= 1 << i;
}
else if (awakenButton[i].GetIsAbilityLock())
{
serverSlot -= 1 << i;
}
else
{
awakenButton[i].UnlockLockButton();
awakenButton[i].RefreshView();
}
}
BuffMgr.Instance.CalcAllStat();
if (serverSlot == 0)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_noslotchange"));
return;
}
RerollServerAwakenAbility(DataHandler.PlayAwaken.usePreset + 1, serverSlot);
btnStoneSpend.interactable = rerollCost <= DataHandler.Goods.changeStone;
btnStoneSpendAuto.interactable = rerollCost <= DataHandler.Goods.changeStone;
}
//자동돌리기 시작.
public void AutoRerollStart()
{
if (rerollCost <= DataHandler.Goods.changeStone)
{
autoReroll = true;
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
StartCoroutine(nameof(AutoRerollAbility));
}
}
IEnumerator AutoRerollAbility()
{
ExitAutoRerollConfig();
ChangeButtonSetOnoff(false);
bool alreadyHave = false;
for (int i = 0; i < awakenButton.Length; i++)
{
if (!awakenButton[i].IsUnlock())
{
continue;
}
else if (awakenButton[i].GetIsAbilityLock())
{
continue;
}
dExtraAbility ability = DataHandler.GetExtraAbility(DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i]);
if (ability == null)
{
ability = new dExtraAbility();
ability.rarity = 0;
}
if (ability.rarity >= (int)autoRareity)
{
//트루일때
for (int j = 0; j < efcOptions.Length; j++)
{
if (bSelectedOptions[j])
{
if (ability.abilityType == efcOptions[j])
{
alreadyHave = true;
break;
}
}
}
}
}
//원하는 조건에 걸릴때 중단.
if (alreadyHave)
{
autoReroll = false;
GameUIMgr.SOpenToast(LocalizationText.GetText("awaken_waning_already_have"));
ChangeButtonSetOnoff(true);
}
while (autoReroll)
{
int serverSlot = 0b00111111;
bool conditionOK = false;
if (Instance.rerollCost > DataHandler.Goods.changeStone)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_nodice"));
ChangeButtonSetOnoff(true);
autoReroll = false;
yield break;
}
for (int i = 0; i < awakenButton.Length; i++)
{
if (!awakenButton[i].IsUnlock())
{
serverSlot -= 1 << i;
continue;
}
else if (awakenButton[i].GetIsAbilityLock())
{
serverSlot -= 1 << i;
continue;
}
awakenButton[i].UnlockLockButton();
awakenButton[i].RefreshView();
dExtraAbility ability = DataHandler.GetExtraAbility(DataHandler.PlayAwaken.extras[DataHandler.PlayAwaken.usePreset][i]);
if (ability == null)
{
ability = new dExtraAbility();
ability.rarity = 0;
}
if (ability.rarity >= (int)autoRareity)
{
for (int j = 0; j < efcOptions.Length; j++)
{
if (bSelectedOptions[j])
{
if (ability.abilityType == efcOptions[j])
{
conditionOK = true;
break;
}
}
}
}
}
if (serverSlot == 0)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("msg_noslotchange"));
ChangeButtonSetOnoff(true);
autoReroll = false;
yield break;
}
Instance.btnStoneSpend.interactable = Instance.rerollCost <= DataHandler.Goods.changeStone;
Instance.btnStoneSpendAuto.interactable = Instance.rerollCost <= DataHandler.Goods.changeStone;
if (conditionOK)
{
GameUIMgr.SOpenToast(LocalizationText.GetText("awaken_waning_already_have"));
ChangeButtonSetOnoff(true);
autoReroll = false;
yield break;
}
else
{
RerollServerAwakenAbility(DataHandler.PlayAwaken.usePreset + 1, serverSlot);
}
yield return new WaitForSeconds(0.5f);
}
}
//돌리는 도중 강제중단.
public void ForceAutoStop()
{
autoReroll = false;
ChangeButtonSetOnoff(true);
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
}
// 아이템 효과 종류.
public static eEffectType SGetEfcAddAutoType(int index)
{
if (index < 0)
return eEffectType.None;
return Instance.efcOptions[index];
}
// 아이템 선택 상태.
public bool SGetEfcAddAutoSelect(int index)
{
if (index < 0)
return false;
return bSelectedOptions[index];
}
// 추가 효과 잠금상태 변경.
public static void SToggleSelect(int itemid, bool bselect)
{
if (itemid < 0)
{
if (bselect)
{
}
return;
}
Instance.bSelectedOptions[itemid] = bselect;
for(int i = 0; i < Instance.bSelectedOptions.Length; i++)
{
if (Instance.bSelectedOptions[i])
{
Instance.btnAutoSpend.interactable = true;
break;
}
Instance.btnAutoSpend.interactable = false;
}
Instance.btnAutoSpend.interactable = Instance.rerollCost <= DataHandler.Goods.changeStone;
Instance.escrAutoRerollConfig.scroller.RefreshActiveCellViews();
}
public void OpenInfoHelp()
{
SoundMgr.Instance.PlaySfx(SoundName.BtnPress);
GameUIMgr.SOpenPopupRarityRate();
}
#endregion
#region MyInfo
public void CalcPlayerInfoStat()
{
if (iSelectedTab < 0) return;
BuffMgr.Instance.CalcBattlePower();
charInfoNumberT[0].text = DataHandler.PlayData.playerLv.ToString();
charInfoNumberT[1].text = FormatString.BigIntString1(BuffMgr.Instance.GetBattlePower());
charInfoNumberB[0].text = FormatString.BigIntString1(BuffMgr.Instance.GetCharAtk());
charInfoNumberB[1].text = FormatString.BigIntString1(BuffMgr.Instance.GetCharHp());
charInfoNumberB[3].text = FormatString.TextEffectValue(eEffectType.Spd, BuffMgr.Instance.GetCharSpd());
charInfoNumberB[4].text = FormatString.TextEffectValue(eEffectType.Mov, BuffMgr.Instance.GetCharMov());
charInfoNumberB[5].text = FormatString.TextEffectValue(eEffectType.GoldDropRate, BuffMgr.Instance.GetGoldDropRate());
charInfoNumberB[6].text = FormatString.TextEffectValue(eEffectType.ExpDropRate, BuffMgr.Instance.GetExpDropRate());
charInfoNumberB[7].text = FormatString.TextEffectValue(eEffectType.ChestDropRate, BuffMgr.Instance.GetChestDropRate());
charInfoNumberB[8].text = FormatString.TextEffectValue(eEffectType.SkillDamage, BuffMgr.Instance.GetSkillDamage());
charInfoNumberB[9].text = FormatString.TextEffectValue(eEffectType.SkillCool, BuffMgr.Instance.GetSkillCooldownReduce());
charInfoNumberB[10].text = FormatString.TextEffectValue(eEffectType.HealPerSec, BuffMgr.Instance.GetHpHealPerSec());
charInfoNumberB[11].text = FormatString.TextEffectValue(eEffectType.DeepCaveDgBonus, BuffMgr.Instance.GetDeepCaveDgBonus());
charInfoNumberB[12].text = FormatString.TextEffectValue(eEffectType.AtlantisDgBonus, BuffMgr.Instance.GetAtlantisDgBonus());
charInfoNumberB[13].text = FormatString.TextEffectValue(eEffectType.ProtectTheMerchantDgBonus, BuffMgr.Instance.GetProptectTheMerchantBonus());
charInfoNumberB[14].text = FormatString.TextEffectValue(eEffectType.DevelopTheJungleDgBonus, BuffMgr.Instance.GetDevelopTheJungleBonus());
int icrtrate = BuffMgr.Instance.GetCharCrtRate();
int icrtmul = icrtrate / dConst.RateMax + 1;
int irate = icrtrate % dConst.RateMax;
charInfoNameB[2].text = FormatString.StringFormat(LocalizationText.GetText("stat_kind_bottom3"), icrtmul.ToString());
charInfoNumberB[2].text = FormatString.TextEffectValue(eEffectType.CrtRate, irate);
}
#endregion
//골드 계산. 뱃지 확인용으로도 사용됨
public static void CalcGoldEnhance()
{
int iMaxLv = 1000;
BigInteger buyingCnt = 0L;
int buyingCntInc = 1;
BigInteger iprice = 0L;
for (int i = 0; i < DataHandler.GetCharStats().Count; i++)
{
if (DataHandler.GetCharStat(i + 1).condType != 0 &&
DataHandler.GetCharStatLevel(DataHandler.GetCharStat(i + 1).condType) < DataHandler.GetCharStat(i + 1).condValue)
{
Instance.goldEnhanceBedge.SetActive(false);
continue;
}
int ilevel = DataHandler.GetCharStat(i + 1).level;
iMaxLv = DataHandler.GetCharStat(i + 1).maxLv;
buyingCnt = DataHandler.GetCharStat(i + 1).buyingCount;
buyingCntInc = DataHandler.GetCharStat(i + 1).buyingCntInc;
iprice = SSingleRecalcGoldPrice(i + 1);
//iprice = buyingCnt + (buyingCntInc * (intervalUpLevel));
if (iprice <= DataHandler.Goods.gold && DataHandler.GetCharStat(i + 1).level <iMaxLv)
{
Instance.mainEnhanceBedge.SetActive(true);
Instance.goldEnhanceBedge.SetActive(true);
return;
}
}
Instance.goldEnhanceBedge.SetActive(false);
}
//포인트 계산. 뱃지 확인용으로 사용됨.
public static void CalcPointEnhance()
{
int iMaxLv = 1000;
BigInteger buyingCnt = 0L;
int iprice = 0;
for (int i = 0; i < DataHandler.GetCharLvPoints().Count; i++)
{
int ilevel = DataHandler.GetCharLvPoint(i + 1).level;
iMaxLv = DataHandler.GetCharLvPoint(i + 1).maxLv;
buyingCnt = DataHandler.GetCharLvPoint(i + 1).buyingCount;
iprice = 1;
if (iprice <= DataHandler.Goods.point && DataHandler.GetCharLvPoint(i + 1).level < iMaxLv)
{
Instance.mainEnhanceBedge.SetActive(true);
Instance.pointEnhanceBedge.SetActive(true);
return;
}
}
Instance.pointEnhanceBedge.SetActive(false);
}
public void EnhanceBedgeSetActive()
{
mainEnhanceBedge.SetActive(goldEnhanceBedge.activeSelf || pointEnhanceBedge.activeSelf);
}
public static void levelUpScrolRefresh()
{
Instance.escrCharLvPointEnhance.scroller.RefreshActiveCellViews();
}
public static void SResetAwakenPreset()
{
if (Instance.iSelectedTab < 0)
{
return;
}
Instance.btnAwakenPresetSet(DataHandler.PlayAwaken.usePreset);
StartSetAwakenPreset();
}
public static void TestSettingAwakenBtnTrue()
{
if (DataHandler.PlayAwaken.awaken > 0)
{
Instance.btnStoneSpend.interactable = true;
}
}
}