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);