From 7a137767fab342732211fec5e8d302e9035a32df Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Wed, 21 Sep 2022 06:28:19 -0600 Subject: [PATCH] feat(Core): OnBeforeLootMoney hook (#13030) --- src/server/game/Handlers/LootHandler.cpp | 1 + src/server/game/Scripting/ScriptDefines/PlayerScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 5b8ec44d3..41044a07c 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -168,6 +168,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) if (loot) { + sScriptMgr->OnBeforeLootMoney(player, loot); loot->NotifyMoneyRemoved(); if (shareMoney && player->GetGroup()) //item, pickpocket and players can be looted only single player { diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 5cb773dce..756231338 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -146,6 +146,14 @@ void ScriptMgr::OnPlayerMoneyChanged(Player* player, int32& amount) }); } +void ScriptMgr::OnBeforeLootMoney(Player* player, Loot* loot) +{ + ExecuteScript([&](PlayerScript* script) + { + script->OnBeforeLootMoney(player, loot); + }); +} + void ScriptMgr::OnGivePlayerXP(Player* player, uint32& amount, Unit* victim) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 680c75747..57913d695 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1021,6 +1021,9 @@ public: // Called when a player's money is modified (before the modification is done) virtual void OnMoneyChanged(Player* /*player*/, int32& /*amount*/) { } + // Called before looted money is added to a player + virtual void OnBeforeLootMoney(Player* /*player*/, Loot* /*loot*/) {} + // Called when a player gains XP (before anything is given) virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { } @@ -2208,6 +2211,7 @@ public: /* PlayerScript */ void OnPlayerFreeTalentPointsChanged(Player* player, uint32 newPoints); void OnPlayerTalentsReset(Player* player, bool noCost); void OnPlayerMoneyChanged(Player* player, int32& amount); + void OnBeforeLootMoney(Player* player, Loot* loot); void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim); bool OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental); void OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased);