diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-07-03 23:44:48 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-07-03 23:44:48 +0200 |
commit | 49ad0d2d495a9f817ad2820f8e616f3a6564b480 (patch) | |
tree | 93d6744a952dd4dabba7ef9cfe7f8c3421d2f76a /src/server/game/Events | |
parent | 306022054bec6010a63e80407c8d2f8d672b935b (diff) |
Core/Quests: Reset seasonal quests based on saved completion time and intended holiday start time
Diffstat (limited to 'src/server/game/Events')
-rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 17 | ||||
-rw-r--r-- | src/server/game/Events/GameEventMgr.h | 1 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 78c6741a8e8..5dc3630af91 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1147,7 +1147,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) @@ -1805,6 +1805,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) diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index ba13beb0b59..b0654119567 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -139,6 +139,7 @@ class TC_GAME_API GameEventMgr bool hasCreatureActiveEventExcept(ObjectGuid::LowType creature_guid, uint16 event_id); bool hasGameObjectActiveEventExcept(ObjectGuid::LowType go_guid, uint16 event_id); void SetHolidayEventTime(GameEventData& event); + time_t GetLastStartTime(uint16 event_id) const; typedef std::list<ObjectGuid::LowType> GuidList; typedef std::list<uint32> IdList; |