diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 297449d81f..ccfb2cdca9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8195,6 +8195,8 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type) { SetLootGUID(guid); + sScriptMgr->OnPlayerBeforeSendLoot(this, guid, loot); + WorldPacket data(SMSG_LOOT_RESPONSE, (9 + 50)); // we guess size data << guid; data << uint8(loot_type); diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index a6d35dbceb..d8bab47514 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -132,6 +132,11 @@ void ScriptMgr::OnPlayerBeforeLootMoney(Player* player, Loot* loot) CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_BEFORE_LOOT_MONEY, script->OnPlayerBeforeLootMoney(player, loot)); } +void ScriptMgr::OnPlayerBeforeSendLoot(Player* player, ObjectGuid lootGuid, Loot* loot) +{ + CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_BEFORE_SEND_LOOT, script->OnPlayerBeforeSendLoot(player, lootGuid, loot)); +} + void ScriptMgr::OnPlayerGiveXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource) { CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_GIVE_EXP, script->OnPlayerGiveXP(player, amount, victim, xpSource)); diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index 47745e7a5b..87337a83cf 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -49,6 +49,7 @@ enum PlayerHook PLAYERHOOK_ON_UPDATE, PLAYERHOOK_ON_MONEY_CHANGED, PLAYERHOOK_ON_BEFORE_LOOT_MONEY, + PLAYERHOOK_ON_BEFORE_SEND_LOOT, PLAYERHOOK_ON_GIVE_EXP, PLAYERHOOK_ON_REPUTATION_CHANGE, PLAYERHOOK_ON_REPUTATION_RANK_CHANGE, @@ -281,6 +282,9 @@ public: // Called before looted money is added to a player virtual void OnPlayerBeforeLootMoney(Player* /*player*/, Loot* /*loot*/) {} + // Called before loot is sent to a player + virtual void OnPlayerBeforeSendLoot(Player* /*player*/, ObjectGuid /*lootGuid*/, Loot* /*loot*/) { } + // Called when a player gains XP (before anything is given) virtual void OnPlayerGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/, uint8 /*xpSource*/) { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 76df27a9ee..64b38be07b 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -312,6 +312,7 @@ public: /* PlayerScript */ void OnPlayerAfterSpecSlotChanged(Player* player, uint8 newSlot); void OnPlayerMoneyChanged(Player* player, int32& amount); void OnPlayerBeforeLootMoney(Player* player, Loot* loot); + void OnPlayerBeforeSendLoot(Player* player, ObjectGuid lootGuid, Loot* loot); void OnPlayerGiveXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource); bool OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental); void OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased);