| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 | 
							- using System;
 
- using System.Collections.Generic;
 
- using Excel2Json;
 
- using Fort23.UTool;
 
- using GameLogic.Bag;
 
- using Utility;
 
- namespace GameLogic.Player
 
- {
 
-     public class DropManager : Singleton<DropManager>
 
-     {
 
-         public Random Random = new Random();
 
-         private Map<int, List<DropCountConfig>> dropCountGroupDic = new Map<int, List<DropCountConfig>>();
 
-         private Map<int, int> maxWight = new Map<int, int>();
 
-         public DropManager()
 
-         {
 
-             Random = new Random(System.DateTime.Now.Millisecond);
 
-             DropCountConfig[] allDropCountConfigs = ConfigComponent.Instance.GetAll<DropCountConfig>();
 
-             for (int i = 0; i < allDropCountConfigs.Length; i++)
 
-             {
 
-                 DropCountConfig dropCountConfig = allDropCountConfigs[i];
 
-                 if (dropCountGroupDic.TryGetValue(dropCountConfig.groupID, out var list))
 
-                 {
 
-                     maxWight[dropCountConfig.groupID] += dropCountConfig.weight;
 
-                     list.Add(dropCountConfig);
 
-                 }
 
-                 else
 
-                 {
 
-                     list = new List<DropCountConfig>();
 
-                     list.Add(dropCountConfig);
 
-                     dropCountGroupDic.Add(dropCountConfig.groupID, list);
 
-                     maxWight.Add(dropCountConfig.groupID, dropCountConfig.weight);
 
-                 }
 
-             }
 
-         }
 
-         // public ItemInfo DropEquipment(int equipModelDropID, int qualityDropID, int lvDropID)
 
-         // {
 
-         //     // string[] eqDropData = eqDropDataStr.Split(',');
 
-         //     //
 
-         //     // if (eqDropData.Length != 3)
 
-         //     // {
 
-         //     //     LogTool.Error("装备掉落格式错误:" + eqDropDataStr);
 
-         //     //     return null;
 
-         //     // }
 
-         //
 
-         //     ItemInfo eqItemInfo = PlayerManager.Instance.eqController.BuildEquipment(
 
-         //         equipModelDropID,
 
-         //         qualityDropID,
 
-         //         lvDropID);
 
-         //
 
-         //     return eqItemInfo;
 
-         // }
 
-         // /// <summary>
 
-         // /// 关卡掉装备
 
-         // /// 配的是一个string数组,每个string可以被分成3个掉落ID(装备模版、品质、等级)
 
-         // /// </summary>
 
-         // /// <param name="levelBattleConfig">关卡表</param>
 
-         // /// <param name="monsterType">怪物类型</param>
 
-         // /// <returns></returns>
 
-         // public List<ItemInfo> DropEquipment(LevelBattleConfig levelBattleConfig, int monsterType)
 
-         // {
 
-         //     List<ItemInfo> equipmentList = new List<ItemInfo>();
 
-         //     ItemInfo itemInfo = null;
 
-         //
 
-         //     if (monsterType == 2)
 
-         //     {
 
-         //         for (int i = 0; i < levelBattleConfig.miniMonsterItem.Length; i++)
 
-         //         {
 
-         //             itemInfo = DropEquipment( levelBattleConfig.miniMonsterItem[0], levelBattleConfig.miniMonsterItem[1], levelBattleConfig.miniMonsterItem[2]);
 
-         //             i += 2;
 
-         //         }
 
-         //     }
 
-         //     else if (monsterType == 3)
 
-         //     {
 
-         //         for (int i = 0; i < levelBattleConfig.eliteMonsterItem.Length; i++)
 
-         //         {
 
-         //             itemInfo = DropEquipment( levelBattleConfig.eliteMonsterItem[0], levelBattleConfig.eliteMonsterItem[1], levelBattleConfig.eliteMonsterItem[2]);
 
-         //             i += 2;
 
-         //         }
 
-         //        
 
-         //     }
 
-         //     else if (monsterType == 4)
 
-         //     {
 
-         //         for (int i = 0; i < levelBattleConfig.bossItem.Length; i++)
 
-         //         {
 
-         //             itemInfo = DropEquipment( levelBattleConfig.bossItem[0], levelBattleConfig.bossItem[1], levelBattleConfig.bossItem[2]);
 
-         //             i += 2;
 
-         //         }
 
-         //     }
 
-         //
 
-         //     if (itemInfo != null && itemInfo.eqInfo != null)
 
-         //     {
 
-         //         equipmentList.Add(itemInfo);
 
-         //     }
 
-         //     
 
-         //     BagController.Instance.AddItem(equipmentList);
 
-         //     return equipmentList;
 
-         // }
 
-         public List<ItemInfo> DropItem(int dropId)
 
-         {
 
-             DropConfig dropConfig = ConfigComponent.Instance.Get<DropConfig>(dropId);
 
-             if (dropConfig.ID <= 0)
 
-             {
 
-                 LogTool.Error("没有这个掉落组" + dropId);
 
-                 return null;
 
-             }
 
-             if (dropConfig.dropType == 1)
 
-             {
 
-                 return DropItemFor1(dropConfig);
 
-             }
 
-             else
 
-             {
 
-                 return DropItemFor2(dropConfig);
 
-             }
 
-         }
 
-         private List<ItemInfo> DropItemFor1(DropConfig dropConfig)
 
-         {
 
-             List<ItemInfo> itemInfos = new List<ItemInfo>();
 
-             for (int i = 0; i < dropConfig.dropGroupID.Length; i++)
 
-             {
 
-                 int dropGroupId = dropConfig.dropGroupID[i];
 
-                 DropGroupConfig dropGroupConfig = ConfigComponent.Instance.Get<DropGroupConfig>(dropGroupId);
 
-                 int odd = Random.Next(0, 1000);
 
-                 if (odd <= dropGroupConfig.dropRate)
 
-                 {
 
-                     DropItemConfig(itemInfos, dropGroupConfig.dropItemID);
 
-                 }
 
-             }
 
-             return itemInfos;
 
-         }
 
-         private void DropItemConfig(List<ItemInfo> itemInfos, int[] dropItemID)
 
-         {
 
-             int rIdx = Random.Next(0, dropItemID.Length);
 
-             DropItemConfig dropItemConfig = ConfigComponent.Instance.Get<DropItemConfig>(dropItemID[rIdx]);
 
-             int itemIndex = Random.Next(0, dropItemConfig.itemID.Length);
 
-             int c = 0;
 
-             if (dropItemConfig.dropCountGoupID > 0)
 
-             {
 
-                 DropCountConfig dropCountConfig = GetCountBl(dropItemConfig.dropCountGoupID);
 
-                 c = (dropItemConfig.dropMaxV * dropCountConfig.proportion) / 100;
 
-             }
 
-             else
 
-             {
 
-                 c = Random.Next(dropItemConfig.dropMinV, dropItemConfig.dropMaxV + 1);
 
-             }
 
-             ItemInfo itemInfo = null;
 
-             if (c < 0)
 
-             {
 
-                 itemInfo = DropResourceLevel(dropItemConfig.itemID[itemIndex], c);
 
-             }
 
-             else
 
-             {
 
-                 itemInfo = new ItemInfo(dropItemConfig.itemID[itemIndex], c);
 
-             }
 
-             itemInfos.Add(itemInfo);
 
-             // for (int j = 0; j < dropItemConfig.itemID.Length; j++)
 
-             // {
 
-             //     int c = 0;
 
-             //     if (dropItemConfig.dropCountGoupID > 0)
 
-             //     {
 
-             //         DropCountConfig dropCountConfig = GetCountBl(dropItemConfig.dropCountGoupID);
 
-             //         c = (dropItemConfig.dropMaxV * dropCountConfig.proportion) / 100;
 
-             //     }
 
-             //     else
 
-             //     {
 
-             //         c = Random.Next(dropItemConfig.dropMinV, dropItemConfig.dropMaxV + 1);
 
-             //     }
 
-             //
 
-             //
 
-             //     ItemInfo itemInfo = null;
 
-             //
 
-             //
 
-             //     if (c < 0)
 
-             //     {
 
-             //         itemInfo = DropResourceLevel(dropItemConfig.itemID[j], c);
 
-             //     }
 
-             //     else
 
-             //     {
 
-             //         itemInfo = new ItemInfo(dropItemConfig.itemID[j], c);
 
-             //     }
 
-             //
 
-             //
 
-             //     itemInfos.Add(itemInfo);
 
-             // }
 
-         }
 
-         private DropCountConfig GetCountBl(int dropCountGroupID)
 
-         {
 
-             if (dropCountGroupDic.TryGetValue(dropCountGroupID, out var dropCountGroupConfig))
 
-             {
 
-                 int wight = maxWight[dropCountGroupID];
 
-                 int currWight = Random.Next(0, wight);
 
-                 int addWidght = 0;
 
-                 for (int i = 0; i < dropCountGroupConfig.Count; i++)
 
-                 {
 
-                     DropCountConfig dropCountConfig = dropCountGroupConfig[i];
 
-                     addWidght += dropCountConfig.weight;
 
-                     if (currWight <= addWidght)
 
-                     {
 
-                         return dropCountConfig;
 
-                     }
 
-                 }
 
-             }
 
-             LogTool.Error("没有掉落的数量" + dropCountGroupID);
 
-             return default;
 
-         }
 
-         private List<ItemInfo> DropItemFor2(DropConfig dropConfig)
 
-         {
 
-             List<ItemInfo> itemInfos = new List<ItemInfo>();
 
-             int allRate = 0;
 
-             for (int i = 0; i < dropConfig.dropGroupID.Length; i++)
 
-             {
 
-                 int dropGroupId = dropConfig.dropGroupID[i];
 
-                 DropGroupConfig dropGroupConfig = ConfigComponent.Instance.Get<DropGroupConfig>(dropGroupId);
 
-                 allRate += dropGroupConfig.dropRate;
 
-             }
 
-             int currWight = Random.Next(0, allRate);
 
-             int addWidght = 0;
 
-             for (int i = 0; i < dropConfig.dropGroupID.Length; i++)
 
-             {
 
-                 int dropGroupId = dropConfig.dropGroupID[i];
 
-                 DropGroupConfig dropGroupConfig = ConfigComponent.Instance.Get<DropGroupConfig>(dropGroupId);
 
-                 addWidght += dropGroupConfig.dropRate;
 
-                 if (currWight <= addWidght)
 
-                 {
 
-                     DropItemConfig(itemInfos, dropGroupConfig.dropItemID);
 
-                     return itemInfos;
 
-                 }
 
-             }
 
-             return itemInfos;
 
-         }
 
-         public List<ItemInfo> Drop(int itemID, int count)
 
-         {
 
-             List<ItemInfo> itemInfos = new List<ItemInfo>();
 
-             if (count < 0)
 
-             {
 
-                 itemInfos.Add(DropResourceLevel(itemID, count));
 
-             }
 
-             else
 
-             {
 
-                 DropConfig dropConfig = ConfigComponent.Instance.Get<DropConfig>(itemID);
 
-                 if (dropConfig.dropType == 3)
 
-                 {
 
-                     ItemInfo itemInfo = new ItemInfo(dropConfig.dropGroupID[0], count);
 
-                     itemInfos.Add(itemInfo);
 
-                 }
 
-                 else
 
-                 {
 
-                     List<ItemInfo> items = DropManager.Instance.DropItem(itemID);
 
-                     itemInfos.AddRange(items);
 
-                 }
 
-             }
 
-             return itemInfos;
 
-         }
 
-         public ItemInfo DropResourceLevel(int itemID, int count)
 
-         {
 
-             ResourceLevelConfig resourceLevelConfig = ConfigComponent.Instance.Get<ResourceLevelConfig>(PlayerManager.Instance.myHero.powerUpConfig.ID);
 
-             ItemInfo itemInfo = null;
 
-             float c = Math.Abs(count / (float)1000);
 
-             switch (itemID)
 
-             {
 
-                 case 1001:
 
-                     itemInfo = new ItemInfo(1001, (int)(resourceLevelConfig.value1 * c));
 
-                     break;
 
-                 case 1002:
 
-                     itemInfo = new ItemInfo(1002, (int)(resourceLevelConfig.value2 * c));
 
-                     break;
 
-                 case 1003:
 
-                     itemInfo = new ItemInfo(1003, (int)(resourceLevelConfig.value3 * c));
 
-                     break;
 
-                 case 1004:
 
-                     itemInfo = new ItemInfo(1004, (int)(resourceLevelConfig.value4 * c));
 
-                     break;
 
-                 case 1005:
 
-                     itemInfo = new ItemInfo(1005, (int)(resourceLevelConfig.value5 * c));
 
-                     break;
 
-                 case 1006:
 
-                     itemInfo = new ItemInfo(1006, (int)(resourceLevelConfig.value6 * c));
 
-                     break;
 
-             }
 
-             return itemInfo;
 
-         }
 
-     }
 
- }
 
 
  |