View Single Post
09-04-14, 12:44 PM   #8
kez717
A Murloc Raider
Join Date: Oct 2008
Posts: 5
Not getting errors anymore, but also not getting the animation either.

Here's the code for this piece of my addon, there is another file with a lookup table for pet spell names, texture, spell IDs, and such that I can post if really needed. Like I said, it's really long and messy though.

Code:
---------------------
-- START OF CONFIG --
---------------------
--toggles for turning on and off autocast
local MACRO_NAME_BASIC_TOGGLE = ""
local MACRO_NAME_GROWL_TOGGLE = ""
local MACRO_NAME_COWER_TOGGLE = ""
local MACRO_NAME_SPECIAL_TOGGLE = ""
local MACRO_NAME_EXOTIC_TOGGLE = ""
local MACRO_NAME_BONUS_TOGGLE = ""
local MACRO_NAME_SPEC1_TOGGLE = ""
local MACRO_NAME_SPEC2_TOGGLE = ""
local MACRO_NAME_SPEC3_TOGGLE = ""

local _, class = UnitClass("player")
if class ~= "HUNTER" then return end
---------------------
--  END OF CONFIG  --
--------------------- 

---------------------
--  start variables  --
---------------------

	--general
local pet_name
local pet_family
local pet_spec

local level
local petBuff
local macrotext = ""

---bar settings
local BarsHoriz = true
local BarsLocked = false

local ControlBar_Enabled = true
local ControlBar_PosX = 0
local ControlBar_PosY = 40
local ControlBar_Horiz = true
local ControlBar_ButtonX = 3
local ControlBar_ButtonY = 0
local ControlBar_ButtonPrevious = "LEFT"
local ControlBar_ButtonSide = "RIGHT"

--control settings
local pet_basic_attack
local pet_basic_name = nil
local pet_basic_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_basic_cooldown
local pet_basic_autoAllowed = nil
local pet_basic_autoEnabled = nil
local pet_basic_spellbookID = nil
local pet_basic_spellID

local pet_growl_attack
local pet_growl_name = nil
local pet_growl_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_growl_cooldown
local pet_growl_autoAllowed = nil
local pet_growl_autoEnabled = nil
local pet_growl_spellbookID = nil
local pet_growl_spellID

local pet_cower_attack
local pet_cower_name = nil
local pet_cower_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_cower_cooldown
local pet_cower_autoAllowed = nil
local pet_cower_autoEnabled = nil
local pet_cower_spellbookID = nil
local pet_cower_spellID

local pet_special_attack
local pet_special_name = nil
local pet_special_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_special_cooldown
local pet_special_autoAllowed = nil
local pet_special_autoEnabled = nil
local pet_special_spellbookID = nil
local pet_special_spellID

local pet_exotic_attack
local pet_exotic_name = nil
local pet_exotic_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_exotic_cooldown
local pet_exotic_autoAllowed = nil
local pet_exotic_autoEnabled = nil
local pet_exotic_spellbookID = nil
local pet_exotic_spellID

local pet_bonus_attack
local pet_bonus_name = nil
local pet_bonus_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_bonus_cooldown
local pet_bonus_autoAllowed = nil
local pet_bonus_autoEnabled = nil
local pet_bonus_spellbookID = nil
local pet_bonus_spellID

local pet_spec_1_attack
local pet_spec_1_name = nil
local pet_spec_1_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_spec_1_cooldown
local pet_spec_1_autoAllowed = nil
local pet_spec_1_autoEnabled = nil
local pet_spec_1_spellbookID = nil
local pet_spec_1_spellID

local pet_spec_2_attack
local pet_spec_2_name = nil
local pet_spec_2_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_spec_2_cooldown
local pet_spec_2_autoAllowed = nil
local pet_spec_2_autoEnabled = nil
local pet_spec_2_spellbookID = nil
local pet_spec_2_spellID

local pet_spec_3_attack
local pet_spec_3_name = nil
local pet_spec_3_icon = {  bgFile = "",    edgeFile = "",  tile = false,  tileSize = 30,}
local pet_spec_3_cooldown
local pet_spec_3_autoAllowed = nil
local pet_spec_3_autoEnabled = nil
local pet_spec_3_spellbookID = nil
local pet_spec_3_spellID	

	--textures and icon variables

local petAutoCastableTexture = "Interface\\Buttons\\UI-AutoCastableOverlay"
local petAutoCastShineTexture = "interface\\SpellActivationOverlay\\IconAlertAnts"

local buttonHighlight = "Interface\\Buttons\\ButtonHilight-Square"
local buttonPushed = "Interface\\Buttons\\ui-quickslot-depress"

local barMoveable = "Interface\\common\\indicator-green"

--local iconProwlUsed = "Interface\\Icons\\Ability_Vanish"

---------------------
--  start table reference  --
---------------------
local addon, ns = ...

--attacks
local PET_ABILITIES = ns.PET_ABILITIES
local PET_BASIC = ns.PET_BASIC_LIST
local PET_SPECIAL = ns.PET_SPECIAL_LIST
local PET_EXOTIC = ns.PET_EXOTIC_LIST
local PET_BONUS = ns.PET_BONUS_LIST
local PET_ABILITY = ns.PET_ABILITY_LIST
local PET_SPEC1 = ns.PET_SPEC1_LIST
local PET_SPEC2 = ns.PET_SPEC2_LIST
local PET_SPEC3 = ns.PET_SPEC3_LIST

--attacks name only --spellbook id lookup
local PET_BASIC_NAME = ns.PET_BASIC_NAME
local PET_SPECIAL_NAME = ns.PET_SPECIAL_NAME
local PET_EXOTIC_NAME = ns.PET_EXOTIC_NAME
local PET_BONUS_NAME = ns.PET_BONUS_NAME
local PET_ABILITY_NAME = ns.PET_ABILITY_NAME
local PET_SPEC1_NAME = ns.PET_SPEC1_NAME
local PET_SPEC2_NAME = ns.PET_SPEC2_NAME
local PET_SPEC3_NAME = ns.PET_SPEC3_NAME

--cooldown lengths
local PET_ABILITIES_CD = ns.PET_CD_ABILITIES
local PET_BASIC_CD = ns.PET_BASIC_CD_LIST
local PET_SPECIAL_CD = ns.PET_SPECIAL_CD_LIST
local PET_EXOTIC_CD = ns.PET_EXOTIC_CD_LIST
local PET_BONUS_CD = ns.PET_BONUS_CD_LIST
local PET_ABILITY_CD = ns.PET_ABILITY_CD_LIST
local PET_SPEC1_CD = ns.PET_SPEC1_CD_LIST
local PET_SPEC2_CD = ns.PET_SPEC2_CD_LIST
local PET_SPEC3_CD = ns.PET_SPEC3_CD_LIST

--icons
local PET_ABILITIESICON = ns.PET_ABILITIESICON
local PET_BASICICON = ns.PET_BASIC_LISTICON
local PET_SPECIALICON = ns.PET_SPECIAL_LISTICON
local PET_EXOTICICON = ns.PET_EXOTIC_LISTICON
local PET_BONUSICON = ns.PET_BONUS_LISTICON
local PET_ABILITYICON = ns.PET_ABILITY_LISTICON
local PET_SPEC1ICON = ns.PET_SPEC1_LISTICON
local PET_SPEC2ICON = ns.PET_SPEC2_LISTICON
local PET_SPEC3ICON = ns.PET_SPEC3_LISTICON

--spellIDs
local PET_ABILITIES_SPELLID = ns.PET_ABILITIES_SPELLID
local PET_BASIC_SPELLID = ns.PET_BASIC_SPELLID
local PET_SPECIAL_SPELLID = ns.PET_SPECIAL_SPELLID
local PET_EXOTIC_SPELLID = ns.PET_EXOTIC_SPELLID
local PET_BONUS_SPELLID = ns.PET_BONUS_SPELLID
local PET_ABILITY_SPELLID = ns.PET_ABILITY_SPELLID
local PET_SPEC1_SPELLID = ns.PET_SPEC1_SPELLID
local PET_SPEC2_SPELLID = ns.PET_SPEC2_SPELLID
local PET_SPEC3_SPELLID = ns.PET_SPEC3_SPELLID

---------------------
--  start buttons and bar creation  --
---------------------
local button = CreateFrame("Button", "PetSpecialAttackButton", UIParent, "SecureActionButtonTemplate")
local myVariables = CreateFrame("Button", "MyHiddenVariables", UIParent, "SecureActionButtonTemplate")


--control bar
local NewControlBarMover = CreateFrame("Button", "PetAttackBar", UIParent, "SecureActionButtonTemplate")
local NewControlBar = CreateFrame("Button", "PetAttackBar", UIParent, "SecureActionButtonTemplate")

local buttonGrowl = CreateFrame("Button", "PetbuttonGrowl", NewControlBar, "SecureActionButtonTemplate AutoCastShineTemplate")
local buttonBasic = CreateFrame("Button", "PetbuttonBasic", NewControlBar, "SecureActionButtonTemplate")
local buttonCower = CreateFrame("Button", "PetbuttonCower", NewControlBar, "SecureActionButtonTemplate")
local buttonSpecial = CreateFrame("Button", "PetbuttonSpecial", NewControlBar, "SecureActionButtonTemplate")
local buttonExotic = CreateFrame("Button", "PetbuttonExotic", NewControlBar, "SecureActionButtonTemplate")
local buttonBonus = CreateFrame("Button", "PetbuttonBonus", NewControlBar, "SecureActionButtonTemplate")
local buttonSpec1 = CreateFrame("Button", "PetbuttonSpec1", NewControlBar, "SecureActionButtonTemplate")
local buttonSpec2 = CreateFrame("Button", "PetbuttonSpec2", NewControlBar, "SecureActionButtonTemplate")
local buttonSpec3 = CreateFrame("Button", "PetbuttonSpec3", NewControlBar, "SecureActionButtonTemplate")


---------------------
--  start buttons and bar settings  --
---------------------

--control bar buttons
NewControlBarMover:SetSize(10,10)
NewControlBarMover:SetPoint("CENTER", ControlBar_PosX, ControlBar_PosY)
NewControlBarMover:SetNormalTexture(barMoveable)
NewControlBarMover:SetMovable(true)
NewControlBarMover:EnableMouse(true)
NewControlBarMover:SetScript("OnMouseDown", function(self, button)
  if button == "LeftButton" and not self.isMoving then
   self:StartMoving();
   self.isMoving = true;
  end
end)
NewControlBarMover:SetScript("OnMouseUp", function(self, button)
  if button == "LeftButton" and self.isMoving then
   self:StopMovingOrSizing();
   self.isMoving = false;
  end
end)
NewControlBarMover:SetScript("OnHide", function(self)
  if ( self.isMoving ) then
   self:StopMovingOrSizing();
   self.isMoving = false;
  end
end)

NewControlBar:SetPoint("TOPRIGHT", NewControlBarMover, "TOPLEFT", 10, 0);
NewControlBar:Show()
NewControlBar:SetSize(30,1)

buttonGrowl:SetSize(30,30)
buttonGrowl:SetAttribute("type","spell")
buttonGrowl:Show()
buttonGrowl:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonGrowl:SetAttribute("type2","macro")  

buttonBasic:SetSize(30,30)
buttonBasic:SetAttribute("type","spell")
buttonBasic:Show()
buttonBasic:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonBasic:SetAttribute("type2","macro") 

buttonSpecial:SetSize(30,30)
buttonSpecial:SetAttribute("type","spell")
buttonSpecial:Show()
buttonSpecial:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonSpecial:SetAttribute("type2","macro") 

buttonExotic:SetSize(30,30)
buttonExotic:SetAttribute("type","spell")
buttonExotic:Show()
buttonExotic:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonExotic:SetAttribute("type2","macro") 

buttonBonus:SetSize(30,30)
buttonBonus:SetAttribute("type","spell")
buttonBonus:Show()
buttonBonus:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonBonus:SetAttribute("type2","macro") 

buttonCower:SetSize(30,30)
buttonCower:SetAttribute("type","spell")
buttonCower:Show()
buttonCower:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonCower:SetAttribute("type2","macro") 

buttonSpec1:SetSize(30,30)
buttonSpec1:SetAttribute("type","spell")
buttonSpec1:Show()
buttonSpec1:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonSpec1:SetAttribute("type2","macro") 

buttonSpec2:SetSize(30,30)
buttonSpec2:SetAttribute("type","spell")
buttonSpec2:Show()
buttonSpec2:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonSpec2:SetAttribute("type2","macro") 

buttonSpec3:SetSize(30,30)
buttonSpec3:SetAttribute("type","spell")
buttonSpec3:Show()
buttonSpec3:RegisterForClicks("LeftButtonUp","RightButtonUp")
buttonSpec3:SetAttribute("type2","macro") 

	-- all button highlights

buttonBasic:SetHighlightTexture(buttonHighlight, add)
buttonGrowl:SetHighlightTexture(buttonHighlight, add)
buttonCower:SetHighlightTexture(buttonHighlight, add)
buttonSpecial:SetHighlightTexture(buttonHighlight, add)
buttonExotic:SetHighlightTexture(buttonHighlight, add)
buttonBonus:SetHighlightTexture(buttonHighlight, add)
buttonSpec1:SetHighlightTexture(buttonHighlight, add)
buttonSpec2:SetHighlightTexture(buttonHighlight, add)
buttonSpec3:SetHighlightTexture(buttonHighlight, add)

buttonBasic:SetPushedTexture(buttonPushed, add)
buttonGrowl:SetPushedTexture(buttonPushed, add)
buttonCower:SetPushedTexture(buttonPushed, add)
buttonSpecial:SetPushedTexture(buttonPushed, add)
buttonExotic:SetPushedTexture(buttonPushed, add)
buttonBonus:SetPushedTexture(buttonPushed, add)
buttonSpec1:SetPushedTexture(buttonPushed, add)
buttonSpec2:SetPushedTexture(buttonPushed, add)
buttonSpec3:SetPushedTexture(buttonPushed, add)
---------------------
--  start functions  --
---------------------

---------------start autocast textures-----------------------------
buttonGrowl.autocastable = buttonGrowl:CreateTexture("growlCastable")
buttonGrowl.autocastable:SetAllPoints(buttonGrowl);
buttonGrowl.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonGrowl.autocastable:SetSize(30,30);
buttonGrowl.autocastable:SetTexture(petAutoCastableTexture);

buttonBasic.autocastable = buttonBasic:CreateTexture("basicCastable")
buttonBasic.autocastable:SetAllPoints(buttonBasic);
buttonBasic.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonBasic.autocastable:SetSize(30,30);
buttonBasic.autocastable:SetTexture(petAutoCastableTexture);

buttonCower.autocastable = buttonCower:CreateTexture("cowerCastable")
buttonCower.autocastable:SetAllPoints(buttonCower);
buttonCower.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonCower.autocastable:SetSize(30,30);
buttonCower.autocastable:SetTexture(petAutoCastableTexture);

buttonSpecial.autocastable = buttonSpecial:CreateTexture("specialCastable")
buttonSpecial.autocastable:SetAllPoints(buttonSpecial);
buttonSpecial.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonSpecial.autocastable:SetSize(30,30);
buttonSpecial.autocastable:SetTexture(petAutoCastableTexture);

buttonExotic.autocastable = buttonExotic:CreateTexture("exoticCastable")
buttonExotic.autocastable:SetAllPoints(buttonExotic);
buttonExotic.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonExotic.autocastable:SetSize(30,30);
buttonExotic.autocastable:SetTexture(petAutoCastableTexture);

buttonBonus.autocastable = buttonBonus:CreateTexture("bonusCastable")
buttonBonus.autocastable:SetAllPoints(buttonBonus);
buttonBonus.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonBonus.autocastable:SetSize(30,30);
buttonBonus.autocastable:SetTexture(petAutoCastableTexture);

buttonSpec1.autocastable = buttonSpec1:CreateTexture("spec1Castable")
buttonSpec1.autocastable:SetAllPoints(buttonSpec1);
buttonSpec1.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonSpec1.autocastable:SetSize(30,30);
buttonSpec1.autocastable:SetTexture(petAutoCastableTexture);

buttonSpec2.autocastable = buttonSpec2:CreateTexture("spec2Castable")
buttonSpec2.autocastable:SetAllPoints(buttonSpec2);
buttonSpec2.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonSpec2.autocastable:SetSize(30,30);
buttonSpec2.autocastable:SetTexture(petAutoCastableTexture);

buttonSpec3.autocastable = buttonSpec3:CreateTexture("spec3Castable")
buttonSpec3.autocastable:SetAllPoints(buttonSpec3);
buttonSpec3.autocastable:SetTexCoord(0.23, 0.77, 0.23, 0.77)
buttonSpec3.autocastable:SetSize(30,30);
buttonSpec3.autocastable:SetTexture(petAutoCastableTexture);


---------------end autocast textures-----------------------------

------------------start autocast controls----------------
  local Button = buttonGrowl
	
local Buttons =
    {
    buttonGrowl
    }	
     --adding textures for ants/glow
    local tGlow = _G[Button:GetName().."Glow"] or Button:CreateTexture(Button:GetName().."Glow","OVERLAY")
    tGlow:SetTexture("Interface\\AddOns\\NewPetBar\\textures\\IconAlertGlow.tga")
    tGlow:ClearAllPoints()
    tGlow:SetPoint("TOPLEFT", Button, "TOPLEFT")
    tGlow:SetPoint("BOTTOMRIGHT", Button, "BOTTOMRIGHT")
    tGlow:SetDrawLayer("OVERLAY", 2)
    tGlow:Hide()
     
    local tAnts = _G[Button:GetName().."Ants"] or Button:CreateTexture(Button:GetName().."Ants","OVERLAY")
    tAnts:SetTexture("Interface\\AddOns\\NewPetBar\\textures\\IconAlertAnts1.tga")
    tAnts:ClearAllPoints()
    tAnts:SetPoint("TOPLEFT", Button, "TOPLEFT")
    tAnts:SetPoint("BOTTOMRIGHT", Button, "BOTTOMRIGHT")
    tAnts:SetDrawLayer("OVERLAY", 2)
    tAnts:Hide()
     
     
    --updating the ants if _G[Button:GetName().."Ants"] is visible
    do
        local f = CreateFrame("Frame", "BABMain", UIParent)
        f:SetScript("OnUpdate", function(...)
          for btni, btnv in pairs(Buttons) do
            if _G[btnv:GetName().."Ants"] then
                local tAnts = _G[btnv:GetName().."Ants"]
                if tAnts:IsVisible() then
                    if not tAnts.Step then
                        tAnts.Step = 1
                        tAnts.StepTime = GetTime()
                    end
                    if GetTime() - tAnts.StepTime > 0.025 then
                         tAnts.Step = tAnts.Step + 1
                         if tAnts.Step > 22 then
                             tAnts.Step = 1
                         end
                         tAnts:SetTexture("Interface\\AddOns\\NewPetBar\\textures\\IconAlertAnts"..tAnts.Step..".tga")
                         tAnts.StepTime = GetTime()
                    end
                end
            end            
          end
        end)
    end



local function AutoCastControl() -- keep autocast textures accurate
	if pet_growl_autoAllowed == 1 then
		buttonGrowl.autocastable:Show()	
	else 
		buttonGrowl.autocastable:Hide()	
	end
	if pet_basic_autoAllowed == 1 then
		buttonBasic.autocastable:Show()	
	else 
		buttonGrowl.autocastable:Hide()	
	end
	if pet_cower_autoAllowed == 1 then
		buttonCower.autocastable:Show()	
	else 
		buttonCower.autocastable:Hide()	
	end
	if pet_special_autoAllowed == 1 then
		buttonSpecial.autocastable:Show()	
	else 
		buttonSpecial.autocastable:Hide()	
	end
	if pet_exotic_autoAllowed == 1 then
		buttonExotic.autocastable:Show()	
	else 
		buttonExotic.autocastable:Hide()	
	end
	if pet_bonus_autoAllowed == 1 then
		buttonBonus.autocastable:Show()	
	else 
		buttonBonus.autocastable:Hide()	
	end
	if pet_spec_1_autoAllowed == 1 then
		buttonSpec1.autocastable:Show()	
	else 
		buttonSpec1.autocastable:Hide()	
	end
	if pet_spec_2_autoAllowed == 1 then
		buttonSpec2.autocastable:Show()	
	else 
		buttonSpec2.autocastable:Hide()	
	end
	if pet_spec_3_autoAllowed == 1 then
		buttonSpec3.autocastable:Show()	
	else 
		buttonSpec3.autocastable:Hide()	
	end

		if ( pet_growl_autoEnabled ) then
--				buttonGrowl.Ants:Show()
--				buttonGrowlAnts:Show()
		else
--				buttonGrowl.Ants:Hide()
--				buttonGrowlAnts:Hide()
		end

--[[
	if pet_basic_autoEnabled == 1 then
		buttonBasic.autoCast:Show()
	else 
		buttonBasic.autoCast:Hide()
	end
	if pet_cower_autoEnabled == 1 then
		buttonCower.autoCast:Show()
	else 
		buttonCower.autoCast:Hide()
	end
	if pet_special_autoEnabled == 1 then
		buttonSpecial.autoCast:Show()
	else 
		buttonSpecial.autoCast:Hide()
	end
	if pet_exotic_autoEnabled == 1 then
		buttonExotic.autoCast:Show()
	else 
		buttonExotic.autoCast:Hide()
	end
	if pet_bonus_autoEnabled == 1 then
		buttonBonus.autoCast:Show()
	else 
		buttonBonus.autoCast:Hide()
	end
	if pet_spec_1_autoEnabled == 1 then
		buttonSpec1.autoCast:Show()
	else 
		buttonSpec1.autoCast:Hide()
	end
	if pet_spec_2_autoEnabled == 1 then
		buttonSpec2.autoCast:Show()
	else 
		buttonSpec2.autoCast:Hide()
	end
	if pet_spec_3_autoEnabled == 1 then
		buttonSpec3.autoCast:Show()
	else 
		buttonSpec3.autoCast:Hide()
	end	]]
end
------------------end autocast controls----------------





function basic_OnEnter(self)
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_basic_spellID)
  GameTooltip:Show()
end
function growl_OnEnter(self)
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_growl_spellID)
  GameTooltip:Show()
end
function cower_OnEnter(self)
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_cower_spellID)
  GameTooltip:Show()
end
function special_OnEnter(self)
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_special_spellID)
  GameTooltip:Show()
end
function exotic_OnEnter(self)
if pet_exotic_spellID~=nil then
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_exotic_spellID)
  GameTooltip:Show()
  else
  end
end
function bonus_OnEnter(self)
if pet_bonus_spellID~=nil then
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_bonus_spellID)
  GameTooltip:Show()
  else
  end
end
function spec1_OnEnter(self)
if pet_spec_1_spellID~=nil then
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_spec_1_spellID)
  GameTooltip:Show()
  else
  end
end
function spec2_OnEnter(self)
if pet_spec_2_spellID~=nil then
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_spec_2_spellID)
  GameTooltip:Show()
  else
  end
end
function spec3_OnEnter(self)
if pet_spec_3_spellID~=nil then
  GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
GameTooltip:SetSpellByID(pet_spec_3_spellID)
  GameTooltip:Show()
  else
  end
end

local function OnLeave(self)
  GameTooltip:Hide()
end

buttonBasic:SetScript("OnEnter", basic_OnEnter)
buttonGrowl:SetScript("OnEnter", growl_OnEnter)
buttonCower:SetScript("OnEnter", cower_OnEnter)
buttonSpecial:SetScript("OnEnter", special_OnEnter)
buttonExotic:SetScript("OnEnter", exotic_OnEnter)
buttonBonus:SetScript("OnEnter", bonus_OnEnter)
buttonSpec1:SetScript("OnEnter", spec1_OnEnter)
buttonSpec2:SetScript("OnEnter", spec2_OnEnter)
buttonSpec3:SetScript("OnEnter", spec3_OnEnter)

buttonBasic:SetScript("OnLeave", OnLeave)
buttonGrowl:SetScript("OnLeave", OnLeave)
buttonCower:SetScript("OnLeave", OnLeave)
buttonSpecial:SetScript("OnLeave", OnLeave)
buttonExotic:SetScript("OnLeave", OnLeave)
buttonBonus:SetScript("OnLeave", OnLeave)
buttonSpec1:SetScript("OnLeave", OnLeave)
buttonSpec2:SetScript("OnLeave", OnLeave)
buttonSpec3:SetScript("OnLeave", OnLeave)


local function UpdateMacro() --keep macro commands updated --call nil
	SetMacroSpell(MACRO_NAME_BASIC_TOGGLE, pet_basic_attack or "")
	SetMacroSpell(MACRO_NAME_GROWL_TOGGLE, pet_growl_attack or "")
	SetMacroSpell(MACRO_NAME_COWER_TOGGLE, pet_cower_attack or "")
	SetMacroSpell(MACRO_NAME_SPECIAL_TOGGLE, pet_special_attack or "")
	SetMacroSpell(MACRO_NAME_EXOTIC_TOGGLE, pet_exotic_attack or "")
	SetMacroSpell(MACRO_NAME_BONUS_TOGGLE, pet_bonus_attack or "")
	SetMacroSpell(MACRO_NAME_SPEC1_TOGGLE, pet_spec_1_attack or "")
	SetMacroSpell(MACRO_NAME_SPEC2_TOGGLE, pet_spec_2_attack or "")
	SetMacroSpell(MACRO_NAME_SPEC3_TOGGLE, pet_spec_3_attack or "")
end

local function UpdateMyIcons() -- update icons --call nil
	if doIhaveApet then
		
		--get icons for attacks
	pet_basic_icon.bgFile = PET_BASICICON[pet_family]
	pet_growl_icon.bgFile = PET_ABILITYICON["growl"]
	pet_cower_icon.bgFile = PET_ABILITYICON["cower"]
	pet_exotic_icon.bgFile = PET_EXOTICICON[pet_family]
	pet_spec_1_icon.bgFile = PET_SPEC1ICON[pet_spec]
	pet_spec_2_icon.bgFile = PET_SPEC2ICON[pet_spec]
	pet_spec_3_icon.bgFile = PET_SPEC3ICON[pet_spec]
	pet_special_icon.bgFile = PET_SPECIALICON[pet_family]
	if (petBuff=="Prowl") or (petBuff=="Spirit Walk") then
		pet_bonus_icon.bgFile = "Interface\\Icons\\Ability_Vanish"
	else
		pet_bonus_icon.bgFile = PET_BONUSICON[pet_family]
	end	
		--assign icons to buttons if the pet has them and get their icons
		if (pet_Exotic ~= "nil") or (pet_exotic ~= nil)  then
			buttonExotic:Show()
		end

		if (pet_Bonus ~= "nil") or (pet_Bonus ~= nil)  then
			buttonBonus:Show()
		end
			
	--assign icons to buttons
--[[
		buttonBasic:SetNormalTexture(pet_basic_icon)
		buttonGrowl:SetNormalTexture(pet_growl_icon)
		buttonCower:SetNormalTexture(pet_cower_icon)
		buttonBonus:SetNormalTexture(pet_bonus_icon)
		buttonExotic:SetNormalTexture(pet_exotic_icon)
		buttonSpecial:SetNormalTexture(pet_special_icon)
		buttonSpec1:SetNormalTexture(pet_spec_1_icon)
		buttonSpec2:SetNormalTexture(pet_spec_2_icon)
		buttonSpec3:SetNormalTexture(pet_spec_3_icon)
]]
		buttonBasic:SetBackdrop(pet_basic_icon)
		buttonGrowl:SetBackdrop(pet_growl_icon)
		buttonCower:SetBackdrop(pet_cower_icon)
		buttonBonus:SetBackdrop(pet_bonus_icon)
		buttonExotic:SetBackdrop(pet_exotic_icon)
		buttonSpecial:SetBackdrop(pet_special_icon)
		buttonSpec1:SetBackdrop(pet_spec_1_icon)
		buttonSpec2:SetBackdrop(pet_spec_2_icon)
		buttonSpec3:SetBackdrop(pet_spec_3_icon)
	end
end

local function ManageButtons() --hide / show buttons -- call nil

-- hide spells that pets do not have	
	if (level < 80) and (doIhaveApet) then
		if ((pet_family == "Cat") or (pet_family == "Spirit Beast"))then 
			buttonSpecial:Hide()
			hidespecial = true
		else
			buttonSpecial:Show()
			hidespecial = false
		end
	end

	if hidespecial == true then
	--if not exotic
		if (pet_exotic_attack == "nil") or (pet_exotic_attack == nil) and BarsLocked==true then
		buttonExotic:Hide()
			buttonBonus:SetPoint(ControlBar_ButtonPrevious, buttonBasic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);

	--if no bonus skill
		elseif (pet_Bonus_attack == "nil") or (pet_Bonus_attack == nil) and BarsLocked==true then
		buttonBonus:Hide()
			buttonExotic:SetPoint(ControlBar_ButtonPrevious, buttonBasic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);

	--if not exotic and no bonus skill
		elseif ((pet_Bonus_attack == "nil") or (pet_Bonus_attack == nil)) and	((pet_exotic_attack == "nil") or (pet_exotic_attack == nil)) and BarsLocked==true then
			buttonExotic:Hide()
			buttonBonus:Hide()
			buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonBasic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
		else
			buttonExotic:Show()
			buttonBonus:Show()
		end
	elseif hidespecial == false then
	--if not exotic
		if (pet_exotic_attack == "nil") or (pet_exotic_attack == nil) and BarsLocked==true then
			buttonExotic:Hide()
			buttonBonus:SetPoint(ControlBar_ButtonPrevious, buttonSpecial, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
			buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonBonus, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
			
	--if no bonus skill
		elseif (pet_Bonus_attack == "nil") or (pet_Bonus_attack == nil) and BarsLocked==true then
			buttonBonus:Hide()
			buttonExotic:SetPoint(ControlBar_ButtonPrevious, buttonSpecial, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
			buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonExotic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
			
	--if not exotic and no bonus skill
		elseif ((pet_Bonus_attack == "nil") or (pet_Bonus_attack == nil)) and	((pet_exotic_attack == "nil") or (pet_exotic_attack == nil)) and BarsLocked==true then
			buttonExotic:Hide()
			buttonBonus:Hide()
			buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonSpecial, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
		else
			buttonExotic:Show()
			buttonBonus:Show()
		end
	else
		buttonExotic:Show()
		buttonBonus:Show()
		buttonExotic:SetPoint(ControlBar_ButtonPrevious, buttonSpecial, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
		buttonBonus:SetPoint(ControlBar_ButtonPrevious, buttonExotic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
		buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonBonus, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
	end	
end


local function GetSpellBookIDs() --use spell name to get spell book id and use it to get autocast info

	for i=1, 24 do
		local name = GetSpellInfo(i, "pet")
		local autocastAllowed, autocastEnabled = GetSpellAutocast(i, "pet")
		if name == pet_basic_name then
			pet_basic_spellbookID = i
			pet_basic_autoAllowed = autocastAllowed
			pet_basic_autoEnabled = autocastEnabled
		elseif name == pet_growl_name then
			pet_growl_spellbookID = i
			pet_growl_autoAllowed = autocastAllowed
			pet_growl_autoEnabled = autocastEnabled
		elseif name == pet_cower_name then
			pet_cower_spellbookID = i
			pet_cower_autoAllowed = autocastAllowed
			pet_cower_autoEnabled = autocastEnabled
		elseif name == pet_special_name then 			
			pet_special_spellbookID = i
			pet_special_autoAllowed = autocastAllowed
			pet_special_autoEnabled = autocastEnabled
		elseif name == pet_exotic_name then 			
			pet_exotic_spellbookID = i
			pet_exotic_autoAllowed = autocastAllowed
			pet_exotic_autoEnabled = autocastEnabled
		elseif name == pet_bonus_name then 			
			pet_bonus_spellbookID = i
			pet_bonus_autoAllowed = autocastAllowed
			pet_bonus_autoEnabled = autocastEnabled
		elseif name == pet_spec_1_name then 			
			pet_spec_1_spellbookID = i
			pet_spec_1_autoAllowed = autocastAllowed
			pet_spec_1_autoEnabled = autocastEnabled
		elseif name == pet_spec_2_name then 			
			pet_spec_2_spellbookID = i
			pet_spec_2_autoAllowed = autocastAllowed
			pet_spec_2_autoEnabled = autocastEnabled
		elseif name == pet_spec_3_name then 			
			pet_spec_3_spellbookID = i
			pet_spec_3_autoAllowed = autocastAllowed
			pet_spec_3_autoEnabled = autocastEnabled
		end
	end

AutoCastControl()
end

local function SetMyMacros() --create macros and attach to buttons --call nil
		
-- pet attacks
	if doIhaveApet then
			
--assign spells to buttons if the pet has them and get their icons
--move attack buttons to hide ability slots pets do not have				
		if (pet_exotic_attack == "nil") or (pet_exotic_attack == nil) then
			macrotext_exotic = macrotext .. ("")
			macrotext_exotic_toggle = macrotext .. ("")
			
		elseif pet_exotic_attack ~= nil then
			macrotext_exotic_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_exotic_attack)
			buttonExotic:SetAttribute("spell",pet_exotic_attack)
			
		elseif (pet_bonusattack == "nil") or (pet_bonus_attack == nil) then
			macrotext_bonus = macrotext .. ("")
			macrotext_bonus_toggle = macrotext .. ("")
			
		elseif pet_bonus_attack ~= nil then
			macrotext_bonus_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_bonus_attack)
			buttonBonus:SetAttribute("spell",pet_bonus_attack)
		else

		end


--set autocast right click toggle to macros 
			macrotext_basic_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_basic_attack)
			macrotext_growl_toggle = macrotext .. ("/petautocasttoggle Growl(Basic Ability)"):format(pet_growl_attack)
			macrotext_cower_toggle = macrotext .. ("/petautocasttoggle Cower(Basic Ability)"):format(pet_cower_attack)
			macrotext_special_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_special_attack)
			
-- pet has no spec or spec isnt found, then stop errors before they start				
		if (pet_spec==nil) or (pet_spec==Unknown) then
			macrotext_spec1 = macrotext .. ("")
			macrotext_spec2 = macrotext .. ("")
			macrotext_spec3 = macrotext .. ("")
			macrotext_spec1_toggle = macrotext .. ("")
			macrotext_spec2_toggle = macrotext .. ("")
			macrotext_spec3_toggle = macrotext .. ("")

		else
			if macrotext_spec1_toggle ~= nil then
				macrotext_spec1_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_spec_1_attack)
			end
			if macrotext_spec2_toggle ~= nil then
				macrotext_spec2_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_spec_2_attack)
			end
			if macrotext_spec2_toggle ~= nil then
				macrotext_spec3_toggle = macrotext .. ("/petautocasttoggle %s"):format(pet_spec_3_attack)
			end
		end 
	end
	

--assign toggle macros to right clicks	
	buttonBasic:SetAttribute("macrotext", macrotext_basic_toggle)
	buttonGrowl:SetAttribute("macrotext", macrotext_growl_toggle)
	buttonCower:SetAttribute("macrotext", macrotext_cower_toggle)
	buttonSpecial:SetAttribute("macrotext", macrotext_special_toggle)
	buttonExotic:SetAttribute("macrotext", macrotext_exotic_toggle)
	buttonBonus:SetAttribute("macrotext", macrotext_bonus_toggle)
	buttonSpec1:SetAttribute("macrotext", macrotext_spec1_toggle)
	buttonSpec2:SetAttribute("macrotext", macrotext_spec2_toggle)
	buttonSpec3:SetAttribute("macrotext", macrotext_spec3_toggle)
	
-- assign dynamic spells to buttons
	buttonGrowl:SetAttribute("spell","Growl(Basic Ability)")
	buttonBasic:SetAttribute("spell",pet_basic_attack)
	buttonCower:SetAttribute("spell","Cower(Basic Ability)")
	buttonSpec1:SetAttribute("spell",pet_spec_1_attack)
	buttonSpec2:SetAttribute("spell",pet_spec_2_attack)
	buttonSpec3:SetAttribute("spell",pet_spec_3_attack)
	buttonSpecial:SetAttribute("spell",pet_special_attack)
	
	return macrotext ~= ""		
end 

--- cooldowns	----------------------------------------------------------

local exoticClicked=false
local cowerClicked=false
--local duration
local buttonClicked

buttonGrowl:SetScript("PreClick", function(self, button)
	buttonGrowl.spellID = pet_growl_spellID
	buttonGrowl.ID=pet_growl_name --self:GetAttribute("spell")
	--duration = pet_growl_cooldown
	growlClicked=true
	buttonClicked=buttonGrowl
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonBasic:SetScript("PreClick", function(self, button)
	buttonBasic.spellID = pet_basic_spellID
	buttonBasic.ID=pet_basic_name --self:GetAttribute("spell")
	--duration = pet_basic_cooldown
	basicClicked=true
	buttonClicked=buttonBasic
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonCower:SetScript("PreClick", function(self, button)
	buttonCower.spellID = pet_cower_spellID
	buttonCower.ID=pet_cower_name --self:GetAttribute("spell")
	--duration = pet_cower_cooldown
	cowerClicked=true
	buttonClicked=buttonCower
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonBonus:SetScript("PreClick", function(self, button)
	buttonBonus.spellID = pet_bonus_spellID
	buttonBonus.ID=pet_bonus_name --self:GetAttribute("spell")
	--duration = pet_bonus_cooldown
	bonusClicked=true
	buttonClicked=buttonBonus
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonExotic:SetScript("PreClick", function(self, button)
	buttonExotic.spellID = pet_exotic_spellID
	buttonExotic.ID=pet_exotic_name --self:GetAttribute("spell")
	--duration = pet_exotic_cooldown
	exoticClicked=true
	buttonClicked=buttonExotic
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonSpecial:SetScript("PreClick", function(self, button)
	buttonSpecial.spellID = pet_special_spellID
	buttonSpecial.ID=pet_special_name --self:GetAttribute("spell")
	--duration = pet_special_cooldown
	specialClicked=true
	buttonClicked=buttonSpecial
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonSpec1:SetScript("PreClick", function(self, button)
	buttonSpec1.spellID = pet_spec_1_spellID
	buttonSpec1.ID=pet_spec_1_name --self:GetAttribute("spell")
	--duration = pet_spec_1_cooldown
	spec1Clicked=true
	buttonClicked=buttonSpec1
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonSpec2:SetScript("PreClick", function(self, button)
	buttonSpec2.spellID = pet_spec_2_spellID
	buttonSpec2.ID=pet_spec_2_name --self:GetAttribute("spell")
	--duration = pet_spec_2_cooldown
	spec2Clicked=true
	buttonClicked=buttonSpec2
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
buttonSpec3:SetScript("PreClick", function(self, button)
	buttonSpec3.spellID = pet_spec_3_spellID
	buttonSpec3.ID=pet_spec_3_name --self:GetAttribute("spell")
	--duration = pet_spec_3_cooldown
	spec3Clicked=true
	buttonClicked=buttonSpec3
	myVariables:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)

buttonGrowl:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonBasic:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonCower:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonBonus:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonExotic:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonSpecial:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonSpec1:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonSpec2:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)
buttonSpec3:SetScript("PostClick", function(self, button)
GetSpellBookIDs()
end)


local function myVariables_OnEvent(self, event, ...)--[[
if (buttonClicked==buttonSpec1 or buttonClicked==buttonSpec2 or buttonClicked==buttonSpec3) and buttonClicked.spellID == nil then
print("No Spec for cooldown")
end]]
	--local start = GetTime()
	local start, duration = GetSpellCooldown(buttonClicked.spellID)
	--	if duration > 0 then
--				print(buttonClicked:GetAttribute("spell"), "is on cooldown for", duration, "seconds.")
				buttonClicked.cooldown:Show()
				buttonClicked.start=start
				buttonClicked.cooldown:SetCooldown(start, duration)
--[[		else
				print(buttonClicked:GetAttribute("spell"), "is not on cooldown.")
				buttonClicked.cooldown:Hide()
		end]]
	if buttonClicked==buttonBasic and duration < 2 then  --only unregister cooldown if basic wasnt hit and it doesnt have less then a 2 sec cooldown
	else
		myVariables:UnregisterEvent("SPELL_UPDATE_COOLDOWN")
	end
--	print("SPELL_UPDATE_COOLDOWN - pet_spec: ", pet_spec)
--	print("SPELL_UPDATE_COOLDOWN - buttonClicked: ", buttonClicked)
--	print("SPELL_UPDATE_COOLDOWN - buttonClicked.spellID: ", buttonClicked.spellID)
--	print("SPELL_UPDATE_COOLDOWN - buttonClicked.cooldown: ", buttonClicked.cooldown)
end
	
-- Add a cooldown to the button:
local growlCD = CreateFrame("Cooldown", "$parentCooldown", buttonGrowl, "CooldownFrameTemplate")
buttonGrowl.cooldown = growlCD
growlCD:SetAllPoints(true)
growlCD:Hide()
local basicCD = CreateFrame("Cooldown", "$parentCooldown", buttonBasic, "CooldownFrameTemplate")
buttonBasic.cooldown = basicCD
basicCD:SetAllPoints(true)
basicCD:Hide()
local specialCD = CreateFrame("Cooldown", "$parentCooldown", buttonSpecial, "CooldownFrameTemplate")
buttonSpecial.cooldown = specialCD
specialCD:SetAllPoints(true)
specialCD:Hide()
local exoticCD = CreateFrame("Cooldown", "$parentCooldown", buttonExotic, "CooldownFrameTemplate")
buttonExotic.cooldown = exoticCD
exoticCD:SetAllPoints(true)
exoticCD:Hide()
local bonusCD = CreateFrame("Cooldown", "$parentCooldown", buttonBonus, "CooldownFrameTemplate")
buttonBonus.cooldown = bonusCD
bonusCD:SetAllPoints(true)
bonusCD:Hide()
local cowerCD = CreateFrame("Cooldown", "$parentCooldown", buttonCower, "CooldownFrameTemplate")
buttonCower.cooldown = cowerCD
cowerCD:SetAllPoints(true)
cowerCD:Hide()
local spec1CD = CreateFrame("Cooldown", "$parentCooldown", buttonSpec1, "CooldownFrameTemplate")
buttonSpec1.cooldown = spec1CD
spec1CD:SetAllPoints(true)
spec1CD:Hide()
local spec2CD = CreateFrame("Cooldown", "$parentCooldown", buttonSpec2, "CooldownFrameTemplate")
buttonSpec2.cooldown = spec2CD
spec2CD:SetAllPoints(true)
spec2CD:Hide()
local spec3CD = CreateFrame("Cooldown", "$parentCooldown", buttonSpec3, "CooldownFrameTemplate")
buttonSpec3.cooldown = spec3CD
spec3CD:SetAllPoints(true)
spec3CD:Hide()

myVariables:SetScript("OnEvent", myVariables_OnEvent)

--- end cooldowns	----------------------------------------------------------


local function FindPetSpec()
		local currentSpec = GetSpecialization(false,true)
		if currentSpec == 1 then 
			talent = "Ferocity"
		elseif currentSpec == 2 then 
			talent = "Tenacity"
		elseif currentSpec == 3 then 
			talent = "Cunning"
		else 
			talent = "Unknown" 
		end

		
end	
local function SetMySkills2() --find pet data and retrieve attacks --part 2 of 2  --call SetMyMacros() GetSpellBookIDs()
	if pet_spec==nil or pet_spec=="Unknown" then
		local currentSpec = GetSpecialization(false,true)
		if currentSpec == 1 then 
			talent = "Ferocity"
		elseif currentSpec == 2 then 
			talent = "Tenacity"
		elseif currentSpec == 3 then 
			talent = "Cunning"
		else 
			talent = "Unknown" 
		end
	end	
		
		pet_basic_cooldown = PET_BASIC_CD[pet_family]
		pet_growl_cooldown = PET_ABILITY_CD["growl"]
		pet_cower_cooldown = PET_ABILITY_CD["cower"]
		pet_special_cooldown = PET_SPECIAL_CD[pet_family]
		pet_exotic_cooldown = PET_EXOTIC_CD[pet_family]
		pet_bonus_cooldown = PET_BONUS_CD[pet_family]
		pet_spec_1_cooldown = PET_SPEC1_CD[pet_spec]
		pet_spec_2_cooldown = PET_SPEC2_CD[pet_spec]
		pet_spec_3_cooldown = PET_SPEC3_CD[pet_spec]

		pet_basic_spellID = PET_BASIC_SPELLID[pet_family]
		pet_growl_spellID = PET_ABILITY_SPELLID["growl"]
		pet_cower_spellID = PET_ABILITY_SPELLID["cower"]
		pet_special_spellID = PET_SPECIAL_SPELLID[pet_family]
		pet_exotic_spellID = PET_EXOTIC_SPELLID[pet_family]
		pet_bonus_spellID = PET_BONUS_SPELLID[pet_family]
		pet_spec_1_spellID = PET_SPEC1_SPELLID[pet_spec]
		pet_spec_2_spellID = PET_SPEC2_SPELLID[pet_spec]
		pet_spec_3_spellID = PET_SPEC3_SPELLID[pet_spec]
		


--	print("SetMySkills2() - pet_spec: ", pet_spec)
--	print("SetMySkills2() - pet_family: ", pet_family)
--	print("SetMySkills2() - pet_spec_1_spellID: ", pet_spec_1_spellID)
--	print("SetMySkills2() - pet_spec_1_cooldown: ", pet_spec_1_cooldown)

--create macros and attach to buttons
	SetMyMacros()

--get spellbook IDs
	GetSpellBookIDs()
	
--resize bar for what attacks pet has
ManageButtons()

end

local function SetMySkills1() --find pet data and retrieve attacks --part 1 of 2 --call SetMySkill2()
	if pet_spec==nil or pet_spec=="Unknown" then
		local currentSpec = GetSpecialization(false,true)
		if currentSpec == 1 then 
			talent = "Ferocity"
		elseif currentSpec == 2 then 
			talent = "Tenacity"
		elseif currentSpec == 3 then 
			talent = "Cunning"
		else 
			talent = "Unknown" 
		end
	end	
	
	
-- pet attacks
	if doIhaveApet then
		pet_basic_attack = PET_BASIC[pet_family]
		pet_growl_attack = PET_ABILITY["growl"]
		pet_cower_attack = PET_ABILITY["cower"]
		pet_special_attack = PET_SPECIAL[pet_family]
		pet_exotic_attack = PET_EXOTIC[pet_family]
		pet_bonus_attack = PET_BONUS[pet_family]
		pet_spec_1_attack = PET_SPEC1[pet_spec]
		pet_spec_2_attack = PET_SPEC2[pet_spec]
		pet_spec_3_attack = PET_SPEC3[pet_spec]
			
		pet_basic_name = PET_BASIC_NAME[pet_family]
		pet_growl_name = PET_ABILITY_NAME["growl"]
		pet_cower_name = PET_ABILITY_NAME["cower"]
		pet_special_name = PET_SPECIAL_NAME[pet_family]
		pet_exotic_name = PET_EXOTIC_NAME[pet_family]
		pet_bonus_name = PET_BONUS_NAME[pet_family]
		pet_spec_1_name = PET_SPEC1_NAME[pet_spec]
		pet_spec_2_name = PET_SPEC2_NAME[pet_spec]
		pet_spec_3_name = PET_SPEC3_NAME[pet_spec]

	end
	
--	print("SetMySkills1() - pet_spec: ", pet_spec)
--	print("SetMySkills1() - pet_family: ", pet_family)
	
SetMySkills2()
	
end

local function UpdatePets() -- gather current pet data --call	 UpdateMyIcons() UpdateMacro() 	UpdatePetCallBar()	 SetMySkills()

	if InCombatLockdown() then return end --freeze updating if in combat
		level = UnitLevel("player")
	local isHunterPet = HasPetUI() -- check if pet is hunter pet
	doIhaveApet = isHunterPet

	petBuff = UnitBuff("pet", "Prowl") or UnitBuff("pet", "Spirit Walk")

	--  get info of current pet  --
	local petname = UnitName("pet"); 
	local petfamily= UnitCreatureFamily("pet")
	local talent 

	local currentSpec = GetSpecialization(false,true)
		if currentSpec == 1 then 
			talent = "Ferocity"
		elseif currentSpec == 2 then 
			talent = "Tenacity"
		elseif currentSpec == 3 then 
			talent = "Cunning"
		else 
			talent = "Unknown" 
		end

--set data for current pet
	pet_name = petname
	pet_family = petfamily
	pet_spec = talent
	
--	print("UpdatePets() - pet_spec: ", pet_spec)
--	print("UpdatePets() - pet_family: ", pet_family)
--find attacks
	SetMySkills1()	
	
--call update for icons
	UpdateMyIcons()
	
--call update for macros
	UpdateMacro()			
		
end

local function UpdateBars() --apply button alignments --call nil
--control bar buttons
buttonGrowl:SetPoint(ControlBar_ButtonPrevious, NewControlBar, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonBasic:SetPoint(ControlBar_ButtonPrevious, buttonGrowl, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonSpecial:SetPoint(ControlBar_ButtonPrevious, buttonBasic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonExotic:SetPoint(ControlBar_ButtonPrevious, buttonSpecial, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonBonus:SetPoint(ControlBar_ButtonPrevious, buttonExotic, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonCower:SetPoint(ControlBar_ButtonPrevious, buttonBonus, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonSpec1:SetPoint(ControlBar_ButtonPrevious, buttonCower, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonSpec2:SetPoint(ControlBar_ButtonPrevious, buttonSpec1, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);
buttonSpec3:SetPoint(ControlBar_ButtonPrevious, buttonSpec2, ControlBar_ButtonSide, ControlBar_ButtonX, ControlBar_ButtonY);

UpdatePets()
end

local function RealignButtons() --set button alignment --call UpdateBars()

	if ControlBar_Horiz==false then
		ControlBar_ButtonX = -30
		ControlBar_ButtonY = -33
		ControlBar_ButtonPrevious = "LEFT"
		ControlBar_ButtonSide = "RIGHT"
	elseif ControlBar_Horiz==true then
		ControlBar_ButtonX = 3
		ControlBar_ButtonY = 0
		ControlBar_ButtonPrevious = "LEFT"
		ControlBar_ButtonSide = "RIGHT"
	end
	
	if ControlBar_Enabled == false then
		NewControlBar:Hide()
	elseif (not doIhaveApet) and (ControlBar == true) then		
		NewControlBar:Show()
	end
		if BarsLocked==false then
		NewControlBar:Show()
	elseif BarsLocked==true and ControlBar_Enabled == false then
		NewControlBar:Hide()
	elseif (not doIhaveApet) and (ControlBar_Enabled == true) and BarsLocked==true then		
		NewControlBar:Show()
	end
UpdateBars()
end

local function UnlockBars() --unlocks bars --call UpdatePets()
	BarsLocked=false
	NewControlBar:Show()
	NewControlBarMover:Show()
	NewControlBarMover:SetMovable(true)
	NewControlBarMover:EnableMouse(true)

	ManageButtons()
	UpdatePets()
end
local function LockBars() --locks bars --call UpdatePets()
	BarsLocked=true
	NewControlBarMover:Hide()
	NewControlBarMover:SetMovable(false)
	NewControlBarMover:EnableMouse(false)
	local xOffset, yOffset = NewControlBarMover:GetPoint()
	ControlBar_PosX = xOffset
	ControlBar_PosY = yOffset

		if (doIhaveApet) and (ControlBar_Enabled == true) then	
		NewControlBar:Show()
		
	elseif (not doIhaveApet) or (ControlBar_Enabled == false) then	
		NewControlBar:Hide()
	end		
	
	ManageButtons()
	UpdatePets()
end

function YavanaeLockBars()
	LockBars()
end
function YavanaeUnlockBars()
	UnlockBars()
end
function YavanaeHideBars()
NewCommandBar:Hide()
NewControlBarMover:Hide()
ControlBar_Enabled=false
end
function YavanaeUnhideBars()
NewControlBar:Show()
NewControlBarMover:Show()
ControlBar_Enabled=true
end

local function Force() -- /npb force command  
RealignButtons()
end

--button:RegisterEvent("PLAYER_LOGIN")
button:RegisterEvent("PLAYER_ENTERING_WORLD")
button:RegisterEvent("PET_STABLE_CLOSED")
button:RegisterEvent("NewPetBar_LOADED")
button:RegisterUnitEvent("UNIT_PET", "player")
button:SetScript("OnEvent", function(self, event, ...)
	self[event](self, ...)
end)


local timer = 0
local delay = 5
local runDelay = true



local function OnUpdate(self, elapsed) --call UpdatePets()
	--print("delayed onupdate called")
	timer = timer + elapsed
	if ( timer >= delay ) and runDelay==true then
			timer = 0
	--		print("delayed onupdate - delay passed")
	--		print(elapsed)
RealignButtons()
--			print("delayed onupdate - delay and rundelay passed")
			if ( pet_spec_3_spellID == nil ) then
				runDelay=false
--				print("delayed onupdate fired - nil spell id")
				UpdatePets()
			else
				runDelay=false
--				print("delayed onupdate fired - nonnil spell id")
			--	UpdatePets()
			end
	end
	
	
	

	
end

function button:PLAYER_ENTERING_WORLD()	  --call UpdatePets() RealignButtons()
	-- We only care about this event the first time it fires, so we unregister the event and nil out this method
	self:UnregisterEvent("PLAYER_ENTERING_WORLD")
	self.PLAYER_ENTERING_WORLD = nil
		
	if not UpdatePets() then -- If we don't have pet data, start the OnUpdate script to try again every 0.5 seconds
--		print("timed update pets fired")
		self:SetScript("OnUpdate", OnUpdate)
--		buttonGrowl:SetScript("OnUpdate", YavAutoCastShine_OnUpdate)
	end

DEFAULT_CHAT_FRAME:AddMessage("Yavanae's Pet Control Bar Loaded! Type /ypbctrl for help", 0.66, 0.1, 0.1, 2385, 5)	
		level = UnitLevel("player")
--		print("button player entering world fired")

	RealignButtons()
runDelay=true
end

function button:NewPetBar_LOADED()  --call UpdatePets()
--	print("button yav pet bar loaded event message")
RealignButtons()
end

function button:PET_STABLE_CLOSED()  --call UpdatePets()
--		print("button pet stables closed fired")
		runDelay=true

end

function button:UNIT_PET(unit) -- unit will always be "player"  --call UpdatePets()
--		print("button unit pet fired")

	runDelay=true

end


SlashCmdList["yavpetbarctrl"] = function(msg)
	msg = string.upper(msg)
	if msg=="UNLOCK" then
		UnlockBars()
		print("Control Bar is now being unlocked")
		
	elseif msg=="LOCK" then
		LockBars()
		print("Control Bar is now being locked")
	
	elseif msg=="TEST" then
		Test()	
			
	elseif msg=="VERT" then
		ControlBar_Horiz = false
		RealignButtons()
		print("Control Bar is now Vertical")
		
	elseif msg=="HORIZ" then
		ControlBar_Horiz = true
		RealignButtons()
		print("Control Bar is now Horizontal")
			
	elseif msg=="HIDE" then
		CommandBar_Enabled = false	
		RealignButtons()
		print("Command Bar is now disabled")
		
	elseif msg=="HIDE" then
		ControlBar_Enabled = false
		RealignButtons()
		print("Control Bar is now disabled")
		
	elseif msg=="SHOW" then
		ControlBar_Enabled = true
		RealignButtons()
		print("Control Bar is now enabled")
		
	else
		DEFAULT_CHAT_FRAME:AddMessage("|cff007fffYavanae's Pet Control Bar: |cff00ff00Commands are:\n|r/ypbctrl unlock|cff00ff00 (allows bars to be moved)\n|r/ypbctrl lock|cff00ff00 (locks bars so they cannot be moved)\n|r/ypbctrl horiz|cff00ff00 (alligns pet attack bar horizontally)\n|r/ypbctrl vert|cff00ff00 (alligns pet attack bar vertically)\n|r/ypbctrl show|cff00ff00 (enables the pet attack bar)\n|r/ypbctrl hide|cff00ff00 (disables the pet attack bar)|r")
	end
end
SLASH_yavpetbarctrl1 = "/ypbctrl"
SLASH_yavpetbarctrl2 = "/yavpetbarctrl"
  Reply With Quote