aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/GuildHandler.cpp22
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
2 files changed, 20 insertions, 4 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
index 28d4292977b..e229da81719 100755
--- a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp
@@ -125,12 +125,28 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
guild->SendInfo(this);
}
-void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/)
+void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ROSTER");
- if (Guild* guild = _GetPlayerGuild(this))
- guild->HandleRoster(this);
+ BitStream mask = recvPacket.ReadBitStream(8);
+
+ ByteBuffer bytes(8, true);
+
+ if (mask[0]) bytes[7] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[5]) bytes[4] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[4]) bytes[5] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[7]) bytes[0] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[3]) bytes[1] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[2]) bytes[2] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[1]) bytes[6] = recvPacket.ReadUInt8() ^ 1;
+ if (mask[6]) bytes[3] = recvPacket.ReadUInt8() ^ 1;
+
+ uint64 guildGuid = BitConverter::ToUInt64(bytes);
+
+ if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
+ if (guild->IsMember(GetPlayer()->GetGUID()))
+ guild->HandleRoster(this);
}
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index d63528adedb..14069a0910a 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -179,7 +179,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_GUILD_DECLINE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInfoOpcode );
//DEFINE_OPCODE_HANDLER(SMSG_GUILD_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(CMSG_GUILD_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_GUILD_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRosterOpcode );
//DEFINE_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_PROMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPromoteOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_GUILD_DEMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteOpcode );