From 9828b967a14e7547e8f4a6e271525276614cedf8 Mon Sep 17 00:00:00 2001 From: qornwh1 Date: Tue, 10 Mar 2026 09:40:00 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=ED=8C=8C=ED=8B=B0=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B7=20=EC=B6=94=EA=B0=80=20/=20=EC=B1=84=EB=84=90=20?= =?UTF-8?q?=EC=A0=91=EC=86=8D=EC=8B=9C=20=EB=AA=A8=EB=93=A0=20=ED=8C=8C?= =?UTF-8?q?=ED=8B=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EchoClientTester/Packet/PacketBody.cs | 72 ++++++++++--------- MMOTestServer/MMOserver/Game/GameServer.cs | 12 +++- .../MMOserver/Game/Party/PartyManager.cs | 6 ++ MMOTestServer/MMOserver/Packet/PacketBody.cs | 33 +++++++++ 4 files changed, 88 insertions(+), 35 deletions(-) diff --git a/ClientTester/EchoClientTester/Packet/PacketBody.cs b/ClientTester/EchoClientTester/Packet/PacketBody.cs index 47237ef..1ed7191 100644 --- a/ClientTester/EchoClientTester/Packet/PacketBody.cs +++ b/ClientTester/EchoClientTester/Packet/PacketBody.cs @@ -541,6 +541,44 @@ public class ErrorPacket } } +// ============================================================ +// 파티 +// ============================================================ + +public enum PartyUpdateType +{ + CREATE, + DELETE, + JOIN, + LEAVE +} + +// REQUEST_PARTY (클라 -> 서버) - CREATE: PartyName 사용 / JOIN·LEAVE·DELETE: PartyId 사용 +[ProtoContract] +public class RequestPartyPacket +{ + [ProtoMember(1)] + public PartyUpdateType Type + { + get; + set; + } + + [ProtoMember(2)] + public int PartyId + { + get; + set; + } // JOIN, LEAVE, DELETE 시 사용 + + [ProtoMember(3)] + public string PartyName + { + get; + set; + } // CREATE 시 사용 +} + // ============================================================ // 채팅 // ============================================================ @@ -598,40 +636,6 @@ public class ChatPacket // 파티 // ============================================================ -public enum PartyUpdateType -{ - CREATE, - DELETE, - JOIN, - LEAVE -} - -// REQUEST_PARTY (클라 -> 서버) - CREATE: PartyName 사용 / JOIN·LEAVE·DELETE: PartyId 사용 -[ProtoContract] -public class RequestPartyPacket -{ - [ProtoMember(1)] - public PartyUpdateType Type - { - get; - set; - } - - [ProtoMember(2)] - public int PartyId - { - get; - set; - } // JOIN, LEAVE, DELETE 시 사용 - - [ProtoMember(3)] - public string PartyName - { - get; - set; - } // CREATE 시 사용 -} - // UPDATE_PARTY (서버 -> 클라) - 파티 생성/삭제: LeaderId 사용 / 파티원 추가/제거: PlayerId 사용 [ProtoContract] public class UpdatePartyPacket diff --git a/MMOTestServer/MMOserver/Game/GameServer.cs b/MMOTestServer/MMOserver/Game/GameServer.cs index a5c6b17..c05c3e6 100644 --- a/MMOTestServer/MMOserver/Game/GameServer.cs +++ b/MMOTestServer/MMOserver/Game/GameServer.cs @@ -251,7 +251,7 @@ public class GameServer : ServerBase Channel.Channel channel = cm.GetChannel(channelId); Player? myPlayer = channel.GetPlayer(hashKey); - // 1. 새 유저에게: 자신을 제외한 기존 채널 유저 목록 전송 + // 1. 새 유저에게: 자신을 제외한 기존 채널 유저 목록 + 파티 목록 전송 IntoChannelPacket response = new IntoChannelPacket { ChannelId = channelId }; foreach (int userId in channel.GetConnectUsers()) { @@ -267,6 +267,16 @@ public class GameServer : ServerBase } } + foreach (PartyInfo party in channel.GetPartyManager().GetAllParties()) + { + response.Parties.Add(new PartyInfoData + { + PartyId = party.PartyId, + LeaderId = party.LeaderId, + MemberPlayerIds = new List(party.PartyMemberIds), + }); + } + byte[] toNewUser = PacketSerializer.Serialize((ushort)PacketCode.INTO_CHANNEL, response); SendTo(peer, toNewUser); diff --git a/MMOTestServer/MMOserver/Game/Party/PartyManager.cs b/MMOTestServer/MMOserver/Game/Party/PartyManager.cs index 5b33445..39b97cd 100644 --- a/MMOTestServer/MMOserver/Game/Party/PartyManager.cs +++ b/MMOTestServer/MMOserver/Game/Party/PartyManager.cs @@ -119,6 +119,12 @@ public class PartyManager return true; } + // 전체 파티 목록 조회 + public IEnumerable GetAllParties() + { + return parties.Values; + } + // 조회 public PartyInfo? GetParty(int partyId) { diff --git a/MMOTestServer/MMOserver/Packet/PacketBody.cs b/MMOTestServer/MMOserver/Packet/PacketBody.cs index 90bb458..db2dc23 100644 --- a/MMOTestServer/MMOserver/Packet/PacketBody.cs +++ b/MMOTestServer/MMOserver/Packet/PacketBody.cs @@ -210,6 +210,32 @@ public class LoadChannelPacket } = new List(); } +// 채널 내 파티 정보 (INTO_CHANNEL 응답에 포함) +[ProtoContract] +public class PartyInfoData +{ + [ProtoMember(1)] + public int PartyId + { + get; + set; + } + + [ProtoMember(2)] + public int LeaderId + { + get; + set; + } + + [ProtoMember(3)] + public List MemberPlayerIds + { + get; + set; + } = new List(); +} + // INTO_CHANNEL 클라->서버: 입장할 채널 ID / 서버->클라: 채널 내 나 이외 플레이어 목록 [ProtoContract] public class IntoChannelPacket @@ -227,6 +253,13 @@ public class IntoChannelPacket get; set; } = new List(); // 서버->클라: 채널 내 플레이어 목록 + + [ProtoMember(3)] + public List Parties + { + get; + set; + } = new List(); // 서버->클라: 채널 내 파티 목록 } // UPDATE_CHANNEL_USER 유저 접속/나감