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.
This commit is contained in:
Kelsi 2026-03-17 14:38:57 -07:00
parent b6ea78dfab
commit 8b57e6fa45
3 changed files with 11 additions and 1 deletions

View file

@ -53,7 +53,7 @@ struct CombatTextEntry {
MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK, MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK,
EVADE, CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL, EVADE, CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL,
ENERGIZE, POWER_DRAIN, XP_GAIN, IMMUNE, ABSORB, RESIST, DEFLECT, REFLECT, PROC_TRIGGER, ENERGIZE, POWER_DRAIN, XP_GAIN, IMMUNE, ABSORB, RESIST, DEFLECT, REFLECT, PROC_TRIGGER,
DISPEL, STEAL, INTERRUPT, INSTAKILL DISPEL, STEAL, INTERRUPT, INSTAKILL, HONOR_GAIN
}; };
Type type; Type type;
int32_t amount = 0; int32_t amount = 0;

View file

@ -2168,6 +2168,8 @@ void GameHandler::handlePacket(network::Packet& packet) {
std::dec, " rank=", rank); std::dec, " rank=", rank);
std::string msg = "You gain " + std::to_string(honor) + " honor points."; std::string msg = "You gain " + std::to_string(honor) + " honor points.";
addSystemChatMessage(msg); addSystemChatMessage(msg);
if (honor > 0)
addCombatText(CombatTextEntry::HONOR_GAIN, static_cast<int32_t>(honor), 0, true);
if (pvpHonorCallback_) { if (pvpHonorCallback_) {
pvpHonorCallback_(honor, victimGuid, rank); pvpHonorCallback_(honor, victimGuid, rank);
} }

View file

@ -8631,6 +8631,10 @@ void GameScreen::renderCombatText(game::GameHandler& gameHandler) {
color = outgoing ? ImVec4(1.0f, 0.25f, 0.25f, alpha) color = outgoing ? ImVec4(1.0f, 0.25f, 0.25f, alpha)
: ImVec4(1.0f, 0.1f, 0.1f, alpha); : ImVec4(1.0f, 0.1f, 0.1f, alpha);
break; 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: default:
snprintf(text, sizeof(text), "%d", entry.amount); snprintf(text, sizeof(text), "%d", entry.amount);
color = ImVec4(1.0f, 1.0f, 1.0f, alpha); 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); snprintf(desc, sizeof(desc), "%s instantly kills %s", src, tgt);
color = ImVec4(1.0f, 0.2f, 0.2f, 1.0f); color = ImVec4(1.0f, 0.2f, 0.2f, 1.0f);
break; 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: default:
snprintf(desc, sizeof(desc), "Combat event (type %d, amount %d)", (int)e.type, e.amount); 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); color = ImVec4(0.7f, 0.7f, 0.7f, 1.0f);