From 6baedea1cc94d1ad775eabd7b821de88093a93dc Mon Sep 17 00:00:00 2001 From: alborrajo Date: Sat, 23 Apr 2022 22:33:31 +0200 Subject: [PATCH 1/6] Restored Say chat functionality Sends a message to every player in the server --- Arrowgene.Ddon.GameServer/Chat/ChatManager.cs | 6 ++++-- Arrowgene.Ddon.GameServer/DdonGameServer.cs | 2 +- .../Handler/LobbyLobbyChatMsgHandler.cs | 18 ------------------ 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs b/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs index 23876e39e..a341b9cdb 100644 --- a/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs +++ b/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs @@ -12,9 +12,11 @@ public class ChatManager private readonly List _handler; private readonly GameRouter _router; + private readonly DdonGameServer _server; - public ChatManager(GameRouter router) + public ChatManager(DdonGameServer server, GameRouter router) { + _server = server; _router = router; _handler = new List(); } @@ -68,7 +70,7 @@ private void Deliver(GameClient client, ChatResponse response) switch (response.Type) { case LobbyChatMsgType.Say: - response.Recipients.Add(client); + response.Recipients.AddRange(_server.Clients); break; default: response.Recipients.Add(client); diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index 84344659a..edf60ebb2 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -54,7 +54,7 @@ public DdonGameServer(GameServerSetting setting, IDatabase database, AssetReposi _stages = new Dictionary(); Setting = new GameServerSetting(setting); Router = new GameRouter(); - ChatManager = new ChatManager(Router); + ChatManager = new ChatManager(this, Router); EnemyManager = new EnemyManager(assetRepository, database); S2CStageGetStageListRes stageListPacket = EntitySerializer.Get().Read(GameDump.data_Dump_19); diff --git a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs index 7e4c49083..cdae1a16a 100644 --- a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs @@ -29,24 +29,6 @@ public override void Handle(GameClient client, StructurePacket Date: Sun, 24 Apr 2022 02:02:58 +0200 Subject: [PATCH 2/6] Client disconnect notice --- .../ClientConnectionChangeArgs.cs | 20 ++++++++ Arrowgene.Ddon.GameServer/DdonGameServer.cs | 20 ++++++++ .../Handler/LobbyLobbyJoinHandler.cs | 2 - .../Handler/LobbyLobbyLeaveHandler.cs | 49 +++++++++++++++++++ .../Entity/EntitySerializer.cs | 2 + .../Entity/PacketStructure/C2SLobbyJoinReq.cs | 1 - .../PacketStructure/C2SLobbyLeaveReq.cs | 22 +++++++++ .../PacketStructure/S2CLobbyLeaveRes.cs | 25 ++++++++++ 8 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 Arrowgene.Ddon.GameServer/ClientConnectionChangeArgs.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/LobbyLobbyLeaveHandler.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyLeaveReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyLeaveRes.cs diff --git a/Arrowgene.Ddon.GameServer/ClientConnectionChangeArgs.cs b/Arrowgene.Ddon.GameServer/ClientConnectionChangeArgs.cs new file mode 100644 index 000000000..fed14a311 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/ClientConnectionChangeArgs.cs @@ -0,0 +1,20 @@ +using System; +namespace Arrowgene.Ddon.GameServer +{ + public class ClientConnectionChangeArgs: EventArgs + { + public enum EventType { + CONNECT, + DISCONNECT + } + + public ClientConnectionChangeArgs(EventType eventType, GameClient client) + { + Action = eventType; + Client = client; + } + + public EventType Action; + public GameClient Client; + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index edf60ebb2..46958764d 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -20,6 +20,7 @@ * along with Arrowgene.Ddon.GameServer. If not, see . */ +using System; using System.Collections.Generic; using Arrowgene.Ddon.Database; using Arrowgene.Ddon.GameServer.Chat; @@ -61,6 +62,8 @@ public DdonGameServer(GameServerSetting setting, IDatabase database, AssetReposi StageList = stageListPacket.StageList; } + public event EventHandler ClientConnectionChangeEvent; + public GameServerSetting Setting { get; } public ChatManager ChatManager { get; } public EnemyManager EnemyManager { get; } @@ -86,11 +89,27 @@ public override void Start() protected override void ClientConnected(GameClient client) { client.InitializeChallenge(); + + EventHandler connectionChangeEvent = ClientConnectionChangeEvent; + if (connectionChangeEvent != null) + { + ClientConnectionChangeArgs connectionChangeEventArgs + = new ClientConnectionChangeArgs(ClientConnectionChangeArgs.EventType.CONNECT, client); + connectionChangeEvent(this, connectionChangeEventArgs); + } } protected override void ClientDisconnected(GameClient client) { _clients.Remove(client); + + EventHandler connectionChangeEvent = ClientConnectionChangeEvent; + if (connectionChangeEvent != null) + { + ClientConnectionChangeArgs connectionChangeEventArgs + = new ClientConnectionChangeArgs(ClientConnectionChangeArgs.EventType.DISCONNECT, client); + connectionChangeEvent(this, connectionChangeEventArgs); + } } public override GameClient NewClient(ITcpSocket socket) @@ -194,6 +213,7 @@ private void LoadPacketHandler() AddHandler(new LoadingInfoLoadingGetInfoHandler(this)); AddHandler(new LobbyLobbyJoinHandler(this)); + AddHandler(new LobbyLobbyLeaveHandler(this)); AddHandler(new LobbyLobbyChatMsgHandler(this)); AddHandler(new LobbyLobbyDataMsgHandler(this)); diff --git a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyJoinHandler.cs b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyJoinHandler.cs index 7b57e3564..ce54dc134 100644 --- a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyJoinHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyJoinHandler.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using Arrowgene.Buffers; using Arrowgene.Ddon.GameServer.Dump; using Arrowgene.Ddon.Server; using Arrowgene.Ddon.Server.Network; diff --git a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyLeaveHandler.cs b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyLeaveHandler.cs new file mode 100644 index 000000000..e96696eac --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyLeaveHandler.cs @@ -0,0 +1,49 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Server.Network; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class LobbyLobbyLeaveHandler : StructurePacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(LobbyLobbyLeaveHandler)); + + + public LobbyLobbyLeaveHandler(DdonGameServer server) : base(server) + { + server.ClientConnectionChangeEvent += OnClientConnectionChangeEvent; + } + + // I have no idea on when this gets called, not when exiting the game, thats for sure + public override void Handle(GameClient client, StructurePacket packet) + { + client.Send(new S2CLobbyLeaveRes()); + NotifyDisconnect(client); + } + + private void OnClientConnectionChangeEvent(object sender, ClientConnectionChangeArgs e) + { + if (e.Action == ClientConnectionChangeArgs.EventType.DISCONNECT) + { + NotifyDisconnect(e.Client); + } + } + + private void NotifyDisconnect(GameClient client) + { + // Notice all other users + S2CUserListLeaveNtc ntc = new S2CUserListLeaveNtc(); + ntc.CharacterList.Add(new CDataCommonU32(client.Character.Id)); + foreach (Client otherClient in Server.Clients) + { + if (otherClient != client) + { + otherClient.Send(ntc); + } + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs index 967b92055..c55a9ec61 100644 --- a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs +++ b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs @@ -159,6 +159,7 @@ static EntitySerializer() Create(new C2SJobGetJobChangeListReq.Serializer()); Create(new C2SLobbyChatMsgReq.Serializer()); Create(new C2SLobbyJoinReq.Serializer()); + Create(new C2SLobbyLeaveReq.Serializer()); Create(new C2SLobbyLobbyDataMsgReq.Serializer()); Create(new C2SMandragoraGetMyMandragoraReq.Serializer()); Create(new C2SMyRoomFurnitureListGetReq.Serializer()); @@ -256,6 +257,7 @@ static EntitySerializer() Create(new S2CLobbyChatMsgRes.Serializer()); Create(new S2CLobbyChatMsgNotice.Serializer()); Create(new S2CLobbyJoinRes.Serializer()); + Create(new S2CLobbyLeaveRes.Serializer()); Create(new S2CLobbyLobbyDataMsgNotice.Serializer()); Create(new S2CMandragoraGetMyMandragoraRes.Serializer()); Create(new S2CMyRoomFurnitureListGetRes.Serializer()); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyJoinReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyJoinReq.cs index 233ff5c54..625e8a5aa 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyJoinReq.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyJoinReq.cs @@ -12,7 +12,6 @@ public class C2SLobbyJoinReq : IPacketStructure public class Serializer : PacketEntitySerializer { - public override void Write(IBuffer buffer, C2SLobbyJoinReq obj) { WriteUInt32(buffer, obj.CharacterId); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyLeaveReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyLeaveReq.cs new file mode 100644 index 000000000..a5ab52c05 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SLobbyLeaveReq.cs @@ -0,0 +1,22 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SLobbyLeaveReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_LOBBY_LOBBY_LEAVE_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SLobbyLeaveReq obj) + { + } + + public override C2SLobbyLeaveReq Read(IBuffer buffer) + { + return new C2SLobbyLeaveReq(); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyLeaveRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyLeaveRes.cs new file mode 100644 index 000000000..23426e280 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyLeaveRes.cs @@ -0,0 +1,25 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CLobbyLeaveRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_LOBBY_LOBBY_LEAVE_RES; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CLobbyLeaveRes obj) + { + WriteServerResponse(buffer, obj); + } + + public override S2CLobbyLeaveRes Read(IBuffer buffer) + { + S2CLobbyLeaveRes obj = new S2CLobbyLeaveRes(); + ReadServerResponse(buffer, obj); + return obj; + } + } + } +} \ No newline at end of file From 88d1c27aa41167502b112bb66f273b53ada7a441 Mon Sep 17 00:00:00 2001 From: alborrajo Date: Mon, 25 Apr 2022 00:05:02 +0200 Subject: [PATCH 3/6] Quick chat and emotes window --- Arrowgene.Ddon.GameServer/DdonGameServer.cs | 1 + .../Handler/GpGetValidChatComGroupHandler.cs | 22 ++++++++++ .../Entity/EntitySerializer.cs | 2 + .../C2SGpGetValidChatComGroupReq.cs | 22 ++++++++++ .../S2CGpGetValidChatComGroupRes.cs | 43 +++++++++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 Arrowgene.Ddon.GameServer/Handler/GpGetValidChatComGroupHandler.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SGpGetValidChatComGroupReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CGpGetValidChatComGroupRes.cs diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index 46958764d..66522c121 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -184,6 +184,7 @@ private void LoadPacketHandler() AddHandler(new Gp_28_2_1_Handler(this)); AddHandler(new GpGetUpdateAppCourseBonusFlagHandler(this)); + AddHandler(new GpGetValidChatComGroupHandler(this)); AddHandler(new GroupChatGroupChatGetMemberListHandler(this)); diff --git a/Arrowgene.Ddon.GameServer/Handler/GpGetValidChatComGroupHandler.cs b/Arrowgene.Ddon.GameServer/Handler/GpGetValidChatComGroupHandler.cs new file mode 100644 index 000000000..b4de51ae5 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/GpGetValidChatComGroupHandler.cs @@ -0,0 +1,22 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Server.Network; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Network; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class GpGetValidChatComGroupHandler : StructurePacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(GpGetValidChatComGroupHandler)); + + public GpGetValidChatComGroupHandler(DdonGameServer server) : base(server) + { + } + + public override void Handle(GameClient client, StructurePacket packet) + { + client.Send(new S2CGpGetValidChatComGroupRes()); + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs index c55a9ec61..a143b69ef 100644 --- a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs +++ b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs @@ -143,6 +143,7 @@ static EntitySerializer() Create(new C2SConnectionMoveInServerReq.Serializer()); Create(new C2SConnectionMoveOutServerReq.Serializer()); Create(new C2SContextGetSetContextReq.Serializer()); + Create(new C2SGpGetValidChatComGroupReq.Serializer()); Create(new C2SInnGetStayPriceReq.Serializer()); Create(new C2SInnStayInnReq.Serializer()); Create(new C2SInstanceEnemyKillReq.Serializer()); @@ -232,6 +233,7 @@ static EntitySerializer() Create(new S2CContextGetLobbyPlayerContextNtc.Serializer()); Create(new S2CContextGetSetContextRes.Serializer()); Create(new S2CContextSetContextBaseNotice.Serializer()); + Create(new S2CGpGetValidChatComGroupRes.Serializer()); Create(new S2CInnGetStayPriceRes.Serializer()); Create(new S2CInnStayInnRes.Serializer()); Create(new S2CInstance_13_20_16_Ntc.Serializer()); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SGpGetValidChatComGroupReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SGpGetValidChatComGroupReq.cs new file mode 100644 index 000000000..f77396f9f --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SGpGetValidChatComGroupReq.cs @@ -0,0 +1,22 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SGpGetValidChatComGroupReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_GP_GET_VALID_CHAT_COM_GROUP_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SGpGetValidChatComGroupReq obj) + { + } + + public override C2SGpGetValidChatComGroupReq Read(IBuffer buffer) + { + return new C2SGpGetValidChatComGroupReq(); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CGpGetValidChatComGroupRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CGpGetValidChatComGroupRes.cs new file mode 100644 index 000000000..5135f94a4 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CGpGetValidChatComGroupRes.cs @@ -0,0 +1,43 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CGpGetValidChatComGroupRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_GP_GET_VALID_CHAT_COM_GROUP_RES; + + public S2CGpGetValidChatComGroupRes() + { + Unk0 = 0; + Unk1 = 0; + Unk2 = new CDataCommonU32(); + } + + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public CDataCommonU32 Unk2 { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CGpGetValidChatComGroupRes obj) + { + WriteServerResponse(buffer, obj); + WriteUInt32(buffer, obj.Unk0); + WriteUInt32(buffer, obj.Unk1); + WriteEntity(buffer, obj.Unk2); + } + + public override S2CGpGetValidChatComGroupRes Read(IBuffer buffer) + { + S2CGpGetValidChatComGroupRes packet = new S2CGpGetValidChatComGroupRes(); + ReadServerResponse(buffer, packet); + packet.Unk0 = ReadUInt32(buffer); + packet.Unk1 = ReadUInt32(buffer); + packet.Unk2 = ReadEntity(buffer); + return packet; + } + } + } +} \ No newline at end of file From 32afbedcf1136dd77ea4eb8328a9e56d59981a0b Mon Sep 17 00:00:00 2001 From: alborrajo Date: Mon, 25 Apr 2022 01:01:45 +0200 Subject: [PATCH 4/6] Quick chat --- Arrowgene.Ddon.GameServer/Chat/ChatMessage.cs | 6 ++-- .../Chat/ChatResponse.cs | 6 ++-- Arrowgene.Ddon.GameServer/GameRouter.cs | 2 +- .../Handler/LobbyLobbyChatMsgHandler.cs | 2 +- .../PacketStructure/C2SLobbyChatMsgReq.cs | 20 +++++------ .../PacketStructure/S2CLobbyChatMsgNotice.cs | 36 ++++++------------- 6 files changed, 28 insertions(+), 44 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Chat/ChatMessage.cs b/Arrowgene.Ddon.GameServer/Chat/ChatMessage.cs index 0eda8742a..3e8b90d58 100644 --- a/Arrowgene.Ddon.GameServer/Chat/ChatMessage.cs +++ b/Arrowgene.Ddon.GameServer/Chat/ChatMessage.cs @@ -4,20 +4,20 @@ namespace Arrowgene.Ddon.GameServer.Chat { public class ChatMessage { - public ChatMessage(LobbyChatMsgType messageType, uint unk3, uint unk4, uint unk5, string message) + public ChatMessage(LobbyChatMsgType messageType, byte unk2, uint unk3, uint unk4, string message) { Type = messageType; + Unk2 = unk2; Unk3 = unk3; Unk4 = unk4; - Unk5 = unk5; Message = message; Deliver = true; } public LobbyChatMsgType Type { get; } + public byte Unk2 { get; set; } public uint Unk3 { get; set; } public uint Unk4 { get; set; } - public uint Unk5 { get; set; } public string Message { get; } public bool Deliver { get; set; } } diff --git a/Arrowgene.Ddon.GameServer/Chat/ChatResponse.cs b/Arrowgene.Ddon.GameServer/Chat/ChatResponse.cs index 2a385554c..425805a5d 100644 --- a/Arrowgene.Ddon.GameServer/Chat/ChatResponse.cs +++ b/Arrowgene.Ddon.GameServer/Chat/ChatResponse.cs @@ -37,9 +37,9 @@ public static ChatResponse FromMessage(GameClient client, ChatMessage message) LastName = client.Character.LastName, CharacterId = client.Character.Id, Type = message.Type, + Unk2 = message.Unk2, Unk3 = message.Unk3, Unk4 = message.Unk4, - Unk5 = message.Unk5, Recipients = {client} }; } @@ -49,9 +49,9 @@ public ChatResponse() Recipients = new List(); Deliver = true; Type = LobbyChatMsgType.Say; + Unk2 = 0; Unk3 = 0; Unk4 = 0; - Unk5 = 0; CharacterId = 0; Message = ""; FirstName = ""; @@ -62,9 +62,9 @@ public ChatResponse() public List Recipients { get; } public bool Deliver { get; set; } public LobbyChatMsgType Type { get; set; } + public byte Unk2 { get; set; } public uint Unk3 { get; set; } public uint Unk4 { get; set; } - public uint Unk5 { get; set; } public string Message { get; set; } public uint CharacterId { get; set; } public string FirstName { get; set; } diff --git a/Arrowgene.Ddon.GameServer/GameRouter.cs b/Arrowgene.Ddon.GameServer/GameRouter.cs index d9b7cc4a7..75488bc3d 100644 --- a/Arrowgene.Ddon.GameServer/GameRouter.cs +++ b/Arrowgene.Ddon.GameServer/GameRouter.cs @@ -21,9 +21,9 @@ public void Send(ChatResponse response) { S2CLobbyChatMsgNotice notice = new S2CLobbyChatMsgNotice(); notice.Type = (byte) response.Type; + notice.Unk2 = response.Unk2; notice.Unk3 = response.Unk3; notice.Unk4 = response.Unk4; - notice.Unk5 = response.Unk5; notice.Message = response.Message; notice.CharacterBaseInfo.CharacterId = response.CharacterId; notice.CharacterBaseInfo.CharacterName.FirstName = response.FirstName; diff --git a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs index cdae1a16a..aff98326e 100644 --- a/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/LobbyLobbyChatMsgHandler.cs @@ -23,9 +23,9 @@ public override void Handle(GameClient client, StructurePacket PacketId.C2S_LOBBY_LOBBY_CHAT_MSG_REQ; public LobbyChatMsgType Type { get; set; } - public uint Unk2 { get; set; } // Target ID? - public byte Unk3 { get; set; } + public uint Unk1 { get; set; } // Target ID? + public byte Unk2 { get; set; } + public uint Unk3 { get; set; } public uint Unk4 { get; set; } - public uint Unk5 { get; set; } public string StrMessage { get; set; } public C2SLobbyChatMsgReq() { Type = 0; + Unk1 = 0; Unk2 = 0; Unk3 = 0; Unk4 = 0; - Unk5 = 0; StrMessage = string.Empty; } @@ -30,10 +30,10 @@ public class Serializer : PacketEntitySerializer { public override void Write(IBuffer buffer, C2SLobbyChatMsgReq obj) { WriteByte(buffer, (byte) obj.Type); - WriteUInt32(buffer, obj.Unk2); - WriteByte(buffer, obj.Unk3); + WriteUInt32(buffer, obj.Unk1); + WriteByte(buffer, obj.Unk2); + WriteUInt32(buffer, obj.Unk3); WriteUInt32(buffer, obj.Unk4); - WriteUInt32(buffer, obj.Unk5); WriteMtString(buffer, obj.StrMessage); } @@ -41,10 +41,10 @@ public override C2SLobbyChatMsgReq Read(IBuffer buffer) { C2SLobbyChatMsgReq obj = new C2SLobbyChatMsgReq(); obj.Type = (LobbyChatMsgType) ReadByte(buffer); - obj.Unk2 = ReadUInt32(buffer); - obj.Unk3 = ReadByte(buffer); + obj.Unk1 = ReadUInt32(buffer); + obj.Unk2 = ReadByte(buffer); + obj.Unk3 = ReadUInt32(buffer); obj.Unk4 = ReadUInt32(buffer); - obj.Unk5 = ReadUInt32(buffer); obj.StrMessage = ReadMtString(buffer); return obj; } diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs index fc79f17fa..254f96802 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs @@ -18,7 +18,6 @@ public class S2CLobbyChatMsgNotice : IPacketStructure { public byte Unk2 { get; set; } public uint Unk3 { get; set; } public uint Unk4 { get; set; } - public uint Unk5 { get; set; } public string Message { get; set; } public S2CLobbyChatMsgNotice() { @@ -28,7 +27,6 @@ public S2CLobbyChatMsgNotice() { Unk2 = 0; Unk3 = 0; Unk4 = 0; - Unk5 = 0; Message = string.Empty; } @@ -36,30 +34,16 @@ public class Serializer : PacketEntitySerializer { public override void Write(IBuffer buffer, S2CLobbyChatMsgNotice obj) { - if (obj.Unk3 == 2) - { - uint ui = obj.Unk3; byte b = (byte)ui; - WriteByte(buffer, obj.Type); - WriteUInt32(buffer, obj.Unk1); - WriteUInt32(buffer, obj.CharacterBaseInfo.CharacterId); - WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.FirstName); - WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.LastName); - WriteMtString(buffer, "BSP"); - WriteByte(buffer, b); - WriteUInt32(buffer, obj.Unk4); - WriteUInt32(buffer, obj.Unk5); - WriteMtString(buffer, obj.Message); - } - else - { - WriteByte(buffer, obj.Type); - WriteUInt32(buffer, obj.Unk1); - WriteEntity(buffer, obj.CharacterBaseInfo); - WriteByte(buffer, obj.Unk2); - WriteUInt32(buffer, obj.Unk3); - WriteUInt32(buffer, obj.Unk4); - WriteMtString(buffer, obj.Message); - } + WriteByte(buffer, obj.Type); + WriteUInt32(buffer, obj.Unk1); + WriteUInt32(buffer, obj.CharacterBaseInfo.CharacterId); + WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.FirstName); + WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.LastName); + WriteMtString(buffer, "BSP"); + WriteByte(buffer, obj.Unk2); + WriteUInt32(buffer, obj.Unk3); + WriteUInt32(buffer, obj.Unk4); + WriteMtString(buffer, obj.Message); } public override S2CLobbyChatMsgNotice Read(IBuffer buffer) From 3678bde15ff3dad57a59163ebfe6121c9150bcb4 Mon Sep 17 00:00:00 2001 From: alborrajo Date: Mon, 25 Apr 2022 01:06:12 +0200 Subject: [PATCH 5/6] Avoid sending LobbyChatMsgRes multiple times per request --- Arrowgene.Ddon.GameServer/Chat/ChatManager.cs | 3 ++- .../Entity/PacketStructure/S2CLobbyChatMsgNotice.cs | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs b/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs index a341b9cdb..b42da4767 100644 --- a/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs +++ b/Arrowgene.Ddon.GameServer/Chat/ChatManager.cs @@ -63,6 +63,8 @@ public void Handle(GameClient client, ChatMessage message) Deliver(client, response); } + + client.Send(new S2CLobbyChatMsgRes()); } private void Deliver(GameClient client, ChatResponse response) @@ -77,7 +79,6 @@ private void Deliver(GameClient client, ChatResponse response) break; } - client.Send(new S2CLobbyChatMsgRes()); _router.Send(response); } } diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs index 254f96802..2c4e3c635 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CLobbyChatMsgNotice.cs @@ -36,10 +36,7 @@ public override void Write(IBuffer buffer, S2CLobbyChatMsgNotice obj) { WriteByte(buffer, obj.Type); WriteUInt32(buffer, obj.Unk1); - WriteUInt32(buffer, obj.CharacterBaseInfo.CharacterId); - WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.FirstName); - WriteMtString(buffer, obj.CharacterBaseInfo.CharacterName.LastName); - WriteMtString(buffer, "BSP"); + WriteEntity(buffer, obj.CharacterBaseInfo); WriteByte(buffer, obj.Unk2); WriteUInt32(buffer, obj.Unk3); WriteUInt32(buffer, obj.Unk4); From 8ac9a937ea393591be17878ad4228767ae5768b5 Mon Sep 17 00:00:00 2001 From: alborrajo Date: Tue, 26 Apr 2022 21:33:32 +0200 Subject: [PATCH 6/6] Invite to party --- Arrowgene.Ddon.GameServer/DdonGameServer.cs | 3 + Arrowgene.Ddon.GameServer/GameClient.cs | 4 ++ .../Handler/PartyPartyCreateHandler.cs | 33 +++++++---- .../PartyPartyInviteCharacterHandler.cs | 58 +++++++++++++++++++ .../Handler/PartyPartyInviteEntryHandler.cs | 33 +++++++++++ .../PartyPartyInvitePrepareAcceptHandler.cs | 33 +++++++++++ Arrowgene.Ddon.GameServer/Party.cs | 21 +++++++ .../Entity/EntitySerializer.cs | 14 ++++- .../PacketStructure/C2SPartyPartyCreateReq.cs | 22 +++++++ .../C2SPartyPartyInviteCharacterReq.cs | 33 +++++++++++ .../C2SPartyPartyInviteEntryReq.cs | 22 +++++++ .../C2SPartyPartyInvitePrepareAcceptReq.cs | 22 +++++++ .../PacketStructure/S2CPartyPartyCreateRes.cs | 32 ++++++++++ .../S2CPartyPartyInviteCharacterRes.cs | 33 +++++++++++ .../S2CPartyPartyInviteEntryNtc.cs | 34 +++++++++++ .../S2CPartyPartyInviteEntryRes.cs | 25 ++++++++ .../PacketStructure/S2CPartyPartyInviteNtc.cs | 37 ++++++++++++ .../S2CPartyPartyInvitePrepareAcceptNtc.cs | 29 ++++++++++ .../S2CPartyPartyInvitePrepareAcceptRes.cs | 25 ++++++++ ..._6_8_16_Ntc.cs => S2CPartyPartyJoinNtc.cs} | 14 ++--- .../Entity/Structure/CDataPartyListInfo.cs | 46 +++++++++++++++ .../Entity/Structure/CDataPartyMember.cs | 1 + Arrowgene.Ddon.Shared/Network/PacketId.cs | 16 ++--- 23 files changed, 563 insertions(+), 27 deletions(-) create mode 100644 Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteCharacterHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteEntryHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/PartyPartyInvitePrepareAcceptHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Party.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyCreateReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteCharacterReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteEntryReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInvitePrepareAcceptReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyCreateRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteCharacterRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryNtc.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteNtc.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptNtc.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptRes.cs rename Arrowgene.Ddon.Shared/Entity/PacketStructure/{S2CParty_6_8_16_Ntc.cs => S2CPartyPartyJoinNtc.cs} (75%) create mode 100644 Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyListInfo.cs diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index 66522c121..685cd3bb3 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -239,6 +239,9 @@ private void LoadPacketHandler() AddHandler(new PartnerPawnPawnLikabilityRewardListGetHandler(this)); AddHandler(new PartyPartyCreateHandler(this)); + AddHandler(new PartyPartyInviteCharacterHandler(this)); + AddHandler(new PartyPartyInviteEntryHandler(this)); + AddHandler(new PartyPartyInvitePrepareAcceptHandler(this)); AddHandler(new PawnGetMypawnDataHandler(this)); AddHandler(new PawnGetMyPawnListHandler(this)); diff --git a/Arrowgene.Ddon.GameServer/GameClient.cs b/Arrowgene.Ddon.GameServer/GameClient.cs index 0b004db9f..8b2af2298 100644 --- a/Arrowgene.Ddon.GameServer/GameClient.cs +++ b/Arrowgene.Ddon.GameServer/GameClient.cs @@ -41,5 +41,9 @@ public void UpdateIdentity() public float Y { get; set; } public double Z { get; set; } // --- + + public Party PendingInvitedParty { get; set; } // Maybe its more clean to store this in the handlers ? + public Party Party { get; set; } + } } diff --git a/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs b/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs index 7e7070a36..f01a1c475 100644 --- a/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs @@ -1,39 +1,50 @@ -using Arrowgene.Ddon.GameServer.Dump; +using System.Reflection.Metadata; +using Arrowgene.Ddon.GameServer.Dump; using Arrowgene.Ddon.Server; using Arrowgene.Ddon.Server.Network; using Arrowgene.Ddon.Shared.Entity.PacketStructure; using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; using Arrowgene.Ddon.Shared.Network; using Arrowgene.Logging; namespace Arrowgene.Ddon.GameServer.Handler { - public class PartyPartyCreateHandler : PacketHandler + public class PartyPartyCreateHandler : StructurePacketHandler { private static readonly ServerLogger Logger = LogProvider.Logger(typeof(PartyPartyCreateHandler)); - public PartyPartyCreateHandler(DdonGameServer server) : base(server) { } - public override PacketId Id => PacketId.C2S_PARTY_PARTY_CREATE_REQ; - - public override void Handle(GameClient client, IPacket packet) + public override void Handle(GameClient client, StructurePacket packet) { - S2CParty_6_8_16_Ntc ntc_6_8_16 = new S2CParty_6_8_16_Ntc(); + client.Party = new Party(); + client.Party.Members.Add(client); + + S2CPartyPartyJoinNtc partyJoinNtc = new S2CPartyPartyJoinNtc(); CDataPartyMember partyMember = new CDataPartyMember(); + partyMember.CharacterListElement.ServerId = Server.AssetRepository.ServerList[0].Id; partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterId = client.Character.Id; partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterName.FirstName = client.Character.FirstName; partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterName.LastName = client.Character.LastName; - ntc_6_8_16.PartyMembers.Add(partyMember); - client.Send(ntc_6_8_16); + partyMember.CharacterListElement.CurrentJobBaseInfo.Job = Server.AssetRepository.ArisenAsset[0].Job; + partyMember.CharacterListElement.CurrentJobBaseInfo.Level = (byte) Server.AssetRepository.ArisenAsset[0].Lv; + partyMember.CharacterListElement.EntryJobBaseInfo.Job = Server.AssetRepository.ArisenAsset[0].Job; + partyMember.CharacterListElement.EntryJobBaseInfo.Level = (byte) Server.AssetRepository.ArisenAsset[0].Lv; + partyJoinNtc.PartyMembers.Add(partyMember); + client.Send(partyJoinNtc); + S2CPartyPartyCreateRes partyCreateRes = new S2CPartyPartyCreateRes(); + partyCreateRes.PartyId = client.Party.Id; + client.Send(partyCreateRes); + //client.Send(InGameDump.Dump_103); - // client.Send(InGameDump.Dump_104); - client.Send(InGameDump.Dump_105); + //client.Send(InGameDump.Dump_104); + //client.Send(InGameDump.Dump_105); } } } diff --git a/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteCharacterHandler.cs b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteCharacterHandler.cs new file mode 100644 index 000000000..cf2d323bf --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteCharacterHandler.cs @@ -0,0 +1,58 @@ +using System.Linq; +using System.Reflection.Metadata; +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Server.Network; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Ddon.Shared.Network; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class PartyPartyInviteCharacterHandler : StructurePacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(PartyPartyInviteCharacterHandler)); + + private static readonly ushort TimeoutSec = 30; // TODO: Move to config? + + public PartyPartyInviteCharacterHandler(DdonGameServer server) : base(server) + { + } + + public override void Handle(GameClient client, StructurePacket packet) + { + // TODO: Optimize this lmao + GameClient targetClient = Server.Clients.Where(x => x.Character.Id == packet.Structure.CharacterId).First(); + + // TODO: What would happen if two parties are trying to invite the same character? + targetClient.PendingInvitedParty = client.Party; + + S2CPartyPartyInviteNtc ntc = new S2CPartyPartyInviteNtc(); + ntc.TimeoutSec = TimeoutSec; // TODO: Implement timeout, send an NTC cancelling the party invite if the timeout is reached + ntc.PartyListInfo.PartyId = client.Party.Id; + ntc.PartyListInfo.ServerId = Server.AssetRepository.ServerList[0].Id; + ntc.PartyListInfo.PartyId = client.Party.Id; + for(int i = 0; i < client.Party.Members.Count; i++) + { + GameClient member = client.Party.Members[i]; + CDataPartyMember partyMember = new CDataPartyMember(); + partyMember.CharacterListElement.ServerId = Server.AssetRepository.ServerList[0].Id; + partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterId = member.Character.Id; + partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterName.FirstName = member.Character.FirstName; + partyMember.CharacterListElement.CommunityCharacterBaseInfo.CharacterName.LastName = member.Character.LastName; + partyMember.CharacterListElement.CurrentJobBaseInfo.Job = Server.AssetRepository.ArisenAsset[0].Job; + partyMember.CharacterListElement.CurrentJobBaseInfo.Level = (byte) Server.AssetRepository.ArisenAsset[0].Lv; + partyMember.CharacterListElement.EntryJobBaseInfo.Job = Server.AssetRepository.ArisenAsset[0].Job; + partyMember.CharacterListElement.EntryJobBaseInfo.Level = (byte) Server.AssetRepository.ArisenAsset[0].Lv; + partyMember.IsLeader = member == client.Party.Leader; + ntc.PartyListInfo.MemberList.Add(partyMember); + } + targetClient.Send(ntc); + + S2CPartyPartyInviteCharacterRes response = new S2CPartyPartyInviteCharacterRes(); + response.Info = ntc.PartyListInfo; + client.Send(response); + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteEntryHandler.cs b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteEntryHandler.cs new file mode 100644 index 000000000..e7930c5aa --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInviteEntryHandler.cs @@ -0,0 +1,33 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Server.Network; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Network; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class PartyPartyInviteEntryHandler : StructurePacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(PartyPartyInviteEntryHandler)); + + public PartyPartyInviteEntryHandler(DdonGameServer server) : base(server) + { + } + + public override void Handle(GameClient client, StructurePacket packet) + { + client.Send(new S2CPartyPartyInviteEntryRes()); + + S2CPartyPartyInviteEntryNtc ntc = new S2CPartyPartyInviteEntryNtc + { + CharacterId = client.Character.Id, + NowMember = (uint) client.Party.Members.Count, + MaxMember = 4 // TODO: Check if i can place like 20 players or something + }; + foreach(GameClient member in client.Party.Members) + { + member.Send(ntc); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.GameServer/Handler/PartyPartyInvitePrepareAcceptHandler.cs b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInvitePrepareAcceptHandler.cs new file mode 100644 index 000000000..03d3e51f1 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/PartyPartyInvitePrepareAcceptHandler.cs @@ -0,0 +1,33 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Server.Network; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Ddon.Shared.Network; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class PartyPartyInvitePrepareAcceptHandler : StructurePacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(PartyPartyInvitePrepareAcceptHandler)); + + public PartyPartyInvitePrepareAcceptHandler(DdonGameServer server) : base(server) + { + } + + public override void Handle(GameClient client, StructurePacket packet) + { + client.Send(new S2CPartyPartyInvitePrepareAcceptRes()); + + S2CPartyPartyInvitePrepareAcceptNtc ntc = new S2CPartyPartyInvitePrepareAcceptNtc(); + foreach(GameClient partyClient in client.PendingInvitedParty.Members) + { + partyClient.Send(ntc); + } + + client.PendingInvitedParty.Members.Add(client); + client.Party = client.PendingInvitedParty; + client.PendingInvitedParty = null; + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.GameServer/Party.cs b/Arrowgene.Ddon.GameServer/Party.cs new file mode 100644 index 000000000..f1b886c27 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Party.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using Arrowgene.Ddon.GameServer; + +namespace Arrowgene.Ddon.Shared.Model +{ + public class Party + { + private static uint Instances = 0; + + public Party() + { + Id = ++Instances; // Incase 0 is a reserved ID + Members = new List(); + } + + public uint Id { get; set; } + public List Members { get; set; } + public GameClient Leader { get; set; } + public GameClient Host { get; set; } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs index a143b69ef..b95148a02 100644 --- a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs +++ b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs @@ -90,6 +90,7 @@ static EntitySerializer() Create(new CDataOcdActive.Serializer()); Create(new CDataOrbCategoryStatusSerializer()); Create(new CDataOrbPageStatusSerializer()); + Create(new CDataPartyListInfo.Serializer()); Create(new CDataPartyMember.Serializer()); Create(new CDataPawnJobChangeInfo.Serializer()); Create(new CDataPlayPointDataSerializer()); @@ -167,6 +168,10 @@ static EntitySerializer() Create(new C2SMyRoomMyRoomBgmUpdateReq.Serializer()); Create(new C2SMyRoomUpdatePlanetariumReq.Serializer()); Create(new C2SPartnerPawnPawnLikabilityRewardListGetReq.Serializer()); + Create(new C2SPartyPartyCreateReq.Serializer()); + Create(new C2SPartyPartyInviteCharacterReq.Serializer()); + Create(new C2SPartyPartyInviteEntryReq.Serializer()); + Create(new C2SPartyPartyInvitePrepareAcceptReq.Serializer()); Create(new C2SPawnGetLostPawnListReq.Serializer()); Create(new C2SPawnGetMypawnDataReq.Serializer()); Create(new C2SPawnGetPawnHistoryListReq.Serializer()); @@ -266,7 +271,14 @@ static EntitySerializer() Create(new S2CMyRoomMyRoomBgmUpdateRes.Serializer()); Create(new S2CMyRoomUpdatePlanetariumRes.Serializer()); Create(new S2CPartnerPawnPawnLikabilityRewardListGetRes.Serializer()); - Create(new S2CParty_6_8_16_Ntc.Serializer()); + Create(new S2CPartyPartyCreateRes.Serailizer()); + Create(new S2CPartyPartyInviteCharacterRes.Serializer()); + Create(new S2CPartyPartyInviteEntryNtc.Serializer()); + Create(new S2CPartyPartyInviteEntryRes.Serializer()); + Create(new S2CPartyPartyInviteNtc.Serializer()); + Create(new S2CPartyPartyInvitePrepareAcceptNtc.Serializer()); + Create(new S2CPartyPartyInvitePrepareAcceptRes.Serializer()); + Create(new S2CPartyPartyJoinNtc.Serializer()); Create(new S2CPawn_8_37_16_Ntc.Serializer()); Create(new S2CPawnGetLostPawnListRes.Serializer()); Create(new S2CPawnGetMypawnDataRes.Serializer()); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyCreateReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyCreateReq.cs new file mode 100644 index 000000000..84587abc0 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyCreateReq.cs @@ -0,0 +1,22 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SPartyPartyCreateReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_PARTY_PARTY_CREATE_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SPartyPartyCreateReq obj) + { + } + + public override C2SPartyPartyCreateReq Read(IBuffer buffer) + { + return new C2SPartyPartyCreateReq(); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteCharacterReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteCharacterReq.cs new file mode 100644 index 000000000..129f06c9f --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteCharacterReq.cs @@ -0,0 +1,33 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SPartyPartyInviteCharacterReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_PARTY_PARTY_INVITE_CHARACTER_REQ; + + public C2SPartyPartyInviteCharacterReq() + { + CharacterId = 0; + } + + public uint CharacterId { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SPartyPartyInviteCharacterReq obj) + { + WriteUInt32(buffer, obj.CharacterId); + } + + public override C2SPartyPartyInviteCharacterReq Read(IBuffer buffer) + { + return new C2SPartyPartyInviteCharacterReq + { + CharacterId = ReadUInt32(buffer) + }; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteEntryReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteEntryReq.cs new file mode 100644 index 000000000..1294a0b08 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInviteEntryReq.cs @@ -0,0 +1,22 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SPartyPartyInviteEntryReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_PARTY_PARTY_INVITE_ENTRY_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SPartyPartyInviteEntryReq obj) + { + } + + public override C2SPartyPartyInviteEntryReq Read(IBuffer buffer) + { + return new C2SPartyPartyInviteEntryReq(); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInvitePrepareAcceptReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInvitePrepareAcceptReq.cs new file mode 100644 index 000000000..527264eca --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SPartyPartyInvitePrepareAcceptReq.cs @@ -0,0 +1,22 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SPartyPartyInvitePrepareAcceptReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_PARTY_PARTY_INVITE_PREPARE_ACCEPT_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SPartyPartyInvitePrepareAcceptReq obj) + { + } + + public override C2SPartyPartyInvitePrepareAcceptReq Read(IBuffer buffer) + { + return new C2SPartyPartyInvitePrepareAcceptReq(); + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyCreateRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyCreateRes.cs new file mode 100644 index 000000000..fff9c667f --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyCreateRes.cs @@ -0,0 +1,32 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyCreateRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_PARTY_PARTY_CREATE_RES; + + public uint PartyId { get; set; } + public ulong ContentNumber { get; set; } + + public class Serailizer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyCreateRes obj) + { + WriteServerResponse(buffer, obj); + WriteUInt32(buffer, obj.PartyId); + WriteUInt64(buffer, obj.ContentNumber); + } + + public override S2CPartyPartyCreateRes Read(IBuffer buffer) + { + S2CPartyPartyCreateRes obj = new S2CPartyPartyCreateRes(); + ReadServerResponse(buffer, obj); + obj.PartyId = ReadUInt32(buffer); + obj.ContentNumber = ReadUInt64(buffer); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteCharacterRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteCharacterRes.cs new file mode 100644 index 000000000..878342d9e --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteCharacterRes.cs @@ -0,0 +1,33 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyInviteCharacterRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_CHARACTER_RES; + + public ushort Unk0 { get; set; } // In the PS4 version has no name and its not even used + public CDataPartyListInfo Info { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInviteCharacterRes obj) + { + WriteServerResponse(buffer, obj); + WriteUInt16(buffer, obj.Unk0); + WriteEntity(buffer, obj.Info); + } + + public override S2CPartyPartyInviteCharacterRes Read(IBuffer buffer) + { + S2CPartyPartyInviteCharacterRes obj = new S2CPartyPartyInviteCharacterRes(); + ReadServerResponse(buffer, obj); + obj.Unk0 = ReadUInt16(buffer); + obj.Info = ReadEntity(buffer); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryNtc.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryNtc.cs new file mode 100644 index 000000000..8b52d6ce5 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryNtc.cs @@ -0,0 +1,34 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyInviteEntryNtc : IPacketStructure + { + public PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_ENTRY_NTC; + + public uint CharacterId { get; set; } + public uint NowMember { get; set; } + public uint MaxMember { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInviteEntryNtc obj) + { + WriteUInt32(buffer, obj.CharacterId); + WriteUInt32(buffer, obj.NowMember); + WriteUInt32(buffer, obj.MaxMember); + } + + public override S2CPartyPartyInviteEntryNtc Read(IBuffer buffer) + { + return new S2CPartyPartyInviteEntryNtc + { + CharacterId = ReadUInt32(buffer), + NowMember = ReadUInt32(buffer), + MaxMember = ReadUInt32(buffer) + }; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryRes.cs new file mode 100644 index 000000000..20221cceb --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteEntryRes.cs @@ -0,0 +1,25 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyInviteEntryRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_ENTRY_RES; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInviteEntryRes obj) + { + WriteServerResponse(buffer, obj); + } + + public override S2CPartyPartyInviteEntryRes Read(IBuffer buffer) + { + S2CPartyPartyInviteEntryRes obj = new S2CPartyPartyInviteEntryRes(); + ReadServerResponse(buffer, obj); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteNtc.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteNtc.cs new file mode 100644 index 000000000..d13fe7db9 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInviteNtc.cs @@ -0,0 +1,37 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyInviteNtc : IPacketStructure + { + public PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_NTC; + + public S2CPartyPartyInviteNtc() + { + PartyListInfo = new CDataPartyListInfo(); + TimeoutSec = 0; + } + + public CDataPartyListInfo PartyListInfo { get; set; } + public ushort TimeoutSec { get; set; } // It COULD be Error, since that value is in the PS4 but missing in the PC, but its unlikely due to its position + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInviteNtc obj) + { + WriteEntity(buffer, obj.PartyListInfo); + WriteUInt16(buffer, obj.TimeoutSec); + } + + public override S2CPartyPartyInviteNtc Read(IBuffer buffer) + { + S2CPartyPartyInviteNtc obj = new S2CPartyPartyInviteNtc(); + obj.PartyListInfo = ReadEntity(buffer); + obj.TimeoutSec = ReadUInt16(buffer); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptNtc.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptNtc.cs new file mode 100644 index 000000000..7adc8c71e --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptNtc.cs @@ -0,0 +1,29 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + // I couldn't find the handler for this in the PC client so this is a guess from the PS4 ver. + public class S2CPartyPartyInvitePrepareAcceptNtc : IPacketStructure + { + public PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_NTC; + + public ushort Unk0 { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInvitePrepareAcceptNtc obj) + { + WriteUInt16(buffer, obj.Unk0); + } + + public override S2CPartyPartyInvitePrepareAcceptNtc Read(IBuffer buffer) + { + return new S2CPartyPartyInvitePrepareAcceptNtc + { + Unk0 = ReadUInt16(buffer) + }; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptRes.cs new file mode 100644 index 000000000..25cf753ed --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyInvitePrepareAcceptRes.cs @@ -0,0 +1,25 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CPartyPartyInvitePrepareAcceptRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_RES; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CPartyPartyInvitePrepareAcceptRes obj) + { + WriteServerResponse(buffer, obj); + } + + public override S2CPartyPartyInvitePrepareAcceptRes Read(IBuffer buffer) + { + S2CPartyPartyInvitePrepareAcceptRes obj = new S2CPartyPartyInvitePrepareAcceptRes(); + ReadServerResponse(buffer, obj); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CParty_6_8_16_Ntc.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyJoinNtc.cs similarity index 75% rename from Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CParty_6_8_16_Ntc.cs rename to Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyJoinNtc.cs index 8352c7bfd..764cc2e8c 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CParty_6_8_16_Ntc.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CPartyPartyJoinNtc.cs @@ -5,11 +5,11 @@ namespace Arrowgene.Ddon.Shared.Entity.PacketStructure { - public class S2CParty_6_8_16_Ntc : IPacketStructure + public class S2CPartyPartyJoinNtc : IPacketStructure { - public PacketId Id => PacketId.S2C_PARTY_6_8_16_NTC; + public PacketId Id => PacketId.S2C_PARTY_PARTY_JOIN_NTC; - public S2CParty_6_8_16_Ntc() + public S2CPartyPartyJoinNtc() { Error = 0; LeaderCharacterId = 0; @@ -24,18 +24,18 @@ public S2CParty_6_8_16_Ntc() public List PartyMembers { get; set; } public bool IsReceived { get; set; } - public class Serializer : PacketEntitySerializer + public class Serializer : PacketEntitySerializer { - public override void Write(IBuffer buffer, S2CParty_6_8_16_Ntc obj) + public override void Write(IBuffer buffer, S2CPartyPartyJoinNtc obj) { WriteUInt32(buffer, obj.LeaderCharacterId); WriteUInt32(buffer, obj.HostCharacterId); WriteEntityList(buffer, obj.PartyMembers); } - public override S2CParty_6_8_16_Ntc Read(IBuffer buffer) + public override S2CPartyPartyJoinNtc Read(IBuffer buffer) { - S2CParty_6_8_16_Ntc obj = new S2CParty_6_8_16_Ntc(); + S2CPartyPartyJoinNtc obj = new S2CPartyPartyJoinNtc(); obj.LeaderCharacterId = ReadUInt32(buffer); obj.HostCharacterId = ReadUInt32(buffer); obj.PartyMembers = ReadEntityList(buffer); diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyListInfo.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyListInfo.cs new file mode 100644 index 000000000..122fa7d19 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyListInfo.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; + +namespace Arrowgene.Ddon.Shared.Entity.Structure +{ + public class CDataPartyListInfo + { + public CDataPartyListInfo() { + ServerId = 0; + PartyId = 0; + MemberList = new List(); + Sequence = 0; + ContentNumber = 0; + } + + public uint ServerId { get; set; } + public uint PartyId { get; set; } + public List MemberList { get; set; } + public uint Sequence { get; set; } + public ulong ContentNumber { get; set; } + + public class Serializer : EntitySerializer + { + public override void Write(IBuffer buffer, CDataPartyListInfo obj) + { + WriteUInt32(buffer, obj.ServerId); + WriteUInt32(buffer, obj.PartyId); + WriteEntityList(buffer, obj.MemberList); + WriteUInt32(buffer, obj.Sequence); + WriteUInt64(buffer, obj.ContentNumber); + } + + public override CDataPartyListInfo Read(IBuffer buffer) + { + CDataPartyListInfo obj = new CDataPartyListInfo(); + obj.ServerId = ReadUInt32(buffer); + obj.PartyId = ReadUInt32(buffer); + obj.MemberList = ReadEntityList(buffer); + obj.Sequence = ReadUInt32(buffer); + obj.ContentNumber = ReadUInt64(buffer); + return obj; + } + } + } +} \ No newline at end of file diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyMember.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyMember.cs index 6f35c9c0b..8a2880f92 100644 --- a/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyMember.cs +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPartyMember.cs @@ -1,4 +1,5 @@ using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; namespace Arrowgene.Ddon.Shared.Entity.Structure { diff --git a/Arrowgene.Ddon.Shared/Network/PacketId.cs b/Arrowgene.Ddon.Shared/Network/PacketId.cs index b771db418..bbe0ad48a 100644 --- a/Arrowgene.Ddon.Shared/Network/PacketId.cs +++ b/Arrowgene.Ddon.Shared/Network/PacketId.cs @@ -361,7 +361,7 @@ private static Dictionary InitializeLoginPacketIds() public static readonly PacketId S2C_PARTY_PARTY_CREATE_RES = new PacketId(6, 0, 2, "S2C_PARTY_PARTY_CREATE_RES", ServerType.Game, PacketSource.Server); // パーティ作成に public static readonly PacketId C2S_PARTY_PARTY_INVITE_REQ = new PacketId(6, 1, 1, "C2S_PARTY_PARTY_INVITE_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_INVITE_RES = new PacketId(6, 1, 2, "S2C_PARTY_PARTY_INVITE_RES", ServerType.Game, PacketSource.Server); // パーティ要請(要請側)に - public static readonly PacketId S2C_PARTY_6_1_16_NTC = new PacketId(6, 1, 16, "S2C_PARTY_6_1_16_NTC", ServerType.Game, PacketSource.Server); + public static readonly PacketId S2C_PARTY_PARTY_INVITE_NTC = new PacketId(6, 1, 16, "S2C_PARTY_PARTY_INVITE_NTC", ServerType.Game, PacketSource.Server, "S2C_PARTY_6_1_16_NTC"); public static readonly PacketId C2S_PARTY_PARTY_INVITE_CHARACTER_REQ = new PacketId(6, 2, 1, "C2S_PARTY_PARTY_INVITE_CHARACTER_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_INVITE_CHARACTER_RES = new PacketId(6, 2, 2, "S2C_PARTY_PARTY_INVITE_CHARACTER_RES", ServerType.Game, PacketSource.Server); // パーティ要請(キャラ)(要請側)に public static readonly PacketId C2S_PARTY_PARTY_INVITE_CANCEL_REQ = new PacketId(6, 3, 1, "C2S_PARTY_PARTY_INVITE_CANCEL_REQ", ServerType.Game, PacketSource.Client); @@ -371,16 +371,16 @@ private static Dictionary InitializeLoginPacketIds() public static readonly PacketId S2C_PARTY_PARTY_INVITE_REFUSE_RES = new PacketId(6, 4, 2, "S2C_PARTY_PARTY_INVITE_REFUSE_RES", ServerType.Game, PacketSource.Server); // パーティ要請拒否(要請受ける側)に public static readonly PacketId C2S_PARTY_PARTY_INVITE_PREPARE_ACCEPT_REQ = new PacketId(6, 5, 1, "C2S_PARTY_PARTY_INVITE_PREPARE_ACCEPT_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_RES = new PacketId(6, 5, 2, "S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_RES", ServerType.Game, PacketSource.Server); // パーティ要請受諾(要請受ける側)に - public static readonly PacketId S2C_PARTY_6_5_16_NTC = new PacketId(6, 5, 16, "S2C_PARTY_6_5_16_NTC", ServerType.Game, PacketSource.Server); + public static readonly PacketId S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_NTC = new PacketId(6, 5, 16, "S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_NTC", ServerType.Game, PacketSource.Server, "S2C_PARTY_6_5_16_NTC"); public static readonly PacketId C2S_PARTY_PARTY_INVITE_ENTRY_REQ = new PacketId(6, 6, 1, "C2S_PARTY_PARTY_INVITE_ENTRY_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_INVITE_ENTRY_RES = new PacketId(6, 6, 2, "S2C_PARTY_PARTY_INVITE_ENTRY_RES", ServerType.Game, PacketSource.Server); // 要請受諾エントリーに - public static readonly PacketId S2C_PARTY_6_6_16_NTC = new PacketId(6, 6, 16, "S2C_PARTY_6_6_16_NTC", ServerType.Game, PacketSource.Server); + public static readonly PacketId S2C_PARTY_PARTY_INVITE_ENTRY_NTC = new PacketId(6, 6, 16, "S2C_PARTY_PARTY_INVITE_ENTRY_NTC", ServerType.Game, PacketSource.Server, "S2C_PARTY_6_6_16_NTC"); public static readonly PacketId C2S_PARTY_PARTY_INVITE_ENTRY_CANCEL_REQ = new PacketId(6, 7, 1, "C2S_PARTY_PARTY_INVITE_ENTRY_CANCEL_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_INVITE_ENTRY_CANCEL_RES = new PacketId(6, 7, 2, "S2C_PARTY_PARTY_INVITE_ENTRY_CANCEL_RES", ServerType.Game, PacketSource.Server); // 要請受諾エントリーキャンセルに public static readonly PacketId S2C_PARTY_6_7_16_NTC = new PacketId(6, 7, 16, "S2C_PARTY_6_7_16_NTC", ServerType.Game, PacketSource.Server); public static readonly PacketId C2S_PARTY_PARTY_JOIN_REQ = new PacketId(6, 8, 1, "C2S_PARTY_PARTY_JOIN_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_JOIN_RES = new PacketId(6, 8, 2, "S2C_PARTY_PARTY_JOIN_RES", ServerType.Game, PacketSource.Server); // パーティ参加に - public static readonly PacketId S2C_PARTY_6_8_16_NTC = new PacketId(6, 8, 16, "S2C_PARTY_6_8_16_NTC", ServerType.Game, PacketSource.Server); + public static readonly PacketId S2C_PARTY_PARTY_JOIN_NTC = new PacketId(6, 8, 16, "S2C_PARTY_PARTY_JOIN_NTC", ServerType.Game, PacketSource.Server, "S2C_PARTY_6_8_16_NTC"); public static readonly PacketId C2S_PARTY_PARTY_GET_CONTENT_NUMBER_REQ = new PacketId(6, 9, 1, "C2S_PARTY_PARTY_GET_CONTENT_NUMBER_REQ", ServerType.Game, PacketSource.Client); public static readonly PacketId S2C_PARTY_PARTY_GET_CONTENT_NUMBER_RES = new PacketId(6, 9, 2, "S2C_PARTY_PARTY_GET_CONTENT_NUMBER_RES", ServerType.Game, PacketSource.Server); // パーティコンテンツ情報取得に public static readonly PacketId C2S_PARTY_6_10_1_REQ = new PacketId(6, 10, 1, "C2S_PARTY_6_10_1_REQ", ServerType.Game, PacketSource.Client); @@ -2262,7 +2262,7 @@ private static Dictionary InitializeGamePacketIds() AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_CREATE_RES); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_RES); - AddPacketIdEntry(packetIds, S2C_PARTY_6_1_16_NTC); + AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_NTC); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_CHARACTER_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_CHARACTER_RES); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_CANCEL_REQ); @@ -2272,16 +2272,16 @@ private static Dictionary InitializeGamePacketIds() AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_REFUSE_RES); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_PREPARE_ACCEPT_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_RES); - AddPacketIdEntry(packetIds, S2C_PARTY_6_5_16_NTC); + AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_PREPARE_ACCEPT_NTC); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_ENTRY_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_ENTRY_RES); - AddPacketIdEntry(packetIds, S2C_PARTY_6_6_16_NTC); + AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_ENTRY_NTC); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_INVITE_ENTRY_CANCEL_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_INVITE_ENTRY_CANCEL_RES); AddPacketIdEntry(packetIds, S2C_PARTY_6_7_16_NTC); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_JOIN_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_JOIN_RES); - AddPacketIdEntry(packetIds, S2C_PARTY_6_8_16_NTC); + AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_JOIN_NTC); AddPacketIdEntry(packetIds, C2S_PARTY_PARTY_GET_CONTENT_NUMBER_REQ); AddPacketIdEntry(packetIds, S2C_PARTY_PARTY_GET_CONTENT_NUMBER_RES); AddPacketIdEntry(packetIds, C2S_PARTY_6_10_1_REQ);