vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
AutoInviteOptions = {};
local Realm;
local Player;
local version = "0.5";
local default_invite = "invite";

function AutoInvite_OnLoad()
        this:RegisterEvent("CHAT_MSG_WHISPER");
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
        
        SlashCmdList["AutoInvite"] = AutoInvite_SlashHandler;
        SLASH_AutoInvite1 = "/AutoInvite";
        SLASH_AutoInvite2 = "/ai";
        
        DEFAULT_CHAT_FRAME:AddMessage("AutoInvite (redux) v"..version.." loaded. Type /ai for usage.",0,0,1);
        DEFAULT_CHAT_FRAME:AddMessage("Type \'/ai alist\' to auto invite everyone in the A-list",0,0,1);
        DEFAULT_CHAT_FRAME:AddMessage("Type \'/ai blist\' to auto invite everyone in the B-list",0,0,1);
end

function AutoInvite_InitializeSetup()
        Player = UnitName("player");
        Realm = GetRealmName();
        if AutoInviteOptions == nil then AutoInviteOptions = {} end;
        if(AutoInviteOptions[Realm] == nil) then AutoInviteOptions[Realm] = {} end;
        if(AutoInviteOptions[Realm][Player] == nil) then AutoInviteOptions[Realm][Player] = {} end;
        if(AutoInviteOptions[Realm][Player]["Invite"] == nil) then AutoInviteOptions[Realm][Player]["Invite"] = default_invite end;
        if(AutoInviteOptions[Realm][Player]["Status"] == nil) then AutoInviteOptions[Realm][Player]["Status"] = "On" end;
        if(AutoInviteOptions[Realm][Player]["Type"] == nil) then AutoInviteOptions[Realm][Player]["Type"] = "Party" end;
end

function AutoInvite_OnEvent(event)
        if(event == "PLAYER_ENTERING_WORLD") then
                AutoInvite_InitializeSetup();
        elseif(event == "CHAT_MSG_WHISPER") then
                if(AutoInviteOptions[Realm][Player]["Status"] == "On") then
                        local what = arg1;
                        local who = arg2;
                        local invite = AutoInvite_CheckMessage(what);
                        if(invite) then AutoInvite_Invite(who) end;
                end
        end
end

function InviteAList()
        for j = 1, 50 do
                if (AList[j]) then
                        numgroup = GetNumRaidMembers();
                        if(numgroup == 0) then --Not currently in a raid
                                numparty = GetNumPartyMembers();
                                if(numparty == 0) then InviteByName(AList[j]) --Nobody in the party? Start a new one!
                                elseif(numparty < 4) then
                                        if(IsPartyLeader()) then InviteByName(AList[j]) --4 or less party members? Invite if you can.
                                        else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..AList[j].." right now, you're not the party leader.") end;
                                elseif(GetNumPartyMembers() == 4)then --if you've got a 5-man party (GetNumPartyMembers excludes yourself) convert to raid.
                                        if(IsPartyLeader()) then
                                                DEFAULT_CHAT_FRAME:AddMessage("Raid mode enabled: Converting your group to a raid.")
                                                ConvertToRaid();
                                                InviteByName(AList[j]);
                                        else
                                                DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..AList[j].." right now, you're not the party leader.");
                                        end
                                end
                        elseif((IsRaidLeader() or IsRaidOfficer()) and numgroup < 40) then InviteByName(AList[j])
                        else
                                if(numgroup > 39) then return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..AList[j].." right now, raid is full.");
                                else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..AList[j].." right now, you're not the raid leader.") end;
                        end
                end
        end
end

function InviteBList()
        for j = 1, 39 do
                if (BList[j]) then
                        numgroup = GetNumRaidMembers();
                        if(numgroup == 0) then --Not currently in a raid
                                numparty = GetNumPartyMembers();
                                if(numparty == 0) then InviteByName(BList[j]) --Nobody in the party? Start a new one!
                                elseif(numparty < 4) then
                                        if(IsPartyLeader()) then InviteByName(BList[j]) --4 or less party members? Invite if you can.
                                        else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..BList[j].." right now, you're not the party leader.") end;
                                elseif(GetNumPartyMembers() == 4)then --if you've got a 5-man party (GetNumPartyMembers excludes yourself) convert to raid.
                                        if(IsPartyLeader()) then 
                                                DEFAULT_CHAT_FRAME:AddMessage("Raid mode enabled: Converting your group to a raid.")
                                                ConvertToRaid();
                                                InviteByName(BList[j]);
                                        else
                                                DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..BList[j].." right now, you're not the party leader.");
                                        end
                                end
                        elseif((IsRaidLeader() or IsRaidOfficer()) and numgroup < 40) then InviteByName(BList[j])
                        else
                                if(numgroup > 39) then return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..BList[j].." right now, raid is full.");
                                else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..BList[j].." right now, you're not the raid leader.") end;
                        end
                end
        end
end

function AutoInvite_SlashHandler(msg)
        if(msg ~= "") then msg = string.lower(msg) end;
        if(msg == "" or msg == "status") then
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite status: |c00ffff00"..AutoInviteOptions[Realm][Player]["Status"].."|r (change with /ai on | off)");
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite keyword: |c00ffff00"..AutoInviteOptions[Realm][Player]["Invite"].."|r (change with /ai text)");
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite party type: |c00ffff00"..AutoInviteOptions[Realm][Player]["Type"].."|r (change with /ai party | raid)");
        elseif(msg == "on") then 
                AutoInviteOptions[Realm][Player]["Status"] = "On";
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: Now issuing automatic invites on keyword[s]: |c00ffff00"..AutoInviteOptions[Realm][Player]["Invite"].."|r");
        elseif(msg == "off") then 
                AutoInviteOptions[Realm][Player]["Status"] = "Off";
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: No longer issuing automatic invites." ,1,1,1);
        elseif(msg == "party") then 
                AutoInviteOptions[Realm][Player]["Type"] = "Party";
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: Invite checking for 5-man party only." ,1,1,1);
        elseif(msg == "alist") then 
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: Starting Invites of Priority List." ,1,1,1);
                InviteAList();
        elseif(msg == "blist") then 
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: Starting Invites of Secondary List." ,1,1,1);
                InviteBList();
        elseif(msg == "raid") then 
                AutoInviteOptions[Realm][Player]["Type"] = "Raid";
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: Invite checking for 40-man raid groups." ,1,1,1);
        else 
                AutoInviteOptions[Realm][Player]["Invite"] = msg;
                DEFAULT_CHAT_FRAME:AddMessage("AutoInvite: changed automatic invite keyword[s] to: |c00ffff00"..AutoInviteOptions[Realm][Player]["Invite"].."|r");
        end
end

function AutoInvite_CheckMessage(what)
        return string.find(string.lower(what), AutoInviteOptions[Realm][Player]["Invite"], 1, true);
end

function AutoInvite_Invite(who)
        local numgroup;
        local gtype = AutoInviteOptions[Realm][Player]["Type"];
        if(gtype == "Party") then
                numgroup = GetNumPartyMembers();
                if((IsPartyLeader() and numgroup < 4) or (numgroup == 0)) then InviteByName(who)
                else 
                        if(numgroup >= 4) then return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, party is full.");
                        else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, you're not the party leader.") end;
                end
        elseif(gtype == "Raid") then
                numgroup = GetNumRaidMembers();
                if(numgroup == 0) then --Not currently in a raid
                        numparty = GetNumPartyMembers();
                        if(numparty == 0) then InviteByName(who) --Nobody in the party? Start a new one!
                        elseif(numparty < 4) then
                                if(IsPartyLeader()) then InviteByName(who) --4 or less party members? Invite if you can.
                                else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, you're not the party leader.") end;
                        elseif(GetNumPartyMembers() == 4)then --if you've got a 5-man party (GetNumPartyMembers excludes yourself) convert to raid.
                                if(IsPartyLeader()) then 
                                        DEFAULT_CHAT_FRAME:AddMessage("Raid mode enabled: Converting your group to a raid.")
                                        ConvertToRaid();
                                        InviteByName(who);
                                else
                                        DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, you're not the party leader.");
                                end
                        end
                elseif((IsRaidLeader() or IsRaidOfficer()) and numgroup < 40) then InviteByName(who)
                else
                        if(numgroup > 39) then return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, raid is full.");
                        else return DEFAULT_CHAT_FRAME:AddMessage("Can't invite "..who.." right now, you're not the raid leader.") end;
                end
        end
end

Generated by GNU Enscript 1.6.5.90.