From a67e139eb1cd6edd470655b5812a0630f8c31f78 Mon Sep 17 00:00:00 2001 From: Kei-Luna Date: Mon, 27 Apr 2026 08:02:37 +0900 Subject: [PATCH] Add consumable items --- Common/Data/Excel/SuppliesExcel.cs | 2 ++ GameServer/Game/Inventory/InventoryManager.cs | 26 +++++++++++++++++++ GameServer/Game/Player/PlayerInstance.cs | 4 +++ 3 files changed, 32 insertions(+) diff --git a/Common/Data/Excel/SuppliesExcel.cs b/Common/Data/Excel/SuppliesExcel.cs index 00bb32e..6d7e76c 100644 --- a/Common/Data/Excel/SuppliesExcel.cs +++ b/Common/Data/Excel/SuppliesExcel.cs @@ -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() { diff --git a/GameServer/Game/Inventory/InventoryManager.cs b/GameServer/Game/Inventory/InventoryManager.cs index 584c538..d4040a1 100644 --- a/GameServer/Game/Inventory/InventoryManager.cs +++ b/GameServer/Game/Inventory/InventoryManager.cs @@ -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 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; + } } \ No newline at end of file diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 7048af9..74d511b 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -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())