2024-12-15 01:39:39 +00:00
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using UnityEngine;
|
2024-12-22 01:07:25 +00:00
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
#endif
|
2024-12-15 01:39:39 +00:00
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class ItemListTableData : TableDataBase
|
|
|
|
|
{
|
|
|
|
|
public int n_ItemID; // 아이템 고유 ID
|
|
|
|
|
public int n_ItemGrade; // 아이템 등급 분류 (UI 구성용)
|
|
|
|
|
public eItem e_ItemType; // 아이템의 분류 타입
|
|
|
|
|
public int n_ItemValue; // 아이템 속성 값
|
|
|
|
|
public int n_ItemName; // 아이템 이름 정보
|
|
|
|
|
public int n_ItemDesc; // 아이템 설명 정보
|
|
|
|
|
public string s_ItemIcon; // 아이템 아이콘 리소스 경로
|
|
|
|
|
public int n_ItemOrder; // 아이템 정렬 순서
|
|
|
|
|
public bool b_isSaveModeShow; // 절전 모드 표시 유무
|
|
|
|
|
public int n_LinkPointID1; // 획득처 바로가기1
|
|
|
|
|
public int n_LinkPointID2; // 획득처 바로가기2
|
|
|
|
|
public int n_LinkPointID3; // 획득처 바로가기3
|
|
|
|
|
public int n_LinkPointID4; // 획득처 바로가기4
|
|
|
|
|
public int n_LinkPointID5; // 획득처 바로가기5
|
|
|
|
|
|
|
|
|
|
public Sprite Get_IconSprite() { return UIAtlasMgr.Ins.Get_Sprite(s_ItemIcon); }
|
|
|
|
|
public Sprite Get_GradeSprite() { return UIAtlasMgr.Ins.Get_GradeSprite(n_ItemGrade); }
|
|
|
|
|
public override string Get_Name() { return table_localtext.Ins.Get_Text(n_ItemName); }
|
|
|
|
|
public string Get_Desc() { return table_localtext.Ins.Get_Text(n_ItemDesc); }
|
2025-07-23 00:34:14 +00:00
|
|
|
public string Get_Desc(double v) { return DSUtil.Format(n_ItemDesc, MyText.Get_PercentValueText_100(v)); }
|
2024-12-15 01:39:39 +00:00
|
|
|
public string Get_GradeName() { return table_localtext.Ins.Get_Text(30000 + n_ItemGrade); }
|
|
|
|
|
public string Get_ItemTypeName()
|
|
|
|
|
{
|
|
|
|
|
switch (e_ItemType)
|
|
|
|
|
{
|
|
|
|
|
case eItem.Weapon: return table_localtext.Ins.Get_Text(30101);
|
|
|
|
|
case eItem.Armor: return table_localtext.Ins.Get_Text(30102);
|
|
|
|
|
case eItem.Helmet: return table_localtext.Ins.Get_Text(30103);
|
|
|
|
|
case eItem.Extra: return table_localtext.Ins.Get_Text(30104);
|
|
|
|
|
case eItem.Necklace: return table_localtext.Ins.Get_Text(30105);
|
|
|
|
|
case eItem.Ring: return table_localtext.Ins.Get_Text(30106);
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
public bool IsEquipItem()
|
|
|
|
|
{
|
|
|
|
|
switch (e_ItemType)
|
|
|
|
|
{
|
|
|
|
|
case eItem.Weapon:
|
|
|
|
|
case eItem.Armor:
|
|
|
|
|
case eItem.Helmet:
|
|
|
|
|
case eItem.Extra:
|
|
|
|
|
case eItem.Necklace:
|
|
|
|
|
case eItem.Ring:
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class table_itemlist : table_missionbase
|
|
|
|
|
{
|
|
|
|
|
public static table_itemlist Ins;
|
|
|
|
|
List<ItemListTableData> tableDatas;
|
|
|
|
|
Dictionary<eItem, List<ItemListTableData>> dic_itemlist = new Dictionary<eItem, List<ItemListTableData>>();
|
|
|
|
|
Dictionary<int, ItemListTableData> dic_items = new Dictionary<int, ItemListTableData>();
|
|
|
|
|
|
|
|
|
|
protected override void Awake()
|
|
|
|
|
{
|
|
|
|
|
base.Awake();
|
|
|
|
|
Ins = this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void Start()
|
|
|
|
|
{
|
|
|
|
|
tableDatas = JsonConvert.DeserializeObject<List<ItemListTableData>>(json_last);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < Get_DataList().Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var temp = Get_DataList()[i];
|
|
|
|
|
var itemtype = temp.e_ItemType;
|
|
|
|
|
if (!dic_itemlist.ContainsKey(itemtype))
|
|
|
|
|
dic_itemlist.Add(itemtype, new List<ItemListTableData>());
|
|
|
|
|
dic_itemlist[itemtype].Add(temp);
|
|
|
|
|
dic_items.Add(temp.n_ItemID, temp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var key in dic_itemlist.Keys.ToList())
|
|
|
|
|
dic_itemlist[key] = dic_itemlist[key].OrderBy(item => item.n_ItemOrder).ToList();
|
|
|
|
|
|
|
|
|
|
base.Start();
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-22 01:07:25 +00:00
|
|
|
public ItemListTableData Get_Data(int id)
|
|
|
|
|
{
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
if (!dic_items.ContainsKey(id))
|
|
|
|
|
{
|
|
|
|
|
string errorMessage = $"Item ID {id} not found!";
|
|
|
|
|
string callStack = Environment.StackTrace;
|
|
|
|
|
|
|
|
|
|
// 로그 추가
|
|
|
|
|
var logEntry = new LogEntry(id.ToString(), errorMessage, callStack);
|
|
|
|
|
|
|
|
|
|
// 텍스트 파일에 저장
|
|
|
|
|
DSUtil.SaveLogToFile(logEntry);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
return dic_items.ContainsKey(id) ? dic_items[id] : null;
|
|
|
|
|
}
|
2024-12-15 01:39:39 +00:00
|
|
|
public List<ItemListTableData> Get_DataList() { return tableDatas; }
|
|
|
|
|
public List<ItemListTableData> Get_DataList(eItem item) { return dic_itemlist[item]; }
|
2024-12-22 01:07:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
public string Get_ItemName(int id)
|
|
|
|
|
{
|
|
|
|
|
var data = Get_Data(id);
|
|
|
|
|
if (!DSUtil.CheckNull(data))
|
|
|
|
|
return data.Get_Name();
|
|
|
|
|
return $"no item {id}";
|
|
|
|
|
}
|
|
|
|
|
public string Get_ItemDesc(int id)
|
|
|
|
|
{
|
|
|
|
|
var data = Get_Data(id);
|
|
|
|
|
if (!DSUtil.CheckNull(data))
|
|
|
|
|
return data.Get_Desc();
|
|
|
|
|
return $"no item {id}";
|
|
|
|
|
}
|
2025-07-23 00:34:14 +00:00
|
|
|
public string Get_ItemDesc(int id, double v)
|
|
|
|
|
{
|
|
|
|
|
var data = Get_Data(id);
|
|
|
|
|
if (!DSUtil.CheckNull(data))
|
|
|
|
|
return data.Get_Desc(v);
|
|
|
|
|
return $"no item {id}";
|
|
|
|
|
}
|
2024-12-22 01:07:25 +00:00
|
|
|
public string Get_GradeName(int id)
|
|
|
|
|
{
|
|
|
|
|
var data = Get_Data(id);
|
|
|
|
|
if (!DSUtil.CheckNull(data))
|
|
|
|
|
return data.Get_GradeName();
|
|
|
|
|
return $"no item {id}";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class LogEntry
|
|
|
|
|
{
|
|
|
|
|
public string ItemId; // 호출된 아이템 ID
|
|
|
|
|
public string ErrorMessage; // 에러 메시지
|
|
|
|
|
public string CallStack; // 호출 스택
|
|
|
|
|
public string Timestamp; // 로그 발생 시간
|
|
|
|
|
|
|
|
|
|
public LogEntry(string itemId, string errorMessage, string callStack)
|
|
|
|
|
{
|
|
|
|
|
ItemId = itemId;
|
|
|
|
|
ErrorMessage = errorMessage;
|
|
|
|
|
CallStack = callStack;
|
|
|
|
|
Timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public LogEntry(string itemId, string errorMessage, string callStack, string timestamp)
|
|
|
|
|
{
|
|
|
|
|
ItemId = itemId;
|
|
|
|
|
ErrorMessage = errorMessage;
|
|
|
|
|
CallStack = callStack;
|
|
|
|
|
Timestamp = timestamp;
|
|
|
|
|
}
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|