Add consumable items

This commit is contained in:
Kei-Luna
2026-04-27 08:02:37 +09:00
parent 4ee9fd6908
commit a67e139eb1
3 changed files with 32 additions and 0 deletions

View File

@@ -13,10 +13,12 @@ public class SuppliesExcel : ExcelResource
[JsonProperty("Color")] public JToken? ColorRaw { get; set; }
[JsonProperty("ProvideExp")] public JToken? ProvideExpRaw { get; set; }
[JsonProperty("ConsumeGold")] public JToken? ConsumeGoldRaw { get; set; }
[JsonProperty("GMnum")] public JToken? GMnumRaw { get; set; }
[JsonIgnore] public int Color => ReadInt(ColorRaw);
[JsonIgnore] public uint ProvideExp => ReadUInt(ProvideExpRaw);
[JsonIgnore] public uint ConsumeGold => ReadUInt(ConsumeGoldRaw);
[JsonIgnore] public uint GMnum => ReadUInt(GMnumRaw);
public override uint GetId()
{

View File

@@ -1,4 +1,5 @@
using MikuSB.Data;
using MikuSB.Data.Excel;
using MikuSB.Database;
using MikuSB.Database.Inventory;
using MikuSB.Enums.Item;
@@ -136,4 +137,29 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
return InventoryData.Items.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
public async ValueTask<BaseGameItemInfo?> AddSuppliesItem(SuppliesExcel suppliesData, uint count)
{
var templateId = GameResourceTemplateId.FromGdpl(suppliesData.Genre, suppliesData.Detail, suppliesData.Particular, suppliesData.Level);
uint maxCount = suppliesData.GMnum > 0 ? suppliesData.GMnum : 99999;
uint giveCount = Math.Min(count, maxCount);
var existing = InventoryData.Items.Values.FirstOrDefault(x => x.TemplateId == templateId);
if (existing != null)
{
existing.ItemCount = Math.Min(existing.ItemCount + giveCount, maxCount);
return existing;
}
var itemInfo = new BaseGameItemInfo
{
TemplateId = templateId,
UniqueId = InventoryData.NextUniqueUid++,
Flag = ItemFlagEnum.FLAG_READED,
ItemCount = giveCount
};
InventoryData.Items[itemInfo.UniqueId] = itemInfo;
return itemInfo;
}
}

View File

@@ -69,6 +69,10 @@ public class PlayerInstance(PlayerGameData data)
{
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level);
}
foreach (var supplies in GameData.SuppliesData.Values)
{
await InventoryManager.AddSuppliesItem(supplies, 90000);
}
var selected = CharacterManager.CharacterData.Characters
.OrderBy(_ => Guid.NewGuid())