diff --git a/doc/changelog/pendings/changes_1633634641262326500.md b/doc/changelog/pendings/changes_1633634641262326500.md new file mode 100644 index 000000000..932a6b66f --- /dev/null +++ b/doc/changelog/pendings/changes_1633634641262326500.md @@ -0,0 +1,6 @@ + +### Added + +- Added `OnPlayerPVPFlagChange` hook, it will be executed after the pvp flag from a player gets changed. + + diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 8e33db893..ad089bab0 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -1475,6 +1475,7 @@ void Player::UpdatePvP(bool state, bool _override) } RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER); + sScriptMgr->OnPlayerPVPFlagChange(this, state); } void Player::UpdatePotionCooldown(Spell* spell) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index f42f18bf5..113229b1c 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1366,6 +1366,11 @@ void ScriptMgr::OnPVPKill(Player* killer, Player* killed) FOREACH_SCRIPT(PlayerScript)->OnPVPKill(killer, killed); } +void ScriptMgr::OnPlayerPVPFlagChange(Player* player, bool state) +{ + FOREACH_SCRIPT(PlayerScript)->OnPlayerPVPFlagChange(player, state); +} + void ScriptMgr::OnCreatureKill(Player* killer, Creature* killed) { #ifdef ELUNA diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 2e77c7a92..532ff0a75 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -729,6 +729,9 @@ public: // Called when a player kills another player virtual void OnPVPKill(Player* /*killer*/, Player* /*killed*/) { } + // Called when a player toggles pvp + virtual void OnPlayerPVPFlagChange(Player* /*player*/, bool /*state*/) { } + // Called when a player kills a creature virtual void OnCreatureKill(Player* /*killer*/, Creature* /*killed*/) { } @@ -1612,6 +1615,7 @@ public: /* PlayerScript */ void OnSendInitialPacketsBeforeAddToMap(Player* player, WorldPacket& data); void OnPlayerReleasedGhost(Player* player); void OnPVPKill(Player* killer, Player* killed); + void OnPlayerPVPFlagChange(Player* player, bool state); void OnCreatureKill(Player* killer, Creature* killed); void OnCreatureKilledByPet(Player* petOwner, Creature* killed); void OnPlayerKilledByCreature(Creature* killer, Player* killed);