using System.Collections.Generic; using System.Linq; using TMPro; public class SkillUI : BotMenuBase { public SkillUI_SkillInfo m_SkillUI_SkillInfo; public TabUIBase m_Tab, m_TabSkillType; public BattleUI m_BattleUI; public SkillEquipUI m_SkillEquipUI; public TextMeshProUGUI[] texts; // 0 보유 스킬 갯수 string m_SkillType = "JobPassive"; Dictionary dic_skillType = new Dictionary { { "Active", eSkillType.Active }, { "Passive", eSkillType.Passive }, { "JobPassive", eSkillType.JobPassive } }; List list_tabData = new List { new TabUIData{ }, new TabUIData{ }, new TabUIData{ } }; List list_skilltabData = new List { new TabUIData { n_btnName = 214 }, new TabUIData { n_btnName = 215 }, new TabUIData { n_btnName = 216 } }; int BeforePreset, AfterPreset; Dictionary>> dic_EquipSkill = new Dictionary>>(); public override void Set() { m_SkillEquipUI.OnClick_Back(); base.Set(); if (dic_EquipSkill.Count == 0) { for (int i = 0; i < 2; i++) { dic_EquipSkill.Add(i == 0, new Dictionary>()); for (int j = 0; j < 3; j++) dic_EquipSkill[i == 0].Add(j + 1, new List { 0, 0, 0, 0, 0, 0 }); } } var sdata = ServerInfo.Ins.m_ServerData; for (int i = 0; i < 3; i++) for (int j = 0; j < sdata.Equip.Skill[i + 1].Count; j++) { dic_EquipSkill[true][i + 1][j] = sdata.Equip.Skill[i + 1][j]; dic_EquipSkill[false][i + 1][j] = sdata.Equip.Skill[i + 1][j]; } BeforePreset = sdata.Equip.Preset; Set_PresetTab(); Set_SkillTab(); Set_Money(table_skilllist.Ins.Get_MatIds()); } void Set_PresetTab() { var sdata = ServerInfo.Ins.m_ServerData; for (int i = 0; i < list_tabData.Count; i++) { list_tabData[i].n_btnName = 219 + i; list_tabData[i].onClick = OnClick_Preset; } m_Tab.Set_Index(sdata.Equip.Preset - 1); m_Tab.Set(list_tabData); OnClick_Preset(); } void Set_SkillTab() { var sdata = ServerInfo.Ins.m_ServerData; for (int i = 0; i < list_skilltabData.Count; i++) { list_skilltabData[i].onClick = OnClick_SkillType; } m_TabSkillType.Set(list_skilltabData); OnClick_SkillType(); } public override void Set_UI() { var sdata = ServerInfo.Ins.m_ServerData; var lst = table_skilllist.Ins.Get_DataList(dic_skillType[m_SkillType], sdata.Get_EqiupmentEquip(eItem.PC)); Set_ScrollView(lst); list_CardBase.ForEach(f => f.Set_CardType(eUICardType.UI)); var data = m_SkillUI_SkillInfo.Get_Data(); m_SkillUI_SkillInfo.Set(DSUtil.CheckNull(data) ? list_CardBase[0].Get_Data() as SkillListTableData : data); m_BattleUI.Set(eUICardType.UIEquip, sdata.Equip.Preset); int obtain = 0; for (int i = 0; i < lst.Count; i++) if (sdata.IsObtainItem(lst[i].n_SkillID)) ++obtain; texts[0].text = $"{obtain}/{lst.Count}"; } public void EquipSkill(int slot, int skillid) { var curPreset = m_Tab.Get_Index() + 1; for (int i = 0; i < dic_EquipSkill[false][curPreset].Count; i++) { if (dic_EquipSkill[false][curPreset][i] == skillid) dic_EquipSkill[false][curPreset][i] = 0; } dic_EquipSkill[false][curPreset][slot] = skillid; } public void OnClick_SkillType() { var index = m_TabSkillType.Get_Index(); m_SkillType = index == 0 ? "JobPassive" : index == 1 ? "Active" : "Passive"; Set_UI(); } public void OnClick_Preset() { var sdata = ServerInfo.Ins.m_ServerData; AfterPreset = sdata.Equip.Preset = m_Tab.Get_Index() + 1; m_BattleUI.Set(eUICardType.UIEquip, sdata.Equip.Preset); } public override void OnClick_Back() { base.OnClick_Back(); bool save = BeforePreset != AfterPreset; if (!save) save = !AreDictionariesEqual(dic_EquipSkill[true], dic_EquipSkill[false]); if (save) ServerInfo.Ins.Save_Skill_MenuBack(AfterPreset, dic_EquipSkill[false], () => { // 실패시 원래대로 var sdata = ServerInfo.Ins.m_ServerData; sdata.Equip.Preset = BeforePreset; for (int i = 0; i < 3; i++) for (int j = 0; j < dic_EquipSkill[true][i + 1].Count; j++) sdata.Equip.Skill[i + 1][j] = dic_EquipSkill[true][i + 1][j]; }); } bool AreDictionariesEqual(Dictionary> a, Dictionary> b) { if (a.Count != b.Count) return false; foreach (var kv in a) { if (!b.TryGetValue(kv.Key, out var listB)) return false; if (!kv.Value.SequenceEqual(listB)) return false; } return true; } }