瀏覽代碼

优化抽卡

DBJ 1 天之前
父節點
當前提交
77238dfe44
共有 1 個文件被更改,包括 109 次插入74 次删除
  1. 109 74
      Assets/Scripts/GameLogic/Player/SummonManager.cs

+ 109 - 74
Assets/Scripts/GameLogic/Player/SummonManager.cs

@@ -98,6 +98,8 @@ namespace GameLogic.Player
                         }
 
 #endif
+
+                        await TimerComponent.Instance.WaitAsync(1000);
                     }
                     else
                     {
@@ -105,7 +107,8 @@ namespace GameLogic.Player
                         if (PlayerManager.Instance.BagController.IsEnough(openBoxConfig.CostItemID,
                                 openBoxConfig.oneConsume) || openBoxConfig.CostItemID == 1007)
                         {
-                            PlayerManager.Instance.BagController.DeductItem(openBoxConfig.CostItemID,openBoxConfig.oneConsume);
+                            PlayerManager.Instance.BagController.DeductItem(openBoxConfig.CostItemID,
+                                openBoxConfig.oneConsume);
                         }
                         else
                         {
@@ -173,7 +176,8 @@ namespace GameLogic.Player
                         if (PlayerManager.Instance.BagController.IsEnough(openBoxConfig.CostItemID,
                                 openBoxConfig.tenConsume) || openBoxConfig.CostItemID == 1007)
                         {
-                            PlayerManager.Instance.BagController.DeductItem(openBoxConfig.CostItemID,openBoxConfig.tenConsume);
+                            PlayerManager.Instance.BagController.DeductItem(openBoxConfig.CostItemID,
+                                openBoxConfig.tenConsume);
                         }
                         else
                         {
@@ -202,111 +206,142 @@ namespace GameLogic.Player
                     summonData.tenPayCount++;
                 }
             }
-
+            
             AccountFileInfo.Instance.SavePlayerData();
             return allIitem;
         }
 
         public List<ItemInfo> Summon(AccountFileInfo.SummonData summonData, int count)
         {
-            List<ItemInfo> allIitem = new List<ItemInfo>();
+            List<ItemInfo> allItem = new List<ItemInfo>();
             OpenBoxConfig openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(summonData.id);
 
-            bool isBoadi2 = false;
-            //找到保底池子所有道具
-            List<int> baodiItems = new List<int>();
-            DropConfig dropConfig = ConfigComponent.Instance.Get<DropConfig>(openBoxConfig.reward2);
-            for (var i = 0; i < dropConfig.dropGroupID.Length; i++)
-            {
-                DropGroupConfig dropGroupConfig =
-                    ConfigComponent.Instance.Get<DropGroupConfig>(dropConfig.dropGroupID[i]);
-                for (var i1 = 0; i1 < dropGroupConfig.dropItemID.Length; i1++)
-                {
-                    DropItemConfig dropItemConfig =
-                        ConfigComponent.Instance.Get<DropItemConfig>(dropGroupConfig.dropItemID[i1]);
-                    for (var i2 = 0; i2 < dropItemConfig.itemID.Length; i2++)
-                    {
-                        baodiItems.Add(dropItemConfig.itemID[i2]);
-                    }
-                }
-            }
+            // 预计算保底物品集合(性能优化)
+            HashSet<int> baodiItemSet = CalculateBaodiItems(openBoxConfig.reward2);
 
             int index = 0;
 
             for (int i = 0; i < count; i++)
             {
-                isBoadi2 = false;
-
-                //十连保底1 每10次十连必出这个池子
+                // 十连保底1
                 if (summonData.baodiCount1 >= 9)
                 {
-                    List<ItemInfo> addItem = DropManager.Instance.DropItem(openBoxConfig.reward1);
-                    PlayerManager.Instance.BagController.AddItem(addItem);
-
-                    allIitem.AddRange(addItem);
-                    summonData.baodiCount1 = 0;
-                    summonData.baodiCount2++;
-
-                    foreach (var baodiItem in baodiItems)
-                    {
-                        //除了保底2池子里的道具直接重置保底2
-                        if (addItem.FirstOrDefault(i => i.itemID == baodiItem) != null)
-                        {
-                            summonData.baodiCount2 = 0;
-                            break;
-                        }
-                    }
-
+                    var addItem = ProcessBaodi1(summonData, openBoxConfig, baodiItemSet);
+                    allItem.AddRange(addItem);
                     continue;
                 }
 
-                //十连保底2 每reward2para1次十连必出这个池子
+                // 十连保底2
                 if (summonData.baodiCount2 >= openBoxConfig.reward2para1)
                 {
-                    List<ItemInfo> addItem1 = DropManager.Instance.DropItem(openBoxConfig.reward2);
-                    PlayerManager.Instance.BagController.AddItem(addItem1);
-                    summonData.baodiCount2 = 0;
+                    var addItem = ProcessBaodi2(summonData, openBoxConfig);
+                    allItem.AddRange(addItem);
                     continue;
                 }
 
-                List<ItemInfo> addItem2;
-                if (count == 1)
-                {
-                    addItem2 = DropManager.Instance.DropItem(
-                        openBoxConfig.reward[Random.Range(0, openBoxConfig.reward.Length)]);
-                    PlayerManager.Instance.BagController.AddItem(addItem2);
-                    allIitem.AddRange(addItem2);
-                    summonData.baodiCount1++;
-                }
-                else
-                {
-                    addItem2 = DropManager.Instance.DropItem(openBoxConfig.reward[index]);
-                    PlayerManager.Instance.BagController.AddItem(addItem2);
-                    allIitem.AddRange(addItem2);
-                    summonData.baodiCount1++;
-                    index++;
-                }
+                // 正常抽卡
+                var normalItems = ProcessNormalSummon(summonData, openBoxConfig, count, ref index);
+                allItem.AddRange(normalItems);
+
+                // 检查是否触发保底2重置
+                CheckBaodi2Reset(summonData, normalItems, baodiItemSet);
+            }
 
+            PlayerManager.Instance.BagController.AddItem(allItem);
 
-                foreach (var baodiItem in baodiItems)
+
+            AccountFileInfo.Instance.SavePlayerData();
+            return allItem;
+        }
+
+        // 计算保底物品集合
+        private HashSet<int> CalculateBaodiItems(int rewardId)
+        {
+            HashSet<int> baodiSet = new HashSet<int>();
+            DropConfig dropConfig = ConfigComponent.Instance.Get<DropConfig>(rewardId);
+
+            foreach (int groupId in dropConfig.dropGroupID)
+            {
+                DropGroupConfig dropGroupConfig = ConfigComponent.Instance.Get<DropGroupConfig>(groupId);
+                foreach (int itemId in dropGroupConfig.dropItemID)
                 {
-                    //除了保底2池子里的道具直接重置保底2
-                    if (addItem2.FirstOrDefault(i => i.itemID == baodiItem) != null)
+                    DropItemConfig dropItemConfig = ConfigComponent.Instance.Get<DropItemConfig>(itemId);
+                    foreach (int item in dropItemConfig.itemID)
                     {
-                        summonData.baodiCount2 = 0;
-                        isBoadi2 = true;
-                        break;
+                        baodiSet.Add(item);
                     }
                 }
+            }
 
-                if (!isBoadi2)
-                {
-                    summonData.baodiCount2++;
-                }
+            return baodiSet;
+        }
+
+        // 处理十连保底1
+        private List<ItemInfo> ProcessBaodi1(AccountFileInfo.SummonData summonData, OpenBoxConfig config,
+            HashSet<int> baodiSet)
+        {
+            var addItem = DropManager.Instance.DropItem(config.reward1);
+
+            // AccountFileInfo.Instance.SavePlayerData();
+            summonData.baodiCount1 = 0;
+            summonData.baodiCount2++;
+
+            // 检查保底2重置
+            if (addItem.Any(i => baodiSet.Contains(i.itemID)))
+            {
+                summonData.baodiCount2 = 0;
             }
 
+            return addItem;
+        }
+
+        //处理十连保底2
+        private List<ItemInfo> ProcessBaodi2(AccountFileInfo.SummonData summonData, OpenBoxConfig config)
+        {
+            var addItem = DropManager.Instance.DropItem(config.reward2);
+            // PlayerManager.Instance.BagController.AddItem(addItem);
+            summonData.baodiCount2 = 0;
             AccountFileInfo.Instance.SavePlayerData();
-            return allIitem;
+            return addItem;
+        }
+
+        // 处理正常抽卡
+        private List<ItemInfo> ProcessNormalSummon(AccountFileInfo.SummonData summonData, OpenBoxConfig config,
+            int count, ref int index)
+        {
+            List<ItemInfo> addItem;
+
+            if (count == 1)
+            {
+                int randomIndex = Random.Range(0, config.reward.Length);
+                addItem = DropManager.Instance.DropItem(config.reward[randomIndex]);
+            }
+            else
+            {
+                int poolIndex = index % config.reward.Length;
+                addItem = DropManager.Instance.DropItem(config.reward[poolIndex]);
+                index++;
+            }
+
+            // AccountFileInfo.Instance.SavePlayerData();
+            // PlayerManager.Instance.BagController.AddItem(addItem);
+            summonData.baodiCount1++;
+
+            return addItem;
+        }
+
+        //检查保底2重置
+        private void CheckBaodi2Reset(AccountFileInfo.SummonData summonData, List<ItemInfo> items,
+            HashSet<int> baodiSet)
+        {
+            if (items.Any(i => baodiSet.Contains(i.itemID)))
+            {
+                summonData.baodiCount2 = 0;
+            }
+            else
+            {
+                summonData.baodiCount2++;
+            }
         }