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