diff options
Diffstat (limited to 'src/server/game/Handlers/GuildHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/GuildHandler.cpp | 662 |
1 files changed, 131 insertions, 531 deletions
diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 103334db568..2f5c1602a9f 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -48,179 +48,77 @@ void WorldSession::HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& q TC_LOG_DEBUG("guild", "SMSG_GUILD_QUERY_RESPONSE [%s]", GetPlayerInfo().c_str()); } -void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildInviteByName(WorldPackets::Guild::GuildInviteByName& packet) { - uint32 nameLength = recvPacket.ReadBits(7); - std::string invitedName = recvPacket.ReadString(nameLength); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str()); - if (normalizePlayerName(invitedName)) + TC_LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), packet.Name.c_str()); + if (normalizePlayerName(packet.Name)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleInviteMember(this, invitedName); + guild->HandleInviteMember(this, packet.Name); } -void WorldSession::HandleGuildOfficerRemoveMemberOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember& packet) { - ObjectGuid playerGuid; - - 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(); - - 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]); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_OFFICER_REMOVE_MEMBER [%s]: Target: %s", GetPlayerInfo().c_str(), playerGuid.ToString().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [%s]: Target: %s", GetPlayerInfo().c_str(), packet.Removee.ToString().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleRemoveMember(this, playerGuid); + guild->HandleRemoveMember(this, packet.Removee); } -void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildAcceptInvite(WorldPackets::Guild::AcceptGuildInvite& /*invite*/) { - TC_LOG_DEBUG("guild", "CMSG_GUILD_ACCEPT [%s]", GetPlayerInfo().c_str()); + TC_LOG_DEBUG("guild", "CMSG_ACCEPT_GUILD_INVITE [%s]", GetPlayerInfo().c_str()); if (!GetPlayer()->GetGuildId()) if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildIdInvited())) guild->HandleAcceptMember(this); } -void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildDeclineInvitation(WorldPackets::Guild::GuildDeclineInvitation& /*decline*/) { - TC_LOG_DEBUG("guild", "CMSG_GUILD_DECLINE [%s]", GetPlayerInfo().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_DECLINE_INVITATION [%s]", GetPlayerInfo().c_str()); GetPlayer()->SetGuildIdInvited(UI64LIT(0)); GetPlayer()->SetInGuild(UI64LIT(0)); } -void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildGetRoster(WorldPackets::Guild::GuildGetRoster& /*packet*/) { TC_LOG_DEBUG("guild", "CMSG_GUILD_ROSTER [%s]", GetPlayerInfo().c_str()); - recvPacket.rfinish(); if (Guild* guild = GetPlayer()->GetGuild()) guild->HandleRoster(this); else - Guild::SendCommandResult(this, GUILD_COMMAND_ROSTER, ERR_GUILD_PLAYER_NOT_IN_GUILD); + Guild::SendCommandResult(this, GUILD_COMMAND_GET_ROSTER, ERR_GUILD_PLAYER_NOT_IN_GUILD); } -void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildPromoteMember(WorldPackets::Guild::GuildPromoteMember& promote) { - ObjectGuid targetGuid; - - 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(); - - 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]); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), targetGuid.ToString().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), promote.Promotee.ToString().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleUpdateMemberRank(this, targetGuid, false); + guild->HandleUpdateMemberRank(this, promote.Promotee, false); } -void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildDemoteMember(WorldPackets::Guild::GuildDemoteMember& demote) { - ObjectGuid targetGuid; - - 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(); - - 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]); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), targetGuid.ToString().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %s", GetPlayerInfo().c_str(), demote.Demotee.ToString().c_str()); 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]); + guild->HandleUpdateMemberRank(this, demote.Demotee, true); +} + +void WorldSession::HandleGuildAssignRank(WorldPackets::Guild::GuildAssignMemberRank& packet) +{ + ObjectGuid setterGuid = GetPlayer()->GetGUID(); TC_LOG_DEBUG("guild", "CMSG_GUILD_ASSIGN_MEMBER_RANK [%s]: Target: %s Rank: %u, Issuer: %s", - GetPlayerInfo().c_str(), targetGuid.ToString().c_str(), rankId, setterGuid.ToString().c_str()); + GetPlayerInfo().c_str(), packet.Member.ToString().c_str(), packet.RankOrder, setterGuid.ToString().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetMemberRank(this, targetGuid, setterGuid, rankId); + guild->HandleSetMemberRank(this, packet.Member, setterGuid, packet.RankOrder); } -void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildLeave(WorldPackets::Guild::GuildLeave& /*leave*/) { TC_LOG_DEBUG("guild", "CMSG_GUILD_LEAVE [%s]", GetPlayerInfo().c_str()); @@ -228,136 +126,76 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) guild->HandleLeaveMember(this); } -void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildDelete(WorldPackets::Guild::GuildDelete& /*packet*/) { - TC_LOG_DEBUG("guild", "CMSG_GUILD_DISBAND [%s]", GetPlayerInfo().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE [%s]", GetPlayerInfo().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleDisband(this); + guild->HandleDelete(this); } -void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet) { - uint32 motdLength = recvPacket.ReadBits(11); - std::string motd = recvPacket.ReadString(motdLength); - TC_LOG_DEBUG("guild", "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), motd.c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_MOTD_TEXT [%s]: MOTD: %s", GetPlayerInfo().c_str(), packet.MotdText.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetMOTD(this, motd); -} - -void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket) -{ - ObjectGuid playerGuid; - - 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(); - - 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]); + guild->HandleSetMOTD(this, packet.MotdText); +} +void WorldSession::HandleGuildSetMemberNote(WorldPackets::Guild::GuildSetMemberNote& packet) +{ TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_NOTE [%s]: Target: %s, Note: %s, Public: %u", - GetPlayerInfo().c_str(), playerGuid.ToString().c_str(), note.c_str(), ispublic); + GetPlayerInfo().c_str(), packet.NoteeGUID.ToString().c_str(), packet.Note.c_str(), packet.IsPublic); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetMemberNote(this, note, playerGuid, ispublic); + guild->HandleSetMemberNote(this, packet.Note, packet.NoteeGUID, packet.IsPublic); } -void WorldSession::HandleGuildGetRanksOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildGetRanks(WorldPackets::Guild::GuildGetRanks& packet) { - ObjectGuid guildGuid; - - 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(); - - 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]); - TC_LOG_DEBUG("guild", "CMSG_GUILD_GET_RANKS [%s]: Guild: %s", - GetPlayerInfo().c_str(), guildGuid.ToString().c_str()); + GetPlayerInfo().c_str(), packet.GuildGUID.ToString().c_str()); - if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) + if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID)) if (guild->IsMember(_player->GetGUID())) guild->SendGuildRankInfo(this); } -void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildAddRank(WorldPackets::Guild::GuildAddRank& packet) { - uint32 rankId; - recvPacket >> rankId; - - uint32 length = recvPacket.ReadBits(7); - std::string rankName = recvPacket.ReadString(length); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), packet.Name.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleAddNewRank(this, rankName); + guild->HandleAddNewRank(this, packet.Name); } -void WorldSession::HandleGuildDeleteRankOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet) { - uint32 rankId; - recvPacket >> rankId; - - TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), rankId); + TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), packet.RankOrder); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleRemoveRank(this, rankId); + guild->HandleRemoveRank(this, packet.RankOrder); } -void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet) { - uint32 length = recvPacket.ReadBits(12); - std::string info = recvPacket.ReadString(length); - - TC_LOG_DEBUG("guild", "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), packet.InfoText.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetInfo(this, info); + guild->HandleSetInfo(this, packet.InfoText); } -void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) +void WorldSession::HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& packet) { - ObjectGuid vendorGuid; - recvPacket >> vendorGuid; - EmblemInfo emblemInfo; - emblemInfo.ReadPacket(recvPacket); + emblemInfo.ReadPacket(packet); TC_LOG_DEBUG("guild", "CMSG_SAVE_GUILD_EMBLEM [%s]: Guid: [%s] Style: %d, Color: %d, BorderStyle: %d, BorderColor: %d, BackgroundColor: %d" - , GetPlayerInfo().c_str(), vendorGuid.ToString().c_str(), emblemInfo.GetStyle() + , GetPlayerInfo().c_str(), packet.Vendor.ToString().c_str(), emblemInfo.GetStyle() , emblemInfo.GetColor(), emblemInfo.GetBorderStyle() , emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor()); - if (GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_TABARDDESIGNER)) + if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER)) { // Remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) @@ -372,7 +210,7 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_INVALIDVENDOR); // "That's not an emblem vendor!" } -void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */) +void WorldSession::HandleGuildEventLogQuery(WorldPackets::Guild::GuildEventLogQuery& /*packet*/) { TC_LOG_DEBUG("guild", "MSG_GUILD_EVENT_LOG_QUERY [%s]", GetPlayerInfo().c_str()); @@ -380,7 +218,7 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */) guild->SendEventLog(this); } -void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvPacket */) +void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& /*packet*/) { TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str()); @@ -388,25 +226,21 @@ void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket& /* recvPacket */) guild->SendMoneyInfo(this); } -void WorldSession::HandleGuildPermissions(WorldPacket& /* recvPacket */) +void WorldSession::HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& /* packet */) { - TC_LOG_DEBUG("guild", "CMSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str()); + TC_LOG_DEBUG("guild", "CMSG_GUILD_PERMISSIONS_QUERY [%s]", GetPlayerInfo().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) guild->SendPermissions(this); } // Called when clicking on Guild bank gameobject -void WorldSession::HandleGuildBankerActivate(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate& packet) { - ObjectGuid guid; - bool sendAllSlots; - recvPacket >> guid >> sendAllSlots; - - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANKER_ACTIVATE [%s]: [%s] AllSlots: %u" - , GetPlayerInfo().c_str(), guid.ToString().c_str(), sendAllSlots); + TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_ACTIVATE [%s]: [%s] AllSlots: %u" + , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.FullUpdate); - GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK); + GameObject const* const go = GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK); if (!go) return; @@ -417,423 +251,189 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket& recvPacket) return; } - guild->SendBankList(this, 0, true, true); + guild->SendBankList(this, 0, packet.FullUpdate); } // Called when opening guild bank tab only (first one) -void WorldSession::HandleGuildBankQueryTab(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet) { - ObjectGuid guid; - uint8 tabId; - bool full; - - recvPacket >> guid >> tabId >> full; - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TAB [%s]: %s, TabId: %u, ShowTabs: %u" - , GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, full); + , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Tab, packet.FullUpdate); - if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) + if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendBankList(this, tabId, true, false); + guild->SendBankList(this, packet.Tab, packet.FullUpdate); } -void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet) { - ObjectGuid guid; - uint64 money; - recvPacket >> guid >> money; - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: [%s], money: " UI64FMTD, - GetPlayerInfo().c_str(), guid.ToString().c_str(), money); + GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money); - if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) - if (money && GetPlayer()->HasEnoughMoney(money)) + if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) + if (packet.Money && GetPlayer()->HasEnoughMoney(packet.Money)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleMemberDepositMoney(this, money); + guild->HandleMemberDepositMoney(this, packet.Money); } -void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet) { - ObjectGuid guid; - uint64 money; - recvPacket >> guid >> money; - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: [%s], money: " UI64FMTD, - GetPlayerInfo().c_str(), guid.ToString().c_str(), money); + GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.Money); - if (money && GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) + if (packet.Money && GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleMemberWithdrawMoney(this, money); + guild->HandleMemberWithdrawMoney(this, packet.Money); } -void WorldSession::HandleGuildBankSwapItems(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet) { TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_SWAP_ITEMS [%s]", GetPlayerInfo().c_str()); - ObjectGuid GoGuid; - recvPacket >> GoGuid; - - if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK)) - { - recvPacket.rfinish(); // Prevent additional spam at rejected packet + if (!GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) return; - } Guild* guild = GetPlayer()->GetGuild(); if (!guild) - { - recvPacket.rfinish(); // Prevent additional spam at rejected packet return; - } - uint8 bankToBank; - recvPacket >> bankToBank; - - uint8 tabId; - uint8 slotId; - uint32 itemEntry; - uint32 splitedAmount = 0; - - if (bankToBank) + if (packet.BankOnly) { - uint8 destTabId; - recvPacket >> destTabId; - - uint8 destSlotId; - recvPacket >> destSlotId; - - uint32 destItemEntry; - recvPacket >> destItemEntry; - - recvPacket >> tabId; - recvPacket >> slotId; - recvPacket >> itemEntry; - recvPacket.read_skip<uint8>(); // Always 0 - recvPacket >> splitedAmount; - - guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount); + guild->SwapItems(GetPlayer(), packet.BankTab1, packet.BankSlot1, packet.BankTab, packet.BankSlot, packet.StackCount); } else { - uint8 playerBag = NULL_BAG; - uint8 playerSlotId = NULL_SLOT; - uint8 toChar = 1; - - recvPacket >> tabId; - recvPacket >> slotId; - recvPacket >> itemEntry; - - uint8 autoStore; - recvPacket >> autoStore; - if (autoStore) - { - 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 - { - 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)) + if (!Player::IsInventoryPos(packet.ContainerSlot, packet.ContainerItemSlot) && !packet.AutoStore) GetPlayer()->SendEquipError(EQUIP_ERR_INTERNAL_BAG_ERROR, NULL); else - guild->SwapItemsWithInventory(GetPlayer(), toChar != 0, tabId, slotId, playerBag, playerSlotId, splitedAmount); + guild->SwapItemsWithInventory(GetPlayer(), packet.ToSlot != 0, packet.BankTab, packet.BankSlot, packet.ContainerSlot, packet.ContainerItemSlot, packet.StackCount); } } -void WorldSession::HandleGuildBankBuyTab(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet) { - ObjectGuid guid; - recvPacket >> guid; + TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: [%s[, TabId: %u", GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.BankTab); - uint8 tabId; - recvPacket >> tabId; - - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: [%s[, TabId: %u", GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId); - - if (!guid || GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) + if (!packet.Banker || GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleBuyBankTab(this, tabId); + guild->HandleBuyBankTab(this, packet.BankTab); } -void WorldSession::HandleGuildBankUpdateTab(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet) { - ObjectGuid guid; - uint8 tabId; - std::string name, icon; - - recvPacket >> guid >> tabId >> name >> icon; - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_UPDATE_TAB [%s]: [%s], TabId: %u, Name: %s, Icon: %s" - , GetPlayerInfo().c_str(), guid.ToString().c_str(), tabId, name.c_str(), icon.c_str()); - if (!name.empty() && !icon.empty()) - if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK)) + , GetPlayerInfo().c_str(), packet.Banker.ToString().c_str(), packet.BankTab, packet.Name.c_str(), packet.Icon.c_str()); + + if (!packet.Name.empty() && !packet.Icon.empty()) + if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK)) if (Guild* guild = GetPlayer()->GetGuild()) - guild->HandleSetBankTabInfo(this, tabId, name, icon); + guild->HandleSetBankTabInfo(this, packet.BankTab, packet.Name, packet.Icon); } -void WorldSession::HandleGuildBankLogQuery(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet) { - uint32 tabId; - recvPacket >> tabId; - - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId); + TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), packet.Tab); if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendBankLog(this, tabId); + guild->SendBankLog(this, packet.Tab); } -void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recvPacket) +void WorldSession::HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet) { - uint8 tabId; - recvPacket >> tabId; - - TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId); + TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), packet.Tab); if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendBankTabText(this, tabId); + guild->SendBankTabText(this, packet.Tab); } -void WorldSession::HandleSetGuildBankTabText(WorldPacket& recvPacket) +void WorldSession::HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet) { - uint32 tabId; - recvPacket >> tabId; - - uint32 textLen = recvPacket.ReadBits(14); - std::string text = recvPacket.ReadString(textLen); - - TC_LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), tabId, text.c_str()); + TC_LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), packet.Tab, packet.TabText.c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->SetBankTabText(tabId, text); + guild->SetBankTabText(packet.Tab, packet.TabText); } -void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recvPacket) -{ - TC_LOG_DEBUG("network", "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]); - - TC_LOG_DEBUG("guild", "CMSG_QUERY_GUILD_XP [%s]: Guild: %s", GetPlayerInfo().c_str(), guildGuid.ToString().c_str()); - - if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid)) - if (guild->IsMember(_player->GetGUID())) - guild->SendGuildXP(this); -} - -void WorldSession::HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet) { 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(packet.TabFlags[tabId]), uint32(packet.TabWithdrawItemLimit[tabId])); - rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(bankRights), slots); - } + TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_RANK_PERMISSIONS [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), packet.RankName.c_str(), packet.RankOrder); - recvPacket >> moneyPerDay; - recvPacket >> newRankId; - uint32 nameLength = recvPacket.ReadBits(7); - std::string rankName = recvPacket.ReadString(nameLength); - - TC_LOG_DEBUG("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); + guild->HandleSetRankInfo(this, packet.RankOrder, packet.RankName, packet.Flags, packet.WithdrawGoldLimit, rightsAndSlots); } -void WorldSession::HandleGuildRequestPartyState(WorldPacket& recvPacket) +void WorldSession::HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState& packet) { TC_LOG_DEBUG("network", "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)) + if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID)) guild->HandleGuildPartyRequest(this); } -void WorldSession::HandleGuildRequestChallengeUpdate(WorldPacket& /*recvPacket*/) +void WorldSession::HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& /*packet*/) { if (Guild* guild = _player->GetGuild()) guild->HandleGuildRequestChallengeUpdate(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) +void WorldSession::HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet) { - uint8 enable; - recvPacket >> enable; - - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, enable != 0); + GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, packet.Allow); } -void WorldSession::HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket) +void WorldSession::HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& packet) { - 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(); + WorldPackets::Guild::GuildRewardList rewardList; + rewardList.Version = uint32(time(NULL)); + rewardList.RewardItems.reserve(rewards.size()); 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); + WorldPackets::Guild::GuildRewardItem rewardItem; + rewardItem.ItemID = rewards[i].ItemID; + rewardItem.RaceMask = rewards[i].RaceMask; + rewardItem.MinGuildLevel = 0; + rewardItem.MinGuildRep = rewards[i].MinGuildRep; + rewardItem.AchievementsRequired = rewards[i].AchievementsRequired; + rewardItem.Cost = rewards[i].Cost; + rewardList.RewardItems.push_back(rewardItem); } - data << uint32(time(NULL)); - SendPacket(&data); + + SendPacket(rewardList.Write()); } } -void WorldSession::HandleGuildQueryNewsOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildQueryNews(WorldPackets::Guild::GuildQueryNews& newsQuery) { - recvPacket.read_skip<uint32>(); TC_LOG_DEBUG("guild", "CMSG_GUILD_QUERY_NEWS [%s]", GetPlayerInfo().c_str()); if (Guild* guild = GetPlayer()->GetGuild()) - guild->SendNewsUpdate(this); + if (guild->GetGUID() == newsQuery.GuildGUID) + guild->SendNewsUpdate(this); } -void WorldSession::HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket) +void WorldSession::HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky& packet) { - 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); + guild->HandleNewsSetSticky(this, packet.NewsID, packet.Sticky); } -void WorldSession::HandleGuildSetGuildMaster(WorldPacket& recvPacket) +void WorldSession::HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet) { - 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); + guild->HandleSetNewGuildMaster(this, packet.NewMasterName); } void WorldSession::HandleGuildSetAchievementTracking(WorldPacket& recvPacket) |