mirror of
https://github.com/mangosfour/server.git
synced 2025-12-18 10:37:01 +00:00
[9686] Implement support weekly quests cooldowns.
Part code provided by zhenya. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
e45d165a8e
commit
fdddf9188a
13 changed files with 197 additions and 11 deletions
|
|
@ -89,6 +89,7 @@ World::World()
|
|||
m_maxQueuedSessionCount = 0;
|
||||
m_resultQueue = NULL;
|
||||
m_NextDailyQuestReset = 0;
|
||||
m_NextWeeklyQuestReset = 0;
|
||||
m_scheduledScripts = 0;
|
||||
|
||||
m_defaultDbcLocale = LOCALE_enUS;
|
||||
|
|
@ -1267,6 +1268,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..." );
|
||||
sPoolMgr.Initialize();
|
||||
|
||||
|
|
@ -1346,6 +1350,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())
|
||||
{
|
||||
|
|
@ -1874,6 +1884,27 @@ void World::_UpdateRealmCharCount(QueryResult *resultCharCount, uint32 accountId
|
|||
}
|
||||
}
|
||||
|
||||
void World::InitWeeklyQuestResetTime()
|
||||
{
|
||||
QueryResult * result = CharacterDatabase.Query("SELECT NextWeeklyQuestResetTime FROM saved_variables");
|
||||
if (!result)
|
||||
{
|
||||
m_NextWeeklyQuestReset = time_t(m_gameTime + WEEK);
|
||||
CharacterDatabase.PExecute("INSERT INTO saved_variables (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);
|
||||
|
||||
delete result;
|
||||
}
|
||||
}
|
||||
|
||||
void World::InitDailyQuestResetTime()
|
||||
{
|
||||
time_t mostRecentQuestTime;
|
||||
|
|
@ -1922,6 +1953,18 @@ void World::ResetDailyQuests()
|
|||
itr->second->GetPlayer()->ResetDailyQuestStatus();
|
||||
}
|
||||
|
||||
void World::ResetWeeklyQuests()
|
||||
{
|
||||
sLog.outDetail("Weekly quests reset for all characters.");
|
||||
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 saved_variables SET NextWeeklyQuestResetTime = '"UI64FMTD"'", uint64(m_NextWeeklyQuestReset));
|
||||
}
|
||||
|
||||
void World::SetPlayerLimit( int32 limit, bool needUpdate )
|
||||
{
|
||||
if (limit < -SEC_ADMINISTRATOR)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue