vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Name: MobHealth2
Author: Wyv & Skeeve
Description: Displays health value for mobs.
Original version by Telo.
]]
-- remember previous font type and font size
local lOldFontId = 0
local lOldFontSize = 0
--------------------------------------------------------------------------------------------------
-- external functions for macros / scripts
--------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- MobHealth_GetTargetCurHP()
--
-- Return current health points value for the current target as an integer
-- value. Return nil if there is no current target.
--
-- Example:
-- local targetCurrentHealth = MobHealth_GetTargetCurHP()
-- if targetCurrentHealth then
-- .......
-- end
-----------------------------------------------------------------------------
function MobHealth_GetTargetCurHP()
if MI2_Target.curHealth then
return MI2_Target.curHealth
else
return nil
end
end -- of MobHealth_GetTargetCurHP()
-----------------------------------------------------------------------------
-- MobHealth_GetTargetMaxHP()
--
-- Return maximum health points value for the current target as an integer
-- value. Return nil if there is no current target.
--
-- Example:
-- local targetMaxHealth = MobHealth_GetTargetMaxHP()
-- if targetMaxHealth then
-- .......
-- end
-----------------------------------------------------------------------------
function MobHealth_GetTargetMaxHP()
-- for compatibility to MobHealth-2: only return maxHP if there is a curHP
if MI2_Target.curHealth then
return MI2_Target.maxHealth
else
return nil
end
end -- of MobHealth_GetTargetMaxHP()
-----------------------------------------------------------------------------
-- MobHealth_PPP( index )
--
-- Return the Points-Per-Percent (PPP) value for a Mob identified by its index.
-- The index is the concatination of the Mob name and the Mob level (see
-- example below). 0 is returned if the PPP value is not available for
-- the given index. The example also shows how to calculate the actual
-- health points from the health percentage and the PPP value
--
-- Example:
-- local name = UnitName("target")
-- local level = UnitLevel("target")
-- local index = name..":"..level
-- local ppp = MobHealth_PPP( index )
-- local healthPercent = UnitHealth("target")
-- local curHealth = math.floor( healthPercent * ppp + 0.5)
-- local maxHealth = math.floor( 100 * ppp + 0.5)
-----------------------------------------------------------------------------
function MobHealth_PPP( index )
if index and MobHealthDB[index] then
local s, e, pts, pct = string.find(MobHealthDB[index], "^(%d+)/(%d+)$")
if ( pts and pct ) then
pts = pts + 0
pct = pct + 0
if ( pct ~= 0 ) then
return pts / pct
end
end
end
return 0
end
-----------------------------------------------------------------------------
-- MI2_GetHealthData()
--
-- get health data for a given mob from the given health database
-- (ie. either mob health database or player health database)
-----------------------------------------------------------------------------
function MI2_GetHealthData( database, index )
local s, e, pts, pct
if database[index] then
s, e, pts, pct = string.find(database[index], "^(%d+)/(%d+)$")
end
return ((pts or 0) + 0), ((pct or 0) + 0)
end -- MI2_GetHealthData()
-----------------------------------------------------------------------------
-- MobHealth_Set()
--
-- store pct and pts values for a given mob index in the given database
-----------------------------------------------------------------------------
function MobHealth_Set( database, index, pts, pct)
if pts or pct then
database[index] = (pts or 0).."/"..(pct or 0)
else
database[index] = nil
end
end -- MobHealth_Set()
-----------------------------------------------------------------------------
-- MI2_CalculateHealth()
--
-- (re)calculate current health and maximum for current target
-----------------------------------------------------------------------------
function MI2_CalculateHealth( updateMaxHealth )
if MI2_Target.unitHealth > 0 then
local curHealthMax = UnitHealthMax("target") -- have to check because BeastLore changes maxhealth from percent to value
if curHealthMax ~= 100 then
if MI2_Target.healthDB then
MobHealth_Set( MI2_Target.healthDB, MI2_Target.index, curHealthMax * 25, 2500 )
MI2_Target = { totalPercent = 0, maxHealth=curHealthMax }
MI2_Target.unitHealth = UnitHealth("target")
end
MI2_Target.curHealth = MI2_Target.unitHealth
MI2_Target.maxHealth = curHealthMax
MI2_Target.unitHealth = math.floor(100.0 * MI2_Target.unitHealth / MI2_Target.maxHealth + 0.5)
MI2_Target.showHealth = 1
elseif MI2_Target.totalPercent > 0 then
local ppp = MI2_Target.totalDamage / MI2_Target.totalPercent
MI2_Target.curHealth = math.floor(MI2_Target.unitHealth * ppp + 0.5)
if updateMaxHealth then
MI2_Target.maxHealth = math.floor( (100 * ppp) + 0.5 )
end
MI2_Target.showHealth = 1
end
end
end -- MI2_CalculateHealth()
-----------------------------------------------------------------------------
-- MobHealth_Display()
--
-- display the values and percentage for health / mana in target frame
-----------------------------------------------------------------------------
function MobHealth_Display( )
local healthText, manaText
-- create health and percent text if showing is enabled
if MI2_Target.showHealth then
if MobInfoConfig.TargetHealth == 1 then
healthText = string.format("%d/%d", MI2_Target.curHealth, MI2_Target.maxHealth )
end
if MobInfoConfig.HealthPercent == 1 then
if healthText then
healthText = healthText..string.format(" (%d%%)", MI2_Target.unitHealth )
else
healthText = string.format("%d%%", MI2_Target.unitHealth )
end
end
end
-- create mana text based on mana show flags
local maxmana = UnitManaMax("target")
if maxmana > 0 then
local mana = UnitMana("target")
if MobInfoConfig.TargetMana == 1 then
manaText = string.format("%d/%d", mana, maxmana )
end
if MobInfoConfig.ManaPercent == 1 then
if manaText then
manaText = manaText..string.format(" (%d%%)", math.floor(100.0 * mana / maxmana))
else
manaText = string.format("%d%%", math.floor(100.0 * mana / maxmana))
end
end
end
MI2_MobHealthText:SetText( healthText or "" )
MI2_MobManaText:SetText( manaText or "" )
end -- MobHealth_Display()
-----------------------------------------------------------------------------
-- MI2_MobHealth_SetFont()
--
-- set new font for display of health / mana in target frame
-----------------------------------------------------------------------------
local function MI2_MobHealth_SetFont( fontId, fontSize )
local fontName
if fontId ~= lOldFontId or fontSize ~= lOldFontSize then
lOldFontId = fontId
lOldFontSize = fontSize
-- select font name to use
if fontId == 1 then
fontName = "Fonts\\ARIALN.TTF" -- NumberFontNormal
elseif fontId == 2 then
fontName = "Fonts\\FRIZQT__.TTF" -- GameFontNormal
else
fontName = "Fonts\\MORPHEUS.TTF" -- ItemTextFontNormal
end
-- set font for health and mana text
MI2_MobHealthText:SetFont( fontName, fontSize )
MI2_MobManaText:SetFont( fontName, fontSize )
end
end -- of MI2_MobHealth_SetFont()
-----------------------------------------------------------------------------
-- MI2_MobHealth_SetPos()
--
-- set position and font for mob health/mana texts
-----------------------------------------------------------------------------
function MI2_MobHealth_SetPos( )
local font
-- set poition for health and mana text
MI2_MobHealthText:SetPoint( "TOP", "TargetFrameHealthBar", "BOTTOM", MobInfoConfig.HealthPosX, MobInfoConfig.HealthPosY )
MI2_MobManaText:SetPoint( "TOP", "TargetFrameManaBar", "BOTTOM", MobInfoConfig.ManaPosX, MobInfoConfig.ManaPosY )
-- update font ID and font size
MI2_MobHealth_SetFont( MobInfoConfig.TargetFont, MobInfoConfig.TargetFontSize )
-- redisplay health / mana values
MobHealth_Display()
end -- of MI2_MobHealth_SetPos()
-----------------------------------------------------------------------------
-- MI2_MobHealth_Reset()
-----------------------------------------------------------------------------
function MI2_MobHealth_Reset()
MI2_MobHealth_ClearTargetData()
MobHealthDB = {}
MobHealthPlayerDB = {}
end
-----------------------------------------------------------------------------
-- MI2_SaveTargetHealthData()
--
-- Save health data for current target in health database
-----------------------------------------------------------------------------
function MI2_SaveTargetHealthData()
if MI2_Target.index and MI2_Target.totalPercent > 0 and MI2_Target.totalPercent < 10000 then
MobHealth_Set( MI2_Target.healthDB, MI2_Target.index, MI2_Target.totalDamage, MI2_Target.totalPercent )
end
end -- MI2_SaveTargetHealthData()
-----------------------------------------------------------------------------
-- MI2_MobHealth_ClearTargetData()
--
-- Clear mob health data for current target
-----------------------------------------------------------------------------
function MI2_MobHealth_ClearTargetData()
if MI2_Target.index then
MI2_Target.healthDB[MI2_Target.index] = nil
MI2_Target = {}
MobHealth_Display()
end
end -- MI2_MobHealth_ClearTargetData()