vanilla-wow-addons – Rev 1
?pathlinks?
--[[
BuffTimers: Mini timers for the top right buff icons
copyright 2004 by Telo
- Displays small timer text below each of the top right buff and debuff icons
]]
--------------------------------------------------------------------------------------------------
-- Local variables
--------------------------------------------------------------------------------------------------
-- Function hooks
local lOriginal_BuffButton_Update;
local lOriginal_BuffButton_OnUpdate;
-- Track whether we've moved the buff buttons yet or not
local lMovedButtons;
--------------------------------------------------------------------------------------------------
-- Internal functions
--------------------------------------------------------------------------------------------------
local function lSetTimeText(button, time)
local d, h, m, s;
local text;
if( time <= 0 ) then
text = "";
elseif( time < 3600 ) then
d, h, m, s = ChatFrame_TimeBreakDown(time);
text = format("%02d:%02d", m, s);
else
text = "1 hr+";
end
button:SetText(text);
end
local function lGetField(name)
local s, e, number = string.find(name, "BuffButton(%d+)");
return getglobal("BuffTimer"..number.."Time");
end
--------------------------------------------------------------------------------------------------
-- OnFoo functions
--------------------------------------------------------------------------------------------------
function BuffTimers_OnLoad()
-- Hook the button functions we need to override
lOriginal_BuffButton_Update = BuffButton_Update;
BuffButton_Update = BuffTimers_BuffButton_Update;
lOriginal_BuffButton_OnUpdate = BuffButton_OnUpdate;
BuffButton_OnUpdate = BuffTimers_BuffButton_OnUpdate;
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("Telo's BuffTimers AddOn loaded");
end
UIErrorsFrame:AddMessage("Telo's BuffTimers AddOn loaded", 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
end
function BuffTimers_OnShow()
-- Move the buff buttons slightly to accomodate our timer text
if( not lMovedButtons ) then
local iButton;
getglobal("BuffButton8"):SetPoint("TOP", "BuffButton0", "BOTTOM", 0, -11);
for iButton = 9, 15 do
getglobal("BuffButton"..iButton):SetPoint("RIGHT", "BuffButton"..(iButton - 1), "LEFT", -5, 0);
end
getglobal("BuffButton16"):SetPoint("TOP", "BuffButton8", "BOTTOM", 0, -11);
for iButton = 17, 23 do
getglobal("BuffButton"..iButton):SetPoint("RIGHT", "BuffButton"..(iButton - 1), "LEFT", -5, 0);
end
lMovedButtons = 1;
end
end
function BuffTimers_BuffButton_Update()
lOriginal_BuffButton_Update();
if( this.untilCancelled ) then
lGetField(this:GetName()):SetText("");
end
end
function BuffTimers_BuffButton_OnUpdate()
lOriginal_BuffButton_OnUpdate();
if( BuffFrameUpdateTime <= 0 ) then
lSetTimeText(lGetField(this:GetName()), GetPlayerBuffTimeLeft(this.buffIndex));
end
end