Get an Epic Experience with Premium

Purge

Combat Login to Add Favorites
  • 2 Likes
  • World of Warcraft
  • 123 Monthly Downloads
  • Supports: 5.3.0
  • 18,716 Total Downloads
  • Updated 05/29/2013
  • Created 08/01/2011
  • 25 Favorites
  • Project Site
  • Comments
  • Release Type: Release
  • License: All Rights Reserved
  • Newest File: 5.3
or
Support development! **
Donate

About Purge

NOTE - Will be coming back to WoW (and rebooting this project) when WoD hits :) See you there!

Intro Purge Wizards; Get Gold

Purge has two major functions - successful interrupts and successful dispels

Purge isn't your ordinary interrupt announcer - not only does it announce the spell and link it, but it also informs the user and anyone else about the school the spell belongs to. It announces EVERY interrupt in the immediate area so interrupts to your healer etc are also shown. Moreover, this addon uses a whopping 10kb of memory (that's sarcasm if you can't tell).

Purge is also a dispel announcer. It displays every dispel in range with a link and who did the dispelling to who. Of course dispelling yourself won't link yourself twice though :D

ALL PURGE COMMANDS ARE BELOW AND MIGHT BE HIDDEN BY THE EXTRA INFO BUTTON: Help Purge commands are /purge (EXAMPLE: /purge on) on

off

interrupton (Turns on the interrupt announcer)

interruptoff (And turns it off)

dispelon (Same deal here for the dispel announcer)

dispeloff

self (reports to console)

say

yell

party

raid

bg

emote

current (this tells you your current settings)

selfon (turns on reporting of just your activities)

selfoff

The addon will respond to every successful command with a console output. Here's the response to /purge on: Output

- Updated Version and added Instance Chat + Instance Chat command

Comments

First Previous Page 1 of 2 Next Last
  • #26

    Hi piferjc,

    Unfortunately, I don't play WoW anymore and frankly, can't afford to.

    If anyone is willing to update Purge, they have free reign.

  • #25

    Hi,

    I was wondering if it were possible to add functionality to this great addon that will also announce what spell you've reflected.  I've been looking for an addon that will do all three of these things and this one has 2 out of my 3.  Thanks.

  • #23

    Hello. 

    I was wondering if could you add the option to display the dispelled/interrupted spell in the middle of the screen? I would be really thankful. I hope you can do that for versions 4.3.4 and higher. Thank you very much. 

  • #24

    Alas, I don't know how to create graphics in WoW - sorry :/

  • #22
    Two features I'd like to see

    The ability to output purge into instance chat and the ability to display outputs as a message that only you can see.

  • #19
    'little' rewrote

    Hello, I've found this fine addon yesterday and pimped it a little.
    First a list of my changes:
    1) added simple LDB display and small klick support
    2) most commands are toggles now
    3) added arena only mode
    4) cleaned some code (spellclass, print, help, ...)

    Because neary all code is changed, here the Purge.lua

    -- Written by Kynetix @ Kil'Jaeden-US Alliance
    -- LDB Support and more by Dleh

    local isOn
    local intOn
    local disOn
    local playerName = UnitName("player");
    local petName = UnitName("pet");
    local own
    local arena
    local arenatest = "test";

    function Purge_OnLoad(this)
        SLASH_PURGE1= "/purge";
        SlashCmdList["PURGE"] = Purge_CommandParse;
        this:RegisterEvent("PLAYER_LOGIN");
        this:RegisterEvent("PLAYER_LOGOUT");
        this:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
    end

    function Purge_OnEvent(this, event, ...)
        if (event=="PLAYER_LOGIN") then
            Purge_LDB = LibStub('LibDataBroker-1.1'):NewDataObject('Purge',    {
                icon = [=[Interface\Icons\Spell_arcane_massdispel]=],
                iconCoords = {0.08, 0.92, 0.08, 0.92},
                text = '',
                label = 'Purge',
                type = 'data source',
                OnTooltipShow = function(tooltip)
                    tooltip:AddDoubleLine("Purge LeftClick",isOn)
                    tooltip:AddDoubleLine("Interrupt Alt-LeftClick",intOn)
                    tooltip:AddDoubleLine("Dispel Contol-LeftClick",disOn)
                    tooltip:AddDoubleLine("Own Shift-LeftClick",own)
                    tooltip:AddDoubleLine("Arena RightClick",arena)
                    tooltip:AddDoubleLine("Channel",PurgeTo)
                    tooltip:AddLine("SELF Alt-RightClick")
                    tooltip:AddLine("PARTY Control-RightClick")
                    tooltip:AddLine("RAID Shift-RightClick")
                    tooltip:AddLine("more with /purge")    
                end,
                OnClick = function(self, button)
                    if button == 'LeftButton' then
                        if IsAltKeyDown() then
                            Purge_ChangeInt()
                        elseif IsControlKeyDown() then
                            Purge_ChangeDis()
                        elseif IsShiftKeyDown() then
                            Purge_ChangeOwn()
                        else
                            Purge_ChangeOn()
                        end
                    elseif button == 'RightButton' then
                        if IsAltKeyDown() then
                            Purge_ChangeChannel('SELF')
                        elseif IsControlKeyDown() then
                            Purge_ChangeChannel('PARTY')
                        elseif IsShiftKeyDown() then
                            Purge_ChangeChannel('RAID')
                        else
                            Purge_ChangeArena()
                        end
                    end
                end,
            })

            if (PurgeOn == nil) then
                PurgeOn = true
            end
            if (InterruptOn == nil) then
                InterruptOn = true
            end
            if (DispelOn == nil) then
                DispelOn = true
            end
            if (PurgeSelf == nil) then
                PurgeSelf = false
            end
            if (PurgeTo == nil) then
                PurgeTo = "SAY"
            end
            if (PurgeArena == nil) then
                PurgeArena = false
            end
            Purge_Hello();
        end
        
        if (event=="PLAYER_LOGOUT") then
            PurgeOn = PurgeOn;
            PurgeTo = PurgeTo;
            PurgeSelf = PurgeSelf;
            PurgeArena = PurgeArena;
            InterruptOn = InterruptOn;
            DispelOn = DispelOn;
            this:UnregisterEvent("PLAYER_LOGIN");
            this:UnregisterEvent("PLAYER_LOGOUT");
            this:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
        end
        

        local _,type, _, _,sourceName, _, _, _,targetName,_,_,_,_,_,spellId,spellName,schoolnumber= select(1, ...)

        if (event=="COMBAT_LOG_EVENT_UNFILTERED" and PurgeOn == true) then
            if(type == "SPELL_INTERRUPT" and InterruptOn == true)  then

                local school = "";
                            
                if (schoolnumber > 63) then
                    school = "Arcane"
                    schoolnumber = schoolnumber - 64;
                end
                if (schoolnumber > 31) then
                    school = school .. "+Shadow"
                    schoolnumber = schoolnumber - 32;
                end            
                if (schoolnumber > 15) then
                    school = school .. "+Frost"
                    schoolnumber = schoolnumber - 16;
                end
                if (schoolnumber > 7) then
                    school = school .. "+Nature"
                    schoolnumber = schoolnumber - 8;
                end
                if (schoolnumber > 3) then
                    school = school .. "+Fire"
                    schoolnumber = schoolnumber - 4;
                end
                if (schoolnumber > 1) then
                    school = school .. "+Holy"
                    schoolnumber = schoolnumber - 2;
                end
                if (schoolnumber == 1) then
                    school = school .. "+Physical"
                end
                if (string.find(school,"+") == 1) then
                    school = string.sub(school, 2);
                end
        
                if (PurgeTo ~= "SELF") then
                    if (PurgeSelf == false) then
                        Purge_PurgeToMessage(sourceName.." interrupted "..targetName.."'s "..GetSpellLink(spellId).." ("..school..").",""..PurgeTo.."")
                    elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                        Purge_PurgeToMessage(sourceName.." interrupted "..targetName.."'s "..GetSpellLink(spellId).." ("..school..").",""..PurgeTo.."")
                    end
                else
                    if (PurgeSelf == false) then
                        Purge_Message(sourceName.." interrupted "..targetName.."'s "..GetSpellLink(spellId).." ("..school..").")
                    elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                        Purge_Message(sourceName.." interrupted "..targetName.."'s "..GetSpellLink(spellId).." ("..school..").")
                    end
                end
            end

            if(type == "SPELL_STOLEN" and DispelOn == true)  then
                Purge_Message("Spell Stolen");
                if (PurgeTo ~= "SELF") then
                    if (PurgeSelf == false) then
                        Purge_PurgeToMessage(sourceName.." stole "..targetName.."'s "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                    elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                        Purge_PurgeToMessage(sourceName.." stole "..targetName.."'s "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                    end
                else
                    if (PurgeSelf == false) then
                        Purge_Message(sourceName.." stole "..targetName.."'s "..GetSpellLink(spellId)..".")
                    elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                        Purge_Message(sourceName.." stole "..targetName.."'s "..GetSpellLink(spellId)..".")
                    end
                end
            end

            if(type == "SPELL_DISPEL" and DispelOn == true)  then
                if (PurgeTo ~= "SELF") then
                    if (sourceName == targetName) then
                        if (PurgeSelf == false) then
                            Purge_PurgeToMessage(sourceName.." dispelled "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                        elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                            Purge_PurgeToMessage(sourceName.." dispelled "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                        end
                    else
                        if (PurgeSelf == false) then
                            Purge_PurgeToMessage(sourceName.." dispelled "..targetName.."'s "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                        elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                            Purge_PurgeToMessage(sourceName.." dispelled "..targetName.."'s "..GetSpellLink(spellId)..".",""..PurgeTo.."")
                        end
                    end
                else
                    if (sourceName == targetName) then
                        if (PurgeSelf == false) then
                            Purge_Message(sourceName.." dispelled "..GetSpellLink(spellId)..".")
                        elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                            Purge_Message(sourceName.." dispelled "..GetSpellLink(spellId)..".")
                        end
                    else
                        if (PurgeSelf == false) then
                            Purge_Message(sourceName.." dispelled "..targetName.."'s "..GetSpellLink(spellId)..".")
                        elseif (PurgeSelf == true and ((sourceName == playerName) or (sourceName == petName))) then
                            Purge_Message(sourceName.." dispelled "..targetName.."'s "..GetSpellLink(spellId)..".")
                        end
                    end
                end
            end
        end
        
        if (Purge_LDB) then
            Purge_LDB.text = isOn;
            local LDB_append = ' ';
            if (InterruptOn) then
                LDB_append = LDB_append .. "I";
            end
            if (DispelOn) then
                LDB_append = LDB_append .. "D";
            end
            if (PurgeSelf) then
                LDB_append = LDB_append .. "O";
            end
            if (PurgeArena) then
                LDB_append = LDB_append .. "A";
            end
            Purge_LDB.text = Purge_LDB.text .. LDB_append .. ' ' .. string.lower(PurgeTo);
        end
    end

    function Purge_PurgeToMessage(message,channel)
        arenatest, _, _= GetZonePVPInfo();
        if (arenatest == nil) then
            arenatest = "nil";
        end
        if (arenatest == "arena") then
            SendChatMessage(message,channel)
        else
            if (not PurgeArena) then
                SendChatMessage(message,channel)
            end
        end
    end

    function Purge_Hello()
        if (PurgeOn == true) then
            isOn = "On"
        else
            isOn = "Off"
        end

        if (InterruptOn == true) then
            intOn = "On"
        else
            intOn = "Off"
        end

        if (DispelOn == true) then
            disOn = "On"
        else
            disOn = "Off"
        end

        if (PurgeSelf == true) then
            own = "On"
        else
            own = "Off"
        end
        
        if (PurgeArena == true) then
            arena = "On"
        else
            arena = "Off"
        end

        Purge_Message('Purge by Kynetix <Refraction> of Kil\'Jaeden Alliance-US');
        Purge_Message('Type "/purge help" for... help.');
        Purge_Status();
    end

    function Purge_Message(message)
        DEFAULT_CHAT_FRAME:AddMessage("[Purge] " .. message, 1, 0.65, 0);
    end

    function Purge_Status()
        Purge_Message('Purge is '..isOn..' -dispel '..disOn..' -interrupt '..intOn..' -own '..own..' -channel:'..PurgeTo..' -arena '..arena);
    end

    function Purge_CommandParse(parameterstring)
        local command = nil;

        command=string.lower(parameterstring);

        if (command == 'off') then
            PurgeOn = false
            isOn = "Off"
            Purge_Message('Purge is '..isOn);
        elseif (command == 'on') then
            PurgeOn = true
            isOn = "On"
            Purge_Message('Purge is '..isOn);
        elseif (command == 'own') then
            Purge_ChangeOwn()
        elseif (command == 'interrupt') then
            Purge_ChangeInt()
        elseif (command == 'dispel') then
            Purge_ChangeDis()
        elseif (command == 'self') then
            Purge_ChangeChannel("SELF");
        elseif (command == 'say') then
            Purge_ChangeChannel("SAY");
        elseif (command == 'yell') then
            Purge_ChangeChannel("YELL");
        elseif (command == 'party') then
            Purge_ChangeChannel("PARTY");
        elseif (command == 'raid') then
            Purge_ChangeChannel("RAID");
        elseif (command == 'rw') then
            Purge_ChangeChannel("RAID_WARNING");
        elseif (command == 'bg') then
            Purge_ChangeChannel("BATTLEGROUND");
        elseif (command == 'emote') then
            Purge_ChangeChannel("EMOTE");
        elseif (command == 'current') then
            Purge_Status();
        elseif (command == 'arena') then
            Purge_ChangeArena()
        else
            Purge_Message('the Purge commands are:');
            Purge_Message('-on -off (enable or disable addon; ex: /purge on)');
            Purge_Message('-interrupt (turns the interrupt announcer on and off)');
            Purge_Message('-dispel (same for the dispel announcer)');
            Purge_Message('-self -say -yell -party -raid -rw -bg -emote (set the report channel)');
            Purge_Message('-arena (toggles arena only mode)');
            Purge_Message('-current (this tells you your current settings)');
            Purge_Message('-own (toggle to only report own events)');
            Purge_Message('so if you wanted to only display only your dispels, you would type /purge interruptoff and /purge selfon')
            Purge_Status();
        end

    end

    function Purge_ChangeOn()
        PurgeOn = not PurgeOn;
        if (PurgeOn) then
            isOn = "On"
        else
            isOn = "Off"
        end
        Purge_Message('Purge is '..isOn);
    end

    function Purge_ChangeDis()
        DispelOn = not DispelOn
        if (DispelOn) then
            disOn = "On"
        else
            disOn = "Off"
        end
        Purge_Message('Purge: Dispels is '..disOn);
    end

    function Purge_ChangeInt()
        InterruptOn = not InterruptOn
        if (InterruptOn) then
            intOn = "On"
        else
            intOn = "Off"
        end
        Purge_Message('Purge: Interrupts is '..intOn);
    end

    function Purge_ChangeOwn()
        PurgeSelf = not PurgeSelf
        if (PurgeSelf) then
            own = "On"
        else
            own = "Off"
        end
        Purge_Message('Purge: Own is '..own);
    end

    function Purge_ChangeArena()
        PurgeArena = not PurgeArena;
        if (PurgeArena) then
            arena = 'On'
        else
            arena = 'Off'
        end
        Purge_Message('Purge: Arena is '..arena);
    end

    function Purge_ChangeChannel(channel)
        PurgeTo = channel
        Purge_Message('Purge output is now on '..PurgeTo);
    end

  • #20

    Nice update, is there anyway to add interrupts from rogues that aren't just kicks? Like gouges, blinds, cheapshots, etc that interrupt a spell?

  • #18

    Great Addon! This is something specialized that i was looking forand it works perfectly!!!

  • #16

    Warlock here. I'd like to know what I purge and interrupt only, except it's my pet that does it so self doesn't work.

    How do I go about showing what my pet purges and interrupts only. TY

  • #17

    Hey Krist - I'll put in a fix for warlock pets sometime in the next two days. Just stay tooned!

    Last edited by bli08 on 12/19/2011 8:15:37 AM
  • #14

    Can we disable the dispells? I only want it to shout when I interrupt.

  • #15

    dispeloff is the command

    /purge dispeloff

  • #13
    Added Self Mode and fixed Shadowfrost damage
  • #11
    I understand that this is a new AddOn however, I would like to see a customization menu where I could turn certain features off. Primarily for me I would like to turn all interrupts off except my own, or even only the ones on my target. It might get a bit annoying for non-rated battlegrounds to announce EVERYTHING, however helpful it might be.

    I don't know what kind of support you have for dispels. What I would be impressed with is that you have support for spells such as Shiv, Spellsteal, Tranq. shot, etc..

    This AddOn is truly unique and it's built on the idea of other great AddOns. However the other ones are buggy with 4.2 right now, and I hope yours won't be. Thanks for this great release.
  • #12
    hey tofujr, support for self - interrupts/dispels is coming out soon (after I finish my finals)

    my addons does report dispels for less conventional dispels such as the ones you mentioned
  • To post a comment, please login or register a new account.
Login to Curse

Don't have an account? Create One.

Get an epic experience with Curse Premium
  • Faster addon downloads
  • Premium-Only Beta Giveaways
  • Ad-Free Curse experience
  • Premium Curse Client
  • and many More Features
  • Learn More »

Minesplosion