From e28a432fa2ae4bfa7c0d54cc13f92e12db67420b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=BF?= <18535853+PkllonG@users.noreply.github.com> Date: Fri, 12 Apr 2024 04:09:32 +0800 Subject: [PATCH] feat(Core/Scripts): Optimize ArenaScript need#18672 (#18700) Add files via upload --- .../Scripting/ScriptDefines/ArenaScript.cpp | 40 +++++-------------- .../Scripting/ScriptDefines/ArenaScript.h | 10 ++++- 2 files changed, 20 insertions(+), 30 deletions(-) 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: