vanilla-wow-addons – Rev 1
?pathlinks?
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