From f476c8a6c9a42726e812ee5521e77ca39790b484 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Mon, 11 Dec 2023 00:06:23 +0200 Subject: [PATCH] feat(Core/Hooks): Add OnPlayerJustDied hook (#17973) feat(Core/Hooks): Add OnPlayerJustDied --- src/server/game/Entities/Player/Player.cpp | 1 + src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 4 ++++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 14 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 46d81e56c..758a91a4e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4484,6 +4484,7 @@ void Player::KillPlayer() if (corpseReclaimDelay >= 0) SendCorpseReclaimDelay(corpseReclaimDelay); + sScriptMgr->OnPlayerJustDied(this); // don't create corpse at this moment, player might be falling // update visibility diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index cb4dc5afa..8060d5e32 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -67,6 +67,14 @@ void ScriptMgr::OnBattlegroundDesertion(Player* player, BattlegroundDesertionTyp }); } +void ScriptMgr::OnPlayerJustDied(Player* player) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnPlayerJustDied(player); + }); +} + void ScriptMgr::OnPlayerReleasedGhost(Player* player) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index 23bf4cadf..7bab66fe4 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -29,6 +29,10 @@ protected: PlayerScript(const char* name); public: + // Called when a player dies + virtual void OnPlayerJustDied(Player* /*player*/) { } + + // Called when clicking the release button virtual void OnPlayerReleasedGhost(Player* /*player*/) { } // Called on Send Initial Packets Before Add To Map diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 16346ab2b..6499e177b 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -297,6 +297,7 @@ public: /* PlayerScript */ void OnBeforePlayerUpdate(Player* player, uint32 p_time); void OnPlayerUpdate(Player* player, uint32 p_time); void OnSendInitialPacketsBeforeAddToMap(Player* player, WorldPacket& data); + void OnPlayerJustDied(Player* player); void OnPlayerReleasedGhost(Player* player); void OnPVPKill(Player* killer, Player* killed); void OnPlayerPVPFlagChange(Player* player, bool state);