local XPerl_Target_Events = {} ---------------------- -- Loading Function -- ---------------------- function XPerl_Target_OnLoad() CombatFeedback_Initialize(XPerl_TargetHitIndicator, 30) this:RegisterEvent("PLAYER_ENTERING_WORLD") this:RegisterEvent("PLAYER_LEAVING_WORLD") this:RegisterEvent("VARIABLES_LOADED") --this.PlayerFlash = 0 this.lastTarget = "" this.lastDeathMsg = "" this.unitid = "target" this.perlBuffs = 0 this.perlDebuffs = 0 XPerl_InitFadeFrame(this) if (XPerl_Target_AssistFrame) then -- Since target module is loaded after raid helper, we have to attach this manually -- because the target frame did not exist when this frame was created XPerl_Target_AssistFrame:SetParent(XPerl_Target_CastClickOverlay) XPerl_Target_AssistFrame:ClearAllPoints() XPerl_Target_AssistFrame:SetPoint("TOPLEFT", XPerl_Target_PortraitFrame, "TOPRIGHT", -2, -20) end -- Set here to reduce amount of function calls made this:SetScript("OnEvent", XPerl_Target_OnEvent) this:SetScript("OnUpdate", XPerl_Target_OnUpdate) this:SetScript("OnShow", XPerl_Target_UpdatePortrait) XPerl_RegisterHighlight(XPerl_Target_CastClickOverlay, 3) XPerl_RegisterPerlFrames(XPerl_Target, {"NameFrame", "StatsFrame", "LevelFrame", "PortraitFrame", "TypeFramePlayer", "CreatureType", "BossFrame", "CPFrame"}) this.FlashFrames = {XPerl_Target_PortraitFrame, XPerl_Target_NameFrame, XPerl_Target_LevelFrame, XPerl_Target_StatsFrame, XPerl_Target_BossFrame, XPerl_Target_TypeFramePlayer, XPerl_Target_CreatureType } end local events = {"UNIT_SPELLMISS", "UNIT_FACTION", "UNIT_DYNAMIC_FLAGS", "UNIT_FLAGS", "UNIT_CLASSIFICATION_CHANGED", "PLAYER_TARGET_CHANGED", "PLAYER_FLAGS_CHANGED", "PLAYER_COMBO_POINTS", "UNIT_MODEL_CHANGED", "PARTY_MEMBER_DISABLE", "PARTY_MEMBER_ENABLE", "UNIT_AURA", "RAID_TARGET_UPDATE", "PARTY_MEMBERS_CHANGED", "PARTY_LEADER_CHANGED", "PARTY_LOOT_METHOD_CHANGED", "CHAT_MSG_COMBAT_HOSTILE_DEATH"} local function XPerl_Target_RegisterSome() for i,event in pairs(events) do this:RegisterEvent(event) end XPerl_RegisterBasics() end local function XPerl_Target_UnregisterSome() for i,event in pairs(events) do this:UnregisterEvent(event) end XPerl_UnregisterBasics() end -------------------- -- Buff Functions -- -------------------- local function GetBuffButton(thisFrame, buffnum, debuff, createIfAbsent) local buffType if (debuff == 1) then buffType = "DeBuff" else buffType = "Buff" end local name if (thisFrame == XPerl_Target) then name = "XPerl_Target_BuffFrame_"..buffType..buffnum else name = thisFrame:GetName().."_BuffFrame_"..buffType..buffnum end local button = getglobal(name) if (not button and createIfAbsent) then local parent if (thisFrame == XPerl_Target) then parent = XPerl_Target_BuffFrame else parent = getglobal(thisFrame:GetName().."_BuffFrame") end button = CreateFrame("Button", name, parent, "XPerl_"..buffType.."Template") button:SetID(buffnum) local size = XPerlConfig.TargetBuffSize * (1 + (0.2 * debuff)) button:SetHeight(size) button:SetWidth(size) if (debuff == 1) then if (thisFrame == XPerl_Target) then button:SetScript("OnEnter", function() XPerl_Target_SetDeBuffTooltip("target") end) else button:SetScript("OnEnter", function() XPerl_Target_SetDeBuffTooltip("targettarget") end) end else if (thisFrame == XPerl_Target) then button:SetScript("OnEnter", function() XPerl_Target_SetBuffTooltip("target") end) else button:SetScript("OnEnter", function() XPerl_Target_SetBuffTooltip("targettarget") end) end end button:SetScript("OnLeave", XPerl_PlayerTipHide) button:ClearAllPoints() if (buffnum == 1) then button:SetPoint("TOPLEFT", 0, 0) else local prevButton = getglobal(thisFrame:GetName().."_BuffFrame_"..buffType..(buffnum - 1)) button:SetPoint("TOPLEFT", prevButton, "TOPRIGHT", 1 + debuff, 0) end end return button end -- This gets complicated. When we're the target frame, we have to wrap to next line of buffs if there's no mana on the target, or if the mob type frame is shown -- And if the mob type frame is shown, AND there's no mana, then we may have to use small width on 2 rows, depending on buff size. -- displayWidth is our current row max -- displayWidthExtra is the max size after any short rows -- displayWidthStart remembers the short row size for 2nd pass function XPerl_Targets_BuffPositions(unitTarget, argFramePrefix, ttFrame) local above = 0 if (ttFrame == XPerl_Target) then above = XPerlConfig.TargetBuffsAbove == 1 else above = XPerlConfig.TargetTargetBuffsAbove == 1 end local buffFrame = getglobal(argFramePrefix.."BuffFrame") local nameFrame = getglobal(argFramePrefix.."NameFrame") local statsFrame = getglobal(argFramePrefix.."StatsFrame") if (above) then buffFrame:ClearAllPoints() buffFrame:SetPoint("BOTTOMLEFT", nameFrame, "TOPLEFT", 2, 0) else buffFrame:ClearAllPoints() buffFrame:SetPoint("TOPLEFT", statsFrame, "BOTTOMLEFT", 2, 0) end local unitBuff = XPerl_UnitBuff(unitTarget, 1, XPerlConfig.TargetCastableBuffs) local buff1 = GetBuffButton(ttFrame, 1, 0, true) unitBuff = XPerl_UnitDebuff(unitTarget, 1, XPerlConfig.TargetCastableBuffs) local debuff1 = GetBuffButton(ttFrame, 1, 1, true) local buffHeight, debuffHeight if (buff1) then buffHeight = math.floor(buff1:GetHeight() + 1.5) else buffHeight = 21 end if (debuff1) then debuffHeight = math.floor(debuff1:GetHeight() + 2.5) else debuffHeight = 23 end local displayWidth = math.floor(getglobal(argFramePrefix.."StatsFrame"):GetWidth() - 3.5) local displayWidthStart = displayWidth local displayWidthExtra = displayWidth local mana = UnitManaMax(unitTarget) local buffRows = 1 local debuffRows = 1 local pframe = getglobal(argFramePrefix.."PortraitFrame") if (pframe) then displayWidthExtra = displayWidthExtra + math.floor(pframe:GetWidth() - 3.5) end if (unitTarget == "target") then if (XPerlConfig.ShowTargetLevel == 1 or XPerlConfig.ShowTargetClassIcon == 1) then pframe = getglobal(argFramePrefix.."LevelFrame") if (pframe) then displayWidthExtra = displayWidthExtra + math.floor(pframe:GetWidth() - 3.5) end end if (above or not XPerl_Target_CreatureType:IsShown() or UnitFactionGroup("player") ~= UnitFactionGroup(unitTarget)) then displayWidth = displayWidthExtra end else displayWidthExtra = displayWidth displayWidthStart = displayWidth end local unitBuff = XPerl_UnitBuff(unitTarget, 1, XPerlConfig.TargetCastableBuffs) local buffPrev = buff1 local buffRowStart = buffPrev local buffsWidth = buffHeight ttFrame.buffData = {{row = 1, buff = buffRowStart}} for i = 2,20 do unitBuff = XPerl_UnitBuff(unitTarget, i, XPerlConfig.TargetCastableBuffs) local buff = GetBuffButton(ttFrame, i, 0, unitBuff and (buffRows <= XPerlConfig.TargetBuffRows)) if (buff) then buff:ClearAllPoints() if (buffsWidth + buffHeight > displayWidth) then if (above) then buff:SetPoint("BOTTOMLEFT", buffRowStart, "TOPLEFT", 0, -1) else buff:SetPoint("TOPLEFT", buffRowStart, "BOTTOMLEFT", 0, -1) end buffRowStart = buff if (buffRows > 1 or mana > 0 or buffHeight > 26 or not XPerl_Target_CreatureType:IsShown()) then displayWidth = displayWidthExtra end buffsWidth = 0 buffRows = buffRows + 1 else buff:SetPoint("TOPLEFT", buffPrev, "TOPRIGHT", 1, 0) end buffsWidth = buffsWidth + buffHeight buffPrev = buff end tinsert(ttFrame.buffData, {row = buffRows, buff = buffRowStart}) end if (not above) then if ((UnitFactionGroup("player") == UnitFactionGroup(unitTarget))) then if (mana == 0) then if (buffRows > 1 or buffHeight > 25) then displayWidth = displayWidthExtra else displayWidth = displayWidthStart end else displayWidth = displayWidthExtra end else if (unitTarget == "target" and (mana == 0 or XPerl_Target_CreatureType:IsShown())) then displayWidth = displayWidthStart else displayWidth = displayWidthExtra end end end local unitDebuff = XPerl_UnitDebuff(unitTarget, 1, XPerlConfig.TargetCastableBuffs) buffPrev = debuff1 buffRowStart = buffPrev buffsWidth = debuffHeight ttFrame.debuffData = {{row = 1, buff = buffRowStart}} for i = 2,16 do unitDebuff = XPerl_UnitDebuff(unitTarget, i, XPerlConfig.TargetCastableBuffs) local buff = GetBuffButton(ttFrame, i, 1, unitDebuff and (debuffRows <= XPerlConfig.TargetBuffRows)) if (buff) then buff:ClearAllPoints() if (buffsWidth + debuffHeight > displayWidth) then if (above) then buff:SetPoint("BOTTOMLEFT", buffRowStart, "TOPLEFT", 0, 2) else buff:SetPoint("TOPLEFT", buffRowStart, "BOTTOMLEFT", 0, -2) end buffRowStart = buff if (debuffRows > 1 or mana > 0 or debuffHeight > 26 or not XPerl_Target_CreatureType:IsShown()) then displayWidth = displayWidthExtra end buffsWidth = 0 debuffRows = debuffRows + 1 else buff:SetPoint("TOPLEFT", buffPrev, "TOPRIGHT", 2, 0) end buffsWidth = buffsWidth + debuffHeight buffPrev = buff end tinsert(ttFrame.debuffData, {row = debuffRows, buff = buffRowStart}) end end -- XPerl_Targets_BuffUpdate function XPerl_Targets_BuffUpdate(unitTarget, argFramePrefix, ttFrame) if (this.Fading == 1) then return end if (ttFrame == XPerl_Target) then above = XPerlConfig.TargetBuffsAbove == 1 else above = XPerlConfig.TargetTargetBuffsAbove == 1 end if (UnitExists(unitTarget)) then this.perlBuffs = 0 this.perlDebuffs = 0 for buffnum=1,20 do local hide = false if (ttFrame.buffData and ttFrame.buffData[buffnum] and ttFrame.buffData[buffnum].row > XPerlConfig.TargetBuffRows) then hide = true else local buff, count = XPerl_UnitBuff(unitTarget, buffnum, XPerlConfig.TargetCastableBuffs) if (buff) then local button = GetBuffButton(ttFrame, buffnum, 0, true) local icon = getglobal(button:GetName().."Icon") this.perlBuffs = this.perlBuffs + 1 local buffCount = getglobal(button:GetName().."Count") icon:SetTexture(buff) if (count > 1) then buffCount:SetText(count) buffCount:Show() else buffCount:Hide() end button:Show() else hide = true end end if (hide) then local button = getglobal(argFramePrefix.."BuffFrame_Buff"..buffnum) if (button) then button:Hide() end end end for buffnum=1,16 do local hide = false if (ttFrame.debuffData and ttFrame.debuffData[buffnum] and ttFrame.debuffData[buffnum].row > XPerlConfig.TargetBuffRows) then hide = true else local debuff, debuffApplications, debuffType = XPerl_UnitDebuff(unitTarget, buffnum, XPerlConfig.TargetCurableDebuffs) if (debuff) then local button = GetBuffButton(ttFrame, buffnum, 1, true) local icon = getglobal(button:GetName().."Icon") this.perlDebuffs = this.perlDebuffs + 1 local debuffCount = getglobal(button:GetName().."Count") icon:SetTexture(debuff) if ( debuffApplications > 1 ) then debuffCount:SetText(debuffApplications) debuffCount:Show() else debuffCount:Hide() end local borderColor = DebuffTypeColor[(debuffType or "none")] local buffBorder = getglobal(button:GetName().."Border") buffBorder:SetVertexColor(borderColor.r, borderColor.g, borderColor.b) button:Show() else hide = true end end if (hide) then local button = getglobal(argFramePrefix.."BuffFrame_DeBuff"..buffnum) if (button) then button:Hide() end end end local buff1 = getglobal(argFramePrefix.."BuffFrame_Buff1") local debuff1 = getglobal(argFramePrefix.."BuffFrame_DeBuff1") if (buff1 or debuff1) then if (buff1) then buff1:ClearAllPoints() end if (debuff1) then debuff1:ClearAllPoints() end if ((UnitFactionGroup("player") == UnitFactionGroup(unitTarget))) then if (buff1) then if (above) then buff1:SetPoint("BOTTOMLEFT", 0, 0) else buff1:SetPoint("TOPLEFT", 0, 0) end end if (debuff1) then local mark = this.perlBuffs if (mark < 1) then mark = 1 end if (above) then debuff1:SetPoint("BOTTOMLEFT", ttFrame.buffData[mark].buff, "TOPLEFT", 0, 2) else debuff1:SetPoint("TOPLEFT", ttFrame.buffData[mark].buff, "BOTTOMLEFT", 0, -2) end end else if (debuff1) then if (above) then debuff1:SetPoint("BOTTOMLEFT", 0, 0) else debuff1:SetPoint("TOPLEFT", 0, 0) end end if (buff1) then local mark = this.perlDebuffs if (mark < 1) then mark = 1 end if (this.perlDebuffs > 0) then if (above) then buff1:SetPoint("BOTTOMLEFT", ttFrame.debuffData[mark].buff, "TOPLEFT", 0, 2) else buff1:SetPoint("TOPLEFT", ttFrame.debuffData[mark].buff, "BOTTOMLEFT", 0, -2) end end end end end end end -- XPerl_Target_SetBuffTooltip function XPerl_Target_SetBuffTooltip (target) GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") if (target == "targettarget") then if (strfind(this:GetName(), "TargetTargetTarget")) then target = "targettargettarget" end end XPerl_TooltipSetUnitBuff(GameTooltip, target, this:GetID(), XPerlConfig.TargetCastableBuffs) XPerl_ToolTip_AddBuffDuration(target) end -- XPerl_Target_SetDeBuffTooltip function XPerl_Target_SetDeBuffTooltip (target) GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") if (target == "targettarget") then if (strfind(this:GetName(), "TargetTargetTarget")) then target = "targettargettarget" end end XPerl_TooltipSetUnitDebuff(GameTooltip, target, this:GetID(), XPerlConfig.TargetCurableDebuffs) end --------------- -- Combo Points --------------- local function XPerl_Target_UpdateCombo() local combopoints = GetComboPoints() if (XPerlConfig.UseCPMeter == 1) then XPerl_Target_CPFrame:Hide() XPerl_Target_CPMeter:SetMinMaxValues(0, 5) XPerl_Target_CPMeter:SetValue(combopoints) XPerl_Target_CPMeter:Show() if (combopoints == 5) then XPerl_Target_CPMeter:SetStatusBarColor(1, 0, 0, 0.7) elseif (combopoints == 4) then XPerl_Target_CPMeter:SetStatusBarColor(1, 0.5, 0, 0.7) elseif (combopoints == 3) then XPerl_Target_CPMeter:SetStatusBarColor(1, 1, 0, 0.6) elseif (combopoints == 2) then XPerl_Target_CPMeter:SetStatusBarColor(0.5, 1, 0, 0.4) elseif (combopoints == 1) then XPerl_Target_CPMeter:SetStatusBarColor(0, 1, 0, 0.4) else XPerl_Target_CPMeter:Hide() end elseif (XPerlConfig.BlizzardCPMeter == 0) then XPerl_Target_CPMeter:Hide() XPerl_Target_CPFrame:Show() XPerl_Target_CPFrameText:SetText(combopoints) if (combopoints == 5) then XPerl_Target_CPFrameText:SetTextColor(1, 0, 0) elseif (combopoints == 4) then XPerl_Target_CPFrameText:SetTextColor(1, 0.5, 0) elseif (combopoints == 3) then XPerl_Target_CPFrameText:SetTextColor(1, 1, 0) elseif (combopoints == 2) then XPerl_Target_CPFrameText:SetTextColor(0.5, 1, 0) elseif (combopoints == 1) then XPerl_Target_CPFrameText:SetTextColor(0, 1, 0) else XPerl_Target_CPFrame:Hide() end end end -- XPerl_UnitDebuffInformation local function XPerl_UnitDebuffInformation(debuff) local i = 1 while UnitDebuff("target", i) do XPerlBuffStatusTooltip:SetUnitDebuff("target", i ) if (XPerlBuffStatusTooltipTextLeft1:GetText() == debuff) then _, debuffApplications = UnitDebuff("target", i) return debuffApplications end i = i + 1 end return 0 end --------------------- --Debuffs -- --------------------- local function XPerl_Target_DebuffUpdate() if (this.Fading == 1) then return end if (GetComboPoints()==0) then local numDebuffs = 0 local _, class = UnitClass("player") if (class == "WARRIOR") then numDebuffs = XPerl_UnitDebuffInformation(XPERL_SPELL_SUNDER) elseif (class == "PRIEST") then numDebuffs = XPerl_UnitDebuffInformation(XPERL_SPELL_SHADOWV) elseif (class == "MAGE") then numDebuffs = XPerl_UnitDebuffInformation(XPERL_SPELL_FIREV) if (numDebuffs == 0) then numDebuffs = XPerl_UnitDebuffInformation(XPERL_SPELL_WINTERCH) end end if (XPerlConfig.UseCPMeter == 1) then XPerl_Target_CPFrame:Hide() XPerl_Target_CPMeter:SetMinMaxValues(0, 5) XPerl_Target_CPMeter:SetValue(numDebuffs) XPerl_Target_CPMeter:Show() if (numDebuffs == 5) then XPerl_Target_CPMeter:SetStatusBarColor(1, 0, 0, 0.4) elseif (numDebuffs == 4) then XPerl_Target_CPMeter:SetStatusBarColor(1, 0.5, 0, 0.4) elseif (numDebuffs == 3) then XPerl_Target_CPMeter:SetStatusBarColor(1, 1, 0, 0.4) elseif (numDebuffs == 2) then XPerl_Target_CPMeter:SetStatusBarColor(0.5, 1, 0, 0.4) elseif (numDebuffs == 1) then XPerl_Target_CPMeter:SetStatusBarColor(0, 1, 0, 0.4) else XPerl_Target_CPMeter:Hide() end else XPerl_Target_CPMeter:Hide() XPerl_Target_CPFrame:Show() XPerl_Target_CPFrameText:SetText(numDebuffs) if (cnumDebuffs == 5) then XPerl_Target_CPFrameText:SetTextColor(1, 0, 0) elseif (numDebuffs == 4) then XPerl_Target_CPFrameText:SetTextColor(1, 0.5, 0) elseif (numDebuffs == 3) then XPerl_Target_CPFrameText:SetTextColor(1, 1, 0) elseif (numDebuffs == 2) then XPerl_Target_CPFrameText:SetTextColor(0.5, 1, 0) elseif (numDebuffs == 1) then XPerl_Target_CPFrameText:SetTextColor(0, 1, 0) else XPerl_Target_CPFrame:Hide() end end else XPerl_Target_UpdateCombo() end end ------------------------- -- The Update Functions-- ------------------------- local function XPerl_Target_UpdatePVP() local targetrankname, targetrank=GetPVPRankInfo(UnitPVPRank("target"), "target") if (targetrank and XPerlConfig.ShowTargetPVPRank==1 and UnitIsPlayer("target")) then XPerl_Target_NameFrame_PVPRankIcon:Show() if (targetrank==0) then XPerl_Target_NameFrame_PVPRankIcon:Hide() else XPerl_Target_NameFrame_PVPRankIcon:SetTexture(string.format("Interface\\PVPRankBadges\\PVPRank%02d", targetrank)) end else XPerl_Target_NameFrame_PVPRankIcon:Hide() end if (XPerlConfig.ShowTargetPVP == 1 and UnitIsPVP("target")) then XPerl_Target_NameFrame_PVPStatus:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..(UnitFactionGroup("target") or "FFA")) XPerl_Target_NameFrame_PVPStatus:Show() else XPerl_Target_NameFrame_PVPStatus:Hide() end XPerl_SetUnitNameColor("target", XPerl_Target_NameFrame_NameBarText) if (XPerlConfig.TargetReactionHighlight == 1) then local c = XPerl_ReactionColour("target") XPerl_Target_NameFrame:SetBackdropColor(c.r, c.g, c.b) end end -- XPerl_Target_UpdateName local function XPerl_Target_UpdateName() local targetname = UnitName("target") --if (strlen(targetname) > 20) then -- targetname = strsub(targetname, 1, 19).."..." --end XPerl_Target_NameFrame_NameBarText:SetText(targetname) local remCount = 1 while ((XPerl_Target_NameFrame_NameBarText:GetStringWidth() >= (XPerl_Target_NameFrame:GetWidth() - 8)) and (string.len(targetname) > remCount)) do targetname = string.sub(targetname, 1, string.len(targetname) - remCount)..".." remCount = 3 XPerl_Target_NameFrame_NameBarText:SetText(targetname) end XPerl_Target_UpdatePVP() --guildname, guildtitle, guildrank = GetGuildInfo("target") end -- XPerl_Target_UpdatePortrait function XPerl_Target_UpdatePortrait() if (XPerlConfig.ShowTargetPortrait == 1) then if (UnitExists("target")) then if (UnitIsVisible("target") and XPerlConfig.ShowTargetPortrait3D == 1) then XPerl_Target_PortraitFrame_Portrait:Hide() XPerl_Target_PortraitFrame_Portrait3D:Show() XPerlSetPortrait3D(XPerl_Target_PortraitFrame_Portrait3D, "target") else XPerl_Target_PortraitFrame_Portrait3D.last3DTime = nil XPerl_Target_PortraitFrame_Portrait:Show() XPerl_Target_PortraitFrame_Portrait3D:Hide() SetPortraitTexture(XPerl_Target_PortraitFrame_Portrait, "target") end end end end -- XPerl_Target_UpdateLevel local function XPerl_Target_UpdateLevel() local targetlevel = UnitLevel("target") XPerl_Target_LevelFrameText:SetText(targetlevel) -- Set Level if (XPerlConfig.ShowTargetLevel==1) then XPerl_Target_LevelFrame:Show() XPerl_Target_LevelFrame:SetWidth(27) if (targetlevel < 0) then XPerl_Target_LevelFrameText:SetTextColor(1, 0, 0) XPerl_Target_LevelFrame:Hide() else local color = GetDifficultyColor(targetlevel) XPerl_Target_LevelFrameText:SetTextColor(color.r, color.g, color.b) end if (XPerlConfig.ShowTargetElite==0 and (UnitClassification("target") == "elite" or UnitClassification("target") == "worldboss")) then --(UnitIsPlusMob("target"))) then XPerl_Target_LevelFrameText:SetText(targetlevel.."+") XPerl_Target_LevelFrame:SetWidth(33) end end end -- XPerl_Target_UpdateClassification local function XPerl_Target_UpdateClassification() local targetclassification = UnitClassification("target") if (UnitIsCivilian("target")) then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_CIVILIAN) XPerl_Target_BossFrameText:SetTextColor(1, 0, 0) XPerl_Target_BossFrame:Show() elseif (targetclassification == "normal" and UnitPlayerControlled("target")) then if (not UnitIsPlayer("target")) then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_PET) XPerl_Target_BossFrameText:SetTextColor(1, 1, 1) XPerl_Target_BossFrame:Show() else XPerl_Target_BossFrame:Hide() end elseif ((XPerlConfig.ShowTargetLevel==1 and XPerlConfig.ShowTargetElite==1) or targetclassification=="Rare+" or targetclassification=="Rare") then XPerl_Target_BossFrame:Show() if (targetclassification == "worldboss") then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_BOSS) XPerl_Target_BossFrameText:SetTextColor(1, 0.5, 0.5) elseif (targetclassification == "rareelite") then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_RAREPLUS) XPerl_Target_BossFrameText:SetTextColor(0.8, 0.8, 0.8) elseif (targetclassification == "elite") then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_ELITE) XPerl_Target_BossFrameText:SetTextColor(1, 1, 0.5) elseif (targetclassification == "rare") then XPerl_Target_BossFrameText:SetText(XPERL_TYPE_RARE) XPerl_Target_BossFrameText:SetTextColor(0.8, 0.8, 0.8) else XPerl_Target_BossFrame:Hide() end else XPerl_Target_BossFrame:Hide() end XPerl_Target_BossFrame:SetWidth(XPerl_Target_BossFrameText:GetStringWidth() + 10) end -- XPerl_Target_UpdateType local function XPerl_Target_UpdateType() local targettype = UnitCreatureType("target") if (targettype == XPERL_TYPE_NOT_SPECIFIED) then targettype = nil end if (XPerlConfig.ShowTargetMobType == 1) then XPerl_Target_CreatureType:Show() else XPerl_Target_CreatureType:Hide() end XPerl_Target_TypeFramePlayer:Hide() XPerl_Target_CreatureTypeText:SetText(targettype) if (UnitIsPlayer("target")) then local _, PlayerClass = UnitClass("target") if (XPerlConfig.ShowTargetClassIcon==1) then local r, l, t, b = XPerl_ClassPos(PlayerClass) XPerl_Target_TypeFramePlayer_ClassTexture:SetTexCoord(r, l, t, b) XPerl_Target_TypeFramePlayer:Show() end XPerl_Target_CreatureType:Hide() else if (targettype and targettype ~= "") then XPerl_Target_CreatureTypeText:SetTextColor(1, 1, 1) XPerl_Target_CreatureType:SetWidth(XPerl_Target_CreatureTypeText:GetStringWidth() + 10) else XPerl_Target_CreatureType:Hide() end end -- If it's too long, we anchor it to left side of portrait instead of right, to avoid it overlapping some buffs XPerl_Target_CreatureType:ClearAllPoints() if (XPerl_Target_CreatureType:GetWidth() > XPerl_Target_PortraitFrame:GetWidth()) then XPerl_Target_CreatureType:SetPoint("TOPLEFT", XPerl_Target_PortraitFrame, "BOTTOMLEFT", 0, 2) else XPerl_Target_CreatureType:SetPoint("TOPRIGHT", XPerl_Target_PortraitFrame, "BOTTOMRIGHT", 0, 2) end end -- XPerl_Target_UpdateManaType local function XPerl_Target_UpdateManaType() if (this.Fading == 1) then return end XPerl_Target_SetManaType("target", XPerl_Target_StatsFrame_ManaBar, XPerl_Target_StatsFrame_ManaBarText, XPerl_Target_StatsFrame_ManaBarBG, XPerl_Target_StatsFrame, XPerl_Target) end -- XPerl_Target_SetManaType function XPerl_Target_SetManaType(unit, frameManaBar, frameManaBarText, frameManaBarBG, frameStatsFrame, frameFrame) local targetmanamax = UnitManaMax(unit) if ((targetmanamax == 0) or (unit == "target" and XPerlConfig.ShowTargetMana==0) or (unit ~= "target" and XPerlConfig.ShowTargetTargetMana == 0)) then if (frameManaBar:IsShown()) then frameManaBar:Hide() frameStatsFrame:SetHeight(28) XPerl_StatsFrameSetup(frameStatsFrame) end return end XPerl_SetManaBarType(unit, frameManaBar, frameManaBarBG) local targetmana = UnitMana(unit) if (not frameManaBar:IsShown()) then frameManaBarText:Show() frameManaBar:Show() frameStatsFrame:SetHeight(40) XPerl_StatsFrameSetup(frameStatsFrame) end end -- XPerl_Target_UpdateMana local function XPerl_Target_UpdateMana() if (this.Fading == 1) then return end XPerl_Target_SetMana("target", XPerl_Target_StatsFrame_ManaBar, XPerl_Target_StatsFrame_HealthBarPercent, XPerl_Target_StatsFrame_ManaBarPercent, XPerl_Target_StatsFrame_ManaBarText) end -- XPerl_Target_SetMana function XPerl_Target_SetMana(unit, frameManabar, frameHealthBarPercent, frameManaBarPercent, frameManaBarText) local targetmana = UnitMana(unit) local targetmanamax = UnitManaMax(unit) if (frameHealthBarPercent:IsVisible()) then frameManaBarPercent:Show() end if (targetmanamax == 1 and targetmana > targetmanamax) then targetmanamax = targetmana end frameManabar:SetMinMaxValues(0, targetmanamax) frameManabar:SetValue(targetmana) frameManaBarPercent:SetText(string.format("%d",(100*(targetmana / targetmanamax))+0.5).."%") frameManaBarText:SetText(targetmana.."/"..targetmanamax) end -- XPerl_Target_UpdateHealth local function XPerl_Target_UpdateHealth() if (this.Fading == 1) then return end XPerl_Target_SetHealth("target", XPerl_Target_StatsFrame_HealthBar, XPerl_Target_StatsFrame_HealthBarBG, XPerl_Target_StatsFrame_HealthBarPercent, XPerl_Target_StatsFrame_HealthBarText, XPerl_Target_StatsFrame_ManaBarPercent, XPerlConfig.ShowTargetPercent) if (XPerlConfig.ShowTargetValues == 1) then XPerl_Target_StatsFrame_HealthBarText:Show() XPerl_Target_StatsFrame_ManaBarText:Show() else XPerl_Target_StatsFrame_HealthBarText:Hide() XPerl_Target_StatsFrame_ManaBarText:Hide() end if (not UnitIsConnected("target")) then XPerl_Target_StatsFrame_HealthBarText:SetText(XPERL_LOC_OFFLINE) XPerl_Target:SetAlpha(XPerlConfig.Transparency / 2) else XPerl_Target:SetAlpha(XPerlConfig.Transparency) end end -- XPerl_Target_SetHealth function XPerl_Target_SetHealth(unit, frameHealthBar, frameHealthBarBG, frameHealthBarPercent, frameHealthBarText, frameManaBarPercent, bPercent) local targethealth, targethealthmax = UnitHealth(unit), UnitHealthMax(unit) local healthPct = targethealth / targethealthmax frameHealthBar:SetMinMaxValues(0, targethealthmax) if (XPerlConfig.InverseBars == 1) then frameHealthBar:SetValue(targethealthmax - targethealth) else frameHealthBar:SetValue(targethealth) end XPerl_SetSmoothBarColor(frameHealthBar, healthPct) if (targethealthmax == 100) then frameHealthBarPercent:SetText(targethealth.."%") else frameHealthBarPercent:SetText(string.format("%d",(100*healthPct)+0.5).."%") end if (targethealthmax ~= 100) then if (XPerlConfig.HealerMode == 1) then if (XPerlConfig.HealerModeType == 1) then frameHealthBarText:SetText(string.format("%d/%d", targethealth - targethealthmax, targethealthmax)) else frameHealthBarText:SetText(targethealth - targethealthmax) end else frameHealthBarText:SetText(targethealth.."/"..targethealthmax) end else -- Hide MobInfo-2 frame if MobHealthFrame then MobHealthFrame:Hide() end local current, max if (MobHealth3) then local found current, max, found = MobHealth3:GetUnitHealth(unit, targethealth, targethealthmax, UnitName(unit), UnitLevel(unit)) if (not found) then current = nil end elseif (MobHealthDB) then local index if UnitIsPlayer(unit) then index = UnitName(unit) else index = UnitName(unit)..":"..UnitLevel(unit) end local table = MobHealthDB if (not (table and table[index])) then table = MobHealthPlayerDB end if (table and table[index]) then local s, e local pts local pct if ( type(table[index]) ~= "string" ) then frameHealthBarText:SetText(targethealth.."%") end s, e, pts, pct = strfind(table[index], "^(%d+)/(%d+)$") if ( pts and pct ) then pts = pts + 0 pct = pct + 0 if( pct ~= 0 ) then pointsPerPct = pts / pct else pointsPerPct = 0 end end local currentPct = UnitHealth(unit) if ( pointsPerPct > 0 ) then current = (currentPct * pointsPerPct) + 0.5 max = (100 * pointsPerPct) + 0.5 end end end if (current) then if (XPerlConfig.HealerMode == 1) then if (XPerlConfig.HealerModeType == 1) then if (max > 100000) then frameHealthBarText:SetText(string.format("%d%s/%d%s", (current - max) / XPERL_LOC_LARGENUMDIV, XPERL_LOC_LARGENUMTAG, max / XPERL_LOC_LARGENUMDIV, XPERL_LOC_LARGENUMTAG)) else frameHealthBarText:SetText(string.format("%d/%d", current - max, max)) end else if (max > 100000) then frameHealthBarText:SetText(string.format("%d%s", (current - max) / XPERL_LOC_LARGENUMDIV, XPERL_LOC_LARGENUMTAG)) else frameHealthBarText:SetText(string.format("%d", current - max)) end end else if (max > 100000) then frameHealthBarText:SetText(string.format("%.1f%s/%.1f%s", current / XPERL_LOC_LARGENUMDIV, XPERL_LOC_LARGENUMTAG, max / XPERL_LOC_LARGENUMDIV, XPERL_LOC_LARGENUMTAG)) else frameHealthBarText:SetText(string.format("%d/%d", current, max)) end end else frameHealthBarText:SetText(targethealth.."%") end end if (bPercent == 1) then if (UnitIsGhost(unit)) then frameManaBarPercent:Hide() frameHealthBarPercent:SetText(XPERL_LOC_GHOST) elseif (UnitIsDead(unit)) then frameManaBarPercent:Hide() frameHealthBarPercent:SetText(XPERL_LOC_DEAD) elseif (UnitExists(unit) and not UnitIsConnected(unit)) then frameManaBarPercent:Hide() frameHealthBarPercent:SetText(XPERL_LOC_OFFLINE) end else if (UnitIsGhost(unit)) then frameHealthBarText:SetText(XPERL_LOC_GHOST) elseif (UnitIsDead(unit)) then frameHealthBarText:SetText(XPERL_LOC_DEAD) elseif (UnitExists(unit) and not UnitIsConnected(unit)) then frameHealthBarText:SetText(XPERL_LOC_OFFLINE) end end end -- XPerl_Target_Update_Control local function XPerl_Target_Update_Control() if (UnitIsVisible("target") and UnitIsCharmed("target")) then XPerl_Target_NameFrame_Warning:Show() else XPerl_Target_NameFrame_Warning:Hide() end end -- XPerl_Target_Update_Combat function XPerl_Target_Update_Combat() if (UnitAffectingCombat("target")) then XPerl_Target_NameFrame_ActivityStatus:Show() else XPerl_Target_NameFrame_ActivityStatus:Hide() end end -- XPerl_Target_CombatFlash local function XPerl_Target_CombatFlash(elapsed, argNew, argGreen) if (XPerl_CombatFlashSet (elapsed, XPerl_Target, argNew, argGreen)) then XPerl_CombatFlashSetFrames(XPerl_Target) end end -- XPerl_Target_Udpate_Range function XPerl_Target_Udpate_Range() if (XPerlConfig.Show30YardSymbol == 0 or CheckInteractDistance("target", 4) or not UnitIsConnected("target")) then XPerl_Target_NameFrame_RangeStatus:Hide() else XPerl_Target_NameFrame_RangeStatus:Show() XPerl_Target_NameFrame_RangeStatus:SetAlpha(1) end end -- XPerl_Target_UpdateLeader local function XPerl_Target_UpdateLeader() local leader if (UnitIsUnit("target", "player")) then leader = IsPartyLeader() elseif (UnitInRaid("target")) then local find = UnitName("target") for i = 1,GetNumRaidMembers() do local name, rank = GetRaidRosterInfo(i) if (name == find) then leader = (rank == 2) break end end elseif (UnitInParty("target")) then local index = GetPartyLeaderIndex() if (index > 0) then leader = UnitIsUnit("target", "party"..index) end end if (leader) then XPerl_Target_NameFrame_LeaderIcon:Show() else XPerl_Target_NameFrame_LeaderIcon:Hide() end end -- XPerl_Target_UpdateMasterLooter -- We can't determine who is master looter in raid if not in current party... :( local function XPerl_Target_UpdateMasterLooter() local ml local method, index = GetLootMethod() if (method == "master" and index) then if (index == 0 and UnitIsUnit("player", "target")) then ml = true elseif (index >= 1 and index <= 4) then ml = UnitIsUnit("target", "party"..index) end end if (ml) then XPerl_Target_NameFrame_MasterIcon:Show() else XPerl_Target_NameFrame_MasterIcon:Hide() end end -- XPerl_Target_UpdateDisplay function XPerl_Target_UpdateDisplay() if (UnitExists("target")) then this.lastTarget = UnitName("target") this.lastDeathMsg = "" XPerl_CancelFade(XPerl_Target) XPerl_Target:Show() XPerl_Target_UpdateName() XPerl_Target_UpdateLeader() XPerl_Target_UpdateMasterLooter() XPerl_Target_UpdateLevel() XPerl_Target_UpdateClassification() XPerl_Target_UpdateType() XPerl_Target_UpdatePVP() XPerl_Target_UpdateCombo() XPerl_Target_UpdateManaType() XPerl_Target_UpdateMana() XPerl_Target_UpdateHealth() XPerl_Target_Update_Control() XPerl_Target_Update_Combat() -- Work out where all our buffs can fit, we only do this for a fresh target XPerl_Targets_BuffPositions("target", "XPerl_Target_", XPerl_Target) XPerl_Targets_BuffUpdate("target", "XPerl_Target_", XPerl_Target) XPerl_Target_DebuffUpdate() XPerl_Target_Events:RAID_TARGET_UPDATE() if (not UnitIsConnected("target")) then XPerl_Target:SetAlpha(XPerlConfig.Transparency / 2) else XPerl_Target:SetAlpha(XPerlConfig.Transparency) end if (TargetFrame) then TargetFrame:Hide(); -- Hide default frame end if (XPerlConfig.BlizzardCPMeter~=1) then ComboFrame:Hide(); -- Hide Combo Points end else if (this.lastDeathMsg ~= nil and this.lastTarget ~= nil) then if (strfind (this.lastDeathMsg, this.lastTarget)) then XPerl_Target_UpdateCombo() this.lastDeathMsg = "" XPerl_Target_StatsFrame_HealthBar:SetMinMaxValues(0, 1) XPerl_Target_StatsFrame_HealthBar:SetValue(0) XPerl_Target_StatsFrame_ManaBar:SetMinMaxValues(0, 1) XPerl_Target_StatsFrame_ManaBar:SetValue(0) XPerl_SetSmoothBarColor (XPerl_Target_StatsFrame_HealthBar, 0) local oldhp = XPerl_Target_StatsFrame_HealthBarText:GetText() if (strfind(oldhp, "/")) then oldhp = string.gsub(oldhp, "%d+/(%d+)", "0/%1") XPerl_Target_StatsFrame_HealthBarText:SetText(oldhp) else XPerl_Target_StatsFrame_HealthBarText:SetText("0%") end local oldmana = XPerl_Target_StatsFrame_ManaBarText:GetText() if (strfind(oldmana, "/")) then oldmana = string.gsub(oldmana, "%d+/(%d+)", "0/%1") XPerl_Target_StatsFrame_ManaBarText:SetText(oldmana) else XPerl_Target_StatsFrame_ManaBarText:SetText("0%") end XPerl_Target_StatsFrame_HealthBarPercent:SetText(XPERL_LOC_DEAD) end end XPerl_StartFade(XPerl_Target) if (XPerl_Target_StatsFrame_HealthBarPercent:GetText() == XPERL_LOC_OFFLINE) then XPerl_Target.FadeTime = 0.5 end end end -------------------- -- Click Handlers -- -------------------- function XPerl_Target_OnClick(button) -- If player clicks the target frame while it's fading away. no actual target, but we can get that back: if (not UnitName("target")) then TargetLastTarget() end if (XPerl_OnClick_Handler(button, "target")) then return end if (button == "RightButton") then HideDropDownMenu(1) ToggleDropDownMenu(1, nil, TargetFrameDropDown, "XPerl_Target_StatsFrame", 0, 0) end end -- XPerl_Target_OnUpdate function XPerl_Target_OnUpdate() CombatFeedback_OnUpdate(arg1) if (this.Fading == 0) then XPerl_Target_Udpate_Range() if (this.PlayerFlash) then XPerl_Target_CombatFlash(arg1, false) end else XPerl_ProcessFade(XPerl_Target) end end ------------------- -- Event Handler -- ------------------- function XPerl_Target_OnEvent() local func = XPerl_Target_Events[event] if (func) then func() else XPerl_ShowMessage("EXTRA EVENT") end end -- PLAYER_ENTERING_WORLD function XPerl_Target_Events:PLAYER_ENTERING_WORLD() XPerl_Target_RegisterSome() end -- VARIABLES_LOADED function XPerl_Target_Events:VARIABLES_LOADED() XPerl_Target_RegisterSome() end -- PLAYER_LEAVING_WORLD function XPerl_Target_Events:PLAYER_LEAVING_WORLD() XPerl_Target.Fading = 0 XPerl_Target.lastTarget = 0 XPerl_Target:Hide() XPerl_Target_UnregisterSome() end -- UNIT_COMBAT function XPerl_Target_Events:UNIT_COMBAT() if (arg1 == "target") then XPerl_Target_Update_Combat() if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowTargetPortrait == 1) then CombatFeedback_OnCombatEvent(arg2, arg3, arg4, arg5) end if (arg2 == "HEAL") then XPerl_Target_CombatFlash(0, true, true) elseif (arg4 and arg4 > 0) then XPerl_Target_CombatFlash(0, true) end end end -- UNIT_SPELLMISS function XPerl_Target_Events:UNIT_SPELLMISS() if (arg1 == "target") then if (XPerlConfig.CombatHitIndicator == 1 and XPerlConfig.ShowTargetPortrait == 1) then CombatFeedback_OnSpellMissEvent(arg2) end end end -- PLAYER_TARGET_CHANGED function XPerl_Target_Events:PLAYER_TARGET_CHANGED() XPerl_Target.PlayerFlash = 0 XPerl_Target_CombatFlash(0, false) XPerl_Target_UpdateDisplay() XPerl_Target_UpdatePortrait() return end -- UNIT_HEALTH, UNIT_MAXHEALTH function XPerl_Target_Events:UNIT_HEALTH() if (arg1 == "target") then XPerl_Target_UpdateHealth() end end XPerl_Target_Events.UNIT_MAXHEALTH = XPerl_Target_Events.UNIT_HEALTH -- UNIT_DYNAMIC_FLAGS function XPerl_Target_Events:UNIT_DYNAMIC_FLAGS() if (arg1 == "target") then XPerl_Target_UpdateName() XPerl_Target_Update_Control() XPerl_Target_Update_Combat() end end XPerl_Target_Events.UNIT_FLAGS = XPerl_Target_Events.UNIT_DYNAMIC_FLAGS function XPerl_Target_Events:RAID_TARGET_UPDATE() XPerl_Update_RaidIcon("target", XPerl_Target_NameFrame_RaidIcon) XPerl_Target_NameFrame_RaidIcon:ClearAllPoints() if (XPerlConfig.AlternateRaidIcon == 1) then XPerl_Target_NameFrame_RaidIcon:SetHeight(16) XPerl_Target_NameFrame_RaidIcon:SetWidth(16) XPerl_Target_NameFrame_RaidIcon:SetPoint("CENTER", XPerl_Target_NameFrame, "TOPRIGHT", -5, -4) else XPerl_Target_NameFrame_RaidIcon:SetHeight(32) XPerl_Target_NameFrame_RaidIcon:SetWidth(32) XPerl_Target_NameFrame_RaidIcon:SetPoint("CENTER", XPerl_Target_NameFrame, "CENTER", 0, 0) end end -- UNIT_MANA, UNIT_MAXMANA, UNIT_RAGE, UNIT_MAXRAGE, UNIT_ENERGY -- UNIT_MAXENERGY, UNIT_FOCUS, UNIT_MAXFOCUS function XPerl_Target_Events:UNIT_MANA() if (arg1 == "target") then XPerl_Target_UpdateMana() end end XPerl_Target_Events.UNIT_MAXMANA = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_RAGE = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_MAXRAGE = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_ENERGY = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_MAXENERGY = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_FOCUS = XPerl_Target_Events.UNIT_MANA XPerl_Target_Events.UNIT_MAXFOCUS = XPerl_Target_Events.UNIT_MANA -- UNIT_DISPLAYPOWER function XPerl_Target_Events:UNIT_DISPLAYPOWER() if (arg1 == "target") then XPerl_Target_UpdateManaType() XPerl_Target_UpdateMana() end end -- UNIT_MODEL_CHANGED function XPerl_Target_Events:UNIT_MODEL_CHANGED() if (arg1 == "target") then XPerl_Target_UpdatePortrait() end end --XPerl_Target_Events.UNIT_PORTRAIT_UPDATE = XPerl_Target_Events.UNIT_MODEL_CHANGED -- UNIT_NAME_UPDATE function XPerl_Target_Events:UNIT_NAME_UPDATE() if (arg1 == "target") then XPerl_Target_UpdateName() end end -- UNIT_LEVEL function XPerl_Target_Events:UNIT_LEVEL() if (arg1 == "target") then XPerl_Target_UpdateLevel() end end -- UNIT_CLASSIFICATION_CHANGED function XPerl_Target_Events:UNIT_CLASSIFICATION_CHANGED() if (arg1 == "target") then XPerl_Target_UpdateClassification() end end -- PLAYER_COMBO_POINTS function XPerl_Target_Events:PLAYER_COMBO_POINTS() XPerl_Target_UpdateCombo() end -- UNIT_AURA function XPerl_Target_Events:UNIT_AURA() if (arg1 == "target") then if (not XPerl_Target.perlBuffs or XPerl_UnitBuff("target", XPerl_Target.perlBuffs + 1, XPerlConfig.TargetCastableBuffs)) then XPerl_Targets_BuffPositions("target", "XPerl_Target_", XPerl_Target) elseif (XPerl_UnitDebuff("target", XPerl_Target.perlDebuffs + 1, XPerlConfig.TargetCastableBuffs)) then XPerl_Targets_BuffPositions("target", "XPerl_Target_", XPerl_Target) end XPerl_Targets_BuffUpdate("target", "XPerl_Target_", XPerl_Target) XPerl_Target_DebuffUpdate() end end -- UNIT_FACTION function XPerl_Target_Events:UNIT_FACTION() if (arg1 == "target") then XPerl_Target_UpdatePVP() XPerl_Target_Update_Control() XPerl_Targets_BuffPositions("target", "XPerl_Target_", XPerl_Target) end end -- PLAYER_FLAGS_CHANGED function XPerl_Target_Events:PLAYER_FLAGS_CHANGED() XPerl_Target_Update_Combat() XPerl_Target_UpdatePVP() XPerl_Target_UpdateHealth() end -- CHAT_MSG_COMBAT_HOSTILE_DEATH function XPerl_Target_Events:CHAT_MSG_COMBAT_HOSTILE_DEATH() if (strfind(arg1, this.lastTarget)) then this.lastDeathMsg = arg1 end end -- PARTY_MEMBER_ENABLE function XPerl_Target_Events:PARTY_MEMBER_ENABLE() if (UnitInParty("target") or UnitInRaid("target")) then XPerl_Target_Update_Combat() XPerl_Target_UpdatePVP() XPerl_Target_UpdateHealth() end end XPerl_Target_Events.PARTY_MEMBER_DISABLE = XPerl_Target_Events.PARTY_MEMBER_ENABLE -- PARTY_LOOT_METHOD_CHANGED function XPerl_Target_Events:PARTY_LOOT_METHOD_CHANGED() XPerl_Target_UpdateLeader() XPerl_Target_UpdateMasterLooter() end XPerl_Target_Events.PARTY_MEMBERS_CHANGED = XPerl_Target_Events.PARTY_LOOT_METHOD_CHANGED XPerl_Target_Events.PARTY_LEADER_CHANGED = XPerl_Target_Events.PARTY_LOOT_METHOD_CHANGED -- XPerl_Target_Set_Bits function XPerl_Target_Set_Bits() if (XPerlConfig.ShowTargetPortrait==0) then XPerl_Target_PortraitFrame:Hide() XPerl_Target_PortraitFrame:SetWidth(2) XPerl_Target:SetWidth(160) else XPerl_Target_PortraitFrame:Show() XPerl_Target_PortraitFrame:SetWidth(60) XPerl_Target:SetWidth(220) XPerl_Target_UpdatePortrait() end if (XPerlConfig.ShowTargetPercent==0) then XPerl_Target_NameFrame:SetWidth(128) XPerl_Target_StatsFrame:SetWidth(128) XPerl_Target_StatsFrame_HealthBarPercent:Hide() XPerl_Target_StatsFrame_ManaBarPercent:Hide() else XPerl_Target_NameFrame:SetWidth(160) XPerl_Target_StatsFrame:SetWidth(160) XPerl_Target_StatsFrame_HealthBarPercent:Show() XPerl_Target_StatsFrame_ManaBarPercent:Show() end if (XPerlConfig.ShowTargetLevel==0) then XPerl_Target_LevelFrame:Hide() else XPerl_Target_LevelFrame:Show() end if (XPerlConfig.ShowTargetClassIcon==0) then XPerl_Target_TypeFramePlayer_ClassTexture:Hide() else XPerl_Target_TypeFramePlayer_ClassTexture:Show() end if (XPerlConfig.ShowTargetPVPRank == 0) then XPerl_Target_NameFrame_PVPRankIcon:Hide() else XPerl_Target_NameFrame_PVPRankIcon:Show() end XPerlConfig.TargetBuffSize = tonumber(XPerlConfig.TargetBuffSize) or 20 XPerl_SetBuffSize("XPerl_Target_", XPerlConfig.TargetBuffSize, XPerlConfig.TargetBuffSize * 1.2) end -- Using the Blizzard Combo Point frame, but we move the buttons around a little function XPerl_Target_Set_BlizzCPFrame() ComboFrame:ClearAllPoints() ComboPoint1:ClearAllPoints() ComboPoint2:ClearAllPoints() ComboPoint3:ClearAllPoints() ComboPoint4:ClearAllPoints() ComboPoint5:ClearAllPoints() if (XPerlConfig.BlizzardCPMeter == 1) then -- This setup will put the buttons along the top of the portrait frame ComboFrame:SetScale(XPerlConfig.Scale_TargetFrame) if (XPerlConfig.BlizzardCPPosition == "top") then ComboFrame:SetPoint("TOPLEFT", XPerl_Target_PortraitFrame, "TOPLEFT", -1, 4) ComboPoint1:SetPoint("TOPLEFT", 0, 0) ComboPoint2:SetPoint("LEFT", ComboPoint1, "RIGHT", 0, 1) ComboPoint3:SetPoint("LEFT", ComboPoint2, "RIGHT", 0, 1) ComboPoint4:SetPoint("LEFT", ComboPoint3, "RIGHT", 0, -1) ComboPoint5:SetPoint("LEFT", ComboPoint4, "RIGHT", 0, -4) elseif (XPerlConfig.BlizzardCPPosition == "bottom") then ComboFrame:SetPoint("BOTTOMLEFT", XPerl_Target_PortraitFrame, "BOTTOMLEFT", -1, -4) ComboPoint1:SetPoint("BOTTOMLEFT", 0, 0) ComboPoint2:SetPoint("LEFT", ComboPoint1, "RIGHT", 0, -1) ComboPoint3:SetPoint("LEFT", ComboPoint2, "RIGHT", 0, -1) ComboPoint4:SetPoint("LEFT", ComboPoint3, "RIGHT", 0, 1) ComboPoint5:SetPoint("LEFT", ComboPoint4, "RIGHT", 0, -1) elseif (XPerlConfig.BlizzardCPPosition == "left") then ComboFrame:SetPoint("BOTTOMLEFT", XPerl_Target_PortraitFrame, "BOTTOMLEFT", -1, 0) ComboPoint1:SetPoint("BOTTOMLEFT", 0, 0) ComboPoint2:SetPoint("BOTTOM", ComboPoint1, "TOP", -1, 0) ComboPoint3:SetPoint("BOTTOM", ComboPoint2, "TOP", -1, 0) ComboPoint4:SetPoint("BOTTOM", ComboPoint3, "TOP", 1, 0) ComboPoint5:SetPoint("BOTTOM", ComboPoint4, "TOP", 3, -5) elseif (XPerlConfig.BlizzardCPPosition == "right") then ComboFrame:SetPoint("BOTTOMRIGHT", XPerl_Target_PortraitFrame, "BOTTOMRIGHT", 2, 0) ComboPoint1:SetPoint("BOTTOMRIGHT", 0, 0) ComboPoint2:SetPoint("BOTTOM", ComboPoint1, "TOP", 1, 0) ComboPoint3:SetPoint("BOTTOM", ComboPoint2, "TOP", 1, 0) ComboPoint4:SetPoint("BOTTOM", ComboPoint3, "TOP", -1, 0) ComboPoint5:SetPoint("BOTTOM", ComboPoint4, "TOP", 0, -5) end ComboFrame:RegisterEvent("PLAYER_TARGET_CHANGED") ComboFrame:RegisterEvent("PLAYER_COMBO_POINTS") else -- Not using blizzard's, and we'll put the buttons back where they were --[[ No reason to do this, so commented ComboFrame:SetPoint("TOPRIGHT", TargetFrame, "TOPRIGHT", -44, -9) ComboPoint1:SetPoint("TOPRIGHT", 0, 0) ComboPoint2:SetPoint("TOP", ComboPoint1, "BOTTOM", 7, 4) ComboPoint3:SetPoint("TOP", ComboPoint2, "BOTTOM", 5, 2) ComboPoint4:SetPoint("TOP", ComboPoint3, "BOTTOM", 2, 1) ComboPoint5:SetPoint("TOP", ComboPoint4, "BOTTOM", 0, 1) ComboFrame:SetScale(1) ]] ComboFrame:Hide() ComboFrame:UnregisterEvent("PLAYER_TARGET_CHANGED") ComboFrame:UnregisterEvent("PLAYER_COMBO_POINTS") end end