vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
Quutar:


To determine what pet is out:

First check if we are a Warlock (probably on Init).

On press, check:

if (UnitCreatureFamily("pet") == ServitudeLocalization.Pet4) then

You might also want to check if the pet is a Doomguard and use Dispel Magic for that one.


In my Localization file (not sure if Decursive works for French and German clients like Servitude did).




if (GetLocale() == "frFR") then

        ServitudeLocalization = 

        {

                Class = "D\195\169moniste";



                Pet4 = "Felhunter";

                Pet5 = "Doomguard";



                Magic5 = "Festin magique";



                Magic10 = "Dissiper Magie";



                Buff11 = "Parano\195\175a";

                Bufftype = "Magie";



        }       

elseif (GetLocale() == "deDE") then     

        ServitudeLocalization = 

        {

                Class = "Hexenmeister";



                Pet4 = "Teufelsjäger";

                Pet5 = "Doomguard";



                Magic5 = "Magie verschlingen";



                Magic10 = "Magiebannung";



                Buff11 = "Paranoia";

                Bufftype = "Magie"; 

                
        }

else 

        ServitudeLocalization = 

        {

                Class = "Warlock";



                Pet4 = "Felhunter";

                Pet5 = "Doomguard";



                Magic5 = "Devour Magic";



                Magic10 = "Dispel Magic";





                Buff11 = "Paranoia";

                Bufftype = "Magic";



        }

end




What I did was when PetActionBar_Update occured, I built an Array that put the Pet Action slots in with it's name. I then called that action by name from the array and it returned the slot..

ie


function Servitude_PetActionBar_Update()

-- Call original function

        Original_PetActionBar_Update();

        local DebugMsg = false;

        Pet_Action_List = {};

-- Find the #&%&on, apply the autocast

        local i;

        for i=1, NUM_PET_ACTION_SLOTS, 1 do

                local name, subtext, texture, isToken, isActive, autoCastAllowed, autoCastEnabled = GetPetActionInfo(i);

                if name ~= nil then

                        if (not PetBarLoaded) then

                                PetBarLoaded = true;

                        end     

                        Pet_Action_List[name] = i;

                        ServitudeMessage(DebugMsg, "Pet_Action_List: added "..name.."as index "..i);

                else return

                end     

        end

end     




This allowed you to CastPetActionByName(ServitudeLocalization.Magic5) which would check the cooldown prior to use. Since this is only happening on the press of a #&%&on, you could check the cooldown at the time of the press too:


function CastPetActionByName (inputname)

        if IsPlayerMounted() or (not GetPetActionsUsable()) then

--      if (not GetPetActionsUsable()) then

                return;

        end     

        if Pet_Action_List[inputname] ~= nil then

                local startTime, duration, enabled = GetPetActionCooldown(Pet_Action_List[inputname]);

                if startTime == 0 and duration == 0 and enabled ~= 0 then                       

                        CastPetAction(Pet_Action_List[inputname]);

                end                     

        else

                local i;

                Pet_Action_List = {};

                for i=1, NUM_PET_ACTION_SLOTS, 1 do

                        local name, subtext, texture, isToken, isActive, autoCastAllowed, autoCastEnabled = GetPetActionInfo(i);

                        if name ~= nil then

                                Pet_Action_List[name] = i;

                        end                     

                        if (name == inputname) then

                                local startTime, duration, enabled = GetPetActionCooldown(i);

                                if startTime == 0 and duration == 0 and enabled ~= 0 then                                       

                                        CastPetAction(i);

                                end

                        end

                end

        end     

end




EDIT: I've trimmed out things like Making pet actions auto-castable. Next patch, you only need to check GetPetActionsUsable - it now returns false if mounted.

[ post edited by Graguk ]


if (PetBarLoaded and not PetSpellsInitialized) then

                Build_Pet_Action_List();

                return;

        end



and


function Build_Pet_Action_List()

        local i;

        Pet_Action_List = {};

        for i=1, NUM_PET_ACTION_SLOTS, 1 do

                local name, subtext, texture, isToken, isActive, autoCastAllowed, autoCastEnabled = GetPetActionInfo(i);

                if name ~= nil then

                        Pet_Action_List[name] = i;

                        if not PetSpellsInitialized then

                                PetSpellsInitialized = true;

                        end

                end             

        end

end




On the UNIT_PET event if it's the player:



elseif (event == "UNIT_PET" and arg1 == "player") then

                PetBarLoaded = false;

                PetSpellsInitialized = false;

end

Generated by GNU Enscript 1.6.5.90.