diff options
Diffstat (limited to 'src/game/GuildHandler.cpp')
-rw-r--r-- | src/game/GuildHandler.cpp | 384 |
1 files changed, 181 insertions, 203 deletions
diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 80f5d124e94..e69a55d4024 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -31,36 +31,32 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { - uint32 guildId; - Guild *guild; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); + sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); + uint32 guildId; recvPacket >> guildId; - guild = objmgr.GetGuildById(guildId); - if(!guild) + if(Guild *guild = objmgr.GetGuildById(guildId)) { - SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); + guild->Query(this); return; } - guild->Query(this); + SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); } void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket) { - std::string gname; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE"); + std::string gname; recvPacket >> gname; - if(GetPlayer()->GetGuildId()) + if(GetPlayer()->GetGuildId()) // already in guild return; Guild *guild = new Guild; - if(!guild->Create(GetPlayer(),gname)) + if(!guild->Create(GetPlayer(), gname)) { delete guild; return; @@ -71,12 +67,11 @@ void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { - std::string Invitedname, plname; + sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE"); - //sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE"); + std::string Invitedname, plname; Player * player = NULL; - recvPacket >> Invitedname; if(normalizePlayerName(Invitedname)) @@ -137,15 +132,14 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) data << guild->GetName(); player->GetSession()->SendPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_INVITE)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_INVITE)"); } void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket) { - std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); + std::string plName; recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -202,7 +196,7 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/) Guild *guild; Player *player = GetPlayer(); - //sLog.outDebug("WORLD: Received CMSG_GUILD_ACCEPT"); + sLog.outDebug("WORLD: Received CMSG_GUILD_ACCEPT"); guild = objmgr.GetGuildById(player->GetGuildIdInvited()); if(!guild || player->GetGuildId()) @@ -223,12 +217,12 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/) data << player->GetName(); guild->BroadcastPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); } void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/) { - //sLog.outDebug("WORLD: Received CMSG_GUILD_DECLINE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_DECLINE"); GetPlayer()->SetGuildIdInvited(0); GetPlayer()->SetInGuild(0); @@ -237,7 +231,7 @@ void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/) void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/) { Guild *guild; - //sLog.outDebug("WORLD: Received CMSG_GUILD_INFO"); + sLog.outDebug("WORLD: Received CMSG_GUILD_INFO"); guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) @@ -259,21 +253,17 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/) void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/) { - //sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER"); - - Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); - if(!guild) - return; + sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER"); - guild->Roster(this); + if(Guild* guild = objmgr.GetGuildById(_player->GetGuildId())) + guild->Roster(this); } void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { - std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE"); + std::string plName; recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -285,6 +275,7 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); @@ -332,10 +323,9 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) { - std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE"); + std::string plName; recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -401,17 +391,15 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) { - std::string plName; - Guild *guild; + sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE"); - //sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE"); - - guild = objmgr.GetGuildById(_player->GetGuildId()); + Guild *guild = objmgr.GetGuildById(_player->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1) { SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE); @@ -424,8 +412,6 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) return; } - plName = _player->GetName(); - guild->DelMember(_player->GetGUID()); // Put record into guildlog guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0); @@ -433,27 +419,25 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/) WorldPacket data(SMSG_GUILD_EVENT, (2+10)); // guess size data << (uint8)GE_LEFT; data << (uint8)1; // strings count - data << plName; + data << _player->GetName(); guild->BroadcastPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), GUILD_PLAYER_NO_MORE_IN_GUILD); } void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) { - std::string name; - Guild *guild; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_DISBAND"); + sLog.outDebug("WORLD: Received CMSG_GUILD_DISBAND"); - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + if(GetPlayer()->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); @@ -462,23 +446,22 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/) guild->Disband(); - //sLog.outDebug("WORLD: Guild Sucefully Disbanded"); + sLog.outDebug("WORLD: Guild Successfully Disbanded"); } void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) { - std::string name; - Player *oldLeader = GetPlayer(); - Guild *guild; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); + sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); + std::string name; recvPacket >> name; + Player *oldLeader = GetPlayer(); + if(!normalizePlayerName(name)) return; - guild = objmgr.GetGuildById(oldLeader->GetGuildId()); + Guild *guild = objmgr.GetGuildById(oldLeader->GetGuildId()); if (!guild) { @@ -516,28 +499,28 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) { - Guild *guild; + sLog.outDebug("WORLD: Received CMSG_GUILD_MOTD"); + std::string MOTD; - //sLog.outDebug("WORLD: Received CMSG_GUILD_MOTD"); + if(!recvPacket.empty()) + recvPacket >> MOTD; + else + MOTD = ""; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_SETMOTD)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); return; } - if(!recvPacket.empty()) - recvPacket >> MOTD; - else - MOTD = ""; - guild->SetMOTD(MOTD); WorldPacket data(SMSG_GUILD_EVENT, (2+MOTD.size()+1)); @@ -546,15 +529,14 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) data << MOTD; guild->BroadcastPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); } void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) { - std::string name,PNOTE; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); + std::string name,PNOTE; recvPacket >> name; if(!normalizePlayerName(name)) @@ -590,10 +572,9 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) { - std::string plName, OFFNOTE; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); + sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); + std::string plName, OFFNOTE; recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -605,6 +586,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } + if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE)) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); @@ -628,23 +610,19 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket) { - //recvPacket.hexlike(); - - Guild *guild; std::string rankname; uint32 rankId; uint32 rights, MoneyPerDay; - //sLog.outDebug("WORLD: Received CMSG_GUILD_RANK"); + sLog.outDebug("WORLD: Received CMSG_GUILD_RANK"); - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - else if(GetPlayer()->GetGUID() != guild->GetLeader()) { recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam @@ -683,12 +661,12 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { - Guild *guild; - std::string rankname; + sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK"); - //sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK"); + std::string rankname; + recvPacket >> rankname; - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); @@ -704,8 +682,6 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) if(guild->GetRanksSize() >= GUILD_RANKS_MAX_COUNT) // client not let create more 10 than ranks return; - recvPacket >> rankname; - guild->CreateRank(rankname, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK); guild->Query(this); @@ -714,18 +690,14 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/) { - Guild *guild; - std::string rankname; + sLog.outDebug("WORLD: Received CMSG_GUILD_DEL_RANK"); - //sLog.outDebug("WORLD: Received CMSG_GUILD_DEL_RANK"); - - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); return; } - else if(GetPlayer()->GetGUID() != guild->GetLeader()) { SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS); @@ -746,12 +718,12 @@ void WorldSession::SendGuildCommandResult(uint32 typecmd, const std::string& str data << cmdresult; SendPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_COMMAND_RESULT)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_COMMAND_RESULT)"); } void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) { - //sLog.outDebug("WORLD: Received CMSG_GUILD_INFO_TEXT"); + sLog.outDebug("WORLD: Received CMSG_GUILD_INFO_TEXT"); std::string GINFO; @@ -775,17 +747,14 @@ void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket) void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) { - //sLog.outDebug("WORLD: Received MSG_SAVE_GUILD_EMBLEM"); + sLog.outDebug("WORLD: Received MSG_SAVE_GUILD_EMBLEM"); uint64 vendorGuid; - uint32 EmblemStyle; - uint32 EmblemColor; - uint32 BorderStyle; - uint32 BorderColor; - uint32 BackgroundColor; + uint32 EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor; recvPacket >> vendorGuid; + recvPacket >> EmblemStyle >> EmblemColor >> BorderStyle >> BorderColor >> BackgroundColor; Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid,UNIT_NPC_FLAG_TABARDDESIGNER); if (!pCreature) @@ -800,12 +769,6 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); - recvPacket >> EmblemStyle; - recvPacket >> EmblemColor; - recvPacket >> BorderStyle; - recvPacket >> BorderColor; - recvPacket >> BackgroundColor; - Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { @@ -841,17 +804,9 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */) { // empty sLog.outDebug("WORLD: Received (MSG_GUILD_EVENT_LOG_QUERY)"); - //recvPacket.hexlike(); - - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - - pGuild->DisplayGuildEventLog(this); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + pGuild->DisplayGuildEventLog(this); } /****** GUILD BANK *******/ @@ -859,53 +814,44 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */) void WorldSession::HandleGuildBankMoneyWithdrawn( WorldPacket & /* recv_data */ ) { sLog.outDebug("WORLD: Received (MSG_GUILD_BANK_MONEY_WITHDRAWN)"); - //recv_data.hexlike(); - - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - - pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); } void WorldSession::HandleGuildPermissions( WorldPacket& /* recv_data */ ) { sLog.outDebug("WORLD: Received (MSG_GUILD_PERMISSIONS)"); - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - - uint32 rankId = GetPlayer()->GetRank(); - - WorldPacket data(MSG_GUILD_PERMISSIONS, 4*15+1); - data << uint32(rankId); // guild rank id - data << uint32(pGuild->GetRankRights(rankId)); // rank rights - // money per day left - data << uint32(pGuild->GetMemberMoneyWithdrawRem(GetPlayer()->GetGUIDLow())); - data << uint8(pGuild->GetPurchasedTabs()); // tabs count - // why sending all info when not all tabs are purchased??? - for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i) + if(uint32 GuildId = GetPlayer()->GetGuildId()) { - data << uint32(pGuild->GetBankRights(rankId, uint8(i))); - data << uint32(pGuild->GetMemberSlotWithdrawRem(GetPlayer()->GetGUIDLow(), uint8(i))); + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + { + uint32 rankId = GetPlayer()->GetRank(); + + WorldPacket data(MSG_GUILD_PERMISSIONS, 4*15+1); + data << uint32(rankId); // guild rank id + data << uint32(pGuild->GetRankRights(rankId)); // rank rights + // money per day left + data << uint32(pGuild->GetMemberMoneyWithdrawRem(GetPlayer()->GetGUIDLow())); + data << uint8(pGuild->GetPurchasedTabs()); // tabs count + // why sending all info when not all tabs are purchased??? + for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i) + { + data << uint32(pGuild->GetBankRights(rankId, uint8(i))); + data << uint32(pGuild->GetMemberSlotWithdrawRem(GetPlayer()->GetGUIDLow(), uint8(i))); + } + SendPacket(&data); + sLog.outDebug("WORLD: Sent (MSG_GUILD_PERMISSIONS)"); + } } - SendPacket(&data); - sLog.outDebug("WORLD: Sent (MSG_GUILD_PERMISSIONS)"); } /* Called when clicking on Guild bank gameobject */ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANKER_ACTIVATE)"); + uint64 GoGuid; uint8 unk; recv_data >> GoGuid >> unk; @@ -917,7 +863,7 @@ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data ) { if(Guild *pGuild = objmgr.GetGuildById(GuildId)) { - pGuild->DisplayGuildBankTabsInfo(this); + pGuild->DisplayGuildBankTabsInfo(this); // this also will load guild bank if not yet return; } } @@ -929,31 +875,35 @@ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data ) void WorldSession::HandleGuildBankQueryTab( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_QUERY_TAB)"); + uint64 GoGuid; - uint8 TabId,unk1; + uint8 TabId, unk1; recv_data >> GoGuid >> TabId >> unk1; if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) + return; + + if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs()) return; // Let's update the amount of gold the player can withdraw before displaying the content - // This is usefull if money withdraw right has changed + // This is useful if money withdraw right has changed pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); - pGuild->DisplayGuildBankContent(this, TabId); } void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_DEPOSIT_MONEY)"); + uint64 GoGuid; uint32 money; recv_data >> GoGuid >> money; @@ -964,15 +914,18 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data ) if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; + if (GetPlayer()->GetMoney() < money) + return; + uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) return; - if (GetPlayer()->GetMoney() < money) + if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs()) return; CharacterDatabase.BeginTransaction(); @@ -995,11 +948,13 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data ) pGuild->DisplayGuildBankTabsInfo(this); pGuild->DisplayGuildBankContent(this, 0); + pGuild->DisplayGuildBankMoneyUpdate(); } void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_WITHDRAW_MONEY)"); + uint64 GoGuid; uint32 money; recv_data >> GoGuid >> money; @@ -1018,6 +973,9 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data ) if(!pGuild) return; + if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs()) + return; + if (pGuild->GetGuildBankMoney()<money) // not enough money in bank return; @@ -1043,12 +1001,12 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data ) pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); pGuild->DisplayGuildBankTabsInfo(this); pGuild->DisplayGuildBankContent(this,0); + pGuild->DisplayGuildBankMoneyUpdate(); } void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_SWAP_ITEMS)"); - //recv_data.hexlike(); uint64 GoGuid; uint8 BankToBank; @@ -1063,6 +1021,21 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) uint32 SplitedAmount = 0; recv_data >> GoGuid >> BankToBank; + + uint32 GuildId = GetPlayer()->GetGuildId(); + if (!GuildId) + { + recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet + return; + } + + Guild *pGuild = objmgr.GetGuildById(GuildId); + if (!pGuild || !pGuild->IsGuildBankLoaded()) + { + recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet + return; + } + if (BankToBank) { recv_data >> BankTabDst; @@ -1074,7 +1047,10 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) recv_data >> unk2; // always 0 recv_data >> SplitedAmount; - if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS || (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot) || BankTab >= GUILD_BANK_MAX_TABS) + if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS || + (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot) || + BankTab >= pGuild->GetPurchasedTabs() || + BankTabDst >= pGuild->GetPurchasedTabs()) { recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet return; @@ -1100,7 +1076,8 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) recv_data >> SplitedAmount; } - if ((BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF) || BankTab >= GUILD_BANK_MAX_TABS) + if (BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF || + BankTab >= pGuild->GetPurchasedTabs()) { recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet return; @@ -1110,30 +1087,20 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - if (BankTab >= pGuild->GetPurchasedTabs()) return; - Player *pl = GetPlayer(); - // Bank <-> Bank if (BankToBank) { - pGuild->SwapItems(pl, BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, SplitedAmount); + pGuild->SwapItems(_player, BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, SplitedAmount); return; } // Player <-> Bank // allow work with inventory only - if(!Player::IsInventoryPos(PlayerBag,PlayerSlot) && !(PlayerBag == NULL_BAG && PlayerSlot == NULL_SLOT)) + if(!Player::IsInventoryPos(PlayerBag, PlayerSlot) && !(PlayerBag == NULL_BAG && PlayerSlot == NULL_SLOT) ) { _player->SendEquipError( EQUIP_ERR_NONE, NULL, NULL ); return; @@ -1141,15 +1108,15 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) // BankToChar swap or char to bank remaining if (ToChar) // Bank -> Char cases - pGuild->MoveFromBankToChar(pl, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount); + pGuild->MoveFromBankToChar(_player, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount); else // Char -> Bank cases - pGuild->MoveFromCharToBank(pl, PlayerBag, PlayerSlot, BankTab, BankTabSlot, SplitedAmount); + pGuild->MoveFromCharToBank(_player, PlayerBag, PlayerSlot, BankTab, BankTabSlot, SplitedAmount); } void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_BUY_TAB)"); - //recv_data.hexlike(); + uint64 GoGuid; uint8 TabId; @@ -1160,25 +1127,20 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data ) return; uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId==0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); if(!pGuild) return; - uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD; - if (!TabCost) - return; - - if (pGuild->GetPurchasedTabs() >= GUILD_BANK_MAX_TABS) + // m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made + if (!pGuild->IsGuildBankLoaded() || TabId != pGuild->GetPurchasedTabs()) return; - if (TabId != pGuild->GetPurchasedTabs()) // m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made - { - sLog.outError("Error: trying to buy a tab non contigous to owned ones"); + uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD; + if (!TabCost) return; - } if (GetPlayer()->GetMoney() < TabCost) // Should not happen, this is checked by client return; @@ -1195,7 +1157,7 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data ) void WorldSession::HandleGuildBankUpdateTab( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_UPDATE_TAB)"); - //recv_data.hexlike(); + uint64 GoGuid; uint8 TabId; std::string Name; @@ -1216,11 +1178,14 @@ void WorldSession::HandleGuildBankUpdateTab( WorldPacket & recv_data ) return; uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId==0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) + return; + + if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs()) return; pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex); @@ -1232,16 +1197,23 @@ void WorldSession::HandleGuildBankLogQuery( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (MSG_GUILD_BANK_LOG_QUERY)"); + uint8 TabId; + recv_data >> TabId; + uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) return; - uint8 TabId; - recv_data >> TabId; + if (!pGuild->IsGuildBankLoaded()) + return; + + // GUILD_BANK_MAX_TABS send by client for money log + if (TabId >= pGuild->GetPurchasedTabs() && TabId != GUILD_BANK_MAX_TABS) + return; pGuild->DisplayGuildBankLogs(this, TabId); } @@ -1250,16 +1222,19 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data) { sLog.outDebug("WORLD: Received MSG_QUERY_GUILD_BANK_TEXT"); + uint8 TabId; + recv_data >> TabId; + uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) return; - uint8 TabId; - recv_data >> TabId; + if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs()) + return; pGuild->SendGuildBankTabText(this, TabId); } @@ -1267,18 +1242,22 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data) void WorldSession::HandleSetGuildBankTabText(WorldPacket &recv_data) { sLog.outDebug("WORLD: Received CMSG_SET_GUILD_BANK_TEXT"); + + uint8 TabId; + std::string Text; + recv_data >> TabId; + recv_data >> Text; + uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) + if (!GuildId) return; Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) + if (!pGuild) return; - uint8 TabId; - std::string Text; - recv_data >> TabId; - recv_data >> Text; + if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs()) + return; pGuild->SetGuildBankTabText(TabId, Text); } @@ -1289,4 +1268,3 @@ void WorldSession::SendSaveGuildEmblem( uint32 msg ) data << uint32(msg); // not part of guild SendPacket( &data ); } - |