aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events/GameEventMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r--src/server/game/Events/GameEventMgr.cpp17
1 files changed, 16 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)