From dd42f7a6737f21626a254e8c9fd09ff462c09850 Mon Sep 17 00:00:00 2001 From: Vincent Vanclef Date: Tue, 11 Mar 2025 15:01:55 +0100 Subject: [PATCH] feat(Core/Entities): Add OnPlayerSendListInventory script hook (#21676) --- src/server/game/Handlers/ItemHandler.cpp | 2 ++ .../game/Scripting/ScriptDefines/PlayerScript.cpp | 5 +++++ src/server/game/Scripting/ScriptDefines/PlayerScript.h | 10 ++++++++++ src/server/game/Scripting/ScriptMgr.h | 1 + 4 files changed, 18 insertions(+) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 455fe1591..4ce4ceb95 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 2e9b78b3e..57978f7a5 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 d813934e2..692e5c4cc 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 @@ public: * @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 727d7a49a..7a048e1a1 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -464,6 +464,7 @@ public: /* PlayerScript */ 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);