-- Global information classDisplayName, class, classID = UnitClass("player"); PlayerClass = classID; PlayerClassName = classDisplayName; PlayerClassNameIndex = class; PH_v = '3.0'; -- version number limit1 = 0; executeSound = "Sound\\interface\\AuctionWindowClose.ogg"; PH_sound = 0; 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 -- Welcome message function PH_OnLoad() 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 if(IsAddOnLoaded("PortraitHealth")) then DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Portrait Health "..PH_v.."|r loaded. Type |cff00aaff/ph|r for a list of commands."); else end end -- Slash Commands function PH_SlashCommandHandler( msg, class ) local class = PlayerClass; local className = PlayerClassName; local x = RAID_CLASS_COLORS[PlayerClassNameIndex]; -- turn off the health display if msg == 'off' then PortraitHealth:Hide(); DEFAULT_CHAT_FRAME:AddMessage("Portrait Health disabled. Type |cFF00aaff/ph on|r to re-enable."); -- turn on the health display elseif msg == 'on' then PortraitHealth:Show(); DEFAULT_CHAT_FRAME:AddMessage("Portrait Health enabled."); -- show the current setup elseif msg == 'info' then DEFAULT_CHAT_FRAME:AddMessage("Addon version |cFFFFFF00" ..PH_v.. "|r"); DEFAULT_CHAT_FRAME:AddMessage("Execute at |cFFFF0000"..PH_p[class].."%|r \(|c"..x.colorStr..""..PlayerClassName.."|r\)"); elseif msg == 'sound on' then DEFAULT_CHAT_FRAME:AddMessage("Sound enabled."); PH_sound = 1; elseif msg == 'sound off' then DEFAULT_CHAT_FRAME:AddMessage("Sound disabled."); PH_sound = 0; -- display list of available commands elseif msg == '' then DEFAULT_CHAT_FRAME:AddMessage( "|cffffff00Portrait Health "..PH_v.."|r commands:"); DEFAULT_CHAT_FRAME:AddMessage( "Type |cff00aaff/ph|r before the command. Ex: |cff00aaff/ph off|r disables the health display."); DEFAULT_CHAT_FRAME:AddMessage( " - |cff00aaffoff|r to disable target health display."); DEFAULT_CHAT_FRAME:AddMessage( " - |cff00aaffon|r to re-enable."); DEFAULT_CHAT_FRAME:AddMessage( " - |cff00aaffsound off|r to disable execute sound notifier."); DEFAULT_CHAT_FRAME:AddMessage( " - |cff00aaffsound on|r to enable execute sound notifier."); DEFAULT_CHAT_FRAME:AddMessage( " - |cff00aaffinfo|r for information about your current settings."); end end --function PHChanged_OnLoad() -- this:RegisterEvent("PLAYER_TARGET_CHANGED"); --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); -- 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 if PlayerClass == 1 and TargetPercentHealth < 20 then -- Warrior 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 <= 20 then -- Paladin 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 == 3 and TargetPercentHealth <= 20 then -- Hunter 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 == 4 and TargetPercentHealth < 35 then -- Rogue 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 == 5 and TargetPercentHealth < 20 then -- Priest 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 == 6 and TargetPercentHealth < 35 then -- Death Knight 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 == 9 and TargetPercentHealth < 20 then -- Warlock 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 == 10 and TargetPercentHealth <= 10 then -- Monk 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 == 11 and TargetPercentHealth <= 25 then -- Druid PortraitHealth_Health:SetTextColor(1,0,0); if not UnitIsDead("target") and limit1 == 0 and PH_sound == 1 then PlaySoundFile(executeSound); limit1 = 1; end elseif TargetPercentHealth <= 10 then -- Other classes 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