vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--SM_VARS.macroTip1 = 1; -- for spell, item
--SM_VARS.macroTip2 = 1; -- for macro code

oldActionButton_SetTooltip=ActionButton_SetTooltip;
function ActionButton_SetTooltip()
        oldActionButton_SetTooltip();
        SM_ActionButton_SetTooltip();
end

function SM_ActionButton_SetTooltip()
        local actionid=ActionButton_GetPagedID(this);
        local macroname=GetActionText(actionid); --or getglobal(this:GetName().."Name"):GetText();
        if ( macroname ) then
                local macro, _, body = GetMacroInfo(GetMacroIndexByName(macroname));
                
                -- for supermacros
                local superfound = SM_ACTION[actionid];
                if ( superfound ) then
                        macro,_,body=GetSuperMacroInfo(superfound);
                        GameTooltipTextLeft1:SetText(macro);
                        GameTooltip:Show();
                end

                if ( SM_VARS.macroTip1==1 ) then
                        local actiontype, spell = SM_GetActionSpell(macro, superfound);
                        if ( actiontype=="spell" ) then
                                local id, book = SM_FindSpell(spell);
                                GameTooltip:SetSpell(id, book);
                                local s, r = GetSpellName(id, book);
                                if ( r ) then
                                        GameTooltipTextRight1:SetText("|cff00ffff"..r.."|r");
                                        GameTooltipTextRight1:Show();
                                        GameTooltip:Show();
                                end
                                return;
                        elseif ( actiontype=="item" ) then
                                local id, book = FindItem(spell);
                                if ( book ) then
                                        GameTooltip:SetBagItem(id, book);
                                else
                                        GameTooltip:SetInventoryItem( 'player', id);
                                end
                                return;
                        end
                end
                if ( SM_VARS.macroTip2 == 1 ) then
                        -- show macro code
                        if ( not GameTooltipTextLeft1:GetText() ) then return; end
                        body = gsub(body, "\n$", "");
                        GameTooltipTextLeft1:SetText( "|cff00ffff"..macro.."|r");
                        GameTooltipTextLeft2:SetText("|cffffffff"..body.."|r");
                        GameTooltipTextLeft2:Show();
                        GameTooltipTextLeft1:SetWidth(284);
                        GameTooltipTextLeft2:SetWidth(284);
                        GameTooltip:SetWidth(300);
                        GameTooltip:SetHeight( GameTooltipTextLeft1:GetHeight() + GameTooltipTextLeft2:GetHeight() + 23);
                        GameTooltipTextLeft2:SetNonSpaceWrap(true);
                        return;
                end
        end
        -- brighten rank text on all tooltips
        if ( GameTooltipTextRight1:GetText() ) then
                local t = GameTooltipTextRight1:GetText();
                GameTooltipTextRight1:SetText("|cff00ffff"..t.."|r");
        end
        -- show crit info for Attack
        if ( GameTooltipTextLeft1:GetText()=="Attack" ) then
                id, book = FindSpell("Attack","");
                GameTooltip:SetSpell(id, book);
                GameTooltip:Show();
        end
end

function SM_ActionButton_OnLeave()
        this.updateTooltip=nil;
        GameTooltipTextLeft2:SetWidth(100);
        GameTooltipTextLeft2:SetText("");
        GameTooltip:Hide();
end

local oldGetActionCooldown = GetActionCooldown;
function GetActionCooldown( actionid )
        -- start, duration, enable
        local macro=GetActionText(actionid);
        if ( macro and SM_VARS.checkCooldown==1 ) then
                local name, icon, body = GetMacroInfo(GetMacroIndexByName(macro));
                --  for supermacros
                local superfound = SM_ACTION[actionid];
                if ( superfound ) then
                        name,icon,body=GetSuperMacroInfo(superfound);
                end

                local macroname, pic;
                if ( this ) then
                        macroname=getglobal(this:GetName().."Name");
                        if ( macroname ) then
                                macroname:SetText(name);
                        end
                        pic = getglobal(this:GetName().."Icon");
                        if ( pic ) then
                                pic:SetTexture(icon);
                        end
                end

                local actiontype, spell, texture = SM_GetActionSpell(name, superfound);
                if ( actiontype=="spell") then
                        if ( SM_VARS.replaceIcon==1 and texture and pic) then
                                pic:SetTexture(texture);
                        end
                        local id, book = SM_FindSpell(spell);
                        return GetSpellCooldown( id, book);
                elseif ( actiontype=="item") then
                        if ( SM_VARS.replaceIcon==1 and texture and pic) then
                                pic:SetTexture(texture);
                        end
                        local id, book, texture, count = FindItem(spell);
                        if ( count>1 and macroname ) then
                                macroname:Hide();
                                getglobal(this:GetName().."Count"):SetText(count);
                        elseif ( macroname ) then
                                macroname:Show();
                                getglobal(this:GetName().."Count"):SetText("");
                        end
                        if ( book ) then
                                return GetContainerItemCooldown(id, book);
                        elseif ( id ) then
                                return GetInventoryItemCooldown('player', id);
                        end
                end
        end
        return oldGetActionCooldown( actionid );
end

function FindFirstSpell( text )
        if not text then return nil end;
        local body = text;
        if (ReplaceAlias and ASFOptions.aliasOn) then
                -- correct aliases
                body = ReplaceAlias(body);
        end
        local id, book, texture, spell;
        while ( string.find(body, "CastSpellByName") ) do
                spell = gsub(body,'^.-CastSpellByName.-%(.-(["\'])(.-)%1.*$','%2');
                id, book = SM_FindSpell(spell);
                if ( id ) then
                        texture = GetSpellTexture(id, book);
                        break;
                end
                body = gsub(body, "CastSpellByName","",1);
        end
        if ( not id and string.find(body,"/cast") ) then
                        spell = gsub(body,"^.*/cast%s*([%w'%(%) ]+)[\n]?%s*.*$","%1");
                        id, book = SM_FindSpell(spell);
                        if ( id and book ) then
                                texture = GetSpellTexture(id, book);
                        end
        end
        if ( not id ) then
                while ( string.find(body, "[%p%s]cast%(") ) do
                        spell = gsub(body,'^.-[%p%s]-cast%(.-(["\'])(.-)%1.*$','%2');
                        id, book = SM_FindSpell(spell);
                        if ( id ) then
                                texture = GetSpellTexture(id, book);
                                break;
                        end
                        body = gsub(body, "[%p%s]cast%(","", 1);
                end
        end
        if ( not id ) then
                while ( string.find(body, "CastSpell")) do
                        spell = gsub(body,'^.-CastSpell.-%(%s-(.-)%s*%).*$','%1');
                        local _,_,spellid = strfind(spell,"^(%d+).*");
                        if ( spellid ) then
                                local _,_,spellbook=strfind(spell,"^.-"..spellid..",%s*'(%a+)'%s*");
                                id=spellid;
                                book=spellbook or 'spell';
                                texture = GetSpellTexture(id, book);
                                break;
                        end
                        body = gsub(body, "CastSpell","", 1);
                end
        end
        return id, book, texture, spell;
end

function FindFirstItem( text )
        if not text then return nil end;
        local body = text;
        if (ReplaceAlias and ASFOptions.aliasOn) then
                -- correct aliases
                body = ReplaceAlias(body);
        end
        local bag, slot, texture, count, item;
        if ( strfind(body,"UseItemByName") ) then
                while ( string.find(body, "UseItemByName") ) do
                        item = gsub(body,'^.-UseItemByName.-%(.-(["\'])(.-)%1.*$','%2');
                        bag, slot, texture, count = FindItem(item);
                        if ( bag ) then
                                return bag, slot, texture, count, item;
                        end
                        body = gsub(body, "UseItemByName","", 1);
                end
        end
        if ( strfind(body,"/use") ) then
                while ( string.find(body, "/use") ) do
                        item = gsub(body,'^.-/use *(.-) *\n.*$','%1');
                        if ( item==body ) then
                                item = gsub(body,'^.-/use *(.-) *$','%1');
                        end
                        bag, slot, texture, count = FindItem(item);
                        if ( bag ) then
                                return bag, slot, texture, count, item;
                        end
                        body = gsub(body, "/use","", 1);
                end
        end
        if ( strfind(body,"use") ) then
                while ( string.find(body, "use") ) do
                        item = gsub(body,'^.-use.-%(.-(["\'])(.-)%1.*$','%2');
                        bag, slot, texture, count = FindItem(item);
                        if ( bag ) then
                                return bag, slot, texture, count, item;
                        end
                        body = gsub(body, "use","", 1);
                end
        end
        while ( strfind(body, "UseInventoryItem") ) do
                bag = gsub(body,'^.-UseInventoryItem.-(%d+)%s-%).*$','%1');
                if ( bag~=body) then
                        texture = GetInventoryItemTexture('player', bag);
                        count = GetInventoryItemCount('player', bag);
                end
                if ( texture ) then
                        item=ItemLinkToName( GetInventoryItemLink('player', bag) );
                        return bag, slot, texture, count, item;
                end
                body = gsub(body, "UseInventoryItem","", 1);
        end
        while ( strfind(body, "UseContainerItem") ) do
                bag = gsub(body,'^.-UseContainerItem.-(%d+)%s-,%s-(%d+)%s-%).*$','%1');
                slot = gsub(body,'^.-UseContainerItem.-(%d+)%s-,%s-(%d+)%s-%).*$','%2');
                if ( bag~=body and slot~=body) then
                        texture, count = GetContainerItemInfo(bag, slot);
                end
                if ( bag~=body and slot~=body and texture ) then
                        item=ItemLinkToName( GetContainerItemLink(bag, slot) );
                        return bag, slot, texture, count, item;
                end
                body = gsub(body, "UseContainerItem","", 1);
        end
end