--------------- -- Variables -- --------------- Perl_Player_Pet_Config = {}; -- Default Saved Variables (also set in Perl_Player_Pet_GetVars) local locked = 0; -- unlocked by default local showxp = 0; -- xp bar is hidden by default local scale = 1; -- default scale local numpetbuffsshown = 16; -- buff row is 16 long local numpetdebuffsshown = 16; -- debuff row is 16 long local transparency = 1; -- transparency for frames local bufflocation = 1; -- default buff location local debufflocation = 2; -- default debuff location local buffsize = 12; -- default buff size is 12 local debuffsize = 12; -- default debuff size is 12 local showportrait = 0; -- portrait is hidden by default local threedportrait = 0; -- 3d portraits are off by default -- Default Local Variables local Initialized = nil; -- waiting to be initialized ---------------------- -- Loading Function -- ---------------------- function Perl_Player_Pet_OnLoad() -- Events this:RegisterEvent("ADDON_LOADED"); this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("PLAYER_PET_CHANGED"); this:RegisterEvent("UNIT_AURA"); this:RegisterEvent("UNIT_DISPLAYPOWER"); this:RegisterEvent("UNIT_FOCUS"); this:RegisterEvent("UNIT_HAPPINESS"); this:RegisterEvent("UNIT_HEALTH"); this:RegisterEvent("UNIT_LEVEL"); this:RegisterEvent("UNIT_MANA"); this:RegisterEvent("UNIT_MAXFOCUS"); this:RegisterEvent("UNIT_MAXHEALTH"); this:RegisterEvent("UNIT_MAXMANA"); this:RegisterEvent("UNIT_MODEL_CHANGED"); this:RegisterEvent("UNIT_NAME_UPDATE"); this:RegisterEvent("UNIT_PET"); this:RegisterEvent("UNIT_PET_EXPERIENCE"); this:RegisterEvent("UNIT_PORTRAIT_UPDATE"); this:RegisterEvent("VARIABLES_LOADED"); -- Button Click Overlays (in order of occurrence in XML) Perl_Player_Pet_NameFrame_CastClickOverlay:SetFrameLevel(Perl_Player_Pet_NameFrame:GetFrameLevel() + 1); Perl_Player_Pet_LevelFrame_CastClickOverlay:SetFrameLevel(Perl_Player_Pet_LevelFrame:GetFrameLevel() + 2); Perl_Player_Pet_StatsFrame_CastClickOverlay:SetFrameLevel(Perl_Player_Pet_StatsFrame:GetFrameLevel() + 2); Perl_Player_Pet_PortraitFrame_CastClickOverlay:SetFrameLevel(Perl_Player_Pet_PortraitFrame:GetFrameLevel() + 2); if (DEFAULT_CHAT_FRAME) then DEFAULT_CHAT_FRAME:AddMessage("|cffffff00Perl Classic: Player_Pet loaded successfully."); end end ------------------- -- Event Handler -- ------------------- function Perl_Player_Pet_OnEvent(event) if (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH") then if (arg1 == "pet") then Perl_Player_Pet_Update_Health(); -- Update health values end return; elseif (event == "UNIT_FOCUS" or event == "UNIT_MANA" or event == "UNIT_MAXFOCUS" or event == "UNIT_MAXMANA") then if (arg1 == "pet") then Perl_Player_Pet_Update_Mana(); -- Update energy/mana/rage values end return; elseif (event == "UNIT_HAPPINESS") then Perl_Player_PetFrame_SetHappiness(); return; elseif (event == "UNIT_NAME_UPDATE") then if (arg1 == "pet") then Perl_Player_Pet_NameBarText:SetText(UnitName("pet")); -- Set name end return; elseif (event == "UNIT_AURA") then if (arg1 == "pet") then Perl_Player_Pet_Buff_UpdateAll(); -- Update the buff/debuff list end return; elseif (event == "UNIT_PET_EXPERIENCE") then if (showxp == 1) then Perl_Player_Pet_Update_Experience(); -- Set the experience bar info end return; elseif (event == "UNIT_LEVEL") then if (arg1 == "pet") then Perl_Player_Pet_LevelBarText:SetText(UnitLevel("pet")); -- Set Level end return; elseif (event == "UNIT_DISPLAYPOWER") then if (arg1 == "pet") then Perl_Player_Pet_Update_Mana_Bar(); -- What type of energy are we using now? Perl_Player_Pet_Update_Mana(); -- Update the energy info immediately end return; elseif (event == "PLAYER_PET_CHANGED") then Perl_Player_Pet_Update_Once(); return; elseif (event == "UNIT_PET") then if (arg1 == "player") then Perl_Player_Pet_Update_Once(); end return; elseif (event == "UNIT_PORTRAIT_UPDATE" or event == "UNIT_MODEL_CHANGED") then if (arg1 == "pet") then Perl_Player_Pet_Update_Portrait(); end return; elseif (event == "VARIABLES_LOADED") or (event == "PLAYER_ENTERING_WORLD") then Perl_Player_Pet_Initialize(); Perl_Player_Pet_Set_Window_Layout(); -- Warlocks don't need the happiness frame Perl_Player_Pet_Update_Once(); return; elseif (event == "ADDON_LOADED") then if (arg1 == "Perl_Player_Pet") then Perl_Player_Pet_myAddOns_Support(); end return; else return; end end ------------------------------- -- Loading Settings Function -- ------------------------------- function Perl_Player_Pet_Initialize() -- Check if we loaded the mod already. if (Initialized) then Perl_Player_Pet_Set_Scale(); return; end -- Check if a previous exists, if not, enable by default. if (type(Perl_Player_Pet_Config[UnitName("player")]) == "table") then Perl_Player_Pet_GetVars(); else Perl_Player_Pet_UpdateVars(); end -- Major config options. Perl_Player_Pet_Initialize_Frame_Color(); Perl_Player_Pet_Reset_Buffs(); -- Set correct buff sizes -- Unregister the Blizzard frames via the 1.8 function PetFrame:UnregisterAllEvents(); Initialized = 1; end function Perl_Player_Pet_Initialize_Frame_Color() Perl_Player_Pet_StatsFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_StatsFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_LevelFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_LevelFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_NameFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_NameFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_BuffFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_BuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_DebuffFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_DebuffFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_PortraitFrame:SetBackdropColor(0, 0, 0, 1); Perl_Player_Pet_PortraitFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1); Perl_Player_Pet_HealthBarText:SetTextColor(1, 1, 1, 1); Perl_Player_Pet_ManaBarText:SetTextColor(1, 1, 1, 1); end ------------------------- -- The Update Function -- ------------------------- function Perl_Player_Pet_Update_Once() if (UnitExists("pet")) then Perl_Player_Pet_NameBarText:SetText(UnitName("pet")); -- Set name Perl_Player_Pet_LevelBarText:SetText(UnitLevel("pet")); -- Set Level Perl_Player_Pet_Update_Portrait(); -- Set the pet's portrait Perl_Player_Pet_Set_Scale(); -- Set the scale Perl_Player_Pet_Set_Transparency(); -- Set transparency Perl_Player_Pet_Update_Health(); -- Set health Perl_Player_Pet_Update_Mana(); -- Set mana values Perl_Player_Pet_Update_Mana_Bar(); -- Set the type of mana Perl_Player_PetFrame_SetHappiness(); -- Set Happiness Perl_Player_Pet_Buff_UpdateAll(); -- Set buff frame Perl_Player_Pet_Frame:Show(); -- Display the pet frame Perl_Player_Pet_ShowXP(); -- Are we showing the xp bar? else Perl_Player_Pet_Frame:Hide(); end end function Perl_Player_Pet_Update_Health() local pethealth = UnitHealth("pet"); local pethealthmax = UnitHealthMax("pet"); if (UnitIsDead("pet") or UnitIsGhost("pet")) then -- This prevents negative health pethealth = 0; end Perl_Player_Pet_HealthBar:SetMinMaxValues(0, pethealthmax); Perl_Player_Pet_HealthBar:SetValue(pethealth); if (PCUF_COLORHEALTH == 1) then local playerpethealthpercent = floor(pethealth/pethealthmax*100+0.5); if ((playerpethealthpercent <= 100) and (playerpethealthpercent > 75)) then Perl_Player_Pet_HealthBar:SetStatusBarColor(0, 0.8, 0); Perl_Player_Pet_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25); elseif ((playerpethealthpercent <= 75) and (playerpethealthpercent > 50)) then Perl_Player_Pet_HealthBar:SetStatusBarColor(1, 1, 0); Perl_Player_Pet_HealthBarBG:SetStatusBarColor(1, 1, 0, 0.25); elseif ((playerpethealthpercent <= 50) and (playerpethealthpercent > 25)) then Perl_Player_Pet_HealthBar:SetStatusBarColor(1, 0.5, 0); Perl_Player_Pet_HealthBarBG:SetStatusBarColor(1, 0.5, 0, 0.25); else Perl_Player_Pet_HealthBar:SetStatusBarColor(1, 0, 0); Perl_Player_Pet_HealthBarBG:SetStatusBarColor(1, 0, 0, 0.25); end else Perl_Player_Pet_HealthBar:SetStatusBarColor(0, 0.8, 0); Perl_Player_Pet_HealthBarBG:SetStatusBarColor(0, 0.8, 0, 0.25); end if (pethealthmax == 100) then Perl_Player_Pet_HealthBarText:SetText(pethealth.."%"); else Perl_Player_Pet_HealthBarText:SetText(pethealth.."/"..pethealthmax); end end function Perl_Player_Pet_Update_Mana() local petmana = UnitMana("pet"); local petmanamax = UnitManaMax("pet"); if (UnitIsDead("pet") or UnitIsGhost("pet")) then -- This prevents negative mana petmana = 0; end Perl_Player_Pet_ManaBar:SetMinMaxValues(0, petmanamax); Perl_Player_Pet_ManaBar:SetValue(petmana); if (UnitClass("player") == PERL_LOCALIZED_WARLOCK) then Perl_Player_Pet_ManaBarText:SetText(petmana.."/"..petmanamax); else Perl_Player_Pet_ManaBarText:SetText(petmana); end end function Perl_Player_Pet_Update_Mana_Bar() local petpower = UnitPowerType("pet"); -- Set mana bar color if (petpower == 0) then Perl_Player_Pet_ManaBar:SetStatusBarColor(0, 0, 1, 1); Perl_Player_Pet_ManaBarBG:SetStatusBarColor(0, 0, 1, 0.25); elseif (petpower == 2) then Perl_Player_Pet_ManaBar:SetStatusBarColor(1, 0.5, 0, 1); Perl_Player_Pet_ManaBarBG:SetStatusBarColor(1, 0.5, 0, 0.25); end end function Perl_Player_PetFrame_SetHappiness() local happiness, damagePercentage, loyaltyRate = GetPetHappiness(); if (happiness == 1) then Perl_Player_PetHappinessTexture:SetTexCoord(0.375, 0.5625, 0, 0.359375); elseif (happiness == 2) then Perl_Player_PetHappinessTexture:SetTexCoord(0.1875, 0.375, 0, 0.359375); elseif (happiness == 3) then Perl_Player_PetHappinessTexture:SetTexCoord(0, 0.1875, 0, 0.359375); end if (happiness ~= nil) then Perl_Player_PetHappiness.tooltip = getglobal("PET_HAPPINESS"..happiness); Perl_Player_PetHappiness.tooltipDamage = format(PET_DAMAGE_PERCENTAGE, damagePercentage); if (loyaltyRate < 0) then Perl_Player_PetHappiness.tooltipLoyalty = getglobal("LOSING_LOYALTY"); elseif (loyaltyRate > 0) then Perl_Player_PetHappiness.tooltipLoyalty = getglobal("GAINING_LOYALTY"); else Perl_Player_PetHappiness.tooltipLoyalty = nil; end end end function Perl_Player_Pet_ShowXP() if (showxp == 0) then Perl_Player_Pet_XPBar:Hide(); Perl_Player_Pet_XPBarBG:Hide(); Perl_Player_Pet_XPBarText:SetText(); Perl_Player_Pet_StatsFrame:SetHeight(34); Perl_Player_Pet_StatsFrame_CastClickOverlay:SetHeight(34); else Perl_Player_Pet_XPBar:Show(); Perl_Player_Pet_XPBarBG:Show(); Perl_Player_Pet_StatsFrame:SetHeight(47); Perl_Player_Pet_StatsFrame_CastClickOverlay:SetHeight(47); if (UnitLevel("pet") == UnitLevel("player")) then Perl_Player_Pet_XPBar:Hide(); Perl_Player_Pet_XPBarBG:Hide(); Perl_Player_Pet_XPBarText:SetText(); Perl_Player_Pet_StatsFrame:SetHeight(34); Perl_Player_Pet_StatsFrame_CastClickOverlay:SetHeight(34); else Perl_Player_Pet_Update_Experience(); end end end function Perl_Player_Pet_Update_Experience() -- XP Bar stuff local playerpetxp, playerpetxpmax; playerpetxp, playerpetxpmax = GetPetExperience(); Perl_Player_Pet_XPBar:SetMinMaxValues(0, playerpetxpmax); Perl_Player_Pet_XPBar:SetValue(playerpetxp); -- Set xp text local xptext = playerpetxp.."/"..playerpetxpmax; Perl_Player_Pet_XPBar:SetStatusBarColor(0, 0.6, 0.6, 1); Perl_Player_Pet_XPBarBG:SetStatusBarColor(0, 0.6, 0.6, 0.25); Perl_Player_Pet_XPBarText:SetText(xptext); end function Perl_Player_Pet_Update_Portrait() if (showportrait == 1) then local level = Perl_Player_Pet_PortraitFrame:GetFrameLevel(); -- Get the frame level of the main portrait frame Perl_Player_Pet_PortraitFrame:Show(); -- Show the main portrait frame if (threedportrait == 0) then SetPortraitTexture(Perl_Player_Pet_Portrait, "pet"); -- Load the correct 2d graphic Perl_Player_Pet_PortraitFrame_PetModel:Hide(); -- Hide the 3d graphic Perl_Player_Pet_Portrait:Show(); -- Show the 2d graphic else if UnitIsVisible("pet") then Perl_Player_Pet_PortraitFrame_PetModel:SetUnit("pet"); -- Load the correct 3d graphic Perl_Player_Pet_Portrait:Hide(); -- Hide the 2d graphic Perl_Player_Pet_PortraitFrame_PetModel:Show(); -- Show the 3d graphic Perl_Player_Pet_PortraitFrame_PetModel:SetCamera(0); else SetPortraitTexture(Perl_Player_Pet_Portrait, "pet"); -- Load the correct 2d graphic Perl_Player_Pet_PortraitFrame_PetModel:Hide(); -- Hide the 3d graphic Perl_Player_Pet_Portrait:Show(); -- Show the 2d graphic end end else Perl_Player_Pet_PortraitFrame:Hide(); -- Hide the frame and 2d/3d portion end end function Perl_Player_Pet_Set_Window_Layout() if (UnitClass("player") == PERL_LOCALIZED_WARLOCK) then Perl_Player_Pet_LevelFrame:Hide(); Perl_Player_Pet_StatsFrame:SetPoint("TOPLEFT", "Perl_Player_Pet_NameFrame", "BOTTOMLEFT", 0, 5); Perl_Player_Pet_StatsFrame:SetWidth(165); Perl_Player_Pet_HealthBar:SetWidth(153); Perl_Player_Pet_HealthBarBG:SetWidth(153); Perl_Player_Pet_ManaBar:SetWidth(153); Perl_Player_Pet_ManaBarBG:SetWidth(153); Perl_Player_Pet_XPBar:SetWidth(153); Perl_Player_Pet_XPBarBG:SetWidth(153); else Perl_Player_Pet_LevelFrame:Show(); Perl_Player_Pet_StatsFrame:SetPoint("TOPLEFT", "Perl_Player_Pet_NameFrame", "BOTTOMLEFT", 25, 5); Perl_Player_Pet_StatsFrame:SetWidth(140); Perl_Player_Pet_HealthBar:SetWidth(128); Perl_Player_Pet_HealthBarBG:SetWidth(128); Perl_Player_Pet_ManaBar:SetWidth(128); Perl_Player_Pet_ManaBarBG:SetWidth(128); Perl_Player_Pet_XPBar:SetWidth(128); Perl_Player_Pet_XPBarBG:SetWidth(128); end end -------------------------- -- GUI Config Functions -- -------------------------- function Perl_Player_Pet_Set_Buffs(newbuffnumber) if (newbuffnumber == nil) then newbuffnumber = 16; end numpetbuffsshown = newbuffnumber; Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_Debuffs(newdebuffnumber) if (newdebuffnumber == nil) then newdebuffnumber = 16; end numpetdebuffsshown = newdebuffnumber; Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_Buff_Location(newvalue) if (newvalue ~= nil) then bufflocation = newvalue; end Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_Debuff_Location(newvalue) if (newvalue ~= nil) then debufflocation = newvalue; end Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_Buff_Size(newvalue) if (newvalue ~= nil) then buffsize = newvalue; end Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_Debuff_Size(newvalue) if (newvalue ~= nil) then debuffsize = newvalue; end Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons and set the size Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons end function Perl_Player_Pet_Set_ShowXP(newvalue) showxp = newvalue; Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_ShowXP(); end function Perl_Player_Pet_Set_Lock(newvalue) locked = newvalue; Perl_Player_Pet_UpdateVars(); end function Perl_Player_Pet_Set_Portrait(newvalue) showportrait = newvalue; Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Update_Portrait(); end function Perl_Player_Pet_Set_3D_Portrait(newvalue) threedportrait = newvalue; Perl_Player_Pet_UpdateVars(); Perl_Player_Pet_Update_Portrait(); end function Perl_Player_Pet_Set_Scale(number) local unsavedscale; if (number ~= nil) then scale = (number / 100); -- convert the user input to a wow acceptable value end unsavedscale = 1 - UIParent:GetEffectiveScale() + scale; -- run it through the scaling formula introduced in 1.9 Perl_Player_Pet_Frame:SetScale(unsavedscale); Perl_Player_Pet_UpdateVars(); end function Perl_Player_Pet_Set_Transparency(number) if (number ~= nil) then transparency = (number / 100); -- convert the user input to a wow acceptable value end Perl_Player_Pet_Frame:SetAlpha(transparency); Perl_Player_Pet_UpdateVars(); end ------------------------------ -- Saved Variable Functions -- ------------------------------ function Perl_Player_Pet_GetVars() locked = Perl_Player_Pet_Config[UnitName("player")]["Locked"]; showxp = Perl_Player_Pet_Config[UnitName("player")]["ShowXP"]; scale = Perl_Player_Pet_Config[UnitName("player")]["Scale"]; numpetbuffsshown = Perl_Player_Pet_Config[UnitName("player")]["Buffs"]; numpetdebuffsshown = Perl_Player_Pet_Config[UnitName("player")]["Debuffs"]; transparency = Perl_Player_Pet_Config[UnitName("player")]["Transparency"]; bufflocation = Perl_Player_Pet_Config[UnitName("player")]["BuffLocation"]; debufflocation = Perl_Player_Pet_Config[UnitName("player")]["DebuffLocation"]; buffsize = Perl_Player_Pet_Config[UnitName("player")]["BuffSize"]; debuffsize = Perl_Player_Pet_Config[UnitName("player")]["DebuffSize"]; showportrait = Perl_Player_Pet_Config[UnitName("player")]["ShowPortrait"]; threedportrait = Perl_Player_Pet_Config[UnitName("player")]["ThreeDPortrait"]; if (locked == nil) then locked = 0; end if (showxp == nil) then showxp = 0; end if (scale == nil) then scale = 1; end if (numpetbuffsshown == nil) then numpetbuffsshown = 16; end if (numpetdebuffsshown == nil) then numpetdebuffsshown = 16; end if (transparency == nil) then transparency = 1; end if (bufflocation == nil) then bufflocation = 1; end if (debufflocation == nil) then debufflocation = 2; end if (buffsize == nil) then buffsize = 12; end if (debuffsize == nil) then debuffsize = 12; end if (showportrait == nil) then showportrait = 0; end if (threedportrait == nil) then threedportrait = 0; end local vars = { ["locked"] = locked, ["showxp"] = showxp, ["scale"] = scale, ["numpetbuffsshown"] = numpetbuffsshown, ["numpetdebuffsshown"] = numpetdebuffsshown, ["transparency"] = transparency, ["bufflocation"] = bufflocation, ["debufflocation"] = debufflocation, ["buffsize"] = buffsize, ["debuffsize"] = debuffsize, ["showportrait"] = showportrait, ["threedportrait"] = threedportrait, } return vars; end function Perl_Player_Pet_UpdateVars(vartable) if (vartable ~= nil) then -- Sanity checks in case you use a load from an old version if (vartable["Global Settings"] ~= nil) then if (vartable["Global Settings"]["Locked"] ~= nil) then locked = vartable["Global Settings"]["Locked"]; else locked = nil; end if (vartable["Global Settings"]["ShowXP"] ~= nil) then showxp = vartable["Global Settings"]["ShowXP"]; else showxp = nil; end if (vartable["Global Settings"]["Scale"] ~= nil) then scale = vartable["Global Settings"]["Scale"]; else scale = nil; end if (vartable["Global Settings"]["Buffs"] ~= nil) then numpetbuffsshown = vartable["Global Settings"]["Buffs"]; else numpetbuffsshown = nil; end if (vartable["Global Settings"]["Debuffs"] ~= nil) then numpetdebuffsshown = vartable["Global Settings"]["Debuffs"]; else numpetdebuffsshown = nil; end if (vartable["Global Settings"]["Transparency"] ~= nil) then transparency = vartable["Global Settings"]["Transparency"]; else transparency = nil; end if (vartable["Global Settings"]["BuffLocation"] ~= nil) then bufflocation = vartable["Global Settings"]["BuffLocation"]; else bufflocation = nil; end if (vartable["Global Settings"]["DebuffLocation"] ~= nil) then debufflocation = vartable["Global Settings"]["DebuffLocation"]; else debufflocation = nil; end if (vartable["Global Settings"]["BuffSize"] ~= nil) then buffsize = vartable["Global Settings"]["BuffSize"]; else buffsize = nil; end if (vartable["Global Settings"]["DebuffSize"] ~= nil) then debuffsize = vartable["Global Settings"]["DebuffSize"]; else debuffsize = nil; end if (vartable["Global Settings"]["ShowPortrait"] ~= nil) then showportrait = vartable["Global Settings"]["ShowPortrait"]; else showportrait = nil; end if (vartable["Global Settings"]["ThreeDPortrait"] ~= nil) then threedportrait = vartable["Global Settings"]["ThreeDPortrait"]; else threedportrait = nil; end end -- Set the new values if any new values were found, same defaults as above if (locked == nil) then locked = 0; end if (showxp == nil) then showxp = 0; end if (scale == nil) then scale = 1; end if (numpetbuffsshown == nil) then numpetbuffsshown = 16; end if (numpetdebuffsshown == nil) then numpetdebuffsshown = 16; end if (transparency == nil) then transparency = 1; end if (bufflocation == nil) then bufflocation = 1; end if (debufflocation == nil) then debufflocation = 2; end if (buffsize == nil) then buffsize = 12; end if (debuffsize == nil) then debuffsize = 12; end if (showportrait == nil) then showportrait = 0; end if (threedportrait == nil) then threedportrait = 0; end -- Call any code we need to activate them Perl_Player_Pet_Reset_Buffs(); -- Reset the buff icons Perl_Player_Pet_Buff_UpdateAll(); -- Repopulate the buff icons Perl_Player_Pet_Update_Health(); -- Update the health in case progrssive health color was set Perl_Player_Pet_Update_Portrait(); Perl_Player_Pet_Set_Scale(); -- Set the scale Perl_Player_Pet_Set_Transparency(); -- Set the transparency end Perl_Player_Pet_Config[UnitName("player")] = { ["Locked"] = locked, ["ShowXP"] = showxp, ["Scale"] = scale, ["Buffs"] = numpetbuffsshown, ["Debuffs"] = numpetdebuffsshown, ["Transparency"] = transparency, ["BuffLocation"] = bufflocation, ["DebuffLocation"] = debufflocation, ["BuffSize"] = buffsize, ["DebuffSize"] = debuffsize, ["ShowPortrait"] = showportrait, ["ThreeDPortrait"] = threedportrait, }; end -------------------- -- Buff Functions -- -------------------- function Perl_Player_Pet_Buff_UpdateAll() if (UnitName("pet")) then local buffmax = 0; for buffnum=1,numpetbuffsshown do local button = getglobal("Perl_Player_Pet_Buff"..buffnum); local icon = getglobal(button:GetName().."Icon"); local debuff = getglobal(button:GetName().."DebuffBorder"); if (UnitBuff("pet", buffnum)) then icon:SetTexture(UnitBuff("pet", buffnum)); button.isdebuff = 0; debuff:Hide(); button:Show(); buffmax = buffnum; else button:Hide(); end end local debuffmax = 0; local debuffCount, debuffTexture, debuffApplications; for debuffnum=1,numpetdebuffsshown do debuffTexture, debuffApplications = UnitDebuff("pet", debuffnum); local button = getglobal("Perl_Player_Pet_Debuff"..debuffnum); local icon = getglobal(button:GetName().."Icon"); local debuff = getglobal(button:GetName().."DebuffBorder"); if (UnitDebuff("pet", debuffnum)) then icon:SetTexture(UnitDebuff("pet", debuffnum)); button.isdebuff = 1; debuff:Show(); button:Show(); debuffCount = getglobal("Perl_Player_Pet_Debuff"..debuffnum.."Count"); if (debuffApplications > 1) then debuffCount:SetText(debuffApplications); debuffCount:Show(); else debuffCount:Hide(); end debuffmax = debuffnum; else button:Hide(); end end if (buffmax == 0) then Perl_Player_Pet_BuffFrame:Hide(); else Perl_Player_Pet_BuffFrame:Show(); Perl_Player_Pet_BuffFrame:SetWidth(5 + buffmax * 17); end if (debuffmax == 0) then Perl_Player_Pet_DebuffFrame:Hide(); else Perl_Player_Pet_DebuffFrame:Show(); Perl_Player_Pet_DebuffFrame:SetWidth(5 + debuffmax * 17); end if (bufflocation == 1) then Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "TOPRIGHT", 0, -5); elseif (bufflocation == 2) then Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "TOPRIGHT", 0, -20); elseif (bufflocation == 3) then if (UnitClass("player") == PERL_LOCALIZED_HUNTER) then Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "BOTTOMLEFT", -20, 0); else Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_LevelFrame", "BOTTOMLEFT", 5, 0); end else if (UnitClass("player") == PERL_LOCALIZED_HUNTER) then Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "BOTTOMLEFT", -20, -15); else Perl_Player_Pet_Buff1:SetPoint("TOPLEFT", "Perl_Player_Pet_LevelFrame", "BOTTOMLEFT", 5, -15); end end if (debufflocation == 1) then Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "TOPRIGHT", 0, -5); elseif (debufflocation == 2) then Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "TOPRIGHT", 0, -20); elseif (debufflocation == 3) then if (UnitClass("player") == PERL_LOCALIZED_HUNTER) then Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "BOTTOMLEFT", -20, 0); else Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_LevelFrame", "BOTTOMLEFT", 5, 0); end else if (UnitClass("player") == PERL_LOCALIZED_HUNTER) then Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_StatsFrame", "BOTTOMLEFT", -20, 15); else Perl_Player_Pet_Debuff1:SetPoint("TOPLEFT", "Perl_Player_Pet_LevelFrame", "BOTTOMLEFT", 5, -15); end end end end function Perl_Player_Pet_Reset_Buffs() local button, debuff, icon; for buffnum=1,16 do button = getglobal("Perl_Player_Pet_Buff"..buffnum); icon = getglobal(button:GetName().."Icon"); debuff = getglobal(button:GetName().."DebuffBorder"); button:SetHeight(buffsize); button:SetWidth(buffsize); icon:SetHeight(buffsize); icon:SetWidth(buffsize); debuff:SetHeight(buffsize); debuff:SetWidth(buffsize); button:Hide(); button = getglobal("Perl_Player_Pet_Debuff"..buffnum); icon = getglobal(button:GetName().."Icon"); debuff = getglobal(button:GetName().."DebuffBorder"); button:SetHeight(debuffsize); button:SetWidth(debuffsize); icon:SetHeight(debuffsize); icon:SetWidth(debuffsize); debuff:SetHeight(debuffsize); debuff:SetWidth(debuffsize); button:Hide(); end end function Perl_Player_Pet_SetBuffTooltip() local buffmapping = 0; GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT"); if (this.isdebuff == 1) then GameTooltip:SetUnitDebuff("pet", this:GetID()-buffmapping); else GameTooltip:SetUnitBuff("pet", this:GetID()); end end -------------------- -- Click Handlers -- -------------------- function Perl_Player_Pet_DropDown_OnLoad() UIDropDownMenu_Initialize(this, Perl_Player_Pet_DropDown_Initialize, "MENU"); end function Perl_Player_Pet_DropDown_Initialize() UnitPopup_ShowMenu(Perl_Player_Pet_DropDown, "PET", "pet"); end function Perl_Player_Pet_MouseClick(button) if (CastPartyConfig and PCUF_CASTPARTYSUPPORT == 1) then if (not string.find(GetMouseFocus():GetName(), "Name")) then CastParty_OnClickByUnit(button, "pet"); end elseif (Genesis_data and PCUF_CASTPARTYSUPPORT == 1) then if (not string.find(GetMouseFocus():GetName(), "Name")) then Genesis_MouseHeal("pet", button); end else if (SpellIsTargeting() and button == "RightButton") then SpellStopTargeting(); return; end if (button == "LeftButton") then if (SpellIsTargeting()) then SpellTargetUnit("pet"); elseif (CursorHasItem()) then DropItemOnUnit("pet"); else TargetUnit("pet"); end end end end function Perl_Player_Pet_MouseDown(button) if (button == "LeftButton" and locked == 0) then Perl_Player_Pet_Frame:StartMoving(); end end function Perl_Player_Pet_MouseUp(button) if (button == "RightButton") then if ((CastPartyConfig or Genesis_data) and PCUF_CASTPARTYSUPPORT == 1) then if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown()) and string.find(GetMouseFocus():GetName(), "Name")) then -- if alt, ctrl, or shift ARE NOT held AND we are clicking the name frame, show the menu ToggleDropDownMenu(1, nil, Perl_Player_Pet_DropDown, "Perl_Player_Pet_NameFrame", 40, 0); end else if (not (IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown())) then -- if alt, ctrl, or shift ARE NOT held, show the menu ToggleDropDownMenu(1, nil, Perl_Player_Pet_DropDown, "Perl_Player_Pet_NameFrame", 40, 0); end end end Perl_Player_Pet_Frame:StopMovingOrSizing(); end ---------------------- -- myAddOns Support -- ---------------------- function Perl_Player_Pet_myAddOns_Support() -- Register the addon in myAddOns if(myAddOnsFrame_Register) then local Perl_Player_Pet_myAddOns_Details = { name = "Perl_Player_Pet", version = "Version 0.58", releaseDate = "April 15, 2006", author = "Perl; Maintained by Global", email = "global@g-ball.com", website = "http://www.curse-gaming.com/mod.php?addid=2257", category = MYADDONS_CATEGORY_OTHERS }; Perl_Player_Pet_myAddOns_Help = {}; Perl_Player_Pet_myAddOns_Help[1] = "/perl"; myAddOnsFrame_Register(Perl_Player_Pet_myAddOns_Details, Perl_Player_Pet_myAddOns_Help); end end