Project_WL/Assets/Script/UI/PC/Limit/PCLimitUI_Right.cs

231 lines
7.4 KiB
C#
Raw Normal View History

2025-07-03 03:34:04 +00:00
using CodeStage.AntiCheat.ObscuredTypes;
2025-02-16 23:33:59 +00:00
using System.Collections.Generic;
2024-12-15 01:39:39 +00:00
using TMPro;
using UnityEngine;
public class LimitSlotChangeData
{
ObscuredInt TotalPrice, MissionCount;
// 아래는 서버에 전송할 데이터
public List<int> Preset;
public Dictionary<string, List<SD_PCLimitSlotData_Read>> LimitSlot = new Dictionary<string, List<SD_PCLimitSlotData_Read>>();
public int Price, Count;
public void Init(bool copydata)
{
TotalPrice = 0; TotalPrice.RandomizeCryptoKey();
MissionCount = 0; MissionCount.RandomizeCryptoKey();
2025-07-31 07:28:44 +00:00
Copy_ServerLimitSlot();
}
void Copy_ServerLimitSlot()
{
LimitSlot.Clear();
var slotdata = ServerInfo.Ins.m_ServerData.LimitSlot;
foreach (var pair in slotdata)
{
var copiedList = new List<SD_PCLimitSlotData_Read>();
foreach (var data in pair.Value)
copiedList.Add(data.Get());
LimitSlot[pair.Key] = copiedList;
}
}
public LimitSlotChangeData Get()
{
Price = TotalPrice;
Count = MissionCount;
Preset = ServerInfo.Ins.m_ServerData.LimitBreakOption.Preset;
Copy_ServerLimitSlot();
return this;
}
2025-07-31 07:28:44 +00:00
public bool IsChangeLimitSlot()
{
if (TotalPrice > 0) return true;
var currentSlotData = ServerInfo.Ins.m_ServerData.LimitSlot;
foreach (var pair in currentSlotData)
{
if (!LimitSlot.TryGetValue(pair.Key, out var beforeList))
return true;
var currentList = pair.Value;
if (beforeList.Count != currentList.Count)
return true;
for (int i = 0; i < currentList.Count; i++)
{
var before = beforeList[i];
var current = currentList[i];
if (before.ID != current.ID || before.Lv != current.Lv || before.Lock != current.Lock)
return true;
}
}
return false;
}
public void Add_TotalPrice(int price) { TotalPrice += price; TotalPrice.RandomizeCryptoKey(); }
public void Add_MissionCount() { ++MissionCount; MissionCount.RandomizeCryptoKey(); }
}
2024-12-15 01:39:39 +00:00
public class PCLimitUI_Right : uScrollViewMgr
{
2025-02-16 23:33:59 +00:00
public TabUIBase m_Tab;
2024-12-15 01:39:39 +00:00
public MoneyForm m_Price;
2025-07-14 17:18:25 +00:00
public TextMeshProUGUI[] texts; // 0 보호 등급
public ButtonPress Btn_Change;
2024-12-15 01:39:39 +00:00
2025-07-30 23:07:36 +00:00
public bool ChangeOption;
public LimitSlotChangeData m_LimitSlotChangeData = new LimitSlotChangeData();
2024-12-15 01:39:39 +00:00
string m_Preset = "1";
int m_matID, m_CurProtectGrade, m_ProtectMaxGrade;
2025-07-03 03:34:04 +00:00
ObscuredInt mPrice;
2024-12-15 01:39:39 +00:00
2025-02-16 23:33:59 +00:00
List<TabUIData> list_TabData = new List<TabUIData>
{ new TabUIData{ btnName = "1" }, new TabUIData{ btnName = "2" }, new TabUIData{ btnName = "3" } };
2024-12-15 01:39:39 +00:00
public override void Set()
{
m_matID = table_GlobalValue.Ins.Get_Int("n_BreakingLimitSlotMaterialID");
m_Preset = ServerInfo.Ins.m_ServerData.Equip.LimitPreset.ToString();
2025-02-16 23:33:59 +00:00
m_Tab.Set_Index(ServerInfo.Ins.m_ServerData.Equip.LimitPreset - 1);
for (int i = 0; i < list_TabData.Count; i++)
{
2025-07-30 00:23:52 +00:00
list_TabData[i].onClick = OnClick_Preset;
2025-02-16 23:33:59 +00:00
}
m_Tab.Set(list_TabData);
OnClick_Preset();
}
public override void Set_UI()
{
2024-12-15 01:39:39 +00:00
var sdata = ServerInfo.Ins.m_ServerData;
Set_ScrollView(sdata.Get_LimitSlot(m_Preset));
for (int i = 0; i < list_CardBase.Count; i++)
list_CardBase[i].Set(i + 1);
2025-07-03 03:34:04 +00:00
mPrice = Get_Price(); mPrice.RandomizeCryptoKey();
m_Price.amount.text = NumberFormatter.FormatNumber(mPrice);
2024-12-15 01:39:39 +00:00
var lv = Mathf.Max(1, sdata.Get_LimitLv());
if (lv > 9) lv = 0;
2024-12-15 01:39:39 +00:00
var Tdata = table_limitslotmagicrate.Ins.Get_Data_orNull(lv);
m_ProtectMaxGrade = Tdata.MaxGrade;
if (m_CurProtectGrade == 0)
m_CurProtectGrade = m_ProtectMaxGrade;
Set_ProtectUI();
}
void Set_ProtectUI()
{
texts[0].text = m_CurProtectGrade.ToString();
}
int Get_Price()
{
int LockCount = 0;
var sdata = ServerInfo.Ins.m_ServerData;
var lst = sdata.Get_LimitSlot(m_Preset);
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].Lock == 1)
++LockCount;
}
int baseValue = 10;
return baseValue * ((1 + LockCount) * LockCount / 2 + 1);
}
bool IsOpenSlot()
{
// 열린 슬롯이 있어야 한다.
var sdata = ServerInfo.Ins.m_ServerData;
var lst = sdata.Get_LimitSlot(m_Preset);
for (int i = 0; i < lst.Count; i++)
{
var isOpen = table_breakinglimit.Ins.Get_SlotOpenLv(i + 1) <= sdata.Get_LimitLv();
if (isOpen && lst[i].Lock == 0)
return true;
}
return false;
}
bool CheckMoney(bool showtoast)
{
2025-07-03 03:34:04 +00:00
return ServerInfo.Ins.m_ServerData.Check_ItemAmount(m_matID, mPrice, showtoast);
2024-12-15 01:39:39 +00:00
}
public string Get_Preset() { return m_Preset; }
2025-02-16 23:33:59 +00:00
public void OnClick_Preset()
2024-12-15 01:39:39 +00:00
{
2025-02-16 23:33:59 +00:00
m_Preset = (m_Tab.Get_Index() + 1).ToString();
2024-12-15 01:39:39 +00:00
var sdata = ServerInfo.Ins.m_ServerData;
sdata.Equip.LimitPreset = int.Parse(m_Preset);
sdata.Equip.LimitPreset.RandomizeCryptoKey();
2025-02-16 23:33:59 +00:00
Set_UI();
2024-12-15 01:39:39 +00:00
}
public void OnClick_ProtectGrade(int grade)
{
m_CurProtectGrade += grade;
if (m_CurProtectGrade < 1) m_CurProtectGrade = m_ProtectMaxGrade;
else if (m_CurProtectGrade > m_ProtectMaxGrade) m_CurProtectGrade = 1;
Set_ProtectUI();
}
public void OnClick_Change()
{
2025-07-30 23:07:36 +00:00
if (!ChangeOption && IsOpenSlot() && CheckMoney(true))
2024-12-15 01:39:39 +00:00
{
var sdata = ServerInfo.Ins.m_ServerData;
var lst = sdata.Get_LimitSlot(m_Preset);
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].Lock == 0 && lst[i].ID > 0)
{
var Tdata = table_enchantgradeconfig.Ins.Get_Data_bylv(lst[i].Lv);
if (Tdata.n_EnchantGrade >= m_CurProtectGrade)
{
Popup.Ins.Set(ePopupType.One, 265, Change);
return;
}
}
}
Change();
}
}
void Change()
{
2025-07-30 23:07:36 +00:00
var sdata = ServerInfo.Ins.m_ServerData;
sdata.Use_Item(m_matID, mPrice);
list_CardBase.ForEach(f => (f as PCLimitSlotCard).Set_Change(m_Preset, m_Tab.Get_Index()));
2025-07-30 23:07:36 +00:00
Set();
MyValue.Get_ActorStatInfoorNull(eRole.PC);
NewGameUI.Ins.m_PCUI.Refresh_Money();
var changeData = PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData;
changeData.Add_TotalPrice(mPrice);
if (ChangeOption)
{
Btn_Change.ControlPress(false);
ServerInfo.Ins.Save_PC_LimitSlotOption(changeData,
() =>
{
ChangeOption = false;
Btn_Change.ControlPress(true);
changeData.Init(false);
});
}
2025-07-30 23:07:36 +00:00
//ServerInfo.Ins.Save_PC_LimitSlotOptionChange(m_Preset, options =>
//{
// var sdata = ServerInfo.Ins.m_ServerData;
// sdata.Use_Item(m_matID, mPrice);
// list_CardBase.ForEach(f => (f as PCLimitSlotCard).Set_Change(m_Preset, options));
// Set();
// MyValue.Get_ActorStatInfoorNull(eRole.PC);
// NewGameUI.Ins.m_PCUI.Refresh_Money();
//});
2024-12-15 01:39:39 +00:00
}
}