diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 22:00:16 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 11:00:16 -0300 |
| commit | b3a332f57cf00b0e3bad302e228fdf9826994883 (patch) | |
| tree | f088a14773789b46471fd364dccd17d255f77cb2 /src/server/game/Scripting/ScriptDefines | |
| parent | a4af83b277d47a1e5827e19095ee5089ac075606 (diff) | |
feat(Core/Scripts): Optimize AllBattlegroundScript (#18704)
* Add files via upload
* Update AllBattlegroundScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp | 111 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h | 24 |
2 files changed, 51 insertions, 84 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp index b5828687a8..0c9ecfc200 100644 --- a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp @@ -21,148 +21,93 @@ void ScriptMgr::OnBattlegroundStart(Battleground* bg) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundStart(bg); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_START, script->OnBattlegroundStart(bg)); } void ScriptMgr::OnBattlegroundEndReward(Battleground* bg, Player* player, TeamId winnerTeamId) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundEndReward(bg, player, winnerTeamId); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END_REWARD, script->OnBattlegroundEndReward(bg, player, winnerTeamId)); } void ScriptMgr::OnBattlegroundUpdate(Battleground* bg, uint32 diff) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundUpdate(bg, diff); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_UPDATE, script->OnBattlegroundUpdate(bg, diff)); } void ScriptMgr::OnBattlegroundAddPlayer(Battleground* bg, Player* player) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundAddPlayer(bg, player); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_ADD_PLAYER, script->OnBattlegroundAddPlayer(bg, player)); } void ScriptMgr::OnBattlegroundBeforeAddPlayer(Battleground* bg, Player* player) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundBeforeAddPlayer(bg, player); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_BEFORE_ADD_PLAYER, script->OnBattlegroundBeforeAddPlayer(bg, player)); } void ScriptMgr::OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* player) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundRemovePlayerAtLeave(bg, player); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_REMOVE_PLAYER_AT_LEAVE, script->OnBattlegroundRemovePlayerAtLeave(bg, player)); } -void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, - uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId) +void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry, - arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_QUEUE_UPDATE, script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating)); } -bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id) +void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId) { - auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - return !script->CanFillPlayersToBG(queue, bg, bracket_id); - }); - - return ReturnValidBool(ret); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_ADD_GROUP, script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry, arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId)); } -bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers) +bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id) { - auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - return script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers); - }); - - return ReturnValidBool(ret, true); + CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_CAN_FILL_PLAYERS_TO_BG, !script->CanFillPlayersToBG(queue, bg, bracket_id)); } -void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) +bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating); - }); + CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_IS_CHECK_NORMAL_MATCH, script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers)); } bool ScriptMgr::CanSendMessageBGQueue(BattlegroundQueue* queue, Player* leader, Battleground* bg, PvPDifficultyEntry const* bracketEntry) { - auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - return !script->CanSendMessageBGQueue(queue, leader, bg, bracketEntry); - }); - - return ReturnValidBool(ret); + CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_CAN_SEND_MESSAGE_BG_QUEUE, !script->CanSendMessageBGQueue(queue, leader, bg, bracketEntry)); } bool ScriptMgr::OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated) { - auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - return !script->OnBeforeSendJoinMessageArenaQueue(queue, leader, ginfo, bracketEntry, isRated); - }); - - return ReturnValidBool(ret); + CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_JOIN_MESSAGE_ARENA_QUEUE, !script->OnBeforeSendJoinMessageArenaQueue(queue, leader, ginfo, bracketEntry, isRated)); } bool ScriptMgr::OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, GroupQueueInfo* ginfo) { - auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - return !script->OnBeforeSendExitMessageArenaQueue(queue, ginfo); - }); - - return ReturnValidBool(ret); + CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_EXIT_MESSAGE_ARENA_QUEUE, !script->OnBeforeSendExitMessageArenaQueue(queue, ginfo)); } void ScriptMgr::OnBattlegroundEnd(Battleground* bg, TeamId winnerTeam) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundEnd(bg, winnerTeam); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END, script->OnBattlegroundEnd(bg, winnerTeam)); } void ScriptMgr::OnBattlegroundDestroy(Battleground* bg) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundDestroy(bg); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_DESTROY, script->OnBattlegroundDestroy(bg)); } void ScriptMgr::OnBattlegroundCreate(Battleground* bg) { - ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script) - { - script->OnBattlegroundCreate(bg); - }); + CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_CREATE, script->OnBattlegroundCreate(bg)); } -AllBattlegroundScript::AllBattlegroundScript(char const* name) : - ScriptObject(name) +AllBattlegroundScript::AllBattlegroundScript(char const* name, std::vector<uint16> enabledHooks) : + ScriptObject(name, ALLBATTLEGROUNDHOOK_END) { - ScriptRegistry<AllBattlegroundScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < ALLBATTLEGROUNDHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<AllBattlegroundScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<AllBattlegroundScript>; diff --git a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h index 379cc4635e..880518b5dc 100644 --- a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h +++ b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h @@ -19,6 +19,28 @@ #define SCRIPT_OBJECT_ALL_BATTLEGROUND_SCRIPT_H_ #include "ScriptObject.h" +#include <vector> + +enum AllBattlegroundHook +{ + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_START, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END_REWARD, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_UPDATE, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_ADD_PLAYER, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_BEFORE_ADD_PLAYER, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_REMOVE_PLAYER_AT_LEAVE, + ALLBATTLEGROUNDHOOK_ON_QUEUE_UPDATE, + ALLBATTLEGROUNDHOOK_ON_ADD_GROUP, + ALLBATTLEGROUNDHOOK_CAN_FILL_PLAYERS_TO_BG, + ALLBATTLEGROUNDHOOK_IS_CHECK_NORMAL_MATCH, + ALLBATTLEGROUNDHOOK_CAN_SEND_MESSAGE_BG_QUEUE, + ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_JOIN_MESSAGE_ARENA_QUEUE, + ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_EXIT_MESSAGE_ARENA_QUEUE, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_DESTROY, + ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_CREATE, + ALLBATTLEGROUNDHOOK_END +}; enum BattlegroundBracketId : uint8; enum BattlegroundTypeId : uint8; @@ -27,7 +49,7 @@ enum TeamId : uint8; class AllBattlegroundScript : public ScriptObject { protected: - AllBattlegroundScript(const char* name); + AllBattlegroundScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: [[nodiscard]] bool IsDatabaseBound() const override { return false; } |
