From 81180086e3ca841d296e6af47f75c3b4c88f166b Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sun, 22 Mar 2026 18:33:56 -0700 Subject: [PATCH] feat: fire UNIT_DISPLAYPOWER when unit power type changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a unit's power type changes (e.g., druid shifting from mana to rage in bear form, or warrior switching stances), fire UNIT_DISPLAYPOWER so unit frame addons can switch the power bar display (mana blue bar → rage red bar). Detected via UNIT_FIELD_BYTES_0 byte 3 changes in the VALUES update path. --- src/game/game_handler.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 51d39d61..d984e6cf 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -12546,7 +12546,17 @@ void GameHandler::applyUpdateObjectBlock(const UpdateBlock& block, bool& newItem // (Classic packs maxHealth/level/faction adjacent to power indices) } else if (key == ufMaxHealth) { unit->setMaxHealth(val); healthChanged = true; } else if (key == ufBytes0) { + uint8_t oldPT = unit->getPowerType(); unit->setPowerType(static_cast((val >> 24) & 0xFF)); + if (unit->getPowerType() != oldPT && addonEventCallback_) { + std::string uid; + if (block.guid == playerGuid) uid = "player"; + else if (block.guid == targetGuid) uid = "target"; + else if (block.guid == focusGuid) uid = "focus"; + else if (block.guid == petGuid_) uid = "pet"; + if (!uid.empty()) + addonEventCallback_("UNIT_DISPLAYPOWER", {uid}); + } } else if (key == ufFlags) { unit->setUnitFlags(val); } else if (key == ufDynFlags) { uint32_t oldDyn = unit->getDynamicFlags();