From cfd7bf416207f78028ed1532db3d2bfd44dab406 Mon Sep 17 00:00:00 2001 From: Walter Pagani Date: Sat, 21 Sep 2024 17:25:22 -0300 Subject: [PATCH] chore(Core/AllMapScript) Update structure (#19979) * fix(Core/AllMapScript) Update structure to use CALL_ENABLED_HOOKS * fatal error: no template named 'vector' in namespace 'std' * fix build Co-authored-by: Anton Popovichenko --------- Co-authored-by: Anton Popovichenko --- .../Scripting/ScriptDefines/AllMapScript.cpp | 45 ++++++------------- .../Scripting/ScriptDefines/AllMapScript.h | 15 ++++++- src/server/game/Scripting/ScriptMgr.cpp | 1 + 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/server/game/Scripting/ScriptDefines/AllMapScript.cpp b/src/server/game/Scripting/ScriptDefines/AllMapScript.cpp index c778b8fff..a43907365 100644 --- a/src/server/game/Scripting/ScriptDefines/AllMapScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/AllMapScript.cpp @@ -88,10 +88,7 @@ void ScriptMgr::OnCreateMap(Map* map) { ASSERT(map); - ExecuteScript([&](AllMapScript* script) - { - script->OnCreateMap(map); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_CREATE_MAP, script->OnCreateMap(map)); ForeachMaps(map, [&](WorldMapScript* script) @@ -116,10 +113,7 @@ void ScriptMgr::OnDestroyMap(Map* map) { ASSERT(map); - ExecuteScript([&](AllMapScript* script) - { - script->OnDestroyMap(map); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_DESTROY_MAP, script->OnDestroyMap(map)); ForeachMaps(map, [&](WorldMapScript* script) @@ -193,10 +187,7 @@ void ScriptMgr::OnPlayerEnterMap(Map* map, Player* player) ASSERT(map); ASSERT(player); - ExecuteScript([&](AllMapScript* script) - { - script->OnPlayerEnterAll(map, player); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_PLAYER_ENTER_ALL, script->OnPlayerEnterAll(map, player)); ExecuteScript([=](PlayerScript* script) { @@ -227,10 +218,7 @@ void ScriptMgr::OnPlayerLeaveMap(Map* map, Player* player) ASSERT(map); ASSERT(player); - ExecuteScript([&](AllMapScript* script) - { - script->OnPlayerLeaveAll(map, player); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_PLAYER_LEAVE_ALL, script->OnPlayerLeaveAll(map, player)); ForeachMaps(map, [&](WorldMapScript* script) @@ -255,10 +243,7 @@ void ScriptMgr::OnMapUpdate(Map* map, uint32 diff) { ASSERT(map); - ExecuteScript([&](AllMapScript* script) - { - script->OnMapUpdate(map, diff); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_MAP_UPDATE, script->OnMapUpdate(map, diff)); ForeachMaps(map, [&](WorldMapScript* script) @@ -281,24 +266,22 @@ void ScriptMgr::OnMapUpdate(Map* map, uint32 diff) void ScriptMgr::OnBeforeCreateInstanceScript(InstanceMap* instanceMap, InstanceScript** instanceData, bool load, std::string data, uint32 completedEncounterMask) { - ExecuteScript([&](AllMapScript* script) - { - script->OnBeforeCreateInstanceScript(instanceMap, instanceData, load, data, completedEncounterMask); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_BEFORE_CREATE_INSTANCE_SCRIPT, script->OnBeforeCreateInstanceScript(instanceMap, instanceData, load, data, completedEncounterMask)); } void ScriptMgr::OnDestroyInstance(MapInstanced* mapInstanced, Map* map) { - ExecuteScript([&](AllMapScript* script) - { - script->OnDestroyInstance(mapInstanced, map); - }); + CALL_ENABLED_HOOKS(AllMapScript, ALLMAPHOOK_ON_DESTROY_INSTANCE, script->OnDestroyInstance(mapInstanced, map)); } -AllMapScript::AllMapScript(const char* name) : - ScriptObject(name) +AllMapScript::AllMapScript(const char* name, std::vector enabledHooks) : ScriptObject(name, ALLMAPHOOK_END) { - ScriptRegistry::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < ALLMAPHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry; diff --git a/src/server/game/Scripting/ScriptDefines/AllMapScript.h b/src/server/game/Scripting/ScriptDefines/AllMapScript.h index 77479fc1b..86e7a0e6d 100644 --- a/src/server/game/Scripting/ScriptDefines/AllMapScript.h +++ b/src/server/game/Scripting/ScriptDefines/AllMapScript.h @@ -19,11 +19,24 @@ #define SCRIPT_OBJECT_ALL_MAP_SCRIPT_H_ #include "ScriptObject.h" +#include + +enum AllMapHook +{ + ALLMAPHOOK_ON_PLAYER_ENTER_ALL, + ALLMAPHOOK_ON_PLAYER_LEAVE_ALL, + ALLMAPHOOK_ON_BEFORE_CREATE_INSTANCE_SCRIPT, + ALLMAPHOOK_ON_DESTROY_INSTANCE, + ALLMAPHOOK_ON_CREATE_MAP, + ALLMAPHOOK_ON_DESTROY_MAP, + ALLMAPHOOK_ON_MAP_UPDATE, + ALLMAPHOOK_END +}; class AllMapScript : public ScriptObject { protected: - AllMapScript(const char* name); + AllMapScript(const char* name, std::vector enabledHooks = std::vector()); public: /** diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 9ec3ffeea..3ff8933e3 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -102,6 +102,7 @@ void ScriptMgr::Initialize() ScriptRegistry::InitEnabledHooksIfNeeded(UNITHOOK_END); ScriptRegistry::InitEnabledHooksIfNeeded(WORLDOBJECTHOOK_END); ScriptRegistry::InitEnabledHooksIfNeeded(WORLDHOOK_END); + ScriptRegistry::InitEnabledHooksIfNeeded(ALLMAPHOOK_END); } void ScriptMgr::Unload()