BGvar_BlackList = {}; BGvar_NotInBG = {}; BGInvite_Var = {}; BGInvite_Var.debug = false; BGvar_initialMessageSent = false; BGvar_AutoInviteTimer = 0; BGvar_AutoPurgeTimer = 0; BGInvite_ITEM_HEIGHT = 32; BGInvite_ITEMS_SHOWN = 7; BGInvite_Config = { AutoInvite = 0 ,AutoPurge = 0 ,MagicWord = "invite" ,RetryTimeout = 20 ,PurgeTimeout = 120 ,MaxRetries = 5 ,SendWhisper = 1 ,AutoInviteTimeout = 5 ,MsgChannelId=1 ,Disable }; local Pre_BGinvite_ToggleWorldStateScoreFrame; local Pre_BGinvite_ChatFrame_OnEvent; local chatParseInfoMagicWordWhisper = { AddOn = "BGInvite" }; local chatParseInfoMagicWordSay = { AddOn = "BGInvite" }; UIPanelWindows["BGInviteFrame"] = { area = "left", pushable = 3 }; BGINVITE_TAB_SUBFRAMES = { "BGInvite_OptionsFrame", "BGInvite_BlackListFrame" }; --[[ ============================================================================= ============================================================================= ]] function BGInvite_GetBattleFieldStatus() for i=1, MAX_BATTLEFIELD_QUEUES do status, mapName, instanceID = GetBattlefieldStatus(i); --BGDebugMessage("DEBUG","status="..status.." mapName="..mapName.." id="..instanceID,"debug"); if ( instanceID ~= 0 ) then mapName = mapName.." "..instanceID; return status,mapName,instanceID; end end --status="active"; return status,mapName,instanceID; end function MagicWordChanged() BGDebugMessage("DEBUG","magicword changed="..BGInvite_Config.MagicWord,"debug"); chatParseInfoMagicWordWhisper.template = BGInvite_Config.MagicWord; chatParseInfoMagicWordSay.template = BGInvite_Config.MagicWord; BGChatParse_UnregisterEvent(chatParseInfoMagicWordWhisper); BGChatParse_UnregisterEvent(chatParseInfoMagicWordSay); BGChatParse_RegisterEvent(chatParseInfoMagicWordWhisper); BGChatParse_RegisterEvent(chatParseInfoMagicWordSay); end --[[ ============================================================================= The loading frame handles getting our AddOn initialized properly ============================================================================= ]] function BGInviteLoadingFrame_OnUpdate() if ( BGInviteFrame.loaded ) then BGInviteLoadingFrame:UnregisterEvent("VARIABLES_LOADED"); BGInviteLoadingFrame:UnregisterEvent("UNIT_NAME_UPDATE"); BGInviteLoadingFrame:Hide(); BGInviteLoadingFrame = nil; elseif ( BGInviteLoadingFrame.loadTime + 2 <= GetTime() ) then BGInviteFrame_LoadData(); BGInviteLoadingFrame.loadTime = GetTime(); end end function BGInviteLoadingFrame_OnLoad() BGInviteLoadingFrame:RegisterEvent("VARIABLES_LOADED"); BGInviteLoadingFrame:RegisterEvent("UNIT_NAME_UPDATE"); BGInviteLoadingFrame.init = 0; BGInviteLoadingFrame.loadTime = GetTime(); end function BGInviteLoadingFrame_OnEvent(event, arg1) if ( not BGInviteLoadingFrame ) then return; end if ( event == "VARIABLES_LOADED" or event == "UNIT_NAME_UPDATE" ) then BGInviteLoadingFrame.init = BGInviteLoadingFrame.init + 1; BGInviteFrame_LoadData(); end if ( BGInviteLoadingFrame.init >= 2 ) then BGInviteFrame_LoadData(); end end --[[ ============================================================================= Variable initialization ============================================================================= ]] function BGInviteFrame_LoadData() BGInviteFrame.loaded = true; -- check each variable to ensure its set if ( BGInvite_Config.AutoInvite == nil) then BGInvite_Config.AutoInvite = 0; end if ( BGInvite_Config.AutoPurge == nil) then BGInvite_Config.AutoPurge = 0; end if ( BGInvite_Config.MagicWord == nil) then BGInvite_Config.MagicWord = "invite"; end if ( BGInvite_Config.RetryTimeout == nil ) then BGInvite_Config.RetryTimeout = 20; end if ( BGInvite_Config.PurgeTimeout == nil ) then BGInvite_Config.PurgeTimeout = 120; end if ( BGInvite_Config.MaxRetries == nil ) then BGInvite_Config.MaxRetries = 5; end if ( BGInvite_Config.SendWhisper == nil ) then BGDebugMessage("DEBUG","SendWhisper=nil","debug"); BGInvite_Config.SendWhisper = 1; end if ( BGInvite_Config.AutoInviteTimeout == nil ) then BGInvite_Config.AutoInviteTimeout = 5; end if ( BGInvite_Config.MsgChannelId == nil ) then BGInvite_Config.MsgChannelId = 1; end if ( BGInvite_Config.Disable == nil ) then BGInvite_Config.Disable = 0; end end function BGInvite_ResetVariables() BGInviteClearVars(); BGInvite_Config = {}; -- AutoInvite = 0 -- ,AutoPurge = 0 -- ,MagicWord = "invite" -- ,RetryTimeout = 20 -- ,PurgeTimeout = 120 -- }; end --[[ ============================================================================= Initialization. ============================================================================= ]] function BGInviteFrame_OnLoad() this:RegisterEvent("PARTY_MEMBERS_CHANGED") this:RegisterEvent("VARIABLES_LOADED") this:RegisterEvent("ZONE_CHANGED_NEW_AREA") this:RegisterEvent("CHAT_MSG_SAY"); this:RegisterEvent("CHAT_MSG_YELL"); this:RegisterEvent("CHAT_MSG_RAID"); this:RegisterEvent("CHAT_MSG_SYSTEM"); --(ie user joins the battlefield msgs?) this:RegisterEvent("CHAT_MSG_WHISPER") this:RegisterEvent("CHAT_MSG_CHANNEL"); this:RegisterEvent("CHAT_MSG_CHANNEL_JOIN"); this:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE"); this:RegisterEvent("UI_INFO_MESSAGE"); this:RegisterEvent("CHAT_MSG_BG_SYSTEM_NEUTRAL"); Pre_BGinvite_ChatFrame_OnEvent = ChatFrame_OnEvent; ChatFrame_OnEvent = BGinvite_ChatFrame_OnEvent; SLASH_BGINVITE1 = "/bginvite"; SlashCmdList["BGINVITE"] = function ( msg ) BGinvite_SlashCmdHandler(msg); end -- Intall ChatMessge handlers local chatParseInfo = { AddOn = "BGInvite" }; chatParseInfo.event = "CHAT_MSG_SYSTEM"; chatParseInfo.func = function(t) BGInvite_AddBlackList(t.name,BGINVITE_DECLINED); end; chatParseInfo.template = BGlocal_BLANK_DECLINES_YOUR_INVITATION; chatParseInfo.english = "%s declines your group invitation."; chatParseInfo.fields = { "name" }; BGChatParse_RegisterEvent(chatParseInfo); local chatParseInfo1 = { AddOn = "BGInvite" }; chatParseInfo1.event = "CHAT_MSG_SYSTEM"; chatParseInfo1.func = function(t) BGInvite_AddBlackList(t.name, BGINVITE_DECLINED); end; chatParseInfo1.template = BGlocal_BLANK_IS_IGNORING_YOU; chatParseInfo1.english = "%s is ignoring you."; chatParseInfo1.fields = { "name" }; BGChatParse_RegisterEvent(chatParseInfo1); local chatParseInfo2 = { AddOn = "BGInvite" }; chatParseInfo2.event = "CHAT_MSG_SYSTEM"; chatParseInfo2.func = function(t) BGInvite_AddBlackList(t.name,BGINVITE_ALREADY_IN_GROUP); end; chatParseInfo2.template = BGlocal_BLANK_IS_ALREADY_IN_GROUP; chatParseInfo2.english = "%s is already in a group."; chatParseInfo2.fields = { "name" }; BGChatParse_RegisterEvent(chatParseInfo2); chatParseInfoMagicWordWhisper.event = "CHAT_MSG_WHISPER"; chatParseInfoMagicWordWhisper.func = function(t) BGInvite_MagicWordWhisperInvite(t.player); end; chatParseInfoMagicWordWhisper.template = BGInvite_Config.MagicWord; chatParseInfoMagicWordWhisper.english = BGInvite_Config.MagicWord; chatParseInfoMagicWordWhisper.fields = { }; BGChatParse_RegisterEvent(chatParseInfoMagicWordWhisper); chatParseInfoMagicWordSay.event = "CHAT_MSG_SAY"; chatParseInfoMagicWordSay.func = function(t) BGInvite_MagicWordInvite(t.player); end; chatParseInfoMagicWordSay.template = BGInvite_Config.MagicWord; chatParseInfoMagicWordSay.english = BGInvite_Config.MagicWord; chatParseInfoMagicWordSay.fields = { }; BGChatParse_RegisterEvent(chatParseInfoMagicWordSay); local chatParseInfo3 = { AddOn = "BGInvite" }; chatParseInfo1.event = "CHAT_MSG_SYSTEM"; chatParseInfo1.func = function(t) BGDebugMessage("DEBUG","days is "..t.days,"debug"); end; chatParseInfo1.template = "%d days"; chatParseInfo1.english = "%s is ignoring you."; chatParseInfo1.fields = { "days" }; BGChatParse_RegisterEvent(chatParseInfo3); -- Tab Handling code PanelTemplates_SetNumTabs(BGInviteFrame, 2); PanelTemplates_SetTab(BGInviteFrame, 1); --RegisterForSave("BGInvite_Config"); if ( DEFAULT_CHAT_FRAME ) then DEFAULT_CHAT_FRAME:AddMessage(BGINVITE_TITLE.." AddOn loaded. Use /bginvite"); end UIErrorsFrame:AddMessage(loadMessage, 1.0, 1.0, 0.0, 1.0, UIERRORS_HOLD_TIME); end --[[ ============================================================================= The main event handler. Gets called when any event we are subscribed to is fired ============================================================================= ]] function BGInviteFrame_OnEvent(event) --BGDebugMessage("DEBUG","event="..event,"debug"); if (BGInvite_Config.Disable == 1 ) then return; end if (event == "ZONE_CHANGED_NEW_AREA") then BGInviteClearVars(); end -- ready to convert to a raid? if ( IsPartyLeader() and GetNumPartyMembers() >= 3 and GetNumRaidMembers() == 0 ) then BGinvite_ConvertToRaid(); end -- If already in a Raid, no need to send out the initial message -- This is true when another player started the raid and you are now an officer and can invite if ( IsRaidLeader() or IsRaidOfficer() ) then BGvar_initialMessageSent = true; end -- Handle invites if ( (IsPartyLeader() or IsRaidLeader() or IsRaidOfficer()) and (BGInvite_Config.AutoInvite == 1) and (BGvar_AutoInviteTimer+BGInvite_Config.AutoInviteTimeout < GetTime() )) then BGinvite_sendinvites(); end -- Handle purges if ((IsPartyLeader() or IsRaidLeader() or IsRaidOfficer()) and (BGInvite_Config.AutoPurge == 1) and (BGvar_AutoPurgeTimer+BGInvite_Config.PurgeTimeout < GetTime() ) ) then BGinvite_purge(); end end --[[ ============================================================================= ============================================================================= ]] function BGInviteClearVars() --BGvar_BlackList = {}; BGInviteClearBlackListExceptPerms(); BGvar_initialMessageSent = false; end function BGInviteClearBlackList() BGvar_BlackList = {}; end -- Only removes the players that were added because -- they were in a group. -- Leaves Declines and Manual adds function BGInviteClearBlackListExceptPerms() for key,value in BGvar_BlackList do if ( value.reason == BGINVITE_ALREADY_IN_GROUP ) then table.remove(BGvar_BlackList,key); elseif ( value.reason == BGINVITE_DECLINED ) then table.remove(BGvar_BlackList,key); end end end --[[ ============================================================================= Toggles the BGInvite UI on/off. Gets called by tab click handler ============================================================================= ]] function toggleBGInvite(tab) if ( not tab ) then if ( BGInviteFrame:IsVisible() ) then HideUIPanel(BGInviteFrame); else ShowUIPanel(BGInviteFrame); local selectedFrame = getglobal(BGINVITE_TAB_SUBFRAMES[BGInviteFrame.selectedTab]); if ( not selectedFrame:IsVisible() ) then selectedFrame:Show(); end end else local subFrame = getglobal(tab); if ( subFrame ) then PanelTemplates_SetTab(BGInviteFrame, subFrame:GetID() ); if ( BGInviteFrame:IsVisible() ) then if ( subFrame:IsVisible() ) then HideUIPanel( BGInviteFrame ); else PlaySound("igCharacterInfoTab"); BGInviteFrame_ShowSubFrame(tab); end else ShowUIPanel( BGInviteFrame ); BGInviteFrame_ShowSubFrame(tab); end end end end --[[ ============================================================================= Shows or hides a subframe (tab) ============================================================================= ]] function BGInviteFrame_ShowSubFrame(frameName) for index, value in BGINVITE_TAB_SUBFRAMES do if ( value == frameName ) then getglobal(value):Show(); else getglobal(value):Hide(); end end end --[[ ============================================================================= Called when you click on any Tab and decodes into the correct tab to show. ============================================================================= ]] function BGInviteTab_OnClick() if ( this:GetName() == "BGInviteFrameTab1" ) then toggleBGInvite("BGInvite_OptionsFrame"); elseif ( this:GetName() == "BGInviteFrameTab2" ) then toggleBGInvite("BGInvite_BlackListFrame"); end PlaySound("igCharacterInfoTab"); end --[[ ============================================================================= Handles slash commands. Most of the switches are for debugging/testing ============================================================================= ]] function BGinvite_SlashCmdHandler(msg) if (string.lower(msg) == "promote all") then BGinvite_promoteall() elseif (string.lower(msg) == "demote all") then BGinvite_demoteall() elseif (string.lower(msg) == "invite") then BGinvite_sendinvites() elseif (string.sub(msg,1,6) == "invite") then BGDebugMessage("debug","invname="..string.sub(msg,8),"debug"); BGInvite_SendInvite(string.sub(msg,8)); elseif (msg == "testaig1" ) then testAlreadyInGroup(); elseif (msg == "testaig2" ) then testAIG(); elseif (msg == "testaig3" ) then testAIG3(); elseif (msg == "vi" ) then vi(); elseif (msg == "aig" ) then dumpAIG(); elseif (string.sub(msg,1,7) == "cleanse") then testcleanse(string.sub(msg,9)); elseif (string.sub(msg,1,3) == "aig") then BGInvite_AddBlackList(string.sub(msg,5),BGINVITE_ALREADY_IN_GROUP); elseif (string.sub(msg,1,4) == "aig2") then BGInvite_AddBlackList(string.sub(msg,6),BGINVITE_DECLINED); elseif (string.sub(msg,1,4) == "nibg") then BGinvite_inbattleground(string.sub(msg,6)); table.foreach(BGvar_NotInBG, debugprintAIG); elseif (msg == "testbg" ) then local status,mapname,instanceid = BGInvite_GetBattleFieldStatus(); BGDebugMessage("debug","status="..status.." mapname="..mapname.." instance="..instanceid,"debug"); elseif (msg == "scores") then debugDumpBGScores(); elseif (msg == "reset") then BGInvite_ResetVariables(); elseif (msg == "purge") then BGinvite_purge(); elseif (msg == "testgroup") then testgroup(); elseif (msg == "testmath") then testmath(); elseif (msg == "testmatch") then testmatch(); elseif (msg == "testcleanser") then testcleanser(); elseif (msg == "channel") then mychannel(); else toggleBGInvite(); end end --[[ ============================================================================= Called when the player clicks "Send Invites" in the UI or when AutoInvites are enabled. ============================================================================= ]] function BGinvite_sendinvites() local status, mapName, instanceID = BGInvite_GetBattleFieldStatus() if ( status ~= "active" ) then return; end if (not BGvar_initialMessageSent) then SendChatMessage(BGlocal_SAY_INVITING, "SAY") BGvar_initialMessageSent = true; end -- Clean up Blacklist prior to sending invites. BGInvite_CleanseGroups(); -- Invite the first 5 for the party, after convertToRaid invite all. local numPositions = GetNumBattlefieldPositions(); local numInvites = 0; for i=1,numPositions do local x, y, name = GetBattlefieldPosition(i) if ( BGInvite_SendInvite(name) == true ) then numInvites = numInvites + 1; end if ( (GetNumRaidMembers() == 0) and (numInvites >= 4 - GetNumPartyMembers()) ) then break; end end BGvar_AutoInviteTimer = GetTime(); end --[[ ============================================================================= ============================================================================= ]] function BGInvite_SendInvite(player) if (BGInvite_Config.Disable == 1 ) then return; end if ( BGIsValidInvite(player) == true ) then InviteByName(player); return true; end return false; end --[[ ============================================================================= Called by the ChatMessage callback handler for when the MagicWord is detected. Checks to ensure that AutoInvite is enabled before inviting. ============================================================================= ]] function BGInvite_MagicWordInvite(player) local status, mapName, instanceID = BGInvite_GetBattleFieldStatus() if ( status ~= "active" ) then if ( IsPartyLeader() or IsRaidLeader() or IsRaidOfficer() ) then if (BGInvite_Config.AutoInvite == 1) then BGInvite_SendInvite(player); end end end end --[[ ============================================================================= Called by the ChatMessage callback handler for when the MagicWord is detected. Called when player whispers to Leader. ============================================================================= ]] function BGInvite_MagicWordWhisperInvite(player) if ( IsPartyLeader() or IsRaidLeader() or IsRaidOfficer() ) then if (BGInvite_Config.AutoInvite == 1) then BGInvite_SendInvite(player); end end end --[[ ============================================================================= Check to ensure we can send an invite to this player. Checks whether a user is blackedlisted and whether they are already in the raid. ============================================================================= ]] function BGIsValidInvite(player) local index = findPlayerIndexInList(BGvar_BlackList,player); if ( index ) then if ( BGvar_BlackList[index].retries >= BGInvite_Config.MaxRetries or BGvar_BlackList[index].time+BGInvite_Config.RetryTimeout > GetTime() ) then if ( BGvar_BlackList[index].retries >= BGInvite_Config.MaxRetries ) then BGDebugMessage("DEBUG","Invite Not valid due to retries >= max "..BGInvite_Config.MaxRetries,"debug"); end if ( BGvar_BlackList[index].time+BGInvite_Config.RetryTimeout > GetTime() ) then BGDebugMessage("DEBUG","Invite Not valid by time"..BGvar_BlackList[index].time+BGInvite_Config.RetryTimeout.." is greater than "..GetTime(),"debug"); end return false; end if ( BGvar_BlackList[index].declined == 1 or BGvar_BlackList[index].reason == BGINVITE_DECLINED ) then BGDebugMessage("DEBUG","Invite Not valid because of decline:"..BGvar_BlackList[index].declined,"debug"); return false; end if ( BGvar_BlackList[index].reason == BGINVITE_MANUAL_ADD ) then BGDebugMessage("DEBUG","Invite Not valid because player was manually added =>"..player,"debug"); return false; end end if ( isInRaid(player) == true ) then return false; end BGDebugMessage("DEBUG","Invite is valid","debug"); return true; end --[[ ============================================================================= Converts the party to a raid -- called by the EventHandler ============================================================================= ]] function BGinvite_ConvertToRaid() local status, mapName, instanceID = BGInvite_GetBattleFieldStatus() if ( status == "active" ) then BGinvite_print(BGlocal_CONVERTING_TO_RAID); ConvertToRaid(); end end --[[ ============================================================================= Determines whether the player is in the Raid or not ============================================================================= ]] function isInRaid(player) for i=1,GetNumRaidMembers() do local name = GetRaidRosterInfo(i); if ( name == player ) then return true; end end return false; end --[[ ============================================================================= Purges players from the Raid that have left the Battlefield. This gets called if the user clicks "Purge" in the UI or if autopurges are enabled ============================================================================= ]] function BGinvite_purge() BGvar_AutoPurgeTimer = GetTime(); --BGinvite_print(BGlocal_PURGING_PLAYERS) if GetBattlefieldScore(1) == nil then --BGinvite_print(BGlocal_ERROR_SCANNING) -- not in BG return; else for i=1,GetNumRaidMembers() do local name = GetRaidRosterInfo(i) if (BGinvite_inbattleground(name) ~= true) then if ( BGInvite_Config.SendWhisper == 1) then SendChatMessage("[BGInvite] "..BGlocal_YOU_APPEAR_GONE, "WHISPER",this.language, name) end UninviteByName(name); BGDebugMessage("[BGINVITE]","Uninviting from raid: "..name.." (not in BG)","debug"); end end end end --[[ ============================================================================= -- Determines whether a player is still on the BattleField -- For some reason this can return false positives and so it performs -- an extra check. Places users not found in BG into a list for reference. ============================================================================= ]] function BGinvite_inbattleground(name) local player = {}; local x = findPlayerIndexInList(BGvar_NotInBG,name); for i=1,80 do local bgname = GetBattlefieldScore(i); if (bgname and bgname == name) then -- if previously flagged as not in BG, now we can remove them from that list. if ( x ) then table.remove(BGvar_NotInBG,x); end return true; end end if ( x ) then BGvar_NotInBG[x].retries = BGvar_NotInBG[x].retries+1; if (BGvar_NotInBG[x].retries > 2) then table.remove(BGvar_NotInBG,x); return false; end else player.name = name; player.time = 0; player.retries = 1; table.insert(BGvar_NotInBG,player); end return true; end function debugDumpBGScores() for i=1,80 do local bgname,killingBlows,honorKills,deaths,honorGained = GetBattlefieldScore(i); if (bgname) then local msg = bgname..":kb="..killingBlows..":kills="..honorKills..":deaths="..deaths..":honor="..honorGained; DEFAULT_CHAT_FRAME:AddMessage(format("|ccfff0000[%s]: %s|r", "debug", msg)); end end end function BGinvite_print(msg) ChatFrame1:AddMessage(msg, 0, .5, 1) end --[[ ============================================================================= Promotion/Demotion handlers ============================================================================= ]] function BGinvite_promoteall() if (IsRaidLeader()) then for i=1, GetNumRaidMembers() do local name = GetRaidRosterInfo(i) PromoteToAssistant(name) end end end function BGinvite_demoteall() if (IsRaidLeader()) then for i=1, GetNumRaidMembers() do local name = GetRaidRosterInfo(i) DemoteAssistant(name) end end end --[[ ============================================================================= -- Adds a user to the Blacklist -- Called by the Chat Message handlers ============================================================================= ]] function BGInvite_AddBlackList(name,reason) local player = {}; local status,mapname,instanceid = BGInvite_GetBattleFieldStatus(); --if (BGInvite_Config.Disable == 1 ) then -- return; --end if (status == "active" or BGInvite_Var.debug == true or reason == BGINVITE_MANUAL_ADD) then if ( isInRaid(name) ) then return; end local index = findPlayerIndexInList(BGvar_BlackList,name); if ( index ) then BGDebugMessage("DEBUG","AIG: "..name.." is already flagged "..BGvar_BlackList[index].retries,"debug"); BGvar_BlackList[index].time = GetTime(); BGvar_BlackList[index].retries = BGvar_BlackList[index].retries + 1; player = BGvar_BlackList[index]; else player.name = name; player.time = GetTime(); player.retries = 0; player.reason = reason; player.declined = 0; if ( reason == BGINVITE_DECLINED ) then player.declined = 1; end table.insert(BGvar_BlackList,player); end if (BGInvite_Config.SendWhisper == 1 and math.mod(player.retries,2) == 0 and player.declined ~= 1) then SendChatMessage("[BGInvite] "..BGINVITE_LEAVE_YOUR_GROUP, "WHISPER", this.language, name); end BGDebugMessage("DEBUG","[BlackList adding player] "..name,"debug"); end BGInvite_BlackListFrame_Update(); end --[[ ============================================================================= Walks the Blacklist array and calls BGInvite_CleanseBlackList for each entry ============================================================================= ]] function BGInvite_CleanseGroups() --table.foreach(BGvar_BlackList, BGInvite_CleanseBlackList); BGInvite_CleanseBlackList(); end --[[ ============================================================================= -- Removes players from the Blacklist that are now in the Raid ============================================================================= ]] function BGInvite_CleanseBlackList() for i=1,GetNumRaidMembers() do local playerName = GetRaidRosterInfo(i) local index = findPlayerIndexInList(BGvar_BlackList,playerName); if ( index ) then table.remove(BGvar_BlackList, index); end end end --[[ ============================================================================= -- Hook function for chat messages -- Suppresses "Already in Group" messages ============================================================================= ]] function BGinvite_ChatFrame_OnEvent(event) if (BGvar_initialMessageSent and (event == "CHAT_MSG_SYSTEM")) then --BGDebugMessage("DEBUG", "chatmessagehook="..arg1, "debug"); if string.find(arg1, BGlocal_BLANK_IS_ALREADY_IN_GROUP_FIND) then x=0; --BGDebugMessage("DEBUG", "hiding already in group message", "debug"); elseif string.find(arg1, BGlocal_YOU_HAVE_INVITED_FIND) then x=0; --BGDebugMessage("DEBUG", "hiding you have invited message", "debug"); else Pre_BGinvite_ChatFrame_OnEvent(event) end else Pre_BGinvite_ChatFrame_OnEvent(event) end end --[[ ============================================================================= Called when frame window opens or closes ============================================================================= ]] function BGInviteFrame_OnShow() PlaySound("igCharacterInfoOpen"); end function BGInviteFrame_OnHide() PlaySound("igCharacterInfoClose"); end --[[ ============================================================================= Finds our player object in any list. ============================================================================= ]] function findPlayerIndexInList(list,name) local i; BGDebugMessage("DEBUG", "find player "..name, "debug"); for i=1, table.getn( list ) do BGDebugMessage("DEBUG", "player="..list[i].name, "debug"); if (list[i].name == name ) then BGDebugMessage("DEBUG", "found player="..list[i].name, "debug"); return i; end end end --[[ ============================================================================= Debug message output ============================================================================= ]] function BGDebugMessage(x,y,z) if ( z == "error" ) then DEFAULT_CHAT_FRAME:AddMessage(format("|cffff0000[%s]: %s|r", x, y)) end if ( BGInvite_Var.debug ) then DEFAULT_CHAT_FRAME:AddMessage(format("|ccfff0000[%s]: %s|r", x, y)) end --if ( z == "debug" ) then -- DEFAULT_CHAT_FRAME:AddMessage(format("|cffff0000[%s]: %s|r", x, y)) --end --if ( z == "foods" ) then -- DEFAULT_CHAT_FRAME:AddMessage(format("|cffff0000[%s]: %s|r", x, y)) --end end --[[ ============================================================================= TEST CODE FROM HERE DOWN ============================================================================= ]] function testAlreadyInGroup() for i=1,GetNumRaidMembers() do local name = GetRaidRosterInfo(i) BGInvite_AddBlackList(name,BGINVITE_ALREADY_IN_GROUP); end dumpAIG(); BGvar_BlackList = {}; end function testAIG() BGInvite_AddBlackList("testplayer1",BGINVITE_ALREADY_IN_GROUP); BGInvite_AddBlackList("testplayer2",BGINVITE_ALREADY_IN_GROUP); dumpAIG(); BGInvite_AddBlackList("testplayer2",BGINVITE_ALREADY_IN_GROUP); dumpAIG(); BGDebugMessage("DEBUG","magicword="..BGInvite_Config.MagicWord,"debug"); BGDebugMessage("DEBUG","RetryTimeout="..BGInvite_Config.RetryTimeout,"debug"); end function testAIG3() BGInvite_AddBlackList("testplayer1",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer2",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer3",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer4",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer5",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer6",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer7",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer8",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer9",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer10",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer11",BGINVITE_DECLINED); BGInvite_AddBlackList("testplayer12",BGINVITE_ALREADY_IN_GROUP); end function vi() BGDebugMessage("DEBUG","testplayer1 isvalid "..decodeBoolean(BGIsValidInvite("testplayer1"))); BGDebugMessage("DEBUG","testplayer2 isvalid "..decodeBoolean(BGIsValidInvite("testplayer2"))); BGDebugMessage("DEBUG","testplayer3 isvalid "..decodeBoolean(BGIsValidInvite("testplayer3"))); BGDebugMessage("DEBUG","testplayer4 isvalid "..decodeBoolean(BGIsValidInvite("testplayer4"))); BGDebugMessage("DEBUG","testplayer5 isvalid "..decodeBoolean(BGIsValidInvite("testplayer5"))); BGDebugMessage("DEBUG","testplayer6 isvalid "..decodeBoolean(BGIsValidInvite("testplayer6"))); BGDebugMessage("DEBUG","testplayer7 isvalid "..decodeBoolean(BGIsValidInvite("testplayer7"))); BGDebugMessage("DEBUG","testplayer8 isvalid "..decodeBoolean(BGIsValidInvite("testplayer8"))); BGDebugMessage("DEBUG","testplayer9 isvalid "..decodeBoolean(BGIsValidInvite("testplayer9"))); BGDebugMessage("DEBUG","testplayer10 isvalid "..decodeBoolean(BGIsValidInvite("testplayer10"))); BGDebugMessage("DEBUG","testplayer11 isvalid "..decodeBoolean(BGIsValidInvite("testplayer11"))); BGDebugMessage("DEBUG","testplayer12 isvalid "..decodeBoolean(BGIsValidInvite("testplayer12"))); end function decodeBoolean(value) if ( value ) then return "true"; end return "false"; end function dumpAIG() BGDebugMessage("DEBUG","Dump AIG","debug"); table.foreach(BGvar_BlackList, debugprintAIG); BGDebugMessage("DEBUG","Dump AIG2","debug"); for key,value in BGvar_BlackList do debugprintAIG(key,value) end end function debugprintAIG(key,player) BGDebugMessage("DEBUG","key="..key.." "..player.name..'-'..player.time..'-'..player.retries,"debug"); end function testgroup() if ( IsPartyLeader() ) then BGDebugMessage("DEBUG","you are party leader","debug"); else BGDebugMessage("DEBUG","you are NOT party leader","debug"); end local n = GetNumPartyMembers(); BGDebugMessage("DEBUG","party member cnt="..n,"debug"); local x = GetNumRaidMembers(); BGDebugMessage("DEBUG","raid member cnt="..x,"debug"); end function testmath() local x = math.mod(0,2); local y = math.mod(1,2); local z = math.mod(2,2); local a = math.mod(3,2); BGDebugMessage("DEBUG","x="..x,"debug"); BGDebugMessage("DEBUG","y="..y,"debug"); BGDebugMessage("DEBUG","z="..z,"debug"); BGDebugMessage("DEBUG","a="..a,"debug"); end function testmatch() BGDebugMessage("DEBUG","testmatch","debug"); local message = "who needs invite?"; local pattern = "invite.*"; local match = { string.gfind(message, pattern)() }; if ( table.getn(match) ~= 0 ) then BGDebugMessage("DEBUG","matched","debug"); local ret = { }; local index; for index=1, table.getn(match), 1 do BGDebugMessage("DEBUG","match:"..match[index],"debug"); end end message = "invite me!"; match = { string.gfind(message, pattern)() }; if ( table.getn(match) ~= 0 ) then BGDebugMessage("DEBUG","matched","debug"); local ret = { }; local index; for index=1, table.getn(match), 1 do BGDebugMessage("DEBUG","match:"..match[index],"debug"); end end end function testcleanse(key) table.remove(BGvar_BlackList, key); end function testcleanser() for i=1,GetNumRaidMembers() do local name = GetRaidRosterInfo(i) if (BGinvite_inbattleground(name) ~= true) then BGDebugMessage("DEBUG","should rmeove from group:"..name,"debug"); end end end function mychannel() BGDebugMessage("DEBUG","channelname = "..BGInvite_Config.MsgChannelId,"debug"); SendChatMessage("?", BGINVITE_CHANNELS[BGInvite_Config.MsgChannelId].type, nil,BGINVITE_CHANNELS[BGInvite_Config.MsgChannelId].id); end