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() {