OneShotOneKill/Assets/Script/Table/Tables/table_EquipmentList.cs

208 lines
9.6 KiB
C#

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<StatusOptionSetTableData, int, float> 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<size=50><color=#fffc00>{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<size=50><color=#fffc00>{val1}";
}
}
public string Get_Desc_SubOptions(int lv)
{
var lines = new List<string>();
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<string> 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<string>();
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<EquipmentListTableData> tableDatas;
Dictionary<int, EquipmentListTableData> dic_Data = new Dictionary<int, EquipmentListTableData>();
Dictionary<int, List<EquipmentListTableData>> dic_SetDatas = new Dictionary<int, List<EquipmentListTableData>>();
protected override void Awake()
{
Ins = this;
base.Awake();
}
protected override void Start()
{
tableDatas = JsonConvert.DeserializeObject<List<EquipmentListTableData>>(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<EquipmentListTableData>());
dic_SetDatas[temp.n_SetGroupID].Add(temp);
}
}
base.Start();
}
public List<EquipmentListTableData> Get_DataList() { return tableDatas; }
public EquipmentListTableData Get_Data(int id) { return dic_Data[id]; }
public List<EquipmentListTableData> Get_SetDataList(int setid) { return dic_SetDatas[setid]; }
}