diff options
author | n0n4m3 <none@none> | 2010-04-15 08:26:30 +0400 |
---|---|---|
committer | n0n4m3 <none@none> | 2010-04-15 08:26:30 +0400 |
commit | 8abcca0a06d48d4c9d7039bf7a6b27c57f7eb878 (patch) | |
tree | 849deb42364506716453fd34131d4fea0af972f8 /src/game/World.cpp | |
parent | 6bcb297de4d5231373a3e2bf2b40e527b91cdf46 (diff) |
Another fix quest flags, Implement support weekly quests cooldowns(Original patch by GriffonHeart), also code cleanups.
--HG--
branch : trunk
Diffstat (limited to 'src/game/World.cpp')
-rw-r--r-- | src/game/World.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/game/World.cpp b/src/game/World.cpp index 057e3489216..7419e65772d 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -105,6 +105,7 @@ World::World() m_MaxPlayerCount = 0; m_resultQueue = NULL; m_NextDailyQuestReset = 0; + m_NextWeeklyQuestReset = 0; m_scheduledScripts = 0; m_defaultDbcLocale = LOCALE_enUS; @@ -1680,6 +1681,9 @@ void World::SetInitialWorldSettings() sLog.outString("Calculate next daily quest reset time..."); InitDailyQuestResetTime(); + sLog.outString("Calculate next weekly quest reset time..." ); + InitWeeklyQuestResetTime(); + sLog.outString("Starting objects Pooling system..."); poolhandler.Initialize(); @@ -1844,6 +1848,12 @@ void World::Update(uint32 diff) m_NextDailyQuestReset += DAY; } + if (m_gameTime > m_NextWeeklyQuestReset) + { + ResetWeeklyQuests(); + m_NextWeeklyQuestReset += WEEK; + } + /// <ul><li> Handle auctions when the timer has passed if (m_timers[WUPDATE_AUCTIONS].Passed()) { @@ -2486,6 +2496,25 @@ void World::_UpdateRealmCharCount(QueryResult_AutoPtr resultCharCount, uint32 ac } } +void World::InitWeeklyQuestResetTime() +{ + QueryResult_AutoPtr result = CharacterDatabase.Query("SELECT NextWeeklyQuestResetTime FROM worldstates"); + if (!result) + { + m_NextWeeklyQuestReset = time_t(m_gameTime + WEEK); + CharacterDatabase.PExecute("INSERT INTO worldstates (NextWeeklyQuestResetTime) VALUES ('"UI64FMTD"')", uint64(m_NextWeeklyQuestReset)); + } + else + { + m_NextWeeklyQuestReset = time_t((*result)[0].GetUInt64()); + + // move to just before if need + time_t cur = time(NULL); + if (m_NextWeeklyQuestReset < cur) + m_NextWeeklyQuestReset += WEEK * ((cur - m_NextWeeklyQuestReset) / WEEK); + } +} + void World::InitDailyQuestResetTime() { time_t mostRecentQuestTime; @@ -2543,6 +2572,17 @@ void World::UpdateAllowedSecurity() } } +void World::ResetWeeklyQuests() +{ + CharacterDatabase.Execute("DELETE FROM character_queststatus_weekly"); + for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) + if (itr->second->GetPlayer()) + itr->second->GetPlayer()->ResetWeeklyQuestStatus(); + + m_NextWeeklyQuestReset = time_t(m_NextWeeklyQuestReset + WEEK); + CharacterDatabase.PExecute("UPDATE worldstates SET NextWeeklyQuestResetTime = '"UI64FMTD"'", uint64(m_NextWeeklyQuestReset)); +} + void World::SetPlayerLimit(int32 limit, bool needUpdate) { m_playerLimit = limit; |