using System; using System.Collections.Generic; using System.Reflection; using ET; using FairyGUI; using UnityEngine; using static UnityEditor.Progress; namespace GFGGame { public class ItemDataManager { private static Dictionary _dataDic = new Dictionary(); private static Dictionary _itemExchangeDic = new Dictionary(); delegate object MemberGetDelegate(ItemCfg p); public static void Add(int itemID, int itemNum) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID); if (itemCfg == null) { Debug.LogError($"添加了一个不存在的物品 {itemID}"); return; } ItemData itemData = null; if (_dataDic.ContainsKey(itemID)) { itemData = _dataDic[itemID]; if (itemCfg.itemType == ConstItemType.CARD) { return;//每张卡牌只有一张 } } else { itemData = ItemDataPool.GetItemData(itemID); _dataDic.Add(itemID, itemData); } itemData.num += itemNum; if (ItemUtilCS.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0) { DressUpMenuItemDataManager.Add(itemID); if (!DressUpMenuItemDataManager.CheckIsSceneType(itemID)) { DecomposeDataManager.Instance.Add(itemID); } FunctionOpenCfg functionOpenCfg = FunctionOpenCfgArray.Instance.GetCfg(typeof(SuitListView).Name); if (itemCfg.rarity == ConstDressRarity.Rarity_TIANYI && StorageDataManager.Instance.GetStorageValue(ConstStorageId.FUNCTION_OPEN + functionOpenCfg.index) == 0) { FunctionOpenDataManager.Instance.CheckHasSpecialFunOpen(); } } // if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID)) // { // DecomposeDataManager.Instance.Add(itemID); // } PhotographDataManager.Instance.Add(itemID); EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID); } public static void Remove(int itemID, int itemNum) { if (_dataDic.ContainsKey(itemID)) { ItemData itemData = _dataDic[itemID]; itemData.num -= itemNum; if (itemData.num <= 0) { itemData.num = 0; _dataDic.Remove(itemID); if (ItemUtilCS.IsDressUpItem(itemID)) { DressUpMenuItemDataManager.Remove(itemID); } } ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID); if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID)) { DecomposeDataManager.Instance.Remove(itemID); } EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID); } } public static int GetItemNum(int itemId) { int numericType = NumericUtil.GetNumericTypeByItemId(itemId); if (numericType != 0) { return GameGlobal.myNumericComponent.GetAsInt(numericType); } if (_dataDic.TryGetValue(itemId, out var itemData)) { return itemData.num; } return 0; } public static void InitServerData(List items) { _dataDic.Clear(); foreach (ItemInfoProto roleItem in items) { Add(roleItem.ConfigId, roleItem.Count); } } public static void InitServerDataItemAttribute(List infos) { foreach (var info in infos) { if (_dataDic.TryGetValue(info.ConfigId, out var itemData)) { itemData.SetAttributes(info.Ks, info.Vs); } } } public static void InitItemExchange(int itemId, int exchangTimes) { if (_itemExchangeDic.ContainsKey(itemId)) { _itemExchangeDic[itemId] = exchangTimes; } else { _itemExchangeDic.Add(itemId, exchangTimes); } } //获取物品已兑换次数 public static int GetItemExchangeTimes(int itemId) { if (_itemExchangeDic.ContainsKey(itemId) == false) { InitItemExchange(itemId, 0); } return _itemExchangeDic[itemId]; } public static void SetAttribute(int itemId, int key, int value) { if (_dataDic.TryGetValue(itemId, out var itemData)) { itemData.SetAttribute(key, value); } } public static void GetMainScore(int itemId, out int mainScore, out int mainScoreValue) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); //五个属性中最大的为主属性 mainScore = 1; mainScoreValue = 0; if (itemCfg.score1 > mainScoreValue) { mainScoreValue = itemCfg.score1; mainScore = 1; } if (itemCfg.score2 > mainScoreValue) { mainScoreValue = itemCfg.score2; mainScore = 2; } if (itemCfg.score3 > mainScoreValue) { mainScoreValue = itemCfg.score3; mainScore = 3; } if (itemCfg.score4 > mainScoreValue) { mainScoreValue = itemCfg.score4; mainScore = 4; } } public static int GetItemScoreValue(int itemId, int scoreType) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); if (scoreType == 1) { return itemCfg.score1; } else if (scoreType == 2) { return itemCfg.score2; } else if (scoreType == 3) { return itemCfg.score3; } else if (scoreType == 4) { return itemCfg.score4; } return 0; } public static int GetScore(int itemId, int scoreType) { if (_dataDic.TryGetValue(itemId, out var itemData)) { return itemData.GetScore(scoreType); } return 0; } } }