You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
4.7 KiB

1 month ago
using System.Collections.Generic;
using ProtoCSStruct;
using System;
namespace Sog
{
public static class DropSvc
{
//public static List<TypeIDValueString> GetDropUniq(string dropId)
//{
// var list = GetDrop(dropId, 1);
// if (list is { Count: > 1 })
// {
// list = MergeDrop(list);
// }
// return list;
//}
//public static List<TypeIDValueString> 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<TypeIDValueString> GetDrop(string dropID, int index)
//{
// var list = new List<TypeIDValueString>();
// 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<TypeIDValueString> MergeDrop(List<TypeIDValueString> dropList)
{
var merge = new List<TypeIDValueString>();
foreach (var one in dropList)
{
GenericUtils.Merge(merge, one.Type, one.Id.GetString(), one.Value);
}
return merge;
}
}
}