vanilla-wow-addons – Rev 1
?pathlinks?
local XPerl_Party_Pet_Events = {}
local PartyPetFrames = {}
-- XPerl_Party_Pet_RegisterForPet
local function XPerl_Party_Pet_RegisterForPet()
local reg
for i = 1,4 do
if (UnitExists("partypet"..i)) then
reg = true
end
end
if (reg) then
XPerl_Party_Pet_EventFrame:RegisterEvent("UNIT_FACTION")
XPerl_Party_Pet_EventFrame:RegisterEvent("UNIT_AURA")
XPerl_Party_Pet_EventFrame:RegisterEvent("PARTY_MEMBER_ENABLE")
XPerl_Party_Pet_EventFrame:RegisterEvent("PARTY_MEMBER_DISABLE")
XPerl_Party_Pet_EventFrame:RegisterEvent("UNIT_FLAGS")
XPerl_Party_Pet_EventFrame:RegisterEvent("UNIT_DYNAMIC_FLAGS")
XPerl_RegisterBasics(XPerl_Party_Pet_EventFrame)
XPerl_Party_Pet_EventFrame:Show() -- For OnUpdate
end
end
-- XPerl_Party_Pet_UnregisterForPet
local function XPerl_Party_Pet_UnregisterForPet()
local reg
for i = 1,4 do
if (UnitExists("partypet"..i)) then
reg = true
end
end
if (not reg) then
XPerl_Party_Pet_EventFrame:UnregisterEvent("UNIT_FACTION")
XPerl_Party_Pet_EventFrame:UnregisterEvent("UNIT_AURA")
XPerl_Party_Pet_EventFrame:UnregisterEvent("PARTY_MEMBER_ENABLE")
XPerl_Party_Pet_EventFrame:UnregisterEvent("PARTY_MEMBER_DISABLE")
XPerl_Party_Pet_EventFrame:UnregisterEvent("UNIT_FLAGS")
XPerl_Party_Pet_EventFrame:UnregisterEvent("UNIT_DYNAMIC_FLAGS")
XPerl_UnregisterBasics(XPerl_Party_Pet_EventFrame)
end
end
----------------------
-- Loading Function --
----------------------
function XPerl_Party_Pet_OnLoadEvents()
this.time = 0
XPerl_Party_Pet_EventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
XPerl_Party_Pet_EventFrame:RegisterEvent("PLAYER_LEAVING_WORLD")
-- Set here to reduce amount of function calls made
XPerl_Party_Pet_EventFrame:SetScript("OnEvent", XPerl_Party_Pet_OnEvent)
XPerl_Party_Pet_EventFrame:SetScript("OnUpdate", XPerl_Party_Pet_OnUpdate)
end
-- XPerl_Party_Pet_OnLoad
function XPerl_Party_Pet_OnLoad()
this.partyunit = "party"..this:GetID()
this.petunit = "partypet"..this:GetID()
PartyPetFrames[this.petunit] = this
XPerl_InitFadeFrame(this)
XPerl_RegisterHighlight(getglobal(this:GetName().."_CastClickOverlay"), 2)
XPerl_RegisterPerlFrames(this, {"NameFrame", "StatsFrame"})
this.FlashFrames = {getglobal(this:GetName().."_NameFrame"),
getglobal(this:GetName().."_LevelFrame"),
getglobal(this:GetName().."_StatsFrame") }
end
-------------------------
-- The Update Function --
-------------------------
-- XPerl_Party_Pet_CheckPet
-- returns true if full update required (frame shown)
function XPerl_Party_Pet_CheckPet(argFrame)
if (XPerlConfig.ShowPartyPets == 1) then
if (UnitExists(argFrame.partyunit) and UnitExists(argFrame.petunit) and UnitIsConnected(argFrame.petunit) and not UnitIsDead(argFrame.petunit)) then -- and not UnitIsDeadOrGhost(argFrame.partyunit)
if (not argFrame:IsShowing()) then
if (XPerlConfig.ShowPartyRaid == 1 or not UnitInRaid("player")) then
if (XPerlConfig.ShowPartyRaid == 1) then
XPerl_Party_Pet_RegisterForPet()
XPerl_CancelFade(argFrame)
argFrame:Show()
return true
end
end
end
return false
end
end
if (argFrame:IsShowing()) then
XPerl_Party_Pet_UnregisterForPet()
XPerl_StartFade(argFrame)
end
return false
end
-- XPerl_Party_Pet_UpdateName
local function XPerl_Party_Pet_UpdateName(argFrame)
if (argFrame.petunit == nil) then
return
end
local Partypetname = UnitName(argFrame.petunit)
if (Partypetname ~= nil) then
-- Set name
--if (strlen(Partypetname) > 40) then
-- Partypetname = strsub(Partypetname, 1, 39).."..."
--end
if (XPerlConfig.ShowPartyPetNames == 1) then
getglobal(argFrame:GetName().."_NameFrame"):Show()
end
getglobal(argFrame:GetName().."_NameFrameText"):SetText(Partypetname)
if (UnitIsPVP(argFrame.partyunit)) then
getglobal(argFrame:GetName().."_NameFrameText"):SetTextColor(0,1,0)
else
getglobal(argFrame:GetName().."_NameFrameText"):SetTextColor(0.5,0.5,1)
end
end
end
-- XPerl_Party_Pet_UpdateHealth
local function XPerl_Party_Pet_UpdateHealth(argFrame)
local Partypethealth = UnitHealth(argFrame.petunit)
local Partypethealthmax = UnitHealthMax(argFrame.petunit)
local healthPct = Partypethealth / Partypethealthmax
local phealthPct = string.format("%3.0f", healthPct * 100)
getglobal(argFrame:GetName().."_StatsFrame_HealthBar"):SetMinMaxValues(0, Partypethealthmax)
getglobal(argFrame:GetName().."_StatsFrame_HealthBar"):SetValue(Partypethealth)
XPerl_SetSmoothBarColor(getglobal(argFrame:GetName().."_StatsFrame_HealthBar"), healthPct)
if (UnitIsDead(argFrame.petunit)) then
--getglobal(this:GetName().."_StatsFrame_HealthBar_HealthBarPercentText"):SetText(XPERL_LOC_DEAD)
--getglobal(this:GetName().."_StatsFrame_HealthBar_HealthBarPercentText"):Hide()
XPerl_StartFade(argFrame)
else
local t = getglobal(argFrame:GetName().."_StatsFrame_HealthBarText")
if (XPerlConfig.HealerMode == 1) then
if (XPerlConfig.HealerModeType == 1) then
t:SetText(string.format("%d/%d", Partypethealth - Partypethealthmax, Partypethealthmax))
else
t:SetText(Partypethealth - Partypethealthmax)
end
else
t:SetText(string.format("%d",(100*(Partypethealth / Partypethealthmax))+0.5).."%")
end
getglobal(argFrame:GetName().."_StatsFrame_HealthBarText"):Show()
end
end
-- XPerl_Party_Pet_UpdateManaType
local function XPerl_Party_Pet_UpdateManaType(argFrame)
local frameName = argFrame:GetName().."_StatsFrame_ManaBar"
XPerl_SetManaBarType(argFrame.petunit, getglobal(frameName), getglobal(frameName.."BG"))
end
-- XPerl_Party_Pet_UpdateMana
local function XPerl_Party_Pet_UpdateMana(argFrame)
local Partypetmana = UnitMana(argFrame.petunit)
local Partypetmanamax = UnitManaMax(argFrame.petunit)
getglobal(argFrame:GetName().."_StatsFrame_ManaBar"):SetMinMaxValues(0, Partypetmanamax)
getglobal(argFrame:GetName().."_StatsFrame_ManaBar"):SetValue(Partypetmana)
pmanaPct = (Partypetmana * 100.0) / Partypetmanamax
pmanaPct = string.format("%3.0f", pmanaPct)
getglobal(argFrame:GetName().."_StatsFrame_ManaBarText"):Show()
if (UnitPowerType(argFrame.petunit) >= 1) then
getglobal(argFrame:GetName().."_StatsFrame_ManaBarText"):SetText(Partypetmana)
else
getglobal(argFrame:GetName().."_StatsFrame_ManaBarText"):SetText(string.format("%d",(100*(Partypetmana / Partypetmanamax))+0.5).."%")
end
if (XPerlConfig.ShowPartyPetPercent == 0) then
getglobal(argFrame:GetName().."_StatsFrame_ManaBarText"):Hide()
end
end
-- XPerl_Party_Pet_UpdateLevel
local function XPerl_Party_Pet_UpdateLevel(argFrame)
local Partypetlevel = UnitLevel(argFrame.petunit)
--local PartypetClassification = UnitClassification(this.petunit)
local color = GetDifficultyColor(Partypetlevel)
getglobal(argFrame:GetName().."_NameFrameLevelText"):SetTextColor(color.r,color.g,color.b)
if (Partypetlevel == 0) then
Partypetlevel = ""
end
getglobal(argFrame:GetName().."_NameFrameLevelText"):SetText(Partypetlevel)
end
--------------------
-- Buff Functions --
--------------------
-- GetBuffButton
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)
button:SetHeight(12)
button:SetWidth(12)
if (debuff == 1) then
button:SetScript("OnEnter", XPerl_Party_Pet_SetDeBuffTooltip)
else
button:SetScript("OnEnter", XPerl_Party_Pet_SetBuffTooltip)
end
button:SetScript("OnLeave", XPerl_PlayerTipHide)
button:ClearAllPoints()
if (buffnum == 1) then
if (debuff == 1) then
button:SetPoint("TOPLEFT", 0, -14)
else
button:SetPoint("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_Pet_Buff_UpdateAll
function XPerl_Party_Pet_Buff_UpdateAll(argFrame)
local buffFrame = getglobal(argFrame:GetName().."_BuffFrame")
if (XPerlConfig.ShowPartyPetBuffs == 1) then
if (UnitExists(argFrame.partyunit) and UnitExists(argFrame.petunit)) then
buffFrame:Show()
for buffnum=1,10 do
local buff = XPerl_UnitBuff(argFrame.petunit, buffnum, XPerlConfig.PartyCastableBuffs)
if (buff) then
local button = GetBuffButton(argFrame, buffnum, 0, buff)
local icon = getglobal(button:GetName().."Icon")
icon:SetTexture(buff)
button:Show()
elseif (button) then
local button = getglobal(argFrame:GetName().."_BuffFrame_Buff"..buffnum)
if (button) then
button:Hide()
end
end
end
for buffnum=1,8 do
local buff = XPerl_UnitDebuff(argFrame.petunit, buffnum, XPerlConfig.PartyCurableDebuffs)
if (buff) then
local button = GetBuffButton(argFrame, buffnum, 1, buff)
local icon = getglobal(button:GetName().."Icon")
icon:SetTexture(buff)
button:Show()
elseif (button) then
local button = getglobal(argFrame:GetName().."_BuffFrame_DeBuff"..buffnum)
if (button) then
button:Hide()
end
end
end
else
buffFrame:Hide()
end
else
buffFrame:Hide()
end
XPerl_CheckDebuffs(argFrame.petunit, {getglobal(argFrame:GetName().."_NameFrame"), getglobal(argFrame:GetName().."_StatsFrame")})
end
function XPerl_Party_Pet_SetBuffTooltip()
local partyid = "partypet"..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)
end
function XPerl_Party_Pet_SetDeBuffTooltip()
local partyid = "partypet"..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
function XPerl_Party_Pet_UpdateDisplayAll()
for i,frame in pairs(PartyPetFrames) do
XPerl_Party_Pet_UpdateDisplay(frame)
end
end
function XPerl_Party_Pet_UpdateDisplay(argFrame)
if (XPerl_Party_Pet_CheckPet(argFrame)) then
XPerl_Party_Pet_UpdateName(argFrame)
XPerl_Party_Pet_UpdateHealth(argFrame)
XPerl_Party_Pet_UpdateLevel(argFrame)
XPerl_Party_Pet_UpdateManaType(argFrame)
XPerl_Party_Pet_UpdateMana(argFrame)
XPerl_Party_Pet_UpdateCombat(argFrame)
XPerl_Party_Pet_Buff_UpdateAll(argFrame)
end
end
--------------------
-- Click Handlers --
--------------------
Perl_Party_Pet_FindID = XPerl_Frame_FindID
-- XPerl_Party_Pet_OnClick
function XPerl_Party_Pet_OnClick(button)
local unit = this:GetParent().petunit
if (XPerl_OnClick_Handler(button, unit)) then
return
end
end
-- XPerl_Party_Pet_PlayerTip
function XPerl_Party_Pet_PlayerTip()
local unit = this:GetParent().petunit
if (UnitExists(unit)) then
XPerl_PlayerTip(unit)
end
end
-- XPerl_Party_Pet_Update_Control
local function XPerl_Party_Pet_Update_Control(argFrame)
if (UnitIsVisible(argFrame.petunit) and UnitIsCharmed(argFrame.petunit)) then
getglobal(argFrame:GetName().."_NameFrame_Warning"):Show()
else
getglobal(argFrame:GetName().."_NameFrame_Warning"):Hide()
end
end
-- XPerl_Party_Pet_UpdateCombat
function XPerl_Party_Pet_UpdateCombat(argFrame)
if (UnitExists(argFrame.partyunit) and UnitExists(argFrame.petunit)) then
if (UnitAffectingCombat(argFrame.petunit)) then
getglobal(argFrame:GetName().."_NameFrameLevelText"):Hide()
getglobal(argFrame:GetName().."_NameFrame_ActivityStatus"):Show()
else
getglobal(argFrame:GetName().."_NameFrame_ActivityStatus"):Hide()
getglobal(argFrame:GetName().."_NameFrameLevelText"):Show()
end
XPerl_Party_Pet_Update_Control(argFrame)
end
end
-- XPerl_Party_Pet_CombatFlash
local function XPerl_Party_Pet_CombatFlash(f, elapsed, argNew, argGreen)
if (XPerl_CombatFlashSet (elapsed, f, argNew, argGreen)) then
XPerl_CombatFlashSetFrames(f)
end
end
-- XPerl_Party_Pet_OnUpdate
function XPerl_Party_Pet_OnUpdate()
local any
for i,f in pairs(PartyPetFrames) do
if (f:IsShown()) then
any = true
if (f.PlayerFlash) then
XPerl_Party_Pet_CombatFlash(f, arg1, false)
end
XPerl_ProcessFade(f)
end
end
if (not any) then
XPerl_Party_Pet_EventFrame:Hide() -- Stop processing OnUpdate
end
end
-------------------
-- Event Handler --
-------------------
local function XPerl_Party_Pet_RegisterSome()
XPerl_Party_Pet_EventFrame:RegisterEvent("PARTY_MEMBERS_CHANGED")
XPerl_Party_Pet_EventFrame:RegisterEvent("UNIT_PET")
end
local function XPerl_Party_Pet_UnregisterSome()
XPerl_Party_Pet_EventFrame:UnregisterEvent("PARTY_MEMBERS_CHANGED")
XPerl_Party_Pet_EventFrame:UnregisterEvent("UNIT_PET")
end
-- XPerl_Party_Pet_OnEvent
function XPerl_Party_Pet_OnEvent()
local func = XPerl_Party_Pet_Events[event]
if (func) then
func()
else
XPerl_ShowMessage("EXTRA EVENT")
end
end
-- PLAYER_ENTERING_WORLD
function XPerl_Party_Pet_Events:PLAYER_ENTERING_WORLD()
XPerl_Party_Pet_RegisterSome()
XPerl_Party_Pet_UpdateDisplayAll()
end
-- PLAYER_LEAVING_WORLD
function XPerl_Party_Pet_Events:PLAYER_LEAVING_WORLD()
XPerl_Party_Pet_UnregisterSome()
end
-- PARTY_MEMBERS_CHANGED
function XPerl_Party_Pet_Events:PARTY_MEMBERS_CHANGED()
XPerl_Party_Pet_UpdateDisplayAll()
end
-- UNIT_FLAGS
function XPerl_Party_Pet_Events:UNIT_FLAGS()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateCombat(f) end
end
XPerl_Party_Pet_Events.UNIT_DYNAMIC_FLAGS = XPerl_Party_Pet_Events.PARTY_MEMBERS_CHANGED
-- UNIT_COMBAT
function XPerl_Party_Pet_Events:UNIT_COMBAT()
local f = PartyPetFrames[arg1]
if (f) then
if (arg2 == "HEAL") then
XPerl_Party_Pet_CombatFlash(f, 0, true, true)
elseif (arg4 and arg4 > 0) then
XPerl_Party_Pet_CombatFlash(f, 0, true)
end
end
end
-- UNIT_PET
function XPerl_Party_Pet_Events:UNIT_PET()
local petid = strfind(arg1, "party(%d)")
if (petid) then
local f = PartyPetFrames["partypet"..petid]
if (f) then
XPerl_Party_Pet_UpdateDisplay(f)
end
end
end
-- PARTY_MEMBER_ENABLE
function XPerl_Party_Pet_Events:PARTY_MEMBER_ENABLE()
local petid = strfind(arg1, "party(%d)")
if (petid) then
local f = PartyPetFrames["partypet"..petid]
if (f) then XPerl_Party_Pet_UpdateDisplay(f) end
end
end
XPerl_Party_Pet_Events.PARTY_MEMBER_DISABLE = XPerl_Party_Pet_Events.PARTY_MEMBER_ENABLE
-- UNIT_NAME_UPDATE
function XPerl_Party_Pet_Events:UNIT_NAME_UPDATE()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateName(f) end
end
-- UNIT_FACTION
function XPerl_Party_Pet_Events:UNIT_FACTION()
local f = PartyPetFrames[arg1]
if (f) then
XPerl_Party_Pet_UpdateName(f)
XPerl_Party_Pet_UpdateCombat(f)
end
end
-- UNIT_LEVEL
function XPerl_Party_Pet_Events:UNIT_LEVEL()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateLevel(f) end
end
-- UNIT_HEALTH
function XPerl_Party_Pet_Events:UNIT_HEALTH()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateHealth(f) end
end
-- UNIT_MAXHEALTH
function XPerl_Party_Pet_Events:UNIT_MAXHEALTH()
local f = PartyPetFrames[arg1]
if (f) then
XPerl_Party_Pet_UpdateHealth(f)
XPerl_Party_Pet_UpdateLevel(f)
end
end
-- UNIT_AURA
function XPerl_Party_Pet_Events:UNIT_AURA()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_Buff_UpdateAll(f) end
end
-- UNIT_DISPLAYPOWER
function XPerl_Party_Pet_Events:UNIT_DISPLAYPOWER()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateManaType(f) end
end
-- UNIT_MANA
function XPerl_Party_Pet_Events:UNIT_MANA()
local f = PartyPetFrames[arg1]
if (f) then XPerl_Party_Pet_UpdateMana(f) end
end
XPerl_Party_Pet_Events.UNIT_MAXMANA = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_RAGE = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_MAXRAGE = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_FOCUS = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_MAXFOCUS = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_ENERGY = XPerl_Party_Pet_Events.UNIT_MANA
XPerl_Party_Pet_Events.UNIT_MAXENERGY = XPerl_Party_Pet_Events.UNIT_MANA
-- XPerl_Party_Pet_Set_Name
function XPerl_Party_Pet_Set_Name()
for i,frame in pairs(PartyPetFrames) do
local f = getglobal(frame:GetName().."_NameFrame")
if (XPerlConfig.ShowPartyPetName == 1) then
f:Show()
f:SetHeight(24)
else
f:Hide()
f:SetHeight(3)
end
XPerl_Party_Pet_Buff_UpdateAll(frame)
end
end
-- XPerl_ScalePartyPets(num)
function XPerl_ScalePartyPets(num)
XPerl_partypet4:SetScale(num)
XPerl_partypet3:SetScale(num)
XPerl_partypet2:SetScale(num)
XPerl_partypet1:SetScale(num)
end