Browse Source

物品协议优化

guodong 2 years ago
parent
commit
e00257fded

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Data/DecomposeDataManager.cs

@@ -14,7 +14,7 @@ namespace GFGGame
         }
         }
         public void Add(int itemId)
         public void Add(int itemId)
         {
         {
-            int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity;
+            int rarity = ItemDataManager.GetItemRarity(itemId);
             if (!_decomposeData.ContainsKey(rarity))
             if (!_decomposeData.ContainsKey(rarity))
             {
             {
                 _decomposeData.Add(rarity, new List<int>());
                 _decomposeData.Add(rarity, new List<int>());

+ 17 - 22
GameClient/Assets/Game/HotUpdate/Data/DressUpMenuItemDataManager.cs

@@ -2,6 +2,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System;
 using System;
 using UnityEngine;
 using UnityEngine;
+using ET;
 
 
 namespace GFGGame
 namespace GFGGame
 {
 {
@@ -41,32 +42,26 @@ namespace GFGGame
             dressSearchTxt = "";
             dressSearchTxt = "";
 
 
         }
         }
-        public static void Add(int value)
+        public static void Add(ItemInfoProto itemInfoProto)
         {
         {
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(value);
-            if (itemCfg == null)
+            var value = itemInfoProto.ConfigId;
+            //游戏初始化禁止使用ItemCfg
+            if (!_itemDatas.Contains(value))
             {
             {
-                Debug.LogError("添加了一个不存在的物品" + value);
-            }
-            else
-            {
-                if (!_itemDatas.Contains(value))
-                {
-                    _itemDatas.Add(value);
+                _itemDatas.Add(value);
 
 
-                    int subType = ItemUtilCS.GetItemSubType(value);
-                    subType = subType >= (int)ConstDressUpItemType.TE_SHU ? (int)ConstDressUpItemType.TE_SHU : subType;
+                int subType = itemInfoProto.SubType;
+                subType = subType >= (int)ConstDressUpItemType.TE_SHU ? (int)ConstDressUpItemType.TE_SHU : subType;
 
 
-                    if (!_itemDatasBySubTypeDic.ContainsKey(subType))
-                    {
-                        _itemDatasBySubTypeDic.Add(subType, new List<int>());
-                    }
-                    _itemDatasBySubTypeDic[subType].Add(value);
+                if (!_itemDatasBySubTypeDic.ContainsKey(subType))
+                {
+                    _itemDatasBySubTypeDic.Add(subType, new List<int>());
+                }
+                _itemDatasBySubTypeDic[subType].Add(value);
 
 
-                    if (GameGlobal.DataInited)
-                    {
-                        AddNewDressItem(value);
-                    }
+                if (GameGlobal.DataInited)
+                {
+                    AddNewDressItem(value);
                     DressUpMenuSuitDataManager.CheckItemInSuit(value);
                     DressUpMenuSuitDataManager.CheckItemInSuit(value);
                 }
                 }
             }
             }
@@ -469,7 +464,7 @@ namespace GFGGame
 
 
         public static void AddNewDressItem(int value)
         public static void AddNewDressItem(int value)
         {
         {
-            int subType = ItemUtilCS.GetItemSubType(value);
+            int subType = ItemDataManager.GetItemSubType(value);
             if (!_newItemdata.ContainsKey(subType))
             if (!_newItemdata.ContainsKey(subType))
             {
             {
                 _newItemdata.Add(subType, new List<int>());
                 _newItemdata.Add(subType, new List<int>());

+ 6 - 25
GameClient/Assets/Game/HotUpdate/Data/DressUpMenuSuitDataManager.cs

@@ -2,6 +2,7 @@ using System;
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using ET;
 using ET;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 
 
 namespace GFGGame
 namespace GFGGame
 {
 {
@@ -17,8 +18,6 @@ namespace GFGGame
                 return _travelSuitIDList;
                 return _travelSuitIDList;
             }
             }
         }
         }
-        //获得这件装备时套装的进度,用于展示
-        private static Dictionary<int, int> _progressByItemIdDic = new Dictionary<int, int>();
         //套装当前的进度
         //套装当前的进度
         private static Dictionary<int, int> _progressBySuitIdDic = new Dictionary<int, int>();
         private static Dictionary<int, int> _progressBySuitIdDic = new Dictionary<int, int>();
 
 
@@ -31,7 +30,6 @@ namespace GFGGame
             _suitIDList.Clear();
             _suitIDList.Clear();
             _travelSuitIDList.Clear();
             _travelSuitIDList.Clear();
             _progressBySuitIdDic.Clear();
             _progressBySuitIdDic.Clear();
-            _progressByItemIdDic.Clear();
             _actionIDList.Clear();
             _actionIDList.Clear();
         }
         }
 
 
@@ -55,6 +53,11 @@ namespace GFGGame
                     _suitGuideBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.GuideBoxBonusState);
                     _suitGuideBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.GuideBoxBonusState);
                     //合成
                     //合成
                     _suitSyntheticBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.SyntheticBoxBonusState);
                     _suitSyntheticBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.SyntheticBoxBonusState);
+                    _progressBySuitIdDic[suitInfo.SuitId] = suitInfo.PartsCount;
+                    if (suitInfo.CollectedAll)
+                    {
+                        Add(suitInfo.SuitId);
+                    }
                 }
                 }
                 EventAgent.DispatchEvent(ConstMessage.GET_SUIT_INFOS);
                 EventAgent.DispatchEvent(ConstMessage.GET_SUIT_INFOS);
             }
             }
@@ -106,27 +109,6 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-
-        // public static void GetSuitProgressByItemId(int itemID, out int suitId, out int count)
-        // {
-        //     suitId = SuitCfgManager.Instance.GetItemSuitId(itemID);
-        //     if (suitId > 0)
-        //     {
-        //         if (_progressByItemIdDic.ContainsKey(itemID))
-        //         {
-        //             count = _progressByItemIdDic[itemID];
-        //         }
-        //         else
-        //         {
-        //             count = 0;
-        //         }
-        //     }
-        //     else
-        //     {
-        //         count = 0;
-        //     }
-        // }
-
         public static void GetSuitProgressBySuitId(int suitId, out int count, out int totalCount)
         public static void GetSuitProgressBySuitId(int suitId, out int count, out int totalCount)
         {
         {
             if (suitId > 0)
             if (suitId > 0)
@@ -186,7 +168,6 @@ namespace GFGGame
                     }
                     }
                 }
                 }
                 _progressBySuitIdDic[suitId] = count;
                 _progressBySuitIdDic[suitId] = count;
-                _progressByItemIdDic[itemId] = count;
                 if (hasAll)
                 if (hasAll)
                 {
                 {
                     Add(suitId);
                     Add(suitId);

+ 61 - 29
GameClient/Assets/Game/HotUpdate/Data/ItemDataManager.cs

@@ -17,66 +17,65 @@ namespace GFGGame
             _itemExchangeDic.Clear();
             _itemExchangeDic.Clear();
         }
         }
 
 
-        public static void Add(int itemID, long itemNum)
+        public static void Add(ItemInfoProto itemInfoProto)
         {
         {
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
-            if (itemCfg == null)
-            {
-                Debug.LogError($"添加了一个不存在的物品 {itemID}");
-                return;
-            }
+            var itemID = itemInfoProto.ConfigId;
             ItemData itemData = null;
             ItemData itemData = null;
             if (_dataDic.ContainsKey(itemID))
             if (_dataDic.ContainsKey(itemID))
             {
             {
                 itemData = _dataDic[itemID];
                 itemData = _dataDic[itemID];
-                if (itemCfg.itemType == ConstItemType.CARD)
-                {
-                    return; //每张卡牌只有一张
-                }
             }
             }
             else
             else
             {
             {
                 itemData = ItemDataPool.GetItemData(itemID);
                 itemData = ItemDataPool.GetItemData(itemID);
+                itemData.itemType = itemInfoProto.Type;
+                itemData.subType = itemInfoProto.SubType;
+                itemData.rarity = itemInfoProto.Rarity;
                 _dataDic.Add(itemID, itemData);
                 _dataDic.Add(itemID, itemData);
             }
             }
-            itemData.num += itemNum;
-            if (ItemUtilCS.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0)
+            itemData.num = itemInfoProto.Count;
+            if (itemInfoProto.Type == ConstItemType.DRESS_UP && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0)
             {
             {
-                //游戏角色初始数据完成后才执行
-                bool dataInited = GameGlobal.DataInited;
-                DressUpMenuItemDataManager.Add(itemID);
-                if (!DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemID))
+                DressUpMenuItemDataManager.Add(itemInfoProto);
+                if (!DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemInfoProto))
                 {
                 {
                     DecomposeDataManager.Instance.Add(itemID);
                     DecomposeDataManager.Instance.Add(itemID);
                 }
                 }
 
 
-                FunctionOpenCfg functionOpenCfg = FunctionOpenCfgArray.Instance.GetCfg(typeof(ClothingListView).Name);
-
-                if (dataInited
-                    && itemCfg.rarity == ConstDressRarity.Rarity_TIANYI
+                //游戏角色初始数据完成后才执行
+                if (GameGlobal.DataInited)
+                {
+                    ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
+                    FunctionOpenCfg functionOpenCfg = FunctionOpenCfgArray.Instance.GetCfg(typeof(ClothingListView).Name);
+                    if (itemCfg.rarity == ConstDressRarity.Rarity_TIANYI
                     && StorageDataManager.Instance.GetStorageValue(ConstStorageId.FUNCTION_OPEN +
                     && StorageDataManager.Instance.GetStorageValue(ConstStorageId.FUNCTION_OPEN +
                                                                    functionOpenCfg.index) == 0)
                                                                    functionOpenCfg.index) == 0)
-                {
-                    FunctionOpenDataManager.Instance.CheckHasSpecialFunOpen();
+                    {
+                        FunctionOpenDataManager.Instance.CheckHasSpecialFunOpen();
+                    }
                 }
                 }
+                    
             }
             }
-            if ((itemCfg.itemType == ConstItemType.ITEM || itemCfg.itemType == ConstItemType.USEABLE) &&
+            if ((itemInfoProto.Type == ConstItemType.ITEM || itemInfoProto.Type == ConstItemType.USEABLE) &&
                 itemData.num > 0)
                 itemData.num > 0)
             {
             {
                 BagDataManager.Instance.Add(itemData);
                 BagDataManager.Instance.Add(itemData);
             }
             }
 
 
-            if (itemCfg.itemType == ConstItemType.HEAD)
+            if (itemInfoProto.Type == ConstItemType.HEAD)
             {
             {
-                RoleInfoManager.Instance.Add(itemID);
+                RoleInfoManager.Instance.Add(itemInfoProto);
                 if (GameGlobal.DataInited)
                 if (GameGlobal.DataInited)
                 {
                 {
                     RoleInfoManager.Instance.AddNew(itemID);
                     RoleInfoManager.Instance.AddNew(itemID);
                     EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
                     EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
                 }
                 }
             }
             }
-            PhotographDataManager.Instance.Add(itemID);
-            EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
+            PhotographDataManager.Instance.Add(itemInfoProto);
+            if(GameGlobal.DataInited)
+            {
+                EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
+            }
         }
         }
 
 
         public static void Remove(int itemID, long itemNum)
         public static void Remove(int itemID, long itemNum)
@@ -139,12 +138,45 @@ namespace GFGGame
             return 0;
             return 0;
         }
         }
 
 
+        public static int GetItemType(int itemId)
+        {
+            _dataDic.TryGetValue(itemId, out var value);
+            if(value != null)
+            {
+                return value.itemType;
+            }
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
+            return itemCfg.itemType;
+        }
+
+        public static int GetItemSubType(int itemId)
+        {
+            _dataDic.TryGetValue(itemId, out var value);
+            if (value != null)
+            {
+                return value.subType;
+            }
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
+            return itemCfg.subType;
+        }
+
+        public static int GetItemRarity(int itemId)
+        {
+            _dataDic.TryGetValue(itemId, out var value);
+            if (value != null)
+            {
+                return value.rarity;
+            }
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
+            return itemCfg.rarity;
+        }
+
         public static void InitServerData(List<ItemInfoProto> items)
         public static void InitServerData(List<ItemInfoProto> items)
         {
         {
             _dataDic.Clear();
             _dataDic.Clear();
             foreach (ItemInfoProto roleItem in items)
             foreach (ItemInfoProto roleItem in items)
             {
             {
-                Add(roleItem.ConfigId, roleItem.Count);
+                Add(roleItem);
             }
             }
         }
         }
 
 

+ 10 - 9
GameClient/Assets/Game/HotUpdate/Data/PhotographDataManager.cs

@@ -38,32 +38,33 @@ namespace GFGGame
             listBorderData.Clear();
             listBorderData.Clear();
             listEffectData.Clear();
             listEffectData.Clear();
         }
         }
-        public void Add(int itemID)
+        public void Add(ItemInfoProto itemInfoProto)
         {
         {
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
-            if (itemCfg.itemType == ConstItemType.DRESS_UP)
+            //游戏初始化禁止使用ItemCfg
+            var itemID = itemInfoProto.ConfigId;
+            if (itemInfoProto.Type == ConstItemType.DRESS_UP)
             {
             {
-                if (itemCfg.subType == ConstDressUpItemType.BEI_JING)
+                if (itemInfoProto.SubType == ConstDressUpItemType.BEI_JING)
                 {
                 {
                     if (listBgData.IndexOf(itemID) < 0) listBgData.Add(itemID);
                     if (listBgData.IndexOf(itemID) < 0) listBgData.Add(itemID);
                 }
                 }
-                else if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemID, false))
+                else if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneType(itemInfoProto, false))
                 {
                 {
                     if (listSceneData.IndexOf(itemID) < 0) listSceneData.Add(itemID);
                     if (listSceneData.IndexOf(itemID) < 0) listSceneData.Add(itemID);
                 }
                 }
             }
             }
-            else if (itemCfg.itemType == ConstItemType.PHOTOGRAPH)
+            else if (itemInfoProto.Type == ConstItemType.PHOTOGRAPH)
             {
             {
-                if (itemCfg.subType == ConstItemSubType.PHOTOGRAPH_NPC)
+                if (itemInfoProto.SubType == ConstItemSubType.PHOTOGRAPH_NPC)
                 {
                 {
                     if (listNpcData.IndexOf(itemID) < 0) listNpcData.Add(itemID);
                     if (listNpcData.IndexOf(itemID) < 0) listNpcData.Add(itemID);
                 }
                 }
-                else if (itemCfg.subType == ConstItemSubType.PHOTOGRAPH_BOREDR)
+                else if (itemInfoProto.SubType == ConstItemSubType.PHOTOGRAPH_BOREDR)
                 {
                 {
                     if (listBorderData.IndexOf(ConstItemID.BORDERID) < 0) listBorderData.Insert(0, ConstItemID.BORDERID);
                     if (listBorderData.IndexOf(ConstItemID.BORDERID) < 0) listBorderData.Insert(0, ConstItemID.BORDERID);
                     if (listBorderData.IndexOf(itemID) < 0) listBorderData.Add(itemID);
                     if (listBorderData.IndexOf(itemID) < 0) listBorderData.Add(itemID);
                 }
                 }
-                else if (itemCfg.subType == ConstItemSubType.PHOTOGRAPH_EFFECT)
+                else if (itemInfoProto.SubType == ConstItemSubType.PHOTOGRAPH_EFFECT)
                 {
                 {
                     if (listEffectData.IndexOf(ConstItemID.EFFECTID) < 0) listEffectData.Insert(0, ConstItemID.EFFECTID);
                     if (listEffectData.IndexOf(ConstItemID.EFFECTID) < 0) listEffectData.Insert(0, ConstItemID.EFFECTID);
                     if (listEffectData.IndexOf(itemID) < 0) listEffectData.Add(itemID);
                     if (listEffectData.IndexOf(itemID) < 0) listEffectData.Add(itemID);

+ 8 - 7
GameClient/Assets/Game/HotUpdate/Data/RoleInfoManager.cs

@@ -34,17 +34,18 @@ namespace GFGGame
             }
             }
         }
         }
 
 
-        public void Add(int itemId)
+        public void Add(ItemInfoProto itemInfoProto)
         {
         {
-            ItemCfg cfg = ItemCfgArray.Instance.GetCfg(itemId);
-            if (cfg.subType == 0)
+            var itemId = itemInfoProto.ConfigId;
+            //游戏初始化禁止使用ItemCfg
+            if (itemInfoProto.SubType == 0)
             {
             {
                 if (_headDatas.IndexOf(itemId) < 0)
                 if (_headDatas.IndexOf(itemId) < 0)
                 {
                 {
                     _headDatas.Add(itemId);
                     _headDatas.Add(itemId);
                 }
                 }
             }
             }
-            else if (cfg.subType == 1)
+            else if (itemInfoProto.SubType == 1)
             {
             {
                 if (_headBorderDatas.IndexOf(itemId) < 0)
                 if (_headBorderDatas.IndexOf(itemId) < 0)
                 {
                 {
@@ -86,12 +87,12 @@ namespace GFGGame
 
 
         public void AddNew(int itemId)
         public void AddNew(int itemId)
         {
         {
-            ItemCfg cfg = ItemCfgArray.Instance.GetCfg(itemId);
-            if (cfg.subType == 0)
+            int subType = ItemDataManager.GetItemSubType(itemId);
+            if (subType == 0)
             {
             {
                 if (_newHeadDatas.IndexOf(itemId) < 0) _newHeadDatas.Add(itemId);
                 if (_newHeadDatas.IndexOf(itemId) < 0) _newHeadDatas.Add(itemId);
             }
             }
-            else if (cfg.subType == 1)
+            else if (subType == 1)
             {
             {
                 if (_newHeadBorderDatas.IndexOf(itemId) < 0) _newHeadBorderDatas.Add(itemId);
                 if (_newHeadBorderDatas.IndexOf(itemId) < 0) _newHeadBorderDatas.Add(itemId);
             }
             }

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Data/VO/ItemData.cs

@@ -7,6 +7,9 @@ namespace GFGGame
         public int id;
         public int id;
         public long num;
         public long num;
         public bool isOnceBonus;
         public bool isOnceBonus;
+        public int itemType;
+        public int subType;
+        public int rarity;
 
 
         private Dictionary<int, int> AttributesDic = new Dictionary<int, int>();
         private Dictionary<int, int> AttributesDic = new Dictionary<int, int>();
 
 

+ 5 - 5
GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Item/M2C_NoticeUnitItemHandler.cs

@@ -11,14 +11,14 @@ namespace ET
     {
     {
         protected override async ETTask Run(Session session, M2C_NoticeUnitItem message)
         protected override async ETTask Run(Session session, M2C_NoticeUnitItem message)
         {
         {
-            var count = ItemDataManager.GetItemNum(message.ConfigId);
-            if(count > message.NewValue)
+            var count = ItemDataManager.GetItemNum(message.Item.ConfigId);
+            if(count > message.Item.Count)
             {
             {
-                ItemDataManager.Remove(message.ConfigId, count - message.NewValue);
+                ItemDataManager.Remove(message.Item.ConfigId, count - message.Item.Count);
             }
             }
-            else if(count < message.NewValue)
+            else if(count < message.Item.Count)
             {
             {
-                ItemDataManager.Add(message.ConfigId, message.NewValue - count);
+                ItemDataManager.Add(message.Item);
             }
             }
             await ETTask.CompletedTask;
             await ETTask.CompletedTask;
         }
         }

+ 4 - 3
GameClient/Assets/Game/HotUpdate/ServerProxy/ItemProxy.cs

@@ -33,12 +33,13 @@ namespace GFGGame
                     }
                     }
                     for (int i = 0; i < response.NewItems.Count; i++)
                     for (int i = 0; i < response.NewItems.Count; i++)
                     {
                     {
-                        ItemCfg cfg = ItemCfgArray.Instance.GetCfg(response.NewItems[i]);
-                        if (cfg.itemType == ConstItemType.DRESS_UP)
+                        var itemId = response.NewItems[i];
+                        var itemType = ItemDataManager.GetItemType(itemId);
+                        if (itemType == ConstItemType.DRESS_UP)
                         {
                         {
                             DressUpMenuItemDataManager.AddNewDressItem(response.NewItems[i]);
                             DressUpMenuItemDataManager.AddNewDressItem(response.NewItems[i]);
                         }
                         }
-                        else if (cfg.itemType == ConstItemType.HEAD)
+                        else if (itemType == ConstItemType.HEAD)
                         {
                         {
                             RoleInfoManager.Instance.AddNew(response.NewItems[i]);
                             RoleInfoManager.Instance.AddNew(response.NewItems[i]);
                         }
                         }