PetFeederPlayerButtonBar_Vars = { FoodLink = nil, FoodText = "", LoyaltyLevel = 0, LoyaltyText = "", XPCurrent = 0, XPNextLevel = 0 } PetFeederPlayerButtonBar_Config = {Show = 1, Scale = 1} Orig_PetFeeder_UpdateQuantities = nil; Orig_PetFeeder_PopulateFoods = nil PetFeederButtonBar_PetName = nil; local MAX_LEVEL = 60 function PetFeederButtonBar_OnLoad() if ( UnitClass("player") ~= PETFEEDER_HUNTER ) then return; end PetFeederButtonBar:RegisterEvent("UNIT_HAPPINESS"); PetFeederButtonBar:RegisterEvent("PLAYER_ENTERING_WORLD"); PetFeederButtonBar:RegisterEvent("BAG_UPDATE"); PetFeederButtonBar:RegisterEvent("VARIABLES_LOADED"); PetFeederButtonBar:RegisterEvent("PLAYER_PET_CHANGED"); PetFeederButtonBar:RegisterEvent("PET_BAR_UPDATE"); PetFeederButtonBar:RegisterEvent("LOCALPLAYER_PET_RENAMED"); PetFeederButtonBar:RegisterEvent("UNIT_PET"); PetFeederButtonBar:RegisterEvent("UNIT_NAME_UPDATE"); PetFeederButtonBar:RegisterEvent("UNIT_PET_EXPERIENCE"); if ( PeetFeederPlayer_Config.BarEnabled ) then this:Show(); end Orig_PetFeeder_UpdateQuantities = PetFeeder_UpdateQuantities; PetFeeder_UpdateQuantities = PetFeederButtonBar_UpdateQuan; Orig_PetFeeder_PopulateFoods = PetFeeder_PopulateFoods; PetFeeder_PopulateFoods = PetFeederButtonBar_PopulateFoods; end function PetFeederButtonBar_OnEvent() if (event == "PLAYER_ENTERING_WORLD" or event == "VARIABLES_LOADED" ) then local _ , playerClass = UnitClass("player"); if ( playerClass ~= "HUNTER" ) then PetFeederButtonBar:Hide(); else if ( PeetFeederPlayer_Config.BarEnabled and PeetFeederPlayer_Config.Enabled ) then PetFeederButtonBar:Show(); end end elseif ( event == "BAG_UPDATE" ) then PetFeederButtonBar_GetNextFood(); elseif ( event == "UNIT_HAPPINESS" ) then PetFeederButtonBar_SetHappiness(); elseif ( event == "PET_BAR_UPDATE" or event == "PLAYER_PET_CHANGED" or event == "UNIT_PET" ) then if ( not UnitExists("pet") ) then PetFeederButtonBar:Hide(); else PetFeederButtonBar_ShowActions() end elseif ( event == "LOCALPLAYER_PET_RENAMED" or "UNIT_NAME_UPDATE" ) then if ( not PetFeeder_HasPet() ) then return; end if ( PetFeederButtonBar_PetName ~= UnitName("pet") ) then PetFeederButtonBar_PetName = UnitName("pet"); else return; end PetFeederButtonBar_ShowActions() elseif ( event == "UNIT_PET_EXPERIENCE" ) then PetFeederButtonBar_SetXPBar(); end end function PetFeederButtonBar_ShowActions() if ( PeetFeederPlayer_Config.BarEnabled ) then PetFeederButtonBar:Show(); PetFeederButtonBar_SetHappiness(); PetFeederButtonBar_GetNextFood(); else PetFeederButtonBar:Hide(); PetFeederButton_Food:Hide(); PetFeederButton_Icon:Hide(); PetFeederButton_Happiness:Hide(); PetFeederButton_XPBar:Hide(); PetFeederButton_LoyaltyBar:Hide(); end end function PetFeederButtonBar_OnClick() if (arg1 == "LeftButton") then if ( IsShiftKeyDown() ) then PetFeeder_Feed(); end else if (not IsControlKeyDown()) then togglePetFeeder(nil); end end end function PetFeederButtonBar_UpdateQuan() Orig_PetFeeder_UpdateQuantities(); PetFeederButtonBar_GetNextFood(); end function PetFeederButtonBar_PopulateFoods() Orig_PetFeeder_PopulateFoods(); PetFeederButtonBar_GetNextFood(); end function PetFeederButtonBar_GetNextFood() if ( not PetFeeder_HasPet() or not PeetFeederPlayer_Config.BarEnabled ) then PetFeederButton_Food:Hide(); return; end if ( not PetFeederPlayer_Foods[PetFeeder_PetName] ) then return; end PetFeederButtonBar:Show(); PetFeederButton_Food:Show(); local count = 0; local found = false; for index, value in PetFeederPlayer_Foods[PetFeeder_PetName] do if ( value.quantity and value.quantity > 0 ) then if ( PeetFeederPlayer_Config.RequireApproval == 1 and value.foodlikedstate == PETFEEDER_FL_UNKNOWN ) or ( (PeetFeederPlayer_Config.FeedOnlyApproved == 1 and value.foodlikedstate == PETFEEDER_FL_APPROVED) or ( PeetFeederPlayer_Config.FeedOnlyApproved == 0 and value.foodlikedstate > 0 ) )then if ( not found ) then local tex = getglobal("PetFeederButton_Food_NormalTexture"); tex:SetTexture(value.texture); found = true; PetFeederPlayerButtonBar_Vars.FoodText = value.text; PetFeederPlayerButtonBar_Vars.FoodLink = value.id; end count = count + value.quantity; end end end if ( count == 0 ) then PetFeederButton_Food_NormalTexture:SetTexture(""); PetFeederPlayerButtonBar_Vars.FoodText = ""; PetFeederPlayerButtonBar_Vars.FoodLink = nil; PetFeederButton_FoodText:SetText(""); else PetFeederButton_FoodText:SetText(count); end end function PetFeederButtonBar_SetHappiness() local happiness, damagePercentage, loyaltyRate = GetPetHappiness(); -- DEFAULT_CHAT_FRAME:AddMessage("PetFeederButtonBar_SetHappiness"); local hasPetUI, isHunterPet = HasPetUI(); if ( not happiness or not isHunterPet or not PeetFeederPlayer_Config.BarEnabled ) then PetFeederButton_Happiness:Hide(); PetFeederButton_XPBar:Hide(); PetFeederButton_LoyaltyBar:Hide(); return; end -- DEFAULT_CHAT_FRAME:AddMessage("PetFeederButtonBar_SetHappiness Show"); PetFeederButton_Happiness:Show(); PetFeederButton_LoyaltyBar:Show(); if ( happiness == 1 ) then PetFeederButton_Happiness_NormalTexture:SetTexCoord(0.375, 0.5625, 0, 0.359375); elseif ( happiness == 2 ) then PetFeederButton_Happiness_NormalTexture:SetTexCoord(0.1875, 0.375, 0, 0.359375); elseif ( happiness == 3 ) then PetFeederButton_Happiness_NormalTexture:SetTexCoord(0, 0.1875, 0, 0.359375); end PetFeederButton_Happiness.tooltip = getglobal("PET_HAPPINESS"..happiness); PetFeederButton_Happiness.tooltipDamage = format(PET_DAMAGE_PERCENTAGE, damagePercentage); if ( loyaltyRate < 0 ) then PetFeederButton_Happiness.tooltipLoyalty = getglobal("LOSING_LOYALTY"); elseif ( loyaltyRate > 0 ) then PetFeederButton_Happiness.tooltipLoyalty = getglobal("GAINING_LOYALTY"); else PetFeederButton_Happiness.tooltipLoyalty = nil; UIErrorsFrame:AddMessage(PETFEEDER_PETHUNGERY, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME); end PetFeederButton_Icon_NormalTexture:SetTexture(GetPetIcon()); PetFeederButton_IconText:SetText(PetFeederButtonBar_GetLevel()); PetFeederButton_Icon:Show(); PetFeederButtonBar_SetXPBar(); PetFeederButtonBar_SetLoyaltyBar(); end function PetFeederButtonBar_GetLevel() local lvl = UnitLevel("pet"); return ( lvl == MAX_LEVEL ) and "" or lvl; end function PetFeederButtonBar_SetXPBar() if ( UnitLevel("pet") < MAX_LEVEL and PetFeederButton_Happiness:IsVisible() ) then local currXP, nextXP = GetPetExperience(); PetFeederButton_XPBar:SetMinMaxValues(min(0, currXP),nextXP); PetFeederButton_XPBar:SetValue(currXP); PetFeederButton_XPBar:Show(); else PetFeederButton_XPBar:Hide(); end end function PetFeederButtonBar_SetLoyaltyBar() local loyalty = GetPetLoyalty(); if ( loyalty ) then PetFeederPlayerButtonBar_Vars.LoyaltyText = loyalty; local _,_,llvl = string.find(loyalty, "(%d)"); if ( tonumber(llvl) < 6 ) then local currXP, nextXP = GetPetExperience(); PetFeederButton_LoyaltyBar:SetMinMaxValues(0,6); PetFeederButton_LoyaltyBar:SetValue(tonumber(llvl)); PetFeederButton_LoyaltyBar:Show(); else PetFeederButton_LoyaltyBar:Hide(); end else PetFeederPlayerButtonBar_Vars.LoyaltyText = nil; end end function PetFeederButtonBar_FoodToolTip() if ( PetFeederPlayerButtonBar_Vars.FoodLink ) then GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetHyperlink("item:"..PetFeederPlayerButtonBar_Vars.FoodLink); GameTooltip:AddLine(" "); GameTooltip:AddLine("("..PETFEEDER_CLICKFEEDPET..")",0,1,0); GameTooltip:Show(); end end function PetFeederButtonBar_HappinessToolTip() if ( this.tooltip ) then GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetText(this.tooltip); if ( this.tooltipDamage ) then GameTooltip:AddLine(this.tooltipDamage, "", 1, 1, 1); end if ( this.tooltipLoyalty ) then GameTooltip:AddLine(this.tooltipLoyalty, "", 1, 1, 1); end GameTooltip:AddLine(PetFeederPlayerButtonBar_Vars.LoyaltyText,0,1,1) GameTooltip:AddLine(" "); GameTooltip:AddLine("("..PETFEEDER_CLICKOPENOPTIONS..")",0,1,0); GameTooltip:Show(); end end function PetFeederButtonBar_IconToolTip() GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetUnit("pet"); if ( UnitLevel("pet") < MAX_LEVEL ) then local currXP, nextXP = GetPetExperience(); GameTooltip:AddDoubleLine("Current XP:",currXP,0,1,1,1,1,1) GameTooltip:AddDoubleLine("Next Level XP:",nextXP,0,1,1,1,1,1) end GameTooltip:AddLine(" "); GameTooltip:AddLine("("..PETFEEDER_CLICKMOVEBAR..")",0,1,0); GameTooltip:Show(); end function PetFeeder_PFB_Enabled_CheckBt_Update(whatValue) PeetFeederPlayer_Config.BarEnabled = whatValue; PetFeederButtonBar_ShowActions(); end