208 lines
9.6 KiB
C#
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]; }
|
||
|
|
}
|