Browse Source

重构了一下ItemInfo,修复了装备持久化得bug

liao 5 months ago
parent
commit
ad3ad4231b

+ 26 - 27
Assets/Scripts/GameLogic/Bag/BagController.cs

@@ -127,15 +127,35 @@ namespace GameLogic.Bag
             ItemInfo item = GetItemInfo(itemId);
             return AddItem(item, count);
         }
-
+        
+        /// <summary>
+        /// 添加道具,最后都走这里
+        /// </summary>
+        /// <param name="item"></param>
+        /// <param name="count"></param>
+        /// <returns></returns>
+        private bool AddItem(ItemInfo item, long count)
+        {
+            if (item.config.ID <= 0 && string.IsNullOrEmpty(item.guid))
+            {
+                return false;
+            }
+            item.count += count;
+            EventManager.Instance.Dispatch(CustomEventType.ItemUpdate, new ItemUpdateData() {ItemInfo = item});
+            
+            AccountFileInfo.Instance.SaveItemData(item);
+            return true;
+        }
+        
         /// <summary>
         /// 添加装备道具
         /// </summary>
         /// <param name="item"></param>
         public void AddEquipmentItem(ItemInfo item)
         {
+            long count = item.count.Value;
             ItemInfo eqItemInfo = GetItemInfoWithGuid(item);
-            AddItem(eqItemInfo, item.count.Value);
+            AddItem(eqItemInfo, count);
         }
         
         public ItemInfo GetItemInfoWithGuid(ItemInfo itemInfo)
@@ -151,36 +171,15 @@ namespace GameLogic.Bag
 
             if (!string.IsNullOrEmpty(itemInfo.guid))
             {
+                //这里要设成0是因为,装备已经掉出来了,有了数量,第一次进背包时,先把数量去掉(否则会掉一个得2个)
+                //接下来会加回去,看后续代码。
+                itemInfo.count.Value = 0;
                 m_bagList.Add(itemInfo);
             }
             return itemInfo;
         }
         
         
-        /// <summary>
-        /// 添加道具,最后都走这里
-        /// </summary>
-        /// <param name="item"></param>
-        /// <param name="count"></param>
-        /// <returns></returns>
-        private bool AddItem(ItemInfo item, long count)
-        {
-            if (item.config.ID <= 0 && string.IsNullOrEmpty(item.guid))
-            {
-                return false;
-            }
-
-            // if (!string.IsNullOrEmpty(item.guid))
-            // {
-            //     
-            // }
-            
-            item.count += count;
-            EventManager.Instance.Dispatch(CustomEventType.ItemUpdate, new ItemUpdateData() {ItemInfo = item});
-            AccountFileInfo.Instance.SaveItemData(item);
-            return true;
-        }
-        
         /// <summary>
         /// 扣除道具,最后都这里
         /// </summary>
@@ -222,7 +221,7 @@ namespace GameLogic.Bag
             for (int i = 0; i < m_bagList.Count; i++)
             {
                 ItemInfo item = m_bagList[i];
-                if (item.ID == itemId)
+                if (item.itemID == itemId)
                 {
                     return item;
                 }

+ 15 - 12
Assets/Scripts/GameLogic/Bag/ItemInfo.cs

@@ -7,7 +7,8 @@ namespace GameLogic.Bag
 {
     public class ItemInfo
     {
-        public int ID;
+        public readonly int itemID;
+        // public int itemID;
         public string guid;
         public EncryptionLong count;
 
@@ -20,13 +21,13 @@ namespace GameLogic.Bag
 
         public EquipmentInfo eqInfo;
 
-        public ItemInfo(int ID, long count = 0)
+        public ItemInfo(int itemID, long count = 0)
         {
-            this.ID = ID;
-            guid = ID.ToString();
+            this.itemID = itemID;
+            guid = itemID.ToString();
             this.count = (EncryptionLong)count;
 
-            config = ConfigComponent.Instance.Get<ItemConfig>(ID);
+            config = ConfigComponent.Instance.Get<ItemConfig>(itemID);
         }
 
         public ItemInfo(DropItemConfig dropItemConfig)
@@ -36,20 +37,22 @@ namespace GameLogic.Bag
 
         public ItemInfo(AccountFileInfo.ItemData itemData)
         {
-            ID = itemData.itemId;
+            itemID = itemData.itemId;
             count = (EncryptionLong)itemData.itemCount;
-            config = ConfigComponent.Instance.Get<ItemConfig>(ID);
+            config = ConfigComponent.Instance.Get<ItemConfig>(itemID);
             guid = itemData.guid;
         }
 
         public AccountFileInfo.ItemData ToItemData()
         {
-            return new AccountFileInfo.ItemData()
+            AccountFileInfo.ItemData itemData = new AccountFileInfo.ItemData(itemID, count.Value, guid);
+
+            if (eqInfo != null)
             {
-                itemId = ID,
-                itemCount = count.Value,
-                guid = guid
-            };
+                itemData.eqData = eqInfo.ToData();
+            }
+            
+            return itemData;
         }
     }
 }

+ 2 - 2
Assets/Scripts/GameLogic/Equipment/EquipmentInfo.cs

@@ -107,8 +107,8 @@ namespace GameLogic.Equipment
         {
             AccountFileInfo.EqData eqData = new AccountFileInfo.EqData
             {
-                guid = guid,
-                count = count,
+                // guid = guid,
+                // count = count,
                 itemConfigID = itemConfig.ID,
                 level = level,
                 quality = quality,

+ 27 - 18
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -29,7 +29,7 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         /// <summary>
         /// 装备列表
         /// </summary>
-        public List<EqData> EqListData = new List<EqData>();
+        // public List<EqData> EqListData = new List<EqData>();
 
         /// <summary>
         /// 关卡进度
@@ -147,6 +147,9 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
                 return;
             }
         }
+        
+        playerData.ItemListData.Add(itemInfo.ToItemData());
+        SavePlayerData();
     }
 
     public void SaveEqGUID()
@@ -192,23 +195,11 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
     /// </summary>
     public void ClearInitPlayerData()
     {
-        ItemData coin = new ItemData()
-        {
-            itemId = GlobalParam.Item_Coin_ID,
-            itemCount = 0,
-        };
+        ItemData coin = new ItemData(GlobalParam.Item_Coin_ID);
 
-        ItemData diamond = new ItemData()
-        {
-            itemId = GlobalParam.Item_Diamond_ID,
-            itemCount = 0,
-        };
+        ItemData diamond = new ItemData(GlobalParam.Item_Diamond_ID);
 
-        ItemData heroExp = new ItemData()
-        {
-            itemId = GlobalParam.Item_HeroExp_ID,
-            itemCount = 0,
-        };
+        ItemData heroExp = new ItemData(GlobalParam.Item_HeroExp_ID);
 
         playerData.ItemListData.Add(coin);
         playerData.ItemListData.Add(diamond);
@@ -281,6 +272,24 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         public int itemId;
         public long itemCount;
         public string guid;
+
+        public EqData eqData;
+
+        public ItemData(int itemId, long itemCount = 0, string guid = "")
+        {
+            this.itemId = itemId;
+            this.itemCount = itemCount;
+            if (string.IsNullOrEmpty(guid))
+            {
+                this.guid = itemId.ToString();
+            }
+            else
+            {
+                this.guid = guid;
+            }
+
+            // eqData = null;
+        }
     }
     
     /// <summary>
@@ -289,8 +298,8 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
     [System.Serializable]
     public class EqData
     {
-        public string guid;
-        public int count;
+        // public string guid;
+        // public int count;
         public int itemConfigID;
         public int level;
         public int quality;

+ 3 - 3
Assets/Scripts/GameUI/UI/MainUIPanel.cs

@@ -98,16 +98,16 @@ namespace Fort23.Mono
         private void OnItemUpdate(IEventData e)
         {
             ItemUpdateData data = e as ItemUpdateData;
-            if (data.ItemInfo.ID == GlobalParam.Item_Coin_ID)
+            if (data.ItemInfo.itemID == GlobalParam.Item_Coin_ID)
             {
                 txtCoin.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Coin_ID).count.Value.ToStringEx();
             }
-            else if (data.ItemInfo.ID == GlobalParam.Item_Diamond_ID)
+            else if (data.ItemInfo.itemID == GlobalParam.Item_Diamond_ID)
             {
                 txtDiamond.text = BagController.Instance.GetItemInfo(GlobalParam.Item_Diamond_ID).count.Value
                     .ToStringEx();
             }
-            else if (data.ItemInfo.ID == GlobalParam.Item_HeroExp_ID)
+            else if (data.ItemInfo.itemID == GlobalParam.Item_HeroExp_ID)
             {
                 txtHeroExp.text = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value
                     .ToStringEx();