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
141 lines
4.7 KiB
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;
|
|
}
|
|
}
|
|
}
|