From 8b57e6fa4544f7b8e502fe8eacada781b10987e3 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 17 Mar 2026 14:38:57 -0700 Subject: [PATCH] feat: add HONOR_GAIN floating combat text for PvP honor gains Show '+X Honor' floating text in gold when SMSG_PVP_CREDIT is received, matching WoW's native behavior. Also add HONOR_GAIN to the combat log panel for a complete record. Previously only a chat message was added. --- include/game/spell_defines.hpp | 2 +- src/game/game_handler.cpp | 2 ++ src/ui/game_screen.cpp | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/game/spell_defines.hpp b/include/game/spell_defines.hpp index 10c4a5cd..55759128 100644 --- a/include/game/spell_defines.hpp +++ b/include/game/spell_defines.hpp @@ -53,7 +53,7 @@ struct CombatTextEntry { MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK, EVADE, CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL, ENERGIZE, POWER_DRAIN, XP_GAIN, IMMUNE, ABSORB, RESIST, DEFLECT, REFLECT, PROC_TRIGGER, - DISPEL, STEAL, INTERRUPT, INSTAKILL + DISPEL, STEAL, INTERRUPT, INSTAKILL, HONOR_GAIN }; Type type; int32_t amount = 0; diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 7decf08c..2c8b704c 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -2168,6 +2168,8 @@ void GameHandler::handlePacket(network::Packet& packet) { std::dec, " rank=", rank); std::string msg = "You gain " + std::to_string(honor) + " honor points."; addSystemChatMessage(msg); + if (honor > 0) + addCombatText(CombatTextEntry::HONOR_GAIN, static_cast(honor), 0, true); if (pvpHonorCallback_) { pvpHonorCallback_(honor, victimGuid, rank); } diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index c2cee9da..0b09c847 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -8631,6 +8631,10 @@ void GameScreen::renderCombatText(game::GameHandler& gameHandler) { color = outgoing ? ImVec4(1.0f, 0.25f, 0.25f, alpha) : ImVec4(1.0f, 0.1f, 0.1f, alpha); break; + case game::CombatTextEntry::HONOR_GAIN: + snprintf(text, sizeof(text), "+%d Honor", entry.amount); + color = ImVec4(1.0f, 0.85f, 0.0f, alpha); // Gold for honor + break; default: snprintf(text, sizeof(text), "%d", entry.amount); color = ImVec4(1.0f, 1.0f, 1.0f, alpha); @@ -20723,6 +20727,10 @@ void GameScreen::renderCombatLog(game::GameHandler& gameHandler) { snprintf(desc, sizeof(desc), "%s instantly kills %s", src, tgt); color = ImVec4(1.0f, 0.2f, 0.2f, 1.0f); break; + case T::HONOR_GAIN: + snprintf(desc, sizeof(desc), "You gain %d honor", e.amount); + color = ImVec4(1.0f, 0.85f, 0.0f, 1.0f); + break; default: snprintf(desc, sizeof(desc), "Combat event (type %d, amount %d)", (int)e.type, e.amount); color = ImVec4(0.7f, 0.7f, 0.7f, 1.0f);