aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-04-06 22:14:11 +0200
committerShauren <shauren.trinity@gmail.com>2025-04-06 22:14:11 +0200
commit8f07dce5c128951d80ad86838013e5bba276f3c3 (patch)
tree8470984d0481fa96a8ebd9691ab1f78830ee527b
parenta4328a92e97de42f0103aee1da83e66e82d9f976 (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.cpp34
-rw-r--r--src/server/game/Guilds/Guild.h8
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