From 4364fa7bbe75703e43eea3440cf2a6a00bb32780 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 21 Mar 2026 09:18:25 -0700 Subject: [PATCH] fix: UnitPowerType falls back to party member stats for out-of-range units Previously UnitPowerType returned 0 (MANA) for party members who are out of entity range. Now falls back to SMSG_PARTY_MEMBER_STATS power type data, so raid frame addons correctly color rage/energy/runic power bars for distant party members. --- src/addons/lua_engine.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/addons/lua_engine.cpp b/src/addons/lua_engine.cpp index 694d4a4c..4a61aeb6 100644 --- a/src/addons/lua_engine.cpp +++ b/src/addons/lua_engine.cpp @@ -619,10 +619,22 @@ static int lua_UnitRace(lua_State* L) { static int lua_UnitPowerType(lua_State* L) { const char* uid = luaL_optstring(L, 1, "player"); auto* unit = resolveUnit(L, uid); + static const char* kPowerNames[] = {"MANA","RAGE","FOCUS","ENERGY","HAPPINESS","","RUNIC_POWER"}; if (unit) { - lua_pushnumber(L, unit->getPowerType()); - static const char* kPowerNames[] = {"MANA","RAGE","FOCUS","ENERGY","HAPPINESS","","RUNIC_POWER"}; uint8_t pt = unit->getPowerType(); + lua_pushnumber(L, pt); + lua_pushstring(L, (pt < 7) ? kPowerNames[pt] : "MANA"); + return 2; + } + // Fallback: party member stats for out-of-range members + auto* gh = getGameHandler(L); + std::string uidStr(uid); + for (char& c : uidStr) c = static_cast(std::tolower(static_cast(c))); + uint64_t guid = gh ? resolveUnitGuid(gh, uidStr) : 0; + const auto* pm = findPartyMember(gh, guid); + if (pm) { + uint8_t pt = pm->powerType; + lua_pushnumber(L, pt); lua_pushstring(L, (pt < 7) ? kPowerNames[pt] : "MANA"); return 2; }