vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Spell Alert
Author: Awen
Modified by: Mithryn
Thanks: Quu (Code contribution)
Cyron (German Translation)
Awen (Original Code)
]]
SAConfig = { };
SAConfig.color = { };
SAConfig.on = 1;
SAConfig.emote_on = 1;
SAConfig.retarget_on = 1;
SAConfig.targetonly = 1;
SAConfig.heals = 1;
SAConfig.cc = 1;
SAConfig.dispelable = 1;
SAConfig.damage = 1;
SAConfig.misc = 1;
SAConfig.pos = 20;
SAConfig.shadow = 0;
SAConfig.zoom = 37;
SAConfig.color.at = {r=1,g=0,b=0};
SAConfig.color.he = {r=1,g=1,b=0};
SAConfig.color.bu = {r=0,g=1,b=0};
SAConfig.color.em = {r=1,g=0.6,b=0};
SAConfig.color.to = {r=0.5,g=0.5,b=0.5};
SAConfig.radio = 1;
SAConfig.drag = 5;
SAConfig.holdTime = 1;
SAConfig.livingBomb = 1;
local kind = 0;
local sa_gains = { };
local sa_color_prev = {r=1,g=1,b=1};
local fadeInTime = 0.1;
local fadeOutTime = 0.4;
local startTime = 0;
local cType = 0; -- 0 = damage, 1 = heal, 2 = buff, 3 = emote, 4 = totem
local shadow;
local getX, getY;
local change = 0;
local changed = false;
local sa_options = 0;
function SpellAlert_OnLoad()
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS");
this:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF");
this:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE");
this:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF");
this:RegisterEvent("CHAT_MSG_MONSTER_EMOTE");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE");
this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS");
this:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER");
SlashCmdList["SpellAlertCOMMAND"] = SpellAlertHandler;
SLASH_SpellAlertCOMMAND1 = "/spellalert";
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert by Awen. Type /spellalert for options.");
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert was modified by Mithryn.");
end
function SpellAlert_OnEvent()
if (SAConfig.on == 0) then
return;
end
if (event == "VARIABLES_LOADED") then
if (not SAConfig) then
SAConfig = {};
SAConfig.on = 1;
SAConfig.emote_on = 1;
SAConfig.retarget_on = 1;
SAConfig.targetonly = 1;
SAConfig.heals = 1;
SAConfig.cc = 1;
SAConfig.dispelable = 1;
SAConfig.damage = 1;
SAConfig.misc = 1;
SAConfig.pos = 20;
SAConfig.shadow = 0;
SAConfig.zoom = 37;
SAConfig.radio = 1;
SAConfig.version = 1.5;
SAConfig.shadow = 0;
SAConfig.drag = 5;
SAConfig.version = 1.6;
SAConfig.holdTime = 1;
SAConfig.livingBomb = 1;
SAConfig.color = {};
SAConfig.color.at = {r=1,g=0,b=0};
SAConfig.color.he = {r=1,g=1,b=0};
SAConfig.color.bu = {r=0,g=1,b=0};
SAConfig.color.em = {r=1,g=0.6,b=0};
SAConfig.color.to = {r=0.5,g=0.5,b=0.5};
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert: Setting Options to Default");
elseif (not SAConfig.color) then
SAConfig.color = {};
SAConfig.color.at = {r=1,g=0,b=0};
SAConfig.color.he = {r=1,g=1,b=0};
SAConfig.color.bu = {r=0,g=1,b=0};
SAConfig.color.em = {r=1,g=0.6,b=0};
SAConfig.color.to = {r=0.5,g=0.5,b=0.5};
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert: Setting Options to Default");
elseif (not SAConfig.radio) then
SAConfig.radio = 1;
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert: Setting Options to Default");
elseif (not SAConfig.version or not SAConfig.version == 1.5) then
SAConfig.version = 1.5;
SAConfig.shadow = 0;
SAConfig.drag = 5;
DEFAULT_CHAT_FRAME:AddMessage("Updated SpellAlert to 1.5");
elseif (not SAConfig.version or not SAConfig.version == 1.6) then
SAConfig.version = 1.6;
SAConfig.holdTime = 1;
SAConfig.livingBomb = 1;
DEFAULT_CHAT_FRAME:AddMessage("Updated SpellAlert to 1.6");
end
if(SAConfig.shadow == 0) then
shadow = "";
elseif (SAConfig.shadow == 1) then
shadow = "OUTLINE";
elseif (SAConfig.shadow == 2) then
shadow = "THICKOUTLINE";
end
AlertFrameText:SetTextColor(1, 1, 1);
SpellAlert_Toggle();
AlertFrameText:SetFont("Fonts\\FRIZQT__.TTF", SAConfig.zoom, shadow);
AlertFrameText:SetText("SpellAlert Loaded!");
if(not SAConfig.holdTime) then
SAConfig.holdTime = 1;
end
AlertFrame_Show()
end
local mob, spell;
if (event == "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE") then
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_BEGIN_CAST) do
if (not SpellAlert_isParty(mob)) then
cType = 0;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." begins to cast |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." beings to cast |r"..spell..".");
end
end
return;
end
elseif (event == "CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF") then
for mob, spell, k in string.gfind(arg1, SA_PTN_SPELL_GAINS_X) do
return;
end
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_BEGIN_CAST) do
if (not SpellAlert_isParty(mob)) then
cType = 1;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." begins to cast |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." beings to cast |r"..spell..".");
end
end
return;
end
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_TOTEM) do
if (not SpellAlert_isParty(mob)) then
cType = 4;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." casts |cffffffff"..spell.."|r Totem.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." casts |r"..spell.." Totem.");
end
end
return;
end
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_GAINS) do
cType = 2;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." gains |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." gains |r"..spell..".");
end
return;
end
elseif (event == "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF") then
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_BEGIN_CAST) do
cType = 1;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." begins to cast |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." begins to cast |r"..spell..".");
end
return;
end
elseif (event == "CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS") then
for mob, spell, k in string.gfind(arg1, SA_PTN_SPELL_GAINS_X) do
return;
end
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_GAINS) do
cType = 2;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." gains |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." gains |r"..spell..".");
end
return;
end
elseif (event == "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE") then
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_BEGIN_CAST) do
cType = 0;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." begins to cast |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." begins to cast |r"..spell..".");
end
return;
end
elseif (event == "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS") then
for mob, spell, temp in string.gfind(arg1, SA_PTN_SPELL_GAINS_X) do
return;
end
for mob, spell in string.gfind(arg1, SA_PTN_SPELL_GAINS) do
if ( (spell == SA_WOTF) or
(spell == SA_BERSERKER_RAGE) ) then
sa_gains[mob] = {};
sa_gains[mob].spell = spell;
sa_gains[mob].time = GetTime();
end
cType = 2;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, mob.." gains |cffffffff"..spell.."|r.");
else
SpellAlert_alert(mob, spell, "|cffffffff"..mob.." gains |r"..spell..".");
end
return;
end
elseif (event == "CHAT_MSG_SPELL_AURA_GONE_OTHER") then
for spell, mob in string.gfind(arg1, SA_PTN_SPELL_FADE) do
if ( (spell == SA_WOTF) or
(spell == SA_BERSERKER_RAGE) ) then
local tt = sa_gains[mob];
if (tt) then
if (tt.spell == spell) then
if (GetTime() - tt.time <= 30) then
cType = 2;
if (SAConfig.radio == 1) then
SpellAlert_alert(mob, spell, arg1);
elseif (SAConfig.radio == 2) then
SpellAlert_alert(mob, spell, "|cffffffff"..spell.."|r gains "..mob..".");
else
SpellAlert_alert(mob, spell, spell.."|cffffffff fades from "..mob..".");
end
end
end
tt[mob] = nil;
return;
end
end
end
elseif (event == "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE") then
if (arg1 == SA_AFFLICT_LIVINGBOMB) then
if (SAConfig.livingBomb == 1) then
AlertFrameText:SetText("YOU ARE THE LIVING BOMB!");
AlertFrameText:SetTextColor(SAConfig.color.at.r,SAConfig.color.at.g,SAConfig.color.at.b);
AlertFrame_Show();
end
end
if (arg1 == SA_AFFLICT_SCATTERSHOT) then
SpellAlert_retarget(SA_SCATTERSHOT);
elseif (arg1 == SA_AFFLICT_FEAR) then
SpellAlert_retarget(SA_FEAR);
elseif (arg1 == SA_AFFLICT_INTIMIDATING_SHOUT) then
SpellAlert_retarget(SA_INTIMIDATING_SHOUT);
elseif (arg1 == SA_AFFLICT_PSYCHIC_SCREAM) then
SpellAlert_retarget(SA_PSYCHIC_SCREAM);
elseif (arg1 == SA_AFFLICT_PANIC) then
SpellAlert_retarget(SA_PANIC);
elseif (arg1 == SA_AFFLICT_BELLOWING_ROAR) then
SpellAlert_retarget(SA_BELLOWING_ROAR);
elseif (arg1 == SA_AFFLICT_ANCIENT_DESPAIR) then
SpellAlert_retarget(SA_ANCIENT_DESPAIR);
elseif (arg1 == SA_AFFLICT_ANCIENT_SCREECH) then
SpellAlert_retarget(SA_SCREECH);
elseif (arg1 == SA_AFFLICT_POLYMORPH) then
SpellAlert_retarget(SA_POLYMORPH);
elseif (arg1 == SA_AFFLICT_DEATHCOIL) then
SpellAlert_retarget(SA_DEATHCOIL);
end
elseif (event == "CHAT_MSG_EMOTE") then
if (arg1) then
if (SAConfig.emote_on == 1) then
cType = 3;
SpellAlert_alert("", "", arg1);
end
end
elseif (event == "CHAT_MSG_MONSTER_EMOTE") then
local name = arg2;
if (not name) then
name = "nil";
end
if (arg1) then
if (SAConfig.emote_on == 1) then
cType = 3;
-- AlertFrameText:SetTextColor(1,0.6,0);
SpellAlert_alert(name, arg1, name .. " " .. arg1);
end
end
end
end
function SpellAlert_setOptions()
SAConfig.on = 1;
SAConfig.emote_on = 1;
SAConfig.retarget_on = 1;
SAConfig.targetonly = 1;
SAConfig.heals = 1;
SAConfig.cc = 1;
SAConfig.dispelable = 1;
SAConfig.damage = 1;
SAConfig.misc = 1;
SAConfig.pos = 20;
SAConfig.shadow = 0;
SAConfig.zoom = 37;
SAConfig.color.at = {r=1,g=0,b=0};
SAConfig.color.he = {r=1,g=1,b=0};
SAConfig.color.bu = {r=0,g=1,b=0};
SAConfig.color.em = {r=1,g=0.6,b=0};
SAConfig.color.to = {r=0.5,g=0.5,b=0.5};
SAConfig.radio = 1;
SAConfig.drag = 5;
SAConfig.livingBomb = 1;
SAConfig.holdTime = 1;
SAOptionsEnable:SetChecked(SpellAlert_Int2Bool(SAConfig.on));
SAOptionsEmote:SetChecked(SpellAlert_Int2Bool(SAConfig.emote_on));
SAOptionsRetarget:SetChecked(SpellAlert_Int2Bool(SAConfig.retarget_on));
SAOptionsTargetOnly:SetChecked(SpellAlert_Int2Bool(SAConfig.targetonly));
SAOptionsHeals:SetChecked(SpellAlert_Int2Bool(SAConfig.heals));
SAOptionsCC:SetChecked(SpellAlert_Int2Bool(SAConfig.cc));
SAOptionsDispelable:SetChecked(SpellAlert_Int2Bool(SAConfig.dispelable));
SAOptionsMisc:SetChecked(SpellAlert_Int2Bool(SAConfig.misc));
SAOptionsDamage:SetChecked(SpellAlert_Int2Bool(SAConfig.damage));
SASizeSlider:SetValue(SAConfig.zoom);
SAPosSlider:SetValue(SAConfig.pos);
SAShadowSlider:SetValue(SAConfig.shadow);
boxColor = getglobal("SAat_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.at.r,SAConfig.color.at.g,SAConfig.color.at.b);
boxColor = getglobal("SAhe_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.he.r,SAConfig.color.he.g,SAConfig.color.he.b);
boxColor = getglobal("SAbu_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.bu.r,SAConfig.color.bu.g,SAConfig.color.bu.b);
boxColor = getglobal("SAem_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.em.r,SAConfig.color.em.g,SAConfig.color.em.b);
boxColor = getglobal("SAto_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.to.r,SAConfig.color.to.g,SAConfig.color.to.b);
SAOptionsRadio1:SetChecked(0);
SAOptionsRadio2:SetChecked(0);
SAOptionsRadio3:SetChecked(0);
SAOptionsRadioA:SetChecked(0);
SAOptionsRadioB:SetChecked(0);
SAOptionsRadioA:SetChecked(1);
SADrag:SetMovable(false);
SADrag:ClearAllPoints();
SADrag:SetPoint("CENTER", "UIParent", "CENTER");
SADrag:Hide();
AlertFrame:ClearAllPoints();
AlertFrame:SetPoint("TOP", 0, SAConfig.pos);
sa_options = 1;
AlertFrameText:SetAlpha(1);
AlertFrameText:Show();
AlertFrameText:SetTextColor(0.3,0.3,0.3);
SAOptionsRadio1:SetChecked(1);
AlertFrameText:SetText("<Enemy Name> begins casting <Spell>!");
end
function SpellAlertHandler(msg)
SpellAlert_OptionsLoad();
SAOptions:Show();
end
function SpellAlert_alert(mob, spell, msg)
if (GetLocale()=="enUS") then
if (SA_SPELLS_IGNORE[spell]) then
return;
end
if (SAConfig.heals == 0) then
if (SA_SPELLS_HEALS[spell] == 1) then
return;
end
end
if (SAConfig.cc == 0) then
if (SA_SPELLS_CC[spell] == 1) then
return;
end
end
if (SAConfig.dispelable == 0) then
if (SA_SPELLS_DISPELABLE[spell] == 1) then
return;
end
end
if (SAConfig.damage == 0) then
if (SA_SPELLS_DAMAGE[spell] == 1) then
return;
end
end
end
SpellAlert_banner(msg, mob);
end
function AlertFrame_Color()
if (SA_SPELLS_HEALS[spell] == 1) then
cType = 1;
-- AlertFrameText:SetTextColor(1,1,0);
end
if (SA_SPELLS_CC[spell] == 1) then
cType = 0;
-- AlertFrameText:SetTextColor(1,0,1);
end
if (SA_SPELLS_DISPELABLE[spell] == 1) then
cType = 2;
-- AlertFrameText:SetTextColor(0,1,0);
end
if (SA_SPELLS_DAMAGE[spell] == 1) then
cType = 0;
-- AlertFrameText:SetTextColor(1,0,0);
end
if (cType == 0) then
AlertFrameText:SetTextColor(SAConfig.color.at.r,SAConfig.color.at.g,SAConfig.color.at.b);
elseif (cType == 1) then
AlertFrameText:SetTextColor(SAConfig.color.he.r,SAConfig.color.he.g,SAConfig.color.he.b);
elseif (cType == 2) then
AlertFrameText:SetTextColor(SAConfig.color.bu.r,SAConfig.color.bu.g,SAConfig.color.bu.b);
elseif (cType == 3) then
AlertFrameText:SetTextColor(SAConfig.color.em.r,SAConfig.color.em.g,SAConfig.color.em.b);
elseif (cType == 4) then
AlertFrameText:SetTextColor(SAConfig.color.to.r,SAConfig.color.to.g,SAConfig.color.to.b);
end
end
function SpellAlert_banner(msg, mob)
if (SAConfig.targetonly == 0) then
AlertFrameText:SetText(msg);
AlertFrame_Color();
AlertFrame_Show();
else
local targetname = UnitName("target");
if (mob == targetname) then
AlertFrameText:SetText(msg);
AlertFrame_Color();
AlertFrame_Show();
end
end
end
function SpellAlert_isParty(name)
for i = 1, 4, 1 do
local partyname = UnitName("party" .. i);
if (name == partyname) then
return 1;
end
end
return nil;
end
function SpellAlert_retarget(spell)
if (SAConfig.retarget_on == 0) then
return;
end
if (not UnitName("target")) then
if (sa_targetName) then
if (sa_targetHostile) then
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert is trying to retarget after " .. spell .. " : " .. sa_targetName);
TargetLastEnemy();
else
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert is trying to retarget after " .. spell .. " : " .. sa_targetName);
TargetByName(sa_targetName);
end
end
end
end
function SpellAlert_retargetHunter()
if (SAConfig.retarget_on == 0) then
return;
end
if (not UnitName("target")) then
if (sa_targetName) then
if (sa_targetHostile) then
TargetByName(sa_targetName);
if (UnitIsDeadOrGhost("target") and UnitCanAttack("player", "target")) then
DEFAULT_CHAT_FRAME:AddMessage("SpellAlert is trying to retarget after Feign Death : " .. sa_targetName);
TargetByName(sa_targetName);
else
ClearTarget();
sa_targetHostile = nil;
sa_targetName = nil;
end
end
end
end
end
function SpellAlert_OpenColorPicker(button, kinda)
kind = kinda;
if ( not button ) then
button = this;
end
ColorPickerFrame.func = SpellAlert_SetColor;
if (kind == 0) then
sa_color_prev.r = SAConfig.color.at.r;
sa_color_prev.g = SAConfig.color.at.g;
sa_color_prev.b = SAConfig.color.at.b;
elseif (kind == 1) then
sa_color_prev.r = SAConfig.color.he.r;
sa_color_prev.g = SAConfig.color.he.g;
sa_color_prev.b = SAConfig.color.he.b;
elseif (kind == 2) then
sa_color_prev.r = SAConfig.color.bu.r;
sa_color_prev.g = SAConfig.color.bu.g;
sa_color_prev.b = SAConfig.color.bu.b;
elseif (kind == 3) then
sa_color_prev.r = SAConfig.color.em.r;
sa_color_prev.g = SAConfig.color.em.g;
sa_color_prev.b = SAConfig.color.em.b;
elseif (kind == 4) then
sa_color_prev.r = SAConfig.color.to.r;
sa_color_prev.g = SAConfig.color.to.g;
sa_color_prev.b = SAConfig.color.to.b;
end
ColorPickerFrame.cancelFunc = SpellAlert_CancelColor;
if (kind == 0) then
ColorPickerFrame:SetColorRGB(SAConfig.color.at.r, SAConfig.color.at.g, SAConfig.color.at.b);
elseif (kind == 1) then
ColorPickerFrame:SetColorRGB(SAConfig.color.he.r, SAConfig.color.he.g, SAConfig.color.he.b);
elseif (kind == 2) then
ColorPickerFrame:SetColorRGB(SAConfig.color.bu.r, SAConfig.color.bu.g, SAConfig.color.bu.b);
elseif (kind == 3) then
ColorPickerFrame:SetColorRGB(SAConfig.color.em.r, SAConfig.color.em.g, SAConfig.color.em.b);
elseif (kind == 4) then
ColorPickerFrame:SetColorRGB(SAConfig.color.to.r, SAConfig.color.to.g, SAConfig.color.to.b);
end
ColorPickerFrame:Show();
end
function SpellAlert_SetColor()
local r,g,b = ColorPickerFrame:GetColorRGB();
local swatch,frame;
if (kind == 0) then
swatch = getglobal("SAat_NormalTexture");
swatch:SetVertexColor(r,g,b);
SAConfig.color.at.r = r;
SAConfig.color.at.g = g;
SAConfig.color.at.b = b;
AlertFrameText:SetTextColor(SAConfig.color.at.r,SAConfig.color.at.g,SAConfig.color.at.b);
elseif (kind == 1) then
swatch = getglobal("SAhe_NormalTexture");
swatch:SetVertexColor(r,g,b);
SAConfig.color.he.r = r;
SAConfig.color.he.g = g;
SAConfig.color.he.b = b;
AlertFrameText:SetTextColor(SAConfig.color.he.r,SAConfig.color.he.g,SAConfig.color.he.b);
elseif (kind == 2) then
swatch = getglobal("SAbu_NormalTexture");
swatch:SetVertexColor(r,g,b);
SAConfig.color.bu.r = r;
SAConfig.color.bu.g = g;
SAConfig.color.bu.b = b;
AlertFrameText:SetTextColor(SAConfig.color.bu.r,SAConfig.color.bu.g,SAConfig.color.bu.b);
elseif (kind == 3) then
swatch = getglobal("SAem_NormalTexture");
swatch:SetVertexColor(r,g,b);
SAConfig.color.em.r = r;
SAConfig.color.em.g = g;
SAConfig.color.em.b = b;
AlertFrameText:SetTextColor(SAConfig.color.em.r,SAConfig.color.em.g,SAConfig.color.em.b);
elseif (kind == 4) then
swatch = getglobal("SAto_NormalTexture");
swatch:SetVertexColor(r,g,b);
SAConfig.color.to.r = r;
SAConfig.color.to.g = g;
SAConfig.color.to.b = b;
AlertFrameText:SetTextColor(SAConfig.color.to.r,SAConfig.color.to.g,SAConfig.color.to.b);
end
end
function SpellAlert_CancelColor()
if (kind == 0) then
swatch = getglobal("SAat_NormalTexture");
SAConfig.color.at.r = sa_color_prev.r;
SAConfig.color.at.g = sa_color_prev.g;
SAConfig.color.at.b = sa_color_prev.b;
swatch:SetVertexColor(sa_color_prev.r, sa_color_prev.g, sa_color_prev.b);
elseif (kind == 1) then
swatch = getglobal("SAhe_NormalTexture");
SAConfig.color.he.r = sa_color_prev.r;
SAConfig.color.he.g = sa_color_prev.g;
SAConfig.color.he.b = sa_color_prev.b;
swatch:SetVertexColor(sa_color_prev.r, sa_color_prev.g, sa_color_prev.b);
elseif (kind == 2) then
swatch = getglobal("SAbu_NormalTexture");
SAConfig.color.bu.r = sa_color_prev.r;
SAConfig.color.bu.g = sa_color_prev.g;
SAConfig.color.bu.b = sa_color_prev.b;
swatch:SetVertexColor(sa_color_prev.r, sa_color_prev.g, sa_color_prev.b);
elseif (kind == 3) then
swatch = getglobal("SAem_NormalTexture");
SAConfig.color.em.r = sa_color_prev.r;
SAConfig.color.em.g = sa_color_prev.g;
SAConfig.color.em.b = sa_color_prev.b;
swatch:SetVertexColor(sa_color_prev.r, sa_color_prev.g, sa_color_prev.b);
elseif (kind == 4) then
swatch = getglobal("SAto_NormalTexture");
SAConfig.color.to.r = sa_color_prev.r;
SAConfig.color.to.g = sa_color_prev.g;
SAConfig.color.to.b = sa_color_prev.b;
swatch:SetVertexColor(sa_color_prev.r, sa_color_prev.g, sa_color_prev.b);
end
AlertFrameText:SetTextColor(0.3,0.3,0.3);
end
function SpellAlert_OptionsClose()
SAConfig.on = SpellAlert_Bool2Int(SAOptionsEnable:GetChecked());
SAConfig.emote_on = SpellAlert_Bool2Int(SAOptionsEmote:GetChecked());
SAConfig.retarget_on = SpellAlert_Bool2Int(SAOptionsRetarget:GetChecked());
SAConfig.targetonly = SpellAlert_Bool2Int(SAOptionsTargetOnly:GetChecked());
SAConfig.heals = SpellAlert_Bool2Int(SAOptionsHeals:GetChecked());
SAConfig.cc = SpellAlert_Bool2Int(SAOptionsCC:GetChecked());
SAConfig.dispelable = SpellAlert_Bool2Int(SAOptionsDispelable:GetChecked());
SAConfig.misc = SpellAlert_Bool2Int(SAOptionsMisc:GetChecked());
SAConfig.damage = SpellAlert_Bool2Int(SAOptionsDamage:GetChecked());
SAConfig.livingBomb = SpellAlert_Bool2Int(SAOptionsBomb:GetChecked());
AlertFrameText:SetText(" ");
sa_options = 0;
SAOptions:Hide();
AlertFrame:ClearAllPoints();
getX = AlertFrame:GetLeft();
getY = AlertFrame:GetTop();
SADrag:Hide();
end
function SpellAlert_OptionsLoad()
local boxColor;
SAOptionsEnable:SetChecked(SpellAlert_Int2Bool(SAConfig.on));
SAOptionsEmote:SetChecked(SpellAlert_Int2Bool(SAConfig.emote_on));
SAOptionsRetarget:SetChecked(SpellAlert_Int2Bool(SAConfig.retarget_on));
SAOptionsTargetOnly:SetChecked(SpellAlert_Int2Bool(SAConfig.targetonly));
SAOptionsHeals:SetChecked(SpellAlert_Int2Bool(SAConfig.heals));
SAOptionsCC:SetChecked(SpellAlert_Int2Bool(SAConfig.cc));
SAOptionsDispelable:SetChecked(SpellAlert_Int2Bool(SAConfig.dispelable));
SAOptionsMisc:SetChecked(SpellAlert_Int2Bool(SAConfig.misc));
SAOptionsDamage:SetChecked(SpellAlert_Int2Bool(SAConfig.damage));
SAOptionsBomb:SetChecked(SpellAlert_Int2Bool(SAConfig.livingBomb));
SASizeSlider:SetValue(SAConfig.zoom);
SAPosSlider:SetValue(SAConfig.pos);
SAShadowSlider:SetValue(SAConfig.shadow);
SADelaySlider:SetValue(SAConfig.holdTime);
boxColor = getglobal("SAat_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.at.r,SAConfig.color.at.g,SAConfig.color.at.b);
boxColor = getglobal("SAhe_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.he.r,SAConfig.color.he.g,SAConfig.color.he.b);
boxColor = getglobal("SAbu_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.bu.r,SAConfig.color.bu.g,SAConfig.color.bu.b);
boxColor = getglobal("SAem_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.em.r,SAConfig.color.em.g,SAConfig.color.em.b);
boxColor = getglobal("SAto_NormalTexture");
boxColor:SetVertexColor(SAConfig.color.to.r,SAConfig.color.to.g,SAConfig.color.to.b);
SAOptionsRadio1:SetChecked(0);
SAOptionsRadio2:SetChecked(0);
SAOptionsRadio3:SetChecked(0);
SAOptionsRadioA:SetChecked(0);
SAOptionsRadioB:SetChecked(0);
sa_options = 1;
AlertFrameText:SetAlpha(1);
AlertFrameText:Show();
AlertFrameText:SetTextColor(0.3,0.3,0.3);
if (SAConfig.radio == 1) then
SAOptionsRadio1:SetChecked(1);
AlertFrameText:SetText("<Enemy Name> begins casting <Spell>!");
elseif (SAConfig.radio == 2) then
SAOptionsRadio2:SetChecked(1);
AlertFrameText:SetText("<Enemy Name> begins casting |cffffffff<Spell>!|r");
else
SAOptionsRadio3:SetChecked(1);
AlertFrameText:SetText("|cffffffff<Enemy Name> begins casting |r<Spell>!");
end
if (SAConfig.drag == 5) then
SAOptionsRadioA:SetChecked(1);
else
SAOptionsRadioB:SetChecked(1);
end
SpellAlert_Toggle();
end
function SA_Radio_OnClick()
local radioId = this:GetID();
if(radioId <= 3) then
SAConfig.radio = radioId;
else
SAConfig.drag = radioId;
end
SA_Radio_Update();
end
function SA_Radio_Update()
SAOptionsRadio1:SetChecked(0);
SAOptionsRadio2:SetChecked(0);
SAOptionsRadio3:SetChecked(0);
SAOptionsRadioA:SetChecked(0);
SAOptionsRadioB:SetChecked(0);
if (SAConfig.radio == 1) then
SAOptionsRadio1:SetChecked(1);
AlertFrameText:SetText("<Enemy Name> begins casting <Spell>!");
elseif (SAConfig.radio == 2) then
SAOptionsRadio2:SetChecked(1);
AlertFrameText:SetText("<Enemy Name> begins casting |cffffffff<Spell>!|r");
else
SAOptionsRadio3:SetChecked(1);
AlertFrameText:SetText("|cffffffff<Enemy Name> begins casting |r<Spell>!");
end
if (SAConfig.drag == 5) then
SAOptionsRadioA:SetChecked(1);
else
SAOptionsRadioB:SetChecked(1);
end
SpellAlert_Toggle()
end
function SpellAlert_Toggle()
if (SAConfig.drag == 5) then
SADrag:SetMovable(false);
AlertFrame:ClearAllPoints();
AlertFrame:SetPoint("TOP", 0, SAConfig.pos);
AlertFrameText:ClearAllPoints();
AlertFrameText:SetPoint("CENTER", "AlertFrame", "CENTER");
AlertFrameText:SetJustifyH("CENTER");
SADrag:Hide();
else
if (sa_options == 1) then
SADrag:Show();
end
AlertFrame:ClearAllPoints();
if ((SADrag:GetLeft()+32) < (GetScreenWidth()/2)) then
AlertFrame:SetPoint("LEFT", "SADrag", "LEFT", 0, -30);
AlertFrameText:ClearAllPoints();
AlertFrameText:SetPoint("LEFT", "AlertFrame", "LEFT");
AlertFrameText:SetJustifyH("LEFT");
else
AlertFrame:SetPoint("RIGHT", "SADrag", "RIGHT", 0, -30);
AlertFrameText:ClearAllPoints();
AlertFrameText:SetPoint("RIGHT", "AlertFrame", "RIGHT");
AlertFrameText:SetJustifyH("RIGHT");
end
SADrag:SetMovable(true);
end
end
function AlertFrame_Adjust()
if (SADrag:IsVisible()) then
if ((SADrag:GetLeft()+32) < (GetScreenWidth()/2)) then
if (change == 0 and not changed) then
AlertFrame:ClearAllPoints();
AlertFrame:SetPoint("LEFT", "SADrag", "LEFT", 0, -30);
AlertFrameText:ClearAllPoints();
AlertFrameText:SetPoint("LEFT", "AlertFrame", "LEFT");
AlertFrameText:SetJustifyH("LEFT");
changed = true;
elseif (change == 1 and changed) then
change = 0;
changed = false;
end
AlertFrameText:SetWidth(GetScreenWidth() - AlertFrame:GetLeft());
else
if (change == 1 and not changed) then
AlertFrame:ClearAllPoints();
AlertFrame:SetPoint("RIGHT", "SADrag", "RIGHT", 0, -30);
AlertFrameText:ClearAllPoints();
AlertFrameText:SetPoint("RIGHT", "AlertFrame", "RIGHT");
AlertFrameText:SetJustifyH("RIGHT");
changed = true;
elseif (change == 0 and changed) then
change = 1;
changed = false;
end
AlertFrameText:SetWidth(GetScreenWidth() - (GetScreenWidth() - AlertFrame:GetRight()));
end
end
end
function SpellAlert_UpdateLook()
if(SAConfig.shadow == 0) then
shadow = "";
elseif (SAConfig.shadow == 1) then
shadow = "OUTLINE";
elseif (SAConfig.shadow == 2) then
shadow = "THICKOUTLINE";
end
AlertFrameText:SetFont("Fonts\\FRIZQT__.TTF", SAConfig.zoom, shadow);
end
function SpellAlert_UpdatePosition()
AlertFrame:ClearAllPoints();
AlertFrame:SetPoint("TOP", 0, SAConfig.pos);
end
function SpellAlert_Bool2Int(val)
if (val) then
return 1;
else
return 0;
end
end
function SpellAlert_Int2Bool(val)
if (val == 0) then
return nil;
else
return 1;
end
end
function AlertFrame_Show()
startTime = GetTime();
AlertFrameText:Show();
end
function SpellAlert_OnUpdate()
local targetName = UnitName("target");
if (targetName) then
sa_targetClass = UnitClass("target");
sa_targetHostile = UnitIsEnemy("player", "target");
sa_targetName = targetName;
else
if (sa_targetName and (sa_targetClass == "Hunter") and sa_targetHostile) then
SpellAlert_retargetHunter();
end
end
if(sa_options == 0) then
local elapsed = GetTime() - startTime;
if ( elapsed < fadeInTime ) then
local alpha = (elapsed / fadeInTime);
AlertFrameText:SetAlpha(alpha);
return;
end
if ( elapsed < (fadeInTime + SAConfig.holdTime) ) then
AlertFrameText:SetAlpha(1.0);
return;
end
if ( elapsed < (fadeInTime + SAConfig.holdTime + fadeOutTime) ) then
local alpha = 1.0 - ((elapsed - SAConfig.holdTime - fadeInTime) / fadeOutTime);
AlertFrameText:SetAlpha(alpha);
return;
end
AlertFrameText:Hide();
end
end