summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefano Borzì <stefanoborzi32@gmail.com>2024-09-04 15:33:38 +0200
committerGitHub <noreply@github.com>2024-09-04 10:33:38 -0300
commite5e514bbbedd0bab114177fffc8b632e667dd751 (patch)
treecd61c0eca8e86ad32a40d09d87d7ef23a5a9ad78 /src
parentbf18b9bdfb26fd94cd4dfbd6a911ebae5db98569 (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.cpp3
-rw-r--r--src/server/game/Scripting/ScriptDefines/ArenaScript.cpp5
-rw-r--r--src/server/game/Scripting/ScriptDefines/ArenaScript.h3
-rw-r--r--src/server/game/Scripting/ScriptMgr.h1
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 */