Files
DanhengServer-OpenSource/Common/Data/Excel/MonsterDropExcel.cs
2024-04-04 22:07:29 +08:00

78 lines
2.3 KiB
C#

using EggLink.DanhengServer.Database.Inventory;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Data.Excel
{
[ResourceEntity("MonsterDrop.json")]
public class MonsterDropExcel : ExcelResource
{
public int MonsterTemplateID { get; set; }
public int WorldLevel { get; set; }
public int AvatarExpReward { get; set; }
public List<MonsterDropItem> DisplayItemList { get; set; } = [];
[JsonIgnore]
public List<MonsterDropItem> DropItemList { get; set; } = [];
public override int GetId()
{
return MonsterTemplateID * 10 + WorldLevel;
}
public override void AfterAllDone()
{
foreach (var item in DisplayItemList)
{
GameData.ItemConfigData.TryGetValue(item.ItemID, out var config);
if (config == null) continue;
double mod = config.Rarity switch
{
Enums.ItemRarityEnum.NotNormal => 0.8,
Enums.ItemRarityEnum.Rare => 0.3,
Enums.ItemRarityEnum.VeryRare => 0.125,
Enums.ItemRarityEnum.SuperRare => 0,
_ => 1,
};
double count = WorldLevel + 3;
var maxCount = (int)(count * mod);
var minCount = (int)(count * mod * 0.5);
item.MinCount = minCount;
item.MaxCount = maxCount;
DropItemList.Add(item);
}
GameData.MonsterDropData.Add(GetId(), this);
}
public List<ItemData> CalculateDrop()
{
var result = new List<ItemData>();
foreach (var item in DropItemList)
{
var count = Random.Shared.Next(item.MinCount, item.MaxCount + 1);
result.Add(new ItemData()
{
ItemId = item.ItemID,
Count = count,
});
}
return result;
}
}
public class MonsterDropItem
{
public int ItemID { get; set; }
[JsonIgnore]
public int MinCount { get; set; }
[JsonIgnore]
public int MaxCount { get; set; }
}
}