From a0b978f95b71fa962b2672c7b28e299b230f729b Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 17 Mar 2026 12:28:15 -0700 Subject: [PATCH] feat: add audio feedback for quest accept/complete and transaction errors Wire up UISoundManager calls that were loaded but never invoked: - playQuestActivate() on quest accept - playQuestComplete() on server-confirmed quest completion - playError() on trainer buy failure, vendor buy failure, and sell failure --- src/game/game_handler.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 5f859c85..e79371c9 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -3925,6 +3925,11 @@ void GameHandler::handlePacket(network::Packet& packet) { else if (errorCode != 0) msg += " (error " + std::to_string(errorCode) + ")"; addSystemChatMessage(msg); + // Play error sound so the player notices the failure + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playError(); + } break; } @@ -4535,6 +4540,10 @@ void GameHandler::handlePacket(network::Packet& packet) { }; const char* msg = (result < 7) ? sellErrors[result] : "Unknown sell error"; addSystemChatMessage(std::string("Sell failed: ") + msg); + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playError(); + } LOG_WARNING("SMSG_SELL_ITEM error: ", (int)result, " (", msg, ")"); } } @@ -4688,6 +4697,10 @@ void GameHandler::handlePacket(network::Packet& packet) { default: break; } addSystemChatMessage(msg); + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playError(); + } } break; } @@ -5015,6 +5028,11 @@ void GameHandler::handlePacket(network::Packet& packet) { if (questCompleteCallback_) { questCompleteCallback_(questId, it->title); } + // Play quest-complete sound + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playQuestComplete(); + } questLog_.erase(it); LOG_INFO(" Removed quest ", questId, " from quest log"); break; @@ -20070,6 +20088,12 @@ void GameHandler::acceptQuest() { pendingQuestAcceptTimeouts_[questId] = 5.0f; pendingQuestAcceptNpcGuids_[questId] = npcGuid; + // Play quest-accept sound + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playQuestActivate(); + } + questDetailsOpen = false; questDetailsOpenTime = std::chrono::steady_clock::time_point{}; currentQuestDetails = QuestDetailsData{};