diff --git a/Common/Database/Character/CharacterData.cs b/Common/Database/Character/CharacterData.cs index caa4914..6e314d0 100644 --- a/Common/Database/Character/CharacterData.cs +++ b/Common/Database/Character/CharacterData.cs @@ -22,7 +22,7 @@ public class CharacterInfo public int Trust { get; set; } public uint WeaponUniqueId { get; set; } public uint SkinId { get; set; } - public ItemFlagEnum Flag { get; set; } + public ItemFlagEnum Flag { get; set; } = ItemFlagEnum.FLAG_READED; public uint Expiration { get; set; } [SugarColumn(IsJson = true)] public List UnlockedSkin { get; set; } = []; [SugarColumn(IsJson = true)] public List Spines { get; set; } = []; diff --git a/Common/Database/Inventory/InventoryData.cs b/Common/Database/Inventory/InventoryData.cs index 58476e5..5d81d0e 100644 --- a/Common/Database/Inventory/InventoryData.cs +++ b/Common/Database/Inventory/InventoryData.cs @@ -24,7 +24,8 @@ public class BaseGameItemInfo public uint UniqueId { get; set; } public ulong TemplateId { get; set; } public uint ItemCount { get; set; } - public ItemFlagEnum Flag { get; set; } + public ItemTypeEnum ItemType { get; set; } + public ItemFlagEnum Flag { get; set; } = ItemFlagEnum.FLAG_READED; public virtual Item ToProto() { diff --git a/Common/Internationalization/Message/LanguageCHS.cs b/Common/Internationalization/Message/LanguageCHS.cs index 5f2205a..adf2c19 100644 --- a/Common/Internationalization/Message/LanguageCHS.cs +++ b/Common/Internationalization/Message/LanguageCHS.cs @@ -120,6 +120,7 @@ public class CommandTextCHS public NoticeTextCHS Notice { get; } = new(); public HelpTextCHS Help { get; } = new(); public GirlTextCHS Girl { get; } = new(); + public GiveAllTextCHS GiveAll { get; } = new(); } #endregion @@ -224,6 +225,18 @@ public class GirlTextCHS public string UpdateLevel => "已将 {1} 个角色等级设置为 {0}!"; } +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextCHS +{ + public string Desc => "给玩家所有物品\n" + + "备注: -1 代表全部"; + public string Usage => "用法: /giveall weapon -p -l"; + public string WeaponNotFound => "找不到武器!"; + public string WeaponAdded => "已添加 {0} 把武器给玩家!"; +} + #endregion #endregion \ No newline at end of file diff --git a/Common/Internationalization/Message/LanguageCHT.cs b/Common/Internationalization/Message/LanguageCHT.cs index 2723cf6..2851943 100644 --- a/Common/Internationalization/Message/LanguageCHT.cs +++ b/Common/Internationalization/Message/LanguageCHT.cs @@ -120,6 +120,7 @@ public class CommandTextCHT public NoticeTextCHT Notice { get; } = new(); public HelpTextCHT Help { get; } = new(); public GirlTextCHT Girl { get; } = new(); + public GiveAllTextCHT GiveAll { get; } = new(); } #endregion @@ -224,6 +225,18 @@ public class GirlTextCHT public string UpdateLevel => "已將 {1} 個角色等級設為 {0}!"; } +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextCHT +{ + public string Desc => "給玩家所有物品\n" + + "備註: -1 代表全部"; + public string Usage => "用法: /giveall weapon -p -l"; + public string WeaponNotFound => "找不到武器!"; + public string WeaponAdded => "已添加 {0} 把武器給玩家!"; +} + #endregion #endregion \ No newline at end of file diff --git a/Common/Internationalization/Message/LanguageEN.cs b/Common/Internationalization/Message/LanguageEN.cs index 25e3c7a..8dcffd9 100644 --- a/Common/Internationalization/Message/LanguageEN.cs +++ b/Common/Internationalization/Message/LanguageEN.cs @@ -82,6 +82,7 @@ public class CommandTextEN public NoticeTextEN Notice { get; } = new(); public HelpTextEN Help { get; } = new(); public GirlTextEN Girl { get; } = new(); + public GiveAllTextEN GiveAll { get; } = new(); } #endregion @@ -193,6 +194,18 @@ public class GirlTextEN public string UpdateLevel => "Set {1} character(s) to level {0}!"; } +/// +/// path: Game.Command.GiveAll +/// +public class GiveAllTextEN +{ + public string Desc => "Give all items to player\n"+ + "Note: -1 means all"; + public string Usage => "Usage: /giveall weapon -p -l"; + public string WeaponNotFound => "Weapon not found!"; + public string WeaponAdded => "Added {0} weapon(s) to player!"; +} + #endregion #endregion \ No newline at end of file diff --git a/GameServer/Command/Commands/CommandGirl.cs b/GameServer/Command/Commands/CommandGirl.cs index 32b719c..3341ecf 100644 --- a/GameServer/Command/Commands/CommandGirl.cs +++ b/GameServer/Command/Commands/CommandGirl.cs @@ -14,7 +14,6 @@ public class CommandGirl : ICommands public async ValueTask AddGirl(CommandArg arg) { if (!await arg.CheckOnlineTarget()) return; - if (!await arg.CheckArgCnt(1)) return; if (await arg.GetOption('p') is not int particular) return; if (await arg.GetOption('l') is not int level) return; if (await arg.GetOption('s') is not int star) return; @@ -29,7 +28,7 @@ public class CommandGirl : ICommands // add all foreach (var config in GameData.CardData.Values) { - var character = await arg.Target!.Player!.CharacterManager! + var character = await player.CharacterManager! .AddCharacter((ItemTypeEnum)config.Genre, config.Detail, config.Particular, config.Level,(uint)star,false); if (character != null) girls.Add(character); } diff --git a/GameServer/Command/Commands/CommandGiveAll.cs b/GameServer/Command/Commands/CommandGiveAll.cs new file mode 100644 index 0000000..50cb0fd --- /dev/null +++ b/GameServer/Command/Commands/CommandGiveAll.cs @@ -0,0 +1,47 @@ +using MikuSB.Data; +using MikuSB.Database.Inventory; +using MikuSB.Enums.Item; +using MikuSB.Enums.Player; +using MikuSB.GameServer.Server.Packet.Send.Misc; +using MikuSB.Internationalization; + +namespace MikuSB.GameServer.Command.Commands; + +[CommandInfo("giveall", "Game.Command.GiveAll.Desc", "Game.Command.GiveAll.Usage", ["ga"], [PermEnum.Admin, PermEnum.Support])] +public class CommandGiveAll : ICommands +{ + [CommandMethod("weapon")] + public async ValueTask GiveAllWeapon(CommandArg arg) + { + if (!await arg.CheckOnlineTarget()) return; + if (await arg.GetOption('p') is not int particular) return; + if (await arg.GetOption('l') is not int level) return; + + var detail = arg.GetInt(0); + level = Math.Clamp(level, 1, 80); + var player = arg.Target!.Player!; + List weapons = []; + if (detail == -1) + { + // add all + foreach (var config in GameData.WeaponData.Values) + { + var weapon = await player.InventoryManager! + .AddWeaponItem((ItemTypeEnum)config.Genre,config.Detail,config.Particular,config.Level,(uint)level,false); + if (weapon != null) weapons.Add(weapon); + } + } + else + { + var weapon = await player.InventoryManager!.AddWeaponItem(ItemTypeEnum.TYPE_WEAPON, (uint)detail,(uint)particular,1,(uint)level,false); + if (weapon == null) + { + await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.WeaponNotFound")); + return; + } + weapons.Add(weapon); + } + if (weapons.Count > 0) await player.SendPacket(new PacketNtfCallScript(weapons)); + await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.WeaponAdded", weapons.Count.ToString())); + } +} \ No newline at end of file diff --git a/GameServer/Game/Character/CharacterManager.cs b/GameServer/Game/Character/CharacterManager.cs index f65de86..03e3760 100644 --- a/GameServer/Game/Character/CharacterManager.cs +++ b/GameServer/Game/Character/CharacterManager.cs @@ -24,15 +24,14 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player) TemplateId = characterId, Level = level, Break = star, - Timestamp = Extensions.GetUnixSec(), - Flag = ItemFlagEnum.FLAG_READED + Timestamp = Extensions.GetUnixSec() }; - var weaponInfo = await Player.InventoryManager!.AddWeaponItem((ItemTypeEnum)CharacterExcel.DefaultWeaponGPDL[0], CharacterExcel.DefaultWeaponGPDL[1], CharacterExcel.DefaultWeaponGPDL[2], (uint)CharacterExcel.DefaultWeaponGPDL[3]); + var weaponInfo = await Player.InventoryManager!.AddWeaponItem((ItemTypeEnum)CharacterExcel.DefaultWeaponGPDL[0], CharacterExcel.DefaultWeaponGPDL[1], CharacterExcel.DefaultWeaponGPDL[2], CharacterExcel.DefaultWeaponGPDL[3],sendPacket:false); if (weaponInfo != null) character.WeaponUniqueId = weaponInfo.UniqueId; - var skinInfo = Player.InventoryManager!.GetSkinItemGDPL(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level) - ?? await Player.InventoryManager!.AddSkinItem(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level); + var skinInfo = Player.InventoryManager!.GetNormalItemGDPL(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level) + ?? await Player.InventoryManager!.AddSkinItem(ItemTypeEnum.TYPE_CARD_SKIN, detail, particular, level, false); if (skinInfo != null) character.SkinId = skinInfo.UniqueId; if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([character])); @@ -75,7 +74,8 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player) (ItemTypeEnum)cardData.DefaultWeaponGPDL[0], cardData.DefaultWeaponGPDL[1], cardData.DefaultWeaponGPDL[2], - cardData.DefaultWeaponGPDL[3]); + cardData.DefaultWeaponGPDL[3], + sendPacket:false); if (weapon != null) { character.WeaponUniqueId = weapon.UniqueId; diff --git a/GameServer/Game/Inventory/InventoryManager.cs b/GameServer/Game/Inventory/InventoryManager.cs index d31aa2f..f6ba086 100644 --- a/GameServer/Game/Inventory/InventoryManager.cs +++ b/GameServer/Game/Inventory/InventoryManager.cs @@ -4,6 +4,7 @@ using MikuSB.Database; using MikuSB.Database.Inventory; using MikuSB.Enums.Item; using MikuSB.GameServer.Game.Player; +using MikuSB.GameServer.Server.Packet.Send.Misc; namespace MikuSB.GameServer.Game.Inventory; @@ -11,7 +12,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) { public InventoryData InventoryData { get; } = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); - public async ValueTask AddWeaponItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1) + public async ValueTask AddWeaponItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, uint weaponLevel = 1, bool sendPacket = true) { if (genre != ItemTypeEnum.TYPE_WEAPON) return null; var weaponData = GameData.WeaponData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level); @@ -22,13 +23,15 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) { TemplateId = templateId, UniqueId = InventoryData.NextUniqueUid++, - Level = level, + Level = weaponLevel, Break = weaponData.InitBreak, - Flag = ItemFlagEnum.FLAG_READED, + ItemType = ItemTypeEnum.TYPE_WEAPON, ItemCount = 1 }; InventoryData.Weapons[weaponInfo.UniqueId] = weaponInfo; + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([weaponInfo])); + return weaponInfo; } @@ -48,43 +51,28 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) return InventoryData.Weapons.Values.FirstOrDefault(x => x.TemplateId == templateId); } - public async ValueTask AddSkinItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1) + public async ValueTask AddSkinItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true) { if (genre != ItemTypeEnum.TYPE_CARD_SKIN) return null; var skinData = GameData.CardSkinData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level); if (skinData == null) return null; var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level); - var skinInfo = new GameSkinInfo + var skinInfo = new BaseGameItemInfo { TemplateId = templateId, UniqueId = InventoryData.NextUniqueUid++, - Level = level, - Flag = ItemFlagEnum.FLAG_READED, + ItemType = ItemTypeEnum.TYPE_CARD_SKIN, ItemCount = 1 }; - InventoryData.Skins[skinInfo.UniqueId] = skinInfo; + InventoryData.Items[skinInfo.UniqueId] = skinInfo; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([skinInfo])); return skinInfo; } - public GameSkinInfo? GetSkinItem(uint uniqueId) - { - return InventoryData.Skins.GetValueOrDefault(uniqueId); - } - - public GameSkinInfo? GetSkinItemByTemplateId(ulong templateId) - { - return InventoryData.Skins.Values.FirstOrDefault(x => x.TemplateId == templateId); - } - - public GameSkinInfo? GetSkinItemGDPL(ItemTypeEnum genre, uint detail, uint particular, uint level) - { - var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level); - return InventoryData.Skins.Values.FirstOrDefault(x => x.TemplateId == templateId); - } - - public async ValueTask AddArItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1) + public async ValueTask AddArItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true) { if (genre != ItemTypeEnum.TYPE_AR) return null; var arData = GameData.ArItemData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level); @@ -96,14 +84,17 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) { TemplateId = templateId, UniqueId = InventoryData.NextUniqueUid++, - Flag = ItemFlagEnum.FLAG_READED, + ItemType = ItemTypeEnum.TYPE_AR, ItemCount = 1 }; InventoryData.Items[arInfo.UniqueId] = arInfo; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([arInfo])); + return arInfo; } - public async ValueTask AddManifestationItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1) + public async ValueTask AddManifestationItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true) { if (genre != ItemTypeEnum.TYPE_MANIFESTATION) return null; var manifestData = GameData.ManifestationData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level); @@ -115,10 +106,13 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) { TemplateId = templateId, UniqueId = InventoryData.NextUniqueUid++, - Flag = ItemFlagEnum.FLAG_READED, + ItemType = ItemTypeEnum.TYPE_MANIFESTATION, ItemCount = 1 }; InventoryData.Items[manifestInfo.UniqueId] = manifestInfo; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([manifestInfo])); + return manifestInfo; } @@ -141,7 +135,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) private static uint GetSuppliesMaxCount(SuppliesExcel suppliesData) => suppliesData.Genre == 5 && suppliesData.Detail == 4 ? 999999u : 99999u; - public async ValueTask AddSuppliesItem(SuppliesExcel suppliesData, uint count) + public async ValueTask AddSuppliesItem(SuppliesExcel suppliesData, uint count, bool sendPacket = true) { var templateId = GameResourceTemplateId.FromGdpl(suppliesData.Genre, suppliesData.Detail, suppliesData.Particular, suppliesData.Level); @@ -159,10 +153,13 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player) { TemplateId = templateId, UniqueId = InventoryData.NextUniqueUid++, - Flag = ItemFlagEnum.FLAG_READED, + ItemType = ItemTypeEnum.TYPE_SUPPLIES, ItemCount = giveCount }; InventoryData.Items[itemInfo.UniqueId] = itemInfo; + + if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([itemInfo])); + return itemInfo; } } \ No newline at end of file diff --git a/GameServer/Game/Lineup/LineupManager.cs b/GameServer/Game/Lineup/LineupManager.cs index 92c081f..ddd42fc 100644 --- a/GameServer/Game/Lineup/LineupManager.cs +++ b/GameServer/Game/Lineup/LineupManager.cs @@ -1,6 +1,7 @@ using MikuSB.Database; -using MikuSB.GameServer.Game.Player; using MikuSB.Database.Lineup; +using MikuSB.GameServer.Game.Player; +using MikuSB.GameServer.Server.Packet.Send.Lineup; namespace MikuSB.GameServer.Game.Lineup; @@ -8,7 +9,7 @@ public class LineupManager(PlayerInstance player) : BasePlayerManager(player) { public LineupData LineupData { get; } = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); - public async ValueTask UpdateLineup(int lineupId, uint member1, uint member2, uint member3) + public async ValueTask UpdateLineup(int lineupId, uint member1, uint member2, uint member3, bool sendPacket = true) { if (!LineupData.LineupInfo.TryGetValue(lineupId, out var formation)) { @@ -20,10 +21,12 @@ public class LineupManager(PlayerInstance player) : BasePlayerManager(player) LineupData.LineupInfo[lineupId] = formation; } - formation.Member1 = member1; formation.Member2 = member2; formation.Member3 = member3; + + if (sendPacket) await Player.SendPacket(new PacketNtfSyncLineup(formation)); + return formation; } } \ No newline at end of file diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 2964cf0..1d4d224 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -52,19 +52,15 @@ public class PlayerInstance(PlayerGameData data) await InitialPlayerManager(); foreach (var skinCard in GameData.CardSkinData.Values) { - await InventoryManager.AddSkinItem((ItemTypeEnum)skinCard.Genre, skinCard.Detail, skinCard.Particular, skinCard.Level); - } - foreach (var weapon in GameData.WeaponData.Values) - { - await InventoryManager.AddWeaponItem((ItemTypeEnum)weapon.Genre, weapon.Detail, weapon.Particular, weapon.Level); + await InventoryManager.AddSkinItem((ItemTypeEnum)skinCard.Genre, skinCard.Detail, skinCard.Particular, skinCard.Level, false); } foreach (var ar in GameData.ArItemData.Values) { - await InventoryManager.AddArItem((ItemTypeEnum)ar.Genre, ar.Detail, ar.Particular, ar.Level); + await InventoryManager.AddArItem((ItemTypeEnum)ar.Genre, ar.Detail, ar.Particular, ar.Level, false); } foreach (var manifest in GameData.ManifestationData.Values) { - await InventoryManager.AddManifestationItem((ItemTypeEnum)manifest.Genre, manifest.Detail, manifest.Particular, manifest.Level); + await InventoryManager.AddManifestationItem((ItemTypeEnum)manifest.Genre, manifest.Detail, manifest.Particular, manifest.Level, false); } foreach (var card in GameData.CardData.Values) { @@ -72,7 +68,7 @@ public class PlayerInstance(PlayerGameData data) } foreach (var supplies in GameData.AllSuppliesData) { - await InventoryManager.AddSuppliesItem(supplies, 90000); + await InventoryManager.AddSuppliesItem(supplies, 90000, false); } var selected = CharacterManager.CharacterData.Characters @@ -81,7 +77,7 @@ public class PlayerInstance(PlayerGameData data) .Select(x => x.Guid) .ToList(); - await LineupManager.UpdateLineup(1, selected[0], selected[1], selected[2]); + await LineupManager.UpdateLineup(1, selected[0], selected[1], selected[2],false); var bootstrapAttrs = BuildLobbyBootstrapAttrs(); var existingAttrs = Data.Attrs @@ -149,7 +145,7 @@ public class PlayerInstance(PlayerGameData data) { foreach (var supplies in GameData.AllSuppliesData) { - await InventoryManager.AddSuppliesItem(supplies, 90000); + await InventoryManager.AddSuppliesItem(supplies, 90000, false); } } @@ -241,12 +237,7 @@ public class PlayerInstance(PlayerGameData data) Solutions = { LineupManager.LineupData.LineupInfo.Values.Select(x => x.ToProto()) }, }; - foreach (var item in InventoryManager.InventoryData.Items.Values) - if ((item.TemplateId & 0xFFFF) != 5) proto.Items.Add(item.ToProto()); - foreach (var weapon in InventoryManager.InventoryData.Weapons.Values) proto.Items.Add(weapon.ToProto()); - foreach (var skin in InventoryManager.InventoryData.Skins.Values) proto.Items.Add(skin.ToProto()); foreach (var chara in CharacterManager.CharacterData.Characters) proto.Items.Add(chara.ToProto()); - foreach (var x in Data.Attrs) { uint gid = x.Gid; diff --git a/GameServer/Server/CallGS/Handlers/Lineup/Lineup_Update.cs b/GameServer/Server/CallGS/Handlers/Lineup/Lineup_Update.cs index f2f44d7..b71fbbd 100644 --- a/GameServer/Server/CallGS/Handlers/Lineup/Lineup_Update.cs +++ b/GameServer/Server/CallGS/Handlers/Lineup/Lineup_Update.cs @@ -22,12 +22,6 @@ public class Lineup_Update : ICallGSHandler await CallGSRouter.SendScript(connection, "UpdateLineup", "{}"); return; } - - var rsp = new NtfSyncLineup - { - Lineup = formation.ToProto() - }; - await connection.SendPacket(CmdIds.NtfSyncLineup, rsp); await CallGSRouter.SendScript(connection, "UpdateLineup", "{}"); } } diff --git a/GameServer/Server/Packet/Recv/Login/HandlerReqLogin.cs b/GameServer/Server/Packet/Recv/Login/HandlerReqLogin.cs index efa7370..fef7dac 100644 --- a/GameServer/Server/Packet/Recv/Login/HandlerReqLogin.cs +++ b/GameServer/Server/Packet/Recv/Login/HandlerReqLogin.cs @@ -6,6 +6,7 @@ using MikuSB.GameServer.Game.Player; using MikuSB.GameServer.Server.CallGS; using MikuSB.GameServer.Server.Packet.Send.Friend; using MikuSB.GameServer.Server.Packet.Send.Login; +using MikuSB.GameServer.Server.Packet.Send.Misc; using MikuSB.Proto; using MikuSB.TcpSharp; using MikuSB.Util; @@ -49,13 +50,8 @@ public class HandlerReqLogin : Handler connection.Player.Connection = connection; await connection.SendPacket(new PacketRspLogin(connection.Player!)); - var supplySync = new MikuSB.Proto.NtfSyncPlayer(); - foreach (var item in connection.Player.GetSupplyItems()) - supplySync.Items.Add(item.ToProto()); - if (supplySync.Items.Count > 0) - await CallGSRouter.SendScript(connection, "", "{}", supplySync); - await connection.Player.OnHeartBeat(); await connection.SendPacket(new PacketNtfUpdateFriend(connection.Player!)); + await connection.SendPacket(new PacketNtfCallScript(connection.Player!.InventoryManager.InventoryData)); } } diff --git a/GameServer/Server/Packet/Send/Lineup/PacketNtfSyncLineup.cs b/GameServer/Server/Packet/Send/Lineup/PacketNtfSyncLineup.cs new file mode 100644 index 0000000..6fef98b --- /dev/null +++ b/GameServer/Server/Packet/Send/Lineup/PacketNtfSyncLineup.cs @@ -0,0 +1,19 @@ +using MikuSB.Database.Lineup; +using MikuSB.Proto; +using MikuSB.TcpSharp; + +namespace MikuSB.GameServer.Server.Packet.Send.Lineup; + +public class PacketNtfSyncLineup : BasePacket +{ + + public PacketNtfSyncLineup(LineupDataInfo lineup) : base(CmdIds.NtfSyncLineup) + { + var proto = new NtfSyncLineup + { + Lineup = lineup.ToProto() + }; + + SetData(proto); + } +} diff --git a/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs b/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs index 52fac28..2df8a76 100644 --- a/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs +++ b/GameServer/Server/Packet/Send/Misc/PacketNtfCallScript.cs @@ -1,4 +1,6 @@ using MikuSB.Database.Character; +using MikuSB.Database.Inventory; +using MikuSB.GameServer.Game.Inventory; using MikuSB.Proto; using MikuSB.TcpSharp; @@ -6,7 +8,7 @@ namespace MikuSB.GameServer.Server.Packet.Send.Misc; public class PacketNtfCallScript : BasePacket { - public PacketNtfCallScript(List Characters) : base(CmdIds.NtfScript) + public PacketNtfCallScript(List characters) : base(CmdIds.NtfScript) { var proto = new NtfCallScript { @@ -14,10 +16,55 @@ public class PacketNtfCallScript : BasePacket Arg = "{}", ExtraSync = new NtfSyncPlayer { - Items = { Characters.Select(x => x.ToProto()) } + Items = { characters.Select(x => x.ToProto()) } } }; SetData(proto); } + + public PacketNtfCallScript(List weapons) : base(CmdIds.NtfScript) + { + var proto = new NtfCallScript + { + Api = "", + Arg = "{}", + ExtraSync = new NtfSyncPlayer + { + Items = { weapons.Select(x => x.ToProto()) } + } + }; + + SetData(proto); + } + + public PacketNtfCallScript(List items) : base(CmdIds.NtfScript) + { + var proto = new NtfCallScript + { + Api = "", + Arg = "{}", + ExtraSync = new NtfSyncPlayer + { + Items = { items.Select(x => x.ToProto()) } + } + }; + + SetData(proto); + } + + public PacketNtfCallScript(InventoryData inventory) : base(CmdIds.NtfScript) + { + var proto = new NtfCallScript + { + Api = "", + Arg = "{}" + }; + + var extraSync = new NtfSyncPlayer(); + foreach (var item in inventory.Items.Values) if ((item.TemplateId & 0xFFFF) != 5) extraSync.Items.Add(item.ToProto()); + foreach (var weapon in inventory.Weapons.Values) extraSync.Items.Add(weapon.ToProto()); + proto.ExtraSync = extraSync; + SetData(proto); + } }