void WorldSession::HandleGuildBankWithdrawMoney(WorldPacket& recv_data) { DEBUG_LOG("WORLD: Received (CMSG_GUILD_BANK_WITHDRAW_MONEY)"); ObjectGuid goGuid; uint64 money; recv_data >> goGuid >> money; if (!money) return; if (!GetPlayer()->GetGameObjectIfCanInteractWith(goGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; uint32 GuildId = GetPlayer()->GetGuildId(); if (GuildId == 0) return; Guild* pGuild = sGuildMgr.GetGuildById(GuildId); if (!pGuild) return; if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs()) return; if (pGuild->GetGuildBankMoney() < money) // not enough money in bank return; if (!pGuild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_WITHDRAW_GOLD)) return; CharacterDatabase.BeginTransaction(); if (!pGuild->MemberMoneyWithdraw(money, GetPlayer()->GetGUIDLow())) { CharacterDatabase.RollbackTransaction(); return; } GetPlayer()->ModifyMoney(money); GetPlayer()->SaveGoldToDB(); CharacterDatabase.CommitTransaction(); // Log pGuild->LogBankEvent(GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), GetPlayer()->GetGUIDLow(), money); pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow()); pGuild->DisplayGuildBankTabsInfo(this); pGuild->DisplayGuildBankContent(this, 0); pGuild->DisplayGuildBankMoneyUpdate(this); }
void WorldSession::HandleGuildBankDepositMoney(WorldPacket& recv_data) { DEBUG_LOG("WORLD: Received (CMSG_GUILD_BANK_DEPOSIT_MONEY)"); ObjectGuid goGuid; uint64 money; recv_data >> goGuid >> money; if (!money) return; if (!GetPlayer()->GetGameObjectIfCanInteractWith(goGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; if (GetPlayer()->GetMoney() < money) return; uint32 GuildId = GetPlayer()->GetGuildId(); if (!GuildId) return; Guild* pGuild = sGuildMgr.GetGuildById(GuildId); if (!pGuild) return; if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs()) return; CharacterDatabase.BeginTransaction(); pGuild->SetBankMoney(pGuild->GetGuildBankMoney() + money); GetPlayer()->ModifyMoney(-int64(money)); GetPlayer()->SaveGoldToDB(); CharacterDatabase.CommitTransaction(); // logging money if (_player->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_BOOL_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(this); }
/* Called when opening guild bank tab only (first one) */ void WorldSession::HandleGuildBankQueryTab(WorldPacket& recv_data) { ObjectGuid goGuid; uint8 TabId, unk1; recv_data >> goGuid >> TabId >> unk1; DEBUG_LOG("WORLD: Received (CMSG_GUILD_BANK_QUERY_TAB) TabId %u", TabId); if (!GetPlayer()->GetGameObjectIfCanInteractWith(goGuid, GAMEOBJECT_TYPE_GUILD_BANK)) return; uint32 GuildId = GetPlayer()->GetGuildId(); if (!GuildId) return; Guild* pGuild = sGuildMgr.GetGuildById(GuildId); if (!pGuild) return; if (TabId >= pGuild->GetPurchasedTabs()) return; pGuild->DisplayGuildBankContent(this, TabId); }