|
|
@@ -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++;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|