using CodeStage.AntiCheat.ObscuredTypes; using Newtonsoft.Json; using System; using System.Collections.Generic; public enum eEquipmentParts { Weapon, SubWeapon, ArmorTop, ArmorBottom, Gloves, Shoes, Ring, Necklace } public enum eEquipmentStat { Main1, Main2, Sub1, Sub2, Sub3, Sub4 } public enum EquipResult { CanEquip = 0, // 아무도 안 쓰고 있음 EquippedByOther = 1, // 다른 캐릭터가 사용 중 EquippedByMe = -1, // 내가 이미 장착 중 NotEnoughEvolution = -2, // 캐릭터 진화 부족 } public class EquipmentListTableData : TableDataBase { public eEquipmentParts e_EquipmentType; ObscuredInt _ID; public int n_ID { get { return _ID; } set { _ID = value; _ID.RandomizeCryptoKey(); } } ObscuredInt _Grade; public int n_Grade { get { return _Grade; } set { _Grade = value; _Grade.RandomizeCryptoKey(); } } ObscuredInt _SetGroupID; public int n_SetGroupID { get { return _SetGroupID; } set { _SetGroupID = value; _SetGroupID.RandomizeCryptoKey(); } } ObscuredInt _SubOptionCount; public int n_SubOptionCount { get { return _SubOptionCount; } set { _SubOptionCount = value; _SubOptionCount.RandomizeCryptoKey(); } } ObscuredInt _MainOtion; public int n_MainOtion { get { return _MainOtion; } set { _MainOtion = value; _MainOtion.RandomizeCryptoKey(); } } ObscuredInt _SubOtion1; public int n_SubOtion1 { get { return _SubOtion1; } set { _SubOtion1 = value; _SubOtion1.RandomizeCryptoKey(); } } ObscuredInt _SubOtion2; public int n_SubOtion2 { get { return _SubOtion2; } set { _SubOtion2 = value; _SubOtion2.RandomizeCryptoKey(); } } ObscuredInt _SubOtion3; public int n_SubOtion3 { get { return _SubOtion3; } set { _SubOtion3 = value; _SubOtion3.RandomizeCryptoKey(); } } ObscuredInt _SubOtion4; public int n_SubOtion4 { get { return _SubOtion4; } set { _SubOtion4 = value; _SubOtion4.RandomizeCryptoKey(); } } public override string Get_Name() { return table_ItemList.Ins.Get_Data_orNull(n_ID).Get_Name(); } public eStat Get_eStat(eEquipmentStat whatstat) { switch (whatstat) { case eEquipmentStat.Main1: return table_StatusOptionSet.Ins.Get_Data(n_MainOtion).e_Stat1; case eEquipmentStat.Main2: return table_StatusOptionSet.Ins.Get_Data(n_MainOtion).e_Stat1; case eEquipmentStat.Sub1: return n_SubOtion1 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion1).e_Stat1 : eStat.None; case eEquipmentStat.Sub2: return n_SubOtion2 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion2).e_Stat1 : eStat.None; case eEquipmentStat.Sub3: return n_SubOtion3 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion3).e_Stat1 : eStat.None; case eEquipmentStat.Sub4: return n_SubOtion4 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion4).e_Stat1 : eStat.None; } return eStat.None; } public float Get_Value(eEquipmentStat whatstat, int pcid, int lv = 0) { var upgradeData = table_EquipmentUpgrade.Ins.Get_Data(n_Grade); switch (whatstat) { case eEquipmentStat.Main1: { var setData = MyValue.sdata.Get_EquipSetItemData(pcid); int setMul = setData.m_SetGroupID == n_SetGroupID ? setData.m_MainValue : 0; return table_StatusOptionSet.Ins.Get_Data(n_MainOtion).Get_StatValue1(lv, upgradeData.n_UpgradeMainStat_Mul + setMul); } case eEquipmentStat.Main2: { var setData = MyValue.sdata.Get_EquipSetItemData(pcid); int setMul = setData.m_SetGroupID == n_SetGroupID ? setData.m_MainValue : 0; return table_StatusOptionSet.Ins.Get_Data(n_MainOtion).Get_StatValue2(lv, upgradeData.n_UpgradeMainStat_Mul + setMul); } case eEquipmentStat.Sub1: return n_SubOtion1 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion1).Get_StatValue1(lv, upgradeData.n_UpgradeSubStat_Mul) : 0f; case eEquipmentStat.Sub2: return n_SubOtion2 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion2).Get_StatValue1(lv, upgradeData.n_UpgradeSubStat_Mul) : 0f; case eEquipmentStat.Sub3: return n_SubOtion3 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion3).Get_StatValue1(lv, upgradeData.n_UpgradeSubStat_Mul) : 0f; case eEquipmentStat.Sub4: return n_SubOtion4 > 0 ? table_StatusOptionSet.Ins.Get_Data(n_SubOtion4).Get_StatValue1(lv, upgradeData.n_UpgradeSubStat_Mul) : 0f; } return 0f; } public float Get_DifferentValue(eEquipmentStat whatstat, int lv) { if (lv <= 0) return 0f; var upgradeData = table_EquipmentUpgrade.Ins.Get_Data(n_Grade); float GetDiff(int optionId, Func getter) { if (optionId <= 0) return 0f; var data = table_StatusOptionSet.Ins.Get_Data(optionId); return getter(data, lv) - getter(data, lv - 1); } switch (whatstat) { case eEquipmentStat.Main1: return GetDiff(n_MainOtion, (d, l) => d.Get_StatValue1(l, upgradeData.n_UpgradeMainStat_Mul)); case eEquipmentStat.Main2: return GetDiff(n_MainOtion, (d, l) => d.Get_StatValue2(l, upgradeData.n_UpgradeMainStat_Mul)); case eEquipmentStat.Sub1: return GetDiff(n_SubOtion1, (d, l) => d.Get_StatValue1(l, upgradeData.n_UpgradeSubStat_Mul)); case eEquipmentStat.Sub2: return GetDiff(n_SubOtion2, (d, l) => d.Get_StatValue1(l, upgradeData.n_UpgradeSubStat_Mul)); case eEquipmentStat.Sub3: return GetDiff(n_SubOtion3, (d, l) => d.Get_StatValue1(l, upgradeData.n_UpgradeSubStat_Mul)); case eEquipmentStat.Sub4: return GetDiff(n_SubOtion4, (d, l) => d.Get_StatValue1(l, upgradeData.n_UpgradeSubStat_Mul)); } return 0f; } public string Get_Desc_Main(int pcid, int lv) { var equiptype = table_localtext.Ins.Get_Text(1001001 + (int)e_EquipmentType); var stattitle = ""; if (e_EquipmentType == eEquipmentParts.Weapon) { stattitle = MyText.Get_StatName(eStat.Attack); var val1 = MyText.Get_StatValueText(Get_eStat(eEquipmentStat.Main1), Get_Value(eEquipmentStat.Main1, pcid, lv), true); var val2 = MyText.Get_StatValueText(Get_eStat(eEquipmentStat.Main2), Get_Value(eEquipmentStat.Main2, pcid,lv), true); return $"{equiptype}\n{stattitle}\n{val1}~{val2}"; } else { var sosdata = table_StatusOptionSet.Ins.Get_Data(n_MainOtion); stattitle = MyText.Get_StatName(sosdata.e_Stat1); var val1 = MyText.Get_StatValueText(sosdata.e_Stat1, Get_Value(eEquipmentStat.Main1, pcid,lv), true); return $"{equiptype}\n{stattitle}\n{val1}"; } } public string Get_Desc_SubOptions(int lv) { var lines = new List(); AddOptionLines(lines, n_SubOtion1, lv); AddOptionLines(lines, n_SubOtion2, lv); AddOptionLines(lines, n_SubOtion3, lv); AddOptionLines(lines, n_SubOtion4, lv); return string.Join("\n", lines); } void AddOptionLines(List lines, int optionId, int lv) { if (optionId <= 0) return; var text = Get_OptionText(optionId, lv); if (string.IsNullOrEmpty(text)) return; // 옵션 내부 줄들을 그대로 펼쳐서 추가 lines.AddRange(text.Split('\n')); } string Get_OptionText(int optionid, int lv) { if (optionid <= 0) return string.Empty; var upgradeData = table_EquipmentUpgrade.Ins.Get_Data(n_Grade); var tdata = table_StatusOptionSet.Ins.Get_Data(optionid); var optionLines = new List(); if (tdata.e_Stat1 < eStat.Max) optionLines.Add(MyText.Get_StatNameValueText(tdata.e_Stat1, tdata.Get_StatValue1(lv, upgradeData.n_UpgradeSubStat_Mul), true)); if (tdata.e_Stat2 < eStat.Max) optionLines.Add(MyText.Get_StatNameValueText(tdata.e_Stat2, tdata.Get_StatValue2(lv, upgradeData.n_UpgradeSubStat_Mul), true)); return string.Join("\n", optionLines); } } public class table_EquipmentList : table_base { public static table_EquipmentList Ins; List tableDatas; Dictionary dic_Data = new Dictionary(); Dictionary> dic_SetDatas = new Dictionary>(); protected override void Awake() { Ins = this; base.Awake(); } protected override void Start() { tableDatas = JsonConvert.DeserializeObject>(json_last); for (int i = 0; i < tableDatas.Count; i++) { var temp = tableDatas[i]; dic_Data.Add(temp.n_ID, temp); if (temp.n_SetGroupID > 0) { if (!dic_SetDatas.ContainsKey(temp.n_SetGroupID)) dic_SetDatas.Add(temp.n_SetGroupID, new List()); dic_SetDatas[temp.n_SetGroupID].Add(temp); } } base.Start(); } public List Get_DataList() { return tableDatas; } public EquipmentListTableData Get_Data(int id) { return dic_Data[id]; } public List Get_SetDataList(int setid) { return dic_SetDatas[setid]; } }