diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 455fe159102d08..4ce4ceb955d970 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1036,6 +1036,8 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid, uint32 vendorEntry) { LOG_DEBUG("network", "WORLD: Sent SMSG_LIST_INVENTORY"); + sScriptMgr->OnPlayerSendListInventory(GetPlayer(), vendorGuid, vendorEntry); + Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR); if (!vendor) { diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 2e9b78b3e63891..771a92d93f8259 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -920,6 +920,11 @@ bool ScriptMgr::OnPlayerCanGiveLevel(Player* player, uint8 newLevel) CALL_ENABLED_BOOLEAN_HOOKS(PlayerScript, PLAYERHOOK_ON_CAN_GIVE_LEVEL, !script->OnPlayerCanGiveLevel(player, newLevel)); } +void ScriptMgr::OnPlayerSendListInventory(Player* player, ObjectGuid vendorGuid, uint32 vendorEntry) +{ + CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_SEND_LIST_INVENTORY, script->OnPlayerSendListInventory(player, vendorGuid, vendorEntry)); +} + PlayerScript::PlayerScript(const char* name, std::vector enabledHooks) : ScriptObject(name, PLAYERHOOK_END) { diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index d813934e24a8f1..ccfff49887a8ce 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -209,6 +209,7 @@ enum PlayerHook PLAYERHOOK_ON_UPDATE_SKILL, PLAYERHOOK_CAN_RESURRECT, PLAYERHOOK_ON_CAN_GIVE_LEVEL, + PLAYERHOOK_ON_SEND_LIST_INVENTORY, PLAYERHOOK_END }; @@ -793,6 +794,15 @@ class PlayerScript : public ScriptObject * @return true if player is allowed to gain the new level */ virtual bool OnPlayerCanGiveLevel(Player* /*player*/, uint8 /*newLevel*/) { return true; } + + /** + * @brief This hook is called whenever a player interacts with a vendor, and is then shown the vendor list + * + * @param player Contains information about the Player + * @param vendorGuid Guid of the vendor player is interacting with + * @param vendorEntry Entry of the vendor player is interacting with + */ + virtual void OnPlayerSendListInventory(Player* /*player*/, ObjectGuid /*vendorGuid*/, uint32 /*vendorEntry*/) {} }; #endif diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 727d7a49a86003..edc7326b459831 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -464,6 +464,7 @@ class ScriptMgr void OnPlayerUpdateSkill(Player* player, uint32 skillId, uint32 value, uint32 max, uint32 step, uint32 newValue); bool OnPlayerCanResurrect(Player* player); bool OnPlayerCanGiveLevel(Player* player, uint8 newLevel); + void OnPlayerSendListInventory(Player* player, ObjectGuid vendorGuid, uint32 vendorEntry); // Anti cheat void AnticheatSetCanFlybyServer(Player* player, bool apply);