diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-04-06 22:14:11 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-04-06 22:14:11 +0200 |
commit | 8f07dce5c128951d80ad86838013e5bba276f3c3 (patch) | |
tree | 8470984d0481fa96a8ebd9691ab1f78830ee527b /src/server/game/Guilds/Guild.cpp | |
parent | a4328a92e97de42f0103aee1da83e66e82d9f976 (diff) |
Core/Guilds: Guild bank tabs are now purchased only using money deposited in the bank (since 11.1.0)
Diffstat (limited to 'src/server/game/Guilds/Guild.cpp')
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 314cd3d3f18..4a270a005f9 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1644,6 +1644,9 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId) if (!member) return; + if (GetLeaderGUID() != player->GetGUID()) + return; + if (_GetPurchasedTabsSize() >= GUILD_BANK_MAX_TABS) return; @@ -1653,18 +1656,19 @@ void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId) if (tabId >= GUILD_BANK_MAX_TABS) return; - // Do not get money for bank tabs that the GM bought, we had to buy them already. - // This is just a speedup check, GetGuildBankTabPrice will return 0. - if (tabId < GUILD_BANK_MAX_TABS - 2) // 7th tab is actually the 6th - { - int64 tabCost = GetGuildBankTabPrice(tabId) * GOLD; - if (!player->HasEnoughMoney(tabCost)) // Should not happen, this is checked by client - return; + CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); - player->ModifyMoney(-tabCost); - } + // Remove money from bank + uint64 tabCost = GetGuildBankTabPrice(tabId) * GOLD; + if (tabCost && !_ModifyBankMoney(trans, tabCost, false)) // Should not happen, this is checked by client + return; - _CreateNewBankTab(); + // Log guild bank event + _LogBankEvent(trans, GUILD_BANK_LOG_BUY_TAB, tabId, player->GetGUID().GetCounter(), tabCost); + + _CreateNewBankTab(trans); + + CharacterDatabase.CommitTransaction(trans); WorldPackets::Guild::GuildEventTabAdded packet; BroadcastPacket(packet.Write()); @@ -3145,13 +3149,11 @@ void Guild::_DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid:: } // Private methods -void Guild::_CreateNewBankTab() +void Guild::_CreateNewBankTab(CharacterDatabaseTransaction trans) { uint8 tabId = _GetPurchasedTabsSize(); // Next free id m_bankTabs.emplace_back(m_id, tabId); - CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_BANK_TAB); stmt->setUInt64(0, m_id); stmt->setUInt8 (1, tabId); @@ -3163,10 +3165,8 @@ void Guild::_CreateNewBankTab() trans->Append(stmt); ++tabId; - for (auto itr = m_ranks.begin(); itr != m_ranks.end(); ++itr) - (*itr).CreateMissingTabsIfNeeded(tabId, trans, false); - - CharacterDatabase.CommitTransaction(trans); + for (RankInfo& rank : m_ranks) + rank.CreateMissingTabsIfNeeded(tabId, trans, false); } void Guild::_CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc) |