| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | 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 Clear()        {            _itemExchangeDic.Clear();        }        public static void Add(int itemID, long 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 (!DressUpMenuItemCfg1Array.Instance.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();                }            }            if (itemCfg.itemType == ConstItemType.ITEM && itemData.num > 0)            {                BagDataManager.Instance.Add(itemData);            }            if (itemCfg.itemType == ConstItemType.HEAD)            {                RoleInfoManager.Instance.Add(itemID);                if (GameGlobal.DataInited)                {                    RoleInfoManager.Instance.AddNew(itemID);                    EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);                }            }            PhotographDataManager.Instance.Add(itemID);            EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);        }        public static void Remove(int itemID, long itemNum)        {            if (_dataDic.ContainsKey(itemID))            {                ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(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);                    }                    if (itemCfg.itemType == ConstItemType.ITEM)                    {                        BagDataManager.Instance.Remove(itemID);                    }                    if (itemCfg.itemType == ConstItemType.HEAD)                    {                        RoleInfoManager.Instance.Remove(itemID);                    }                }                if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemID))                {                    DecomposeDataManager.Instance.Remove(itemID);                }                EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);            }        }        public static long 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);            }        }        /// <summary>        /// 获取表格配置的基础属性        /// </summary>        /// <param name="itemId"></param>        /// <param name="scoreType"></param>        /// <returns></returns>        public static int GetItemBaseScoreValue(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;        }        /// <summary>        /// 获取当前(养护/升级/升星...后)的属性        /// </summary>        /// <param name="itemId"></param>        /// <param name="scoreType"></param>        /// <returns></returns>        public static int GetItemAdditionScore(int itemId, int scoreType, string[] tags = null)        {            if (_dataDic.TryGetValue(itemId, out var itemData))            {                int scroe = 0;                if (tags != null)                {                    scroe += GetItemTagScore(itemId, tags);                }                scroe += itemData.GetScore(scoreType);                return scroe;            }            return 0;        }        /// <summary>        /// 获取一个换装部件对应的标签分数        /// </summary>        /// <param name="itemId"></param>        /// <param name="tags"></param>        /// <returns></returns>        public static int GetItemTagScore(int itemId, string[] tags)        {            int score = 0;            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);            if (itemCfg == null)            {                ET.Log.Error("物品:" + itemId + "不存在");                return score;            }            for (int i = 0; i < itemCfg.tagsArr.Length; i++)            {                for (int j = 0; j < tags.Length; j++)                {                    if (itemCfg.tagsArr[i][0] == tags[j])                    {                        score += int.Parse(itemCfg.tagsArr[i][1]);                    }                }            }            return score;        }        /// <summary>        /// 检测一件服装是否包含要求的标签        /// </summary>        /// <returns></returns>        public static bool CheckItemTagsRight(int itemId, string[] tags)        {            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);            for (int i = 0; i < itemCfg.tagsArr.Length; i++)            {                for (int j = 0; j < tags.Length; j++)                {                    if (itemCfg.tagsArr[i][0] == tags[j]) return true;                }            }            return false;        }    }}
 |