aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzergtmn <zerg@myisp.com>2011-04-13 12:07:20 +0600
committerAzazel <azazel.kon@gmail.com>2011-04-13 12:07:20 +0600
commit1551b8a01186874df8076e500e3d5ee8f5cf127b (patch)
tree004af12a19317693031afbb220ee9c8cfac5d434 /src
parente196dd80bdc919300ad0995728b03e70d76de6a2 (diff)
Core/Misc: move scheduled scripts counter to ScriptMgr (which is more logical, isn't it?)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp4
-rwxr-xr-xsrc/server/game/Maps/Map.cpp2
-rwxr-xr-xsrc/server/game/Maps/Map.h4
-rwxr-xr-xsrc/server/game/Scripting/MapScripts.cpp14
-rwxr-xr-xsrc/server/game/Scripting/ScriptMgr.cpp2
-rwxr-xr-xsrc/server/game/Scripting/ScriptMgr.h10
-rwxr-xr-xsrc/server/game/World/World.cpp5
-rwxr-xr-xsrc/server/game/World/World.h10
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp16
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);