vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
IMBA_SAPPHIRON_LIFEDRAIN_TIME   =       22;
IMBA_SAPPHIRON_LIFEDRAIN_MSG    =       "is afflicted by Life Drain."

IMBA_SAPPHIRON_ICEBOMB_TIME     =       7;
IMBA_SAPPHIRON_ICEBOMB_MSG      =       "Sapphiron begins to cast Frost Breath."


IMBA_SAPPHIRON_LANDING_MSG      =       "Icebolt fades from"
IMBA_SAPPHIRON_GROUND_TIME_INIT =       35;
IMBA_SAPPHIRON_GROUND_TIME      =       70;
IMBA_SAPPHIRON_FLIGHT_TIME      =       30;

function IMBA_Sapphiron_StartLifeDrainTimer()
        IMBA_Sapphiron_TimerLifeDrain.timeLength=IMBA_SAPPHIRON_LIFEDRAIN_TIME;
        IMBA_Sapphiron_TimerLifeDrain.timeEnd=GetTime()+IMBA_SAPPHIRON_LIFEDRAIN_TIME;
        IMBA_Sapphiron_TimerLifeDrain.repeating=false;
        IMBA_Sapphiron_TimerLifeDrain.active=true;
end

function IMBA_Sapphiron_StartIceBombTimer()
        IMBA_Sapphiron_TimerIceBomb.timeLength=IMBA_SAPPHIRON_ICEBOMB_TIME;
        IMBA_Sapphiron_TimerIceBomb.timeEnd=GetTime()+IMBA_SAPPHIRON_ICEBOMB_TIME;
        IMBA_Sapphiron_TimerIceBomb.repeating=false;
        IMBA_Sapphiron_TimerIceBomb.active=true;
end

function IMBA_Sapphiron_Null()
        IMBA_RangeChecker_Active=false;
end

function IMBA_Sapphiron_StartFlightTimer()
        IMBA_RangeChecker_Active=true;
        IMBA_Sapphiron_TimerFlight:SetBarText("Time in Air");
        IMBA_Sapphiron_TimerFlight.timeLength=IMBA_SAPPHIRON_FLIGHT_TIME;
        IMBA_Sapphiron_TimerFlight.timeEnd=GetTime()+IMBA_SAPPHIRON_FLIGHT_TIME;
        IMBA_Sapphiron_TimerFlight.repeating=false;
        IMBA_Sapphiron_TimerFlight.active=true;
        IMBA_Sapphiron_TimerFlight.callback=IMBA_Sapphiron_Null;
end

function IMBA_Sapphiron_StartGroundTimerInit()
        IMBA_Sapphiron_TimerFlight:SetBarText("Time on Ground");
        IMBA_Sapphiron_TimerFlight.timeLength=IMBA_SAPPHIRON_GROUND_TIME_INIT;
        IMBA_Sapphiron_TimerFlight.timeEnd=GetTime()+IMBA_SAPPHIRON_GROUND_TIME_INIT;
        IMBA_Sapphiron_TimerFlight.repeating=false;
        IMBA_Sapphiron_TimerFlight.active=true;
        
        IMBA_Sapphiron_TimerFlight.callback=IMBA_Sapphiron_StartFlightTimer;
end

function IMBA_Sapphiron_StartGroundTimer()
        IMBA_Sapphiron_TimerFlight:SetBarText("Time on Ground");
        IMBA_Sapphiron_TimerFlight.timeLength=IMBA_SAPPHIRON_GROUND_TIME;
        IMBA_Sapphiron_TimerFlight.timeEnd=GetTime()+IMBA_SAPPHIRON_GROUND_TIME;
        IMBA_Sapphiron_TimerFlight.repeating=false;
        IMBA_Sapphiron_TimerFlight.active=true;
        IMBA_Sapphiron_TimerFlight.oldcallback=IMBA_Sapphiron_TimerFlight.callback;
        IMBA_Sapphiron_TimerFlight.callback=IMBA_Sapphiron_StartFlightTimer;
end

function IMBA_Sapphiron_Start()
        IMBA_Sapphiron_Blocks=1;
        IMBA_Minimap_ClearBossMarkers();
        IMBA_Sapphiron_StartGroundTimerInit();

        if IMBA_CheckVar("Sapphiron","ActivateRangeChecker") then
                IMBA_RangeChecker:Show();
        end
end

function IMBA_Sapphiron_RegenActivator()
        IMBA_Sapphiron_Start();
        IMBA_Sapphiron:Show();
end

function IMBA_Sapphiron_RegisterEvents()
        this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE");
        this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE");
        this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE");
        this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE");
        this:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE");
        this:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER");
        this:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF");
end

function IMBA_Sapphiron_UnregisterEvents()
        this:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE");
        this:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE");
        this:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE");
        this:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE");
        this:UnregisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE");
        this:UnregisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER");
        this:UnregisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF");
end

function IMBA_Sapphiron_CheckBombAnnounce()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb=false;
                return false;
        end
        return IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb;
end

function IMBA_Sapphiron_ToggleBombAnnounce()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb=true;
                return;
        end
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb=false
        else
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb=true;
        end
end

function IMBA_Sapphiron_CheckLifeDrainAnnounce()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain=false;
                return false;
        end
        return IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain;
end

function IMBA_Sapphiron_ToggleLifeDrainAnnounce()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain=true;
                return;
        end
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain=false
        else
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain=true;
        end
end

function IMBA_Sapphiron_CheckAnnounceBlocks()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks=false;
                return false;
        end
        return IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks;
end

function IMBA_Sapphiron_ToggleAnnounceBlocks()
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks==nil then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks=true;
                return;
        end
        if IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks then
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks=false
        else
                IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks=true;
        end
end


function IMBA_Sapphiron_OnLoad()
        this:SetBackdropBorderColor(1, 1, 1, 1);
        this:SetBackdropColor(0.0,0.0,0.0,0.6);

        
        IMBA_Sapphiron_Title:SetText("Sapphiron Timers");

        IMBA_Sapphiron_TimerLifeDrain:SetBarText("Life Drain");
        IMBA_Sapphiron_TimerIceBomb:SetBarText("Ice Bomb");
        IMBA_Sapphiron_TimerFlight:SetBarText("Time on Ground");

        IMBA_Sapphiron_DrainLockout=0;
        IMBA_Sapphiron_LandLockout=0;

        local playerClass, englishClass = UnitClass("player");

        if (englishClass=="DRUID") or (englishClass=="MAGE") then
                IMBA_Sapphiron_Decurser=true;
        else
                IMBA_Sapphiron_Decurser=false;
        end
        IMBA_AddAddon("Sapphiron", "Timers for Life Drain, Ice Bomb, Flight Time, and marks Ice Blocks on the Minimap", IMBA_LOCATIONS_NAXX_LAIR, "IMBA_Sapphiron_RegenActivator", nil,nil,"IMBA_Sapphiron");
        IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb=false;
        IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain=false;
        IMBA_SavedVariables.Mods["Sapphiron"].MarkBlocks=false;
        IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks=false;
        IMBA_AddOption("Sapphiron","Announce Bombs",IMBA_Sapphiron_ToggleBombAnnounce,IMBA_Sapphiron_CheckBombAnnounce)
        IMBA_AddOption("Sapphiron","Announce Life Drains",IMBA_Sapphiron_ToggleLifeDrainAnnounce,IMBA_Sapphiron_CheckLifeDrainAnnounce)
        IMBA_AddOption("Sapphiron","Announce Ice Blocks",IMBA_Sapphiron_ToggleAnnounceBlocks,IMBA_Sapphiron_CheckAnnounceBlocks)
        IMBA_AddOption2("Sapphiron","ActivateRangeChecker","Activate Range Checker");
        IMBA_Sapphiron_TimerFlight.oldcallback=IMBA_Sapphiron_TimerFlight.callback;
end


function IMBA_Sapphiron_OnEvent(event)
        if ( event == "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE" ) then
                if string.find(arg1,IMBA_SAPPHIRON_ICEBOMB_MSG) then
                        IMBA_RangeChecker_Active=false;
                        IMBA_AddRaidAlert("** Ice Bomb Incoming! **",true,IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBomb);
                        IMBA_Sapphiron_StartIceBombTimer();
                end
        elseif ( event == "CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE" or event == "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE" or event == "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE" ) then
                if ( string.find(arg1,IMBA_SAPPHIRON_LIFEDRAIN_MSG) ) and ( IMBA_Sapphiron_DrainLockout < GetTime() ) then
                        IMBA_Sapphiron_DrainLockout=GetTime()+5;
                        
                        if IMBA_Sapphiron_Decurser then
                                IMBA_AddAlert("** Decurse Life Drains **");
                        end

                        IMBA_AddRaidAlert("** Decurse Life Drains **",false,IMBA_SavedVariables.Mods["Sapphiron"].AnnounceLifeDrain);
                        IMBA_Sapphiron_StartLifeDrainTimer();
                else
                        local iStart, iEnd, sPlayer, sType = string.find(arg1, "^([^%s]+) ([^%s]+) afflicted by Icebolt");
                        if ( sPlayer and sType ) then
                                IMBA_RangeChecker_Active=true;
                                if ( sPlayer == "You" and sType == "are" ) then
                                        IMBA_Minimap_SetBossMarker();
                                        IMBA_AddRaidAlert("** Ice Block "..IMBA_Sapphiron_Blocks.." ("..UnitName("player")..") **",true,IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks);
                                else
                                        IMBA_AddRaidAlert("** Ice Block "..IMBA_Sapphiron_Blocks.." ("..sPlayer..") **",true,IMBA_SavedVariables.Mods["Sapphiron"].AnnounceBlocks);
                                end
                                IMBA_Sapphiron_Blocks=IMBA_Sapphiron_Blocks+1;
                        end
                end
        elseif ( event == "CHAT_MSG_SPELL_AURA_GONE_OTHER" or event == "CHAT_MSG_SPELL_AURA_GONE_SELF") then
                if (string.find(arg1, IMBA_SAPPHIRON_LANDING_MSG) ) and ( IMBA_Sapphiron_LandLockout < GetTime() ) then
                        IMBA_RangeChecker_Active=false;
                        IMBA_Minimap_ClearBossMarkers();
                        IMBA_Sapphiron_Blocks=1;
                        IMBA_Sapphiron_LandLockout=GetTime()+5;
                        IMBA_Sapphiron_StartGroundTimer();
                end
        end
end

Generated by GNU Enscript 1.6.5.90.