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