Core/Guilds: implement weekly bonus money packet field in guild bank queries

This commit is contained in:
Ovahlord committed 2021-07-29 18:45:49 +02:00
1 parent 5d9b3b59d2
commit e03b2f41bf
7 files changed
+32 -14

No files matched your search

@@ -0,0 +1,2 @@
ALTER TABLE `guild`
ADD COLUMN `WeeklyBonusMoney` bigint UNSIGNED NOT NULL DEFAULT 0 AFTER `completedRatedBattlegroundChallenges`;
@@ -219,7 +219,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_GUILD_EMBLEM_INFO, "UPDATE guild SET EmblemStyle = ?, EmblemColor = ?, BorderStyle = ?, BorderColor = ?, BackgroundColor = ? WHERE guildid = ?", CONNECTION_ASYNC);
// 0: string, 1: string, 2: uint32, 3: uint8
PrepareStatement(CHAR_UPD_GUILD_BANK_TAB_INFO, "UPDATE guild_bank_tab SET TabName = ?, TabIcon = ? WHERE guildid = ? AND TabId = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ? WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint64, 1: uint32
PrepareStatement(CHAR_UPD_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ?, WeeklyBonusMoney = ? WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint64, 1: uint64 2: uint32
PrepareStatement(CHAR_UPD_GUILD_WEEKLY_BONUS_MONEY, "UPDATE guild SET WeeklyBonusMoney = 0", CONNECTION_ASYNC);
// 0: uint8, 1: uint32, 2: uint8, 3: uint32
PrepareStatement(CHAR_UPD_GUILD_BANK_EVENTLOG_TAB, "UPDATE guild_bank_eventlog SET TabId = ? WHERE guildid = ? AND TabId = ? AND LogGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?", CONNECTION_ASYNC); // 0: uint32, 1: uint8, 2: uint32
@@ -192,6 +192,7 @@ enum CharacterDatabaseStatements : uint32
CHAR_UPD_GUILD_EMBLEM_INFO,
CHAR_UPD_GUILD_BANK_TAB_INFO,
CHAR_UPD_GUILD_BANK_MONEY,
CHAR_UPD_GUILD_WEEKLY_BONUS_MONEY,
CHAR_UPD_GUILD_BANK_EVENTLOG_TAB,
CHAR_UPD_GUILD_RANK_BANK_MONEY,
CHAR_UPD_GUILD_BANK_TAB_TEXT,
+17 -7
View File
@@ -1302,6 +1302,7 @@ Guild::Guild():
m_createdDate(0),
m_accountsNumber(0),
m_bankMoney(0),
_weeklyBonusMoney(0),
m_eventLog(nullptr),
m_newsLog(nullptr),
_level(1),
@@ -2194,7 +2195,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool
sScriptMgr->OnGuildMemberDepositMoney(this, player, amount);
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
_ModifyBankMoney(trans, amount, true);
_ModifyBankMoney(trans, amount, true, cashFlow);
if (!cashFlow)
{
player->ModifyMoney(-int64(amount));
@@ -2397,8 +2398,9 @@ void Guild::SendBankLog(WorldSession* session, uint8 tabId) const
WorldPackets::Guild::GuildBankLogQueryResults packet;
packet.Tab = int32(tabId);
//if (tabId == GUILD_BANK_MAX_TABS && hasCashFlow)
// packet.WeeklyBonusMoney.Set(uint64(weeklyBonusMoney));
// If we have a weekly bonus money value, we can safely assume that Cash Flow has been unlocked.
if (tabId == GUILD_BANK_MAX_TABS && GetWeeklyBonusMoney())
packet.WeeklyBonusMoney.emplace(GetWeeklyBonusMoney());
packet.Entry.reserve(m_bankEventLog[tabId]->GetSize());
for (GuildLog::const_iterator itr = logs->begin(); itr != logs->end(); ++itr)
@@ -2563,7 +2565,7 @@ bool Guild::LoadFromDB(Field* fields)
_currChallengeCount[GUILD_CHALLENGE_TYPE_DUNGEON] = uint8(fields[16].GetUInt32());
_currChallengeCount[GUILD_CHALLENGE_TYPE_RAID] = uint8(fields[17].GetUInt32());
_currChallengeCount[GUILD_CHALLENGE_TYPE_RATED_BG] = uint8(fields[18].GetUInt32());
_weeklyBonusMoney = fields[19].GetUInt64();
_CreateLogHolders();
return true;
@@ -3236,10 +3238,14 @@ void Guild::_DeleteBankItems(CharacterDatabaseTransaction& trans, bool removeIte
m_bankTabs.clear();
}
bool Guild::_ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount, bool add)
bool Guild::_ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount, bool add, bool fromCashFlow /*= false*/)
{
if (add)
{
m_bankMoney += amount;
if (fromCashFlow)
_weeklyBonusMoney += amount;
}
else
{
// Check if there is enough money in bank.
@@ -3250,7 +3256,8 @@ bool Guild::_ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount,
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_BANK_MONEY);
stmt->setUInt64(0, m_bankMoney);
stmt->setUInt32(1, m_id);
stmt->setUInt64(1, _weeklyBonusMoney);
stmt->setUInt32(2, m_id);
trans->Append(stmt);
return true;
}
@@ -3803,7 +3810,7 @@ void Guild::CompleteChallenge(uint8 challengeType, Player* source)
SaveToDB(); // Save xp
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
_ModifyBankMoney(trans, uint64(gold * 10000), true);
_ModifyBankMoney(trans, uint64(gold * 10000), true, false);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_CHALLENGE);
stmt->setUInt32(0, _currChallengeCount[GUILD_CHALLENGE_TYPE_DUNGEON]);
@@ -3936,6 +3943,9 @@ void Guild::ResetTimes(bool weekly)
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RESET_CHALLENGE);
stmt->setInt32(0, m_id);
CharacterDatabase.Execute(stmt);
// Reset weekly bonus money from Cash Flow perk
_weeklyBonusMoney = 0;
}
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
+3 -1
View File
@@ -794,6 +794,7 @@ public:
uint32 GetMemberCount() const { return m_members.size(); }
time_t GetCreatedDate() const { return m_createdDate; }
uint64 GetBankMoney() const { return m_bankMoney; }
uint64 GetWeeklyBonusMoney() const { return _weeklyBonusMoney; }
bool SetName(std::string const& name);
@@ -931,6 +932,7 @@ protected:
EmblemInfo m_emblemInfo;
uint32 m_accountsNumber;
uint64 m_bankMoney;
uint64 _weeklyBonusMoney; // Bonus money from the Cash Flow guild perk
Ranks m_ranks;
Members m_members;
@@ -999,7 +1001,7 @@ private:
void _UpdateAccountsNumber();
bool _IsLeader(Player* player) const;
void _DeleteBankItems(CharacterDatabaseTransaction& trans, bool removeItemsFromDB = false);
bool _ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount, bool add);
bool _ModifyBankMoney(CharacterDatabaseTransaction& trans, uint64 amount, bool add, bool fromCashFlow = false);
void _SetLeader(CharacterDatabaseTransaction& trans, Member* pLeader);
void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
+6 -4
View File
@@ -135,8 +135,8 @@ void GuildMgr::LoadGuilds()
QueryResult result = CharacterDatabase.Query("SELECT g.guildid, g.name, g.leaderguid, g.EmblemStyle, g.EmblemColor, g.BorderStyle, g.BorderColor, "
// 7 8 9 10 11 12 13 14 15
"g.BackgroundColor, g.info, g.motd, g.createdate, g.BankMoney, g.level, g.experience, g.todayExperience, COUNT(gbt.guildid), "
// 16 17 18
"g.completedDungeonChallenges, g.completedRaidChallenges, g.completedRatedBattlegroundChallenges "
// 16 17 18 19
"g.completedDungeonChallenges, g.completedRaidChallenges, g.completedRatedBattlegroundChallenges, g.WeeklyBonusMoney "
"FROM guild g LEFT JOIN guild_bank_tab gbt ON g.guildid = gbt.guildid GROUP BY g.guildid ORDER BY g.guildid ASC");
if (!result)
@@ -645,10 +645,12 @@ void GuildMgr::ResetTimes(bool week)
stmt->setUInt32(0, uint32(GameTime::GetGameTime() - time_t(30 * DAY)));
CharacterDatabase.Execute(stmt);
// Reset week reputation for old guild member
// Reset week reputation for old guild member and reset weekly bonus money from cash flow contributions
if (week)
{
CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_RESET_OLD_GUILD_WEEK_REPUTATION));
CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_WEEKLY_BONUS_MONEY));
}
for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
if (Guild* guild = itr->second)
+1 -1
View File
@@ -249,7 +249,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/)
player->ModifyMoney(loot->gold);
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, loot->gold);
if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))
if (Guild* guild = player->GetGuild())
if (uint32 guildGold = CalculatePct(loot->gold, player->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)))
guild->HandleMemberDepositMoney(this, guildGold, true);