diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 157d81680..b6c4da73a 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1150,6 +1150,8 @@ void Battleground::RemovePlayerAtLeave(Player* player) // Xinef: remove all criterias on bg leave player->ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_CONDITION_BG_MAP, GetMapId(), true); + + sScriptMgr->OnBattlegroundRemovePlayerAtLeave(this, player); } // this method is called when creating bg @@ -1197,12 +1199,13 @@ void Battleground::AddPlayer(Player* player) if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK)) player->ToggleAFK(); + sScriptMgr->OnBattlegroundBeforeAddPlayer(this, player); + // score struct must be created in inherited class uint64 guid = player->GetGUID(); TeamId teamId = player->GetBgTeamId(); - // Add to list/maps m_Players[guid] = player; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index d6df4b709..4add843f5 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -2055,6 +2055,16 @@ void ScriptMgr::OnBattlegroundAddPlayer(Battleground* bg, Player* player) FOREACH_SCRIPT(BGScript)->OnBattlegroundAddPlayer(bg, player); } +void ScriptMgr::OnBattlegroundBeforeAddPlayer(Battleground* bg, Player* player) +{ + FOREACH_SCRIPT(BGScript)->OnBattlegroundBeforeAddPlayer(bg, player); +} + +void ScriptMgr::OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* player) +{ + FOREACH_SCRIPT(BGScript)->OnBattlegroundRemovePlayerAtLeave(bg, player); +} + // SpellSC void ScriptMgr::OnCalcMaxDuration(Aura const* aura, int32& maxDuration) { diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index effa5330b..b3d69fc93 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1110,6 +1110,12 @@ public: // Add Player in Battlegroud virtual void OnBattlegroundAddPlayer(Battleground* /*bg*/, Player* /*player*/) { } + + // Before added player in Battlegroud + virtual void OnBattlegroundBeforeAddPlayer(Battleground* /*bg*/, Player* /*player*/) { } + + // Remove player at leave BG + virtual void OnBattlegroundRemovePlayerAtLeave(Battleground* /*bg*/, Player* /*player*/) { } }; class SpellSC : public ScriptObject @@ -1480,6 +1486,8 @@ class ScriptMgr void OnBattlegroundEndReward(Battleground* bg, Player* player, TeamId winnerTeamId); void OnBattlegroundUpdate(Battleground* bg, uint32 diff); void OnBattlegroundAddPlayer(Battleground* bg, Player* player); + void OnBattlegroundBeforeAddPlayer(Battleground* bg, Player* player); + void OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* player); public: /* SpellSC */