local addon, ns = ... local cfg = ns.cfg local SVal = function(val) if val then if (val >= 1e6) then return ("%.1fm"):format(val / 1e6) elseif (val >= 1e3) then return ("%.1fk"):format(val / 1e3) else return ("%d"):format(val) end end end local function hex(r, g, b) if r then if (type(r) == 'table') then if(r.r) then r, g, b = r.r, r.g, r.b else r, g, b = unpack(r) end end return ('|cff%02x%02x%02x'):format(r * 255, g * 255, b * 255) end end pcolors = setmetatable({ power = setmetatable({ ["MANA"] = {0.14, 0.35, 1.0}, ["RAGE"] = {1.0, 0.0, 0.0}, ["RUNIC_POWER"] = {0.44, 0.44, 0.44}, ["FOCUS"] = {1.0,0.75,0.25}, ["ENERGY"] = {1.0, 0.9, 0.35}, ["HAPPINESS"] = {0.0, 1.0, 1.0}, --["RUNES"] = {0.50, 0.50, 0.50}, ["AMMOSLOT"] = {0.80, 0.60, 0.00}, ["FUEL"] = {0.0, 0.55, 0.5}, ["SOUL_SHARDS"] = {0.46, 0.32, 0.87}, ["POWER_TYPE_HEAT"] = {0.55,0.57,0.61}, ["POWER_TYPE_OOZE"] = {0.76,1,0}, ["POWER_TYPE_BLOOD_POWER"] = {0.7,0,1}, }, {__index = oUF.colors.power}), }, {__index = oUF.colors}) oUF.Tags["fail:lfdrole"] = function(unit) local role = UnitGroupRolesAssigned(unit) if role == "HEALER" then return "|cff8AFF30Heals|r" elseif role == "TANK" then return "|cffFFF130Tank|r" elseif role == "DAMAGER" then return "|cffFF6161DPS|r" end end oUF.TagEvents["fail:lfdrole"] = "PARTY_MEMBERS_CHANGED PLAYER_ROLES_ASSIGNED" oUF.Tags['fail:hp'] = function(u) if UnitIsDead(u) or UnitIsGhost(u) or not UnitIsConnected(u) then return oUF.Tags['fail:DDG'](u) else local per = oUF.Tags['perhp'](u).."%" or 0 local min, max = UnitHealth(u), UnitHealthMax(u) if u == "player" or u == "target" then if min~=max then return "|cFFFFAAAA"..SVal(min).."|r/"..SVal(max).." "..per else return SVal(max).." "..per end else return per end end end oUF.TagEvents['fail:hp'] = 'UNIT_HEALTH' oUF.Tags['fail:raidhp'] = function(u) if UnitIsDead(u) or UnitIsGhost(u) or not UnitIsConnected(u) then return oUF.Tags['fail:DDG'](u) else local per = oUF.Tags['perhp'](u).."%" or 0 return per end end oUF.TagEvents['fail:raidhp'] = 'UNIT_HEALTH' oUF.Tags['fail:color'] = function(u, r) local _, class = UnitClass(u) local reaction = UnitReaction(u, "player") if UnitIsDead(u) or UnitIsGhost(u) or not UnitIsConnected(u) then return "|cffA0A0A0" elseif (UnitIsTapped(u) and not UnitIsTappedByPlayer(u)) then return hex(oUF.colors.tapped) elseif (UnitIsPlayer(u)) then return hex(oUF.colors.class[class]) elseif reaction then return hex(oUF.colors.reaction[reaction]) else return hex(1, 1, 1) end end oUF.TagEvents['fail:color'] = 'UNIT_REACTION UNIT_HEALTH UNIT_HAPPINESS' oUF.Tags["fail:afkdnd"] = function(unit) return UnitIsAFK(unit) and "" or UnitIsDND(unit) and "" or "" end oUF.TagEvents["fail:afkdnd"] = 'PLAYER_FLAGS_CHANGED UNIT_POWER UNIT_MAXPOWER' oUF.Tags['fail:DDG'] = function(u) if UnitIsDead(u) then return "|cffCFCFCF Dead|r" elseif UnitIsGhost(u) then return "|cffCFCFCF Ghost|r" elseif not UnitIsConnected(u) then return "|cffCFCFCF D/C|r" end end oUF.TagEvents['fail:DDG'] = 'UNIT_HEALTH' oUF.Tags['fail:power'] = function(u) local min, max = UnitPower(u), UnitPowerMax(u) if min~=max then return SVal(min).."/"..SVal(max) else return SVal(max) end end oUF.TagEvents['fail:power'] = 'UNIT_POWER UNIT_MAXPOWER' oUF.Tags['fail:pp'] = function(u) if u == "player" or u == "target" then local _, str = UnitPowerType(u) if str then return hex(pcolors.power[str] or {250/255, 75/255, 60/255})..SVal(UnitPower(u)) end end end oUF.TagEvents['fail:pp'] = 'UNIT_POWER UNIT_MAXPOWER' -- Level oUF.Tags["fail:level"] = function(unit) local c = UnitClassification(unit) local l = UnitLevel(unit) local d = GetQuestDifficultyColor(l) local str = l if l <= 0 then l = "??" end if c == "worldboss" then str = string.format("|cff%02x%02x%02xBoss|r",250,20,0) elseif c == "eliterare" then str = string.format("|cff%02x%02x%02x%s|r|cff0080FFR|r+",d.r*255,d.g*255,d.b*255,l) elseif c == "elite" then str = string.format("|cff%02x%02x%02x%s|r+",d.r*255,d.g*255,d.b*255,l) elseif c == "rare" then str = string.format("|cff%02x%02x%02x%s|r|cff0080FFR|r",d.r*255,d.g*255,d.b*255,l) else if not UnitIsConnected(unit) then str = "??" else if UnitIsPlayer(unit) then str = string.format("|cff%02x%02x%02x%s",d.r*255,d.g*255,d.b*255,l) elseif UnitPlayerControlled(unit) then str = string.format("|cff%02x%02x%02x%s",d.r*255,d.g*255,d.b*255,l) else str = string.format("|cff%02x%02x%02x%s",d.r*255,d.g*255,d.b*255,l) end end end return str end oUF.TagEvents["fail:level"] = "UNIT_LEVEL PLAYER_LEVEL_UP UNIT_CLASSIFICATION_CHANGED" oUF.UnitlessTagEvents.PLAYER_REGEN_DISABLED = true oUF.UnitlessTagEvents.PLAYER_REGEN_ENABLED = true