diff --git a/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp b/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp index 89303ba95..96e0c7a16 100644 --- a/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp @@ -21,46 +21,28 @@ bool ScriptMgr::CanAddMember(ArenaTeam* team, ObjectGuid PlayerGuid) { - auto ret = IsValidBoolScript([&](ArenaScript* script) - { - return !script->CanAddMember(team, PlayerGuid); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(ArenaScript, ARENAHOOK_CAN_ADD_MEMBER, !script->CanAddMember(team, PlayerGuid)); } void ScriptMgr::OnGetPoints(ArenaTeam* team, uint32 memberRating, float& points) { - ExecuteScript([&](ArenaScript* script) - { - script->OnGetPoints(team, memberRating, points); - }); + CALL_ENABLED_HOOKS(ArenaScript, ARENAHOOK_ON_GET_POINTS, script->OnGetPoints(team, memberRating, points)); } bool ScriptMgr::CanSaveToDB(ArenaTeam* team) { - auto ret = IsValidBoolScript([&](ArenaScript* script) - { - return !script->CanSaveToDB(team); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(ArenaScript, ARENAHOOK_CAN_SAVE_TO_DB, !script->CanSaveToDB(team)); } -ArenaScript::ArenaScript(const char* name) - : ScriptObject(name) +ArenaScript::ArenaScript(const char* name, std::vector enabledHooks) + : ScriptObject(name, ARENAHOOK_END) { - ScriptRegistry::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < ARENAHOOK_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/ArenaScript.h b/src/server/game/Scripting/ScriptDefines/ArenaScript.h index 0d7cb7e93..ff0121335 100644 --- a/src/server/game/Scripting/ScriptDefines/ArenaScript.h +++ b/src/server/game/Scripting/ScriptDefines/ArenaScript.h @@ -21,11 +21,19 @@ #include "ObjectGuid.h" #include "ScriptObject.h" +enum ArenaHook +{ + ARENAHOOK_CAN_ADD_MEMBER, + ARENAHOOK_ON_GET_POINTS, + ARENAHOOK_CAN_SAVE_TO_DB, + ARENAHOOK_END +}; + class ArenaScript : public ScriptObject { protected: - ArenaScript(const char* name); + ArenaScript(const char* name, std::vector enabledHooks = std::vector()); public: