aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-03 23:44:48 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-03 23:44:48 +0200
commit49ad0d2d495a9f817ad2820f8e616f3a6564b480 (patch)
tree93d6744a952dd4dabba7ef9cfe7f8c3421d2f76a /src/server/game/Events
parent306022054bec6010a63e80407c8d2f8d672b935b (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.cpp17
-rw-r--r--src/server/game/Events/GameEventMgr.h1
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;