vanilla-wow-addons – Rev 1
?pathlinks?
local init_done
-- SetTex
local highlightPositions = {{0, 0.25, 0, 0.5}, {0.25, 0.75, 0, 0.5}, {0, 1, 0.5, 1}, {0.75, 1, 0, 0.5}}
local function SetTex(frame, num)
if (XPerlConfig.HighlightSelection == 1) then
frame:SetHighlightTexture("Interface\\Addons\\XPerl\\images\\XPerl_Highlight", "ADD")
local p = highlightPositions[num]
local tex = frame:GetHighlightTexture()
tex:SetTexCoord(p[1], p[2], p[3], p[4])
tex:SetVertexColor(0.86, 0.82, 0.41)
else
frame:SetHighlightTexture("")
end
end
-- RegisterHighlight
local HighlightFrames = {}
function XPerl_RegisterHighlight(frame, ratio)
HighlightFrames[frame] = ratio
if (init_done) then
SetTex(frame, ratio)
end
end
-- XPerl_SetHighlights
function XPerl_SetHighlights()
for k,v in pairs(HighlightFrames) do
SetTex(k, v)
end
end
-- SetupUnitFrame
local function SetupUnitFrame(argFrame)
argFrame:SetBackdropBorderColor(XPerlConfig.BorderColour.r, XPerlConfig.BorderColour.g, XPerlConfig.BorderColour.b, XPerlConfig.BorderColour.a); --, XPerlConfig.Transparency)
argFrame:SetBackdropColor(XPerlConfig.BackColour.r, XPerlConfig.BackColour.g, XPerlConfig.BackColour.b, XPerlConfig.BackColour.a); --XPerlConfig.Transparency)
end
-- SetupUnitFrameList
local function SetupUnitFrameList(frame, subList)
if (type(subList) == "table") then
frame:SetAlpha(XPerlConfig.Transparency)
for k,v in pairs(subList) do
local f = getglobal(frame:GetName().."_"..v)
if (f) then
SetupUnitFrame(f)
end
end
else
SetupUnitFrame(frame)
end
end
-- XPerl_RegisterUnitFrame(frame)
local UnitFrames = {}
function XPerl_RegisterPerlFrames(frame, subList)
if (not subList) then
subList = true
end
UnitFrames[frame] = subList
if (init_done) then
SetupUnitFrameList(frame, subList)
end
end
-- XPerl_SetupAllPerlFrames
function XPerl_SetupAllPerlFrames(frame)
for k,v in pairs(UnitFrames) do
SetupUnitFrameList(k, v)
end
end
-- XPerl_SetAllFrames
function XPerl_SetAllFrames()
XPerl_SetupAllPerlFrames()
XPerl_SetHighlights()
if (Perl_Player_Frame) then Perl_Player_PVPRankIcon:SetAlpha(0.3) end
if (Perl_Target_Frame) then Perl_Target_PVPRankIcon:SetAlpha(0.3) end
if (Perl_TargetTarget) then Perl_TargetTarget_NameFrame_PVPRankIcon:SetAlpha(0.3) end
if (Perl_TargetTargetTarget) then Perl_TargetTargetTarget_NameFrame_PVPRankIcon:SetAlpha(0.3) end
end
-- Buff Tooltip Hook
local oldGameTooltipSetPlayerBuff
local function XPerl_GameTooltipSetPlayerBuff(self, id)
oldGameTooltipSetPlayerBuff(self, id)
XPerl_ToolTip_AddBuffDuration("player", self)
end
-- XPerl_Init()
function XPerl_Init()
init_done = true
if (GameTooltip.SetPlayerBuff ~= XPerl_GameTooltipSetPlayerBuff) then
oldGameTooltipSetPlayerBuff = GameTooltip.SetPlayerBuff
GameTooltip.SetPlayerBuff = XPerl_GameTooltipSetPlayerBuff
end
-- Check for eCastbar and disable old frame if used.
if (eCastingBar_Saved and eCastingBar_Player and eCastingBar_Saved[eCastingBar_Player].Enabled == 1) then
XPerlConfig.OldCastBar = 0
elseif (BCastBar and BCastingBar and BCastBarDragButton) then
XPerlConfig.OldCastBar = 0
end
if (XPerl_Player) then
XPerl_Player:Show()
end
XPerl_OptionActions()
XPerl_SlashOnLoad()
local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo("PerlButton")
if (name and enabled) then
DisableAddOn("PerlButton")
XPerl_Notice("Disabled 'PerlButton' addon. It is not compatible or needed with X-Perl")
-- PerlButton was made for Nymbia's Perl UnitFrames. We have our own minimap button
end
local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo("CT_PartyBuffs")
if (name and enabled) then
XPerl_Notice("Disable 'CT_PartyBuffs' addon. It is not compatible with X-Perl, and creates display issues.")
end
if (CT_PartyBuffFrame1) then
CT_PartyBuffFrame1:Hide()
CT_PartyBuffFrame2:Hide()
CT_PartyBuffFrame3:Hide()
CT_PartyBuffFrame4:Hide()
CT_PetBuffFrame:Hide()
end
if (EarthFeature_AddButton) then
local button = {}
button.name = XPerl_ProductName
button.icon = XPerl_ModMenuIcon
button.subtext = "By "..XPerl_Author
button.tooltip = XPerl_LongDescription
button.callback = XPerl_Toggle
EarthFeature_AddButton (button)
end
if(CT_RegisterMod) then
CT_RegisterMod(XPerl_ProductName.." "..XPerl_VersionNumber, "By "..XPerl_Author, 4, XPerl_ModMenuIcon, XPerl_LongDescription, "switch", "", XPerl_Toggle)
end
if (myAddOnsFrame) then
myAddOnsList.XPerl_Description = {
name = XPerl_Description,
description = XPerl_LongDescription,
version = XPerl_VersionNumber,
category = MYADDONS_CATEGORY_OTHERS,
frame = "XPerl_Globals",
optionsframe = "XPerl_Options"
}
end
if (GroupHeal and GroupHeal.HealButtons) then
-- Fix button placement on party frames for GroupHeal addon (worked for Nybmia,
-- but we have our party targets in that old position
for k, v in GroupHeal.HealButtons[1] do
v:ClearAllPoints()
v:SetPoint("TOPLEFT", getglobal(v:GetParent():GetName().."_StatsFrame"), "BOTTOMRIGHT", 0, 2)
end
end
if (not strfind("Zek Hek Zeks Zekked Zekstuff Pooksie", UnitName("player")) or GetRealmName() ~= "Bloodhoof") then
XPerl_ShowMessage = function() end
end
XPerl_Init = nil
end
-- XPerl_StatsFrame_Setup
function XPerl_StatsFrameSetup(StatsFrame, others, offset)
if (not StatsFrame) then
return
end
local healthBar = getglobal(StatsFrame:GetName().."_HealthBar")
local healthBarText = getglobal(StatsFrame:GetName().."_HealthBarText")
local healthBarPercent = getglobal(StatsFrame:GetName().."_HealthBarPercent")
local manaBar = getglobal(StatsFrame:GetName().."_ManaBar")
local manaBarPercent = getglobal(StatsFrame:GetName().."_ManaBarPercent")
local otherBars = {}
local secondaryBarsShown = 0
local showPercent = 0
if (healthBarPercent:IsShown() or manaBarPercent:IsShown()) then
showPercent = 1
end
local percentSize = showPercent * 35; -- 0 means 0, 1 means 32 offset (+3 for spacing after text), which is our size difference
offset = (offset or 0)
if (manaBar:IsShown()) then
secondaryBarsShown = secondaryBarsShown + 1
end
local needTicker = 0
if (XPerlConfig.EnergyTicker == 1 and StatsFrame == XPerl_Player_StatsFrame and UnitPowerType("player") == 3) then
needTicker = 1
end
if (others) then
for i,other in pairs(others) do
local bar = getglobal(StatsFrame:GetName().."_"..other)
if (bar) then
tinsert(otherBars, bar)
if (bar:IsShown()) then
secondaryBarsShown = secondaryBarsShown + 1
end
else
if (not bar) then XPerl_Notice("No frame found called '"..StatsFrame:GetName().."_"..other.."'"); end
end
end
end
if (XPerlConfig.FatHealthBars == 1) then
if (StatsFrame == XPerl_Player_Pet_StatsFrame) then
healthBarText:SetFontObject(GameFontNormalSmall)
else
healthBarText:SetFontObject(GameFontNormal)
end
healthBar:ClearAllPoints()
healthBar:SetPoint("TOPLEFT", 5, -5)
healthBar:SetPoint("BOTTOMRIGHT", -(5 + percentSize), 5 + needTicker + (secondaryBarsShown * 10))
manaBar:ClearAllPoints()
manaBar:SetPoint("BOTTOMLEFT", 5, -5 + needTicker + (secondaryBarsShown * 10))
manaBar:SetPoint("TOPRIGHT", healthBar, "BOTTOMRIGHT", 0, 0)
local lastBar = manaBar
local tickerSpace = needTicker * 2
for i,bar in pairs(otherBars) do
if (bar:IsShown()) then
bar:ClearAllPoints()
bar:SetPoint("TOPLEFT", lastBar, "BOTTOMLEFT", 0, -tickerSpace)
bar:SetPoint("BOTTOMRIGHT", lastBar, "BOTTOMRIGHT", 0, -10 - tickerSpace)
lastBar = bar
tickerSpace = 0
end
end
else
healthBarText:SetFontObject(GameFontNormalSmall)
healthBar:ClearAllPoints()
healthBar:SetPoint("TOPLEFT", 8, -9 + offset)
healthBar:SetPoint("BOTTOMRIGHT", StatsFrame, "TOPRIGHT", -(8 + percentSize), -19 + offset)
manaBar:ClearAllPoints()
manaBar:SetPoint("TOPLEFT", healthBar, "BOTTOMLEFT", 0, -2)
manaBar:SetPoint("BOTTOMRIGHT", healthBar, "BOTTOMRIGHT", 0, -12)
local lastBar = manaBar
for i,bar in pairs(otherBars) do
if (bar:IsShown()) then
bar:ClearAllPoints()
bar:SetPoint("TOPLEFT", lastBar, "BOTTOMLEFT", 0, -2)
bar:SetPoint("BOTTOMRIGHT", lastBar, "BOTTOMRIGHT", 0, -12)
lastBar = bar
end
end
end
end
-- XPerl_Setup_StatsFrames
function XPerl_Setup_StatsFrames()
XPerl_StatsFrameSetup(XPerl_Player_StatsFrame, {"DruidBar", "XPBar"})
XPerl_StatsFrameSetup(XPerl_Player_Pet_StatsFrame, {"XPBar"}, 2)
XPerl_StatsFrameSetup(XPerl_Target_StatsFrame)
XPerl_StatsFrameSetup(XPerl_TargetTarget_StatsFrame)
XPerl_StatsFrameSetup(XPerl_TargetTargetTarget_StatsFrame)
for i = 1,4 do
XPerl_StatsFrameSetup(getglobal("XPerl_party"..i.."_StatsFrame"))
XPerl_StatsFrameSetup(getglobal("XPerl_partypet"..i.."_StatsFrame"), nil, 2)
end
end
-- XPerl_SetTransparency
local function XPerl_SetTransparency(num)
local function Alpha(unit)
if (UnitIsConnected(unit)) then
return num
else
return num / 2
end
end
local function SetAlpha(f, a)
if (f) then
f:SetAlpha(a)
end
end
SetAlpha(XPerl_Player, num)
SetAlpha(XPerl_Target, Alpha("target"))
SetAlpha(XPerl_TargetTarget, num)
SetAlpha(XPerl_TargetTargetTarget, num)
SetAlpha(XPerl_party1, Alpha("party1"))
SetAlpha(XPerl_party2, Alpha("party2"))
SetAlpha(XPerl_party3, Alpha("party3"))
SetAlpha(XPerl_party4, Alpha("party4"))
SetAlpha(XPerl_partypet1, Alpha("party1"))
SetAlpha(XPerl_partypet2, Alpha("party2"))
SetAlpha(XPerl_partypet3, Alpha("party3"))
SetAlpha(XPerl_partypet4, Alpha("party4"))
SetAlpha(XPerl_Player_Pet, num)
SetAlpha(XPerl_ArcaneBarFrame, num/2)
end
-- XPerl_SetTextTransparency
local function XPerl_SetTextTransparency(num)
local function SetFrame(frame)
local f = getglobal(frame)
if (f) then
f:SetTextColor(1,1,1,XPerlConfig.TextTransparency)
end
end
local function SetSubFrames(frame)
local subFrames = {"HealthBarText", "HealthBarPercent", "ManaBarText", "ManaBarPercent"}
for j,f in pairs(subFrames) do
local n = frame.."_StatsFrame_"..f
SetFrame(n)
end
end
local statFrames = {"XPerl_Player", "XPerl_Player_Pet", "XPerl_Target", "XPerl_TargetTarget", "XPerl_TargetTargetTarget",
"XPerl_party1", "XPerl_party2", "XPerl_party3", "XPerl_party4",
"XPerl_partypet1", "XPerl_partypet2", "XPerl_partypet3", "XPerl_partypet4"}
for i,f in pairs(statFrames) do
SetSubFrames(f)
end
if (XPerl_Player) then
XPerl_Player_StatsFrame_DruidBarText:SetTextColor(1,1,1,XPerlConfig.TextTransparency)
XPerl_Player_StatsFrame_DruidBarPercent:SetTextColor(1,1,1,XPerlConfig.TextTransparency)
XPerl_Player_StatsFrame_XPBarText:SetTextColor(1,1,1,XPerlConfig.TextTransparency)
XPerl_Player_StatsFrame_XPBarPercent:SetTextColor(1,1,1,XPerlConfig.TextTransparency)
end
end
-- XPerl_GetBarTexture
function XPerl_GetBarTexture()
if (XPerlConfig.BarTextures == 1) then
return "Interface\\AddOns\\XPerl\\Images\\XPerl_StatusBar"
elseif (XPerlConfig.BarTextures == 2) then
return "Interface\\AddOns\\XPerl\\Images\\XPerl_StatusBar2"
elseif (XPerlConfig.BarTextures == 3) then
return "Interface\\AddOns\\XPerl\\Images\\XPerl_StatusBar3"
else
return "Interface\\TargetingFrame\\UI-StatusBar"
end
end
-- Set1Bar
local function Set1Bar(bar, tex)
local f = getglobal(bar:GetName().."Tex")
if (f) then
f:SetTexture(tex)
end
f = getglobal(bar:GetName().."BG")
if (f) then
if (XPerlConfig.BackgroundTextures == 1) then
f:SetTexture(tex)
else
f:SetTexture("Interface\\TargetingFrame\\UI-StatusBar")
end
end
end
-- XPerl_RegisterBar
local XPerlBars = {}
function XPerl_RegisterBar(bar)
tinsert(XPerlBars, bar)
if (init_done) then
local tex = XPerl_GetBarTexture()
Set1Bar(bar, tex)
end
end
-- XPerl_SetBarTextures
function XPerl_SetBarTextures()
local tex = XPerl_GetBarTexture()
for k,v in pairs(XPerlBars) do
Set1Bar(v, tex)
end
end
-- SetCastParty
local function SetCastParty()
if (CastPartyMainFrame) then
CastPartyMainFrame:Hide()
elseif (CastPartyFrame0 and CastPartyFrame1 and CastPartyFrame2) then
CastPartyFrame0:Hide()
CastPartyFrame1:Hide()
CastPartyFrame2:Hide()
end
end
-- XPerl_OptionActions()
function XPerl_OptionActions()
local function ValidAlpha(alpha)
alpha = tonumber(alpha)
if (alpha < 0 or alpha > 1) then
alpha = 1
end
return alpha
end
local function ValidScale(scale)
scale = tonumber(scale)
if (scale < 0.5) then
scale = 0.5
elseif (scale > XPerlConfig.MaximumScale) then
scale = XPerlConfig.MaximumScale
end
return scale
end
if (XPerl_Player) then
XPerl_Player_Set_Bits()
end
if (XPerl_Player_Pet) then
XPerl_Player_Pet_Set_Bits()
end
if (XPerl_Target) then
XPerl_Target_Set_Bits()
XPerl_Target_Set_BlizzCPFrame()
end
if (XPerl_TargetTarget) then
XPerl_TargetTarget_Set_Bits()
end
if (XPerl_party1) then
XPerl_Party_Set_Bits()
end
if (XPerl_partypet1) then
XPerl_Party_Pet_Set_Name()
end
XPerlConfig.Transparency = ValidAlpha(XPerlConfig.Transparency)
XPerlConfig.TextTransparency = ValidAlpha(XPerlConfig.TextTransparency)
XPerl_SetTextTransparency(XPerlConfig.TextTransparency)
XPerlConfig.Scale_PlayerFrame = ValidScale(XPerlConfig.Scale_PlayerFrame)
if (XPerl_Player) then
XPerl_Player:SetScale(XPerlConfig.Scale_PlayerFrame)
end
XPerlConfig.Scale_PetFrame = ValidScale(XPerlConfig.Scale_PetFrame)
if (XPerl_Player_Pet) then
XPerl_Player_Pet:SetScale(XPerlConfig.Scale_PetFrame)
end
XPerlConfig.Scale_PartyFrame = ValidScale(XPerlConfig.Scale_PartyFrame)
if (XPerl_ScaleParty) then
XPerl_ScaleParty(XPerlConfig.Scale_PartyFrame)
end
XPerlConfig.Scale_PartyPets = ValidScale(XPerlConfig.Scale_PartyPets)
if (XPerl_ScalePartyPets) then
XPerl_ScalePartyPets(XPerlConfig.Scale_PartyPets)
end
XPerlConfig.Scale_TargetFrame = ValidScale(XPerlConfig.Scale_TargetFrame)
XPerlConfig.Scale_TargetTargetFrame = ValidScale(XPerlConfig.Scale_TargetTargetFrame)
if (XPerl_Target) then
XPerl_Target:SetScale(XPerlConfig.Scale_TargetFrame)
end
if (XPerl_ScaleTargetTarget) then
XPerl_ScaleTargetTarget(XPerlConfig.Scale_TargetTargetFrame)
end
XPerlConfig.Scale_Raid = ValidScale(XPerlConfig.Scale_Raid)
if (XPerl_ScaleRaid) then
XPerl_ScaleRaid(XPerlConfig.Scale_Raid)
end
if (XPerl_ArcaneBarFrame) then
XPerl_ArcaneBar_Set()
end
SetCastParty()
XPerl_SetBarTextures()
XPerl_Setup_StatsFrames()
XPerl_SetAllFrames()
XPerl_SetTransparency(XPerlConfig.Transparency)
if (XPerl_Player) then XPerl_Player_UpdateDisplay() end
if (XPerl_Player_Pet_UpdateDisplay) then XPerl_Player_Pet_UpdateDisplay () end
if (XPerl_Target) then XPerl_Target_UpdateDisplay() end
if (XPerl_TargetTarget) then
XPerl_TargetTarget_UpdateDisplay(XPerl_TargetTarget)
if (XPerl_TargetTargetTarget) then
XPerl_TargetTarget_UpdateDisplay(XPerl_TargetTargetTarget)
end
end
if (XPerl_party1) then XPerl_Party_UpdateDisplayAll() end
if (XPerl_partypet1) then XPerl_Party_Pet_UpdateDisplayAll() end
if (XPerl_Raid_Position) then
if (XPerl_raid1) then
XPerl_Raid_Set_Bits()
XPerl_Raid_Position()
XPerl_RaidTitles()
end
end
end