using TMPro; using UnityEngine.UI; public class PCLimitSlotCard : CardBase { public TextMeshProUGUI[] texts; // 0 스탯, 1 등급, 2 잠금 설명 public Image[] images; // 0 등급, 1 잠금 SD_PCLimitSlotData m_SData; int m_Grade, m_Slot; public override void Set(T _base) { base.Set(_base); m_SData = _base as SD_PCLimitSlotData; } public override void Set(int _val) { m_Slot = _val; var openlv = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot); texts[2].text = isCloseSlot() ? DSUtil.Format(262, openlv) : ""; Set_UI(); } public override void Set_UI() { var Tdata = table_optionconfig.Ins.Get_Data(m_SData.ID); m_Grade = 0; texts[0].text = texts[1].text = ""; images[0].color = table_enchantgradeconfig.Ins.Get_Data(1).GradeColor; images[1].enabled = m_SData.Lock > 0; if (DSUtil.CheckNull(Tdata)) { // 오픈된 슬롯인가? } else { texts[2].text = ""; m_Grade = table_randombag.Ins.Get_Data(m_SData.ID).n_ItemGrade; var gradecolor = table_enchantgradeconfig.Ins.Get_Data(m_Grade).GradeColor; images[0].color = gradecolor; texts[0].text = MyText.Get_StatNameValueText(Tdata.e_OptionType, Tdata.Get_Value(m_SData.Lv)); texts[1].text = "??"; } } bool isCloseSlot() { var lv = ServerInfo.Ins.m_ServerData.Get_LimitLv(); var openlv = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot); return openlv > lv; } // 기존 클라 기반일 때 //public void Set_Change(string preset) //{ // var sdata = ServerInfo.Ins.m_ServerData; // var isOpen = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot) <= sdata.Get_LimitLv(); // if (isOpen && m_SData.Lock == 0) // { // var lv = sdata.Get_LimitLv(); // var Tdata = table_limitslotmagicrate.Ins.Get_Data_orNull(lv); // var grade = DSUtil.Get_RandomIndex(Tdata.list_rate) + 1; // var itemData = table_randombag.Ins.Get_RandomItemData(Tdata.n_DropIndex, grade); // var optionlv = table_enchantgradeconfig.Ins.Get_Lv(grade); // sdata.Set_LimitSlotID(preset, m_Slot, itemData.itemid, optionlv); // sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE); // sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC); // } //} public void Set_Change(string preset, SC_LimitOptionResult options) { var sdata = ServerInfo.Ins.m_ServerData; var isOpen = table_breakinglimit.Ins.Get_SlotOpenLv(m_Slot) <= sdata.Get_LimitLv(); var s_data = options.results.Find(f => f.slot == m_Slot - 1); if (s_data != null) { sdata.Set_LimitSlotID(preset, m_Slot, s_data.randombagid, s_data.optionlv); sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE); sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC); } } public void Set_Change(string preset, int ipreset) { var sdata = ServerInfo.Ins.m_ServerData; var optionindex = ipreset + 1; var presetindex = ipreset; if (!isCloseSlot() && !sdata.isLock_LimitSlot(preset, m_Slot)) { var option = sdata.LimitBreakOption.Option[optionindex][sdata.LimitBreakOption.Preset[presetindex]++]; if (sdata.LimitBreakOption.Preset[presetindex] >= sdata.LimitBreakOption.Option[optionindex].Count) { sdata.LimitBreakOption.Preset[presetindex] = 0; // 다음 테이블 서버에서 받아오기 PCLimitUI.Ins.m_PCLimitUI_Right.ChangeOption = true; } sdata.Set_LimitSlotID(preset, m_Slot, option.id, option.lv); sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE); sdata.Add_MissionCount(ePurpose.HERO_OPTION_CHANGE_ACC); PCLimitUI.Ins.m_PCLimitUI_Right.m_LimitSlotChangeData.Add_MissionCount(); } } public override int Get_IntData() { return m_Grade; } public void OnClick_Lock() { var sdata = ServerInfo.Ins.m_ServerData; var preset = PCLimitUI.Ins.m_PCLimitUI_Right.Get_Preset(); if (m_SData.ID > 0 || sdata.isLock_LimitSlot(preset, m_Slot)) { //ServerInfo.Ins.Save_PC_LimitSlotLock(preset, m_Slot, () => //{ sdata.Set_LimitSlotLock(preset, m_Slot); PCLimitUI.Ins.m_PCLimitUI_Right.Set(); //}); } } }