From 64c9468ce3a2e73b169a717ff75d297e629f6b95 Mon Sep 17 00:00:00 2001 From: shagu Date: Thu, 26 Mar 2020 10:32:17 +0100 Subject: [PATCH] libhealth: add option to enable health estimation --- api/config.lua | 1 + libs/libhealth.lua | 20 +++++++++++++++++--- modules/gui.lua | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/api/config.lua b/api/config.lua index 59b7aff1..32a5f162 100644 --- a/api/config.lua +++ b/api/config.lua @@ -50,6 +50,7 @@ function pfUI:LoadConfig() pfUI:UpdateConfig("global", nil, "servertime", "0") pfUI:UpdateConfig("global", nil, "autosell", "0") pfUI:UpdateConfig("global", nil, "autorepair", "0") + pfUI:UpdateConfig("global", nil, "libhealth", "0") pfUI:UpdateConfig("gui", nil, "reloadmarker", "0") pfUI:UpdateConfig("gui", nil, "showdisabled", "0") diff --git a/libs/libhealth.lua b/libs/libhealth.lua index a806e279..b5fe7703 100644 --- a/libs/libhealth.lua +++ b/libs/libhealth.lua @@ -1,8 +1,9 @@ -- load pfUI environment setfenv(1, pfUI:GetEnvironment()) -local mobdb +local mobdb, enabled = {}, true local target, dmg, perc, diff = nil, 0, 0, 0, 0 +local UnitHealth, UnitHealthMax local libhealth = CreateFrame("Frame") libhealth:RegisterEvent("UNIT_HEALTH") libhealth:RegisterEvent("UNIT_COMBAT") @@ -10,9 +11,21 @@ libhealth:RegisterEvent("PLAYER_TARGET_CHANGED") libhealth:RegisterEvent("PLAYER_ENTERING_WORLD") libhealth:SetScript("OnEvent", function() if event == "PLAYER_ENTERING_WORLD" then + -- create initial health cache tables pfUI_cache["libhealth"] = pfUI_cache["libhealth"] or {} mobdb = pfUI_cache["libhealth"] - elseif event == "PLAYER_TARGET_CHANGED" then + + -- load enable state and set functions + enabled = pfUI_config["global"]["libhealth"] == "1" and true or nil + pfUI.api.UnitHealth = enabled and UnitHealth or nil + pfUI.api.UnitHealthMax = enabled and UnitHealthMax or nil + end + + -- return as we're not supposed to be here + if not enabled then this:UnregisterAllEvents() return end + + -- try to estimate mob health based on combat and health events + if event == "PLAYER_TARGET_CHANGED" then dmg, perc = 0, _G.UnitHealth("target") if UnitName("target") and UnitLevel("target") and _G.UnitHealthMax("target") == 100 then target = string.format("%s:%d",UnitName("target"), UnitLevel("target")) @@ -28,12 +41,12 @@ libhealth:SetScript("OnEvent", function() if not mobdb[target][2] or diff > mobdb[target][2] then mobdb[target][1] = ceil(dmg / diff * 100) mobdb[target][2] = diff - -- print(string.format("New Health of %s is %s", target, mobdb[target][1])) end end end end) +-- core function to query the generated database local unit, level, cur, max, dbstring local function GetHealthPairs(unitstr) unit = UnitName(unitstr) @@ -51,6 +64,7 @@ local function GetHealthPairs(unitstr) return nil end +-- functions to overwrite the default health api with estimated values pfUI.api.UnitHealth = function(unitstr) cur, max = GetHealthPairs(unitstr) return cur or _G.UnitHealth(unitstr) diff --git a/modules/gui.lua b/modules/gui.lua index 878500f7..fefab617 100644 --- a/modules/gui.lua +++ b/modules/gui.lua @@ -1415,6 +1415,7 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function () CreateConfig(nil, T["Disable All UIErrors"], C.global, "errors_hide", "checkbox") CreateConfig(nil, T["Highlight Settings That Require Reload"], C.gui, "reloadmarker", "checkbox") CreateConfig(nil, T["Show Incompatible Config Entries"], C.gui, "showdisabled", "checkbox") + CreateConfig(nil, T["Estimate Enemy Health Points"], C.global, "libhealth", "checkbox") -- Delete / Reset CreateConfig(nil, T["Delete / Reset"], nil, nil, "header")