From 06456faa63769649eecab1e64aff75c68792f2b9 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Thu, 12 Mar 2026 01:22:42 -0700 Subject: [PATCH] Extend UIErrorsFrame to spell failures, interrupts, server shutdown warnings --- src/game/game_handler.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 97b08e22..b6b00998 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -907,6 +907,7 @@ void GameHandler::update(float deltaTime) { castIsChannel = false; currentCastSpellId = 0; castTimeRemaining = 0.0f; + addUIError("Interrupted."); addSystemChatMessage("Interrupted."); } if (casting && castTimeRemaining > 0.0f) { @@ -2828,13 +2829,14 @@ void GameHandler::handlePacket(network::Packet& packet) { // Classic result enum starts at 0=AFFECTING_COMBAT; shift +1 for WotLK table uint8_t failReason = isClassic ? static_cast(rawFailReason + 1) : rawFailReason; if (failGuid == playerGuid && failReason != 0) { - // Show interruption/failure reason in chat for player + // Show interruption/failure reason in chat and error overlay for player int pt = -1; if (auto pe = entityManager.getEntity(playerGuid)) if (auto pu = std::dynamic_pointer_cast(pe)) pt = static_cast(pu->getPowerType()); const char* reason = getSpellCastResultString(failReason, pt); if (reason) { + addUIError(reason); MessageChatData emsg; emsg.type = ChatType::SYSTEM; emsg.language = ChatLanguage::UNIVERSAL; @@ -3790,11 +3792,22 @@ void GameHandler::handlePacket(network::Packet& packet) { break; case Opcode::SMSG_SERVER_MESSAGE: { - // uint32 type, string message + // uint32 type + string message + // Types: 1=shutdown_time, 2=restart_time, 3=string, 4=shutdown_cancelled, 5=restart_cancelled if (packet.getSize() - packet.getReadPos() >= 4) { - /*uint32_t msgType =*/ packet.readUInt32(); + uint32_t msgType = packet.readUInt32(); std::string msg = packet.readString(); - if (!msg.empty()) addSystemChatMessage("[Server] " + msg); + if (!msg.empty()) { + std::string prefix; + switch (msgType) { + case 1: prefix = "[Shutdown] "; addUIError("Server shutdown: " + msg); break; + case 2: prefix = "[Restart] "; addUIError("Server restart: " + msg); break; + case 4: prefix = "[Shutdown cancelled] "; break; + case 5: prefix = "[Restart cancelled] "; break; + default: prefix = "[Server] "; break; + } + addSystemChatMessage(prefix + msg); + } } break; }