diff options
Diffstat (limited to 'src/server/game/Handlers/GuildHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/GuildHandler.cpp | 666 |
1 files changed, 474 insertions, 192 deletions
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 60749932637..4c3360122f2 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -30,38 +30,21 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { - uint32 guildId; - recvPacket >> guildId; + uint64 guildGuid, playerGuid; + recvPacket >> guildGuid >> playerGuid; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_QUERY [%s]: Guild: %u", GetPlayerInfo().c_str(), guildId); - if (!guildId) - return; + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_QUERY [%s]: Guild: %u Target: %u", + GetPlayerInfo().c_str(), GUID_LOPART(guildGuid), GUID_LOPART(playerGuid)); - if (Guild* guild = sGuildMgr->GetGuildById(guildId)) - guild->HandleQuery(this); -} - -void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket) -{ - sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_CREATE"); - - std::string name; - recvPacket >> name; - - if (!GetPlayer()->GetGuildId()) // Player cannot be in guild - { - Guild* guild = new Guild(); - if (guild->Create(GetPlayer(), name)) - sGuildMgr->AddGuild(guild); - else - delete guild; - } + if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + if (guild->IsMember(playerGuid)) + guild->HandleQuery(this); } void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { - std::string invitedName; - recvPacket >> invitedName; + uint32 nameLength = recvPacket.ReadBits(7); + std::string invitedName = recvPacket.ReadString(nameLength); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str()); if (normalizePlayerName(invitedName)) @@ -71,19 +54,35 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { - std::string playerName; - recvPacket >> playerName; + ObjectGuid playerGuid; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_REMOVE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str()); + playerGuid[6] = recvPacket.ReadBit(); + playerGuid[5] = recvPacket.ReadBit(); + playerGuid[4] = recvPacket.ReadBit(); + playerGuid[0] = recvPacket.ReadBit(); + playerGuid[1] = recvPacket.ReadBit(); + playerGuid[3] = recvPacket.ReadBit(); + playerGuid[7] = recvPacket.ReadBit(); + playerGuid[2] = recvPacket.ReadBit(); - if (normalizePlayerName(playerName)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleRemoveMember(this, playerName); + recvPacket.ReadByteSeq(playerGuid[2]); + recvPacket.ReadByteSeq(playerGuid[6]); + recvPacket.ReadByteSeq(playerGuid[5]); + recvPacket.ReadByteSeq(playerGuid[7]); + recvPacket.ReadByteSeq(playerGuid[1]); + recvPacket.ReadByteSeq(playerGuid[4]); + recvPacket.ReadByteSeq(playerGuid[3]); + recvPacket.ReadByteSeq(playerGuid[0]); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_REMOVE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(playerGuid)); + + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleRemoveMember(this, playerGuid); } void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/) { - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ACCEPT [%s]", GetPlayer()->GetName().c_str()); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ACCEPT [%s]", GetPlayerInfo().c_str()); if (!GetPlayer()->GetGuildId()) if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildIdInvited())) @@ -98,17 +97,10 @@ void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/) GetPlayer()->SetInGuild(0); } -void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/) -{ - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_INFO [%s]", GetPlayerInfo().c_str()); - - if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendInfo(this); -} - -void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ROSTER [%s]", GetPlayerInfo().c_str()); + recvPacket.rfinish(); if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleRoster(this); @@ -118,26 +110,107 @@ void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/) void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { - std::string playerName; - recvPacket >> playerName; + ObjectGuid targetGuid; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str()); + targetGuid[7] = recvPacket.ReadBit(); + targetGuid[2] = recvPacket.ReadBit(); + targetGuid[5] = recvPacket.ReadBit(); + targetGuid[6] = recvPacket.ReadBit(); + targetGuid[1] = recvPacket.ReadBit(); + targetGuid[0] = recvPacket.ReadBit(); + targetGuid[3] = recvPacket.ReadBit(); + targetGuid[4] = recvPacket.ReadBit(); - if (normalizePlayerName(playerName)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleUpdateMemberRank(this, playerName, false); + recvPacket.ReadByteSeq(targetGuid[0]); + recvPacket.ReadByteSeq(targetGuid[5]); + recvPacket.ReadByteSeq(targetGuid[2]); + recvPacket.ReadByteSeq(targetGuid[3]); + recvPacket.ReadByteSeq(targetGuid[6]); + recvPacket.ReadByteSeq(targetGuid[4]); + recvPacket.ReadByteSeq(targetGuid[1]); + recvPacket.ReadByteSeq(targetGuid[7]); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_PROMOTE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(targetGuid)); + + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleUpdateMemberRank(this, targetGuid, false); } void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) { - std::string playerName; - recvPacket >> playerName; + ObjectGuid targetGuid; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), playerName.c_str()); + targetGuid[7] = recvPacket.ReadBit(); + targetGuid[1] = recvPacket.ReadBit(); + targetGuid[5] = recvPacket.ReadBit(); + targetGuid[6] = recvPacket.ReadBit(); + targetGuid[2] = recvPacket.ReadBit(); + targetGuid[3] = recvPacket.ReadBit(); + targetGuid[0] = recvPacket.ReadBit(); + targetGuid[4] = recvPacket.ReadBit(); - if (normalizePlayerName(playerName)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleUpdateMemberRank(this, playerName, true); + recvPacket.ReadByteSeq(targetGuid[1]); + recvPacket.ReadByteSeq(targetGuid[2]); + recvPacket.ReadByteSeq(targetGuid[7]); + recvPacket.ReadByteSeq(targetGuid[5]); + recvPacket.ReadByteSeq(targetGuid[6]); + recvPacket.ReadByteSeq(targetGuid[0]); + recvPacket.ReadByteSeq(targetGuid[4]); + recvPacket.ReadByteSeq(targetGuid[3]); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_DEMOTE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(targetGuid)); + + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleUpdateMemberRank(this, targetGuid, true); +} + +void WorldSession::HandleGuildAssignRankOpcode(WorldPacket& recvPacket) +{ + ObjectGuid targetGuid; + ObjectGuid setterGuid; + + uint32 rankId; + recvPacket >> rankId; + + targetGuid[1] = recvPacket.ReadBit(); + targetGuid[7] = recvPacket.ReadBit(); + setterGuid[4] = recvPacket.ReadBit(); + setterGuid[2] = recvPacket.ReadBit(); + targetGuid[4] = recvPacket.ReadBit(); + targetGuid[5] = recvPacket.ReadBit(); + targetGuid[6] = recvPacket.ReadBit(); + setterGuid[1] = recvPacket.ReadBit(); + setterGuid[7] = recvPacket.ReadBit(); + targetGuid[2] = recvPacket.ReadBit(); + targetGuid[3] = recvPacket.ReadBit(); + targetGuid[0] = recvPacket.ReadBit(); + setterGuid[6] = recvPacket.ReadBit(); + setterGuid[3] = recvPacket.ReadBit(); + setterGuid[0] = recvPacket.ReadBit(); + setterGuid[5] = recvPacket.ReadBit(); + + recvPacket.ReadByteSeq(targetGuid[0]); + recvPacket.ReadByteSeq(setterGuid[1]); + recvPacket.ReadByteSeq(setterGuid[3]); + recvPacket.ReadByteSeq(setterGuid[5]); + recvPacket.ReadByteSeq(targetGuid[7]); + recvPacket.ReadByteSeq(targetGuid[3]); + recvPacket.ReadByteSeq(setterGuid[0]); + recvPacket.ReadByteSeq(targetGuid[1]); + recvPacket.ReadByteSeq(setterGuid[6]); + recvPacket.ReadByteSeq(targetGuid[2]); + recvPacket.ReadByteSeq(targetGuid[5]); + recvPacket.ReadByteSeq(targetGuid[4]); + recvPacket.ReadByteSeq(setterGuid[2]); + recvPacket.ReadByteSeq(setterGuid[4]); + recvPacket.ReadByteSeq(targetGuid[6]); + recvPacket.ReadByteSeq(setterGuid[7]); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ASSIGN_MEMBER_RANK [%s]: Target: %u Rank: %u, Issuer: %u", + GetPlayerInfo().c_str(), GUID_LOPART(targetGuid), rankId, GUID_LOPART(setterGuid)); + + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleSetMemberRank(this, targetGuid, setterGuid, rankId); } void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) @@ -156,100 +229,85 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) guild->HandleDisband(this); } -void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) -{ - std::string name; - recvPacket >> name; - - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_LEADER [%s]: Target: %s", GetPlayerInfo().c_str(), name.c_str()); - - if (normalizePlayerName(name)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetLeader(this, name); -} - void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { - std::string motd; - recvPacket >> motd; - + uint32 motdLength = recvPacket.ReadBits(11); + std::string motd = recvPacket.ReadString(motdLength); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), motd.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleSetMOTD(this, motd); } -void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket) { - std::string playerName; - std::string note; - recvPacket >> playerName >> note; - - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_SET_PUBLIC_NOTE [%s]: Target: %s, Note: %s", - GetPlayerInfo().c_str(), playerName.c_str(), note.c_str()); + ObjectGuid playerGuid; - if (normalizePlayerName(playerName)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetMemberNote(this, playerName, note, true); -} + playerGuid[1] = recvPacket.ReadBit(); + playerGuid[4] = recvPacket.ReadBit(); + playerGuid[5] = recvPacket.ReadBit(); + playerGuid[3] = recvPacket.ReadBit(); + playerGuid[0] = recvPacket.ReadBit(); + playerGuid[7] = recvPacket.ReadBit(); + bool ispublic = recvPacket.ReadBit(); // 0 == Officer, 1 == Public + playerGuid[6] = recvPacket.ReadBit(); + uint32 noteLength = recvPacket.ReadBits(8); + playerGuid[2] = recvPacket.ReadBit(); -void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) -{ - std::string playerName; - std::string note; - recvPacket >> playerName >> note; + recvPacket.ReadByteSeq(playerGuid[4]); + recvPacket.ReadByteSeq(playerGuid[5]); + recvPacket.ReadByteSeq(playerGuid[0]); + recvPacket.ReadByteSeq(playerGuid[3]); + recvPacket.ReadByteSeq(playerGuid[1]); + recvPacket.ReadByteSeq(playerGuid[6]); + recvPacket.ReadByteSeq(playerGuid[7]); + std::string note = recvPacket.ReadString(noteLength); + recvPacket.ReadByteSeq(playerGuid[2]); - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_SET_OFFICER_NOTE [%s]: Target: %s, Note: %s", - GetPlayerInfo().c_str(), playerName.c_str(), note.c_str()); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_SET_NOTE [%s]: Target: %u, Note: %s, Public: %u", + GetPlayerInfo().c_str(), GUID_LOPART(playerGuid), note.c_str(), ispublic); - if (normalizePlayerName(playerName)) - if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetMemberNote(this, playerName, note, false); + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleSetMemberNote(this, note, playerGuid, ispublic); } -void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildQueryRanksOpcode(WorldPacket& recvPacket) { - uint32 rankId; - recvPacket >> rankId; + ObjectGuid guildGuid; - uint32 rights; - recvPacket >> rights; + guildGuid[2] = recvPacket.ReadBit(); + guildGuid[3] = recvPacket.ReadBit(); + guildGuid[0] = recvPacket.ReadBit(); + guildGuid[6] = recvPacket.ReadBit(); + guildGuid[4] = recvPacket.ReadBit(); + guildGuid[7] = recvPacket.ReadBit(); + guildGuid[5] = recvPacket.ReadBit(); + guildGuid[1] = recvPacket.ReadBit(); - std::string rankName; - recvPacket >> rankName; + recvPacket.ReadByteSeq(guildGuid[3]); + recvPacket.ReadByteSeq(guildGuid[4]); + recvPacket.ReadByteSeq(guildGuid[5]); + recvPacket.ReadByteSeq(guildGuid[7]); + recvPacket.ReadByteSeq(guildGuid[1]); + recvPacket.ReadByteSeq(guildGuid[0]); + recvPacket.ReadByteSeq(guildGuid[6]); + recvPacket.ReadByteSeq(guildGuid[2]); - uint32 money; - recvPacket >> money; + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_QUERY_RANKS [%s]: Guild: %u", + GetPlayerInfo().c_str(), GUID_LOPART(guildGuid)); - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_RANK [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), rankName.c_str(), rankId); - - Guild* guild = GetPlayer()->GetGuild(); - if (!guild) - { - recvPacket.rpos(recvPacket.wpos()); - return; - } - - GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS); - - for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId) - { - uint32 bankRights; - uint32 slots; - - recvPacket >> bankRights; - recvPacket >> slots; - - rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, bankRights, slots); - } - - guild->HandleSetRankInfo(this, rankId, rankName, rights, money, rightsAndSlots); + if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + if (guild->IsMember(_player->GetGUID())) + guild->SendGuildRankInfo(this); } void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { - std::string rankName; - recvPacket >> rankName; + uint32 rankId; + recvPacket >> rankId; + + uint32 length = recvPacket.ReadBits(7); + std::string rankName = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str()); @@ -257,18 +315,21 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) guild->HandleAddNewRank(this, rankName); } -void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildDelRankOpcode(WorldPacket& recvPacket) { - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_DEL_RANK [%s]", GetPlayerInfo().c_str()); + uint32 rankId; + recvPacket >> rankId; + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_DEL_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), rankId); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleRemoveLowestRank(this); + guild->HandleRemoveRank(this, rankId); } void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) { - std::string info; - recvPacket >> info; + uint32 length = recvPacket.ReadBits(12); + std::string info = recvPacket.ReadString(length); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str()); @@ -313,32 +374,36 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */) guild->SendEventLog(this); } -void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket & /* recvData */) +void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvPacket */) { - sLog->outDebug(LOG_FILTER_GUILD, "MSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str()); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->SendMoneyInfo(this); } -void WorldSession::HandleGuildPermissions(WorldPacket& /* recvData */) +void WorldSession::HandleGuildPermissions(WorldPacket& /* recvPacket */) { - sLog->outDebug(LOG_FILTER_GUILD, "MSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str()); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->SendPermissions(this); } // Called when clicking on Guild bank gameobject -void WorldSession::HandleGuildBankerActivate(WorldPacket& recvData) +void WorldSession::HandleGuildBankerActivate(WorldPacket& recvPacket) { uint64 guid; bool sendAllSlots; - recvData >> guid >> sendAllSlots; + recvPacket >> guid >> sendAllSlots; sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANKER_ACTIVATE [%s]: Go: [" UI64FMTD "] AllSlots: %u" , GetPlayerInfo().c_str(), guid, sendAllSlots); + GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK); + if (!go) + return; + Guild* const guild = GetPlayer()->GetGuild(); if (!guild) { @@ -346,33 +411,33 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket& recvData) return; } - guild->SendBankTabsInfo(this, sendAllSlots); + guild->SendBankList(this, 0, true, true); } // Called when opening guild bank tab only (first one) -void WorldSession::HandleGuildBankQueryTab(WorldPacket& recvData) +void WorldSession::HandleGuildBankQueryTab(WorldPacket& recvPacket) { uint64 guid; uint8 tabId; - bool full; + bool sendAllSlots; - recvData >> guid >> tabId >> full; + recvPacket >> guid >> tabId >> sendAllSlots; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_QUERY_TAB [%s]: Go: [" UI64FMTD "], TabId: %u, ShowTabs: %u" - , GetPlayerInfo().c_str(), guid, tabId, full); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_QUERY_TAB [%s]: Go: [" UI64FMTD "], TabId: %u, AllSlots: %u" + , GetPlayerInfo().c_str(), guid, tabId, sendAllSlots); if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendBankTabData(this, tabId); + guild->SendBankList(this, tabId, true, false); } -void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvData) +void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvPacket) { uint64 guid; - uint32 money; - recvData >> guid >> money; + uint64 money; + recvPacket >> guid >> money; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: Go: [" UI64FMTD "], money: %u", + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: Go: [" UI64FMTD "], money: " UI64FMTD, GetPlayerInfo().c_str(), guid, money); if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) @@ -381,13 +446,13 @@ void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvData) guild->HandleMemberDepositMoney(this, money); } -void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recvData) +void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recvPacket) { uint64 guid; - uint32 money; - recvData >> guid >> money; + uint64 money; + recvPacket >> guid >> money; - sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: Go: [" UI64FMTD "], money: %u", + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: Go: [" UI64FMTD "], money: " UI64FMTD, GetPlayerInfo().c_str(), guid, money); if (money && GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) @@ -395,28 +460,28 @@ void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recvData) guild->HandleMemberWithdrawMoney(this, money); } -void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData) +void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvPacket) { sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_SWAP_ITEMS [%s]", GetPlayerInfo().c_str()); uint64 GoGuid; - recvData >> GoGuid; + recvPacket >> GoGuid; if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK)) { - recvData.rfinish(); // Prevent additional spam at rejected packet + recvPacket.rfinish(); // Prevent additional spam at rejected packet return; } Guild* guild = GetPlayer()->GetGuild(); if (!guild) { - recvData.rfinish(); // Prevent additional spam at rejected packet + recvPacket.rfinish(); // Prevent additional spam at rejected packet return; } uint8 bankToBank; - recvData >> bankToBank; + recvPacket >> bankToBank; uint8 tabId; uint8 slotId; @@ -426,18 +491,19 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData) if (bankToBank) { uint8 destTabId; - recvData >> destTabId; + recvPacket >> destTabId; uint8 destSlotId; - recvData >> destSlotId; - recvData.read_skip<uint32>(); // Always 0 + recvPacket >> destSlotId; - recvData >> tabId; - recvData >> slotId; - recvData >> itemEntry; - recvData.read_skip<uint8>(); // Always 0 + uint32 destItemEntry; + recvPacket >> destItemEntry; - recvData >> splitedAmount; + recvPacket >> tabId; + recvPacket >> slotId; + recvPacket >> itemEntry; + recvPacket.read_skip<uint8>(); // Always 0 + recvPacket >> splitedAmount; guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount); } @@ -447,71 +513,70 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvData) uint8 playerSlotId = NULL_SLOT; uint8 toChar = 1; - recvData >> tabId; - recvData >> slotId; - recvData >> itemEntry; + recvPacket >> tabId; + recvPacket >> slotId; + recvPacket >> itemEntry; uint8 autoStore; - recvData >> autoStore; + recvPacket >> autoStore; if (autoStore) { - recvData.read_skip<uint32>(); // autoStoreCount - recvData.read_skip<uint8>(); // ToChar (?), always and expected to be 1 (autostore only triggered in Bank -> Char) - recvData.read_skip<uint32>(); // Always 0 + recvPacket.read_skip<uint32>(); // autoStoreCount + recvPacket.read_skip<uint8>(); // ToChar (?), always and expected to be 1 (autostore only triggered in Bank -> Char) + recvPacket.read_skip<uint32>(); // Always 0 } else { - recvData >> playerBag; - recvData >> playerSlotId; - recvData >> toChar; - recvData >> splitedAmount; + recvPacket >> playerBag; + recvPacket >> playerSlotId; + recvPacket >> toChar; + recvPacket >> splitedAmount; } // Player <-> Bank // Allow to work with inventory only if (!Player::IsInventoryPos(playerBag, playerSlotId) && !(playerBag == NULL_BAG && playerSlotId == NULL_SLOT)) - GetPlayer()->SendEquipError(EQUIP_ERR_NONE, NULL); + GetPlayer()->SendEquipError(EQUIP_ERR_INTERNAL_BAG_ERROR, NULL); else guild->SwapItemsWithInventory(GetPlayer(), toChar, tabId, slotId, playerBag, playerSlotId, splitedAmount); } } -void WorldSession::HandleGuildBankBuyTab(WorldPacket& recvData) +void WorldSession::HandleGuildBankBuyTab(WorldPacket& recvPacket) { uint64 guid; - uint8 tabId; + recvPacket >> guid; - recvData >> guid >> tabId; + uint8 tabId; + recvPacket >> tabId; sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_BUY_TAB [%s]: Go: [" UI64FMTD "], TabId: %u", GetPlayerInfo().c_str(), guid, tabId); - - if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) + if (!guid || GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleBuyBankTab(this, tabId); } -void WorldSession::HandleGuildBankUpdateTab(WorldPacket& recvData) +void WorldSession::HandleGuildBankUpdateTab(WorldPacket& recvPacket) { uint64 guid; uint8 tabId; std::string name, icon; - recvData >> guid >> tabId >> name >> icon; + recvPacket >> guid >> tabId >> name >> icon; sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_BANK_UPDATE_TAB [%s]: Go: [" UI64FMTD "], TabId: %u, Name: %s, Icon: %s" , GetPlayerInfo().c_str(), guid, tabId, name.c_str(), icon.c_str()); - if (!name.empty() && !icon.empty()) if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleSetBankTabInfo(this, tabId, name, icon); } -void WorldSession::HandleGuildBankLogQuery(WorldPacket& recvData) +void WorldSession::HandleGuildBankLogQuery(WorldPacket& recvPacket) { - uint8 tabId; - recvData >> tabId; + uint32 tabId; + recvPacket >> tabId; sLog->outDebug(LOG_FILTER_GUILD, "MSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId); @@ -519,10 +584,10 @@ void WorldSession::HandleGuildBankLogQuery(WorldPacket& recvData) guild->SendBankLog(this, tabId); } -void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recvData) +void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recvPacket) { uint8 tabId; - recvData >> tabId; + recvPacket >> tabId; sLog->outDebug(LOG_FILTER_GUILD, "MSG_QUERY_GUILD_BANK_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId); @@ -530,14 +595,231 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recvData) guild->SendBankTabText(this, tabId); } -void WorldSession::HandleSetGuildBankTabText(WorldPacket &recvData) +void WorldSession::HandleSetGuildBankTabText(WorldPacket& recvPacket) { - uint8 tabId; - std::string text; - recvData >> tabId >> text; + uint32 tabId; + recvPacket >> tabId; + + uint32 textLen = recvPacket.ReadBits(14); + std::string text = recvPacket.ReadString(textLen); sLog->outDebug(LOG_FILTER_GUILD, "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), tabId, text.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->SetBankTabText(tabId, text); } + +void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recvPacket) +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_QUERY_GUILD_XP"); + + ObjectGuid guildGuid; + + guildGuid[2] = recvPacket.ReadBit(); + guildGuid[1] = recvPacket.ReadBit(); + guildGuid[0] = recvPacket.ReadBit(); + guildGuid[5] = recvPacket.ReadBit(); + guildGuid[4] = recvPacket.ReadBit(); + guildGuid[7] = recvPacket.ReadBit(); + guildGuid[6] = recvPacket.ReadBit(); + guildGuid[3] = recvPacket.ReadBit(); + + recvPacket.ReadByteSeq(guildGuid[7]); + recvPacket.ReadByteSeq(guildGuid[2]); + recvPacket.ReadByteSeq(guildGuid[3]); + recvPacket.ReadByteSeq(guildGuid[6]); + recvPacket.ReadByteSeq(guildGuid[1]); + recvPacket.ReadByteSeq(guildGuid[5]); + recvPacket.ReadByteSeq(guildGuid[0]); + recvPacket.ReadByteSeq(guildGuid[4]); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_QUERY_GUILD_XP [%s]: Guild: %u", GetPlayerInfo().c_str(), GUID_LOPART(guildGuid)); + + if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + if (guild->IsMember(_player->GetGUID())) + guild->SendGuildXP(this); +} + +void WorldSession::HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket) +{ + Guild* guild = GetPlayer()->GetGuild(); + if (!guild) + { + recvPacket.rfinish(); + return; + } + + uint32 oldRankId; + uint32 newRankId; + uint32 oldRights; + uint32 newRights; + uint32 moneyPerDay; + + recvPacket >> oldRankId; + recvPacket >> oldRights; + recvPacket >> newRights; + + GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS); + for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId) + { + uint32 bankRights; + uint32 slots; + + recvPacket >> bankRights; + recvPacket >> slots; + + rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(bankRights), slots); + } + + recvPacket >> moneyPerDay; + recvPacket >> newRankId; + uint32 nameLength = recvPacket.ReadBits(7); + std::string rankName = recvPacket.ReadString(nameLength); + + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_SET_RANK_PERMISSIONS [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), rankName.c_str(), newRankId); + + guild->HandleSetRankInfo(this, newRankId, rankName, newRights, moneyPerDay, rightsAndSlots); +} + +void WorldSession::HandleGuildRequestPartyState(WorldPacket& recvPacket) +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_REQUEST_PARTY_STATE"); + + ObjectGuid guildGuid; + + guildGuid[0] = recvPacket.ReadBit(); + guildGuid[6] = recvPacket.ReadBit(); + guildGuid[7] = recvPacket.ReadBit(); + guildGuid[3] = recvPacket.ReadBit(); + guildGuid[5] = recvPacket.ReadBit(); + guildGuid[1] = recvPacket.ReadBit(); + guildGuid[2] = recvPacket.ReadBit(); + guildGuid[4] = recvPacket.ReadBit(); + + recvPacket.ReadByteSeq(guildGuid[6]); + recvPacket.ReadByteSeq(guildGuid[3]); + recvPacket.ReadByteSeq(guildGuid[2]); + recvPacket.ReadByteSeq(guildGuid[1]); + recvPacket.ReadByteSeq(guildGuid[5]); + recvPacket.ReadByteSeq(guildGuid[0]); + recvPacket.ReadByteSeq(guildGuid[7]); + recvPacket.ReadByteSeq(guildGuid[4]); + + if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + guild->HandleGuildPartyRequest(this); +} + +void WorldSession::HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket) +{ + ObjectGuid guid; + guid[0] = recvPacket.ReadBit(); + guid[3] = recvPacket.ReadBit(); + guid[5] = recvPacket.ReadBit(); + guid[1] = recvPacket.ReadBit(); + guid[4] = recvPacket.ReadBit(); + guid[6] = recvPacket.ReadBit(); + guid[7] = recvPacket.ReadBit(); + guid[2] = recvPacket.ReadBit(); + + recvPacket.ReadByteSeq(guid[7]); + recvPacket.ReadByteSeq(guid[4]); + recvPacket.ReadByteSeq(guid[3]); + recvPacket.ReadByteSeq(guid[5]); + recvPacket.ReadByteSeq(guid[1]); + recvPacket.ReadByteSeq(guid[2]); + recvPacket.ReadByteSeq(guid[6]); + recvPacket.ReadByteSeq(guid[0]); + + if (Guild* guild = sGuildMgr->GetGuildByGuid(guid)) + { + if (guild->IsMember(_player->GetGUID())) + { + WorldPacket data(SMSG_GUILD_MAX_DAILY_XP, 8); + data << uint64(sWorld->getIntConfig(CONFIG_GUILD_DAILY_XP_CAP)); + SendPacket(&data); + } + } +} + +void WorldSession::HandleAutoDeclineGuildInvites(WorldPacket& recvPacket) +{ + uint8 enable; + recvPacket >> enable; + + GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, enable); +} + +void WorldSession::HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket) +{ + recvPacket.read_skip<uint32>(); // Unk + + if (sGuildMgr->GetGuildById(_player->GetGuildId())) + { + std::vector<GuildReward> const& rewards = sGuildMgr->GetGuildRewards(); + + WorldPacket data(SMSG_GUILD_REWARDS_LIST, 3 + rewards.size() * (4 + 4 + 4 + 8 + 4 + 4)); + data.WriteBits(rewards.size(), 21); + data.FlushBits(); + + for (uint32 i = 0; i < rewards.size(); i++) + { + data << uint32(rewards[i].Standing); + data << int32(rewards[i].Racemask); + data << uint32(rewards[i].Entry); + data << uint64(rewards[i].Price); + data << uint32(0); // Unused + data << uint32(rewards[i].AchievementId); + } + data << uint32(time(NULL)); + SendPacket(&data); + } +} + +void WorldSession::HandleGuildQueryNewsOpcode(WorldPacket& recvPacket) +{ + recvPacket.read_skip<uint32>(); + sLog->outDebug(LOG_FILTER_GUILD, "CMSG_GUILD_QUERY_NEWS [%s]", GetPlayerInfo().c_str()); + if (Guild* guild = GetPlayer()->GetGuild()) + guild->SendNewsUpdate(this); +} + +void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket) +{ + uint32 newsId; + bool sticky; + ObjectGuid guid; + + recvPacket >> newsId; + + guid[2] = recvPacket.ReadBit(); + guid[4] = recvPacket.ReadBit(); + guid[3] = recvPacket.ReadBit(); + guid[0] = recvPacket.ReadBit(); + sticky = recvPacket.ReadBit(); + guid[6] = recvPacket.ReadBit(); + guid[7] = recvPacket.ReadBit(); + guid[1] = recvPacket.ReadBit(); + guid[5] = recvPacket.ReadBit(); + + recvPacket.ReadByteSeq(guid[6]); + recvPacket.ReadByteSeq(guid[2]); + recvPacket.ReadByteSeq(guid[1]); + recvPacket.ReadByteSeq(guid[0]); + recvPacket.ReadByteSeq(guid[5]); + recvPacket.ReadByteSeq(guid[3]); + recvPacket.ReadByteSeq(guid[7]); + recvPacket.ReadByteSeq(guid[4]); + + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleNewsSetSticky(this, newsId, sticky); +} + +void WorldSession::HandleGuildSetGuildMaster(WorldPacket& recvPacket) +{ + uint8 nameLength = recvPacket.ReadBits(7); + // This is related to guild master inactivity. + /*bool isDethrone = */recvPacket.ReadBit(); + std::string playerName = recvPacket.ReadString(nameLength); + if (Guild* guild = GetPlayer()->GetGuild()) + guild->HandleSetNewGuildMaster(this, playerName); +} |