From 94fdc7e37edbc578e4cc3076d0123c480dc21a2e Mon Sep 17 00:00:00 2001 From: tomrus88 Date: Fri, 28 Aug 2009 19:14:16 +0400 Subject: [PATCH] Fix. --- src/game/ArenaTeamHandler.cpp | 39 ++- src/game/GuildHandler.cpp | 439 ++++++++++++++-------------------- src/game/ObjectMgr.cpp | 12 + 3 files changed, 208 insertions(+), 282 deletions(-) diff --git a/src/game/ArenaTeamHandler.cpp b/src/game/ArenaTeamHandler.cpp index ce5dda707..0fdfdadfc 100644 --- a/src/game/ArenaTeamHandler.cpp +++ b/src/game/ArenaTeamHandler.cpp @@ -54,12 +54,11 @@ void WorldSession::HandleArenaTeamQueryOpcode(WorldPacket & recv_data) uint32 ArenaTeamId; recv_data >> ArenaTeamId; - ArenaTeam *arenateam = objmgr.GetArenaTeamById(ArenaTeamId); - if(!arenateam) // arena team not found - return; - - arenateam->Query(this); - arenateam->Stats(this); + if(ArenaTeam *arenateam = objmgr.GetArenaTeamById(ArenaTeamId)) + { + arenateam->Query(this); + arenateam->Stats(this); + } } void WorldSession::HandleArenaTeamRosterOpcode(WorldPacket & recv_data) @@ -69,11 +68,8 @@ void WorldSession::HandleArenaTeamRosterOpcode(WorldPacket & recv_data) uint32 ArenaTeamId; // arena team id recv_data >> ArenaTeamId; - ArenaTeam *arenateam = objmgr.GetArenaTeamById(ArenaTeamId); - if(!arenateam) - return; - - arenateam->Roster(this); + if(ArenaTeam *arenateam = objmgr.GetArenaTeamById(ArenaTeamId)) + arenateam->Roster(this); } void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data) @@ -203,12 +199,14 @@ void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data) ArenaTeam *at = objmgr.GetArenaTeamById(ArenaTeamId); if(!at) return; + if(_player->GetGUID() == at->GetCaptain() && at->GetMembersSize() > 1) { // check for correctness SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S); return; } + // arena team has only one member (=captain) if(_player->GetGUID() == at->GetCaptain()) { @@ -235,18 +233,17 @@ void WorldSession::HandleArenaTeamDisbandOpcode(WorldPacket & recv_data) uint32 ArenaTeamId; // arena team id recv_data >> ArenaTeamId; - ArenaTeam *at = objmgr.GetArenaTeamById(ArenaTeamId); - if(!at) - return; + if(ArenaTeam *at = objmgr.GetArenaTeamById(ArenaTeamId)) + { + if(at->GetCaptain() != _player->GetGUID()) + return; - if(at->GetCaptain() != _player->GetGUID()) - return; + if(at->IsFighting()) + return; - if (at->IsFighting()) - return; - - at->Disband(this); - delete at; + at->Disband(this); + delete at; + } } void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data) diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index ddacd2aec..8891113ba 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -29,36 +29,32 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { + sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); + uint32 guildId; - Guild *guild; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY"); - 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) { + sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE"); + std::string gname; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE"); - 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; @@ -69,10 +65,9 @@ void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket) { + sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE"); + std::string Invitedname, plname; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE"); - Player * player = NULL; recvPacket >> Invitedname; @@ -135,15 +130,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) { + sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); + std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE"); - recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -200,7 +194,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()) @@ -221,12 +215,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); @@ -234,10 +228,9 @@ 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()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); @@ -257,21 +250,17 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/) void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/) { - //sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER"); + sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER"); - Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); - if(!guild) - return; - - guild->Roster(this); + if(Guild* guild = objmgr.GetGuildById(_player->GetGuildId())) + guild->Roster(this); } void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) { + sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE"); + std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE"); - recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -330,10 +319,9 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) { + sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE"); + std::string plName; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE"); - recvPacket >> plName; if(!normalizePlayerName(plName)) @@ -399,17 +387,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); @@ -422,8 +408,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); @@ -431,27 +415,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); @@ -460,23 +442,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) { + sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); + std::string name; - Player *oldLeader = GetPlayer(); - Guild *guild; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER"); - recvPacket >> name; + Player *oldLeader = GetPlayer(); + if(!normalizePlayerName(name)) return; - guild = objmgr.GetGuildById(oldLeader->GetGuildId()); + Guild *guild = objmgr.GetGuildById(oldLeader->GetGuildId()); if (!guild) { @@ -509,17 +490,21 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket) data << name.c_str(); guild->BroadcastPacket(&data); - //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); + sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)"); } 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); @@ -531,11 +516,6 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket) return; } - if(!recvPacket.empty()) - recvPacket >> MOTD; - else - MOTD = ""; - guild->SetMOTD(MOTD); WorldPacket data(SMSG_GUILD_EVENT, (2+MOTD.size()+1)); @@ -544,15 +524,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) { + sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); + std::string name,PNOTE; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE"); - recvPacket >> name; if(!normalizePlayerName(name)) @@ -589,10 +568,9 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket) { + sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); + std::string plName, OFFNOTE; - - //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE"); - recvPacket >> plName; if (!normalizePlayerName(plName)) @@ -628,23 +606,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 +657,12 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket) void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket) { - Guild *guild; + sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK"); + std::string rankname; + recvPacket >> rankname; - //sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK"); - - guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); + Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD); @@ -704,8 +678,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 +686,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,15 +714,14 @@ 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; - recvPacket >> GINFO; Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); @@ -775,17 +742,13 @@ 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 +763,6 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - recvPacket >> EmblemStyle; - recvPacket >> EmblemColor; - recvPacket >> BorderStyle; - recvPacket >> BorderColor; - recvPacket >> BackgroundColor; - Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if(!guild) { @@ -841,17 +798,10 @@ 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 +809,45 @@ 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; @@ -929,31 +871,31 @@ 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) - return; + if(uint32 GuildId = GetPlayer()->GetGuildId()) + { + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + { + // Let's update the amount of gold the player can withdraw before displaying the content + // This is useful if money withdraw right has changed + pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - 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 - pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); - - pGuild->DisplayGuildBankContent(this, TabId); + 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,43 +906,42 @@ void WorldSession::HandleGuildBankDepositMoney( 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 (GetPlayer()->GetMoney() < money) return; - CharacterDatabase.BeginTransaction(); - - pGuild->SetBankMoney(pGuild->GetGuildBankMoney()+money); - GetPlayer()->ModifyMoney(-int(money)); - GetPlayer()->SaveGoldToDB(); - - CharacterDatabase.CommitTransaction(); - - // logging money - if(_player->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE)) + if(uint32 GuildId = GetPlayer()->GetGuildId()) { - sLog.outCommand(_player->GetSession()->GetAccountId(),"GM %s (Account: %u) deposit money (Amount: %u) to guild bank (Guild ID %u)", - _player->GetName(),_player->GetSession()->GetAccountId(),money,GuildId); + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + { + CharacterDatabase.BeginTransaction(); + + pGuild->SetBankMoney(pGuild->GetGuildBankMoney()+money); + GetPlayer()->ModifyMoney(-int(money)); + GetPlayer()->SaveGoldToDB(); + + CharacterDatabase.CommitTransaction(); + + // logging money + if(_player->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE)) + { + sLog.outCommand(_player->GetSession()->GetAccountId(),"GM %s (Account: %u) deposit money (Amount: %u) to guild bank (Guild ID %u)", + _player->GetName(),_player->GetSession()->GetAccountId(),money,GuildId); + } + + // log + pGuild->LogBankEvent(GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), GetPlayer()->GetGUIDLow(), money); + + pGuild->DisplayGuildBankTabsInfo(this); + pGuild->DisplayGuildBankContent(this, 0); + pGuild->DisplayGuildBankMoneyUpdate(); + } } - - // log - pGuild->LogBankEvent(GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), GetPlayer()->GetGUIDLow(), money); - - 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; @@ -1050,7 +991,6 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data ) void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_SWAP_ITEMS)"); - //recv_data.hexlike(); uint64 GoGuid; uint8 BankToBank; @@ -1112,43 +1052,39 @@ 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; - - Player *pl = GetPlayer(); - - // Bank <-> Bank - if (BankToBank) + if(uint32 GuildId = GetPlayer()->GetGuildId()) { - pGuild->SwapItems(pl, BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, SplitedAmount); - return; + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + { + // Bank <-> Bank + if (BankToBank) + { + 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) ) + { + _player->SendEquipError( EQUIP_ERR_NONE, NULL, NULL ); + return; + } + + // BankToChar swap or char to bank remaining + if (ToChar) // Bank -> Char cases + pGuild->MoveFromBankToChar(_player, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount); + else // Char -> Bank cases + pGuild->MoveFromCharToBank(_player, PlayerBag, PlayerSlot, BankTab, BankTabSlot, SplitedAmount); + } } - - // Player <-> Bank - - // allow work with inventory only - if(!Player::IsInventoryPos(PlayerBag,PlayerSlot) && !(PlayerBag == NULL_BAG && PlayerSlot == NULL_SLOT) ) - { - _player->SendEquipError( EQUIP_ERR_NONE, NULL, NULL ); - return; - } - - // BankToChar swap or char to bank remaining - if (ToChar) // Bank -> Char cases - pGuild->MoveFromBankToChar(pl, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount); - else // Char -> Bank cases - pGuild->MoveFromCharToBank(pl, 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; @@ -1175,7 +1111,7 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data ) 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"); + sLog.outError("Error: trying to buy a tab non contiguous to owned ones"); return; } @@ -1194,7 +1130,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; @@ -1214,72 +1150,53 @@ void WorldSession::HandleGuildBankUpdateTab( 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; - - pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex); - pGuild->DisplayGuildBankTabsInfo(this); - pGuild->DisplayGuildBankContent(this, TabId); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + { + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + { + pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex); + pGuild->DisplayGuildBankTabsInfo(this); + pGuild->DisplayGuildBankContent(this, TabId); + } + } } void WorldSession::HandleGuildBankLogQuery( WorldPacket & recv_data ) { sLog.outDebug("WORLD: Received (MSG_GUILD_BANK_LOG_QUERY)"); - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - uint8 TabId; recv_data >> TabId; - pGuild->DisplayGuildBankLogs(this, TabId); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + pGuild->DisplayGuildBankLogs(this, TabId); } void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data) { sLog.outDebug("WORLD: Received MSG_QUERY_GUILD_BANK_TEXT"); - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; - uint8 TabId; recv_data >> TabId; - pGuild->SendGuildBankTabText(this, TabId); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + pGuild->SendGuildBankTabText(this, TabId); } void WorldSession::HandleSetGuildBankTabText(WorldPacket &recv_data) { sLog.outDebug("WORLD: Received CMSG_SET_GUILD_BANK_TEXT"); - uint32 GuildId = GetPlayer()->GetGuildId(); - if (GuildId == 0) - return; - - Guild *pGuild = objmgr.GetGuildById(GuildId); - if(!pGuild) - return; uint8 TabId; std::string Text; recv_data >> TabId; recv_data >> Text; - pGuild->SetGuildBankTabText(TabId, Text); + if(uint32 GuildId = GetPlayer()->GetGuildId()) + if(Guild *pGuild = objmgr.GetGuildById(GuildId)) + pGuild->SetGuildBankTabText(TabId, Text); } void WorldSession::SendSaveGuildEmblem( uint32 msg ) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 03069a440..4441f2a79 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1466,6 +1466,12 @@ bool ObjectMgr::GetPlayerNameByGUID(const uint64 &guid, std::string &name) const uint32 ObjectMgr::GetPlayerTeamByGUID(const uint64 &guid) const { + // prevent DB access for online player + if(Player* player = GetPlayer(guid)) + { + return Player::TeamForRace(player->getRace()); + } + QueryResult *result = CharacterDatabase.PQuery("SELECT race FROM characters WHERE guid = '%u'", GUID_LOPART(guid)); if(result) @@ -1480,6 +1486,12 @@ uint32 ObjectMgr::GetPlayerTeamByGUID(const uint64 &guid) const uint32 ObjectMgr::GetPlayerAccountIdByGUID(const uint64 &guid) const { + // prevent DB access for online player + if(Player* player = GetPlayer(guid)) + { + return player->GetSession()->GetAccountId(); + } + QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = '%u'", GUID_LOPART(guid)); if(result) {