diff options
author | Stefano Borzì <stefanoborzi32@gmail.com> | 2024-09-04 15:33:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-04 10:33:38 -0300 |
commit | e5e514bbbedd0bab114177fffc8b632e667dd751 (patch) | |
tree | cd61c0eca8e86ad32a40d09d87d7ef23a5a9ad78 /src | |
parent | bf18b9bdfb26fd94cd4dfbd6a911ebae5db98569 (diff) |
feat(Core/Scripting): add OnBeforeArenaCheckWinConditions hook for mod-arena-replay compatibility (#19856)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlegrounds/Arena.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptDefines/ArenaScript.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptDefines/ArenaScript.h | 3 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 1 |
4 files changed, 12 insertions, 0 deletions
diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index 1c58679fb5..b0ecc3ab5a 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -192,6 +192,9 @@ void Arena::RemovePlayerAtLeave(Player* player) void Arena::CheckWinConditions() { + if (!sScriptMgr->OnBeforeArenaCheckWinConditions(this)) + return; + if (!GetAlivePlayersCountByTeam(TEAM_ALLIANCE) && GetPlayersCountByTeam(TEAM_HORDE)) EndBattleground(TEAM_HORDE); else if (GetPlayersCountByTeam(TEAM_ALLIANCE) && !GetAlivePlayersCountByTeam(TEAM_HORDE)) diff --git a/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp b/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp index fd3a8dcdfd..35baeb271a 100644 --- a/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/ArenaScript.cpp @@ -34,6 +34,11 @@ bool ScriptMgr::CanSaveToDB(ArenaTeam* team) CALL_ENABLED_BOOLEAN_HOOKS(ArenaScript, ARENAHOOK_CAN_SAVE_TO_DB, !script->CanSaveToDB(team)); } +bool ScriptMgr::OnBeforeArenaCheckWinConditions(Battleground* const bg) +{ + CALL_ENABLED_BOOLEAN_HOOKS(ArenaScript, ARENAHOOK_ON_BEFORE_CHECK_WIN_CONDITION, !script->OnBeforeArenaCheckWinConditions(bg)); +} + ArenaScript::ArenaScript(const char* name, std::vector<uint16> enabledHooks) : ScriptObject(name, ARENAHOOK_END) { diff --git a/src/server/game/Scripting/ScriptDefines/ArenaScript.h b/src/server/game/Scripting/ScriptDefines/ArenaScript.h index bbc18e2b21..c50a964498 100644 --- a/src/server/game/Scripting/ScriptDefines/ArenaScript.h +++ b/src/server/game/Scripting/ScriptDefines/ArenaScript.h @@ -27,6 +27,7 @@ enum ArenaHook ARENAHOOK_CAN_ADD_MEMBER, ARENAHOOK_ON_GET_POINTS, ARENAHOOK_CAN_SAVE_TO_DB, + ARENAHOOK_ON_BEFORE_CHECK_WIN_CONDITION, ARENAHOOK_END }; @@ -44,6 +45,8 @@ public: virtual void OnGetPoints(ArenaTeam* /*team*/, uint32 /*memberRating*/, float& /*points*/) { } + [[nodiscard]] virtual bool OnBeforeArenaCheckWinConditions(Battleground* const /* bg */) { return true; } + [[nodiscard]] virtual bool CanSaveToDB(ArenaTeam* /*team*/) { return true; } }; diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 5096b9919b..a81bda71fd 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -646,6 +646,7 @@ public: /* ArenaScript */ bool CanAddMember(ArenaTeam* team, ObjectGuid PlayerGuid); void OnGetPoints(ArenaTeam* team, uint32 memberRating, float& points); bool CanSaveToDB(ArenaTeam* team); + bool OnBeforeArenaCheckWinConditions(Battleground* const bg); public: /* MiscScript */ |