From 646fc8276a9341c9266a31a060bec4a538f348ed Mon Sep 17 00:00:00 2001 From: Trazom62 Date: Thu, 4 Feb 2010 22:03:09 +0100 Subject: Fix ResetInstance. Fixes issue #70. Reset Instance was removed during the merge to 3.2.2, then fixed again, then backed-out due to bug. This latter is now fixed. Thanks to the original authors (already credited in old rev). --HG-- branch : trunk --- src/game/InstanceSaveMgr.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/game') diff --git a/src/game/InstanceSaveMgr.cpp b/src/game/InstanceSaveMgr.cpp index 9e8cd3eb694..b94dbe38377 100644 --- a/src/game/InstanceSaveMgr.cpp +++ b/src/game/InstanceSaveMgr.cpp @@ -501,7 +501,9 @@ void InstanceSaveManager::LoadResetTimes() continue; // the reset_delay must be at least one day - uint32 period = (mapDiff->resetTime / DAY * sWorld.getRate(RATE_INSTANCE_RESET_TIME)) * DAY; + uint32 period = ((mapDiff->resetTime * sWorld.getRate(RATE_INSTANCE_RESET_TIME))/DAY) * DAY; + if (period < DAY) + period = DAY; time_t t = GetResetTimeFor(mapid,difficulty); if(!t) @@ -529,6 +531,8 @@ void InstanceSaveManager::LoadResetTimes() if(t - tim[type-1] > now) break; + ScheduleReset(true, t - tim[type-1], InstResetEvent(type, mapid, difficulty, -1)); + for(ResetTimeMapDiffInstances::const_iterator in_itr = mapDiffResetInstances.lower_bound(map_diff_pair); in_itr != mapDiffResetInstances.upper_bound(map_diff_pair); ++in_itr) { @@ -662,8 +666,16 @@ void InstanceSaveManager::_ResetOrWarnAll(uint32 mapid, Difficulty difficulty, b // calculate the next reset time uint32 diff = sWorld.getConfig(CONFIG_INSTANCE_RESET_TIME_HOUR) * HOUR; - uint32 period = mapDiff->resetTime * DAY; + + uint32 period = ((mapDiff->resetTime * sWorld.getRate(RATE_INSTANCE_RESET_TIME))/DAY) * DAY; + if (period < DAY) + period = DAY; + uint64 next_reset = ((now + timeLeft + MINUTE) / DAY * DAY) + period + diff; + + SetResetTimeFor(mapid, difficulty, next_reset); + ScheduleReset(true, time_t(next_reset-3600), InstResetEvent(1, mapid, difficulty, -1)); + // update it in the DB CharacterDatabase.PExecute("UPDATE instance_reset SET resettime = '"UI64FMTD"' WHERE mapid = '%d' AND difficulty = '%d'", next_reset, mapid, difficulty); } -- cgit v1.2.3