From 80e6a6d781881afec19112e85ac8cf69fd916977 Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Tue, 6 Sep 2022 12:47:37 -0600 Subject: [PATCH] feat(Core): OnBeforeChooseGraveyard Hook (#12860) --- src/server/game/Misc/GameGraveyard.cpp | 8 ++++++++ src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/src/server/game/Misc/GameGraveyard.cpp b/src/server/game/Misc/GameGraveyard.cpp index 759ccbfd7..f9795089d 100644 --- a/src/server/game/Misc/GameGraveyard.cpp +++ b/src/server/game/Misc/GameGraveyard.cpp @@ -20,6 +20,7 @@ #include "DatabaseEnv.h" #include "Log.h" #include "MapMgr.h" +#include "ScriptMgr.h" Graveyard* Graveyard::instance() { @@ -95,6 +96,13 @@ GraveyardStruct const* Graveyard::GetDefaultGraveyard(TeamId teamId) GraveyardStruct const* Graveyard::GetClosestGraveyard(Player* player, TeamId teamId, bool nearCorpse) { + uint32 graveyardOverride = 0; + sScriptMgr->OnBeforeChooseGraveyard(player, teamId, nearCorpse, graveyardOverride); + if (graveyardOverride) + { + return sGraveyard->GetGraveyard(graveyardOverride); + } + WorldLocation loc = player->GetWorldLocation(); if (nearCorpse) diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index a759e4047..3e43fa075 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -1349,6 +1349,14 @@ void ScriptMgr::OnPlayerResurrect(Player* player, float restore_percent, bool ap }); } +void ScriptMgr::OnBeforeChooseGraveyard(Player* player, TeamId teamId, bool nearCorpse, uint32& graveyardOverride) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnBeforeChooseGraveyard(player, teamId, nearCorpse, graveyardOverride); + }); +} + bool ScriptMgr::CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg) { auto ret = IsValidBoolScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 2e17704f1..006761d9e 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1316,6 +1316,9 @@ public: virtual void OnPlayerResurrect(Player* /*player*/, float /*restore_percent*/, bool /*applySickness*/) { } + // Called before selecting the graveyard when releasing spirit + virtual void OnBeforeChooseGraveyard(Player* /*player*/, TeamId /*teamId*/, bool /*nearCorpse*/, uint32& /*graveyardOverride*/) { } + /** * @brief This hook called before player sending message in default chat * @@ -2317,6 +2320,7 @@ public: /* PlayerScript */ void OnSetServerSideVisibility(Player* player, ServerSideVisibilityType& type, AccountTypes& sec); void OnSetServerSideVisibilityDetect(Player* player, ServerSideVisibilityType& type, AccountTypes& sec); void OnPlayerResurrect(Player* player, float restore_percent, bool applySickness); + void OnBeforeChooseGraveyard(Player* player, TeamId teamId, bool nearCorpse, uint32& graveyardOverride); bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg); bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Player* receiver); bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Group* group);