using System.Collections.Generic; using ProtoCSStruct; using System; namespace Sog { public static class DropSvc { //public static List GetDropUniq(string dropId) //{ // var list = GetDrop(dropId, 1); // if (list is { Count: > 1 }) // { // list = MergeDrop(list); // } // return list; //} //public static List GetDropUniq(int dropId) //{ // var list = GetDrop(dropId.ToString(), 1); // if (list is { Count: > 1 }) // { // list = MergeDrop(list); // } // return list; //} //移除某个随机组 //public static void RemoveDropGroup(int dropId, ref DropRateData dropRateData) //{ // for (var i = 0; i < dropRateData.DropRate.Count; i++) // { // if (dropId != dropRateData.DropRate[i].DropId) continue; // dropRateData.DropRate.RemoveAt(i); // return; // } //} //private static DropRate ReBuildRate(DropDesc dropDesc) //{ // var buBindDropOne = dropDesc.bindDropOne; // var ratePool = new int[dropDesc.totalRate]; // var top = 0; // for (var i = 0; i < buBindDropOne.Length; i++) // { // var bind = buBindDropOne[i]; // for (var j = 0; j < bind.rate; j++) // { // ratePool[top] = i + 1; // top++; // } // } // GenericUtils.Shuffle(new Random(), ratePool); // var rate = new DropRate // { // DropId = dropDesc.id // }; // foreach (var r in ratePool) // { // rate.Rate.Add(r); // } // return rate; //} //private static List GetDrop(string dropID, int index) //{ // var list = new List(); // if (index > 10) // { // TraceLog.Error("DropSvc.GetDrop overflow, index {0} dropid {1}", index, dropID); // return list; // } // DropDesc dropDesc = DropDescMgr.Instance.GetConfig(int.Parse(dropID)); // if (dropDesc == null) // { // TraceLog.Error("DropSvc.GetDrop error, {0} no DropDesc", dropID); // return list; // } // // 掉落次数 // Random rand = new Random(); // int randRate = rand.Next(dropDesc.totalRate) + 1; // for (int i = 0; i < dropDesc.dropCount && randRate > 0; i++) // { // if (randRate <= dropDesc.bindDropOne[i].rate) // { // // [1, 1999]是货币, 道具 // if ((int)DropType.None < dropDesc.bindDropOne[i].wareType // && dropDesc.bindDropOne[i].wareType < (int)DropType.CommDrop) // { // var one = new TypeIDValueString(); // one.Type = dropDesc.bindDropOne[i].wareType; // one.Id.SetString(dropDesc.bindDropOne[i].wareID); // one.Value = dropDesc.bindDropOne[i].num; // list.Add(one); // } // // 2000是新的掉落组 // else if (dropDesc.bindDropOne[i].wareType == (int)DropType.CommDrop) // { // list.AddRange(GetDrop(dropDesc.bindDropOne[i].wareID, index + 1)); // } // else if (dropDesc.bindDropOne[i].wareType == -1) // { // // -1代表空掉落 // } // else // { // // 剩下的情况是配表错误 // TraceLog.Error("DropSvc.GetDrop dropId {0} idx {1} invalid wareType {2}" // , dropID, i + 1, dropDesc.bindDropOne[i].wareType); // } // // 防止策划把概率填成0, 掉落1次就退出 // break; // } // randRate -= dropDesc.bindDropOne[i].rate; // } // return list; //} public static List MergeDrop(List dropList) { var merge = new List(); foreach (var one in dropList) { GenericUtils.Merge(merge, one.Type, one.Id.GetString(), one.Value); } return merge; } } }