diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-07-03 23:44:48 +0200 |
|---|---|---|
| committer | Ergar <ergar@gmx.net> | 2025-07-20 17:59:45 +0200 |
| commit | cbabaa0f3a605ed8ca0742c1b4a2eb4f741a01a9 (patch) | |
| tree | 7de24d88cea3fab709f011c654d17fe97729f3d4 /src/server/game/Events/GameEventMgr.cpp | |
| parent | 97b16e2eb8c7d28bd954560cede812234932a457 (diff) | |
Core/Quests: Reset seasonal quests based on saved completion time and intended holiday start time
(cherry picked from commit 49ad0d2d495a9f817ad2820f8e616f3a6564b480)
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
| -rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index b7c240805ea..53b16101b08 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1184,7 +1184,7 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id) RunSmartAIScripts(event_id, true); // check for seasonal quest reset. - sWorld->ResetEventSeasonalQuests(event_id); + sWorld->ResetEventSeasonalQuests(event_id, GetLastStartTime(event_id)); } void GameEventMgr::UpdateEventNPCFlags(uint16 event_id) @@ -1818,6 +1818,21 @@ void GameEventMgr::SetHolidayEventTime(GameEventData& event) } } +time_t GameEventMgr::GetLastStartTime(uint16 event_id) const +{ + if (event_id >= mGameEvent.size()) + return 0; + + if (mGameEvent[event_id].state != GAMEEVENT_NORMAL) + return 0; + + SystemTimePoint now = GameTime::GetSystemTime(); + SystemTimePoint eventInitialStart = std::chrono::system_clock::from_time_t(mGameEvent[event_id].start); + Minutes occurence(mGameEvent[event_id].occurence); + SystemTimePoint::duration durationSinceLastStart = (now - eventInitialStart) % occurence; + return std::chrono::system_clock::to_time_t(now - durationSinceLastStart); +} + bool IsHolidayActive(HolidayIds id) { if (id == HOLIDAY_NONE) |
