diff options
| -rwxr-xr-x | src/server/game/Globals/ObjectMgr.cpp | 4 | ||||
| -rwxr-xr-x | src/server/game/Maps/Map.cpp | 2 | ||||
| -rwxr-xr-x | src/server/game/Maps/Map.h | 4 | ||||
| -rwxr-xr-x | src/server/game/Scripting/MapScripts.cpp | 14 | ||||
| -rwxr-xr-x | src/server/game/Scripting/ScriptMgr.cpp | 2 | ||||
| -rwxr-xr-x | src/server/game/Scripting/ScriptMgr.h | 10 | ||||
| -rwxr-xr-x | src/server/game/World/World.cpp | 5 | ||||
| -rwxr-xr-x | src/server/game/World/World.h | 10 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_reload.cpp | 16 |
9 files changed, 34 insertions, 33 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 5fec0c4806b..626e0e307ea 100755 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4907,12 +4907,12 @@ void ObjectMgr::LoadScripts(ScriptsType type) if (tableName.empty()) return; - if (sWorld->IsScriptScheduled()) // function don't must be called in time scripts use. + if (sScriptMgr->IsScriptScheduled()) // function cannot be called when scripts are in use. return; sLog->outString("Loading %s...", tableName.c_str()); - scripts->clear(); // need for reload support + scripts->clear(); // need for reload support bool isSpellScriptTable = (type == SCRIPTS_SPELL); char buff[125]; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 0927e0c14a6..a876903b7a1 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -53,7 +53,7 @@ Map::~Map() } if (!m_scriptSchedule.empty()) - sWorld->DecreaseScheduledScriptCount(m_scriptSchedule.size()); + sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); } bool Map::ExistMap(uint32 mapid,int gx,int gy) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index c98bdce473b..98b9a4a0baa 100755 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -533,7 +533,9 @@ class Map : public GridRefManager<NGridType> std::set<WorldObject *> i_objectsToRemove; std::map<WorldObject*, bool> i_objectsToSwitch; std::set<WorldObject*> i_worldObjects; - std::multimap<time_t, ScriptAction> m_scriptSchedule; + + typedef std::multimap<time_t, ScriptAction> ScriptScheduleMap; + ScriptScheduleMap m_scriptSchedule; // Type specific code for add/remove to/from grid template<class T> diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index 7460acf43ef..7a54ec5df21 100755 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -28,6 +28,7 @@ #include "MapManager.h" #include "ObjectMgr.h" #include "MapRefManager.h" +#include "ScriptMgr.h" /// Put scripts in the execution queue void Map::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source, Object* target) @@ -53,11 +54,11 @@ void Map::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source, O sa.ownerGUID = ownerGUID; sa.script = &iter->second; - m_scriptSchedule.insert(std::pair<time_t, ScriptAction>(time_t(sWorld->GetGameTime() + iter->first), sa)); + m_scriptSchedule.insert(ScriptScheduleMap::value_type(time_t(sWorld->GetGameTime() + iter->first), sa)); if (iter->first == 0) immedScript = true; - sWorld->IncreaseScheduledScriptsCount(); + sScriptMgr->IncreaseScheduledScriptsCount(); } ///- If one of the effects should be immediate, launch the script execution if (/*start &&*/ immedScript && !i_scriptLock) @@ -83,9 +84,9 @@ void Map::ScriptCommandStart(ScriptInfo const& script, uint32 delay, Object* sou sa.ownerGUID = ownerGUID; sa.script = &script; - m_scriptSchedule.insert(std::pair<time_t, ScriptAction>(time_t(sWorld->GetGameTime() + delay), sa)); + m_scriptSchedule.insert(ScriptScheduleMap::value_type(time_t(sWorld->GetGameTime() + delay), sa)); - sWorld->IncreaseScheduledScriptsCount(); + sScriptMgr->IncreaseScheduledScriptsCount(); ///- If effects should be immediate, launch the script execution if (delay == 0 && !i_scriptLock) @@ -289,7 +290,7 @@ void Map::ScriptsProcess() return; ///- Process overdue queued scripts - std::multimap<time_t, ScriptAction>::iterator iter = m_scriptSchedule.begin(); + ScriptScheduleMap::iterator iter = m_scriptSchedule.begin(); // ok as multimap is a *sorted* associative container while (!m_scriptSchedule.empty() && (iter->first <= sWorld->GetGameTime())) { @@ -923,8 +924,7 @@ void Map::ScriptsProcess() } m_scriptSchedule.erase(iter); - sWorld->DecreaseScheduledScriptCount(); - iter = m_scriptSchedule.begin(); + sScriptMgr->DecreaseScheduledScriptCount(); } } diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 8849194a8c5..82197da0a81 100755 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -135,7 +135,7 @@ void DoScriptText(int32 iTextEntry, WorldObject* pSource, Unit* pTarget) } ScriptMgr::ScriptMgr() - : _scriptCount(0) + : _scriptCount(0), _scheduledScripts(0) { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 5153bd12087..80888204053 100755 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -21,6 +21,7 @@ #include "Common.h" #include <ace/Singleton.h> +#include <ace/Atomic_Op.h> #include "DBCStores.h" #include "Player.h" @@ -766,6 +767,9 @@ class ScriptMgr uint32 _scriptCount; + //atomic op counter for active scripts amount + ACE_Atomic_Op<ACE_Thread_Mutex, long> _scheduledScripts; + public: /* Initialization */ void Initialize(); @@ -971,6 +975,12 @@ class ScriptMgr void OnGroupChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid); void OnGroupDisband(Group* group); + public: /* Scheduled scripts */ + uint32 IncreaseScheduledScriptsCount() { return uint32(++_scheduledScripts); } + uint32 DecreaseScheduledScriptCount() { return uint32(--_scheduledScripts); } + uint32 DecreaseScheduledScriptCount(size_t count) { return uint32(_scheduledScripts -= count); } + bool IsScriptScheduled() const { return _scheduledScripts > 0; } + public: /* ScriptRegistry */ // This is the global static registry of scripts. diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1c4022d152e..f0e10b8bd74 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -92,15 +92,14 @@ World::World() m_allowMovement = true; m_ShutdownMask = 0; m_ShutdownTimer = 0; - m_gameTime=time(NULL); - m_startTime=m_gameTime; + m_gameTime = time(NULL); + m_startTime = m_gameTime; m_maxActiveSessionCount = 0; m_maxQueuedSessionCount = 0; m_PlayerCount = 0; m_MaxPlayerCount = 0; m_NextDailyQuestReset = 0; m_NextWeeklyQuestReset = 0; - m_scheduledScripts = 0; m_defaultDbcLocale = LOCALE_enUS; m_availableDbcLocaleMask = 0; diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index e15433dea3e..2a1b69b6063 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -27,7 +27,6 @@ #include "Timer.h" #include <ace/Singleton.h> #include "SharedDefines.h" -#include <ace/Atomic_Op.h> #include "QueryResult.h" #include "Callback.h" @@ -39,7 +38,6 @@ class Object; class WorldPacket; class WorldSession; class Player; -struct ScriptInfo; class WorldSocket; class SystemMgr; @@ -697,11 +695,6 @@ class World BanReturn BanCharacter(std::string name, std::string duration, std::string reason, std::string author); bool RemoveBanCharacter(std::string name); - uint32 IncreaseScheduledScriptsCount() { return (uint32)++m_scheduledScripts; } - uint32 DecreaseScheduledScriptCount() { return (uint32)--m_scheduledScripts; } - uint32 DecreaseScheduledScriptCount(size_t count) { return (uint32)(m_scheduledScripts -= count); } - bool IsScriptScheduled() const { return m_scheduledScripts > 0; } - // for max speed access static float GetMaxVisibleDistanceOnContinents() { return m_MaxVisibleDistanceOnContinents; } static float GetMaxVisibleDistanceInInstances() { return m_MaxVisibleDistanceInInstances; } @@ -760,9 +753,6 @@ class World bool m_isClosed; - //atomic op counter for active scripts amount - ACE_Atomic_Op<ACE_Thread_Mutex, long> m_scheduledScripts; - time_t m_startTime; time_t m_gameTime; IntervalTimer m_timers[WUPDATE_COUNT]; diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 45579ff1e64..9bd6de9f6be 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -248,7 +248,7 @@ public: static bool HandleReloadAllScriptsCommand(ChatHandler* handler, const char* /*args*/) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->PSendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -946,7 +946,7 @@ public: static bool HandleReloadGossipScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -966,7 +966,7 @@ public: static bool HandleReloadGameObjectScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -986,7 +986,7 @@ public: static bool HandleReloadEventScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -1006,7 +1006,7 @@ public: static bool HandleReloadWpScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -1051,7 +1051,7 @@ public: static bool HandleReloadQuestEndScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -1071,7 +1071,7 @@ public: static bool HandleReloadQuestStartScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); @@ -1091,7 +1091,7 @@ public: static bool HandleReloadSpellScriptsCommand(ChatHandler* handler, const char* args) { - if (sWorld->IsScriptScheduled()) + if (sScriptMgr->IsScriptScheduled()) { handler->SendSysMessage("DB scripts used currently, please attempt reload later."); handler->SetSentErrorMessage(true); |
