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 유저 접속/나감