-- Global information local classDisplayName, class, classID = UnitClass("player"); -- ** local PlayerClass = classID; -- this code and variables local PlayerClassName = classDisplayName; -- could be redundant. fix later. local PlayerClassNameIndex = class; -- ** local PH_v = '4.0'; -- version number local limit1 = 0; -- limiter for sounds local executeSound = "Sound\\interface\\AuctionWindowClose.ogg"; local total = 0 -- timer start local done = 0 -- toggle for timer repeat -- check for sound enabled if PH_sound == nil then PH_sound = 0; end -- check for display enabled if PH_on == nil then PH_on = 1; end PH_p = {} -- Class: ID: PH_p[1] = 20 -- Warrior 1 PH_p[2] = 20 -- Paladin 2 PH_p[3] = 20 -- Hunter 3 PH_p[4] = 35 -- Rogue 4 PH_p[5] = 20 -- Priest 5 PH_p[6] = 35 -- Death Knight 6 PH_p[7] = 10 -- Shaman 7 PH_p[8] = 10 -- Mage 8 PH_p[9] = 25 -- Warlock 9 PH_p[10] = 10 -- Monk 10 PH_p[11] = 25 -- Druid 11 PH_p[12] = 10 -- Demon Hunter 12 -- Welcome message (delay message and check to see if the addon is loaded) function PH_onUpdate(self,elapsed) total = total + elapsed if total >= 4 and done == 0 and IsAddOnLoaded("PortraitHealth") then DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Portrait Health "..PH_v.."|r loaded. Type |cff00aaff/ph|r for a list of commands.") done = 1 end end function PH_Loading() SlashCmdList["PH"] = PH_SlashCommandHandler; -- Add our slash command handler to the list of slash commands SLASH_PH1 = "/ph"; -- Associate /ph with the slash command list entry for PORTRAITHEALTH end -- Slash Commands function PH_SlashCommandHandler( msg, class ) local class = PlayerClass; local className = PlayerClassName; local x = RAID_CLASS_COLORS[PlayerClassNameIndex]; -- show commands if msg == '' then DEFAULT_CHAT_FRAME:AddMessage( "|cffffff00Portrait Health "..PH_v.."|r commands:"); DEFAULT_CHAT_FRAME:AddMessage( "Usage: |cff00aaff/ph|r <|cff00aaffcommand|r>"); DEFAULT_CHAT_FRAME:AddMessage(" - |cff00aaffshow|r to toggle health display"); DEFAULT_CHAT_FRAME:AddMessage(" - |cff00aaffsound|r to toggle sound at execute phase"); DEFAULT_CHAT_FRAME:AddMessage(" - |cff00aaffinfo|r to show current settings"); end -- health display toggle if msg == 'show' then if PH_on == 1 then PortraitHealth:Hide(); PH_on = 0; DEFAULT_CHAT_FRAME:AddMessage("Portrait Health |cff00aaffdisplay disabled|r.") elseif PH_on == 0 then PortraitHealth:Show(); PH_on = 1; DEFAULT_CHAT_FRAME:AddMessage("Portrait Health |cff00aaffdisplay enabled|r."); end end -- sound toggle if msg == 'sound' then if PH_sound == 1 then PH_sound = 0; DEFAULT_CHAT_FRAME:AddMessage("Portrait Health |cff00aaffsound disabled|r."); elseif PH_sound == 0 then PH_sound = 1; DEFAULT_CHAT_FRAME:AddMessage("Portrait Health |cff00aaffsound enabled|r."); end end -- show current settings if msg == 'info' then DEFAULT_CHAT_FRAME:AddMessage("Portrait Health version |cFFFFFF00" ..PH_v.. "|r"); DEFAULT_CHAT_FRAME:AddMessage("Execute at |cFFFF0000"..PH_p[class].."%|r \(|c"..x.colorStr..""..PlayerClassName.."|r\)"); if PH_on == 1 then DEFAULT_CHAT_FRAME:AddMessage("Health display is |cff00aaffon|r."); else DEFAULT_CHAT_FRAME:AddMessage("Health display is |cff00aaffoff|r."); end if PH_sound == 1 then DEFAULT_CHAT_FRAME:AddMessage("Sound is |cff00aaffon|r."); else DEFAULT_CHAT_FRAME:AddMessage("Sound is |cff00aaffoff|r."); end end end -- health display set by user prefs function PH_display() if PH_on == 0 then PortraitHealth:Hide(); else PortraitHealth:Show(); end end -- Set the text color and update health output function HealthPercentage(event) -- Health value to display. Whole numbers only. TargetPercentHealth = (UnitHealth("target") / UnitHealthMax("target") * 100); --causes "division by zero error on beta." -- Reset notifier when target changes or the target's health increases beyond the execute range if event == "PLAYER_TARGET_CHANGED" then limit1 = 0; end if TargetPercentHealth > PH_p[classID] then limit1 = 0; end -- Class detection : Checks for Paladin, as their execute phase is "less than or equal to 20%" unlike other classes. if PlayerClass ~= 2 and TargetPercentHealth < PH_p[PlayerClass] then PortraitHealth_Health:SetTextColor(1,0,0); if not UnitIsDead("target") and limit1 == 0 and PH_sound == 1 then PlaySoundFile(executeSound); limit1 = 1; end elseif PlayerClass == 2 and TargetPercentHealth <= PH_p[PlayerClass] then PortraitHealth_Health:SetTextColor(1,0,0); if not UnitIsDead("target") and limit1 == 0 and PH_sound == 1 then PlaySoundFile(executeSound); limit1 = 1; end else PortraitHealth_Health:SetTextColor(1,1,0); end -- reformat health without decimals local h = string.format("%.0f",TargetPercentHealth); local i = string.format("%.1f",TargetPercentHealth); -- change the portrait to show current health if UnitIsDead("target") then PortraitHealth_Health:SetText('Dead'); elseif TargetPercentHealth >= 1 then PortraitHealth_Health:SetText(h .. '%'); elseif TargetPercentHealth < 1 then PortraitHealth_Health:SetText(i .. '%'); end end