Core/Guilds: implement weekly bonus money packet field in guild bank queries
This commit is contained in:
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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in new issue
Block a user