Another fix quest flags, Implement support weekly quests cooldowns(Original patch by GriffonHeart), also code cleanups.
--HG-- branch : trunk
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user