From c8e7b38d3ffd4abac590d9c8efbe884791b72882 Mon Sep 17 00:00:00 2001 From: BobSong <605277374@qq.com> Date: Wed, 19 Nov 2025 00:08:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=AB=E9=80=9F=E4=BD=BF=E7=94=A8=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Game/Item/PlayerItemContainerComponent.cs | 9 ++- .../Generate/NetworkProtocol/GameMessage.cs | 58 ++++++++++++++ .../Generate/NetworkProtocol/OuterOpcode.cs | 78 +++++++++--------- .../Handler/C2Game_GetItemsRequestHandler.cs | 1 + .../Handler/C2Game_SetSlotRequestHandler.cs | 43 ++++++++++ .../PlayerItemContainerComponentSystem.cs | 79 ++++++------------- Server.sln.DotSettings.user | 3 + Tools/NetworkProtocol/Outer/GameMessage.proto | 16 ++++ 8 files changed, 192 insertions(+), 95 deletions(-) create mode 100644 Hotfix/Game/Handler/C2Game_SetSlotRequestHandler.cs diff --git a/Entity/Game/Item/PlayerItemContainerComponent.cs b/Entity/Game/Item/PlayerItemContainerComponent.cs index 822b213..e4371c5 100644 --- a/Entity/Game/Item/PlayerItemContainerComponent.cs +++ b/Entity/Game/Item/PlayerItemContainerComponent.cs @@ -12,16 +12,21 @@ public sealed class PlayerItemContainerComponent : Entity /// 最大格子数量 /// public int CellCountMax; - + /// /// 容器内的物品 /// [BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)] public Dictionary Items = new Dictionary(); - + /// /// 物品绑定信息 /// [BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)] public Dictionary> Binding = new Dictionary>(); + + /// + /// 快速使用插槽 + /// + public List Slots = new List(9); } \ No newline at end of file diff --git a/Entity/Generate/NetworkProtocol/GameMessage.cs b/Entity/Generate/NetworkProtocol/GameMessage.cs index 0b19d18..8660614 100644 --- a/Entity/Generate/NetworkProtocol/GameMessage.cs +++ b/Entity/Generate/NetworkProtocol/GameMessage.cs @@ -58,6 +58,7 @@ namespace Fantasy ErrorCode = default; Items.Clear(); Rigs.Clear(); + Slots.Clear(); #if FANTASY_NET || FANTASY_UNITY GetScene().MessagePoolComponent.Return(this); #endif @@ -68,6 +69,8 @@ namespace Fantasy [ProtoMember(2)] public List Rigs = new List(); [ProtoMember(3)] + public List Slots = new List(); + [ProtoMember(4)] public uint ErrorCode { get; set; } } /// @@ -204,6 +207,61 @@ namespace Fantasy public uint ErrorCode { get; set; } } /// + /// /////////// ******** 快速使用插槽 *******///////////// + /// + /// + /// 请求设置快速使用 + /// + [ProtoContract] + public partial class C2Game_SetSlotRequest : AMessage, ICustomRouteRequest + { + public static C2Game_SetSlotRequest Create(Scene scene) + { + return scene.MessagePoolComponent.Rent(); + } + public override void Dispose() + { + Index = default; + Id = default; +#if FANTASY_NET || FANTASY_UNITY + GetScene().MessagePoolComponent.Return(this); +#endif + } + [ProtoIgnore] + public Game2C_SetSlotResponse ResponseType { get; set; } + public uint OpCode() { return OuterOpcode.C2Game_SetSlotRequest; } + [ProtoIgnore] + public int RouteType => Fantasy.RouteType.GameRoute; + [ProtoMember(1)] + public int Index { get; set; } + [ProtoMember(2)] + public long Id { get; set; } + } + /// + /// 请求设置快速使用响应 + /// + [ProtoContract] + public partial class Game2C_SetSlotResponse : AMessage, ICustomRouteResponse + { + public static Game2C_SetSlotResponse Create(Scene scene) + { + return scene.MessagePoolComponent.Rent(); + } + public override void Dispose() + { + ErrorCode = default; + Slots.Clear(); +#if FANTASY_NET || FANTASY_UNITY + GetScene().MessagePoolComponent.Return(this); +#endif + } + public uint OpCode() { return OuterOpcode.Game2C_SetSlotResponse; } + [ProtoMember(1)] + public List Slots = new List(); + [ProtoMember(2)] + public uint ErrorCode { get; set; } + } + /// /// /////////// ******** 鱼护 *******///////////// /// /// diff --git a/Entity/Generate/NetworkProtocol/OuterOpcode.cs b/Entity/Generate/NetworkProtocol/OuterOpcode.cs index 8c91717..b33d902 100644 --- a/Entity/Generate/NetworkProtocol/OuterOpcode.cs +++ b/Entity/Generate/NetworkProtocol/OuterOpcode.cs @@ -9,15 +9,17 @@ namespace Fantasy public const uint Game2C_ItemChange = 2147493649; public const uint C2Game_RigChangeRequest = 2281711379; public const uint Game2C_RigChangeResponse = 2415929107; - public const uint C2Game_GetFishsRequest = 2281711380; - public const uint Game2C_GetFishsResponse = 2415929108; + public const uint C2Game_SetSlotRequest = 2281711380; + public const uint Game2C_SetSlotResponse = 2415929108; + public const uint C2Game_GetFishsRequest = 2281711381; + public const uint Game2C_GetFishsResponse = 2415929109; public const uint Game2C_FishChange = 2147493650; - public const uint C2Game_SellFishRequest = 2281711381; - public const uint Game2C_SellFishResponse = 2415929109; - public const uint C2Game_BuyRequest = 2281711382; - public const uint Game2C_BuyResponse = 2415929110; - public const uint C2Map_CreateRoomRequest = 2281711383; - public const uint Map2C_CreateRoomResponse = 2415929111; + public const uint C2Game_SellFishRequest = 2281711382; + public const uint Game2C_SellFishResponse = 2415929110; + public const uint C2Game_BuyRequest = 2281711383; + public const uint Game2C_BuyResponse = 2415929111; + public const uint C2Map_CreateRoomRequest = 2281711384; + public const uint Map2C_CreateRoomResponse = 2415929112; public const uint C2G_ExitRoomRequest = 268445457; public const uint G2C_ExitRoomResponse = 402663185; public const uint C2G_EnterMapRequest = 268445458; @@ -28,8 +30,8 @@ namespace Fantasy public const uint C2G_LoginRequest = 268445460; public const uint G2C_LoginResponse = 402663188; public const uint G2C_RepeatLogin = 134227729; - public const uint C2Game_GetRoleInfoRequest = 2281711384; - public const uint Game2C_GetRoleInfoResponse = 2415929112; + public const uint C2Game_GetRoleInfoRequest = 2281711385; + public const uint Game2C_GetRoleInfoResponse = 2415929113; public const uint Map2C_RoleEnterRoomNotify = 2147493652; public const uint Map2C_RoleExitRoomNotify = 2147493653; public const uint C2Map_RolePropertyChange = 2147493654; @@ -40,37 +42,37 @@ namespace Fantasy public const uint C2Map_Look = 2147493659; public const uint Map2C_MoveNotify = 2147493660; public const uint Map2C_LookeNotify = 2147493661; - public const uint C2S_GetConversationsRequest = 2281711385; - public const uint S2C_GetConversationsResponse = 2415929113; - public const uint C2S_SendMailRequest = 2281711386; - public const uint S2C_SendMailResponse = 2415929114; - public const uint C2S_DeleteMailRequest = 2281711387; - public const uint S2C_DeleteMailResponse = 2415929115; + public const uint C2S_GetConversationsRequest = 2281711386; + public const uint S2C_GetConversationsResponse = 2415929114; + public const uint C2S_SendMailRequest = 2281711387; + public const uint S2C_SendMailResponse = 2415929115; + public const uint C2S_DeleteMailRequest = 2281711388; + public const uint S2C_DeleteMailResponse = 2415929116; public const uint S2C_HaveMail = 2147493662; public const uint S2C_MailState = 2147493663; - public const uint C2S_CreateChannelRequest = 2281711388; - public const uint S2C_CreateChannelResponse = 2415929116; - public const uint C2S_JoinChannelRequest = 2281711389; - public const uint S2C_JoinChannelResponse = 2415929117; - public const uint C2S_SendMessageRequest = 2281711390; - public const uint S2C_SendMessageResponse = 2415929118; + public const uint C2S_CreateChannelRequest = 2281711389; + public const uint S2C_CreateChannelResponse = 2415929117; + public const uint C2S_JoinChannelRequest = 2281711390; + public const uint S2C_JoinChannelResponse = 2415929118; + public const uint C2S_SendMessageRequest = 2281711391; + public const uint S2C_SendMessageResponse = 2415929119; public const uint S2C_Message = 2147493664; - public const uint C2S_CreateClubRequest = 2281711391; - public const uint S2C_CreateClubResponse = 2415929119; - public const uint C2S_GetClubInfoRequest = 2281711392; - public const uint S2C_GetClubInfoResponse = 2415929120; - public const uint C2S_GetMemberListRequest = 2281711393; - public const uint S2C_GetMemberListResponse = 2415929121; - public const uint C2S_GetClubListRequest = 2281711394; - public const uint S2C_GetClubListResponse = 2415929122; - public const uint C2S_JoinClubRequest = 2281711395; - public const uint S2C_JoinClubResponse = 2415929123; - public const uint C2S_LeaveClubRequest = 2281711396; - public const uint S2C_LeaveClubResponse = 2415929124; - public const uint C2S_DissolveClubRequest = 2281711397; - public const uint S2C_DissolveClubResponse = 2415929125; - public const uint C2S_DisposeJoinRequest = 2281711398; - public const uint S2C_DisposeJoinResponse = 2415929126; + public const uint C2S_CreateClubRequest = 2281711392; + public const uint S2C_CreateClubResponse = 2415929120; + public const uint C2S_GetClubInfoRequest = 2281711393; + public const uint S2C_GetClubInfoResponse = 2415929121; + public const uint C2S_GetMemberListRequest = 2281711394; + public const uint S2C_GetMemberListResponse = 2415929122; + public const uint C2S_GetClubListRequest = 2281711395; + public const uint S2C_GetClubListResponse = 2415929123; + public const uint C2S_JoinClubRequest = 2281711396; + public const uint S2C_JoinClubResponse = 2415929124; + public const uint C2S_LeaveClubRequest = 2281711397; + public const uint S2C_LeaveClubResponse = 2415929125; + public const uint C2S_DissolveClubRequest = 2281711398; + public const uint S2C_DissolveClubResponse = 2415929126; + public const uint C2S_DisposeJoinRequest = 2281711399; + public const uint S2C_DisposeJoinResponse = 2415929127; public const uint S2C_ClubChange = 2147493665; } } diff --git a/Hotfix/Game/Handler/C2Game_GetItemsRequestHandler.cs b/Hotfix/Game/Handler/C2Game_GetItemsRequestHandler.cs index 0da7820..cec358b 100644 --- a/Hotfix/Game/Handler/C2Game_GetItemsRequestHandler.cs +++ b/Hotfix/Game/Handler/C2Game_GetItemsRequestHandler.cs @@ -12,6 +12,7 @@ public class C2Game_GetItemsRequestHandler : RouteRPC(); response.Items = itemContainer.GetItemInfos(); response.Rigs = itemContainer.GetRigInfos(); + response.Slots = itemContainer.Slots; await FTask.CompletedTask; } } \ No newline at end of file diff --git a/Hotfix/Game/Handler/C2Game_SetSlotRequestHandler.cs b/Hotfix/Game/Handler/C2Game_SetSlotRequestHandler.cs new file mode 100644 index 0000000..eceb2ee --- /dev/null +++ b/Hotfix/Game/Handler/C2Game_SetSlotRequestHandler.cs @@ -0,0 +1,43 @@ +using Fantasy; +using Fantasy.Async; +using Fantasy.Network.Interface; + +namespace NB.Game; + +public class C2Game_SetSlotRequestHandler : RouteRPC +{ + protected override async FTask Run(Player entity, C2Game_SetSlotRequest request, Game2C_SetSlotResponse response, + Action reply) + { + var itemContainer = entity.GetComponent(); + if (itemContainer == null) + { + response.ErrorCode = ErrorCode.ErrArgs; + return; + } + + if (request.Index < 0 || request.Index >= itemContainer.Slots.Count) + { + response.ErrorCode = ErrorCode.ErrArgs; + return; + } + + if (request.Id > 0) + { + if (!itemContainer.Items.TryGetValue(request.Id, out var item)) + { + response.ErrorCode = ErrorCode.ErrArgs; + return; + } + + itemContainer.Slots[request.Index] = request.Id; + } + else + { + itemContainer.Slots[request.Index] = 0; + } + + await itemContainer.Save(); + response.Slots = itemContainer.Slots; + } +} \ No newline at end of file diff --git a/Hotfix/Game/Item/PlayerItemContainerComponentSystem.cs b/Hotfix/Game/Item/PlayerItemContainerComponentSystem.cs index 111aeff..cc21b48 100644 --- a/Hotfix/Game/Item/PlayerItemContainerComponentSystem.cs +++ b/Hotfix/Game/Item/PlayerItemContainerComponentSystem.cs @@ -21,6 +21,30 @@ public sealed class ItemContainerDestroySystem : DestroySystem +{ + protected override void Awake(PlayerItemContainerComponent self) + { + } +} + +public sealed class ItemContainerAwakeSystem1 : DeserializeSystem +{ + protected override void Deserialize(PlayerItemContainerComponent self) + { + if (self.Slots.Count < 9) + { + var add = 9 - self.Slots.Count; + for (int i = 0; i < add; i++) + { + self.Slots.Add(0); + } + + // _ = self.Save(); + } + } +} + public static class PlayerItemContainerComponentSystem { #region Save @@ -65,47 +89,8 @@ public static class PlayerItemContainerComponentSystem item = null; return false; - // if (!self.ItemsByConfigId.TryGetValue(configId, out var itemList)) - // { - // item = null; - // return; - // } - // - // item = itemList.First(); } - // /// - // /// 通过配置id获取物品 - // /// - // /// - // /// - // /// - // public static void GetItemByConfigId(this ItemContainer self, uint configId, List items) - // { - // if (!self.ItemsByConfigId.TryGetValue(configId, out var itemList)) - // { - // return; - // } - // - // items.AddRange(itemList); - // } - - // /// - // /// 通过类型获取物品 - // /// - // /// - // /// - // /// - // public static void GetItemByType(this ItemContainer self, ItemType type, List items) - // { - // if (!self.ItemsByType.TryGetValue((uint)type, out var itemList)) - // { - // return; - // } - // - // items.AddRange(itemList); - // } - #endregion #region Add @@ -146,22 +131,6 @@ public static class PlayerItemContainerComponentSystem return ret; } - // public static List GetGearInfos(this PlayerItemContainerComponent self) - // { - // List ret = new List(self.FishingRig.Count); - // - // foreach (var (rod, rigs) in self.FishingRig) - // { - // GearInfo gearInfo = new GearInfo(); - // gearInfo.Rod = rod; - // gearInfo.Rigs.AddRange(rigs); - // ret.Add(gearInfo); - // } - // - // return ret; - // } - - public static ItemBindInfo GetRigInfo(this PlayerItemContainerComponent self, long id) { if (self.Binding.TryGetValue(id, out var info)) diff --git a/Server.sln.DotSettings.user b/Server.sln.DotSettings.user index 74d6cfe..95315e4 100644 --- a/Server.sln.DotSettings.user +++ b/Server.sln.DotSettings.user @@ -2,5 +2,8 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded ForceIncluded \ No newline at end of file diff --git a/Tools/NetworkProtocol/Outer/GameMessage.proto b/Tools/NetworkProtocol/Outer/GameMessage.proto index 0c02e10..c4489df 100644 --- a/Tools/NetworkProtocol/Outer/GameMessage.proto +++ b/Tools/NetworkProtocol/Outer/GameMessage.proto @@ -14,6 +14,7 @@ message Game2C_GetItemsResponse // ICustomRouteResponse { repeated ItemInfo Items = 1; //物品信息 repeated ItemBindInfo Rigs = 2; //钓组信息 + repeated int64 Slots = 3; //快速使用插槽 } ///请求使用物品 @@ -53,6 +54,21 @@ message Game2C_RigChangeResponse // ICustomRouteResponse } +////////////// ******** 快速使用插槽 *******///////////// +///请求设置快速使用 +message C2Game_SetSlotRequest // ICustomRouteRequest,Game2C_SetSlotResponse,GameRoute +{ + int32 Index = 1;//插槽位置 + int64 Id = 2;//快速使用物品 +} + +///请求设置快速使用响应 +message Game2C_SetSlotResponse // ICustomRouteResponse +{ + repeated int64 Slots = 1; //快速使用插槽 +} + + ////////////// ******** 鱼护 *******///////////// ///请求鱼护列表