WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   Macro button problem (https://www.wowinterface.com/forums/showthread.php?t=59672)

minstril43 09-13-23 03:09 PM

Macro button problem
 
Hi.

Until today I was having no problems with the following button code:

Code:

local buttonBattlePetHeal = CreateFrame('button', 'BattlePetHeal', nil, 'SecureActionButtonTemplate')
buttonBattlePetHeal:SetAttribute('type', 'macro')
buttonBattlePetHeal:SetScript('PreClick', function(self)

    -- check if the character is in combat
    if InCombatLockdown() then
        -- character is in combat, end the function
        self:SetAttribute('macrotext', '')
        return
    -- else - character isn't in combat, do nothing
    end
   
    -- check if any pet in the currently loaded team is injured

    local petID, petHealth, petMaxHealth = 0
    local petInjured = false

    for i = 1, 3 do
        -- get Id for current pet
        petID = C_PetJournal.GetPetLoadOutInfo(i)
        if (petID ~= 0) then
            -- pet has an ID, check if it is injured (health < maxHealth)
            petHealth, petMaxHealth = C_PetJournal.GetPetStats(petID)
            if petHealth < petMaxHealth then
                -- pet is injured, set injured flag to true and stop the loop
                petInjured = true
                break
            -- else - pet is not injured, do nothing and continue the loop
            end
        -- else - no petID found, do nothing and continue the loop
        end
        -- reset pet attriibutres and continue the loop
        petID, petHealth, petMaxHealth = 0
    end

    -- if no pets are injured, print a message letting the player know and end the function

    -- check if the injured flag is still false
    if not petInjured then
        -- print a message telling the player that all pets in the team are at full health
        DEFAULT_CHAT_FRAME:AddMessage('All pets in the team are at full health.', 1, 1, 0)
        -- end the function
        self:SetAttribute('macrotext', '')
        return
    end
   
    -- at this point at least one pet in the current team is injured

    -- if Revive Battle Pets is off cooldown then cast it.
    -- otherwise, if a Battle Pet Bandage is available then use it.

    -- check if Revive Battle Pets is off cooldown
    if (GetSpellCooldown(125439) == 0) then
        -- Revive Battle Pets is off cooldown, cast it
        self:SetAttribute('macrotext', '/use Revive Battle Pets')
        return
    else
        -- Revive Battle Pets is on cooldown, check if any Battle Pet Bandages are available
        if (GetItemCount(86143) ~= 0) then
            -- a Battle Pet Bandage is available, use it
            self:SetAttribute('macrotext', '/use item:86143')
            return
        else
            -- Battle Pet Bandages are not available, print a message telling the player that
            DEFAULT_CHAT_FRAME:AddMessage('You have no Battle Pet Bandages!', 1, 1, 0)
            -- end the function
            self:SetAttribute('macrotext', '')
            return
        end
    end

    -- end the function
    self:SetAttribute('macrotext', '')
    return

end)

I created a macro in WoW to "/click BattlePetHeal" and, when it was working, it would, if there was a injured pet in the current team, use the Revive Battle Pets spell (if it wasn't on cooldown) or a Battle Pet Bandage instead.

Today, however, when I click the macro button, nothing happens. I've used DEFAULT_CHAT_FRAME:AddMessage messages to confirm the code is running correctly. It's like the "self:SetAttribute('macrotext', '/use Revive Battle Pets')" and "self:SetAttribute('macrotext', '/use item:86143')" aren't working or the 'macrotext' is being reset to ''.

I've confirmed the two macrotexts work in game.

I'm totally confused. :I

Any help appreciated. Thanks in advance.


All times are GMT -6. The time now is 06:57 PM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI