From b81c6167857eaf7f6d21d18d663fe2bd255fb129 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 28 Mar 2026 12:43:44 -0700 Subject: [PATCH] fix: delegate gossip/quest detail getters to QuestHandler (NPC dialog broken) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4 more stale getters from PR #23 split: - isGossipWindowOpen() — QuestHandler owns gossipWindowOpen_ - getCurrentGossip() — QuestHandler owns currentGossip_ - isQuestDetailsOpen() — QuestHandler owns questDetailsOpen_ - getQuestDetails() — QuestHandler owns currentQuestDetails_ Also fix GameHandler::update() distance-close checks to use delegating getters instead of stale member variables for vendor/gossip/taxi/trainer. Map state (currentMapId_, worldStateZoneId_, exploredZones_) confirmed NOT stale — domain handlers write via owner_. reference to GameHandler's members. Those getters are correct as-is. --- include/game/game_handler.hpp | 19 ++++--------------- src/game/game_handler.cpp | 24 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index d3f3ad11..e4a2c38f 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -1446,21 +1446,10 @@ public: // Quest-starting items: right-click triggers quest offer dialog via questgiver protocol void offerQuestFromItem(uint64_t itemGuid, uint32_t questId); uint64_t getBagItemGuid(int bagIndex, int slotIndex) const; - bool isGossipWindowOpen() const { return gossipWindowOpen; } - const GossipMessageData& getCurrentGossip() const { return currentGossip; } - bool isQuestDetailsOpen() { - // Check if delayed opening timer has expired - if (questDetailsOpen) return true; - if (questDetailsOpenTime != std::chrono::steady_clock::time_point{}) { - if (std::chrono::steady_clock::now() >= questDetailsOpenTime) { - questDetailsOpen = true; - questDetailsOpenTime = std::chrono::steady_clock::time_point{}; - return true; - } - } - return false; - } - const QuestDetailsData& getQuestDetails() const { return currentQuestDetails; } + bool isGossipWindowOpen() const; + const GossipMessageData& getCurrentGossip() const; + bool isQuestDetailsOpen(); + const QuestDetailsData& getQuestDetails() const; // Gossip POI (aliased from handler_types.hpp) using GossipPoi = game::GossipPoi; diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 94510a1b..d18bab1d 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -1467,10 +1467,10 @@ void GameHandler::update(float deltaTime) { LOG_INFO(label, " closed: walked too far from NPC"); } }; - closeIfTooFar(vendorWindowOpen, currentVendorItems.vendorGuid, [this]{ closeVendor(); }, "Vendor"); - closeIfTooFar(gossipWindowOpen, currentGossip.npcGuid, [this]{ closeGossip(); }, "Gossip"); - closeIfTooFar(taxiWindowOpen_, taxiNpcGuid_, [this]{ closeTaxi(); }, "Taxi window"); - closeIfTooFar(trainerWindowOpen_, currentTrainerList_.trainerGuid, [this]{ closeTrainer(); }, "Trainer"); + closeIfTooFar(isVendorWindowOpen(), getVendorItems().vendorGuid, [this]{ closeVendor(); }, "Vendor"); + closeIfTooFar(isGossipWindowOpen(), getCurrentGossip().npcGuid, [this]{ closeGossip(); }, "Gossip"); + closeIfTooFar(isTaxiWindowOpen(), taxiNpcGuid_, [this]{ closeTaxi(); }, "Taxi window"); + closeIfTooFar(isTrainerWindowOpen(), getTrainerSpells().trainerGuid, [this]{ closeTrainer(); }, "Trainer"); updateEntityInterpolation(deltaTime); @@ -9973,6 +9973,22 @@ void GameHandler::cancelPetUnlearn() { // ---- QuestHandler delegating getters ---- +bool GameHandler::isGossipWindowOpen() const { + return questHandler_ ? questHandler_->isGossipWindowOpen() : gossipWindowOpen; +} +const GossipMessageData& GameHandler::getCurrentGossip() const { + if (questHandler_) return questHandler_->getCurrentGossip(); + return currentGossip; +} +bool GameHandler::isQuestDetailsOpen() { + if (questHandler_) return questHandler_->isQuestDetailsOpen(); + return questDetailsOpen; +} +const QuestDetailsData& GameHandler::getQuestDetails() const { + if (questHandler_) return questHandler_->getQuestDetails(); + return currentQuestDetails; +} + const std::vector& GameHandler::getGossipPois() const { if (questHandler_) return questHandler_->getGossipPois(); static const std::vector empty;