Core/Arena: Fix lag caused by arena distribution (#17989)

Avoid queueing unneeded queries to save arena teams and arena team members data if nothing was changed during that week.
This commit is contained in:
Ivan Bakula
2016-10-21 12:20:24 +02:00
committed by jackpoz
parent f1cced96b3
commit 3f3dee8049
3 changed files with 15 additions and 4 deletions

View File

@@ -899,6 +899,10 @@ void ArenaTeam::SaveToDB()
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
// Save the effort and go
if (itr->WeekGames == 0)
continue;
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ARENA_TEAM_MEMBER);
stmt->setUInt16(0, itr->PersonalRating);
stmt->setUInt16(1, itr->WeekGames);
@@ -919,8 +923,12 @@ void ArenaTeam::SaveToDB()
CharacterDatabase.CommitTransaction(trans);
}
void ArenaTeam::FinishWeek()
bool ArenaTeam::FinishWeek()
{
// No need to go further than this
if (Stats.WeekGames == 0)
return false;
// Reset team stats
Stats.WeekGames = 0;
Stats.WeekWins = 0;
@@ -931,6 +939,8 @@ void ArenaTeam::FinishWeek()
itr->WeekGames = 0;
itr->WeekWins = 0;
}
return true;
}
bool ArenaTeam::IsFighting() const

View File

@@ -180,7 +180,7 @@ class TC_GAME_API ArenaTeam
void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
void FinishWeek();
bool FinishWeek(); // returns true if arena team played this week
void FinishGame(int32 mod);
protected:

View File

@@ -186,8 +186,9 @@ void ArenaTeamMgr::DistributeArenaPoints()
{
if (ArenaTeam* at = titr->second)
{
at->FinishWeek();
at->SaveToDB();
if (at->FinishWeek())
at->SaveToDB();
at->NotifyStatsChanged();
}
}