vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
BGvar_save = {}
BGvar_declined = {}
BGvar_hideingroup = {}
BGvar_hideinvite = {}
BGvar_nothere = {}
BGvar_ingroup = {}
BGvar_dropgroupmessagesent = {}
BGvar_blacklist = {}
BGvar_timers_convertspam = GetTime()
BGvar_save.purge = "disabled"
BGvar_save.auto = "disabled"
BGvar_save.magicword = "invite"
BGvar_version = "2.0 alpha"


function BGinvite_OnLoad()
        this:RegisterEvent("PARTY_MEMBERS_CHANGED")
        this:RegisterEvent("CHAT_MSG_SYSTEM")
        this:RegisterEvent("VARIABLES_LOADED")
        this:RegisterEvent("CHAT_MSG_WHISPER")
        this:RegisterEvent("ZONE_CHANGED_NEW_AREA")
        
        Pre_BGinvite_ChatFrame_OnEvent = ChatFrame_OnEvent
        ChatFrame_OnEvent = BGinvite_hidealreadyingroupmsg

        SLASH_BGINVITE1 = "/bginvite";
        SlashCmdList["BGINVITE"] = function ( msg )
                BGinvite_SlashCmdHandler(msg);
        end
end

function BGinvite_OnEvent(event)
        if (event == "CHAT_MSG_SYSTEM") then
                if string.find(arg1, BGlocal_BLANK_DECLINES_YOUR_INVITATION) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_DECLINES_YOUR_INVITATION_FIND)
                        BGvar_declined[player] = GetTime()
                        BGvar_ingroup[player] = nil
                        BGvar_dropgroupmessagesent[player] = 1 -- because they aren't going to want to be told to drop group if they previously declined your invite
                elseif string.find(arg1, BGlocal_BLANK_IS_IGNORING_YOU) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_IS_IGNORING_YOU_FIND)
                        BGvar_declined[player] = GetTime()
                        BGvar_ingroup[player] = nil
                elseif string.find(arg1, BGlocal_BLANK_HAS_JOINED_THE_RAID) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_HAS_JOINED_THE_RAID_FIND) 
                        BGvar_ingroup[player] = nil
                elseif string.find(arg1, BGlocal_BLANK_HAS_JOINED_THE_PARTY) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_HAS_JOINED_THE_PARTY_FIND)
                        BGvar_ingroup[player] = nil
                elseif string.find(arg1, BGlocal_BLANK_IS_ALREADY_IN_GROUP) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_IS_ALREADY_IN_GROUP_FIND)
                        if BGvar_dropgroupmessagesent[player] == nil then
                                if (BGinvite_DominantGroup() == true) then
                                        BGinvite_localizevarvar(GetLocale())
                                        SendChatMessage(BGlocal_LEAVE_GROUP_WHISPER, "WHISPER", this.language, player)
                                        BGvar_dropgroupmessagesent[player] = 1
                                end
                        end
                elseif (arg1 == BGlocal_YOU_JOINED_RAID_GROUP) and (BGvar_restofinvitespending == 1) then
                        BGinvite_autoinvites()
                        BGvar_restofinvitespending = 0
                elseif string.find(arg1, BGlocal_SOMEONE_JOINED_BG) then
                        BGinvite_autoinvites()          
                        -- debug BGinvite_print("someone joined the BG! invite!") -- debug
                elseif string.find(arg1, BGlocal_SOMEONE_LEFT_BG) then
                        local _, _, player = string.find(arg1, BGlocal_SOMEONE_LEFT_BG_FIND)
                        -- debug BGinvite_print(player.." left the BG! kick him!")
                        if (BGvar_save.purge == "disabled") then return end
                                if IsRaidLeader() or IsRaidOfficer() then 
                                                                SendChatMessage(BGlocal_YOU_APPEAR_GONE, "WHISPER", this.language, name)
                                                                UninviteByName(name)
                                end
                        
                end
                
        elseif (event == "VARIABLES_LOADED") then
                BGinvite_localize(GetLocale())
                BGinvite_print(BGlocal_MOD_LOADED)
                BGinvite_autoinvites()
        elseif (event == "CHAT_MSG_WHISPER") then
                if string.find(string.lower(arg1), BGvar_save.magicword) and (strlen(arg1) <= (strlen(BGvar_save.magicword) + 8)) then
                        if BGvar_blacklist[arg2] ~= 1 then
                                InviteByName(arg2)
                        end
                end
        elseif (event == "ZONE_CHANGED_NEW_AREA") then
                BGvar_declined = {}
                BGvar_nothere = {}
                BGvar_hideinvite = {}
                BGvar_ingroup = {}
                BGvar_messageinsay = 0
                BGvar_dropgroupmessagesent = {}
        end
end

function BGinvite_SlashCmdHandler(msg)
        if strlen(msg) <= 1 then
                BGInviteUI:Show()
        elseif string.lower(msg) == "purge on" then
                BGvar_save.purge = "enabled" 
            BGInviteAutoPurgeEnable:SetChecked(1)
                BGinvite_print(BGlocal_NOW_PURGING)
        elseif string.lower(msg) == "purge off" then
                BGvar_save.purge = "disabled" 
                BGinvite_print(BGlocal_NOT_PURGING)
                BGInviteAutoPurgeEnable:SetChecked(0)
        elseif (string.lower(msg) == "auto on") then
                BGvar_save.auto = "enabled"
                BGinvite_autoinvites()
                BGinvite_print(BGlocal_AUTO_INVITING)
                BGInviteAutoInviteEnable:SetChecked(1)
        elseif (string.lower(msg) == "auto off") then
                BGvar_save.auto = "disabled"
                BGinvite_print(BGlocal_NOT_AUTO_INVITING)
                BGInviteAutoInviteEnable:SetChecked(0)
        elseif (string.lower(msg) == "promote all") then
                BGinvite_promoteall()
        elseif (string.lower(msg) == "demote all") then
                BGinvite_demoteall()
        elseif (string.lower(msg) == "invite") then
                BGinvite_sendinvite()
        elseif (string.lower(msg) == "blacklist") then
                BGinvite_print(BGlocal_BLACKLISTED_PLAYERS)
                table.foreach(BGvar_blacklist, BGinvite_displayblacklist)
        elseif (strsub(string.lower(msg), 1, 13) == "blacklist add") then
                local name = string.upper(strsub(msg, 15, 15))..string.lower(strsub(msg, 16))
                BGinvite_blacklistadd(name)
        elseif (strsub(string.lower(msg), 1, 16) == "blacklist remove") then
                local name = string.upper(strsub(msg, 18, 18))..string.lower(strsub(msg, 19))
                BGinvite_blacklistremove(name)
        elseif (strsub(string.lower(msg), 1, 9) == "magicword") then
                BGvar_save.magicword = string.lower(strsub(msg, 11))
                BGinvite_magicwordchanged()
        elseif (string.lower(msg) == "help") then
                BGinvite_help()
        elseif (string.lower(msg) == "version") then
                BGinvite_print(BGlocal_VERSION_STR)
        else
                BGinvite_print(BGlocal_HELP_ERR) 
        end
end

function BGinvite_sendinvite()
        local status = BGinvite_GetBattlefieldStatus()
        if (BGvar_messageinsay == 0) and (status == "active") then
                SendChatMessage(BGlocal_SAY_INVITING, "SAY")
                BGvar_messageinsay = 1
        end
        if (GetNumRaidMembers() == 0) and (GetNumBattlefieldPositions() >= 5) then
                for i=1,5 do
                        local x, y, name = GetBattlefieldPosition(i)
                        if (not BGvar_declined[name]) and (name) then
                                if BGvar_blacklist[name] ~= 1 then
                                        InviteByName(name)
                                end
                        end
                end
        else
                for i=1,GetNumBattlefieldPositions() do
                        local x, y, name = GetBattlefieldPosition(i)
                        if (not BGvar_declined[name]) then
                                if BGvar_blacklist[name] ~= 1 then
                                        InviteByName(name)
                                end
                        end
                end
        end
end



function BGinvite_ConvertToRaid()
        BGinvite_print(BGlocal_CONVERTING_TO_RAID)
        ConvertToRaid()
        BGvar_restofinvitespending = 1
end

--function BGinvite_purge()
--      if (BGvar_save.purge == "disabled") then return end
--      if IsRaidLeader() or IsRaidOfficer() then 
--              BGinvite_print(BGlocal_PURGING_PLAYERS)
--              if GetBattlefieldScore(1) == nil then
--                      BGinvite_print(BGlocal_ERROR_SCANNING)
--              elseif GetBattlefieldScore(1) ~= nil then
--                      for i=1,GetNumRaidMembers() do
--                              local name = GetRaidRosterInfo(i)
--                              BGvar_inbg = false
--                              if (BGinvite_inbattleground(name) ~= true) then
--                                      SendChatMessage(BGlocal_YOU_APPEAR_GONE, "WHISPER", _, name)
--                                      UninviteByName(name)
--                              end
--                      end
--              end
--      end
--end

function BGinvite_inbattleground(name)
        for i=1,80 do
                local bgname = GetBattlefieldScore(i)   
                if (bgname == name) then
                        BGvar_inbg = true
                end
        end

        if BGvar_inbg == false then
                if (BGvar_nothere[name]) then
                        BGvar_nothere[name] = BGvar_nothere[name] + 1
                        if BGvar_nothere[name] >= 2 then
                                return false
                        end
                else
                        BGvar_nothere[name] = 1
                        return true
                end
        elseif BGvar_inbg == true then
                BGvar_nothere[name] = 0  
                return true
        end
end

function BGinvite_autoinvites()
        if (BGvar_save.auto == "disabled") then return end
        if IsRaidLeader() then
                if (GetNumRaidMembers() == 0) and (GetNumBattlefieldPositions() >= 5) then
                        for i=1,5 do
                                local x, y, name = GetBattlefieldPosition(i)
                                if (not BGvar_declined[name]) then
                                        if BGvar_blacklist[name] ~= 1 then
                                                BGvar_hideingroup[name] = 1
                                                BGvar_hideinvite[name] = 1
                                                InviteByName(name)
                                        end
                                end
                        end
                else    
                        for i=1,GetNumBattlefieldPositions() do
                                local x, y, name = GetBattlefieldPosition(i)
                                if (not BGvar_declined[name]) then
                                        if BGvar_blacklist[name] ~= 1 then
                                                BGvar_hideingroup[name] = 1
                                                BGvar_hideinvite[name] = 1
                                                InviteByName(name)
                                        end
                                end
                        end
                end
        end
        BGvar_timers_BGAUTOINVITE = GetTime() + 3
end

                
function BGinvite_hidealreadyingroupmsg(event)
        if (event == "CHAT_MSG_SYSTEM") then
                if string.find(arg1, BGlocal_BLANK_IS_ALREADY_IN_GROUP) then
                        local _, _, player = string.find(arg1, BGlocal_BLANK_IS_ALREADY_IN_GROUP_FIND)
                
                        if (BGvar_hideingroup[player] == 1) then
                                BGvar_hideingroup[player] = 0
                        else
                                Pre_BGinvite_ChatFrame_OnEvent(event)
                        end
                elseif string.find(arg1, BGlocal_YOU_HAVE_INVITED) then
                        local _, _, player = string.find(arg1, BGlocal_YOU_HAVE_INVITED_FIND)
                
                        if (BGvar_hideinvite[player] == 1) then
                                BGvar_hideinvite[player] = 0
                        else
                                Pre_BGinvite_ChatFrame_OnEvent(event)
                        end
                else
                        Pre_BGinvite_ChatFrame_OnEvent(event)
                end
        else
                Pre_BGinvite_ChatFrame_OnEvent(event)
        end
end

function BGinvite_displayblacklist(name)
        if BGvar_blacklist[name] == 1 then
                BGinvite_print(name)
        end
end

function BGinvite_OnUpdate()
        if BGvar_timers_BGAUTOINVITE then
                if BGvar_timers_BGAUTOINVITE <= GetTime() then
                        BGinvite_autoinvites()
                        BGvar_timers_BGAUTOINVITE = GetTime() + 3
                end
        end
        if (GetNumPartyMembers() > 0) and (GetNumRaidMembers() == 0) and (BGvar_timers_convertspam <= GetTime()) and (IsRaidLeader()) then
        local status = BGinvite_GetBattlefieldStatus()
                if (status == "active") then
                        BGvar_timers_convertspam = GetTime()+3
                        BGinvite_ConvertToRaid()
                end
        end
end

function BGinvite_DominantGroup()
        local numpeople_notingroup = GetNumBattlefieldPositions()
        local numpeople_ingroup = GetNumRaidMembers()
                if numpeople_notingroup < numpeople_ingroup then
                        return true
                else
                        return false
                end
end

function BGinvite_print(msg)
        ChatFrame1:AddMessage(msg, 0, .5, 1)
end

function BGinvite_promoteall()
                for i=1, GetNumRaidMembers() do
                local name = GetRaidRosterInfo(i)
                        PromoteToAssistant(name)
                end
end

function BGinvite_demoteall()
                for i=1, GetNumRaidMembers() do
                local name = GetRaidRosterInfo(i)
                        DemoteAssistant(name)
                end
end

function BGinvite_help()
        BGinvite_print(BGlocal_HELP_1)
        BGinvite_print(BGlocal_HELP_2)
        BGinvite_print(BGlocal_HELP_3)
        BGinvite_print(BGlocal_HELP_4)
        BGinvite_print(BGlocal_HELP_5)
        BGinvite_print(BGlocal_HELP_6)
        BGinvite_print(BGlocal_HELP_7)
        BGinvite_print(BGlocal_HELP_8)
        BGinvite_print(BGlocal_HELP_9)
        BGinvite_print(BGlocal_HELP_10)
end

function BGinvite_magicwordchanged()
        BGinvite_localizevarvar(GetLocale())
        BGinvite_print(BGlocal_MAGICWORD_CHANGE)
end

function BGinvite_blacklistremove(name)
        if (BGvar_blacklist[name]) then
                BGvar_blacklist[name] = nil
                BGinvite_print(name..BGlocal_HAS_BEEN_REMOVED)
        else
                BGinvite_print(name..BGlocal_WASNT_ON_BLACKLIST)
        end
end

function BGinvite_blacklistadd(name)
        if (BGvar_blacklist[name]) then
                if BGvar_blacklist[name] == 1 then
                        BGinvite_print(name..BGlocal_IS_ALREADY_BLACKLISTED)
                elseif BGvar_blacklist[name] ~= 1 then
                        BGvar_blacklist[name] = 1
                        BGinvite_print(name..BGlocal_HAS_BEEN_ADDED_BLACKLIST)
                end
        else
                BGvar_blacklist[name] = 1
                BGinvite_print(name..BGlocal_HAS_BEEN_ADDED_BLACKLIST)
        end
end

function BGinvite_GetBattlefieldStatus()
        for i=1,MAX_BATTLEFIELD_QUEUES do
                if GetBattlefieldStatus(i) == "active" then
                        local status = "active"
                end
        end
        if status == "active" then 
                return "active"
        else
                return "none"
        end
end

        
                 
                

Generated by GNU Enscript 1.6.5.90.