| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 | using System.Collections.Generic;using ET;using UnityEngine;namespace GFGGame{    public class ItemDataManager    {        private static Dictionary<int, ItemData> _dataDic = new Dictionary<int, ItemData>();        private static Dictionary<int, int> _itemExchangeDic = new Dictionary<int, int>();        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)            {                //游戏角色初始数据完成后才执行                bool dataInited = GameGlobal.DataInited;                DressUpMenuItemDataManager.Add(itemID);                if (!DressUpMenuItemDataManager.CheckIsSceneType(itemID))                {                    DecomposeDataManager.Instance.Add(itemID);                }                FunctionOpenCfg functionOpenCfg = FunctionOpenCfgArray.Instance.GetCfg(typeof(ClothingListView).Name);                if (dataInited                    && itemCfg.rarity == ConstDressRarity.Rarity_TIANYI                    && StorageDataManager.Instance.GetStorageValue(ConstStorageId.FUNCTION_OPEN + functionOpenCfg.index) == 0)                {                    FunctionOpenDataManager.Instance.CheckHasSpecialFunOpen();                }            }            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<ItemInfoProto> items)        {            _dataDic.Clear();            foreach (ItemInfoProto roleItem in items)            {                Add(roleItem.ConfigId, roleItem.Count);            }        }        public static void InitServerDataItemAttribute(List<ItemAttributeProto> 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);            //五个属性中最大的为主属性            mainScoreValue = 0;            mainScore = itemCfg.mainScore;            switch (mainScore)            {                case 1:                    mainScoreValue = itemCfg.score1;                    break;                case 2:                    mainScoreValue = itemCfg.score2;                    break;                case 3:                    mainScoreValue = itemCfg.score3;                    break;                case 4:                    mainScoreValue = itemCfg.score4;                    break;            }        }        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;        }    }}
 |