Another fix quest flags, Implement support weekly quests cooldowns(Original patch by GriffonHeart), also code cleanups.

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2010-04-15 08:26:30 +04:00
parent 6bcb297de4
commit 8abcca0a06
13 changed files with 244 additions and 49 deletions
+40
View File
@@ -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;