feat(core): Ensure that all actions are compared to fixed point in time (#1236) (#1458)

i.e. world update start
This commit is contained in:
Viste(Кирилл)
2019-02-14 21:22:17 +03:00
committed by Francesco Borzì
parent 1b7522ff0e
commit 51b8773528
108 changed files with 933 additions and 509 deletions

View File

@@ -17,6 +17,7 @@
#include "DBCEnums.h"
#include "DisableMgr.h"
#include "GameEventMgr.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Guild.h"
#include "GuildMgr.h"
@@ -434,7 +435,7 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
birthday_tm.tm_year += birthday_login.nth_birthday;
time_t birthday = mktime(&birthday_tm);
time_t now = sWorld->GetGameTime();
time_t now = GameTime::GetGameTime();
return now <= birthday + DAY && now >= birthday;
}
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE:
@@ -642,7 +643,7 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ
continue;
}
if (criteria->timeLimit && time_t(date + criteria->timeLimit) < time(NULL))
if (criteria->timeLimit && time_t(date + criteria->timeLimit) < GameTime::GetGameTime())
continue;
CriteriaProgress& progress = m_criteriaProgress[id];
@@ -701,7 +702,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
data.append(GetPlayer()->GetPackGUID());
data << uint32(achievement->ID);
data.AppendPackedTime(time(NULL));
data.AppendPackedTime(GameTime::GetGameTime());
data << uint32(0);
GetPlayer()->SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true);
}
@@ -2043,7 +2044,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
}
progress->changed = true;
progress->date = time(NULL); // set the date to the latest update.
progress->date = GameTime::GetGameTime(); // set the date to the latest update.
uint32 timeElapsed = 0;
bool timedCompleted = false;
@@ -2163,7 +2164,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
SendAchievementEarned(achievement);
CompletedAchievementData& ca = m_completedAchievements[achievement->ID];
ca.date = time(NULL);
ca.date = GameTime::GetGameTime();
ca.changed = true;
sScriptMgr->OnAchievementComplete(GetPlayer(), achievement);