diff options
author | Nay <dnpd.dd@gmail.com> | 2011-12-22 03:49:36 +0000 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2011-12-22 03:49:36 +0000 |
commit | 869a8644e55d4d1db724df7f20d59ed26fce53f4 (patch) | |
tree | 073f90f1d4dc2509cef790f5472843290d7b123b | |
parent | f9d398c6ad10e58e4b09d6645fc74839ac4cbfc2 (diff) |
Core/Guild: Fix and enable CMSG_GUILD_QUERY
-rwxr-xr-x | src/server/game/Guilds/Guild.cpp | 6 | ||||
-rwxr-xr-x | src/server/game/Guilds/Guild.h | 1 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/GuildHandler.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 20 insertions, 8 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index e422cf1e152..e7374a273dc 100755 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2201,6 +2201,12 @@ bool Guild::ChangeMemberRank(uint64 guid, uint8 newRank) return false; } +bool Guild::IsMember(uint64 guid) +{ + Members::const_iterator itr = m_members.find(GUID_LOPART(guid)); + return itr != m_members.end(); +} + /////////////////////////////////////////////////////////////////////////////// // Bank (items move) void Guild::SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount) diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 3ac2b0a490d..2f89cb21f3e 100755 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -659,6 +659,7 @@ public: bool AddMember(uint64 guid, uint8 rankId = GUILD_RANK_NONE); void DeleteMember(uint64 guid, bool isDisbanding = false, bool isKicked = false); bool ChangeMemberRank(uint64 guid, uint8 newRank); + bool IsMember(uint64 guid); // Bank void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount); diff --git a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp index 7e964b4faf6..28d4292977b 100755 --- a/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GuildHandler.cpp @@ -44,13 +44,18 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_QUERY"); - uint32 guildId; - recvPacket >> guildId; - // Use received guild id to access guild method (not player's guild id) - if (Guild* guild = sGuildMgr->GetGuildById(guildId)) - guild->HandleQuery(this); - else - Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD); + uint64 guildGuid, playerGuid; + recvPacket >> guildGuid >> playerGuid; + + // If guild doesn't exist or player is not part of the guild send error + if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + if (guild->IsMember(playerGuid)) + { + guild->HandleQuery(this); + return; + } + + Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD); } void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket) diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index b13fa388263..8c7d56171f0 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -126,7 +126,7 @@ void InitOpcodes() DEFINE_OPCODE_HANDLER(SMSG_NAME_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(CMSG_PET_NAME_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetNameQuery ); //DEFINE_OPCODE_HANDLER(SMSG_PET_NAME_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //DEFINE_OPCODE_HANDLER(CMSG_GUILD_QUERY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_GUILD_QUERY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryOpcode ); //DEFINE_OPCODE_HANDLER(SMSG_GUILD_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(CMSG_ITEM_QUERY_SINGLE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleItemQuerySingleOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_ITEM_QUERY_MULTIPLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); |