From 93cf5edd57cd59d963da63b95159754b658fa479 Mon Sep 17 00:00:00 2001 From: yehonal Date: Wed, 28 Feb 2018 20:20:10 +0100 Subject: Moved ScriptMgr macros to separated header and created ModuleScript it will allow Modules to create their own Hooks inside the module itself, to customize/extend their functionalities. An example of its usage will be available in VAS Module: You'll be able to disable VAS with custom conditions from other modules. --- src/server/game/Scripting/ScriptMgr.cpp | 113 +++++++++++--------------------- 1 file changed, 40 insertions(+), 73 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.cpp') diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 432b3c141a..f0a8f61009 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -22,6 +22,39 @@ #include "WorldPacket.h" #include "Chat.h" +// Specialize for each script type class like so: +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; +template class ScriptRegistry; + +#include "ScriptMgrMacros.h" + // This is the global static registry of scripts. /*template class ScriptRegistry @@ -119,35 +152,6 @@ class ScriptRegistry static uint32 _scriptIdCounter; };*/ -// Utility macros to refer to the script registry. -#define SCR_REG_MAP(T) ScriptRegistry::ScriptMap -#define SCR_REG_ITR(T) ScriptRegistry::ScriptMapIterator -#define SCR_REG_LST(T) ScriptRegistry::ScriptPointerList - -// Utility macros for looping over scripts. -#define FOR_SCRIPTS(T, C, E) \ - if (!SCR_REG_LST(T).empty()) \ - for (SCR_REG_ITR(T) C = SCR_REG_LST(T).begin(); \ - C != SCR_REG_LST(T).end(); ++C) -#define FOR_SCRIPTS_RET(T, C, E, R) \ - if (SCR_REG_LST(T).empty()) \ - return R; \ - for (SCR_REG_ITR(T) C = SCR_REG_LST(T).begin(); \ - C != SCR_REG_LST(T).end(); ++C) -#define FOREACH_SCRIPT(T) \ - FOR_SCRIPTS(T, itr, end) \ - itr->second - -// Utility macros for finding specific scripts. -#define GET_SCRIPT(T, I, V) \ - T* V = ScriptRegistry::GetScriptById(I); \ - if (!V) \ - return; -#define GET_SCRIPT_RET(T, I, V, R) \ - T* V = ScriptRegistry::GetScriptById(I); \ - if (!V) \ - return R; - ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0) { @@ -196,6 +200,8 @@ void ScriptMgr::Unload() SCR_CLEAR(PlayerScript); SCR_CLEAR(GuildScript); SCR_CLEAR(GroupScript); + SCR_CLEAR(GlobalScript); + SCR_CLEAR(ModuleScript); #undef SCR_CLEAR } @@ -1799,48 +1805,9 @@ GlobalScript::GlobalScript(const char* name) ScriptRegistry::AddScript(this); } -// Instantiate static members of ScriptRegistry. -template std::map ScriptRegistry::ScriptPointerList; -template std::vector ScriptRegistry::ALScripts; -template uint32 ScriptRegistry::_scriptIdCounter = 0; - -// Specialize for each script type class like so: -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; -template class ScriptRegistry; +ModuleScript::ModuleScript(const char* name) + : ScriptObject(name) +{ + ScriptRegistry::AddScript(this); +} -// Undefine utility macros. -#undef GET_SCRIPT_RET -#undef GET_SCRIPT -#undef FOREACH_SCRIPT -#undef FOR_SCRIPTS_RET -#undef FOR_SCRIPTS -#undef SCR_REG_LST -#undef SCR_REG_ITR -#undef SCR_REG_MAP -- cgit v1.2.3