diff --git a/Common/Data/Excel/SupportCardExcel.cs b/Common/Data/Excel/SupportCardExcel.cs new file mode 100644 index 0000000..9ceb53c --- /dev/null +++ b/Common/Data/Excel/SupportCardExcel.cs @@ -0,0 +1,18 @@ +namespace MikuSB.Data.Excel; + +[ResourceEntity("support_card.json")] +public class SupportCardExcel : ExcelResource +{ + public uint Genre { get; set; } + public uint Detail { get; set; } + public uint Particular { get; set; } + public uint Level { get; set; } + public uint Icon { get; set; } + + public override uint GetId() => Icon; + + public override void Loaded() + { + GameData.SupportCardData.Add(this); + } +} diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs index 9db7771..45cf34c 100644 --- a/Common/Data/GameData.cs +++ b/Common/Data/GameData.cs @@ -18,6 +18,7 @@ public static class GameData public static Dictionary Rogue3DDifficultData { get; private set; } = []; public static Dictionary SpineData { get; private set; } = []; public static Dictionary NodeConditionData { get; private set; } = []; + public static List SupportCardData { get; private set; } = []; } public static class GameResourceTemplateId diff --git a/GameServer/Game/Inventory/InventoryManager.cs b/GameServer/Game/Inventory/InventoryManager.cs index aac8d72..28d21c2 100644 --- a/GameServer/Game/Inventory/InventoryManager.cs +++ b/GameServer/Game/Inventory/InventoryManager.cs @@ -110,6 +110,26 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) return arInfo; } + public async ValueTask AddSupportCardItem(uint detail, uint particular, uint level = 1, bool sendPacket = true) + { + const ItemTypeEnum genre = ItemTypeEnum.TYPE_SUPPORT; + var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level); + if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null; + + var info = new BaseGameItemInfo + { + TemplateId = templateId, + UniqueId = InventoryData.NextUniqueUid++, + ItemType = genre, + ItemCount = 1 + }; + InventoryData.Items[info.UniqueId] = info; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([info])); + + return info; + } + public async ValueTask AddManifestationItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true) { if (genre != ItemTypeEnum.TYPE_MANIFESTATION) return null; diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 1d4d224..a848ef6 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -66,6 +66,10 @@ public class PlayerInstance(PlayerGameData data) { await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level, sendPacket:false); } + foreach (var sc in GameData.SupportCardData) + { + await InventoryManager.AddSupportCardItem(sc.Detail, sc.Particular, sc.Level, sendPacket: false); + } foreach (var supplies in GameData.AllSuppliesData) { await InventoryManager.AddSuppliesItem(supplies, 90000, false);