vanilla-wow-addons – Rev 1
?pathlinks?
local XPerl_Party_Events = {}
local PartyFrames = {}
----------------------
-- Loading Function --
----------------------
function XPerl_Party_OnLoadEvents()
this.time = 0
this:RegisterEvent("PLAYER_ENTERING_WORLD")
this:RegisterEvent("PLAYER_LEAVING_WORLD")
-- Set here to reduce amount of function calls made
this:SetScript("OnEvent", XPerl_Party_OnEvent)
this:SetScript("OnUpdate", XPerl_Party_OnUpdate)
end
-- XPerl_Party_OnLoad
function XPerl_Party_OnLoad()
this.feigning = 0
this.partyid = "party"..this:GetID()
PartyFrames[this.partyid] = this
XPerl_InitFadeFrame(this)
XPerl_RegisterHighlight(getglobal(this:GetName().."_CastClickOverlay"), 3)
XPerl_RegisterHighlight(getglobal(this:GetName().."_TargetFrame"), 3)
XPerl_RegisterPerlFrames(this, {"NameFrame", "StatsFrame", "PortraitFrame", "LevelFrame", "TargetFrame"})
this.FlashFrames = {getglobal(this:GetName().."_NameFrame"),
getglobal(this:GetName().."_LevelFrame"),
getglobal(this:GetName().."_StatsFrame"),
getglobal(this:GetName().."_PortraitFrame")}
end
local PartyEvents = { "PARTY_MEMBERS_CHANGED", "PARTY_LEADER_CHANGED", "PARTY_LOOT_METHOD_CHANGED",
"UNIT_FACTION", "UNIT_DYNAMIC_FLAGS", "UNIT_FLAGS", "UNIT_AURA", "PARTY_MEMBER_ENABLE",
"PARTY_MEMBER_DISABLE", "UNIT_MODEL_CHANGED"}
-- XPerl_Party_RegisterSome
local function XPerl_Party_RegisterSome()
for i,name in pairs(PartyEvents) do
XPerl_Party_EventFrame:RegisterEvent(name)
end
XPerl_RegisterBasics(XPerl_Party_EventFrame)
end
-- XPerl_Party_UnregisterSome
local function XPerl_Party_UnregisterSome()
for i,name in pairs(PartyEvents) do
XPerl_Party_EventFrame:UnregisterEvent(name)
end
XPerl_UnregisterBasics(XPerl_Party_EventFrame)
end
-- ShowHideValues
local function ShowHideValues(prefix)
if (XPerlConfig.ShowPartyValues == 1) then
getglobal(prefix.."_StatsFrame_HealthBarText"):Show()
getglobal(prefix.."_StatsFrame_ManaBarText"):Show()
else
getglobal(prefix.."_StatsFrame_HealthBarText"):Hide()
getglobal(prefix.."_StatsFrame_ManaBarText"):Hide()
end
end
-- XPerl_Party_ShowPercentages
local function XPerl_Party_ShowPercentages(thisFrame)
local thisid = thisFrame:GetName()
if (XPerlConfig.ShowPartyPercent==1) then
getglobal(thisid.."_StatsFrame"):SetWidth(136)
end
ShowHideValues(thisid)
end
-- XPerl_Party_HidePercentages
local function XPerl_Party_HidePercentages(thisFrame, argReason)
local thisid = thisFrame:GetName()
getglobal(thisid.."_StatsFrame"):SetWidth(106)
if (argReason and type(argReason) == "string") then
getglobal(thisid.."_StatsFrame_HealthBarText"):SetText(argReason)
getglobal(thisid.."_StatsFrame_HealthBarText"):Show()
getglobal(thisid.."_StatsFrame_ManaBarText"):Hide()
else
ShowHideValues(thisid)
end
getglobal(thisid.."_StatsFrame_HealthBarPercent"):Hide()
getglobal(thisid.."_StatsFrame_ManaBarPercent"):Hide()
end
-- XPerl_Party_UpdateHealth
local function XPerl_Party_UpdateHealth(thisFrame)
local numID = thisFrame:GetID()
local Partyhealth = UnitHealth(thisFrame.partyid)
local Partyhealthmax = UnitHealthMax(thisFrame.partyid)
local frameID = thisFrame:GetName().."_StatsFrame_"
local healthBar = getglobal(frameID.."HealthBar")
local healthBarPercent = getglobal(frameID.."HealthBarPercent")
local hide = (XPerlConfig.ShowPartyPercent == 0)
local percVis = healthBarPercent:IsShown()
if (thisFrame.feigning == 1 and Partyhealth > 1) then
thisFrame.feigning = 0
end
if (thisFrame.feigning == 1) then
healthBar:SetMinMaxValues(0, 1)
healthBar:SetValue(0)
XPerl_SetSmoothBarColor(healthBar, 1)
else
XPerl_SetHealthBar(healthBar, Partyhealth, Partyhealthmax)
end
local frameID = thisFrame:GetName().."_StatsFrame_"
healthBarPercent:SetText(string.format("%d",(100*(Partyhealth / Partyhealthmax))+0.5).."%")
healthBarPercent:Show()
local petFrame = getglobal("XPerl_partypet"..numID)
if (not UnitIsConnected(thisFrame.partyid)) then
hide = XPERL_LOC_OFFLINE
thisFrame:SetAlpha(XPerlConfig.Transparency/2)
if (petFrame) then
petFrame:SetAlpha(XPerlConfig.Transparency/2)
end
else
thisFrame:SetAlpha(XPerlConfig.Transparency)
if (petFrame) then
petFrame:SetAlpha(XPerlConfig.Transparency)
end
if (thisFrame.feigning == 1) then
hide = XPERL_LOC_FEIGNDEATH
elseif (UnitIsDead(thisFrame.partyid)) then
hide = XPERL_LOC_DEAD
elseif (UnitIsGhost(thisFrame.partyid)) then
hide = XPERL_LOC_GHOST
elseif ((Partyhealth==1) and (Partyhealthmax==1)) then
hide = XPERL_LOC_UPDATING
end
end
if (hide) then
XPerl_Party_HidePercentages(thisFrame, hide)
else
XPerl_Party_ShowPercentages(thisFrame)
end
if (percVis ~= getglobal(frameID.."HealthBarPercent"):IsShown()) then
XPerl_StatsFrameSetup(getglobal(thisFrame:GetName().."_StatsFrame"))
end
end
--------------------
-- Buff Functions --
--------------------
-- GetBuffButton(thisFrame, buffnum, debuff, createIfAbsent)
-- debuff must be 1 or 0, as it's used in size calc
local function GetBuffButton(thisFrame, buffnum, debuff, createIfAbsent)
local buffType
if (debuff == 1) then
buffType = "DeBuff"
else
buffType = "Buff"
end
local name = thisFrame:GetName().."_BuffFrame_"..buffType..buffnum
local button = getglobal(name)
if (not button and createIfAbsent) then
button = CreateFrame("Button", name, getglobal(thisFrame:GetName().."_BuffFrame"), "XPerl_"..buffType.."Template")
button:SetID(buffnum)
local size = XPerlConfig.PartyBuffSize * (1 + (0.4 * debuff))
button:SetHeight(size)
button:SetWidth(size)
if (debuff == 1) then
button:SetScript("OnEnter", XPerl_Party_SetDeBuffTooltip)
else
button:SetScript("OnEnter", XPerl_Party_SetBuffTooltip)
end
button:SetScript("OnLeave", XPerl_PlayerTipHide)
button:ClearAllPoints()
if (buffnum == 1) then
if (debuff == 1) then
button:SetPoint("LEFT", thisFrame:GetName().."_StatsFrame", "RIGHT", 0, 0)
else
button:SetPoint("TOPLEFT", getglobal(thisFrame:GetName().."_BuffFrame"), "TOPLEFT", 0, 0)
end
else
local prevButton = getglobal(thisFrame:GetName().."_BuffFrame_"..buffType..(buffnum - 1))
button:SetPoint("TOPLEFT", prevButton, "TOPRIGHT", 1 + debuff, 0)
end
end
return button
end
-- XPerl_Party_SetDebuffLoc
local function XPerl_Party_SetDebuffLocation(thisFrame)
local debuff1 = getglobal("XPerl_party"..thisFrame:GetID().."_BuffFrame_DeBuff1")
if (debuff1) then
debuff1:ClearAllPoints()
if (XPerlConfig.PartyDebuffsBelow == 0) then
local petFrame = getglobal("XPerl_partypet"..thisFrame:GetID())
if (petFrame and petFrame:IsVisible()) then
debuff1:SetPoint("LEFT", "XPerl_partypet"..thisFrame:GetID().."_StatsFrame", "RIGHT", 0, 0)
else
debuff1:SetPoint("LEFT", "XPerl_party"..thisFrame:GetID().."_StatsFrame", "RIGHT", 0, 0)
end
else
local buff1 = getglobal("XPerl_party"..thisFrame:GetID().."_BuffFrame_Buff1")
if (not buff1) then
debuff1:SetPoint("TOPLEFT", ("XPerl_party"..thisFrame:GetID().."_BuffFrame_BuffFrame"), "TOPLEFT", 0, -20)
else
debuff1:SetPoint("TOPLEFT", buff1, "BOTTOMLEFT", 0, -2)
end
end
end
end
-- XPerl_Party_SetBuffLoc
function XPerl_Party_SetBuffLocation(thisFrame)
local buff1 = getglobal(thisFrame:GetName().."_BuffFrame_Buff1")
if (buff1) then
buff1:ClearAllPoints()
local buffFrame = getglobal(thisFrame:GetName().."_BuffFrame")
buff1:SetPoint("TOPLEFT", buffFrame, "TOPLEFT", 0, 0)
end
end
-- XPerl_IsFeignDeath(unit)
function XPerl_IsFeignDeath(unit)
for i = 1,20 do
local buff = UnitBuff(unit, i)
if (buff) then
if (strfind(strlower(buff), "feigndeath")) then
return true
end
else
break
end
end
end
-- XPerl_Party_Buff_UpdateAll
local function XPerl_Party_Buff_UpdateAll(thisFrame)
local partyid = thisFrame.partyid
local thisid = thisFrame:GetName()
if (XPerlConfig.PartyBuffs == 0 and XPerlConfig.PartyDebuffs == 0) then
getglobal(thisid.."_BuffFrame"):Hide()
else
getglobal(thisid.."_BuffFrame"):Show()
if (UnitExists(partyid)) then
local needUpdateHealth = false
if (XPerlConfig.PartyBuffs == 1) then
for buffnum=1,16 do
local buff, count = XPerl_UnitBuff(partyid, buffnum, XPerlConfig.PartyCastableBuffs)
if (buff) then
local button = GetBuffButton(thisFrame, buffnum, 0, true)
local icon = getglobal(button:GetName().."Icon")
icon:SetTexture(buff)
if (strfind(strlower(buff), "feigndeath")) then
if (thisFrame.feigning == 0) then
thisFrame.feigning = 1
needUpdateHealth = true
end
end
local buffCount = getglobal(button:GetName().."Count")
if (count > 1) then
buffCount:SetText(count)
buffCount:Show()
else
buffCount:Hide()
end
button:Show()
else
local button = getglobal(thisid.."_BuffFrame_Buff"..buffnum)
if (button) then
button:Hide()
end
end
end
XPerl_Party_SetBuffLocation(thisFrame)
else
for buffnum=1,16 do
local button = getglobal(thisid.."_BuffFrame_Buff"..buffnum)
if (button) then
button:Hide()
end
end
end
if (XPerlConfig.PartyDebuffs == 1) then
for buffnum=1,8 do
local buff, count, debuffType = XPerl_UnitDebuff(partyid, buffnum, XPerlConfig.PartyCurableDebuffs)
if (buff) then
local button = GetBuffButton(thisFrame, buffnum, 1, buff)
local icon = getglobal(button:GetName().."Icon")
icon:SetTexture(buff)
local buffCount = getglobal(button:GetName().."Count")
if (count > 1) then
buffCount:SetText(count)
buffCount:Show()
else
buffCount: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
local button = getglobal(thisid.."_BuffFrame_DeBuff"..buffnum)
if (button) then
button:Hide()
end
end
end
XPerl_Party_SetDebuffLocation(thisFrame)
else
for buffnum=1,8 do
local button = getglobal(thisid.."_BuffFrame_DeBuff"..buffnum)
if (button) then
button:Hide()
end
end
end
if (XPerlConfig.PartyBuffs == 0 or XPerlConfig.PartyCastableBuffs == 1) then
local _, class = UnitClass(thisFrame.partyid)
if (class == "HUNTER") then
if (XPerl_IsFeignDeath(thisFrame.partyid)) then
thisFrame.feigning = 1
needUpdateHealth = true
end
end
end
if (needUpdateHealth) then
XPerl_Party_UpdateHealth(thisFrame)
end
end
end
XPerl_CheckDebuffs(partyid, {getglobal(thisFrame:GetName().."_NameFrame"),getglobal(thisFrame:GetName().."_LevelFrame"),getglobal(thisFrame:GetName().."_PortraitFrame"),getglobal(thisFrame:GetName().."_StatsFrame")})
end
-- XPerl_Party_SetBuffTooltip
function XPerl_Party_SetBuffTooltip()
local partyid = "party"..this:GetParent():GetParent():GetID()
GameTooltip:SetOwner(this,"ANCHOR_BOTTOMRIGHT",30,0)
--GameTooltip:SetUnitBuff(partyid, this:GetID(), XPerlConfig.PartyCastableBuffs)
XPerl_TooltipSetUnitBuff(GameTooltip, partyid, this:GetID(), XPerlConfig.PartyCastableBuffs)
XPerl_ToolTip_AddBuffDuration(partyid)
end
-- XPerl_Party_SetDeBuffTooltip
function XPerl_Party_SetDeBuffTooltip()
local partyid = "party"..this:GetParent():GetParent():GetID()
GameTooltip:SetOwner(this,"ANCHOR_BOTTOMRIGHT",30,0)
--GameTooltip:SetUnitDebuff(partyid, this:GetID(), XPerlConfig.PartyCurableDebuffs)
XPerl_TooltipSetUnitDebuff(GameTooltip, partyid, this:GetID(), XPerlConfig.PartyCurableDebuffs)
end
-------------------------
-- The Update Function --
-------------------------
local function XPerl_Party_CombatFlash(thisFrame, elapsed, argNew, argGreen)
if (XPerl_CombatFlashSet (elapsed, thisFrame, argNew, argGreen)) then
XPerl_CombatFlashSetFrames(thisFrame)
end
end
-- XPerl_Party_UpdatePortrait
function XPerl_Party_UpdatePortrait(thisFrame)
if (XPerlConfig.ShowPartyPortrait == 1) then
local framePortrait = getglobal(thisFrame:GetName().."_PortraitFrame_Portrait")
local framePortrait3D = getglobal(thisFrame:GetName().."_PortraitFrame_Portrait3D")
if (XPerlConfig.ShowPartyPortrait3D == 1 and UnitIsVisible(thisFrame.partyid)) then
framePortrait:Hide()
framePortrait3D:Show()
XPerlSetPortrait3D(framePortrait3D, thisFrame.partyid)
else
framePortrait3D.last3DTime = nil
framePortrait:Show()
framePortrait3D:Hide()
SetPortraitTexture(framePortrait, thisFrame.partyid)
end
end
end
-- XPerl_Party_UpdateName
local function XPerl_Party_UpdateName(thisFrame)
local thisid = thisFrame:GetName()
local Partyname = UnitName(thisFrame.partyid)
if (Partyname) then
local nameFrame = getglobal(thisid.."_NameFrame")
local textFrame = getglobal(thisid.."_NameFrameText")
textFrame:SetFontObject(GameFontNormal)
textFrame:SetText(Partyname)
if (textFrame:GetStringWidth() > nameFrame:GetWidth() - 4) then
textFrame:SetFontObject(GameFontNormalSmall)
end
XPerl_ColourFriendlyUnit(textFrame, thisFrame.partyid)
end
end
-- XPerl_Party_UpdateLeader
local function XPerl_Party_UpdateLeader(thisFrame)
--partyid = ("party"..this:GetID())
local thisid = thisFrame:GetName()
local id = thisFrame:GetID()
local icon = getglobal(thisid.."_NameFrame_LeaderIcon")
if (GetPartyLeaderIndex() == id ) then
icon:Show()
else
icon:Hide()
end
icon = getglobal(thisid.."_NameFrame_MasterIcon")
local lootMethod
local lootMaster
lootMethod, lootMaster = GetLootMethod()
if ( id == lootMaster ) then
icon:Show()
else
icon:Hide()
end
end
-- XPerl_Party_Update_Control
local function XPerl_Party_Update_Control(thisFrame)
if (UnitIsVisible(thisFrame.partyid) and UnitIsCharmed(thisFrame.partyid)) then
--XPerl_Target_Warning:SetTexture("Interface\Minimap\Ping\ping6")
--XPerl_Target_Warning:SetBlendMode("ADD")
getglobal(thisFrame:GetName().."_NameFrame_Warning"):Show()
else
getglobal(thisFrame:GetName().."_NameFrame_Warning"):Hide()
end
end
-- XPerl_Party_UpdatePVP
local function XPerl_Party_UpdatePVP(thisFrame)
local f = getglobal(thisFrame:GetName().."_NameFrame_PVPStatus")
if (XPerlConfig.ShowPartyPVP == 1 and UnitIsPVP(thisFrame.partyid)) then
f:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..(UnitFactionGroup(thisFrame.partyid) or "FFA"))
f:Show()
else
f:Hide()
end
end
-- XPerl_Party_UpdateCombat
function XPerl_Party_UpdateCombat(thisFrame)
XPerl_Party_UpdateCombat1(thisFrame.partyid, thisFrame:GetName())
XPerl_Party_Update_Control(thisFrame)
end
-- XPerl_Party_UpdateCombat1
function XPerl_Party_UpdateCombat1(argID,argName)
local frame = getglobal(argName.."_NameFrame_ActivityStatus")
if (UnitAffectingCombat(argID)) then
frame:Show()
else
frame:Hide()
end
end
-- XPerl_Party_UpdateLevel
local function XPerl_Party_UpdateLevel(thisFrame)
local Partylevel = UnitLevel(thisFrame.partyid)
local color = GetDifficultyColor(Partylevel)
getglobal(thisFrame:GetName().."_LevelFrame_LevelBarText"):SetTextColor(color.r,color.g,color.b)
getglobal(thisFrame:GetName().."_LevelFrame_LevelBarText"):SetText(Partylevel)
end
-- XPerl_Party_UpdateClass
local function XPerl_Party_UpdateClass(thisFrame)
if (UnitIsPlayer(thisFrame.partyid)) then
local _, PlayerClass = UnitClass(thisFrame.partyid)
local r, l, t, b = XPerl_ClassPos(PlayerClass)
getglobal(thisFrame:GetName().."_LevelFrame_ClassTexture"):SetTexCoord(r, l, t, b)
end
if (XPerlConfig.ShowPartyClassIcon==1) then
getglobal(thisFrame:GetName().."_LevelFrame_ClassTexture"):Show()
else
getglobal(thisFrame:GetName().."_LevelFrame_ClassTexture"):Hide()
end
end
-- XPerl_Party_UpdateManaType
local function XPerl_Party_UpdateManaType(thisFrame)
local frameName = thisFrame:GetName().."_StatsFrame_ManaBar"
XPerl_SetManaBarType(thisFrame.partyid, getglobal(frameName), getglobal(frameName.."BG"))
end
-- XPerl_Party_UpdateMana
local function XPerl_Party_UpdateMana(thisFrame)
--partyid = ("party"..this:GetID())
local thisid = thisFrame:GetName()
local Partymana = UnitMana(thisFrame.partyid)
local Partymanamax = UnitManaMax(thisFrame.partyid)
local frameManaBar = getglobal(thisid.."_StatsFrame_ManaBar")
local frameManaBarText = getglobal(thisid.."_StatsFrame_ManaBarText")
local frameManaBarPercent = getglobal(thisid.."_StatsFrame_ManaBarPercent")
local frameHealthBarPercent = getglobal(thisid.."_StatsFrame_HealthBarPercent")
if (Partymanamax == 1 and Partymana > Partymanamax) then
Partymanamax = Partymana
end
frameManaBar:SetMinMaxValues(0, Partymanamax)
frameManaBar:SetValue(Partymana)
pmanaPct = (Partymana * 100.0) / Partymanamax
pmanaPct = string.format("%3.0f", pmanaPct)
if (frameHealthBarPercent:IsVisible()) then
frameManaBarPercent:Show()
end
if (UnitPowerType(thisFrame.partyid)>=1) then
frameManaBarPercent:SetText(Partymana)
else
frameManaBarPercent:SetText(string.format("%d",(100*(Partymana / Partymanamax))+0.5).."%")
end
if (XPerlConfig.ShowPartyValues == 1) then
frameManaBarText:Show()
else
frameManaBarText:Hide()
end
frameManaBarText:SetText(Partymana.."/"..Partymanamax)
if (XPerlConfig.ShowPartyPercent==0) then
frameManaBarPercent:Hide()
frameHealthBarPercent:Hide()
getglobal(thisid.."_StatsFrame"):SetWidth(106)
end
local petFrame = getglobal("XPerl_partypet"..thisFrame:GetID())
if (UnitIsConnected(thisFrame.partyid)) then
thisFrame:SetAlpha(XPerlConfig.Transparency)
if (petFrame) then
petFrame:SetAlpha(XPerlConfig.Transparency)
end
else
thisFrame:SetAlpha(XPerlConfig.Transparency/2)
if (petFrame) then
petFrame:SetAlpha(XPerlConfig.Transparency/2)
end
getglobal(thisid.."_StatsFrame_HealthBarText"):SetText(XPERL_LOC_OFFLINE)
end
end
-- XPerl_Party_UpdateRange
local function XPerl_Party_UpdateRange(thisFrame)
local f = getglobal(thisFrame:GetName().."_NameFrame_RangeStatus")
if (XPerlConfig.ShowParty30YardSymbol == 0 or CheckInteractDistance(thisFrame.partyid, 4) or not UnitIsConnected(thisFrame.partyid)) then
f:Hide()
else
f:Show()
f:SetAlpha(1)
end
end
-- XPerl_Party_OnUpdate
function XPerl_Party_OnUpdate()
local update
this.time = arg1 + this.time
if this.time >= 0.2 then
update = true
this.time = 0
end
local any
for i,frame in pairs(PartyFrames) do
if (frame:IsShown()) then
if (frame.PlayerFlash) then
XPerl_Party_CombatFlash(frame, arg1, false)
end
if (frame.Fading == 0) then
if (update) then
XPerl_Party_UpdateRange(frame)
XPerl_Party_UpdateTarget(frame)
end
else
XPerl_ProcessFade(frame)
end
any = true
end
end
if (not any) then
XPerl_Party_EventFrame:Hide()
end
end
-- XPerl_Party_StartFade
local function XPerl_Party_StartFade(thisFrame)
local framePet = getglobal("XPerl_partypet"..thisFrame:GetID())
if (framePet and framePet:IsVisible()) then
XPerl_StartFade(framePet)
end
XPerl_StartFade(thisFrame)
if (UnitExists(thisFrame.partyid) and not UnitIsConnected(thisFrame.partyid)) then
thisFrame.FadeTime = 0.5
if (framePet and framePet:IsVisible()) then
framePet.FadeTime = 0.5
end
end
end
-- XPerl_Party_UpdateDisplayAll
function XPerl_Party_UpdateDisplayAll()
local any
for i,frame in pairs(PartyFrames) do
XPerl_Party_UpdateDisplay(frame)
if (frame:IsShown()) then
any = true
end
end
if (any) then
XPerl_Party_EventFrame:Show()
else
XPerl_Party_EventFrame:Hide()
end
end
-- XPerl_Party_UpdateDisplay
function XPerl_Party_UpdateDisplay(thisFrame)
if (thisFrame and thisFrame.partyid) then
if (UnitExists(thisFrame.partyid)) then
XPerl_CancelFade(thisFrame)
XPerl_Party_UpdateName(thisFrame)
XPerl_Party_UpdateLeader(thisFrame)
XPerl_Party_UpdateClass(thisFrame)
XPerl_Party_UpdateManaType(thisFrame)
XPerl_Party_UpdateHealth(thisFrame)
XPerl_Party_UpdateMana(thisFrame)
XPerl_Party_UpdateLevel(thisFrame)
XPerl_Party_Update_Control(thisFrame)
XPerl_Party_UpdateCombat(thisFrame)
XPerl_Party_UpdatePVP(thisFrame)
XPerl_Party_UpdatePortrait(thisFrame)
XPerl_Party_Buff_UpdateAll(thisFrame)
if (XPerlConfig.ShowPartyRaid == 1 or not UnitInRaid("player")) then
thisFrame:Show()
else
XPerl_Party_StartFade(thisFrame)
end
else
XPerl_Party_StartFade(thisFrame)
end
end
end
--------------------
-- Click Handlers --
--------------------
-- Non local by request (GenesisClicks/Elsewhere)
Perl_Party_FindID = XPerl_Frame_FindID
function XPerl_Party_OnClick(button,argTarget)
local unit = this:GetParent().partyid
if (argTarget == 1) then
unit = unit.."target"
end
if (XPerl_OnClick_Handler(button, unit)) then
return
end
if (button == "RightButton") then
if (argTarget == 0) then
local id = this:GetParent():GetID()
HideDropDownMenu(1)
ToggleDropDownMenu(1, nil, getglobal("PartyMemberFrame"..id.."DropDown"), this:GetParent():GetName().."_StatsFrame", 0, 0)
end
end
end
-- XPerl_Party_PlayerTip
function XPerl_Party_PlayerTip(argTarget)
local unitid = this:GetParent().partyid
if (argTarget) then
unitid = unitid.."target"
end
XPerl_PlayerTip(unitid)
end
-- XPerl_Party_UpdateTarget
function XPerl_Party_UpdateTarget(thisFrame)
local frame = getglobal("XPerl_"..thisFrame.partyid.."_TargetFrame")
local petFrame = getglobal("XPerl_partypet"..thisFrame:GetID())
if (frame == nil) then
return
end
if (frame.Fading == 1) then
return
end
if (XPerlConfig.ShowPartyTarget == 1) then
local frameText = getglobal("XPerl_"..thisFrame.partyid.."_TargetFrame_Target")
if (UnitIsConnected(thisFrame.partyid) and UnitExists(thisFrame.partyid) and UnitIsVisible(thisFrame.partyid)) then
local unit = thisFrame.partyid.."target"
local targetname = UnitName(unit)
if (targetname and targetname ~= UNKNOWNOBJECT) then
-- if (UnitExists (unit)) then - Changed as a test, as u can often pick up unit name, and unit class, but not health etc.
--local targetname = UnitName(unit)
frameText:SetText(targetname)
local width = frameText:GetStringWidth()
if (width < 68) then
frame:SetWidth(68)
elseif (width > 112) then
frame:SetWidth(120)
local remCount = 1
while ((frameText:GetStringWidth() >= 112) and (string.len(targetname) > remCount)) do
targetname = string.sub(targetname, 1, string.len(targetname) - remCount)..".."
remCount = 3
frameText:SetText(targetname)
end
else
frame:SetWidth(width + 8)
end
XPerl_SetUnitNameColor (unit, frameText)
frame:Show()
local frameAct = getglobal("XPerl_"..thisFrame.partyid.."_TargetFrame_TargetActivityStatus")
if (UnitAffectingCombat(unit)) then
frameAct:SetTexCoord(0.5, 1.0, 0.0, 0.5)
frameAct:Show()
else
frameAct:Hide()
end
local framePVP = getglobal("XPerl_"..thisFrame.partyid.."_TargetFrame_TargetPVPStatus")
if (XPerlConfig.ShowPartyPVP == 1 and UnitIsPVP(unit)) then
framePVP:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..(UnitFactionGroup(unit) or "FFA"))
framePVP:Show()
else
framePVP:Hide()
end
else
frame:Hide()
end
else
frame:Hide()
end
else
frame:Hide()
end
if (petFrame) then
petFrame:ClearAllPoints()
if (frame:IsShown() and XPerlConfig.ShowPartyPetName == 1) then
petFrame:SetPoint("TOPLEFT", frame, "TOPRIGHT", -2, 2)
else
if (XPerlConfig.ShowPartyPetName == 1) then
petFrame:SetPoint("TOPLEFT", frame:GetParent():GetName().."_StatsFrame", "TOPRIGHT", -2, 21)
else
petFrame:SetPoint("TOPLEFT", frame:GetParent():GetName().."_StatsFrame", "TOPRIGHT", -2, 0)
end
end
end
end
-------------------
-- Event Handler --
-------------------
function XPerl_Party_OnEvent()
local func = XPerl_Party_Events[event]
if (func) then
func()
else
XPerl_ShowMessage("EXTRA EVENT")
--XPerl_Party_UpdateDisplay()
end
end
-- PLAYER_ENTERING_WORLD
function XPerl_Party_Events:PLAYER_ENTERING_WORLD()
XPerl_Party_RegisterSome()
XPerl_Party_UpdateDisplayAll()
end
XPerl_Party_Events.PARTY_MEMBERS_CHANGED = XPerl_Party_Events.PLAYER_ENTERING_WORLD
-- PLAYER_LEAVING_WORLD()
function XPerl_Party_Events:PLAYER_LEAVING_WORLD()
XPerl_Party_UnregisterSome()
end
-- PARTY_LEADER_CHANGED
function XPerl_Party_Events:PARTY_LEADER_CHANGED()
for i,frame in pairs(PartyFrames) do
XPerl_Party_UpdateLeader(frame)
end
end
XPerl_Party_Events.PARTY_LOOT_METHOD_CHANGED = XPerl_Party_Events.PARTY_LEADER_CHANGED
-- UNIT_COMBAT
function XPerl_Party_Events:UNIT_COMBAT()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateCombat(f)
if (arg2 == "HEAL") then
XPerl_Party_CombatFlash(f, 0, true, true)
elseif (arg4 and arg4 > 0) then
XPerl_Party_CombatFlash(f, 0, true)
end
end
end
-- UNIT_HEALTH, UNIT_MAXHEALTH
function XPerl_Party_Events:UNIT_HEALTH()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateHealth(f)
end
end
-- UNIT_MAXHEALTH
function XPerl_Party_Events:UNIT_MAXHEALTH()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateHealth(f)
XPerl_Party_UpdateLevel(f) -- Level not available until we've received maxhealth
XPerl_Party_UpdateClass(f)
end
end
XPerl_Party_Events.PARTY_MEMBER_ENABLE = XPerl_Party_Events.UNIT_HEALTH
XPerl_Party_Events.PARTY_MEMBER_DISABLE = XPerl_Party_Events.UNIT_HEALTH
-- UNIT_MODEL_CHANGED
function XPerl_Party_Events:UNIT_MODEL_CHANGED()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdatePortrait(f)
end
end
--XPerl_Party_Events.UNIT_PORTRAIT_UPDATE = XPerl_Party_Events.UNIT_MODEL_CHANGED
-- UNIT_MANA
function XPerl_Party_Events:UNIT_MANA()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateMana(f)
end
end
XPerl_Party_Events.UNIT_MAXMANA = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_RAGE = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_MAXRAGE = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_ENERGY = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_MAXENERGY = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_FOCUS = XPerl_Party_Events.UNIT_MANA
XPerl_Party_Events.UNIT_MAXFOCUS = XPerl_Party_Events.UNIT_MANA
-- UNIT_DISPLAYPOWER
function XPerl_Party_Events:UNIT_DISPLAYPOWER()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateManaType(f)
XPerl_Party_UpdateMana(f)
end
end
-- UNIT_NAME_UPDATE
function XPerl_Party_Events:UNIT_NAME_UPDATE()
if (PartyFrames[arg1]) then
XPerl_Party_UpdateName(PartyFrames[arg1])
end
end
-- UNIT_LEVEL
function XPerl_Party_Events:UNIT_LEVEL()
if (PartyFrames[arg1]) then
XPerl_Party_UpdateLevel(PartyFrames[arg1])
end
end
-- UNIT_AURA
function XPerl_Party_Events:UNIT_AURA()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_Buff_UpdateAll(f)
end
end
-- UNIT_FACTION
function XPerl_Party_Events:UNIT_FACTION()
local f = PartyFrames[arg1]
if (f) then
XPerl_Party_UpdateName(f)
XPerl_Party_UpdateCombat(f)
XPerl_Party_Update_Control(f)
XPerl_Party_UpdatePVP(f)
end
end
XPerl_Party_Events.UNIT_FLAGS = XPerl_Party_Events.UNIT_FACTION
XPerl_Party_Events.UNIT_DYNAMIC_FLAGS = XPerl_Party_Events.UNIT_FACTION
---- Moving stuff ----
-- XPerl_Party_GetGap
function XPerl_Party_GetGap()
return math.floor(math.floor((XPerl_party1:GetBottom() - XPerl_party2:GetTop() + 0.01) * 100) / 100)
end
-- XPerl_Party_SetGap
function XPerl_Party_SetGap(newGap)
if (type(newGap) ~= "number") then
return
end
local top = XPerl_party1:GetTop()
local height = XPerl_party1:GetHeight()
if (type(newGap) == "number") then
for i = 1,4 do
local frame = getglobal("XPerl_party"..i)
local left = frame:GetLeft()
frame:ClearAllPoints()
frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
top = top - (newGap + height)
frame:SetUserPlaced(true)
end
end
end
-- XPerl_Party_AlignLeft
function XPerl_Party_AlignLeft()
local left = XPerl_party1:GetLeft()
for i = 1,4 do
local frame = getglobal("XPerl_party"..i)
local top = frame:GetTop()
frame:ClearAllPoints()
frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", left, top)
frame:SetUserPlaced(true)
end
end
-- XPerl_Party_Set_Bits
function XPerl_Party_Set_Bits()
for num=1,4 do
local levelFrame = getglobal("XPerl_party"..num.."_LevelFrame")
local nameFrame = getglobal("XPerl_party"..num.."_NameFrame")
local statsFrame = getglobal("XPerl_party"..num.."_StatsFrame")
local portraitFrame = getglobal("XPerl_party"..num.."_PortraitFrame")
local clickFrame = getglobal("XPerl_party"..num.."_CastClickOverlay")
local classTexture = getglobal("XPerl_party"..num.."_LevelFrame_ClassTexture")
local levelText = getglobal("XPerl_party"..num.."_LevelFrame_LevelBarText")
portraitFrame:ClearAllPoints()
nameFrame:ClearAllPoints()
levelFrame:ClearAllPoints()
statsFrame:ClearAllPoints()
classTexture:ClearAllPoints()
levelText:ClearAllPoints()
clickFrame:ClearAllPoints()
if (XPerlConfig.ShowPartyPortrait==0) then
portraitFrame:Hide()
levelFrame:SetWidth(30)
levelFrame:SetHeight(41)
nameFrame:SetPoint("TOPLEFT", getglobal("XPerl_party"..num), "TOPLEFT", 0, 0)
levelFrame:SetPoint("TOPLEFT", nameFrame, "BOTTOMLEFT", 0, 3)
statsFrame:SetPoint("TOPLEFT", levelFrame, "TOPRIGHT", -3, 0)
levelText:SetPoint("BOTTOM", levelFrame, "BOTTOM", 0, 4)
classTexture:SetPoint("TOPLEFT", levelFrame, "TOPLEFT", 5, -5)
getglobal("XPerl_party"..num.."_BuffFrame"):SetPoint("TOPLEFT", statsFrame, "BOTTOMLEFT", 5, 0)
clickFrame:SetPoint("TOPLEFT", nameFrame, "TOPLEFT", 0, 0)
clickFrame:SetPoint("BOTTOMRIGHT", statsFrame, "BOTTOMRIGHT", 0, 0)
else
portraitFrame:Show()
levelFrame:SetWidth(27)
levelFrame:SetHeight(22)
levelFrame:SetPoint("TOPLEFT", getglobal("XPerl_party"..num), "TOPLEFT", 0, 0)
portraitFrame:SetPoint("TOPLEFT", levelFrame, "TOPRIGHT", -2, 0)
nameFrame:SetPoint("TOPLEFT", portraitFrame, "TOPRIGHT", -3, 0)
statsFrame:SetPoint("TOPLEFT", nameFrame, "BOTTOMLEFT", 0, 3)
levelText:SetPoint("CENTER", 0, 0)
classTexture:SetPoint("BOTTOMRIGHT", portraitFrame, "BOTTOMLEFT", 0, 3)
getglobal("XPerl_party"..num.."_BuffFrame"):SetPoint("TOPLEFT", portraitFrame, "BOTTOMLEFT", 5, 0)
clickFrame:SetPoint("TOPLEFT", levelFrame, "TOPLEFT", 0, 0)
clickFrame:SetPoint("BOTTOMRIGHT", statsFrame, "BOTTOMRIGHT", 0, 0)
end
if (XPerlConfig.ShowPartyLevel==0) then
getglobal("XPerl_party"..num.."_LevelFrame_LevelBarText"):Hide()
if (XPerlConfig.ShowPartyLevel==1) then
levelFrame:SetHeight(levelFrame:GetHeight()-10)
end
else
getglobal("XPerl_party"..num.."_LevelFrame_LevelBarText"):Show()
levelFrame:Show()
if (XPerlConfig.ShowPartyLevel==0) then
levelFrame:SetHeight(levelFrame:GetHeight()+10)
end
if (XPerlConfig.ShowPartyPortrait == 1) then
levelFrame:SetWidth(27)
else
levelFrame:SetWidth(30)
end
end
if (XPerlConfig.ShowPartyClassIcon==0) then
classTexture:Hide()
if (XPerlConfig.ShowPartyLevel == 0) then
levelFrame:SetWidth(1)
levelFrame:Hide()
end
else
classTexture:Show()
levelFrame:Show()
if (XPerlConfig.ShowPartyPortrait == 1) then
levelFrame:SetWidth(27)
else
levelFrame:SetWidth(30)
end
end
local frameHealth = getglobal("XPerl_party"..num.."_StatsFrame_HealthBarPercent")
local frameMana = getglobal("XPerl_party"..num.."_StatsFrame_ManaBarPercent")
local width = (30 * XPerlConfig.ShowPartyPercent) + 106; -- 136 enabled, 106 disabled
statsFrame:SetWidth(width)
if (XPerlConfig.ShowPartyPercent == 0) then
frameHealth:Hide()
frameMana:Hide()
else
frameHealth:Show()
frameMana:Show()
end
local height = (XPerlConfig.ShowPartyNames * 22) + 2; -- 24 when enabled, 2 when disabled
local targetFrame = getglobal("XPerl_party"..num.."_TargetFrame")
targetFrame:ClearAllPoints()
nameFrame:SetHeight(height)
if (XPerlConfig.ShowPartyNames==0) then
nameFrame:Hide()
targetFrame:SetPoint("TOPLEFT", statsFrame, "BOTTOMLEFT", 0, 2)
else
nameFrame:Show()
targetFrame:SetPoint("BOTTOMLEFT", nameFrame, "BOTTOMRIGHT", -2, 2)
end
XPerlConfig.PartyBuffSize = tonumber(XPerlConfig.PartyBuffSize) or 20
XPerl_SetBuffSize("XPerl_party"..num.."_", XPerlConfig.PartyBuffSize, XPerlConfig.PartyBuffSize * 1.4)
end
end
-- XPerl_ScaleParty
function XPerl_ScaleParty(num)
XPerl_party4:SetScale(num)
XPerl_party3:SetScale(num)
XPerl_party2:SetScale(num)
XPerl_party1:SetScale(num)
end