Code:
local function fixvalue(v)
if v >= 1e6 then
return ('%.1fm'):format(v/1e6):gsub('%.?0+([km])$','%1')
elseif v >= 1e4 then
return ('%.1fk'):format(v/1e3):gsub('%.?0+([km])$','%1')
else
return v
end
end
local oldtextlist = {
PlayerFrameHealthBarText,
PlayerFrameManaBarText,
TargetFrameTextureFrameHealthBarText,
TargetFrameTextureFrameManaBarText,
FocusFrameTextureFrameHealthBarText,
FocusFrameTextureFrameManaBarText,
}
local hideoldtext = function()
for i,v in pairs(oldtextlist) do
v:SetText()
end
end
local newtextlist = {
player = {
healthpercent = {parent = PlayerFrameHealthBar, anchor = 'LEFT'},
healthvalue = {parent = PlayerFrameHealthBar,anchor = 'RIGHT'},
manapercent = {parent = PlayerFrameManaBar,anchor = 'LEFT'},
manavalue = {parent = PlayerFrameManaBar,anchor = 'RIGHT'},
},
target = {
healthpercent = {parent = TargetFrameHealthBar,anchor = 'LEFT'},
healthvalue = {parent = TargetFrameHealthBar,anchor = 'RIGHT'},
manapercent = {parent = TargetFrameManaBar,anchor = 'LEFT'},
manavalue = {parent = TargetFrameManaBar,anchor = 'RIGHT'},
},
focus = {
healthpercent = {parent = FocusFrameHealthBar,anchor = 'LEFT'},
healthvalue = {parent = FocusFrameHealthBar,anchor = 'RIGHT'},
manapercent = {parent = FocusFrameManaBar,anchor = 'LEFT'},
manavalue = {parent = FocusFrameManaBar,anchor = 'RIGHT'},
},
}
for unit,elements in pairs(newtextlist) do
for k, opts in pairs(elements) do
local fontsize = 14
local textname = unit..k
local offsetX = 5
local offsetY = 0
if opts.anchor == 'RIGHT' then
offsetX = -5
end
if opts.text == nil then
local f = CreateFrame('Frame',nil,opts.parent)
f:SetFrameLevel(10)
local text = f:CreateFontString(name, 'OVERLAY')
text:SetFont(STANDARD_TEXT_FONT, fontsize, 'OUTLINE')
text:SetPoint(opts.anchor,opts.parent,opts.anchor,offsetX,offsetY)
opts.text = text
end
end
end
local UpDateText = function()
hideoldtext()
for unit, elements in pairs(newtextlist) do
for k,opts in pairs(elements) do
local Minvalue, Maxvalue = opts.parent:GetMinMaxValues()
local value = opts.parent:GetValue()
if k == 'healthpercent' or k == 'manapercent' then
if GetCVarBool('statusTextPercentage') then
local per = math.floor((value / Maxvalue) * 100)
opts.text:Show()
opts.text:SetText(per..'%')
else
opts.text:Hide()
end
elseif k == 'healthvalue' then
if(UnitIsDead(unit)) then
opts.text:SetText(' ')
elseif (UnitIsGhost(unit)) then
opts.text:SetText('Dead')
elseif not UnitIsConnected(unit) then
opts.text:SetText('DC')
else
opts.text:SetText(fixvalue(value))
end
elseif k == 'manavalue' then
if (unit == 'target' or unit == 'focus') and not UnitIsConnected(unit) or Maxvalue == 0 or value == 0 then
opts.text:SetText()
elseif (UnitIsDead(unit) or UnitIsGhost(unit)) then
opts.text:SetText()
else
opts.text:SetText(fixvalue(value))
end
end
end
end
end
hooksecurefunc('TextStatusBar_Initialize', UpDateText)
hooksecurefunc('TextStatusBar_OnEvent', UpDateText)
hooksecurefunc('TextStatusBar_UpdateTextString', UpDateText)
hooksecurefunc('TextStatusBar_OnValueChanged', UpDateText)
hooksecurefunc('HideTextStatusBarText', UpDateText)
Copy & paste the code into any existing LUA-file (or into thek: Unitframes; This AddOn contains 3 files: class.lua, config.lua or core.lua - you may choose either one)