Add XP_GAIN combat text type; show '+N XP' in purple on kills

XP gain was previously shown as a HEAL entry (green +N) which conflates
it with actual healing.  New XP_GAIN type renders as purple '+N XP' in the
outgoing column, matching WoW's floating XP style.
This commit is contained in:
Kelsi 2026-03-09 17:13:31 -07:00
parent 6e03866b56
commit 18a3a0fd01
3 changed files with 6 additions and 2 deletions

View file

@ -51,7 +51,7 @@ struct CombatTextEntry {
enum Type : uint8_t { enum Type : uint8_t {
MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK, MELEE_DAMAGE, SPELL_DAMAGE, HEAL, MISS, DODGE, PARRY, BLOCK,
CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL, CRIT_DAMAGE, CRIT_HEAL, PERIODIC_DAMAGE, PERIODIC_HEAL, ENVIRONMENTAL,
ENERGIZE ENERGIZE, XP_GAIN
}; };
Type type; Type type;
int32_t amount = 0; int32_t amount = 0;

View file

@ -14461,7 +14461,7 @@ void GameHandler::handleXpGain(network::Packet& packet) {
// Server already updates PLAYER_XP via update fields, // Server already updates PLAYER_XP via update fields,
// but we can show combat text for XP gains // but we can show combat text for XP gains
addCombatText(CombatTextEntry::HEAL, static_cast<int32_t>(data.totalXp), 0, true); addCombatText(CombatTextEntry::XP_GAIN, static_cast<int32_t>(data.totalXp), 0, true);
std::string msg = "You gain " + std::to_string(data.totalXp) + " experience."; std::string msg = "You gain " + std::to_string(data.totalXp) + " experience.";
if (data.groupBonus > 0) { if (data.groupBonus > 0) {

View file

@ -4519,6 +4519,10 @@ void GameScreen::renderCombatText(game::GameHandler& gameHandler) {
snprintf(text, sizeof(text), "+%d", entry.amount); snprintf(text, sizeof(text), "+%d", entry.amount);
color = ImVec4(0.3f, 0.6f, 1.0f, alpha); // Blue for mana/energy color = ImVec4(0.3f, 0.6f, 1.0f, alpha); // Blue for mana/energy
break; break;
case game::CombatTextEntry::XP_GAIN:
snprintf(text, sizeof(text), "+%d XP", entry.amount);
color = ImVec4(0.7f, 0.3f, 1.0f, alpha); // Purple for XP
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);