diff options
Diffstat (limited to 'src/game/World.cpp')
| -rw-r--r-- | src/game/World.cpp | 62 |
1 files changed, 44 insertions, 18 deletions
diff --git a/src/game/World.cpp b/src/game/World.cpp index 7dac66c99f2..bd265182f2f 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -983,6 +983,7 @@ void World::LoadConfigSettings(bool reload) } if(m_MaxVisibleDistance < m_MaxVisibleDistanceInFlight) m_MaxVisibleDistance = m_MaxVisibleDistanceInFlight; + m_MaxVisibleDistance += 1.0f; ///- Read the "Data" directory from the config file std::string dataPath = sConfig.GetStringDefault("DataDir","./"); @@ -1461,6 +1462,17 @@ void World::DetectDBCLang() sLog.outString("Using %s DBC Locale as default. All available DBC locales: %s",localeNames[m_defaultDbcLocale],availableLocalsStr.empty() ? "<none>" : availableLocalsStr.c_str()); } +void World::RecordTimeDiff(const char *text) +{ + if(m_updateTimeCount != 1) + return; + sLog.outDebugInLine("Difftime "); + sLog.outDebugInLine(text); + uint32 thisTime = getMSTime(); + sLog.outDebug(": %u.", getMSTimeDiff(m_currentTime, thisTime)); + m_currentTime = thisTime; +} + /// Update the World ! void World::Update(time_t diff) { @@ -1472,6 +1484,7 @@ void World::Update(time_t diff) sLog.outString("Update time diff: %u. Players online: %u.", m_updateTimeSum / m_updateTimeCount, GetActiveSessionCount()); m_updateTimeSum = m_updateTime; m_updateTimeCount = 1; + m_currentTime = getMSTime(); } else { @@ -1558,6 +1571,7 @@ void World::Update(time_t diff) } } } + RecordTimeDiff("UpdateAuction"); /// <li> Handle session updates when the timer has passed if (m_timers[WUPDATE_SESSIONS].Passed()) @@ -1566,6 +1580,7 @@ void World::Update(time_t diff) UpdateSessions(diff); } + RecordTimeDiff("UpdateSessions"); /// <li> Handle weather updates when the timer has passed if (m_timers[WUPDATE_WEATHERS].Passed()) @@ -1597,6 +1612,7 @@ void World::Update(time_t diff) m_timers[WUPDATE_UPTIME].Reset(); WorldDatabase.PExecute("UPDATE uptime SET uptime = %d, maxplayers = %d WHERE starttime = " I64FMTD, tmpDiff, maxClientsNum, uint64(m_startTime)); } + RecordTimeDiff("UpdateWeatherAndUptime"); /// <li> Handle all other objects if (m_timers[WUPDATE_OBJECTS].Passed()) @@ -1613,9 +1629,11 @@ void World::Update(time_t diff) sOutdoorPvPMgr.Update(diff); } + RecordTimeDiff("UpdateMaps"); // execute callbacks from sql queries that were queued recently UpdateResultQueue(); + RecordTimeDiff("UpdateResultQueue"); ///- Erase corpses once every 20 minutes if (m_timers[WUPDATE_CORPSES].Passed()) @@ -1643,6 +1661,7 @@ void World::Update(time_t diff) // And last, but not least handle the issued cli commands ProcessCliCommands(); + RecordTimeDiff("UpdateRemainingThings"); } void World::ForceGameEventUpdate() @@ -2339,6 +2358,7 @@ void World::ScriptsProcess() sLog.outError("SCRIPT_COMMAND_CALLSCRIPT calls invallid db_script_id or lowguid not present: skipping."); break; } + //our target Creature* target = NULL; if(source) //using grid searcher @@ -2360,40 +2380,46 @@ void World::ScriptsProcess() if(CreatureData const* data = objmgr.GetCreatureData(step.script->datalong)) target = ObjectAccessor::GetObjectInWorld<Creature>(data->mapid, data->posX, data->posY, MAKE_NEW_GUID(step.script->datalong, data->id, HIGHGUID_UNIT), target); } - + //sLog.outDebug("attempting to pass target..."); if(!target) break; - + //sLog.outDebug("target passed"); //Lets choose our ScriptMap map - ScriptMapMap datamap; + ScriptMapMap *datamap = NULL; switch(step.script->dataint) { - case 1: - datamap = sQuestEndScripts; + case 1://QUEST END SCRIPTMAP + datamap = &sQuestEndScripts; break; - case 2: - datamap = sQuestStartScripts; + case 2://QUEST START SCRIPTMAP + datamap = &sQuestStartScripts; break; - case 3: - datamap = sSpellScripts; + case 3://SPELLS SCRIPTMAP + datamap = &sSpellScripts; break; - case 4: - datamap = sGameObjectScripts; + case 4://GAMEOBJECTS SCRIPTMAP + datamap = &sGameObjectScripts; break; - case 5: - datamap = sEventScripts; + case 5://EVENTS SCRIPTMAP + datamap = &sEventScripts; break; - case 6: - datamap = sWaypointScripts; + case 6://WAYPOINTS SCRIPTMAP + datamap = &sWaypointScripts; break; default: sLog.outError("SCRIPT_COMMAND_CALLSCRIPT ERROR: no scriptmap present... ignoring"); - m_scriptSchedule.erase(iter); - return; + break; } + //if no scriptmap present... + if(!datamap) + break; + uint32 script_id = step.script->datalong2; + //delete iter and return it to begin pos(next one) m_scriptSchedule.erase(iter); - ScriptsStart(datamap, script_id, target, NULL); + iter = m_scriptSchedule.begin(); + + ScriptsStart(*datamap, script_id, target, NULL); return; } |
