diff options
| author | SnapperRy <snapperryen@gmail.com> | 2016-08-23 15:49:38 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-23 15:49:38 +0200 |
| commit | fb6d4dd98f66ec67f7c5ddf698b3e6a0b44925b4 (patch) | |
| tree | e9bd7d4fd368da83490382a30f5e836f0b43dab6 /src | |
| parent | 6036b07f2515bec008df3ec02ab71b90e4384229 (diff) | |
Core/Event: prevent seasonal quests from resetting at server restart (#17455)
Closes #16015.
Closes #16413.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index bb8e89d4829..39d55ef784e 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -139,6 +139,9 @@ bool GameEventMgr::StartEvent(uint16 event_id, bool overwrite) if (data.end <= data.start) data.end = data.start + data.length; } + + // When event is started, set its worldstate to current time + sWorld->setWorldState(event_id, time(NULL)); return false; } else @@ -174,6 +177,9 @@ void GameEventMgr::StopEvent(uint16 event_id, bool overwrite) RemoveActiveEvent(event_id); UnApplyEvent(event_id); + // When event is stopped, clean up its worldstate + sWorld->setWorldState(event_id, 0); + if (overwrite && !serverwide_evt) { data.start = time(NULL) - data.length * MINUTE; @@ -1033,6 +1039,8 @@ uint32 GameEventMgr::Update() // return the next e } else { + // If event is inactive, periodically clean up its worldstate + sWorld->setWorldState(itr, 0); //TC_LOG_DEBUG("misc", "GameEvent %u is not active", itr->first); if (IsActiveEvent(itr)) deactivate.insert(itr); @@ -1115,8 +1123,10 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id) UpdateEventNPCVendor(event_id, true); // update bg holiday UpdateBattlegroundSettings(); - // check for seasonal quest reset. - sWorld->ResetEventSeasonalQuests(event_id); + // If event's worldstate is 0, it means the event hasn't been started yet. In that case, reset seasonal quests. + // When event ends (if it expires or if it's stopped via commands) worldstate will be set to 0 again, ready for another seasonal quest reset. + if (sWorld->getWorldState(event_id) == 0) + sWorld->ResetEventSeasonalQuests(event_id); } void GameEventMgr::UpdateEventNPCFlags(uint16 event_id) |
