From 8cc90a69e865fb259ff9a5ac050da9120626f318 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Fri, 20 Mar 2026 22:22:36 -0700 Subject: [PATCH] feat: fire MERCHANT_SHOW and MERCHANT_CLOSED events for vendor addons Fire MERCHANT_SHOW when vendor window opens (SMSG_LIST_INVENTORY) and MERCHANT_CLOSED when vendor is closed. Used by vendor price addons and auto-sell addons that need to detect vendor interaction state. --- src/game/game_handler.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index dafb4316..8ab02830 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -21643,6 +21643,7 @@ void GameHandler::openVendor(uint64_t npcGuid) { } void GameHandler::closeVendor() { + bool wasOpen = vendorWindowOpen; vendorWindowOpen = false; currentVendorItems = ListInventoryData{}; buybackItems_.clear(); @@ -21651,6 +21652,7 @@ void GameHandler::closeVendor() { pendingBuybackWireSlot_ = 0; pendingBuyItemId_ = 0; pendingBuyItemSlot_ = 0; + if (wasOpen && addonEventCallback_) addonEventCallback_("MERCHANT_CLOSED", {}); } void GameHandler::buyItem(uint64_t vendorGuid, uint32_t itemId, uint32_t slot, uint32_t count) { @@ -22372,6 +22374,7 @@ void GameHandler::handleListInventory(network::Packet& packet) { currentVendorItems.canRepair = savedCanRepair; vendorWindowOpen = true; gossipWindowOpen = false; // Close gossip if vendor opens + if (addonEventCallback_) addonEventCallback_("MERCHANT_SHOW", {}); // Auto-sell grey items if enabled if (autoSellGrey_ && currentVendorItems.vendorGuid != 0) {