--]]
local checkForTargetDeath = 0;
local checkForTarget = nil;
local checkForSpell = 0;
local targetDebuffs = {};
local checkForSpellFail = nil;
local checkForSpellName = nil;
local trapTimer = nil;
local sht_init = false;
local dimin = {};
function SHunterTimers_OnLoad()
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("SPELLCAST_STOP");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE");
this:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER");
this:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE");
this:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS");
this:RegisterEvent("CHAT_MSG_SPELL_PET_DAMAGE");
this:RegisterEvent("SPELLCAST_START");
--this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("CHAT_MSG_MONSTER_EMOTE");
this:RegisterEvent("SPELLCAST_FAILED");
this:RegisterEvent("SPELLS_CHANGED");
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage("Sorren's Hunter Timers Loaded", 1, 0, 0 );
end
SlashCmdList["SHUNTERTIMERS"] = function (msg)
SHunterTimers_SlashCmd(msg);
end
SLASH_SHUNTERTIMERS1 = "/shuntertimers";
SLASH_SHUNTERTIMERS2 = "/sht";
targetDebuffs["numDebuffs"] = 0;
end
function SHunterTimers_SlashCmd(msg)
if( msg == "showvars" ) then
DEFAULT_CHAT_FRAME:AddMessage(numBars, 1, 0, 0 );
return;
end
if( msg == "menu" ) then
SHunterTimers_ShowOptions();
return;
end
if( msg == "reset" ) then
SHTvars["numBars"] = 0;
for num = 1, 11, 1 do
frame = getglobal("SHunterTimersStatus"..num);
--frame:SetAlpha( 0 );
frame.endTime = 0;
end
return;
end
if( msg == "on" ) then
if( SHTvars["on"] ) then
DEFAULT_CHAT_FRAME:AddMessage("SHT already on", 1, 0, 0);
return;
else
UseAction = SHunterTimers_OnUseAction;
CastSpellByName = SHunterTimers_OnCastSpellByName;
CastSpell = SHunterTimers_OnCastSpell;
SHTvars["on"] = true;
DEFAULT_CHAT_FRAME:AddMessage("SHT on", 1, 0, 0);
return;
end
elseif( msg == "off" ) then
if( SHTvars["on"] ) then
UseAction = SHunterTimers_Real_UseAction;
CastSpellByName = SHunterTimers_Real_CastSpellByName;
CastSpell = SHunterTimers_Real_CastSpell;
SHTvars["on"] = false;
DEFAULT_CHAT_FRAME:AddMessage("SHT off", 1, 0, 0);
return;
else
DEFAULT_CHAT_FRAME:AddMessage("SHT not on", 1, 0, 0);
return;
end
elseif( string.find( msg, "setbgcolor" ) ) then
for r, g, b, a in string.gfind( msg, "setcolor (%d+) (%d+) (%d+) (%d+)" ) do
SHTvars["bg"].r = r/10;
SHTvars["bg"].g = g/10;
SHTvars["bg"].b = b/10;
SHTvars["bg"].a = a/10;
SHunterTimersFrame:SetBackdropColor( r/10, g/10, b/10, a/10 );
end
return;
elseif( string.find( msg, "aimed" ) )then
if( string.find(msg, "on" ) )then
SHTvars["Aimed Shot"] = true;
DEFAULT_CHAT_FRAME:AddMessage("SHT: Aimed Shot Casting Bar on");
elseif( string.find( msg, "off" ) ) then
SHTvars["Aimed Shot"] = false;
DEFAULT_CHAT_FRAME:AddMessage("SHT: Aimed Shot Casting Bar off");
else
if( SHTvars["Aimed Shot"] ) then
SHTvars["Aimed Shot"] = false;
DEFAULT_CHAT_FRAME:AddMessage("SHT: Aimed Shot Casting Bar off");
else
SHTvars["Aimed Shot"] = true;
DEFAULT_CHAT_FRAME:AddMessage("SHT: Aimed Shot Casting Bar on");
end
end
elseif( string.find(msg, "delay" ) ) then
for ms in string.gfind(msg, "delay (%d+)") do
SHTvars["aimeddelay"] = ms;
DEFAULT_CHAT_FRAME:AddMessage("Delay set to "..ms.."ms");
end
elseif( string.find(msg, "scale" ) ) then
for scale in string.gfind( msg, "scale (%d+)" ) do
if( (scale/100) < 0.1 ) then
scale = 10;
end
scale = scale * UIParent:GetScale();
SHTvars["scale"] = scale/100;
end
SHunterTimersFrame:SetScale( SHTvars["scale"] );
for i=1, 11 do
getglobal("SHunterTimersStatus"..i):SetScale( SHTvars["scale"] );
end
elseif( string.find(msg, "down") ) then
SHTvars["down"] = true;
SHunterTimersFrame:ClearAllPoints();
SHunterTimersFrame:SetPoint( "TOPLEFT", "SHunterTimersAnchor", "BOTTOMRIGHT" );
DEFAULT_CHAT_FRAME:AddMessage("SHT: Growing down");
elseif( string.find(msg, "up" ) ) then
SHTvars["down"] = false;
SHunterTimersFrame:ClearAllPoints();
SHunterTimersFrame:SetPoint( "BOTTOMLEFT", "SHunterTimersAnchor", "TOPRIGHT" );
DEFAULT_CHAT_FRAME:AddMessage("SHT: Growing up");
elseif( msg == "unlock" ) then
SHTvars["locked"] = false;
SHunterTimersAnchor:Show();
elseif( msg == "lock" ) then
SHTvars["locked"] = true;
SHunterTimersAnchor:Hide();
elseif( string.find(msg, "colorchange" ) ) then
for on in string.gfind(msg, "colorchange (%a+)") do
if( on == "on" ) then
SHTvars["colorchange"] = true;
elseif( on == "off" ) then
SHTvars["colorchange"] = false;
end
if( on == "on") or ( on == "off" ) then
DEFAULT_CHAT_FRAME:AddMessage( "SHT: Colorchange is: "..on);
end
end
elseif( string.find( msg, "barcolor" ) ) then
for r, g, b in string.gfind(msg, "barcolor ([%d.]+) ([%d.]+) ([%d.]+)") do
local red, green, blue = unpack( SHTvars["barstartcolor"] );
SHTvars["barstartcolor"][1] = r;
SHTvars["barstartcolor"][2] = g;
SHTvars["barstartcolor"][3] = b;
local rd, gd, bd = unpack( SHTvars["bardelta"] );
red = rd + red;
blue = bd + blue;
green = gd + green;
red = red - r;
green = green - g;
blue = blue - b;
SHTvars["bardelta"][1] = red;
SHTvars["bardelta"][2] = green;
SHTvars["bardelta"][3] = blue;
DEFAULT_CHAT_FRAME:AddMessage( "SHT: Barcolor set to: "..SHTColor(r, g, b)..r..", "..g..", "..b.."|r");
end
elseif( string.find( msg, "barendcolor" ) ) then
for red, green, blue in string.gfind(msg, "barendcolor ([%d.]+) ([%d.]+) ([%d.]+)") do
local r, g, b = unpack( SHTvars["barstartcolor"] );
r = red - r;
g = green - g;
b = blue - b;
SHTvars["bardelta"][1] = r;
SHTvars["bardelta"][2] = g;
SHTvars["bardelta"][3] = b;
DEFAULT_CHAT_FRAME:AddMessage( "SHT: Barendcolor set to: "..SHTColor(red, green, blue)..red..", "..green..", "..blue.."|r");
end
elseif( string.find( msg, "flash" ) ) then
for flash in string.gfind( msg, "flash (%d+)" ) do
flash = flash * 1;
SHTvars["flash"] = flash;
if( flash == 0 ) then
DEFAULT_CHAT_FRAME:AddMessage("SHT: Bar flash off");
else
DEFAULT_CHAT_FRAME:AddMessage("SHT: Bar flash set to: "..flash.." seconds");
end
end
elseif( string.find( msg, "step" ) ) then
for step in string.gfind( msg, "step ([%d.]+)" ) do
SHTvars["step"] = step
DEFAULT_CHAT_FRAME:AddMessage("SHT: Step set to: "..step);
end
elseif( msg == "resetpos" ) then
SHunterTimersAnchor:ClearAllPoints();
SHunterTimersAnchor:SetPoint("CENTER", "UIParent", "CENTER", 0, 0 );
elseif( string.find( msg, "(%a+) (%d+)" ) ) then
for cmd1, cmd2 in string.gfind( msg, "(%a+) (%d+)" ) do
--DEFAULT_CHAT_FRAME:AddMessage(cmd1.."-"..cmd2, 1, 0, 0);
SHunterTimersFrame_add( cmd2, cmd1 );
end
else
--[[
DEFAULT_CHAT_FRAME:AddMessage("Sorren's Hunter Timers v0.1");
DEFAULT_CHAT_FRAME:AddMessage("Commands: /sht");
DEFAULT_CHAT_FRAME:AddMessage("/sht on/off");
DEFAULT_CHAT_FRAME:AddMessage("/sht aimed on/off");
DEFAULT_CHAT_FRAME:AddMessage("/sht setbgcolor r g b a (where r, g, b, a are between 0 and 10)");
DEFAULT_CHAT_FRAME:AddMessage("/sht delay <time> (time is in miliseconds)");
DEFAULT_CHAT_FRAME:AddMessage("/sht scale % (/sht scale 100 = 100% scale)");
DEFAULT_CHAT_FRAME:AddMessage("/sht lock/unlock");
DEFAULT_CHAT_FRAME:AddMessage("/sht up/down");
DEFAULT_CHAT_FRAME:AddMessage("/sht barcolor r g b (where r, g, b are between 0 and 1)");
DEFAULT_CHAT_FRAME:AddMessage("/sht barendcolor r g b (where r, g, b are between 0 and 1)");
DEFAULT_CHAT_FRAME:AddMessage("/sht colorchange on/off");
DEFAULT_CHAT_FRAME:AddMessage("/sht flash <timeleft> (timeleft in seconds to flash the bar, 0 for off)");]]
for key,val in SHT_SLASH_HELP do
DEFAULT_CHAT_FRAME:AddMessage(val);
end
local statusstring = "Satus: ";
if( SHTvars["on"] ) then
statusstring = statusstring.."on ";
else
statusstring = statusstring.."off ";
end
statusstring = statusstring.."Aimed Shot Casting Bar: ";
if( SHTvars["Aimed Shot"] ) then
statusstring = statusstring.."on ";
else
statusstring = statusstring.."off ";
end
DEFAULT_CHAT_FRAME:AddMessage(statusstring);
statusstring = "Aimed Shot delay: "..SHTvars["aimeddelay"].."ms Flash time: "..SHTvars["flash"].." Step: "..SHTvars["step"];
DEFAULT_CHAT_FRAME:AddMessage(statusstring);
local r, g, b = unpack( SHTvars["barstartcolor"] );
local rd, gd, bd = unpack( SHTvars["bardelta"] );
statusstring = "Barcolor: "..SHTColor(r,g,b)..r..", "..g..", "..b.."|r Barcolorend: "..SHTColor(r+rd, g+gd, b+bd)..(r+rd)..", "..(b+bd)..", "..(g+gd).."|r";
DEFAULT_CHAT_FRAME:AddMessage(statusstring);
statusstring = "Colorchange: ";
if( SHTvars["colorchange"] ) then
statusstring = statusstring.."on";
else
statusstring = statusstring.."off";
end
statusstring = statusstring.." Growth: ";
if( SHTvars["down"] ) then
statusstring = statusstring.."down";
else
statusstring = statusstring.."up";
end
DEFAULT_CHAT_FRAME:AddMessage(statusstring);
end
--[[ bar debug stuff, uncomment if you want to be able to add your own bars via /sht Name time
for cmd1, cmd2 in string.gfind( msg, "(%a+) (%d+)" ) do
DEFAULT_CHAT_FRAME:AddMessage(cmd1.."-"..cmd2, 1, 0, 0);
SHunterTimersFrame_add( cmd2, cmd1 );
end]]
end
function SHunterTimersFrame_add( spellDuration, spellName, target )
if( SHTvars["numBars"] < 0 ) then
SHTvars["numBars"] = 0;
end
local allReadyActive = false;
local bar;
if( SHT_sfind( spellName, SHT_STING ) or string.find( spellName, SHT_CONC_SHOT ) ) then
spellDuration = spellDuration + SHTvars["shotdelay"];
end
if( spellName == SHT_INTIM ) then
--DEFAULT_CHAT_FRAME:AddMessage("Intim", 1, 1, 0 );
if( SHTvars["petIntim"] ) then
--DEFAULT_CHAT_FRAME:AddMessage("Pet Intim", 1, 1, 0 );
for num = 1, SHTvars["numBars"], 1 do
local barframe = getglobal("SHunterTimersStatus"..num);
local textBar = getglobal("SHunterTimersStatus"..num.."BarLeftText"):GetText();
--DEFAULT_CHAT_FRAME:AddMessage("Intim: "..textBar, 1, 1, 0 );
if( textBar == SHT_PET_INTIM ) then
SHTvars["petIntim"] = nil;
barframe.endTime = 0;
bar = num;
break;
end
end
end
end
if( string.find( spellName, SHT_PRIMED ) ) then
if( trapTimer ) then
for num = 1, SHTvars["numBars"], 1 do
local textBar = getglobal("SHunterTimersStatus"..num.."BarLeftText"):GetText();
--DEFAULT_CHAT_FRAME:AddMessage("Intim: "..textBar, 1, 1, 0 );
if( string.find(textBar, SHT_PRIMED ) ) then
allReadyActive = true;
bar = num;
break;
end
end
end
elseif( SHT_sfind( spellName, SHT_STING ) ) then
for num = 1, SHTvars["numBars"] do
local barframe = getglobal("SHunterTimersStatus"..num);
if( SHT_sfind( barframe.spell, SHT_STING ) and ( barframe.target == target ) ) then
allReadyActive = true;
bar = num;
break;
end
end
elseif( not string.find( spellName, SHT_FLARE ) ) then
for num = 1, SHTvars["numBars"], 1 do
local barframe = getglobal("SHunterTimersStatus"..num);
if( barframe.spell == spellName ) and (barframe.target == target)then
allReadyActive = true;
bar = num;
break;
end
end
end
local num = bar;
if( not allReadyActive ) then
if( SHTvars["numBars"] == 11 ) then
return;
end
SHTvars["numBars"] = SHTvars["numBars"] + 1;
num = SHTvars["numBars"];
end
local icon = getglobal("SHunterTimersStatus"..num.."Icon");
local barframe = getglobal("SHunterTimersStatus"..num);
local bar = getglobal("SHunterTimersStatus"..num.."Bar");
local leftText = getglobal("SHunterTimersStatus"..num.."BarLeftText");
local rightText = getglobal("SHunterTimersStatus"..num.."BarRightText");
if( not barframe ) then
--DEFAULT_CHAT_FRAME:AddMessage("WTFBBQ line 214");
return;
end
local texture;
if( spellName == SHT_IMP_CONC_SHORT ) then
texture = SHTvars["textures"][SHT_CONC_SHOT];
elseif( spellName == SHT_IMP_WC_SHORT ) then
texture = SHTvars["textures"][SHT_WING_CLIP];
elseif( string.find( spellName, SHT_TRAP ) ) then
if( string.find( spellName, SHT_FREEZING_TRAP ) )then
texture = SHTvars["textures"][SHT_FREEZING_TRAP]
elseif( string.find( spellName, SHT_IMMO_TRAP ) ) then
texture = SHTvars["textures"][SHT_IMMO_TRAP]
elseif( string.find( spellName, SHT_FROST_TRAP ) ) then
texture = SHTvars["textures"][SHT_FROST_TRAP]
elseif( string.find( spellName, SHT_EXPL_TRAP ) ) then
texture = SHTvars["textures"][SHT_EXPL_TRAP]
end
elseif( string.find( spellName, SHT_INTIM ) ) then
texture = SHTvars["textures"][SHT_INTIM];
else
texture = SHTvars["textures"][spellName];
end
icon:SetTexture(texture);
barframe.spell = spellName;
barframe.texture = texture;
barframe.target = target;
barframe.startTime = GetTime();
barframe.duration = spellDuration / 1000;
barframe.endTime = barframe.startTime + barframe.duration;
bar:SetMinMaxValues(barframe.startTime, barframe.endTime);
bar:SetValue( barframe.endTime );
local spellText = SHTColor(unpack(SHTvars["skillcolor"]))..spellName;
if( SHTvars["append"] ) and (barframe.target) then
spellText = spellText.."|r - "..SHTColor(unpack(SHTvars["targetcolor"]))..barframe.target;
end
leftText:SetText( spellText );
local text;
if( SHTvars["mili"] == 0 ) then
text = string.format( SHTColor(unpack(SHTvars["timecolor"])).."%ds", barframe.duration );
else
text = string.format( SHTColor(unpack(SHTvars["timecolor"])).."%."..SHTvars["mili"].."f", barframe.duration );
end
rightText:SetText( text );
barframe.channeling = true;
barframe.fadeOut = false;
SHunterTimersFrame:SetAlpha(1);
SHT_SetHeight();
if( not SHunterTimersFrame:IsVisible() ) then
SHunterTimersFrame:Show();
end
local r, g, b, a = unpack( SHTvars["barstartcolor"] );
bar:SetStatusBarColor(r, g, b, a );
getglobal("SHunterTimersStatus"..num.."BGBar"):SetStatusBarColor(r, g, b, 0.25*a);
barframe:SetAlpha(SHTvars["overallalpha"]);
SHunterTimers_SetWidths();
barframe:Show();
end
function SHunterTimers_SetWidths()
local largestwidth = 180;
if( SHTvars["showtex"] ) then
if( SHTvars["largetex"] ) and (SHTvars["barheight"] < 16 ) then
largestwidth = largestwidth - 16;
else
largestwidth = largestwidth - SHTvars["barheight"];
end
if( SHTvars["gap"] ) then
largestwidth = largestwidth - 5;
end
end
local tarwidth = largestwidth;
local extrawidth = 0;
for i=1, SHTvars["numBars"] do
local width = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetWidth() + getglobal("SHunterTimersStatus"..i.."BarRightText"):GetWidth();
if( width > largestwidth ) then
largestwidth = width;
end
end
if( largestwidth > tarwidth ) and (not SHTvars["hidetext"]) then
largestwidth = largestwidth + 40;
if( SHTvars["showtex"] ) then
extrawidth = SHTvars["barheight"];
if( SHTvars["largetex"] ) and ( SHTvars["barheight"] < 16 ) then
extrawidth = 16;
end
if( SHTvars["gap"] ) then
extrawidth = extrawidth + 5;
end
end
for i=1, SHTvars["numBars"] do
getglobal("SHunterTimersStatus"..i):SetWidth(largestwidth + extrawidth);
getglobal("SHunterTimersStatus"..i.."Bar"):SetWidth(largestwidth);
getglobal("SHunterTimersStatus"..i.."BGBar"):SetWidth(largestwidth);
end
if( SHTvars["padding"] ) then
SHunterTimersFrame:SetWidth(largestwidth + extrawidth + 20);
else
SHunterTimersFrame:SetWidth(largestwidth + extrawidth + 10);
end
else
if( SHTvars["padding"] ) then
SHunterTimersFrame:SetWidth( 240 );
else
SHunterTimersFrame:SetWidth( 230 );
end
local width = 220;
if( SHTvars["showtex"] ) then
if( SHTvars["largetex"] ) and ( SHTvars["barheight"] < 16) then
width = width - 16;
else
width = width - SHTvars["barheight"];
end
if( SHTvars["gap"] ) then
width = width - 5;
end
end
for i=1, SHTvars["numBars"] do
getglobal("SHunterTimersStatus"..i):SetWidth(220);
getglobal("SHunterTimersStatus"..i.."Bar"):SetWidth(width);
getglobal("SHunterTimersStatus"..i.."BGBar"):SetWidth(width);
end
end
end
function SHunterTimers_OnUpdateBar( id )
if( not SHunterTimersFrame:IsVisible() ) then
SHunterTimersFrame:Show();
end
local barframe = getglobal("SHunterTimersStatus"..id);
if( barframe.channeling ) then
local time = GetTime();
local bartext = getglobal( "SHunterTimersStatus"..id.."BarRightText");
if( time >= barframe.endTime ) then
barframe.channeling = false;
barframe.fadeOut = true;
barframe.step = 0;
barframe.target = nil;
bartext:SetText( SHT_DONE );
SHTvars["numBars"] = SHTvars["numBars"] - 1;
local text = barframe.spell --getglobal("SHunterTimersStatus"..id.."BarLeftText"):GetText();
if( SHTvars["concuss"] ) and ( text == SHT_CONC_SHOT ) then
SHTvars["concuss"] = false;
elseif( SHTvars["rapid"] ) and ( text == SHT_RAPID_FIRE ) then
SHTvars["rapid"] = false;
elseif( SHTvars["quick"] ) and ( text == SHT_QUICK_SHOTS ) then
SHTvars["quick"] = false;
elseif( SHTvars["petIntim"] ) and ( text == SHT_PET_INTIM ) then
SHTvars["petIntim"] = false;
elseif( SHTvars["deterrence"] ) and ( text == SHT_DETERRENCE ) then
SHTvars["deterrence"] = false;
elseif( trapTimer ) and string.find( text, SHT_PRIMED ) then
trapTimer = false;
elseif( SHTvars["wingclip"] ) and (text == SHT_WING_CLIP ) then
SHTvars["wingclip"] = false;
elseif( SHTvars["freezing"] ) and (text == SHT_FREEZING_TRAP ) then
SHTvars["freezing"] = false;
elseif( SHTvars["impwing"] ) and (text == SHT_IMP_WC_SHORT ) then
SHTvars["impwing"] = false;
elseif( SHTvars["scatter"] ) and (text == SHT_SCATTER ) then
SHTvars["scatter"] = false;
elseif( SHTvars["wyvern"] ) and ( text == SHT_WYVERN_TEXT ) then
SHTvars["wyvern"] = false;
elseif( SHTvars["fearbeast"] ) and ( text == SHT_FEAR_BEAST ) then
SHTvars["fearbeast"] = false;
elseif( SHTvars["impconc"] ) and ( text == SHT_IMP_CONC_SHORT ) then
SHTvars["impconc"] = false;
end
return;
end
local bar = getglobal("SHunterTimersStatus"..id.."Bar");
local value = barframe.startTime + barframe.endTime - time;
bar:SetValue( value );
local timeleft = barframe.duration - (time - barframe.startTime);
local timeleftstring;
if( SHTvars["mili"] == 0 ) then
timeleftstring = string.format( SHTColor(unpack(SHTvars["timecolor"])).."%ds", timeleft );
else
timeleftstring = string.format( SHTColor(unpack(SHTvars["timecolor"])).."%."..SHTvars["mili"].."f", timeleft );
end
getglobal("SHunterTimersStatus"..id.."BarRightText"):SetText(timeleftstring);
if( SHTvars["colorchange"] ) then
local percent = (time - barframe.startTime)/(barframe.endTime - barframe.startTime);
local r, g, b, a = unpack( SHTvars["barstartcolor"] );
local redd, greend, blued, alphad = unpack( SHTvars["bardelta"] );
redd = r + redd*percent;
greend = g + greend*percent;
blued = b + blued*percent;
alphad = a + alphad*percent;
bar:SetStatusBarColor( redd, greend, blued, alphad );
getglobal("SHunterTimersStatus"..id.."BGBar"):SetStatusBarColor( redd, greend, blued, 0.25*alphad );
end
if( timeleft < SHTvars["flash"] ) then
if( barframe.step == 0 ) then
barframe.step = -SHTvars["step"];
end
local alpha = barframe:GetAlpha() + barframe.step;
if( alpha < 0.2 ) then
barframe.step = SHTvars["step"];
elseif( alpha > SHTvars["overallalpha"]*1 ) then
barframe.step = -SHTvars["step"];
end
barframe:SetAlpha(alpha);
end
elseif( barframe.fadeOut ) then
if( trapTimer ) then
local textBar = getglobal("SHunterTimersStatus"..id.."BarLeftText"):GetText();
if( string.find( textBar, "primed" ) ) then
trapTimer = false;
end
end
local alpha = barframe:GetAlpha() - 0.05;
if( alpha > 0 ) then
barframe:SetAlpha(alpha);
else
barframe.fadeOut = false;
barframe:Hide();
SHunterTimers_AutoCascade( 1, false );
--SHunterTimers_cascadeBar( id );
end
end
end
function SHunterTimersFrame_OnUpdate(elapsed)
if( (elapsed - this.updateTime) > 1 ) then
this.updateTime = elapsed;
local shown = false;
local numbars = 0;
for i=1, SHT_NUM_BARS do
if( getglobal("SHunterTimersStatus"..i):IsVisible() ) then
if( getglobal("SHunterTimersStatus"..i).channeling ) then
numbars = numbars + 1;
end
shown = true;
end
end
--SHunterTimers_AutoCascade(1, false);
--SHunterTimers_SetWidths();
if( not shown ) then
SHTvars["numBars"] = 0;
else
SHTvars["numBars"] = numbars;
end
SHunterTimersFrame:SetScale( SHTvars["scale"] );
for i=1, SHT_NUM_BARS do
getglobal("SHunterTimersStatus"..i):SetScale( SHTvars["scale"] );
end
for key, val in dimin do
if( (elapsed - dimin[key]["time"]) > 20 ) then
dimin[key] = nil;
end
end
SHT_SetHeight();
end
if not ( SHTvars["numBars"] > 0 ) then
local alpha = SHunterTimersFrame:GetAlpha() - 0.05;
if( alpha > 0 ) then
SHunterTimersFrame:SetAlpha(alpha);
else
SHunterTimersFrame:Hide();
end
end
end
function SHT_init()
if( not SHTvars ) then
SHTvars = {};
SHTvars["bg"] = { r=0, g=0, b=0, a=7 };
end
if( SHTvars["on"] == nil ) then
SHTvars["on"] = true;
end
if( not SHTvars["borderalpha"] ) then
SHTvars["borderalpha"] = {
[1] = 1;
[2] = 1;
[3] = 1;
[4] = 1;
};
end
SHunterTimersFrame:SetBackdropColor( SHTvars["bg"].r, SHTvars["bg"].g, SHTvars["bg"].b, SHTvars["bg"].a );
SHunterTimersFrame:SetBackdropBorderColor( unpack(SHTvars["borderalpha"]) );
SHTvars["numBars"] = 0;
SHunterTimers_Real_UseAction = UseAction;
SHunterTimers_Real_CastSpellByName = CastSpellByName;
SHunterTimers_Real_CastSpell = CastSpell;
if( not SHTvars["skills"] ) then
SHTvars["skills"] = {};
for i=1, 19 do
SHTvars["skills"][SHT_OPTIONS_CHECK[i]] = true; --woot lazy
end
end
if( SHTvars["skills"][SHT_OPTIONS_CHECK[23]] == nil ) then
SHTvars["skills"][SHT_OPTIONS_CHECK[23]] = true;
end
if( SHTvars["Aimed Shot"] == nil ) then
SHTvars["Aimed Shot"] = true;
end
if( not SHTvars["aimeddelay"] ) then
SHTvars["aimeddelay"] = 400;
end
if( not SHTvars["scale"] ) then
SHTvars["scale"] = UIParent:GetScale();
end
if( SHTvars["locked"] == nil ) then
SHTvars["locked"] = false;
end
if( not SHTvars["down"] == nil ) then
SHTvars["down"] = true;
end
if( not SHTvars["locked"] ) then
SHunterTimersAnchor:Show();
else
SHunterTimersAnchor:Hide();
end
if( not SHTvars["mili"] ) then
SHTvars["mili"] = 2;
end
if( SHTvars["flash"] == nil ) then
SHTvars["flash"] = 5;
end
if( not SHTvars["skillcolor"] ) then
local r, g, b = SHunterTimersStatus1BarLeftText:GetTextColor();
--local a = SHunterTimersStatus1BarLeftText:GetAlpha();
SHTvars["skillcolor"] = {
[1] = r,
[2] = g,
[3] = b,
[4] = 1
};
end
if( not SHTvars["timecolor"] ) then
local r, g, b = SHunterTimersStatus1BarRightText:GetTextColor();
--local a = SHunterTimersStatus1BarRightText:GetAlpha();
SHTvars["timecolor"] = {
[1] = r,
[2] = g,
[3] = b,
[4] = 1
};
end
if( not SHTvars["targetcolor"] ) then
local r, g, b = SHunterTimersStatus1BarLeftText:GetTextColor();
--local a = SHunterTimersStatus1BarRightText:GetAlpha();
SHTvars["targetcolor"] = {
[1] = r,
[2] = g,
[3] = b,
[4] = 1
};
end
if( not SHTvars["barstartcolor"] ) then
SHTvars["barstartcolor"] = {
[1] = 0,
[2] = 0.8,
[3] = 0,
[4] = 1 };
end
if( not SHTvars["barstartcolor"][4] ) then
SHTvars["barstartcolor"][4] = 1;
end
if( not SHTvars["bardelta"] ) then
SHTvars["bardelta"] = {
[1] = 0.8,
[2] = -0.8,
[3] = 0,
[4] = 0};
end
if( not SHTvars["bardelta"][4] ) then
SHTvars["bardelta"][4] = 0;
end
if( not SHTvars["shotdelay"] ) then
SHTvars["shotdelay"] = 550;
end
if( SHTvars["step"] == nil ) then
SHTvars["step"] = 0.015;
end
if( SHTvars["colorchange"] == nil ) then
SHTvars["colorchange"] = false;
end
if( not SHTvars["bardistance"] ) then
SHTvars["bardistance"] = 10;
end
if( SHTvars["down"] ) then
SHunterTimersFrame:ClearAllPoints();
SHunterTimersFrame:SetPoint( "TOPLEFT", "SHunterTimersAnchor", "BOTTOMRIGHT" );
else
SHunterTimersFrame:ClearAllPoints();
SHunterTimersFrame:SetPoint( "BOTTOMLEFT", "SHunterTimersAnchor", "TOPRIGHT" );
end
if( SHTvars["append"] == nil ) then
SHTvars["append"] = false;
end
if( not SHTvars["overallalpha"] ) then
SHTvars["overallalpha"] = 1;
end
SHTvars["concuss"] = false;
SHTvars["rapid"] = false;
SHTvars["quick"] = false;
SHTvars["petIntim"] = false;
SHTvars["deterrence"] = false;
SHTvars["wingclip"] = false;
SHTvars["freezing"] = false;
SHTvars["impwing"] = false;
SHTvars["scatter"] = false;
SHTvars["wyvern"] = false;
for i=1, SHT_NUM_OPTIONS_CHECK do --Check boxes
if( i < 19 ) or ( i == 23 ) then
getglobal("SHunterTimersOptionsTimersCheckButton"..i.."Text"):SetText(SHT_OPTIONS_CHECK[i]);
else
getglobal("SHunterTimersOptionsBarCheckButton"..i.."Text"):SetText(SHT_OPTIONS_CHECK[i]);
end
end
--SHunterTimersOptionsTimersCheckButton23Text:SetText(SHT_OPTIONS_CHECK[23]);
for i=1, SHT_NUM_SLIDERS do --Sliders
getglobal("SHunterTimersOptionsBarSlider"..i.."SliderTitle"):SetText(SHT_OPTIONS_SLIDER[i]);
getglobal("SHunterTimersOptionsBarSlider"..i.."SliderLow"):SetText(SHT_OPTIONS_SLIDER_ENDS[i][1])
getglobal("SHunterTimersOptionsBarSlider"..i.."SliderHigh"):SetText(SHT_OPTIONS_SLIDER_ENDS[i][2]);
end
if( not SHTvars["textures"] ) then
SHTvars["textures"] = {};
end
if( SHTvars["showtex"] == nil ) then
SHTvars["showtex"] = true;
end
if( SHTvars["largetex"] == nil ) then
SHTvars["largetex"] = false;
end
if( SHTvars["hidetext"] == nil ) then
SHTvars["hidetext"] = false;
end
if( SHTvars["hidetime"] == nil ) then
SHTvars["hidetime"] = false;
end
if( SHTvars["gap"] == nil ) then
SHTvars["gap"] = true;
end
if( SHTvars["padding"] == nil ) then
SHTvars["padding"] = true;
end
if( not SHTvars["barheight"] ) then
SHTvars["barheight"] = 10;
end
for i=1, SHT_NUM_LABLES do
if( i ~= 5 ) then
getglobal("SHunterTimersOptionsBarLabel"..i.."Label"):SetText(SHT_OPTIONS_LABELS[i]);
else
getglobal("SHunterTimersOptionsTimersLabel"..i.."Label"):SetText(SHT_OPTIONS_LABELS[i]);
end
end
SHunterTimers_SetSettings();
SHunterTimersOptions:SetScale(UIParent:GetScale()*0.9);
end
function SHunterTimersFrame_OnEvent(event)
if( event == "VARIABLES_LOADED" ) then
SHT_init();
return;
end
if( event == "SPELLS_CHANGED" ) then
if( not sht_init ) then
sht_init = true;
for key,val in SHTvars["skills"] do
local i = 1;
while( GetSpellTexture(i, BOOKTYPE_SPELL) ) do
local spellName = GetSpellName(i, BOOKTYPE_SPELL);
if( spellName == key ) then
SHTvars["textures"][key] = GetSpellTexture(i, BOOKTYPE_SPELL);
break;
end
i = i + 1;
end
end
end
SHTvars["textures"][SHT_QUICK_SHOTS] = "Interface\\Icons\\Ability_Warrior_InnerRage";
SHTvars["textures"][SHT_FRENZY] = "Interface\\Icons\\INV_Misc_MonsterClaw_03";
local _, _, _, _, rank = GetTalentInfo( 3, 7 ); --Clever traps
SHTvars["traptimemult"] = 1 + (rank*0.15);
return;
end
if( not SHTvars["on"] ) then
return;
end
if( event == "CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE" ) or ( event == "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE" ) then
if( string.find( arg1, SHT_TRAP ) ) then
if( trapTimer ) then
for mob, effect in string.gfind( arg1, SHT_TRAP_AFFLICT_STRING ) do
--DEFAULT_CHAT_FRAME:AddMessage(effect.." "..mob);
SHunterTimers_addDebuff( effect, mob );
end
end
elseif( string.find( arg1, SHT_FEAR_BEAST ) ) then
for mob, effect in string.gfind( arg1, SHT_AFFLICT_STRING ) do
--DEFAULT_CHAT_FRAME:AddMessage(effect.." "..mob);
if( effect == SHT_FEAR_BEAST ) and ( mob == UnitName("target") ) then
SHTvars["fearbeast"] = true;
SHunterTimers_addDebuff( effect, mob );
end
end
end
elseif( event == "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS" ) then
if( string.find( arg1, SHT_QUICK_SHOTS ) ) then
SHTvars["quick"] = true;
SHTvars["quicktime"] = GetTime();
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
if(SHTvars["skills"][SHT_QUICK_SHOTS]) then
SHunterTimersFrame_add( 8000, SHT_QUICK_SHOTS );
end
elseif( string.find( arg1, SHT_RAPID_FIRE ) ) then
SHTvars["rapid"] = true;
SHTvars["rapidtime"] = GetTime();
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
if (SHTvars["skills"][SHT_RAPID_FIRE]) then
SHunterTimersFrame_add( 15000, SHT_RAPID_FIRE );
end
elseif( string.find( arg1, SHT_DETERRENCE ) and SHTvars["skills"][SHT_DETERRENCE] ) then
SHTvars["deterrence"] = true;
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
SHunterTimersFrame_add( 10000, SHT_DETERRENCE );
end
elseif( event == "CHAT_MSG_SPELL_PET_DAMAGE" ) then
if( string.find( arg1, SHT_RESIST ) or string.find( arg1, SHT_IMMUNE) ) then
if( string.find( arg1, SHT_INTIM ) ) then
for i=1, SHTvars["numBars"] do
local text = getglobal("SHunterTimersStatus"..i).spell --.."BarLeftText"):GetText();
if( text == SHT_PET_INTIM ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
else
for trap in string.gfind( arg1, SHT_FIND_TRAP_FAILED ) do
if( trapTimer ) and ( (trap ~= SHT_FROST_TRAP) or (trap ~= SHT_EXPL_TRAP) )then
for i=1, SHTvars["numBars"] do
local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( string.find( text, trap.." "..SHT_PRIMED ) ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
end
end
end
end
elseif( event == "CHAT_MSG_SPELL_SELF_DAMAGE" ) then
if(SHTvars["skills"][SHT_WING_CLIP]) and ( string.find( arg1, SHT_YOUR..SHT_WING_CLIP ) ) and ( string.find( arg1, SHT_HITS ) or string.find(arg1, SHT_CRITS ) ) then
SHTvars["wingclip"] = true;
local name = UnitName("target");
SHunterTimersFrame_add( 10000, SHT_WING_CLIP, name );
elseif( string.find( arg1, SHT_FAILED ) ) then
local name = UnitName("target");
for spell in string.gfind( arg1, SHT_FAILED_STRING) do
--DEFAULT_CHAT_FRAME:AddMessage(spell);
for i=1, SHTvars["numBars"] do
local barframe = getglobal("SHunterTimersStatus"..i);
--local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == spell ) and ( barframe.target == name )then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
end
elseif( string.find(arg1, SHT_MISSES ) ) then
local name = UnitName("target");
for spell in string.gfind( arg1, SHT_MISSES_STRING ) do
for i=1, SHTvars["numBars"] do
local barframe = getglobal("SHunterTimersStatus"..i);
--local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == spell ) and ( barframe.target == name )then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
end
elseif(SHTvars["skills"][SHT_COUNTER]) and ( string.find( arg1, SHT_YOUR..SHT_COUNTER ) and (string.find( arg1, SHT_HITS ) or string.find( arg1, SHT_CRITS )) )then
SHunterTimersFrame_add( 5000, "Counterattack", UnitName("target") );
end
elseif( event == "CHAT_MSG_SPELL_SELF_DAMAGE" ) then
if( trapTimer ) and string.find( arg1, SHT_EXPL_TRAP ) then
SHunterTimers_addDebuff( SHT_EXPL_TRAP );
end;
elseif( event == "CHAT_MSG_COMBAT_HOSTILE_DEATH" ) then
if( SHTvars["numBars"] > 0 ) then
for target in string.gfind( arg1, "([%a%s]+) dies." ) do
checkForTarget = target;
end
checkForTargetDeath = GetTime();
end
elseif( event == "CHAT_MSG_MONSTER_EMOTE" ) then
if( SHTvars["frenzy"] and (string.find(arg1, SHT_FRENZY_EMOTE ) or string.find(arg1, SHT_FRENZY_FLAMEGOR ) )) then
if( arg2 == SHT_CHROMAGGUS ) then
SHunterTimersFrame_add( 15000, SHT_FRENZY, SHT_CHROMAGGUS );
elseif( arg2 == SHT_FLAMEGOR ) then
SHunterTimersFrame_add( 11500, SHT_FRENZY, SHT_FLAMEGOR );
elseif( arg2 == SHT_MAGMADAR ) then
SHunterTimersFrame_add( 15000, SHT_FRENZY, SHT_MAGMADAR );
end
end
elseif( event == "PLAYER_TARGET_CHANGED" ) then
if(SHTvars["numBars"]== 0 ) then
return;
end
local time = GetTime();
if( time - checkForTargetDeath < 1 ) then
for num = 1, SHTvars["numBars"], 1 do
--local text = getglobal("SHunterTimersStatus"..num.."BarLeftText"):GetText();
local barframe = getglobal("SHunterTimersStatus"..num);
if( barframe.target == checkForTarget ) then
barframe.endTime = 0;
end
end
end
elseif( event == "SPELLCAST_START" ) then
checkForSpellFail = true;
checkForTarget = UnitName("target");
checkForSpellName = arg1;
elseif( event == "SPELLCAST_FAIL" ) then
if( checkForSpellFail) then
checkForSpellFail = false;
checkForSpellName = nil;
end
elseif( event == "SPELLCAST_STOP" ) then
if( checkForSpellFail) then
checkForSpellFail = false;
if( SHT_sfind( checkForSpellName, SHT_STING ) ) then
local name = UnitName("target");
SHunterTimers_addDebuff( checkForSpellName, name );
elseif(SHTvars["skills"][SHT_INTIM]) and ( string.find( checkForSpellName, SHT_INTIM ) ) then
SHTvars["petIntim"] = true;
SHunterTimersFrame_add( 15000, SHT_PET_INTIM );
elseif(SHTvars["skills"][SHT_BW]) and ( string.find( checkForSpellName, SHT_BW ) ) then
SHunterTimersFrame_add( 15000, checkForSpellName );
elseif(SHTvars["skills"][SHT_FLARE]) and ( string.find( checkForSpellName, SHT_FLARE ) ) then
SHunterTimersFrame_add( 30000, checkForSpellName );
elseif( string.find( checkForSpellName, SHT_TRAP ) ) then
if( SHTvars["skills"][checkForSpellName]) then
trapTimer = true;
SHunterTimersFrame_add( 60000, checkForSpellName.." "..SHT_PRIMED );
end
elseif(SHTvars["skills"][SHT_SCATTER]) and ( string.find( checkForSpellName, SHT_SCATTER ) ) then
local duration = 4000;
local name = UnitName("target");
if(name) and ( dimin[name] ) and ((GetTime() - dimin[name]["time"]) < 20) then
for i=1, dimin[name]["times"] do
duration = duration/2;
end
end
SHTvars["scatter"] = true;
SHunterTimersFrame_add( duration, checkForSpellName, name );
elseif(SHTvars["skills"][SHT_FEAR_BEAST]) and ( checkForSpellName == SHT_FEAR_BEAST ) then
SHTvars["fearbeast"] = true;
else
local name = UnitName("target");
SHunterTimers_addDebuff( checkForSpellName, name );
end
checkForSpellName = nil;
end
--DEFAULT_CHAT_FRAME:AddMessage(checkForSpell, 1, 0, 0 );
elseif( event == "UNIT_AURA" ) then
if( arg1 == "player" ) then
--[[local i = 1;
while( UnitBuff("player", i ) ) do
SHuntersTooltip:SetUnitBuff("player", i );
local text = SHuntersTooltipTextLeft1:GetText()
if( not SHTvars["rapid"] ) and ( text == SHT_RAPID_FIRE ) then
SHTvars["rapid"] = true;
SHTvars["rapidtime"] = GetTime();
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
if (SHTvars["skills"][SHT_RAPID_FIRE]) then
SHunterTimersFrame_add( 15000, SHT_RAPID_FIRE );
end
end
if( not SHTvars["quick"] ) and ( text == SHT_QUICK_SHOTS ) then
SHTvars["quick"] = true;
SHTvars["quicktime"] = GetTime();
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
if(SHTvars["skills"][SHT_QUICK_SHOTS]) then
SHunterTimersFrame_add( 8000, SHT_QUICK_SHOTS );
end
end
if(SHTvars["skills"][SHT_DETERRENCE]) and ( not SHTvars["deterrence"] ) and ( text == SHT_DETERRENCE ) then
SHTvars["deterrence"] = true;
--local duration = GetPlayerBuffTimeLeft(i) * 1000;
SHunterTimersFrame_add( 10000, SHT_DETERRENCE );
end
--DEFAULT_CHAT_FRAME:AddMessage(i.." "..targetDebuffs[i], 1, 0, 0 );
i = i + 1;
end]]
local time = GetTime();
if( SHTvars["rapid"] ) and ( (time - SHTvars["rapidtime"]) >= 15 ) then
SHTvars["rapid"] = false;
end
if( SHTvars["quick"] ) and ( (time - SHTvars["quicktime"]) >= 8 ) then
SHTvars["quick"] = false;
end
return;
end
if( arg1 == "target" ) then
local time = GetTime();
local name = UnitName("target");
--DEFAULT_CHAT_FRAME:AddMessage(time, 1, 0, 0 );
local i = 1;
while( UnitDebuff("target", i ) ) do
SHuntersTooltip:SetUnitDebuff("target", i );
targetDebuffs[i] = SHuntersTooltipTextLeft1:GetText();
--DEFAULT_CHAT_FRAME:AddMessage(i.." "..targetDebuffs[i], 1, 0, 0 );
i = i + 1;
end
i = i - 1;
if( SHTvars["petIntim"] ) then
for j = 1, i, 1 do
if( string.find( targetDebuffs[i], SHT_INTIM ) ) then
SHunterTimers_addDebuff( SHT_INTIM, name );
return;
end
end
end
if( SHTvars["concuss"] ) then
for j = 1, i do
if( not SHTvars["impconc"] ) and ( string.find( targetDebuffs[i], SHT_IMP_CONC ) ) then
SHTvars["impconc"] = true;
SHunterTimers_addDebuff( SHT_IMP_CONC_SHORT, name );
end
end
end
if( SHTvars["wingclip"] ) and not( SHTvars["impwing"] ) then
for j = 1, i do
if( string.find( targetDebuffs[i], SHT_IMP_WC ) ) then
SHTvars["impwing"] = true;
SHunterTimersFrame_add( 5000, SHT_IMP_WC_SHORT, name );
end
end
end
end
elseif( event == "CHAT_MSG_SPELL_AURA_GONE_OTHER" ) then
for effect, target in string.gfind(arg1, SHT_FADE_STRING ) do
if( SHTvars["freezing"] ) and string.find(effect, SHT_FREEZING_TRAP ) then
for i=1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..i);
--local text = getglobal( "SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == SHT_FREEZING_TRAP ) and ( barframe.target == target ) then
--SHunterTimersFrame_add( 20000, "Diminishing Returns" );
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
if( not dimin[target] ) then
dimin[target] = {};
end
dimin[target]["time"] = GetTime();
if( dimin[target]["times"] == nil ) then
dimin[target]["times"] = 1;
else
dimin[target]["times"] = dimin[target]["times"] + 1;
end
end
if( SHTvars["scatter"] ) and string.find( effect, SHT_SCATTER ) then
for i=1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..i)
--local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == SHT_SCATTER ) and ( barframe.target == target ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
if( not dimin[target] ) then
dimin[target] = {};
end
dimin[target]["time"] = GetTime();
if( dimin[target]["times"] == nil ) then
dimin[target]["times"] = 1;
else
dimin[target]["times"] = dimin[target]["times"] + 1;
end
end
if( SHTvars["scatter"] ) and string.find( effect, SHT_SCATTER ) then
for i=1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..i)
--local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == SHT_SCATTER ) and ( barframe.target == target ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
if( not dimin[target] ) then
dimin[target] = {};
end
dimin[target]["time"] = GetTime();
if( dimin[target]["times"] == nil ) then
dimin[target]["times"] = 1;
else
dimin[target]["times"] = dimin[target]["times"] + 1;
end
end
if( SHTvars["fearbeast"] ) and string.find( effect, SHT_FEAR_BEAST ) then
for i=1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..i);
--local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( barframe.spell == SHT_FEAR_BEAST ) and (barframe.target == target ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
end
if( SHTvars["wyvern"] ) and string.find( effect, SHT_WYVERN ) then
for i=1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..i);
local text = getglobal("SHunterTimersStatus"..i.."BarLeftText"):GetText();
if( text == SHT_WYVERN_TEXT ) and (barframe.target == target ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
if( not dimin[target] ) then
dimin[target] = {};
end
dimin[target]["time"] = GetTime();
if( dimin[target]["times"] == nil ) then
dimin[target]["times"] = 1;
else
dimin[target]["times"] = dimin[target]["times"] + 1;
end
end
if( SHTvars["wingclip"] ) and string.find( effect, SHT_WING_CLIP ) then
for i=1, SHTvars["numBars"] do
--local text = getglobal( "SHunterTimersStatus"..i.."BarLeftText"):GetText();
local barframe = getglobal( "SHunterTimersStatus"..i);
if( barframe.spell == SHT_WING_CLIP ) and ( barframe.target == target ) then
getglobal("SHunterTimersStatus"..i).endTime = 0;
end
end
end
end
end
end
function SHunterTimers_addDebuff( debuff, mob )
if (SHTvars["skills"][SHT_SERPENT]) and ( debuff == SHT_SERPENT ) then
SHunterTimersFrame_add( 15000, SHT_SERPENT, mob );
--currentSting = "Serpent Sting";
elseif(SHTvars["skills"][SHT_SCORPID]) and ( debuff == SHT_SCORPID ) then
SHunterTimersFrame_add( 20000, SHT_SCORPID, mob );
--currentSting = "Scorpid Sting";
elseif(SHTvars["skills"][SHT_VIPER]) and ( debuff == SHT_VIPER ) then
SHunterTimersFrame_add( 8000, SHT_VIPER, mob );
--currentSting = "Viper Sting";
elseif(SHTvars["skills"][SHT_WYVERN]) and ( debuff == SHT_WYVERN ) then
local duration = 12000;
local name = UnitName("target");
if( dimin[name] ) and ( ( GetTime() - dimin[name]["time"]) < 20 )then
for i=1, dimin[name]["times"] do
duration = duration / 2;
end
end
SHTvars["wyvern"] = true;
SHunterTimersFrame_add( duration, SHT_WYVERN_TEXT, name );
elseif(SHTvars["skills"][SHT_CONC_SHOT]) and ( debuff == SHT_IMP_CONC_SHORT ) then
SHunterTimersFrame_add( 3000, SHT_IMP_CONC_SHORT, mob );
elseif(SHTvars["skills"][SHT_FEAR_BEAST] ) and ( debuff == SHT_FEAR_BEAST ) then
SHunterTimersFrame_add( 20000, SHT_FEAR_BEAST, mob );
elseif(SHTvars["skills"][SHT_CONC_SHOT]) and ( debuff == SHT_CONC_SHOT ) then
SHTvars["concuss"] = true;
SHunterTimersFrame_add( 4000, SHT_CONC_SHOT, mob );
elseif(SHTvars["skills"][SHT_INTIM]) and ( debuff == SHT_INTIM ) then
SHunterTimersFrame_add( 3000, SHT_INTIM, mob );
elseif( string.find( debuff, SHT_TRAP ) ) then
if( trapTimer ) then
trapTimer = false;
for num = 1, SHTvars["numBars"] do
local barframe = getglobal( "SHunterTimersStatus"..num);
local text = getglobal("SHunterTimersStatus"..num.."BarLeftText"):GetText();
if( string.find( text, SHT_PRIMED ) ) then
barframe.endTime = 0;
end
end
if(SHTvars["skills"][SHT_FREEZING_TRAP]) and ( string.find( debuff, SHT_FREEZING_TRAP ) ) then
SHTvars["freezing"] = true;
local _, _, _, _, rank = GetTalentInfo( 3, 7 ); --Clever traps
local duration = 20000*SHTvars["traptimemult"];
if(mob) and ( dimin[mob] ) and ( ( GetTime() - dimin[mob]["time"]) < 20 )then
for i=1, dimin[mob]["times"] do
duration = duration / 2;
end
end
SHunterTimersFrame_add( duration, SHT_FREEZING_TRAP, mob );
elseif(SHTvars["skills"][SHT_IMMO_TRAP]) and ( string.find( debuff, SHT_IMMO_TRAP ) ) then
SHunterTimersFrame_add( 15000*SHTvars["traptimemult"], SHT_IMMO_TRAP, mob );
elseif(SHTvars["skills"][SHT_FROST_TRAP]) and ( string.find( debuff, SHT_FROST_TRAP ) ) then
SHunterTimersFrame_add( 30000*SHTvars["traptimemult"], SHT_FROST_TRAP.." "..SHT_AURA );
elseif(SHTvars["skills"][SHT_EXPL_TRAP]) and ( string.find( debuff, SHT_EXPL_TRAP ) ) then
SHunterTimersFrame_add( 20000*SHTvars["traptimemult"], SHT_EXPL_TRAP.." "..SHT_AURA );
end
end
end
end
function SHunterTimers_cascadeBar( id )
local barframefrom = getglobal("SHunterTimersStatus"..(id+1));
if( not barframefrom ) or not ( barframefrom:IsVisible() and (barframefrom.channeling or barframefrom.fadeOut) )then
getglobal("SHunterTimersStatus"..id):Hide();
SHunterTimers_SetWidths();
SHT_SetHeight();
return;
end
local barframeto = getglobal("SHunterTimersStatus"..id);
local barto = getglobal("SHunterTimersStatus"..id.."Bar");
local textLeftto = getglobal("SHunterTimersStatus"..id.."BarLeftText");
local textRightto = getglobal("SHunterTimersStatus"..id.."BarRightText");
local iconto = getglobal("SHunterTimersStatus"..id.."Icon");
id = id + 1;
local barfrom = getglobal("SHunterTimersStatus"..id.."Bar");
local textLeftfrom = getglobal("SHunterTimersStatus"..id.."BarLeftText");
local textRightfrom = getglobal("SHunterTimersStatus"..id.."BarRightText");
barframeto.texture = barframefrom.texture;
iconto:SetTexture(barframeto.texture);
barframeto.startTime = barframefrom.startTime;
barframeto.endTime = barframefrom.endTime;
barframeto.duration = barframefrom.duration;
barframeto.channeling = barframefrom.channeling;
barframeto.fadeOut = barframefrom.fadeOut;
barframeto.target = barframefrom.target;
barframeto.spell = barframefrom.spell;
barto:SetMinMaxValues(barframeto.startTime, barframeto.endTime);
barto:SetValue(barfrom:GetValue());
textLeftto:SetText(textLeftfrom:GetText());
textRightto:SetText(textRightfrom:GetText());
barframeto:SetAlpha(barframefrom:GetAlpha());
barframeto:Show();
SHunterTimers_cascadeBar( id );
end
function SHunterTimers_AutoCascade(id, last)
if( id == SHT_NUM_BARS ) then
return;
end
if( id == 0 ) then
id = 1;
end
local barframe = getglobal("SHunterTimersStatus"..id);
if( barframe:IsVisible() ) then
SHunterTimers_AutoCascade(id+1, false);
else
local barframenext = getglobal("SHunterTimersStatus"..id+1);
if( barframenext:IsVisible() ) then
SHunterTimers_cascadeBar(id);
if( last ) then
SHunterTimers_AutoCascade( id-1, true );
else
SHunterTimers_AutoCascade( id+1, false );
end
else
SHunterTimers_AutoCascade(id+1, true);
end
end
end
function SHunterTimers_OnUseAction( slot, checkFlags, checkSelf )
SHuntersTooltip:SetAction(slot);
local text = SHuntersTooltipTextLeft1:GetText();
SHunterTimers_SetStates(text);
SHunterTimers_Real_UseAction( slot, checkFlags, checkSelf );
end
function SHunterTimers_OnCastSpell(spellID, spellTab)
SHuntersTooltip:SetSpell(spellID, spellTab);
local text = SHuntersTooltipTextLeft1:GetText();
SHunterTimers_SetStates(text);
SHunterTimers_Real_CastSpell(spellID, spellTab);
end
function SHunterTimers_OnCastSpellByName(spellName)
SHunterTimers_SetStates(spellName);
SHunterTimers_Real_CastSpellByName(spellName);
end
function SHunterTimers_SetStates(text)
if( text ) then
for spell in string.gfind( text, SHT_SPELL_RANK_STRIP ) do --strip the (Rank #) portion
--DEFAULT_CHAT_FRAME:AddMessage(text.." "..spell);
text = spell;
end
if( string.find( text, SHT_AIMED_SHOT ) ) then
if( SHTvars["Aimed Shot"] ) then
local duration = 3;
if( SHTvars["rapid"] ) then
duration = duration / 1.4;
end
if( SHTvars["quick"] ) then
duration = duration / 1.3;
end
if( eCastingBar ) then
eCastingBar_SpellcastStart( "", SHT_AIMED_SHOT, duration*1000 + SHTvars["aimeddelay"] );
else
if( CastingBarTimeFrame ) then --apparantly this futzes castingbartime
local oldarg1 = arg1;
local oldevent = event;
arg1 = SHT_AIMED_SHOT;
event = "SPELLCAST_START";
oldthis = this;
this = CastingBarTimeFrame;
CastingBarTime_OnEvent()
this = oldthis;
arg1 = oldarg1;
event = oldevent;
end
if( CT_CastBarFrame ) then
CT_CastBarFrame.spellName = SHT_AIMED_SHOT;
end
CastingBarFrameStatusBar:SetStatusBarColor(1.0, 0.7, 0.0);
CastingBarSpark:Show();
CastingBarFrame.startTime = GetTime();
CastingBarFrame.maxValue = CastingBarFrame.startTime + duration;
CastingBarFrameStatusBar:SetMinMaxValues(CastingBarFrame.startTime, CastingBarFrame.maxValue);
CastingBarFrameStatusBar:SetValue(CastingBarFrame.startTime);
CastingBarText:SetText(SHT_AIMED_SHOT);
CastingBarFrame:SetAlpha(1.0);
CastingBarFrame.holdTime = 0;
CastingBarFrame.casting = 1;
CastingBarFrame.fadeOut = nil;
CastingBarFrame:Show();
CastingBarFrame.mode = "casting";
end
end
end
if( SHT_sfind( text, SHT_STING )
or string.find( text, SHT_TRAP )
or string.find( text, SHT_INTIM )
or string.find(text, SHT_BW )
or string.find(text, SHT_FLARE)
or string.find(text, SHT_CONC_SHOT )
or string.find( text, SHT_SCATTER ) )then
checkForSpellFail = true;
checkForSpellName = text;
else
checkForSpellFail = false;
checkForSpellName = nil;
--DEFAULT_CHAT_FRAME:AddMessage("Button pressed: "..text, 1, 1, 0 );
end
end
end
function SHunterTimers_ShowOptions()
for i=1, 18 do
if( SHTvars["skills"][SHT_OPTIONS_CHECK[i]] ) then
getglobal("SHunterTimersOptionsTimersCheckButton"..i):SetChecked(1);
else
getglobal("SHunterTimersOptionsTimersCheckButton"..i):SetChecked(0);
end
end
if( SHTvars["on"] ) then
SHunterTimersOptionsBarCheckButtonOn:SetChecked(1);
else
SHunterTimersOptionsBarCheckButtonOn:SetChecked(0);
end
if( SHTvars["Aimed Shot"] ) then
SHunterTimersOptionsBarCheckButton19:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton19:SetChecked(0);
end
if( SHTvars["frenzy"] ) then
SHunterTimersOptionsBarCheckButton20:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton20:SetChecked(0);
end
if( SHTvars["locked"] ) then
SHunterTimersOptionsBarCheckButton21:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton21:SetChecked(0);
end
if( SHTvars["skills"][SHT_OPTIONS_CHECK[23]] ) then
SHunterTimersOptionsTimersCheckButton23:SetChecked(1)
else
SHunterTimersOptionsTimersCheckButton23:SetChecked(0)
end
if( SHTvars["colorchange"] ) then
SHunterTimersOptionsBarCheckButton22:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton22:SetChecked(0);
end
if( SHTvars["showtex"] ) then
SHunterTimersOptionsBarCheckButton24:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton24:SetChecked(0);
end
if( SHTvars["largetex"] ) then
SHunterTimersOptionsBarCheckButton25:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton25:SetChecked(0);
end
if( SHTvars["append"] ) then
SHunterTimersOptionsBarCheckButton26:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton26:SetChecked(0);
end
if( SHTvars["hidetext"] ) then
SHunterTimersOptionsBarCheckButton27:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton27:SetChecked(0);
end
if( SHTvars["hidetime"] ) then
SHunterTimersOptionsBarCheckButton28:SetChecked(1);
else
SHunterTimersOptionsBarCheckButton28:SetChecked(0);
end
if( SHTvars["gap"] ) then
SHunterTimersOptionsBarCheckButton29:SetChecked(0);
else
SHunterTimersOptionsBarCheckButton29:SetChecked(1);
end
if( SHTvars["padding"] ) then
SHunterTimersOptionsBarCheckButton30:SetChecked(0);
else
SHunterTimersOptionsBarCheckButton30:SetChecked(1);
end
SHunterTimersOptionsBarEditBox1:SetText(SHTvars["aimeddelay"]);
SHunterTimersOptionsBarEditBox2:SetText(SHTvars["shotdelay"]);
local r, g, b, a = unpack(SHTvars["barstartcolor"]);
local rd, gd, bd, ad = unpack( SHTvars["bardelta"] );
rd = rd + r;
gd = gd + g;
bd = bd + b;
ad = ad + a;
SHunterTimersOptionsBarColor1Swatch:SetVertexColor(r, g, b);
SHunterTimersOptionsBarColor1Swatch.r = r;
SHunterTimersOptionsBarColor1Swatch.g = g;
SHunterTimersOptionsBarColor1Swatch.b = b;
SHunterTimersOptionsBarColor1Swatch.a = a;
SHunterTimersOptionsBarColor2Swatch:SetVertexColor(rd, gd, bd);
SHunterTimersOptionsBarColor2Swatch.r = rd;
SHunterTimersOptionsBarColor2Swatch.g = gd;
SHunterTimersOptionsBarColor2Swatch.b = bd;
SHunterTimersOptionsBarColor2Swatch.a = ad;
SHunterTimersOptionsBarColor3Swatch:SetVertexColor(SHTvars["bg"].r, SHTvars["bg"].g, SHTvars["bg"].b, SHTvars["bg"].a);
SHunterTimersOptionsBarColor3Swatch.r = SHTvars["bg"].r;
SHunterTimersOptionsBarColor3Swatch.g = SHTvars["bg"].g;
SHunterTimersOptionsBarColor3Swatch.b = SHTvars["bg"].b;
SHunterTimersOptionsBarColor3Swatch.a = SHTvars["bg"].a;
SHunterTimersOptionsBarColor4Swatch:SetVertexColor( unpack( SHTvars["borderalpha"]) );
SHunterTimersOptionsBarColor4Swatch.r, SHunterTimersOptionsBarColor4Swatch.g, SHunterTimersOptionsBarColor4Swatch.b, SHunterTimersOptionsBarColor4Swatch.a = unpack( SHTvars["borderalpha"] );
SHunterTimersOptionsBarColor5Swatch:SetVertexColor(unpack(SHTvars["skillcolor"]));
SHunterTimersOptionsBarColor5Swatch.r, SHunterTimersOptionsBarColor5Swatch.g, SHunterTimersOptionsBarColor5Swatch.b, SHunterTimersOptionsBarColor5Swatch.a = unpack( SHTvars["skillcolor"] );
SHunterTimersOptionsBarColor6Swatch:SetVertexColor(unpack(SHTvars["timecolor"]));
SHunterTimersOptionsBarColor6Swatch.r, SHunterTimersOptionsBarColor6Swatch.g, SHunterTimersOptionsBarColor6Swatch.b, SHunterTimersOptionsBarColor6Swatch.a = unpack( SHTvars["timecolor"] );
SHunterTimersOptionsBarColor7Swatch:SetVertexColor(unpack(SHTvars["targetcolor"]));
SHunterTimersOptionsBarColor7Swatch.r, SHunterTimersOptionsBarColor7Swatch.g, SHunterTimersOptionsBarColor7Swatch.b, SHunterTimersOptionsBarColor7Swatch.a = unpack( SHTvars["targetcolor"] );
SHunterTimersOptionsBarSlider1Slider:SetValue(SHTvars["bardistance"]);
SHunterTimersOptionsBarSlider2Slider:SetValue(SHTvars["scale"]/UIParent:GetScale());
SHunterTimersOptionsBarSlider3Slider:SetValue(SHTvars["flash"]);
SHunterTimersOptionsBarSlider4Slider:SetValue(SHTvars["step"]);
SHunterTimersOptionsBarSlider5Slider:SetValue(SHTvars["mili"]);
SHunterTimersOptionsBarSlider6Slider:SetValue(SHTvars["overallalpha"]);
SHunterTimersOptionsBarSlider7Slider:SetValue(SHTvars["barheight"]);
SHunterTimersOptions:Show();
end
function SHunterTimers_SaveOptions()
for i=1, 18 do
if( getglobal("SHunterTimersOptionsTimersCheckButton"..i):GetChecked() == 1 ) then
SHTvars["skills"][SHT_OPTIONS_CHECK[i]] = true;
else
SHTvars["skills"][SHT_OPTIONS_CHECK[i]] = false;
end
end
if( SHunterTimersOptionsBarCheckButtonOn:GetChecked() == 1 ) then
SHTvars["on"] = true;
else
SHTvars["on"] = false;
end
if( SHunterTimersOptionsBarCheckButton19:GetChecked() == 1 ) then
SHTvars["Aimed Shot"] = true;
else
SHTvars["Aimed Shot"] = false;
end
if( SHunterTimersOptionsBarCheckButton20:GetChecked() == 1 ) then
SHTvars["frenzy"] = true;
else
SHTvars["frenzy"] = false;
end
if( SHunterTimersOptionsBarCheckButton21:GetChecked() == 1 ) then
SHTvars["locked"] = true;
SHunterTimersAnchor:Hide();
else
SHTvars["locked"] = false;
SHunterTimersAnchor:Show();
end
if( SHunterTimersOptionsTimersCheckButton23:GetChecked() == 1) then
SHTvars["skills"][SHT_OPTIONS_CHECK[23]] = true;
else
SHTvars["skills"][SHT_OPTIONS_CHECK[23]] = false;
end
if( SHunterTimersOptionsBarCheckButton22:GetChecked() == 1 ) then
SHTvars["colorchange"] = true;
else
SHTvars["colorchange"] = false;
end
if( SHunterTimersOptionsBarCheckButton24:GetChecked() == 1 ) then
SHTvars["showtex"] = true;
else
SHTvars["showtex"] = false;
end
if( SHunterTimersOptionsBarCheckButton25:GetChecked() == 1 ) then
SHTvars["largetex"] = true;
else
SHTvars["largetex"] = false;
end
if( SHunterTimersOptionsBarCheckButton26:GetChecked() == 1 ) then
SHTvars["append"] = true;
else
SHTvars["append"] = false;
end
if( SHunterTimersOptionsBarCheckButton27:GetChecked() == 1 ) then
SHTvars["hidetext"] = true;
else
SHTvars["hidetext"] = false;
end
if( SHunterTimersOptionsBarCheckButton28:GetChecked() == 1 ) then
SHTvars["hidetime"] = true;
else
SHTvars["hidetime"] = false;
end
if( SHunterTimersOptionsBarCheckButton29:GetChecked() == 1 ) then
SHTvars["gap"] = false;
else
SHTvars["gap"] = true;
end
if( SHunterTimersOptionsBarCheckButton30:GetChecked() == 1 ) then
SHTvars["padding"] = false;
else
SHTvars["padding"] = true;
end
SHTvars["aimeddelay"] = 1*SHunterTimersOptionsBarEditBox1:GetText();
SHTvars["shotdelay"] = 1*SHunterTimersOptionsBarEditBox2:GetText();
--[[ old
if( SHTvars["showtex"] ) then
local barwidth;
if( SHTvars["largetex"] ) then
barwidth = 199;
else
barwidth = 205;
end
for i=1, 11 do
getglobal("SHunterTimersStatus"..i.."Icon"):Show();
local barframe = getglobal("SHunterTimersStatus"..i.."Bar");
barframe:SetWidth( barwidth );
barframe:ClearAllPoints();
barframe:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 5, 0 );
barframe = getglobal("SHunterTimersStatus"..i.."BGBar");
barframe:SetWidth( barwidth );
barframe:ClearAllPoints();
barframe:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 5, 0 );
if( SHTvars["largetex"] ) then
barframe:GetParent():SetHeight(16);
getglobal("SHunterTimersStatus"..i.."Icon"):SetHeight(16);
getglobal("SHunterTimersStatus"..i.."Icon"):SetWidth(16);
else
barframe:GetParent():SetHeight(10);
getglobal("SHunterTimersStatus"..i.."Icon"):SetHeight(10);
getglobal("SHunterTimersStatus"..i.."Icon"):SetWidth(10);
end
end
else
for i=1, 11 do
getglobal("SHunterTimersStatus"..i.."Icon"):Hide();
local barframe = getglobal("SHunterTimersStatus"..i.."Bar");
barframe:SetWidth( 220 );
barframe:ClearAllPoints();
barframe:SetPoint("CENTER", "SHunterTimersStatus"..i, "CENTER", 0, 0 );
barframe = getglobal("SHunterTimersStatus"..i.."BGBar");
barframe:SetWidth( 220 );
barframe:ClearAllPoints();
barframe:SetPoint("CENTER", "SHunterTimersStatus"..i, "CENTER", 0, 0 );
barframe:GetParent():SetHeight(10);
getglobal("SHunterTimersStatus"..i.."Icon"):SetHeight(10);
getglobal("SHunterTimersStatus"..i.."Icon"):SetWidth(10);
end
end ]]
SHTvars["barstartcolor"][1] = SHunterTimersOptionsBarColor1Swatch.r;
SHTvars["barstartcolor"][2] = SHunterTimersOptionsBarColor1Swatch.g;
SHTvars["barstartcolor"][3] = SHunterTimersOptionsBarColor1Swatch.b;
SHTvars["barstartcolor"][4] = SHunterTimersOptionsBarColor1Swatch.a;
SHTvars["bardelta"][1] = SHunterTimersOptionsBarColor2Swatch.r - SHunterTimersOptionsBarColor1Swatch.r;
SHTvars["bardelta"][2] = SHunterTimersOptionsBarColor2Swatch.g - SHunterTimersOptionsBarColor1Swatch.g;
SHTvars["bardelta"][3] = SHunterTimersOptionsBarColor2Swatch.b - SHunterTimersOptionsBarColor1Swatch.b;
SHTvars["bardelta"][4] = SHunterTimersOptionsBarColor2Swatch.a - SHunterTimersOptionsBarColor1Swatch.a;
SHTvars["borderalpha"][1] = SHunterTimersOptionsBarColor4Swatch.r;
SHTvars["borderalpha"][2] = SHunterTimersOptionsBarColor4Swatch.g;
SHTvars["borderalpha"][3] = SHunterTimersOptionsBarColor4Swatch.b;
SHTvars["borderalpha"][4] = SHunterTimersOptionsBarColor4Swatch.a;
SHTvars["skillcolor"][1] = SHunterTimersOptionsBarColor5Swatch.r;
SHTvars["skillcolor"][2] = SHunterTimersOptionsBarColor5Swatch.g;
SHTvars["skillcolor"][3] = SHunterTimersOptionsBarColor5Swatch.b;
SHTvars["skillcolor"][4] = SHunterTimersOptionsBarColor5Swatch.a;
SHTvars["timecolor"][1] = SHunterTimersOptionsBarColor6Swatch.r;
SHTvars["timecolor"][2] = SHunterTimersOptionsBarColor6Swatch.g;
SHTvars["timecolor"][3] = SHunterTimersOptionsBarColor6Swatch.b;
SHTvars["timecolor"][4] = SHunterTimersOptionsBarColor6Swatch.a;
SHTvars["targetcolor"][1] = SHunterTimersOptionsBarColor7Swatch.r;
SHTvars["targetcolor"][2] = SHunterTimersOptionsBarColor7Swatch.g;
SHTvars["targetcolor"][3] = SHunterTimersOptionsBarColor7Swatch.b;
SHTvars["targetcolor"][4] = SHunterTimersOptionsBarColor7Swatch.a;
SHTvars["bg"].r = SHunterTimersOptionsBarColor3Swatch.r;
SHTvars["bg"].g = SHunterTimersOptionsBarColor3Swatch.g;
SHTvars["bg"].b = SHunterTimersOptionsBarColor3Swatch.b;
SHTvars["bg"].a = SHunterTimersOptionsBarColor3Swatch.a;
SHTvars["bardistance"] = SHunterTimersOptionsBarSlider1Slider:GetValue();
SHTvars["scale"] = SHunterTimersOptionsBarSlider2Slider:GetValue()*UIParent:GetScale();
SHTvars["flash"] = SHunterTimersOptionsBarSlider3Slider:GetValue();
SHTvars["step"] = SHunterTimersOptionsBarSlider4Slider:GetValue();
SHTvars["mili"] = SHunterTimersOptionsBarSlider5Slider:GetValue();
SHTvars["overallalpha"] = SHunterTimersOptionsBarSlider6Slider:GetValue();
SHTvars["barheight"] = SHunterTimersOptionsBarSlider7Slider:GetValue();
SHunterTimers_SetSettings();
SHunterTimersOptions:Hide();
end
function SHunterTimers_SetSettings()
if( SHTvars["on"] ) then
UseAction = SHunterTimers_OnUseAction;
CastSpellByName = SHunterTimers_OnCastSpellByName;
CastSpell = SHunterTimers_OnCastSpell;
else
UseAction = SHunterTimers_Real_UseAction;
CastSpellByName = SHunterTimers_Real_CastSpellByName;
CastSpell = SHunterTimers_Real_CastSpell;
end
SHunterTimersFrame:SetBackdropColor(SHTvars["bg"].r, SHTvars["bg"].g, SHTvars["bg"].b, SHTvars["bg"].a);
SHunterTimersFrame:SetBackdropBorderColor(unpack(SHTvars["borderalpha"] ) );
for i=1, SHT_NUM_BARS do
local barframe = getglobal("SHunterTimersStatus"..i);
local bar = getglobal( "SHunterTimersStatus"..i.."Bar");
local bg = getglobal( "SHunterTimersStatus"..i.."BGBar");
local barwidth = 220;
barframe:SetHeight( SHTvars["barheight"] );
bar:SetHeight( SHTvars["barheight"] );
bg:SetHeight( SHTvars["barheight"] );
local icon = getglobal("SHunterTimersStatus"..i.."Icon");
if( SHTvars["showtex"] ) then
icon:Show();
if( SHTvars["gap"] ) then
barwidth = barwidth - 5;
end
if( SHTvars["largetex"] ) and ( SHTvars["barheight"] < 16) then
barframe:SetHeight(16);
icon:SetHeight(16);
icon:SetWidth(16);
barwidth = barwidth - 16;
else
icon:SetHeight( SHTvars["barheight"] );
icon:SetWidth( SHTvars["barheight"] );
barwidth = barwidth - SHTvars["barheight"];
end
bar:ClearAllPoints();
if( SHTvars["gap"] ) then
bar:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 5, 0 );
else
bar:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 0, 0 );
end
bg:ClearAllPoints();
if( SHTvars["gap"] ) then
bg:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 5, 0 );
else
bg:SetPoint("LEFT", "SHunterTimersStatus"..i.."Icon", "RIGHT", 0, 0 );
end
else
icon:Hide();
bar:SetPoint("LEFT", "SHunterTimersStatus"..i, "LEFT", 0, 0 );
bg:SetPoint("LEFT", "SHunterTimersStatus"..i, "LEFT", 0, 0 );
end
barframe:SetWidth(220);
bar:SetWidth(barwidth);
bg:SetWidth(barwidth);
if( SHTvars["hidetext"] ) then
getglobal("SHunterTimersStatus"..i.."BarLeftText"):Hide();
else
getglobal("SHunterTimersStatus"..i.."BarLeftText"):Show();
end
if( SHTvars["hidetime"] ) then
getglobal("SHunterTimersStatus"..i.."BarRightText"):Hide();
else
getglobal("SHunterTimersStatus"..i.."BarRightText"):Show();
end
end
local height;
if( not SHTvars["largetex"] ) or ( SHTvars["barheight"] >= 16 ) then
height = SHTvars["numBars"] * (SHTvars["barheight"] + SHTvars["bardistance"]) - SHTvars["bardistance"] + 10;
else
height = SHTvars["numBars"] * (16 + SHTvars["bardistance"]) - SHTvars["bardistance"] + 10;
end
if( SHTvars["padding"] ) then
SHunterTimersFrame:SetWidth( 240 );
SHunterTimersStatus1:SetPoint( "TOPLEFT", "SHunterTimersFrame", "TOPLEFT", 10, -10 );
height = height + 10;
else
SHunterTimersFrame:SetWidth( 230 );
SHunterTimersStatus1:SetPoint( "TOPLEFT", "SHunterTimersFrame", "TOPLEFT", 5, -5 );
end
SHunterTimersFrame:SetHeight(height);
for i=2, SHT_NUM_BARS do
getglobal("SHunterTimersStatus"..i):ClearAllPoints();
getglobal("SHunterTimersStatus"..i):SetPoint("TOP", "SHunterTimersStatus"..(i-1), "BOTTOM", 0, -SHTvars["bardistance"]);
end
SHunterTimersFrame:SetScale( SHTvars["scale"] );
SHunterTimersFrame:SetAlpha( SHTvars["overallalpha"] );
for i=1, SHT_NUM_BARS do
getglobal("SHunterTimersStatus"..i):SetScale( SHTvars["scale"] );
getglobal("SHunterTimersStatus"..i):SetAlpha( SHTvars["overallalpha"] );
end
end
function SHT_SetHeight()
local height;
if( not SHTvars["largetex"] ) or ( SHTvars["barheight"] >= 16 ) then
height = SHTvars["numBars"] * (SHTvars["barheight"] + SHTvars["bardistance"]) - SHTvars["bardistance"] + 10;
else
height = SHTvars["numBars"] * (16 + SHTvars["bardistance"]) - SHTvars["bardistance"] + 10;
end
if( SHTvars["padding"] ) then
height = height + 10;
end
SHunterTimersFrame:SetHeight(height);
SHunterTimers_SetWidths();
end
local SHTSetColorFunc = {
[1] = function() SHTSetColor(1) end,
[2] = function() SHTSetColor(2) end,
[3] = function() SHTSetColor(3) end,
[4] = function() SHTSetColor(4) end,
[5] = function() SHTSetColor(5) end,
[6] = function() SHTSetColor(6) end,
[7] = function() SHTSetColor(7) end
};
local SHTSetOpacityFunc = {
[1] = function() SHTSetOpacity(1) end,
[2] = function() SHTSetOpacity(2) end,
[3] = function() SHTSetOpacity(3) end,
[4] = function() SHTSetOpacity(4) end,
[5] = function() SHTSetOpacity(5) end,
[6] = function() SHTSetOpacity(6) end,
[7] = function() SHTSetOpacity(7) end
};
local SHTCancelFunc = {
[1] = function(x) SHTCancelColor(1, x) end,
[2] = function(x) SHTCancelColor(2, x) end,
[3] = function(x) SHTCancelColor(3, x) end,
[4] = function(x) SHTCancelColor(4, x) end,
[5] = function(x) SHTCancelColor(5, x) end,
[6] = function(x) SHTCancelColor(6, x) end,
[7] = function(x) SHTCancelColor(7, x) end
};
function SHT_ColorPicker(id)
CloseMenus();
local texture = getglobal("SHunterTimersOptionsBarColor"..id.."Swatch");
ColorPickerFrame.func = SHTSetColorFunc[id];
ColorPickerFrame:SetColorRGB(texture.r, texture.g, texture.b);
ColorPickerFrame.previousValues = {r = texture.r, g = texture.g, b = texture.b, opacity =texture.a};
ColorPickerFrame.cancelFunc = SHTCancelFunc[id];
if( id < 5 ) then
ColorPickerFrame.hasOpacity = true;
ColorPickerFrame.opacity = 1 - texture.a;
ColorPickerFrame.opacityFunc = SHTSetOpacityFunc[id];
else
ColorPickerFrame.hasOpacity = false;
end
--OpacityFrame.opacityFunc = SHTSetOpacityFunc[id];
ColorPickerFrame:Show();
end
function SHTSetOpacity(id)
local a = 1 - OpacitySliderFrame:GetValue();
local texture = getglobal("SHunterTimersOptionsBarColor"..id.."Swatch");
--DEFAULT_CHAT_FRAME:AddMessage(id);
texture:SetAlpha(a);
texture.a = a;
end
function SHTSetColor(id)
local r, g, b = ColorPickerFrame:GetColorRGB();
local texture = getglobal("SHunterTimersOptionsBarColor"..id.."Swatch");
--SHTSetOpacity(id);
texture:SetVertexColor(r, g, b);
texture.r = r;
texture.g = g;
texture.b = b;
end
function SHTCancelColor(id, prev)
local texture = getglobal("SHunterTimersOptionsBarColor"..id.."Swatch");
local r = prev.r;
local g = prev.g;
local b = prev.b;
local a = prev.opacity;
texture:SetVertexColor(r, g, b);
texture:SetAlpha( a );
texture.r = r;
texture.g = g;
texture.b = b;
texture.a = a;
end
function SHTColor(r, g, b, a)
if( not a ) then
a = 1;
end
return string.format("|c%02x%02x%02x%02x", (a*255), (r*255), (g*255), (b*255));
end
function SHunterTimers_Tooltip(barframe)
--DEFAULT_CHAT_FRAME:AddMessage(barframe:GetName());
if( barframe.target ) then
GameTooltip_SetDefaultAnchor(GameTooltip, barframe);
GameTooltip:ClearLines();
GameTooltip:AddLine( barframe.target );
GameTooltip:Show();
end
end
function SHT_sfind( s, pattern )
for p in string.gfind( pattern, "([^|]+)" ) do
if( string.find( s, p ) )then
return string.find( s, p );
end
end
return false;
end