From 5b8bc792b8a042c2ebd2a5dc8670de0f494811b8 Mon Sep 17 00:00:00 2001 From: silviu20092 Date: Wed, 27 Mar 2024 01:57:42 +0200 Subject: [PATCH] feat(core): account delete hook (#18605) Add account delete hook --- src/server/game/Accounts/AccountMgr.cpp | 2 ++ src/server/game/Scripting/ScriptDefines/AccountScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptDefines/AccountScript.h | 3 +++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 14 insertions(+) diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 852102d4b..439b6b5ba 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -68,6 +68,8 @@ namespace AccountMgr if (!result) return AOR_NAME_NOT_EXIST; + sScriptMgr->OnBeforeAccountDelete(accountId); + // Obtain accounts characters CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARS_BY_ACCOUNT_ID); stmt->SetData(0, accountId); diff --git a/src/server/game/Scripting/ScriptDefines/AccountScript.cpp b/src/server/game/Scripting/ScriptDefines/AccountScript.cpp index 31705babc..199956b1d 100644 --- a/src/server/game/Scripting/ScriptDefines/AccountScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/AccountScript.cpp @@ -27,6 +27,14 @@ void ScriptMgr::OnAccountLogin(uint32 accountId) }); } +void ScriptMgr::OnBeforeAccountDelete(uint32 accountId) +{ + ExecuteScript([&](AccountScript* script) + { + script->OnBeforeAccountDelete(accountId); + }); +} + //void ScriptMgr::OnAccountLogout(uint32 accountId) //{ // ExecuteScript([&](AccountScript* script) diff --git a/src/server/game/Scripting/ScriptDefines/AccountScript.h b/src/server/game/Scripting/ScriptDefines/AccountScript.h index a88e4152b..76b3db459 100644 --- a/src/server/game/Scripting/ScriptDefines/AccountScript.h +++ b/src/server/game/Scripting/ScriptDefines/AccountScript.h @@ -29,6 +29,9 @@ public: // Called when an account logged in successfully virtual void OnAccountLogin(uint32 /*accountId*/) { } + // Called when an account is about to be deleted + virtual void OnBeforeAccountDelete(uint32 /*accountId*/) { } + // Called when an ip logged in successfully virtual void OnLastIpUpdate(uint32 /*accountId*/, std::string /*ip*/) { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a242119bc..a013178e0 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -469,6 +469,7 @@ public: /* PlayerScript */ public: /* AccountScript */ void OnAccountLogin(uint32 accountId); + void OnBeforeAccountDelete(uint32 accountId); void OnLastIpUpdate(uint32 accountId, std::string ip); void OnFailedAccountLogin(uint32 accountId); void OnEmailChange(uint32 accountId);