vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        CT_RaidAssist Spy

        This addon is designed to watch
        for 4 types of check made by raid
        leaders which could be considered
        an invasion of privicy. 
        These are:
                Resists
                Reagents
                Durability
                Items
]]--

local CTRASPY_VERSION = 1.4;

-- onLoad
function ctraSpy_onLoad()
        -- Register hooks
        this:RegisterEvent("VARIABLES_LOADED");
        
        -- Add slash command
        SLASH_CTRASPY1 = "/ctras";
        SlashCmdList["CTRASPY"] = ctraSpy_slash;
end

-- onEvent
function ctraSpy_onEvent(event)
        if (event == "VARIABLES_LOADED") then
                -- Make sure the options are updated
                if (ctraSpyOptions == nil or ctraSpyOptions.version ~= CTRASPY_VERSION) then
                        ctraSpy_updateOptions();
                end
                ctraSpy_toggleOnOff();          
                DEFAULT_CHAT_FRAME:AddMessage('CTRA Spy v.'..CTRASPY_VERSION..' Loaded!');              
        elseif (event == "CHAT_MSG_ADDON") then
                -- Make sure the message is for us
                if ( arg1 == "CTRA" and arg3 == "RAID" ) then

                        -- Check the caller's permissions
                        if ctraSpy_isPriv(arg4) == nil then
                                return -- message not from a member of our group
                        end
                        
                        -- Strip the message
                        local msg = string.gsub(arg2, "%$", "s");
                        msg = string.gsub(msg, "ยง", "S");
                        if (strsub(msg, strlen(msg)-7) == " ...hic!") then
                                msg = strsub(msg, 1, strlen(msg)-8);
                        end
                        
                        -- Split the message if neccesary and send it for parsing
                        local message;
                        if (string.find(msg, "#")) then
                                local arr = ctraSpy_split(msg, "#");
                                for k, v in arr do
                                        ctraSpy_messageIn(arg4, v)
                                end
                        else
                                ctraSpy_messageIn(arg4, msg)
                        end
                end
        end     
end

-- Update the options from a version change or new install
function ctraSpy_updateOptions()
        
        -- We will do something fun here to upgrade when we have more version numbers
        -- Note, v1.1 added sound and version to the options.
        -- Note, v1.2 added chat frame output as well as ErrorFrame and switches for enable/disable checks
        -- Note, v1.3 added no new variables
        -- Note, v1.4 added no new variables
        
        -- This will deal with new installs
        if (not ctraSpyOptions or ctraSpyOptions.version == nil ) then
                -- Default options
                ctraSpyOptions = {
                        enabled = true;
                        sound = true;
                        chat = true;
                        resistance = true;
                        reagents = true;
                        durability = true;
                        items = true;
                        version = CTRASPY_VERSION;
                }
        end
        
        -- Upgrade to 1.1
        if (ctraSpyOptions.version < 1.1) then
                ctraSpyOptions.sound = true;
                ctraSpyOptions.version = 1.1;
        end
        
        -- Upgrade to 1.2
        if (ctraSpyOptions.version < 1.2) then
                ctraSpyOptions.chat = true;
                ctraSpyOptions.resistance = true;
                ctraSpyOptions.reagents = true;
                ctraSpyOptions.durability = true;
                ctraSpyOptions.items = true;
                ctraSpyOptions.version = 1.2;
        end

        ctraSpyOptions.version = CTRASPY_VERSION;
        
        DEFAULT_CHAT_FRAME:AddMessage('CTRA Spy variables updated to v.'..CTRASPY_VERSION);
end

-- Check if the <name> is authorised to do a check
function ctraSpy_isPriv(name)
        if (GetNumRaidMembers() > 0 and name ~= playerName) then
                for x = 1, 40 do
                        if (UnitName("raid" .. x) == name) then
                                return true
                        end
                end
        end
end

-- Parse an incoming message
function ctraSpy_messageIn(nick, msg)           
        if (msg == "RSTC" and ctraSpyOptions.resistance) then -- Resists
                ctraSpy_out(nick, 'is doing a Resistance Check');
        elseif (msg == "REAC" and ctraSpyOptions.reagents) then -- Reagents
                ctraSpy_out(nick, 'is doing a Reagents Check');
        elseif (msg == "DURC" and ctraSpyOptions.durability) then --Durabillity
                ctraSpy_out(nick, 'is doing a Durability Check');
        elseif (string.find(msg, "^ITMC ") and ctraSpyOptions.items) then -- Items
                local _, _, itemName = string.find(msg, "^ITMC (.+)$");
                if (itemName) then
                        ctraSpy_out(nick, 'is doing an Item Check for '..itemName);
                end
        end
end

-- Default output message formatter
function ctraSpy_out(nick, text)
        if (ctraSpyOptions.sound) then
                PlaySoundFile("Sound\\Spells\\PVPFlagTaken.wav");
        end
        if (ctraSpyOptions.chat) then
                DEFAULT_CHAT_FRAME:AddMessage('<CTRASpy> '..nick..' '..text);
        end
        UIErrorsFrame:AddMessage(nick..' '..text, 1.0, 0.12, 0.12, 1.0, UIERRORS_HOLD_TIME);
end

-- Register/Unregister the message event
function ctraSpy_toggleOnOff()
        if (ctraSpyOptions.enabled) then
                this:RegisterEvent("CHAT_MSG_ADDON");
        else
                this:UnregisterEvent("CHAT_MSG_ADDON");
        end
end

-- Handle the slash command to enable/disable
function ctraSpy_slash(msg)
        local frame = getglobal('CTRA_SpyOptionsFrame');
        if (frame) then
              frame:Show();
        end
end

-- Split messages
function ctraSpy_split(msg, char)
        local arr = { };
        while (string.find(msg, char) ) do
                local iStart, iEnd = string.find(msg, char);
                tinsert(arr, strsub(msg, 1, iStart-1));
                msg = strsub(msg, iEnd+1, strlen(msg));
        end
        if ( strlen(msg) > 0 ) then
                tinsert(arr, msg);
        end
        return arr;
end

-- Initialize each of the checkboxes on the options form
function ctraSpyOptions_initialize()
        ctraSpyOptions_onClick(1, ctraSpyOptions.enabled);
        ctraSpyOptions_onClick(2, ctraSpyOptions.sound);
        ctraSpyOptions_onClick(3, ctraSpyOptions.chat);
        ctraSpyOptions_onClick(4, ctraSpyOptions.resistance);
        ctraSpyOptions_onClick(5, ctraSpyOptions.reagents);
        ctraSpyOptions_onClick(6, ctraSpyOptions.durability);
        ctraSpyOptions_onClick(7, ctraSpyOptions.items);
        
end

-- Handle clicks on the options form checkboxes
function ctraSpyOptions_onClick(id, checked)
        if (id == 1) then
                ctraSpyOptions.enabled = checked;
                getglobal("CTRA_SpyOptionsFrameEnableCB"):SetChecked(checked);
        elseif (id == 2) then
                ctraSpyOptions.sound = checked;
                getglobal("CTRA_SpyOptionsFramePlaySoundsCB"):SetChecked(checked); 
        elseif (id == 3) then
                ctraSpyOptions.chat = checked;
                getglobal("CTRA_SpyOptionsFrameShowChatCB"):SetChecked(checked);
        elseif (id == 4) then
                ctraSpyOptions.resistance = checked;
                getglobal("CTRA_SpyOptionsFrameResistancesCB"):SetChecked(checked);
        elseif (id == 5) then
                ctraSpyOptions.reagents = checked;
                getglobal("CTRA_SpyOptionsFrameReagentsCB"):SetChecked(checked);
        elseif (id == 6) then
                ctraSpyOptions.durability = checked;
                getglobal("CTRA_SpyOptionsFrameDurabilityCB"):SetChecked(checked);
        elseif (id == 7) then
                ctraSpyOptions.items = checked;
                getglobal("CTRA_SpyOptionsFrameItemsCB"):SetChecked(checked);
        end
end

Generated by GNU Enscript 1.6.5.90.