fix: delegate gossip/quest detail getters to QuestHandler (NPC dialog broken)

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.
This commit is contained in:
Kelsi 2026-03-28 12:43:44 -07:00
parent ee02faa183
commit b81c616785
2 changed files with 24 additions and 19 deletions

View file

@ -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<GossipPoi>& GameHandler::getGossipPois() const {
if (questHandler_) return questHandler_->getGossipPois();
static const std::vector<GossipPoi> empty;