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 | |
parent | a4328a92e97de42f0103aee1da83e66e82d9f976 (diff) |
Core/Guilds: Guild bank tabs are now purchased only using money deposited in the bank (since 11.1.0)
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 34 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.h | 8 |
2 files changed, 22 insertions, 20 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) diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index ea39a1682b7..aa7ad50ffe8 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -201,8 +201,8 @@ enum GuildBankEventLogTypes GUILD_BANK_LOG_WITHDRAW_MONEY = 5, GUILD_BANK_LOG_REPAIR_MONEY = 6, GUILD_BANK_LOG_MOVE_ITEM2 = 7, - GUILD_BANK_LOG_UNK1 = 8, - GUILD_BANK_LOG_BUY_SLOT = 9, + GUILD_BANK_LOG_WITHDRAW_TO_BUY_TAB = 8, + GUILD_BANK_LOG_BUY_TAB = 9, GUILD_BANK_LOG_CASH_FLOW_DEPOSIT = 10 }; @@ -472,6 +472,8 @@ class TC_GAME_API Guild eventType == GUILD_BANK_LOG_DEPOSIT_MONEY || eventType == GUILD_BANK_LOG_WITHDRAW_MONEY || eventType == GUILD_BANK_LOG_REPAIR_MONEY || + eventType == GUILD_BANK_LOG_WITHDRAW_TO_BUY_TAB || + eventType == GUILD_BANK_LOG_BUY_TAB || eventType == GUILD_BANK_LOG_CASH_FLOW_DEPOSIT; } @@ -943,7 +945,7 @@ class TC_GAME_API Guild static void _DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType lowguid); // Tries to create new bank tab - void _CreateNewBankTab(); + void _CreateNewBankTab(CharacterDatabaseTransaction trans); // Creates default guild ranks with names in given locale void _CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc); // Creates new rank |