Files
ShaguTweaks-ClassicAPI/mods/health-numbers.lua
T
2026-08-12 15:58:43 +02:00

88 lines
3.1 KiB
Lua

local _G = ShaguTweaks.GetGlobalEnv()
local T = ShaguTweaks.T
local Abbreviate = ShaguTweaks.Abbreviate
local GetColorGradient = ShaguTweaks.GetColorGradient
local vanilla = ShaguTweaks.GetExpansion() == "vanilla" or nil
local module = ShaguTweaks:register({
title = T["Real Health Numbers"],
description = T["Estimates health numbers, and shows numbers on player, pet and target unit frames."],
expansions = { ["vanilla"] = true },
category = T["Unit Frames"],
enabled = false,
})
module.enable = function(self)
TargetFrame.StatusTexts = CreateFrame("Frame", nil, TargetFrame)
TargetFrame.StatusTexts:SetAllPoints(TargetFrame)
TargetFrameHealthBar.TextString = TargetFrame.StatusTexts:CreateFontString("TargetFrameHealthBarText", "OVERLAY")
TargetFrameHealthBar.TextString:SetPoint("TOP", TargetFrameHealthBar, "BOTTOM", -2, 23)
TargetFrameManaBar.TextString = TargetFrame.StatusTexts:CreateFontString("TargetFrameManaBarText", "OVERLAY")
TargetFrameManaBar.TextString:SetPoint("TOP", TargetFrameManaBar, "BOTTOM", -2, 22)
PetFrameHealthBar.TextString:SetPoint("CENTER", PetFrameHealthBar, "CENTER", -2, 0)
PetFrameManaBar.TextString:SetPoint("CENTER", PetFrameManaBar, "CENTER", -2, -2)
for _, frame in pairs( { TargetFrameHealthBar, TargetFrameManaBar, PlayerFrameHealthBar, PlayerFrameManaBar }) do
frame.TextString:SetFontObject("GameFontWhite")
frame.TextString:SetFont(STANDARD_TEXT_FONT, 10, "OUTLINE")
frame.TextString:SetHeight(32)
end
for _, frame in pairs( { PetFrameHealthBar, PetFrameManaBar }) do
frame.TextString:SetFontObject("GameFontWhite")
frame.TextString:SetFont(STANDARD_TEXT_FONT, 9, "OUTLINE")
frame.TextString:SetHeight(32)
frame.TextString:SetJustifyH("LEFT")
end
local HookTextStatusBar_UpdateTextString = TextStatusBar_UpdateTextString
function TextStatusBar_UpdateTextString(sb)
if not sb then sb = this end
HookTextStatusBar_UpdateTextString(sb)
local string = sb.TextString
if string and sb.unit then
-- hide tbc text string element
if not vanilla then
TargetFrameHealthBarText:Hide()
end
sb.lockShow = 42
sb:Show()
local min, max = sb:GetMinMaxValues()
local cur = sb:GetValue()
local percent = max > 0 and floor(cur/max*100) or 0
if sb:GetName() == "TargetFrameHealthBar" then
cur, max = ShaguTweaks.libhealth:GetUnitHealth(sb.unit)
end
if cur == percent and strfind(sb:GetName(), "Health") then
string:SetText(percent .. "/" .. percent)
elseif sb:GetName() == "TargetFrameHealthBar" and cur < max then
string:SetText(Abbreviate(cur) .. "/" .. Abbreviate(max) .. " - " .. percent .. "%")
else
string:SetText(Abbreviate(cur) .. "/" .. Abbreviate(max))
end
if max == 0 then
string:Hide()
string:SetText("")
elseif sb.unit == "target" and UnitIsDead("target") then
string:Hide()
string:SetText("")
elseif sb.unit == "target" and UnitIsGhost("target") then
string:Hide()
string:SetText("")
else
string:Show()
end
end
end
end