From 510370dc7b2ea969e07cff74b66d5a9de1b28e03 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Wed, 11 Mar 2026 18:55:13 -0700 Subject: [PATCH] Delay quest reward window opening to load item icons/names Add 100ms delay before opening the quest offer reward dialog, giving item info queries time to complete. Prevents "Item X" placeholders where players can't see item names or icons needed to choose rewards. Reuses the existing questDetailsOpenTime mechanism with delayed flag check in isQuestOfferRewardOpen(). --- include/game/game_handler.hpp | 11 ++++++++++- src/game/game_handler.cpp | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/game/game_handler.hpp b/include/game/game_handler.hpp index ba729be9..1e0fcef6 100644 --- a/include/game/game_handler.hpp +++ b/include/game/game_handler.hpp @@ -1099,7 +1099,16 @@ public: void completeQuest(); // Send CMSG_QUESTGIVER_COMPLETE_QUEST void closeQuestRequestItems(); - bool isQuestOfferRewardOpen() const { return questOfferRewardOpen_; } + bool isQuestOfferRewardOpen() { + if (questOfferRewardOpen_) return true; + if (questDetailsOpenTime != std::chrono::steady_clock::time_point{}) { + if (std::chrono::steady_clock::now() >= questDetailsOpenTime) { + questOfferRewardOpen_ = true; + questDetailsOpenTime = std::chrono::steady_clock::time_point{}; + } + } + return questOfferRewardOpen_; + } const QuestOfferRewardData& getQuestOfferReward() const { return currentQuestOfferReward_; } void chooseQuestReward(uint32_t rewardIndex); // Send CMSG_QUESTGIVER_CHOOSE_REWARD void closeQuestOfferReward(); diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 14abdb94..0bf990eb 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -15770,17 +15770,19 @@ void GameHandler::handleQuestOfferReward(network::Packet& packet) { pendingTurnInRewardRequest_ = false; } currentQuestOfferReward_ = data; - questOfferRewardOpen_ = true; questRequestItemsOpen_ = false; gossipWindowOpen = false; questDetailsOpen = false; - questDetailsOpenTime = std::chrono::steady_clock::time_point{}; // Query item names for reward items for (const auto& item : data.choiceRewards) queryItemInfo(item.itemId, 0); for (const auto& item : data.fixedRewards) queryItemInfo(item.itemId, 0); + + // Delay opening window by 100ms to allow item queries to complete (avoids "Item X" placeholders) + questOfferRewardOpen_ = false; + questDetailsOpenTime = std::chrono::steady_clock::now() + std::chrono::milliseconds(100); } void GameHandler::completeQuest() {