aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events/GameEventMgr.cpp
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-08-23 15:49:38 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-18 14:47:00 +0100
commit6a8ca9b0bf6f7cd355e1994723d6be6a5003d4d4 (patch)
treefd72f37d93d2fcbd5294e376fcbd488f2898b387 /src/server/game/Events/GameEventMgr.cpp
parenta6209e6d6d08a3ef5ef71b8799eb07eefd04275a (diff)
Core/Event: prevent seasonal quests from resetting at server restart (#17455)
Closes #16015. Closes #16413. (cherry picked from commit fb6d4dd98f66ec67f7c5ddf698b3e6a0b44925b4)
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r--src/server/game/Events/GameEventMgr.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp
index 213f90453a1..a3ef39313d2 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;
@@ -1034,6 +1040,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);
@@ -1116,8 +1124,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)