From 4321b8a4dee98fce5f7b66dae43afa44b5c22a12 Mon Sep 17 00:00:00 2001 From: Nathan Handley Date: Sat, 13 Jan 2024 17:10:49 -0600 Subject: [PATCH] feat(Core/Scripting): Implement new hook OnBeforePlayerLogout() (#18163) * new hook OnPlayerPreLogout * Changed PreLogout to BeforeLogout per review * Renamed OnPlayerBeforeLogout to OnBeforePlayerLogout per review --------- Co-authored-by: NathanHandley --- src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 3 +++ src/server/game/Scripting/ScriptMgr.h | 1 + src/server/game/Server/WorldSession.cpp | 3 +++ 4 files changed, 15 insertions(+) diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 8060d5e32..ed2465695 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -361,6 +361,14 @@ void ScriptMgr::OnPlayerLoadFromDB(Player* player) }); } +void ScriptMgr::OnBeforePlayerLogout(Player* player) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnBeforeLogout(player); + }); +} + void ScriptMgr::OnPlayerLogout(Player* player) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index 7bab66fe4..788474390 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -132,6 +132,9 @@ public: // Called when a player logs in. virtual void OnLogin(Player* /*player*/) { } + // Called before the player is logged out + virtual void OnBeforeLogout(Player* /*player*/) { } + // Called when a player logs out. virtual void OnLogout(Player* /*player*/) { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 6499e177b..c39c10980 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -329,6 +329,7 @@ public: /* PlayerScript */ void OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck); void OnPlayerLogin(Player* player); void OnPlayerLoadFromDB(Player* player); + void OnBeforePlayerLogout(Player* player); void OnPlayerLogout(Player* player); void OnPlayerCreate(Player* player); void OnPlayerSave(Player* player); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index a3a94d7ac..c7fc5abf8 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -579,6 +579,9 @@ void WorldSession::LogoutPlayer(bool save) if (_player) { + //! Call script hook before other logout events + sScriptMgr->OnBeforePlayerLogout(_player); + if (ObjectGuid lguid = _player->GetLootGUID()) DoLootRelease(lguid);