From a6d155fc54a1d1fb3ec123dc7a3b7768f7f10d25 Mon Sep 17 00:00:00 2001 From: zergtmn Date: Wed, 16 Mar 2011 20:01:03 +0500 Subject: [PATCH] [11259] Move scheduled scripts counter to ScriptMgr Also cleanup forward declarations. --- src/game/GridMap.h | 2 -- src/game/Level3.cpp | 14 +++++++------- src/game/Map.cpp | 16 ++++++++-------- src/game/Map.h | 4 +++- src/game/ScriptMgr.cpp | 6 ++++-- src/game/ScriptMgr.h | 10 ++++++++++ src/game/World.cpp | 1 - src/game/World.h | 11 ----------- src/shared/revision_nr.h | 2 +- 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/game/GridMap.h b/src/game/GridMap.h index cbe69fc29..98bb161d0 100644 --- a/src/game/GridMap.h +++ b/src/game/GridMap.h @@ -34,8 +34,6 @@ class Unit; class WorldPacket; class InstanceData; class Group; -struct ScriptInfo; -struct ScriptAction; class BattleGround; class Map; diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 78698b957..c29162e9b 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -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); diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 4e71c6aa3..6ed780b42 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -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(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(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::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(); } } diff --git a/src/game/Map.h b/src/game/Map.h index 2090a296f..2066c36b2 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -319,7 +319,9 @@ class MANGOS_DLL_SPEC Map : public GridRefManager std::bitset marked_cells; std::set i_objectsToRemove; - std::multimap m_scriptSchedule; + + typedef std::multimap ScriptScheduleMap; + ScriptScheduleMap m_scriptSchedule; InstanceData* i_data; uint32 i_script_id; diff --git a/src/game/ScriptMgr.cpp b/src/game/ScriptMgr.cpp index 26285e065..9cec55222 100644 --- a/src/game/ScriptMgr.cpp +++ b/src/game/ScriptMgr.cpp @@ -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); diff --git a/src/game/ScriptMgr.h b/src/game/ScriptMgr.h index d8ef488de..33b5766fb 100644 --- a/src/game/ScriptMgr.h +++ b/src/game/ScriptMgr.h @@ -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 ScriptMap; typedef std::map 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 m_scheduledScripts; + void (MANGOS_IMPORT* m_pOnInitScriptLibrary)(); void (MANGOS_IMPORT* m_pOnFreeScriptLibrary)(); const char* (MANGOS_IMPORT* m_pGetScriptLibraryVersion)(); diff --git a/src/game/World.cpp b/src/game/World.cpp index 32f890ba4..7445c2d20 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -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; diff --git a/src/game/World.h b/src/game/World.h index f486fb9f5..d38248912 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -27,7 +27,6 @@ #include "Timer.h" #include "Policies/Singleton.h" #include "SharedDefines.h" -#include "ace/Atomic_Op.h" #include #include @@ -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 m_scheduledScripts; - time_t m_startTime; time_t m_gameTime; IntervalTimer m_timers[WUPDATE_COUNT]; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 68a29659d..a9829f2d3 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11258" + #define REVISION_NR "11259" #endif // __REVISION_NR_H__