[11259] Move scheduled scripts counter to ScriptMgr

Also cleanup forward declarations.
This commit is contained in:
zergtmn 2011-03-16 20:01:03 +05:00
parent dee6d712c4
commit a6d155fc54
9 changed files with 33 additions and 33 deletions

View file

@ -34,8 +34,6 @@ class Unit;
class WorldPacket;
class InstanceData;
class Group;
struct ScriptInfo;
struct ScriptAction;
class BattleGround;
class Map;

View file

@ -127,7 +127,7 @@ bool ChatHandler::HandleReloadAllQuestCommand(char* /*args*/)
bool ChatHandler::HandleReloadAllScriptsCommand(char* /*args*/)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
PSendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -288,7 +288,7 @@ bool ChatHandler::HandleReloadGossipMenuOptionCommand(char* /*args*/)
bool ChatHandler::HandleReloadGossipScriptsCommand(char* args)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -701,7 +701,7 @@ bool ChatHandler::HandleReloadBattleEventCommand(char* /*args*/)
bool ChatHandler::HandleReloadGameObjectScriptsCommand(char* args)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -721,7 +721,7 @@ bool ChatHandler::HandleReloadGameObjectScriptsCommand(char* args)
bool ChatHandler::HandleReloadEventScriptsCommand(char* args)
{
if(sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -766,7 +766,7 @@ bool ChatHandler::HandleReloadEventAIScriptsCommand(char* /*args*/)
bool ChatHandler::HandleReloadQuestEndScriptsCommand(char* args)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -786,7 +786,7 @@ bool ChatHandler::HandleReloadQuestEndScriptsCommand(char* args)
bool ChatHandler::HandleReloadQuestStartScriptsCommand(char* args)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);
@ -806,7 +806,7 @@ bool ChatHandler::HandleReloadQuestStartScriptsCommand(char* args)
bool ChatHandler::HandleReloadSpellScriptsCommand(char* args)
{
if (sWorld.IsScriptScheduled())
if (sScriptMgr.IsScriptScheduled())
{
SendSysMessage("DB scripts used currently, please attempt reload later.");
SetSentErrorMessage(true);

View file

@ -43,7 +43,7 @@ Map::~Map()
UnloadAll(true);
if(!m_scriptSchedule.empty())
sWorld.DecreaseScheduledScriptCount(m_scriptSchedule.size());
sScriptMgr.DecreaseScheduledScriptCount(m_scriptSchedule.size());
if (m_persistentState)
m_persistentState->SetUsedByMapState(NULL); // field pointer can be deleted after this
@ -1675,11 +1675,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 (immedScript)
@ -1701,9 +1701,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)
@ -1717,7 +1717,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()))
{
@ -2823,9 +2823,9 @@ void Map::ScriptsProcess()
}
m_scriptSchedule.erase(iter);
sWorld.DecreaseScheduledScriptCount();
iter = m_scriptSchedule.begin();
sScriptMgr.DecreaseScheduledScriptCount();
}
}

View file

@ -319,7 +319,9 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>
std::bitset<TOTAL_NUMBER_OF_CELLS_PER_MAP*TOTAL_NUMBER_OF_CELLS_PER_MAP> marked_cells;
std::set<WorldObject *> i_objectsToRemove;
std::multimap<time_t, ScriptAction> m_scriptSchedule;
typedef std::multimap<time_t, ScriptAction> ScriptScheduleMap;
ScriptScheduleMap m_scriptSchedule;
InstanceData* i_data;
uint32 i_script_id;

View file

@ -66,7 +66,9 @@ ScriptMgr::ScriptMgr() :
m_pOnEffectDummyCreature(NULL),
m_pOnEffectDummyGO(NULL),
m_pOnEffectDummyItem(NULL),
m_pOnAuraDummy(NULL)
m_pOnAuraDummy(NULL),
m_scheduledScripts(0)
{
}
@ -77,7 +79,7 @@ ScriptMgr::~ScriptMgr()
void ScriptMgr::LoadScripts(ScriptMapMap& scripts, const char* tablename)
{
if (sWorld.IsScriptScheduled()) // function don't must be called in time scripts use.
if (IsScriptScheduled()) // function don't must be called in time scripts use.
return;
sLog.outString("%s :", tablename);

View file

@ -23,6 +23,7 @@
#include "Policies/Singleton.h"
#include "ObjectGuid.h"
#include "DBCEnums.h"
#include "ace/Atomic_Op.h"
struct AreaTriggerEntry;
class Aura;
@ -297,6 +298,7 @@ struct ScriptAction
typedef std::multimap<uint32, ScriptInfo> ScriptMap;
typedef std::map<uint32, ScriptMap > ScriptMapMap;
extern ScriptMapMap sQuestEndScripts;
extern ScriptMapMap sQuestStartScripts;
extern ScriptMapMap sSpellScripts;
@ -343,6 +345,11 @@ class ScriptMgr
void UnloadScriptLibrary();
bool IsScriptLibraryLoaded() const { return m_hScriptLib != NULL; }
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; }
CreatureAI* GetCreatureAI(Creature* pCreature);
InstanceData* CreateInstanceData(Map* pMap);
@ -387,6 +394,9 @@ class ScriptMgr
ScriptNameMap m_scriptNames;
MANGOS_LIBRARY_HANDLE m_hScriptLib;
//atomic op counter for active scripts amount
ACE_Atomic_Op<ACE_Thread_Mutex, long> m_scheduledScripts;
void (MANGOS_IMPORT* m_pOnInitScriptLibrary)();
void (MANGOS_IMPORT* m_pOnFreeScriptLibrary)();
const char* (MANGOS_IMPORT* m_pGetScriptLibraryVersion)();

View file

@ -93,7 +93,6 @@ World::World()
m_maxQueuedSessionCount = 0;
m_NextDailyQuestReset = 0;
m_NextWeeklyQuestReset = 0;
m_scheduledScripts = 0;
m_defaultDbcLocale = LOCALE_enUS;
m_availableDbcLocaleMask = 0;

View file

@ -27,7 +27,6 @@
#include "Timer.h"
#include "Policies/Singleton.h"
#include "SharedDefines.h"
#include "ace/Atomic_Op.h"
#include <map>
#include <set>
@ -38,8 +37,6 @@ class WorldPacket;
class WorldSession;
class Player;
class Weather;
struct ScriptAction;
struct ScriptInfo;
class SqlResultQueue;
class QueryResult;
class WorldSocket;
@ -551,11 +548,6 @@ class World
BanReturn BanAccount(BanMode mode, std::string nameOrIP, uint32 duration_secs, std::string reason, std::string author);
bool RemoveBanAccount(BanMode mode, std::string nameOrIP);
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; }
@ -618,9 +610,6 @@ class World
uint32 m_ShutdownTimer;
uint32 m_ShutdownMask;
//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];

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "11258"
#define REVISION_NR "11259"
#endif // __REVISION_NR_H__