Project_WL/Assets/Script/UI/PC/Job/PCJobUI_OpenCondition.cs

149 lines
5.0 KiB
C#
Raw Normal View History

2024-12-15 01:39:39 +00:00
using CodeStage.AntiCheat.ObscuredTypes;
using TMPro;
using UnityEngine;
public class PCJobUI_OpenCondition : MonoBehaviour
{
public PCJobDetailUI m_PCJobDetailUI;
2025-02-17 00:54:54 +00:00
public TextMeshProUGUI[] texts; // 0 전직 조건, 1 버튼명, 2 전직 비용
public GameObject[] gos; // 0 전직 전, 1 전직 후, 2 전직 비용
2024-12-15 01:39:39 +00:00
ObscuredInt m_ClassId;
ClassOpenConditionTableData m_Data;
public void Set(int classid)
{
m_ClassId = classid;
m_ClassId.RandomizeCryptoKey();
Set_UI();
}
void Set_UI()
{
var sdata = ServerInfo.Ins.m_ServerData;
var moneyid = table_GlobalValue.Ins.Get_Int("n_JobMaterialID");
2025-02-17 00:54:54 +00:00
texts[2].text = $"{sdata.Get_ItemAmount(moneyid)}/1";
2024-12-15 01:39:39 +00:00
m_Data = table_classopencondition.Ins.Get_Data_orNull(m_ClassId);
string condition = table_localtext.Ins.Get_Text(243);
if (m_Data.n_RequireAbility > 0)
{
var abData = table_abilityconfig.Ins.Get_Data_orNull(m_Data.n_RequireAbility);
condition = DSUtil.Format(242, abData.Get_Name());
}
if (m_Data.e_RequireAwakenType1 != eStat.None)
condition += $"\n각성 {m_Data.e_RequireAwakenType1}, {m_Data.n_RequireAwakenStep1} 필요";
if (m_Data.e_RequireAwakenType2 != eStat.None)
condition += $"\n각성 {m_Data.e_RequireAwakenType2}, {m_Data.n_RequireAwakenStep2} 필요";
texts[0].text = condition;
if (sdata.IsObtainItem(m_ClassId))
2025-02-17 00:54:54 +00:00
{ // 전직 함
2024-12-15 01:39:39 +00:00
texts[1].text = sdata.Get_EqiupmentEquip(eItem.PC) == m_ClassId ?
table_localtext.Ins.Get_Text(244) : table_localtext.Ins.Get_Text(245);
gos[0].SetActive(false);
gos[1].SetActive(true);
2025-02-17 00:54:54 +00:00
gos[2].SetActive(false);
2024-12-15 01:39:39 +00:00
}
else
2025-02-17 00:54:54 +00:00
{ // 전직 안함
2024-12-15 01:39:39 +00:00
texts[1].text = table_localtext.Ins.Get_Text(246);
gos[0].SetActive(true);
gos[1].SetActive(false);
2025-02-17 00:54:54 +00:00
gos[2].SetActive(true);
2024-12-15 01:39:39 +00:00
}
}
bool CanJobBuy(bool showtoast)
{
var sdata = ServerInfo.Ins.m_ServerData;
if (sdata.PC.IsObtainPC(m_ClassId)) return false;
// linkedId1 확인
if (m_Data.n_linkedClass1 > 0 && !sdata.IsObtainItem(m_Data.n_linkedClass1))
2024-12-15 01:39:39 +00:00
{
if (showtoast) ToastUI.Ins.Set(254);
return false;
}
// linkedId2 확인
if (m_Data.n_linkedClass2 > 0 && !sdata.IsObtainItem(m_Data.n_linkedClass2))
2024-12-15 01:39:39 +00:00
{
if (showtoast) ToastUI.Ins.Set(254);
return false;
}
// 특성 확인
if (m_Data.n_RequireAbility > 0)
{
if (sdata.Get_AbilityLv(m_Data.n_RequireAbility) < 1)
{
if (showtoast)
2024-12-22 01:07:25 +00:00
ToastUI.Ins.Set(242, table_itemlist.Ins.Get_ItemName(m_Data.n_RequireAbility));
2024-12-15 01:39:39 +00:00
return false;
}
}
// 각성 확인 1
if (m_Data.e_RequireAwakenType1 != eStat.None && sdata.Get_AwakenLv(m_Data.e_RequireAwakenType1) < m_Data.n_RequireAwakenStep1)
{
if (showtoast) ToastUI.Ins.Set(230);
return false;
}
// 각성 확인 2
if (m_Data.e_RequireAwakenType2 != eStat.None && sdata.Get_AwakenLv(m_Data.e_RequireAwakenType2) < m_Data.n_RequireAwakenStep2)
{
if (showtoast) ToastUI.Ins.Set(230);
return false;
}
return true;
}
public void OnClick_JobChange()
{
var sdata = ServerInfo.Ins.m_ServerData;
if (sdata.IsObtainItem(m_ClassId))
{ // 착용 여부
if (sdata.Get_EqiupmentEquip(eItem.PC) != m_ClassId)
{ // 착용하기
2025-07-01 22:35:25 +00:00
ServerInfo.Ins.Save_PC_EquipJob(m_ClassId, () =>
{
sdata.Equip.Set_Equip(eItem.PC, m_ClassId);
Set_UI();
PCJobUI.Ins.Set();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
});
2024-12-15 01:39:39 +00:00
}
}
else
{ // 전직
2025-07-01 22:35:25 +00:00
if (CanJobBuy(true))
2024-12-15 01:39:39 +00:00
{
var moneyid = table_GlobalValue.Ins.Get_Int("n_JobMaterialID");
2025-07-01 22:35:25 +00:00
if (sdata.Check_ItemAmount(moneyid, m_Data.n_NeedGoodsCount))
2024-12-15 01:39:39 +00:00
{
2025-07-01 07:44:41 +00:00
ServerInfo.Ins.Save_PC_BuyJob(m_Data.n_ClassID, () =>
{
sdata.Use_Item(moneyid, m_Data.n_NeedGoodsCount);
sdata.PC.Add_PC(m_ClassId);
2025-07-06 00:00:32 +00:00
// 고유 스킬 지급
var skills = table_skilllist.Ins.Get_DataList(eSkillType.JobPassive, m_Data.n_ClassID);
for (int i = 0; i < skills.Count; i++)
sdata.Add_Skill(skills[i].n_SkillID, 1);
2025-07-01 07:44:41 +00:00
Set_UI();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
});
2024-12-15 01:39:39 +00:00
}
}
}
}
public void OnClick_StatInfo()
{
m_PCJobDetailUI.Set();
}
}