Advertisement
Guest User

Untitled

a guest
Mar 15th, 2013
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 79.80 KB | None | 0 0
  1. -- Created by Value @Chris Jewett --
  2. -- Started February 15th, 2013 --
  3.  
  4. -- Create Frame To Make Sure Saved Variables Have Loaded --
  5. local addonsLoaded = CreateFrame("Frame")
  6.  
  7. -- Register Events For addonsLoaded Frame --
  8. addonsLoaded:RegisterEvent("ADDON_LOADED")
  9. addonsLoaded:RegisterEvent("PLAYER_LOGOUT")
  10.  
  11. -- Declare playerName, playerRealm, and checkLoadCount Before Checking If Profile Exists --
  12. playerName = UnitName("player")
  13. playerRealm = GetRealmName()
  14. catchCount = 0
  15. checkLoadCount = false
  16. storeEnemy1 = nil
  17. storeEnemy2 = nil
  18. storeEnemy3 = nil
  19. storeEnemy4 = nil
  20. storeEnemy5 = nil
  21. storeClass1 = nil
  22. storeClass2 = nil
  23. storeClass3 = nil
  24. storeClass4 = nil
  25. storeClass5 = nil
  26. teamName = nil
  27. specific1 = 0
  28. specific2 = 0
  29. specific3 = 0
  30. specific4 = 0
  31. specific5 = 0
  32. bracketChoice = nil
  33. playerChoice = nil
  34. enemyChoice = nil
  35. specificPlayerStorage = ""
  36. deathKnightBoolean = false
  37. druidBoolean = false
  38. hunterBoolean = false
  39. mageBoolean = false
  40. monkBoolean = false
  41. paladinBoolean = false
  42. priestBoolean = false
  43. rogueCBoolean = false
  44. shamanBoolean = false
  45. warlockBoolean = false
  46. warriorBoolean = false
  47. alreadyCreated = false
  48.  
  49. -- Items For Drop Down Menu --
  50. playerItems = {"Step 2"}
  51.  
  52. -- Function To Make Sure Current Addon Variables Are Loaded
  53. function addonsLoaded:OnEvent(event, arg1)
  54.     if event == "ADDON_LOADED" and arg1 == "WinLossTracker" then
  55.         if player == nil then
  56.             player = {}
  57.         end
  58.         -- Loop To Check If Player Profile Has Already Been Created --
  59.         for k,v in pairs (player) do
  60.             -- Checks To See If Player Is Already In Database --
  61.             if (v.playerName == playerName) then
  62.                 checkLoadCount = true
  63.             end
  64.         end  
  65.         -- If Character Is Not In Database Then Add To Database --
  66.         if (checkLoadCount == false) then
  67.             -- Creates New Profile If Not In Database. --
  68.             newCharacter = Player:new(playerName, playerRealm)
  69.             table.insert(player, newCharacter)
  70.         end    
  71.         -- Sorts Player Table --
  72.         table.sort(player, function (player1, player2) return player1.playerName < player2.playerName end)
  73.         -- Populates playerItems List --
  74.         for k,v in pairs (player) do
  75.             table.insert(playerItems, tostring(v.playerName .. " - " .. v.playerRealm))
  76.         end
  77.     end
  78. end
  79.  
  80. -- Set Script For addonsLoaded Frame --
  81. addonsLoaded:SetScript("OnEvent", addonsLoaded.OnEvent)
  82.  
  83. ---------------- Everything Below This Point Deals With GUI ----------------
  84. ----------------------------------------------------------------------------
  85. ----------------------------------------------------------------------------
  86. -- Currently the GUI is created from scratch (first time attempting LUA   --
  87. -- and a WoW addon) so it is very nasty code. Maybe convert it to OOP     --
  88. -- once I complete the data structure since the GUI won't change much if  --
  89. -- at all once that happens.                                              --
  90.  
  91. SLASH_WINLOSSTRACKER1 = '/wlt', '/winlosstracker'
  92. function SlashCmdList.WINLOSSTRACKER(msg, editbox)
  93.     if (alreadyCreated == false) then
  94.         alreadyCreated = true
  95.         frameShowing = true
  96.         -- Creates Parent Frame --
  97.         winLossTrackerFrame = CreateFrame("Frame", "DragFrame", UIParent)
  98.         winLossTrackerFrame:SetSize(1000, 700)
  99.         winLossTrackerFrame:SetPoint("CENTER")
  100.         winLossTrackerFrame:SetMovable(true)
  101.         winLossTrackerFrame:EnableMouse(true)
  102.         winLossTrackerFrame:SetClampedToScreen(true)
  103.         winLossTrackerFrame:RegisterForDrag("LeftButton")
  104.         winLossTrackerFrame:SetScript("OnDragStart", winLossTrackerFrame.StartMoving)
  105.         winLossTrackerFrame:SetScript("OnDragStop", winLossTrackerFrame.StopMovingOrSizing)
  106.         winLossTrackerFrame:SetBackdrop({
  107.               bgFile="Interface\\DialogFrame\\UI-DialogBox-Background",
  108.               edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
  109.               tile=1, tileSize=32, edgeSize=32,
  110.               insets={left=11, right=12, top=12, bottom=11}
  111.         })
  112.  
  113.         -- Create Frame for Border --
  114.         borderlol = CreateFrame("ScrollFrame", nil, winLossTrackerFrame)
  115.         borderlol:SetPoint("TOPLEFT", 175, -125)
  116.         borderlol:SetPoint("BOTTOMRIGHT", -35, 20)
  117.         borderlol:SetBackdrop({
  118.               bgFile="Interface\\DialogFrame\\UI-DialogBox-Background",
  119.               edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
  120.               tile=1, tileSize=32, edgeSize=32,
  121.               insets={left=11, right=12, top=12, bottom=11}
  122.         })
  123.  
  124.         -- Creates Scroll Frame for Parent Frame --
  125.         wltfScrollFrame = CreateFrame("ScrollFrame", nil, winLossTrackerFrame)
  126.         wltfScrollFrame:SetPoint("TOPLEFT", 190, -140)
  127.         wltfScrollFrame:SetPoint("BOTTOMRIGHT", -50, 35)
  128.  
  129.         -- Creates Scroll Bar for Parent Frame--
  130.         wltfScrollBar = CreateFrame("Slider", "ScrollBar", wltfScrollFrame, "UIPanelScrollBarTemplate")
  131.         wltfScrollBar:SetPoint("TOPLEFT", winLossTrackerFrame, "TOPRIGHT", -30, -140)
  132.         wltfScrollBar:SetPoint("BOTTOMLEFT", winLossTrackerFrame, "BOTTOMRIGHT", -30, 35)
  133.         wltfScrollBar:SetMinMaxValues(0, 20)
  134.         wltfScrollBar:SetValueStep(1)
  135.         wltfScrollBar.scrollStep = 1
  136.         wltfScrollBar:SetWidth(16)
  137.         wltfScrollBar:SetScript("OnValueChanged",
  138.                 function (self, value)
  139.                         scrollFrameContent:SetScrollOffset(select(2, wltfScrollBar:GetMinMaxValues()) - value)
  140.                 end)
  141.         scrollbackground = wltfScrollBar:CreateTexture(nil, "BACKGROUND")
  142.         scrollbackground:SetAllPoints(wltfScrollBar)
  143.         scrollbackground:SetTexture(0, 0, 0, 0)
  144.         winLossTrackerFrame.wltfScrollBar = wltfScrollBar
  145.  
  146.         -- Creates Content for Parent Frame --
  147.         scrollFrameContent = CreateFrame("ScrollingMessageFrame", nil, winLossTrackerFrame)
  148.         scrollFrameContent:SetPoint("TOPLEFT", 190, -140)
  149.         scrollFrameContent:SetPoint("BOTTOMRIGHT", -50, 35)
  150.         scrollFrameContent:SetSize(760, 525)
  151.         scrollFrameContent:SetFontObject(GameFontNormal)
  152.         scrollFrameContent:SetTextColor(1, 1, 1, 1) -- default color
  153.         scrollFrameContent:SetJustifyH("LEFT")
  154.         scrollFrameContent:SetHyperlinksEnabled(true)
  155.         scrollFrameContent:SetFading(false)
  156.         scrollFrameContent:SetMaxLines(100000)
  157.         scrollFrameContent:SetInsertMode("BOTTOM")
  158.  
  159.         wltfScrollFrame:SetScrollChild(scrollFrameContent)
  160.         wltfScrollBar:SetValue(select(2, wltfScrollBar:GetMinMaxValues()))
  161.     winLossTrackerFrame:SetScript("OnMouseWheel", function(self, delta)
  162.        
  163.         print (scrollFrameContent:GetNumMessages(), scrollFrameContent:GetNumLinesDisplayed())
  164.        
  165.         local cur_val = wltfScrollBar:GetValue()
  166.         local min_val, max_val = wltfScrollBar:GetMinMaxValues()
  167.  
  168.         if delta < 0 and cur_val < max_val then
  169.             cur_val = math.min(max_val, cur_val + 1)
  170.             wltfScrollBar:SetValue(cur_val)        
  171.         elseif delta > 0 and cur_val > min_val then
  172.             cur_val = math.max(min_val, cur_val - 1)
  173.             wltfScrollBar:SetValue(cur_val)    
  174.         end
  175.      end)
  176.  
  177.         -- Exit Button For Top Right --
  178.         exitFrame = CreateFrame("Frame", nil, winLossTrackerFrame)
  179.         exitFrame:SetSize(24, 24)
  180.         exitFrame:SetAllPoints()
  181.         exitFrame.btn = CreateFrame("Button", nil, exitFrame, "UIPanelButtonTemplate")
  182.         exitFrame.btn:SetSize(24, 24)
  183.         exitFrame.btn:SetText("X")
  184.         exitFrame.btn:SetPoint("TOPRIGHT", -12, -12)
  185.         exitFrame.btn:SetAlpha(1)
  186.         exitFrame.btn:Show()
  187.         exitFrame.btn:SetScript("OnClick", function() winLossTrackerFrame:Hide() end)
  188.  
  189.         -- Creates "Fetch" Button for Parent Frame --
  190.         fetchButtonFrame = CreateFrame("Frame", nil, winLossTrackerFrame)
  191.         fetchButtonFrame:SetSize(150, 50)
  192.         fetchButtonFrame:SetAllPoints()
  193.         fetchButtonFrame.btn = CreateFrame("Button", nil, fetchButtonFrame, "UIPanelButtonTemplate")
  194.         fetchButtonFrame.btn:SetSize(150, 50)
  195.         fetchButtonFrame.btn:SetText("Fetch!")
  196.         fetchButtonFrame.btn:SetPoint("TOP", winLossTrackerFrame, "TOP", 350, -50)
  197.         fetchButtonFrame.btn:SetScript("OnClick",
  198.             function()  
  199.                 scrollFrameContent:Clear()
  200.                 for k,v in pairs (player) do
  201.                     keyStorage1 = k
  202.                     -- Sorts all 2v2 teams by class. If class is same then by name. --
  203.                     for k,v in pairs (v.twoEnemyArenaTeams) do
  204.                         sort2v2(v)
  205.                     end
  206.                     -- Sorts all 3v3 teams by class. If class is same then by name. --
  207.                     for k,v in pairs (v.threeEnemyArenaTeams) do
  208.                         sort3v3(v)
  209.                     end
  210.                     -- Sorts all 5v5 teams by class. If class is same then by name. --
  211.                     for k,v in pairs (v.fiveEnemyArenaTeams) do
  212.                         sortboolean = true
  213.                         while (sortboolean) do
  214.                             sortboolean = sort5v5(v)
  215.                         end
  216.                     end
  217.                     -- Sorts Specific Players Table By Name --
  218.                     table.sort(v.specificPlayer, function (object1, object2) return object1.specificEnemy < object2.specificEnemy end)
  219.                     -- Sorts 2v2 by Win/Loss Ratio --
  220.                     table.sort(v.twoEnemyArenaTeams, function (object1, object2)
  221.                                                         if tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss)) then
  222.                                                             return tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))
  223.                                                         elseif (tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) == tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))) then
  224.                                                             if (object1.enemyClass1 < object2.enemyClass1) then
  225.                                                                 return object1.enemyClass1 < object2.enemyClass1
  226.                                                             elseif (object1.enemyClass2 < object2.enemyClass2) then
  227.                                                                 return object1.enemyClass2 < object2.enemyClass2
  228.                                                             end
  229.                                                          end                                            
  230.                                                      end)
  231.                     -- Sorts 3v3 by Win/Loss Ratio --
  232.                     table.sort(v.threeEnemyArenaTeams, function (object1, object2)
  233.                                                             if tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss)) then
  234.                                                                 return tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))
  235.                                                             elseif (tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) == tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))) then
  236.                                                                 if (object1.enemyClass1 < object2.enemyClass1) then
  237.                                                                     return object1.enemyClass1 < object2.enemyClass1
  238.                                                                 elseif (object1.enemyClass2 < object2.enemyClass2) then
  239.                                                                     return object1.enemyClass2 < object2.enemyClass2
  240.                                                                 elseif (object1.enemyClass3 < object2.enemyClass3) then
  241.                                                                     return object1.enemyClass3 < object2.enemyClass3
  242.                                                                 end
  243.                                                              end                                            
  244.                                                          end)
  245.                     -- Sorts 5v5 by Win/Loss Ratio --
  246.                     table.sort(v.fiveEnemyArenaTeams, function (object1, object2)
  247.                                                             if tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss)) then
  248.                                                                 return tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) > tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))
  249.                                                             elseif (tonumber(object1.win) / (tonumber(object1.win) + tonumber(object1.loss)) == tonumber(object2.win) / (tonumber(object2.win) + tonumber(object2.loss))) then
  250.                                                                 if (object1.enemyClass1 < object2.enemyClass1) then
  251.                                                                     return object1.enemyClass1 < object2.enemyClass1
  252.                                                                 elseif (object1.enemyClass2 < object2.enemyClass2) then
  253.                                                                     return object1.enemyClass2 < object2.enemyClass2
  254.                                                                 elseif (object1.enemyClass3 < object2.enemyClass3) then
  255.                                                                     return object1.enemyClass3 < object2.enemyClass3
  256.                                                                 elseif (object1.enemyClass4 < object2.enemyClass4) then
  257.                                                                     return object1.enemyClass < object2.enemyClass
  258.                                                                 elseif (object1.enemyClass5 < object2.enemyClass5) then
  259.                                                                     return object1.enemyClass5 < object2.enemyClass5
  260.                                                                 end
  261.                                                              end                                            
  262.                                                          end)
  263.                 end
  264.  
  265.                 if (bracketChoice ~= nil and playerChoice ~= nil and enemyChoice ~= nil) then
  266.                     fetchResults()
  267.                 else
  268.                     scrollFrameContent:AddMessage("The search did not work!")
  269.                     wltfScrollBar:SetMinMaxValues(0, 0)
  270.                 end
  271.             end)
  272.         fetchButtonFrame.btn:SetAlpha(1)
  273.         fetchButtonFrame.btn:Show()
  274.  
  275.         -- Creates "Arena Dropdown Menu" for Parent Frame --
  276.         if not arenaDropDownMenu then
  277.            CreateFrame("Button", "arenaDropDownMenu", winLossTrackerFrame, "UIDropDownMenuTemplate")
  278.         end
  279.  
  280.         arenaDropDownMenu:ClearAllPoints()
  281.         arenaDropDownMenu:SetPoint("TOP", winLossTrackerFrame, "TOP", -325, -62)
  282.         arenaDropDownMenu:Show()
  283.  
  284.         -- Items For Drop Down Menu --
  285.         local arenaItems = {
  286.            "Step 1",
  287.            "2v2",
  288.            "3v3",
  289.            "5v5",
  290.         }
  291.  
  292.         local function OnClick(self)
  293.             UIDropDownMenu_SetSelectedID(arenaDropDownMenu, self:GetID())
  294.             if (self:GetID() == 1) then
  295.                 bracketChoice = nil
  296.             elseif (self:GetID() == 2) then
  297.                 bracketChoice = "2v2"
  298.             elseif (self:GetID() == 3) then
  299.                 bracketChoice = "3v3"
  300.             elseif (self:GetID() == 4) then
  301.                 bracketChoice = "5v5"
  302.             end
  303.         end
  304.  
  305.         local function initialize(self, level)
  306.            local info = UIDropDownMenu_CreateInfo()
  307.            for k,v in pairs(arenaItems) do
  308.               info = UIDropDownMenu_CreateInfo()
  309.               info.text = v
  310.               info.value = v
  311.               info.func = OnClick
  312.               UIDropDownMenu_AddButton(info, level)
  313.            end
  314.         end
  315.  
  316.         UIDropDownMenu_Initialize(arenaDropDownMenu, initialize)
  317.         UIDropDownMenu_SetWidth(arenaDropDownMenu, 125);
  318.         UIDropDownMenu_SetButtonWidth(arenaDropDownMenu, 124)
  319.         UIDropDownMenu_SetSelectedID(arenaDropDownMenu, 1)
  320.         UIDropDownMenu_JustifyText(arenaDropDownMenu, "LEFT")
  321.  
  322.         -- Creates "Enemy Dropdown Menu" for Parent Frame --
  323.         if not EnemyDropDownMenu then
  324.             CreateFrame("Button", "EnemyDropDownMenu", winLossTrackerFrame, "UIDropDownMenuTemplate")
  325.         end
  326.  
  327.         EnemyDropDownMenu:ClearAllPoints()
  328.         EnemyDropDownMenu:SetPoint("TOP", winLossTrackerFrame, "TOP", 125, -62)
  329.         EnemyDropDownMenu:Show()
  330.  
  331.         -- Items For Drop Down Menu --
  332.         enemyItems = {
  333.             "Step 3",
  334.             "Arena Teams",
  335.             "Specific Players",
  336.             }
  337.  
  338.         local function OnClick(self)
  339.             UIDropDownMenu_SetSelectedID(EnemyDropDownMenu, self:GetID())
  340.             if (self:GetID() == 1) then
  341.                 enemyChoice = nil
  342.                 deathKnightCheckBox:Hide()
  343.                 druidCheckBox:Hide()
  344.                 hunterCheckBox:Hide()
  345.                 mageCheckBox:Hide()
  346.                 monkCheckBox:Hide()
  347.                 paladinCheckBox:Hide()
  348.                 priestCheckBox:Hide()
  349.                 rogueCheckBox:Hide()
  350.                 shamanCheckBox:Hide()
  351.                 warlockCheckBox:Hide()
  352.                 warriorCheckBox:Hide()
  353.             elseif (self:GetID() == 2) then
  354.                 enemyChoice = "Arena Teams"
  355.                 deathKnightCheckBox:Show()
  356.                 druidCheckBox:Show()
  357.                 hunterCheckBox:Show()
  358.                 mageCheckBox:Show()
  359.                 monkCheckBox:Show()
  360.                 paladinCheckBox:Show()
  361.                 priestCheckBox:Show()
  362.                 rogueCheckBox:Show()
  363.                 shamanCheckBox:Show()
  364.                 warlockCheckBox:Show()
  365.                 warriorCheckBox:Show()
  366.             elseif (self:GetID() == 3) then
  367.                 enemyChoice = "Specific Players"
  368.                 deathKnightCheckBox:Hide()
  369.                 druidCheckBox:Hide()
  370.                 hunterCheckBox:Hide()
  371.                 mageCheckBox:Hide()
  372.                 monkCheckBox:Hide()
  373.                 paladinCheckBox:Hide()
  374.                 priestCheckBox:Hide()
  375.                 rogueCheckBox:Hide()
  376.                 shamanCheckBox:Hide()
  377.                 warlockCheckBox:Hide()
  378.                 warriorCheckBox:Hide()
  379.             end
  380.         end
  381.  
  382.         local function initialize(self, level)
  383.            local info = UIDropDownMenu_CreateInfo()
  384.            for k,v in pairs(enemyItems) do
  385.               info = UIDropDownMenu_CreateInfo()
  386.               info.text = v
  387.               info.value = v
  388.               info.func = OnClick
  389.               UIDropDownMenu_AddButton(info, level)
  390.            end
  391.         end
  392.  
  393.         UIDropDownMenu_Initialize(EnemyDropDownMenu, initialize)
  394.         UIDropDownMenu_SetWidth(EnemyDropDownMenu, 125);
  395.         UIDropDownMenu_SetButtonWidth(EnemyDropDownMenu, 124)
  396.         UIDropDownMenu_SetSelectedID(EnemyDropDownMenu, 1)
  397.         UIDropDownMenu_JustifyText(EnemyDropDownMenu, "LEFT")
  398.  
  399.         -- Creates "Player Dropdown Menu" for Parent Frame --
  400.         if not PlayerDropDownMenu then
  401.            CreateFrame("Button", "PlayerDropDownMenu", winLossTrackerFrame, "UIDropDownMenuTemplate")
  402.         end
  403.  
  404.         PlayerDropDownMenu:ClearAllPoints()
  405.         PlayerDropDownMenu:SetPoint("TOP", winLossTrackerFrame, "TOP", -100, -62)
  406.         PlayerDropDownMenu:Show()
  407.  
  408.         local function OnClick(self)
  409.             UIDropDownMenu_SetSelectedID(PlayerDropDownMenu, self:GetID())
  410.             playerChoice = self:GetID() - 1
  411.         end
  412.  
  413.         local function initialize(self, level)
  414.            local info = UIDropDownMenu_CreateInfo()
  415.            for k,v in pairs(playerItems) do
  416.               info = UIDropDownMenu_CreateInfo()
  417.               info.text = v
  418.               info.value = v
  419.               info.func = OnClick
  420.               UIDropDownMenu_AddButton(info, level)
  421.            end
  422.         end
  423.  
  424.         UIDropDownMenu_Initialize(PlayerDropDownMenu, initialize)
  425.         UIDropDownMenu_SetWidth(PlayerDropDownMenu, 125);
  426.         UIDropDownMenu_SetButtonWidth(PlayerDropDownMenu, 124)
  427.         UIDropDownMenu_SetSelectedID(PlayerDropDownMenu, 1)
  428.         UIDropDownMenu_JustifyText(PlayerDropDownMenu, "LEFT")
  429.  
  430.         -- Create Text Above Enemy Drop Down Menu --
  431.         local enemyDDMText = winLossTrackerFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
  432.         enemyDDMText:SetPoint("TOP", 105, -48)
  433.         enemyDDMText:SetText("Choose Enemy: ")
  434.  
  435.         -- Create Text Above Player Drop Down Menu --
  436.         local playerDDMText = winLossTrackerFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
  437.         playerDDMText:SetPoint("TOP", -120, -48)
  438.         playerDDMText:SetText("Choose Profile: ")
  439.  
  440.         -- Create Text Above Arena Drop Down Menu --
  441.         local arenaDDMText = winLossTrackerFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
  442.         arenaDDMText:SetPoint("TOP", -324, -48)
  443.         arenaDDMText:SetText("Choose Arena Bracket: ")
  444.  
  445.         -- Create Checkbox for Death Knights --
  446.         deathKnightCheckBox = CreateFrame("CheckButton", "DeathKnightCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  447.         deathKnightCheckBox:SetPoint("TOPLEFT", 30, -150)
  448.         DeathKnightCheckBoxText:SetText(getClassName(1))
  449.         deathKnightCheckBox:SetScript("OnClick",
  450.             function()
  451.                 if deathKnightCheckBox:GetChecked() == 1 then
  452.                     deathKnightBoolean = true
  453.                 else
  454.                     deathKnightBoolean = false
  455.                 end
  456.             end)
  457.  
  458.         -- Create Checkbox for Druid --
  459.         druidCheckBox = CreateFrame("CheckButton", "DruidCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  460.         druidCheckBox:SetPoint("TOPLEFT", 30, -200)
  461.         DruidCheckBoxText:SetText(getClassName(2))
  462.         druidCheckBox:SetScript("OnClick",
  463.             function()
  464.                 if druidCheckBox:GetChecked() == 1 then
  465.                     druidBoolean = true
  466.                 else
  467.                     druidBoolean = false
  468.                 end
  469.             end)
  470.  
  471.         -- Create Checkbox for Hunter --
  472.         hunterCheckBox = CreateFrame("CheckButton", "HunterCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  473.         hunterCheckBox:SetPoint("TOPLEFT", 30, -250)
  474.         HunterCheckBoxText:SetText(getClassName(3))
  475.         hunterCheckBox:SetScript("OnClick",
  476.             function()
  477.                 if hunterCheckBox:GetChecked() == 1 then
  478.                     hunterBoolean = true
  479.                 else
  480.                     hunterBoolean = false
  481.                 end
  482.             end)
  483.  
  484.         -- Create Checkbox for Mage --
  485.         mageCheckBox = CreateFrame("CheckButton", "MageCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  486.         mageCheckBox:SetPoint("TOPLEFT", 30, -300)
  487.         MageCheckBoxText:SetText(getClassName(4))
  488.         mageCheckBox:SetScript("OnClick",
  489.             function()
  490.                 if mageCheckBox:GetChecked() == 1 then
  491.                     mageBoolean = true
  492.                 else
  493.                     mageBoolean = false
  494.                 end
  495.             end)
  496.  
  497.         -- Create Checkbox for Monk --
  498.         monkCheckBox = CreateFrame("CheckButton", "MonkCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  499.         monkCheckBox:SetPoint("TOPLEFT", 30, -350)
  500.         MonkCheckBoxText:SetText(getClassName(5))
  501.         monkCheckBox:SetScript("OnClick",
  502.             function()
  503.                 if monkCheckBox:GetChecked() == 1 then
  504.                     monkBoolean = true
  505.                 else
  506.                     monkBoolean = false
  507.                 end
  508.             end)
  509.  
  510.         -- Create Checkbox for Paladin --
  511.         paladinCheckBox = CreateFrame("CheckButton", "PaladinCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  512.         paladinCheckBox:SetPoint("TOPLEFT", 30, -400)
  513.         PaladinCheckBoxText:SetText(getClassName(6))
  514.         paladinCheckBox:SetScript("OnClick",
  515.             function()
  516.                 if paladinCheckBox:GetChecked() == 1 then
  517.                     paladinBoolean = true
  518.                 else
  519.                     paladinBoolean = false
  520.                 end
  521.             end)
  522.  
  523.         -- Create Checkbox for Priest --
  524.         priestCheckBox = CreateFrame("CheckButton", "PriestCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  525.         priestCheckBox:SetPoint("TOPLEFT", 30, -450)
  526.         PriestCheckBoxText:SetText(getClassName(7))
  527.         priestCheckBox:SetScript("OnClick",
  528.             function()
  529.                 if priestCheckBox:GetChecked() == 1 then
  530.                     priestBoolean = true
  531.                 else
  532.                     priestBoolean = false
  533.                 end
  534.             end)
  535.  
  536.         -- Create Checkbox for Rogue --
  537.         rogueCheckBox = CreateFrame("CheckButton", "RogueCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  538.         rogueCheckBox:SetPoint("TOPLEFT", 30, -500)
  539.         RogueCheckBoxText:SetText(getClassName(8))
  540.         rogueCheckBox:SetScript("OnClick",
  541.             function()
  542.                 if rogueCheckBox:GetChecked() == 1 then
  543.                     rogueBoolean = true
  544.                 else
  545.                     rogueBoolean = false
  546.                 end
  547.             end)
  548.  
  549.         -- Create Checkbox for Shaman --
  550.         shamanCheckBox = CreateFrame("CheckButton", "ShamanCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  551.         shamanCheckBox:SetPoint("TOPLEFT", 30, -550)
  552.         ShamanCheckBoxText:SetText(getClassName(9))
  553.         shamanCheckBox:SetScript("OnClick",
  554.             function()
  555.                 if shamanCheckBox:GetChecked() == 1 then
  556.                     shamanBoolean = true
  557.                 else
  558.                     shamanBoolean = false
  559.                 end
  560.             end)
  561.  
  562.         -- Create Checkbox for Warlock --
  563.         warlockCheckBox = CreateFrame("CheckButton", "WarlockCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  564.         warlockCheckBox:SetPoint("TOPLEFT", 30, -600)
  565.         WarlockCheckBoxText:SetText(getClassName(10))
  566.         warlockCheckBox:SetScript("OnClick",
  567.             function()
  568.                 if warlockCheckBox:GetChecked() == 1 then
  569.                     warlockBoolean = true
  570.                 else
  571.                     warlockBoolean = false
  572.                 end
  573.             end)
  574.  
  575.         -- Create Checkbox for Warrior --
  576.         warriorCheckBox = CreateFrame("CheckButton", "WarriorCheckBox", winLossTrackerFrame, "ChatConfigCheckButtonTemplate");
  577.         warriorCheckBox:SetPoint("TOPLEFT", 30, -650)
  578.         WarriorCheckBoxText:SetText(getClassName(11))
  579.         warriorCheckBox:SetScript("OnClick",
  580.             function()
  581.                 if warriorCheckBox:GetChecked() == 1 then
  582.                     warriorBoolean = true
  583.                 else
  584.                     warriorBoolean = false
  585.                 end
  586.             end)
  587.  
  588.         deathKnightCheckBox:Hide()
  589.         druidCheckBox:Hide()
  590.         hunterCheckBox:Hide()
  591.         mageCheckBox:Hide()
  592.         monkCheckBox:Hide()
  593.         paladinCheckBox:Hide()
  594.         priestCheckBox:Hide()
  595.         rogueCheckBox:Hide()
  596.         shamanCheckBox:Hide()
  597.         warlockCheckBox:Hide()
  598.         warriorCheckBox:Hide()
  599.     elseif (winLossTrackerFrame:IsShown()) then
  600.         winLossTrackerFrame:Hide()
  601.     elseif (not winLossTrackerFrame:IsShown()) then
  602.         winLossTrackerFrame:Show()
  603.     end
  604. end
  605.  
  606. ---------- Everything Below This Point Deals With Data Structure -----------
  607. ----------------------------------------------------------------------------
  608. ----------------------------------------------------------------------------
  609. -- I create a "Player" class which will be created any time the user logs --
  610. -- in to a new character. If there is already a profile for that          --
  611. -- character then a new class will not be created. For every "Player"     --
  612. -- class created there should be information regarding what arena teams   --
  613. -- that player has gone up against.                                       --
  614.  
  615. -- Player Class To Create New Profiles --
  616. Player = {}
  617. Player.__index = Player
  618. function Player:new(playerName, playerRealm)
  619.     local object = {
  620.         playerName = playerName,
  621.         playerRealm = playerRealm,
  622.         twoEnemyArenaTeams = {},
  623.         threeEnemyArenaTeams = {},
  624.         fiveEnemyArenaTeams = {},
  625.         specificPlayer = {},
  626.     }  
  627.     setmetatable(object, Player)
  628.     return object
  629. end
  630.  
  631. -- Functions That Add Enemy Arena Teams --
  632. -- 2v2 Arenas --
  633. function Player:add2v2ArenaTeam()
  634.     local newArenaTeam = twovtwoEnemyArenaTeam:new(storeEnemy1, storeEnemy2, storeClass1, storeClass2)
  635.     table.insert(self.twoEnemyArenaTeams, newArenaTeam)
  636.     -- Adds win or loss to the most recent 2v2 team added to database --
  637.     for k,v in pairs (self.twoEnemyArenaTeams) do
  638.         check1 = tContains2v2(v, storeEnemy1)
  639.         check2 = tContains2v2(v, storeEnemy2)
  640.         -- Add Win Or Loss If Arena Team Exists --
  641.         if (check1 and check2) then
  642.         ChatFrame1:AddMessage("Adding 2v2 Team")
  643.             -- Add Win Or Loss to 2v2 team
  644.             if (teamName == playersTeam2v2) then
  645.                 ChatFrame1:AddMessage("Adding Win")
  646.                 v.win = v.win + 1
  647.             elseif (teamName ~= playersTeam2v2) then
  648.                 ChatFrame1:AddMessage("Adding Loss")
  649.                 v.loss = v.loss + 1
  650.             end
  651.         end
  652.     end
  653.     catchCount = catchCount + 1
  654.     clearVariables()
  655. end
  656. -- 3v3 Arenas --
  657. function Player:add3v3ArenaTeam()
  658.     local newArenaTeam = threevthreeEnemyArenaTeam:new(storeEnemy1, storeEnemy2, storeEnemy3, storeClass1, storeClass2, storeClass3)
  659.     table.insert(self.threeEnemyArenaTeams, newArenaTeam)
  660.     for k,v in pairs (self.threeEnemyArenaTeams) do
  661.         check1 = tContains3v3(v, storeEnemy1)
  662.         check2 = tContains3v3(v, storeEnemy2)
  663.         check3 = tContains3v3(v, storeEnemy3)
  664.         -- Add Win Or Loss If Arena Team Exists --
  665.         if (check1 and check2 and check3) then
  666.         ChatFrame1:AddMessage("Adding 3v3 Team")
  667.             -- Add Win Or Loss to 3v3 team
  668.             if (teamName == playersTeam3v3) then
  669.                 ChatFrame1:AddMessage("Adding Win")
  670.                 v.win = v.win + 1
  671.             elseif (teamName ~= playersTeam3v3) then
  672.                 ChatFrame1:AddMessage("Adding Loss")
  673.                 v.loss = v.loss + 1
  674.             end
  675.         end
  676.     end
  677.     catchCount = catchCount + 1
  678.     clearVariables()
  679. end
  680. -- 5v5 Arenas --
  681. function Player:add5v5ArenaTeam()
  682.     local newArenaTeam = fivevfiveEnemyArenaTeam:new(storeEnemy1, storeEnemy2, storeEnemy3, storeEnemy4, storeEnemy5, storeClass1, storeClass2, storeClass3, storeClass4, storeClass5)
  683.     table.insert(self.fiveEnemyArenaTeams, newArenaTeam)
  684.     for k,v in pairs (self.fiveEnemyArenaTeams) do
  685.         check1 = tContains5v5(v, storeEnemy1)
  686.         check2 = tContains5v5(v, storeEnemy2)
  687.         check3 = tContains5v5(v, storeEnemy3)
  688.         check4 = tContains5v5(v, storeEnemy4)
  689.         check5 = tContains5v5(v, storeEnemy5)
  690.         -- Add Win Or Loss If Arena Team Exists --
  691.         if (check1 and check2 and check3 and check4 and check5) then
  692.         ChatFrame1:AddMessage("Adding 5v5 Team")
  693.             -- Add Win Or Loss to 5v5 team
  694.             if (teamName == playersTeam5v5) then
  695.                 ChatFrame1:AddMessage("Adding Win")
  696.                 v.win = v.win + 1
  697.             elseif (teamName ~= playersTeam5v5) then
  698.                 ChatFrame1:AddMessage("Adding Loss")
  699.                 v.loss = v.loss + 1
  700.             end
  701.         end
  702.     end
  703.     catchCount = catchCount + 1
  704.     clearVariables()
  705. end
  706.  
  707. -- Function That Adds Specific Players To Profile --
  708. function Player:addSpecificPlayer()
  709.     if (specific1 == 1) then
  710.         local newSpecificPlayer = SpecificPlayer:new(storeEnemy1, storeClass1)
  711.         table.insert(self.specificPlayer, newSpecificPlayer)
  712.     end
  713.     if (specific2 == 1) then
  714.         local newSpecificPlayer = SpecificPlayer:new(storeEnemy2, storeClass2)
  715.         table.insert(self.specificPlayer, newSpecificPlayer)
  716.     end
  717.     if (specific3 == 1) then
  718.         local newSpecificPlayer = SpecificPlayer:new(storeEnemy3, storeClass3)
  719.         table.insert(self.specificPlayer, newSpecificPlayer)
  720.     end
  721.     if (specific4 == 1) then
  722.         local newSpecificPlayer = SpecificPlayer:new(storeEnemy4, storeClass4)
  723.         table.insert(self.specificPlayer, newSpecificPlayer)
  724.     end
  725.     if (specific5 == 1) then
  726.         local newSpecificPlayer = SpecificPlayer:new(storeEnemy5, storeClass5)
  727.         table.insert(self.specificPlayer, newSpecificPlayer)
  728.     end
  729.     specific1 = 0
  730.     specific2 = 0
  731.     specific3 = 0
  732.     specific4 = 0
  733.     specific5 = 0
  734. end
  735.  
  736. -- Add 2v2 Arena Team Class --
  737. twovtwoEnemyArenaTeam = {}
  738. twovtwoEnemyArenaTeam.__index = twovtwoEnemyArenaTeam
  739. function twovtwoEnemyArenaTeam:new(enemy1, enemy2, enemyClass1, enemyClass2)
  740.     local object = {
  741.         enemy1 = enemy1,
  742.         enemy2 = enemy2,
  743.         enemyClass1 = enemyClass1,
  744.         enemyClass2 = enemyClass2,
  745.         win = 0,
  746.         loss = 0,
  747.         draw = 0,
  748.     }
  749.     setmetatable(object, twovtwoEnemyArenaTeam)
  750.     return object
  751. end
  752.  
  753. -- Add 3v3 Arena Team Class --
  754. threevthreeEnemyArenaTeam = {}
  755. threevthreeEnemyArenaTeam.__index = threevthreeEnemyArenaTeam
  756. function threevthreeEnemyArenaTeam:new(enemy1, enemy2, enemy3, enemyClass1, enemyClass2, enemyClass3)
  757.     local object = {
  758.         enemy1 = enemy1,
  759.         enemy2 = enemy2,
  760.         enemy3 = enemy3,
  761.         enemyClass1 = enemyClass1,
  762.         enemyClass2 = enemyClass2,
  763.         enemyClass3 = enemyClass3,
  764.         win = 0,
  765.         loss = 0,
  766.         draw = 0,
  767.     }
  768.     setmetatable(object, threevthreeEnemyArenaTeam)
  769.     return object
  770. end
  771.  
  772. -- Add 5v5 Arena Team Class --
  773. fivevfiveEnemyArenaTeam = {}
  774. fivevfiveEnemyArenaTeam.__index = fivevfiveEnemyArenaTeam
  775. function fivevfiveEnemyArenaTeam:new(enemy1, enemy2, enemy3, enemy4, enemy5, enemyClass1, enemyClass2, enemyClass3, enemyClass4, enemyClass5)
  776.     local object = {
  777.         enemy1 = enemy1,
  778.         enemy2 = enemy2,
  779.         enemy3 = enemy3,
  780.         enemy4 = enemy4,
  781.         enemy5 = enemy5,
  782.         enemyClass1 = enemyClass1,
  783.         enemyClass2 = enemyClass2,
  784.         enemyClass3 = enemyClass3,
  785.         enemyClass4 = enemyClass4,
  786.         enemyClass5 = enemyClass5,
  787.         win = 0,
  788.         loss = 0,
  789.         draw = 0,
  790.     }
  791.     setmetatable(object, threevthreeEnemyArenaTeam)
  792.     return object
  793. end
  794.  
  795. -- Specific Player Class To Add Specific Players To The Database --
  796. SpecificPlayer = {}
  797. SpecificPlayer.__index = SpecificPlayer
  798. function SpecificPlayer:new(specificEnemy, specificEnemyClass)
  799.     local object = {
  800.         specificEnemy = specificEnemy,
  801.         specificEnemyClass = specificEnemyClass
  802.     }
  803.     setmetatable(object, SpecificPlayer)
  804.     return object
  805. end
  806.  
  807. -- Everything Below This Point Deals With Events And Adding Teams To Data --
  808. -- Structure --
  809. ----------------------------------------------------------------------------
  810. ----------------------------------------------------------------------------
  811.  
  812. -- Create Frame To Check for WoW Events To Add To Data Structure --
  813. local wowEvents = CreateFrame("Frame")
  814.  
  815. -- More WoW Events Being Tracked --
  816. wowEvents:RegisterEvent("UPDATE_BATTLEFIELD_STATUS")
  817. wowEvents:RegisterEvent("ARENA_OPPONENT_UPDATE")
  818. wowEvents:RegisterEvent("PLAYER_ENTERING_WORLD")
  819. wowEvents:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
  820.  
  821. function wowEvents:OnEvent(event, arg1)
  822.     -- Code To Store Enemy Arena Names --
  823.     if ("ARENA_OPPONENT_UPDATE" == event or "COMBAT_LOG_EVENT_UNFILTERED" == event) then
  824.         isUnratedArena, isRatedArena = IsActiveBattlefieldArena()
  825.         if (isUnratedArena or isRatedArena) then
  826.             temporary1 = GetUnitName("arena1", true)
  827.             temporary2 = GetUnitName("arena2", true)
  828.             temporary3 = GetUnitName("arena3", true)
  829.             temporary4 = GetUnitName("arena4", true)
  830.             temporary5 = GetUnitName("arena5", true)
  831.             if (temporary1 ~= "Unknown") then
  832.                 if (temporary1 ~= nil) then
  833.                     if (temporary1boolean ~= true) then
  834.                         storeEnemy1 = GetUnitName("arena1", true)
  835.                         localizedClass1, storeClass1, classIndex1 = UnitClass("arena1");
  836.                         temporary1boolean = true
  837.                     end
  838.                 end
  839.             end
  840.             if (temporary2 ~= "Unknown") then
  841.                 if (temporary2 ~= nil) then
  842.                     if (temporary2boolean ~= true) then
  843.                         storeEnemy2 = GetUnitName("arena2", true)
  844.                         localizedClass2, storeClass2, classIndex2 = UnitClass("arena2");
  845.                         temporary2boolean = true
  846.                     end
  847.                 end
  848.             end
  849.             if (temporary3 ~= "Unknown") then
  850.                 if (temporary3 ~= nil) then
  851.                     if (temporary3boolean ~= true) then
  852.                         storeEnemy3 = GetUnitName("arena3", true)
  853.                         localizedClass3, storeClass3, classIndex3 = UnitClass("arena3");
  854.                         temporary3boolean = true
  855.                     end
  856.                 end
  857.             end
  858.             if (temporary4 ~= "Unknown") then
  859.                 if (temporary4 ~= nil) then
  860.                     if (temporary4boolean ~= true) then
  861.                         storeEnemy4 = GetUnitName("arena4", true)
  862.                         localizedClass4, storeClass4, classIndex4 = UnitClass("arena4");
  863.                         temporary4boolean = true
  864.                     end
  865.                 end
  866.             end
  867.             if (temporary5 ~= "Unknown") then
  868.                 if (temporaryy5 ~= nil) then  
  869.                     if (temporary5boolean ~= true) then
  870.                         storeEnemy5 = GetUnitName("arena5", true)
  871.                         localizedClass5, storeClass5, classIndex5 = UnitClass("arena5");
  872.                         temporary5boolean = true
  873.                     end
  874.                 end
  875.             end
  876.         end
  877.     end
  878.  
  879.     -- Checks Scoreboard To See If You Won --
  880.     if ("UPDATE_BATTLEFIELD_STATUS" == event) then
  881.     isUnratedArena, isRatedArena = IsActiveBattlefieldArena()
  882.         if (isRatedArena or isUnratedArena) then
  883.         playersTeam2v2, teamSize, teamRating, weekPlayed, weekWins, seasonPlayed, seasonWins, playerPlayed, seasonPlayerPlayed, teamRank, playerRating = GetArenaTeam(2);
  884.         playersTeam3v3, teamSize, teamRating, weekPlayed, weekWins, seasonPlayed, seasonWins, playerPlayed, seasonPlayerPlayed, teamRank, playerRating = GetArenaTeam(1);
  885.         playersTeam5v5, teamSize, teamRating, weekPlayed, weekWins, seasonPlayed, seasonWins, playerPlayed, seasonPlayerPlayed, teamRank, playerRating = GetArenaTeam(3);
  886.         battlefieldWinner = GetBattlefieldWinner()
  887.         if battlefieldWinner ~= nil then
  888.             teamName, oldTeamRating, newTeamRating, teamRating = GetBattlefieldTeamInfo(battlefieldWinner);
  889.         end
  890.         arenaTeamExists = 0
  891.         catchCount = 0
  892.             for k,v in pairs (player) do
  893.                 if (v.playerName == playerName) then
  894.                     if ((storeEnemy3 == nil) and (storeEnemy1 ~= nil) and (storeEnemy2 ~= nil)) then
  895.                         -- Checks if specific player is already in database --
  896.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  897.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  898.                         -- Add player to database if needed --
  899.                         if (not checkSpecificPlayer1) then
  900.                             specific1 = specific1 + 1
  901.                         end
  902.                         if (not checkSpecificPlayer2) then
  903.                             specific2 = specific2 + 1
  904.                         end
  905.                         -- Checks If 2v2 Arena Team Already Exists --
  906.                         for k,v in pairs (v.twoEnemyArenaTeams) do
  907.                             check1 = tContains2v2(v, storeEnemy1)
  908.                             check2 = tContains2v2(v, storeEnemy2)
  909.                             -- Add Win Or Loss If Arena Team Exists --
  910.                             if (check1 and check2) then
  911.                             catchCount = catchCount + 1
  912.                             ChatFrame1:AddMessage("2v2 Arena Team Exists")
  913.                                 -- Add Win Or Loss to 2v2 team
  914.                                 if (teamName == playersTeam2v2) then
  915.                                         ChatFrame1:AddMessage("Adding 2v2 Win")
  916.                                         v.win = v.win + 1
  917.                                 elseif (teamName ~= playersTeam2v2) then
  918.                                         ChatFrame1:AddMessage("Adding 2v2 Loss")
  919.                                         v.loss = v.loss + 1
  920.                                 end
  921.                                 arenaTeamExists = arenaTeamExists + 1
  922.                                 clearVariables()
  923.                             end
  924.                         end
  925.                         -- Add Specific Players If They Do Not Exist --
  926.                         if (specific1 == 1 or specific2 == 1) then
  927.                             Player.addSpecificPlayer(v)
  928.                         end
  929.                         -- Add Arena Team If It Does Not Exist --
  930.                         if (arenaTeamExists == 0) then
  931.                             Player.add2v2ArenaTeam(v)
  932.                         end    
  933.                     elseif ((storeEnemy5 and storeEnemy4 == nil) and (storeEnemy1 ~= nil) and (storeEnemy2 ~= nil) and (storeEnemy3 ~= nil)) then
  934.                         -- Checks if specific player is already in database --
  935.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  936.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  937.                         checkSpecificPlayer3 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy3)
  938.                         -- Add player to database if needed --
  939.                         if (not checkSpecificPlayer1) then
  940.                             specific1 = specific1 + 1
  941.                         end
  942.                         if (not checkSpecificPlayer2) then
  943.                             specific2 = specific2 + 1
  944.                         end
  945.                         if (not checkSpecificPlayer3) then
  946.                             specific3 = specific3 + 1
  947.                         end
  948.                         -- Checks If 3v3 Arena Team Already Exists --
  949.                         for k,v in pairs (v.threeEnemyArenaTeams) do
  950.                             check1 = tContains3v3(v, storeEnemy1)
  951.                             check2 = tContains3v3(v, storeEnemy2)
  952.                             check3 = tContains3v3(v, storeEnemy3)
  953.                             -- Add Win Or Loss If Arena Team Exists --
  954.                             if (check1 and check2 and check3) then
  955.                             catchCount = catchCount + 1
  956.                             ChatFrame1:AddMessage("3v3 Arena Team Exists")
  957.                                   -- Add Win Or Loss to 3v3 team
  958.                                 if (teamName == playersTeam3v3) then
  959.                                         ChatFrame1:AddMessage("Adding 3v3 Win")
  960.                                         v.win = v.win + 1
  961.                                 elseif (teamName ~= playersTeam3v3) then
  962.                                         ChatFrame1:AddMessage("Adding 3v3 Loss")
  963.                                         v.loss = v.loss + 1
  964.                                 end
  965.                                 arenaTeamExists = arenaTeamExists + 1
  966.                                 clearVariables()
  967.                             end
  968.                         end
  969.                         -- Add Specific Players If They Do Not Exist --
  970.                         if (specific1 == 1 or specific2 == 1 or specific3 == 1) then
  971.                             Player.addSpecificPlayer(v)
  972.                         end
  973.                         -- Add Arena Team If It Does Not Exist --
  974.                         if (arenaTeamExists == 0) then
  975.                             Player.add3v3ArenaTeam(v)
  976.                         end        
  977.                     elseif (storeEnemy5 ~= nil) then
  978.                         -- Checks if specific player is already in database --
  979.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  980.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  981.                         checkSpecificPlayer3 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy3)
  982.                         checkSpecificPlayer4 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy4)
  983.                         checkSpecificPlayer5 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy5)
  984.                         -- Add player to database if needed --
  985.                         if (not checkSpecificPlayer1) then
  986.                             specific1 = specific1 + 1
  987.                         end
  988.                         if (not checkSpecificPlayer2) then
  989.                             specific2 = specific2 + 1
  990.                         end
  991.                         if (not checkSpecificPlayer3) then
  992.                             specific3 = specific3 + 1
  993.                         end
  994.                         if (not checkSpecificPlayer4) then
  995.                             specific4 = specific4 + 1
  996.                         end
  997.                         if (not checkSpecificPlayer5) then
  998.                             specific5 = specific5 + 1
  999.                         end                            
  1000.                         -- Checks If 5v5 Arena Team Already Exists --
  1001.                         for k,v in pairs (v.fiveEnemyArenaTeams) do
  1002.                             check1 = tContains5v5(v, storeEnemy1)
  1003.                             check2 = tContains5v5(v, storeEnemy2)
  1004.                             check3 = tContains5v5(v, storeEnemy3)
  1005.                             check4 = tContains5v5(v, storeEnemy4)
  1006.                             check5 = tContains5v5(v, storeEnemy5)
  1007.                             -- Add Win Or Loss If Arena Team Exists --
  1008.                             if (check1 and check2 and check3 and check4 and check5) then
  1009.                             catchCount = catchCount + 1
  1010.                             ChatFrame1:AddMessage("5v5 Arena Team Exists")
  1011.                                    -- Add Win Or Loss to 5v5 team
  1012.                                 if (teamName == playersTeam5v5) then
  1013.                                         ChatFrame1:AddMessage("Adding 5v5 Win")
  1014.                                         v.win = v.win + 1
  1015.                                 elseif (teamName ~= playersTeam5v5) then
  1016.                                         ChatFrame1:AddMessage("Adding 5v5 Loss")
  1017.                                         v.loss = v.loss + 1
  1018.                                 end
  1019.                                 arenaTeamExists = arenaTeamExists + 1
  1020.                                 clearVariables()
  1021.                             end
  1022.                         end
  1023.                         -- Add Specific Players If They Do Not Exist --
  1024.                         if (specific1 == 1 or specific2 == 1 or specific3 == 1 or specific4 == 1 or specific5 == 1) then
  1025.                             Player.addSpecificPlayer(v)
  1026.                         end
  1027.                         -- Add Arena Team If It Does Not Exist --
  1028.                         if (arenaTeamExists == 0) then
  1029.                             Player.add5v5ArenaTeam(v)
  1030.                         end        
  1031.                     end
  1032.                 end
  1033.             end
  1034.         end
  1035.     end
  1036.    
  1037.     -- If Player Leaves Arena (Automatic Loss Against The Other Team) --
  1038.     -- If player loses arena make sure you catch and dump the information to the correct area just incase
  1039.     -- After check to see if battlefieldWinner is nil to add loss to player leaving arena
  1040.     if ("PLAYER_ENTERING_WORLD" == event) then
  1041.     temporary1 = "Unknown"
  1042.     temporary2 = "Unknown"
  1043.     temporary3 = "Unknown"
  1044.     temporary4 = "Unknown"
  1045.     temporary5 = "Unknown"
  1046.     arenaTeamExists = 0
  1047.     isUnratedArena, isRatedArena = IsActiveBattlefieldArena()
  1048.         if (catchCount == 0 and isRatedArena == nil and isUnratedArena == nil)  then
  1049.             for k,v in pairs (player) do
  1050.                 if (v.playerName == playerName) then
  1051.                     if ((storeEnemy3 == nil) and (storeEnemy1 ~= nil) and (storeEnemy2 ~= nil)) then
  1052.                         -- Checks if specific player is already in database --
  1053.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  1054.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  1055.                         -- Add player to database if needed --
  1056.                         if (not checkSpecificPlayer1) then
  1057.                             specific1 = specific1 + 1
  1058.                         end
  1059.                         if (not checkSpecificPlayer2) then
  1060.                             specific2 = specific2 + 1
  1061.                         end
  1062.                         -- Checks If 2v2 Arena Team Already Exists --
  1063.                         for k,v in pairs (v.twoEnemyArenaTeams) do
  1064.                             check1 = tContains2v2(v, storeEnemy1)
  1065.                             check2 = tContains2v2(v, storeEnemy2)
  1066.                             -- Add Win Or Loss If Arena Team Exists --
  1067.                             if (check1 and check2) then
  1068.                                 -- Add Win Or Loss to 2v2 team
  1069.                                 if (teamName == playersTeam2v2) then
  1070.                                     ChatFrame1:AddMessage("Adding 2v2 Win")
  1071.                                     v.win = v.win + 1
  1072.                                 elseif (teamName ~= playersTeam2v2) then
  1073.                                     ChatFrame1:AddMessage("Adding 2v2 Loss")
  1074.                                     v.loss = v.loss + 1
  1075.                                 end
  1076.                                 ChatFrame1:AddMessage("2v2 Arena Team Exists")
  1077.                                 arenaTeamExists = arenaTeamExists + 1
  1078.                                 clearVariables()
  1079.                             end
  1080.                         end
  1081.                         -- Add Specific Players If They Do Not Exist --
  1082.                         if (specific1 == 1 or specific2 == 1) then
  1083.                             Player.addSpecificPlayer(v)
  1084.                         end
  1085.                         -- Add Arena Team If It Does Not Exist --
  1086.                         if (arenaTeamExists == 0) then
  1087.                             ChatFrame1:AddMessage("Attempting To Add 2v2 Team")
  1088.                             Player.add2v2ArenaTeam(v)
  1089.                         end    
  1090.                     elseif ((storeEnemy5 and storeEnemy4 == nil) and (storeEnemy1 ~= nil) and (storeEnemy2 ~= nil) and (storeEnemy3 ~= nil)) then
  1091.                         -- Checks if specific player is already in database --
  1092.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  1093.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  1094.                         checkSpecificPlayer3 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy3)
  1095.                         -- Add player to database if needed --
  1096.                         if (not checkSpecificPlayer1) then
  1097.                             specific1 = specific1 + 1
  1098.                         end
  1099.                         if (not checkSpecificPlayer2) then
  1100.                             specific2 = specific2 + 1
  1101.                         end
  1102.                         if (not checkSpecificPlayer3) then
  1103.                             specific3 = specific3 + 1
  1104.                         end                  
  1105.                         -- Checks If 3v3 Arena Team Already Exists --
  1106.                         for k,v in pairs (v.threeEnemyArenaTeams) do
  1107.                             check1 = tContains3v3(v, storeEnemy1)
  1108.                             check2 = tContains3v3(v, storeEnemy2)
  1109.                             check3 = tContains3v3(v, storeEnemy3)
  1110.                             -- Add Win Or Loss If Arena Team Exists --
  1111.                             if (check1 and check2 and check3) then
  1112.                                 -- Add Win Or Loss to 3v3 team
  1113.                                 if (teamName == playersTeam3v3) then
  1114.                                     ChatFrame1:AddMessage("Adding 3v3 Win")
  1115.                                     v.win = v.win + 1
  1116.                                 elseif (teamName ~= playersTeam3v3) then
  1117.                                     ChatFrame1:AddMessage("Adding 3v3 Loss")
  1118.                                     v.loss = v.loss + 1
  1119.                                 end
  1120.                                 ChatFrame1:AddMessage("3v3 Arena Team Exists")
  1121.                                 arenaTeamExists = arenaTeamExists + 1
  1122.                                 clearVariables()
  1123.                             end
  1124.                         end
  1125.                         -- Add Specific Players If They Do Not Exist --
  1126.                         if (specific1 == 1 or specific2 == 1 or specific3 == 1) then
  1127.                             Player.addSpecificPlayer(v)
  1128.                         end
  1129.                         -- Add Arena Team If It Does Not Exist --
  1130.                         if (arenaTeamExists == 0) then
  1131.                             ChatFrame1:AddMessage("Attempting To Add 3v3 Team")
  1132.                             Player.add3v3ArenaTeam(v)
  1133.                         end        
  1134.                     elseif (storeEnemy5 ~= nil) then
  1135.                         -- Checks if specific player is already in database --
  1136.                         checkSpecificPlayer1 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy1)
  1137.                         checkSpecificPlayer2 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy2)
  1138.                         checkSpecificPlayer3 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy3)
  1139.                         checkSpecificPlayer4 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy4)
  1140.                         checkSpecificPlayer5 = tContainsSpecificPlayer(v.specificPlayer, storeEnemy5)
  1141.                         -- Add player to database if needed --
  1142.                         if (not checkSpecificPlayer1) then
  1143.                             specific1 = specific1 + 1
  1144.                         end
  1145.                         if (not checkSpecificPlayer2) then
  1146.                             specific2 = specific2 + 1
  1147.                         end
  1148.                         if (not checkSpecificPlayer3) then
  1149.                             specific3 = specific3 + 1
  1150.                         end
  1151.                         if (not checkSpecificPlayer4) then
  1152.                             specific4 = specific4 + 1
  1153.                         end
  1154.                         if (not checkSpecificPlayer5) then
  1155.                             specific5 = specific5 + 1
  1156.                         end                            
  1157.                         -- Checks If 5v5 Arena Team Already Exists --
  1158.                         for k,v in pairs (v.fiveEnemyArenaTeams) do
  1159.                             check1 = tContains5v5(v, storeEnemy1)
  1160.                             check2 = tContains5v5(v, storeEnemy2)
  1161.                             check3 = tContains5v5(v, storeEnemy3)
  1162.                             check4 = tContains5v5(v, storeEnemy4)
  1163.                             check5 = tContains5v5(v, storeEnemy5)
  1164.                             -- Add Win Or Loss If Arena Team Exists --
  1165.                             if (check1 and check2 and check3 and check4 and check5) then
  1166.                                 -- Add Win Or Loss to 5v5 team
  1167.                                 if (teamName == playersTeam5v5) then
  1168.                                     ChatFrame1:AddMessage("Adding 5v5 Win")
  1169.                                     v.win = v.win + 1
  1170.                                 elseif (teamName ~= playersTeam5v5) then
  1171.                                     ChatFrame1:AddMessage("Adding 5v5 Loss")
  1172.                                     v.loss = v.loss + 1
  1173.                                 end
  1174.                                 ChatFrame1:AddMessage("5v5 Arena Team Exists")
  1175.                                 arenaTeamExists = arenaTeamExists + 1
  1176.                                 clearVariables()
  1177.                             end
  1178.                         end
  1179.                         -- Add Specific Players If They Do Not Exist --
  1180.                         if (specific1 == 1 or specific2 == 1 or specific3 == 1 or specific4 == 1 or specific5 == 1) then
  1181.                             Player.addSpecificPlayer(v)
  1182.                         end
  1183.                         -- Add Arena Team If It Does Not Exist --
  1184.                         if (arenaTeamExists == 0) then
  1185.                             ChatFrame1:AddMessage("Attempting To Add 5v5 Team")
  1186.                             Player.add5v5ArenaTeam(v)
  1187.                        end        
  1188.                    end
  1189.                end
  1190.             end
  1191.         end
  1192.         if catchCount >= 1 then
  1193.             catchCount = 0
  1194.             clearVariables()
  1195.         end
  1196.     end
  1197. end
  1198.  
  1199. -- Set Script For Adding Teams --
  1200. wowEvents:SetScript("OnEvent", wowEvents.OnEvent)
  1201.  
  1202. -- Function to check if 2v2 team already exists --
  1203. function tContains2v2(table, item)
  1204.     if (tostring(table.enemy1) == item or tostring(table.enemy2) == item) then
  1205.         return true
  1206.     end
  1207.     return false
  1208. end
  1209.  
  1210. -- Function to check if 3v3 team already exists --
  1211. function tContains3v3(table, item)
  1212.     if (tostring(table.enemy1) == item or tostring(table.enemy2) == item or tostring(table.enemy3) == item) then
  1213.         return true
  1214.     end
  1215.     return false
  1216. end
  1217.  
  1218. -- Function to check if 5v5 team already exists --
  1219. function tContains5v5(table, item)
  1220.     if (tostring(table.enemy1) == item or tostring(table.enemy2) == item or tostring(table.enemy3) == item or tostring(table.enemy4) == item or tostring(table.enemy5) == item) then
  1221.         return true
  1222.     end
  1223.     return false
  1224. end
  1225.  
  1226. -- Function to check if specific player already exists --
  1227. function tContainsSpecificPlayer(table, item)
  1228.     if (tostring(table.specificEnemy) == item) then
  1229.         return true
  1230.     end
  1231.     return false
  1232. end
  1233.  
  1234. -- Function To Clear Variables --
  1235. function clearVariables()
  1236.     temporary1boolean = false
  1237.     temporary2boolean = false
  1238.     teamName = nil
  1239.     battlefieldWinner = nil
  1240.     storeEnemy1 = nil
  1241.     storeEnemy2 = nil
  1242.     storeEnemy3 = nil
  1243.     storeEnemy4 = nil
  1244.     storeEnemy5 = nil
  1245.     storeClass1 = nil
  1246.     storeClass2 = nil
  1247.     storeClass3 = nil
  1248.     storeClass4 = nil
  1249.     storeClass5 = nil
  1250. end
  1251.  
  1252. -- Sorts 2v2 teams by class then names --
  1253. function sort2v2(object)
  1254.     if object.enemyClass1 > object.enemyClass2 then
  1255.         local c1 = object.enemyClass1
  1256.         local c2 = object.enemyClass2
  1257.         local n1 = object.enemy1
  1258.         local n2 = object.enemy2
  1259.         object.enemyClass1 = c2
  1260.         object.enemyClass2 = c1
  1261.         object.enemy1 = n2
  1262.         object.enemy2 = n1
  1263.     elseif object.enemyClass1 == object.enemyClass2 then
  1264.         if object.enemy1 > object.enemy2 then
  1265.             local c1 = object.enemyClass1
  1266.             local c2 = object.enemyClass2
  1267.             local n1 = object.enemy1
  1268.             local n2 = object.enemy2
  1269.             object.enemyClass1 = c2
  1270.             object.enemyClass2 = c1
  1271.             object.enemy1 = n2
  1272.             object.enemy2 = n1
  1273.         end
  1274.     end
  1275. end
  1276.  
  1277. -- Sorts 3v3 teams by class then names --
  1278. function sort3v3(object)
  1279.     local c1 = nil
  1280.     local c2 = nil
  1281.     local c3 = nil
  1282.     local n1 = nil
  1283.     local n2 = nil
  1284.     local n3 = nil
  1285.     if (object.enemyClass1 < object.enemyClass2) then
  1286.         if (object.enemyClass3 < object.enemyClass1) then
  1287.             c1 = object.enemyClass1
  1288.             c3 = object.enemyClass3
  1289.             n1 = object.enemy1
  1290.             n3 = object.enemy3
  1291.             object.enemyClass1 = c3
  1292.             object.enemyClass3 = c1
  1293.             object.enemy1 = n3
  1294.             object.enemy3 = n1
  1295.         elseif (object.enemyClass3 == object.enemyClass2) then
  1296.             if (object.enemy3 < object.enemy2) then
  1297.             c1 = object.enemyClass1
  1298.             c3 = object.enemyClass3
  1299.             n1 = object.enemy1
  1300.             n3 = object.enemy3
  1301.             object.enemyClass1 = c3
  1302.             object.enemyClass3 = c1
  1303.             object.enemy1 = n3
  1304.             object.enemy3 = n1
  1305.             end
  1306.         end
  1307.     else
  1308.         if (object.enemyClass2 < object.enemyClass3) then
  1309.             c1 = object.enemyClass1
  1310.             c2 = object.enemyClass2
  1311.             n1 = object.enemy1
  1312.             n2 = object.enemy2
  1313.             object.enemyClass1 = c2
  1314.             object.enemyClass2 = c1
  1315.             object.enemy1 = n2
  1316.             object.enemy2 = n1
  1317.         elseif (object.enemyClass2 == object.enemyClass3) then
  1318.             if (object.enemy2 < object.enemy3) then
  1319.                 c1 = object.enemyClass1
  1320.                 c2 = object.enemyClass2
  1321.                 n1 = object.enemy1
  1322.                 n2 = object.enemy2
  1323.                 object.enemyClass1 = c2
  1324.                 object.enemyClass2 = c1
  1325.                 object.enemy1 = n2
  1326.                 object.enemy2 = n1
  1327.             end
  1328.         elseif (object.enemyClass3 == object.enemyClass1) then
  1329.             if (object.enemy3 < object.enemy1) then
  1330.                 c1 = object.enemyClass1
  1331.                 c3 = object.enemyClass3
  1332.                 n1 = object.enemy1
  1333.                 n3 = object.enemy3
  1334.                 object.enemyClass1 = c3
  1335.                 object.enemyClass3 = c1
  1336.                 object.enemy1 = n3
  1337.                 object.enemy3 = n1
  1338.             end
  1339.         else
  1340.             c1 = object.enemyClass1
  1341.             c3 = object.enemyClass3
  1342.             n1 = object.enemy1
  1343.             n3 = object.enemy3
  1344.             object.enemyClass1 = c3
  1345.             object.enemyClass3 = c1
  1346.             object.enemy1 = n3
  1347.             object.enemy3 = n1
  1348.         end
  1349.     end
  1350.     if (object.enemyClass3 < object.enemyClass2) then
  1351.         c2 = object.enemyClass2
  1352.         c3 = object.enemyClass3
  1353.         n2 = object.enemyClass2
  1354.         n3 = object.enemyClass3
  1355.         object.enemyClass2 = c3
  1356.         object.enemyClass3 = c2
  1357.         object.enemy2 = n3
  1358.         object.enemy3 = n2
  1359.     elseif (object.enemyClass3 == object.enemyClass2) then
  1360.         if (object.enemy3 < object.enemy2) then
  1361.             c2 = object.enemyClass2
  1362.             c3 = object.enemyClass3
  1363.             n2 = object.enemyClass2
  1364.             n3 = object.enemyClass3
  1365.             object.enemyClass2 = c3
  1366.             object.enemyClass3 = c2
  1367.             object.enemy2 = n3
  1368.             object.enemy3 = n2
  1369.         end
  1370.     end
  1371. end
  1372.  
  1373. -- Sorts 5v5  teams by class then names --
  1374. function sort5v5(object)
  1375.     local c1 = nil
  1376.     local c2 = nil
  1377.     local c3 = nil
  1378.     local c4 = nil
  1379.     local c5 = nil
  1380.     local n1 = nil
  1381.     local n2 = nil
  1382.     local n3 = nil
  1383.     local n4 = nil
  1384.     local n5 = nil
  1385.     if (object.enemyClass1 > object.enemyClass2) then
  1386.         c1 = object.enemyClass1
  1387.         c2 = object.enemyClass2
  1388.         n1 = object.enemy1
  1389.         n2 = object.enemy2
  1390.         object.enemyClass1 = c2
  1391.         object.enemyClass2 = c1
  1392.         object.enemy1 = n2
  1393.         object.enemy2 = n1
  1394.         return true
  1395.     elseif (object.enemyClass1 == object.enemyClass2) then
  1396.         if (object.enemy1 > object.enemy2) then
  1397.             c1 = object.enemyClass1
  1398.             c2 = object.enemyClass2
  1399.             n1 = object.enemy1
  1400.             n2 = object.enemy2
  1401.             object.enemyClass1 = c2
  1402.             object.enemyClass2 = c1
  1403.             object.enemy1 = n2
  1404.             object.enemy2 = n1
  1405.             return true
  1406.         end
  1407.     elseif (object.enemyClass2 > object.enemyClass3) then
  1408.         c2 = object.enemyClass2
  1409.         c3 = object.enemyClass3
  1410.         n2 = object.enemy2
  1411.         n3 = object.enemy3
  1412.         object.enemyClass2 = c3
  1413.         object.enemyClass3 = c2
  1414.         object.enemy2 = n3
  1415.         object.enemy3 = n2
  1416.         return true
  1417.     elseif (object.enemyClass2 == object.enemyClass3) then
  1418.         if (object.enemy2 > object.enemy3) then
  1419.             c2 = object.enemyClass2
  1420.             c3 = object.enemyClass3
  1421.             n2 = object.enemy2
  1422.             n3 = object.enemy3
  1423.             object.enemyClass2 = c3
  1424.             object.enemyClass3 = c2
  1425.             object.enemy2 = n3
  1426.             object.enemy3 = n2
  1427.             return true
  1428.         end
  1429.     elseif (object.enemyClass3 > object.enemyClass4) then
  1430.         c3 = object.enemyClass3
  1431.         c4 = object.enemyClass4
  1432.         n3 = object.enemy3
  1433.         n4 = object.enemy4
  1434.         object.enemyClass3 = c4
  1435.         object.enemyClass4 = c3
  1436.         object.enemy3 = n4
  1437.         object.enemy4 = n3
  1438.         return true
  1439.     elseif (object.enemyClass3 == object.enemyClass4) then
  1440.         if (object.enemy3 > object.enemy4) then
  1441.             c3 = object.enemyClass3
  1442.             c4 = object.enemyClass4
  1443.             n3 = object.enemy3
  1444.             n4 = object.enemy4
  1445.             object.enemyClass3 = c4
  1446.             object.enemyClass4 = c3
  1447.             object.enemy3 = n4
  1448.             object.enemy4 = n3
  1449.             return true
  1450.         end
  1451.     elseif (object.enemyClass4 > object.enemyClass5) then
  1452.         c4 = object.enemyClass4
  1453.         c5 = object.enemyClass5
  1454.         n4 = object.enemy4
  1455.         n5 = object.enemy5
  1456.         object.enemyClass4 = c5
  1457.         object.enemyClass5 = c4
  1458.         object.enemy4 = n5
  1459.         object.enemy5 = n4
  1460.         return true
  1461.     elseif (object.enemyClass4 == object.enemyClass5) then
  1462.         if (object.enemy4 > object.enemy5) then
  1463.             c4 = object.enemyClass4
  1464.             c5 = object.enemyClass5
  1465.             n4 = object.enemy4
  1466.             n5 = object.enemy5
  1467.             object.enemyClass4 = c5
  1468.             object.enemyClass5 = c4
  1469.             object.enemy4 = n5
  1470.             object.enemy5 = n4
  1471.             return true
  1472.         end
  1473.     end
  1474.     return false
  1475. end
  1476.  
  1477. -- Function To Display Results Onto Scroll Frame --
  1478. function fetchResults()
  1479.     pCount = 0
  1480.     if (bracketChoice == "2v2") then
  1481.         if (enemyChoice == "Arena Teams") then
  1482.             get2v2ArenaTeams()
  1483.         elseif (enemyChoice == "Specific Players") then
  1484.             get2v2SpecificPlayers()
  1485.         end
  1486.     elseif (bracketChoice == "3v3") then
  1487.         if (enemyChoice == "Arena Teams") then
  1488.             get3v3ArenaTeams()
  1489.         elseif (enemyChoice == "Specific Players") then
  1490.             get3v3SpecificPlayers()
  1491.         end
  1492.     elseif (bracketChoice == "5v5") then
  1493.         if (enemyChoice == "Arena Teams") then
  1494.             get5v5ArenaTeams()
  1495.         elseif (enemyChoice == "Specific Players") then
  1496.             get5v5SpecificPlayers()
  1497.         end
  1498.     end
  1499. end
  1500.  
  1501. -- Grabs 2v2 Arena Teams To Display On Frame --
  1502. function get2v2ArenaTeams()
  1503.     setSize = 1
  1504.     for k,v in pairs (player) do
  1505.         if (k == playerChoice) then
  1506.             scrollFrameContent:AddMessage(v.playerName .. " - " .. v.playerRealm .. " vs 2v2 Arena Teams \n\n")
  1507.             for k,v in pairs (v.twoEnemyArenaTeams) do
  1508.                 discardTeam = false
  1509.                 toCheckFor = ifClassCheckIsTrue()
  1510.                 if (toCheckFor ~= nil) then
  1511.                     for i, name in ipairs(toCheckFor) do
  1512.                         if v.enemyClass1 == name or v.enemyClass2 == name then
  1513.                         else
  1514.                            discardTeam = true
  1515.                         end
  1516.                     end
  1517.                 end
  1518.                 if (discardTeam ~= true) then
  1519.                     pCount = pCount + 1
  1520.                     scrollFrameContent:AddMessage("|r" .. pCount .. ") Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "\n\n")
  1521.                 end
  1522.             end
  1523.         end
  1524.     end
  1525. end
  1526.  
  1527. -- Grabs 3v3 Arena Teams To Display On Screen --
  1528. function get3v3ArenaTeams()
  1529.     setSize = 1
  1530.     for k,v in pairs (player) do
  1531.         if (k == playerChoice) then
  1532.             scrollFrameContent:AddMessage(v.playerName .. " - " .. v.playerRealm .. " vs 3v3 Arena Teams \n\n")
  1533.             for k,v in pairs (v.threeEnemyArenaTeams) do
  1534.                 discardTeam = false
  1535.                 toCheckFor = ifClassCheckIsTrue()
  1536.                 if (toCheckFor ~= nil) then
  1537.                     for i, name in ipairs(toCheckFor) do
  1538.                         if v.enemyClass1 == name or v.enemyClass2 == name or v.enemyClass3 == name then
  1539.                         else
  1540.                            discardTeam = true
  1541.                         end
  1542.                     end
  1543.                 end
  1544.                 if (discardTeam ~= true) then
  1545.                     pCount = pCount + 1
  1546.                     scrollFrameContent:AddMessage("|r" .. pCount .. ") Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. "     " .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "|r, " .. getClassColor(v.enemyClass3) .. v.enemy3 .. "\n\n")
  1547.                 end
  1548.             end
  1549.         end
  1550.     end
  1551. end
  1552.  
  1553. -- Grabs 5v5 Arena Teams To Display On Screen --
  1554. function get5v5ArenaTeams()
  1555.     setSize = 1
  1556.     for k,v in pairs (player) do
  1557.         if (k == playerChoice) then
  1558.            scrollFrameContent:AddMessage(v.playerName .. " - " .. v.playerRealm .. " vs 5v5 Arena Teams \n\n")
  1559.             for k,v in pairs (v.fiveEnemyArenaTeams) do
  1560.                 discardTeam = false
  1561.                 toCheckFor = ifClassCheckIsTrue()
  1562.                 if (toCheckFor ~= nil) then
  1563.                     for i, name in ipairs(toCheckFor) do
  1564.                         if v.enemyClass1 == name or v.enemyClass2 == name or v.enemyClass3 == name or v.enemyClass4 == name or v.enemyClass5 == name then
  1565.                         else
  1566.                            discardTeam = true
  1567.                         end
  1568.                     end
  1569.                 end
  1570.                 if (discardTeam ~= true) then
  1571.                     pCount = pCount + 1
  1572.                     scrollFrameContent:AddMessage("|r" .. pCount .. ") Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. "     " .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "|r, " .. getClassColor(v.enemyClass3) .. v.enemy3 .. "\n     " .. getClassColor(v.enemyClass4) .. v.enemy4 .. "|r, " .. getClassColor(v.enemyClass5) .. v.enemy5 .. "\n\n")
  1573.                 end
  1574.             end
  1575.         end
  1576.     end
  1577. end
  1578.  
  1579. -- Grabs 2v2 Specific Players To Display On Screen --
  1580. function get2v2SpecificPlayers()
  1581.     for k,v in pairs (player) do
  1582.         if (k == playerChoice) then
  1583.             scrollFrameContent:AddMessage("\n     " .. v.playerName .. " - " .. v.playerRealm .. " vs Specific \n\n")
  1584.             for k,v in pairs (v.specificPlayer) do
  1585.                 checkContain = false
  1586.                 specificPlayerExists = checkSpecific2v2Exists(v.specificEnemy)
  1587.                 if (specificPlayerExists == true) then
  1588.                     pCount = pCount + 1
  1589.                     scrollFrameContent:AddMessage("|r" .. pCount .. ") " .. getClassColor(v.specificEnemyClass) .. "" .. v.specificEnemy .. " \n\n")
  1590.                     grab2v2SpecificPlayersTeams(v)
  1591.                 end
  1592.             end
  1593.         end
  1594.     end
  1595. end
  1596.  
  1597. -- Works With Above Function --
  1598. function checkSpecific2v2Exists(enemy)
  1599.     for k,v in pairs (player) do
  1600.         if (k == playerChoice) then
  1601.             for k,v in pairs (v.twoEnemyArenaTeams) do
  1602.                 checkContain = tContains2v2(v, enemy)
  1603.                 if (checkContain == true) then
  1604.                     return true
  1605.                 end
  1606.             end
  1607.         end
  1608.      end
  1609.      return false
  1610. end
  1611.  
  1612. -- Works With Above Two Functions --
  1613. function grab2v2SpecificPlayersTeams(object)
  1614.     for k,v in pairs (player) do
  1615.         if (k == playerChoice) then
  1616.             for k,v in pairs (v.twoEnemyArenaTeams) do
  1617.                 if (object.specificEnemy == v.enemy1 or object.specificEnemy == v.enemy2) then
  1618.                     scrollFrameContent:AddMessage("|r          Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. "          " .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "\n\n")
  1619.                 end
  1620.             end
  1621.         end
  1622.     end
  1623. end
  1624.  
  1625. -- Grabs 3v3 Specific Players To Display On Screen --
  1626. function get3v3SpecificPlayers()
  1627.     for k,v in pairs (player) do
  1628.         if (k == playerChoice) then
  1629.             scrollFrameContent:AddMessage("\n     " .. v.playerName .. " - " .. v.playerRealm .. " vs Specific \n\n")
  1630.             for k,v in pairs (v.specificPlayer) do
  1631.                 checkContain = false
  1632.                 specificPlayerExists = checkSpecific3v3Exists(v.specificEnemy)
  1633.                 if (specificPlayerExists == true) then
  1634.                     scrollFrameContent:AddMessage("     " .. getClassColor(v.specificEnemyClass) .. v.specificEnemy .. " \n\n")
  1635.                     grab3v3SpecificPlayersTeams(v)
  1636.                 end
  1637.             end
  1638.         end
  1639.     end
  1640. end
  1641.  
  1642. -- Works With Above Two Functions --
  1643. function checkSpecific3v3Exists(enemy)
  1644.     for k,v in pairs (player) do
  1645.         if (k == playerChoice) then
  1646.             for k,v in pairs (v.threeEnemyArenaTeams) do
  1647.                 checkContain = tContains3v3(v, enemy)
  1648.                 if (checkContain == true) then
  1649.                     return true
  1650.                 end
  1651.             end
  1652.         end
  1653.      end
  1654.      return false
  1655. end
  1656.  
  1657. -- Works With Above Two Functions --
  1658. function grab3v3SpecificPlayersTeams(object)
  1659.     for k,v in pairs (player) do
  1660.         if (k == playerChoice) then
  1661.             for k,v in pairs (v.threeEnemyArenaTeams) do
  1662.                 if (object.specificEnemy == v.enemy1 or object.specificEnemy == v.enemy2 or object.specificEnemy == v.enemy3) then
  1663.                     scrollFrameContent:AddMessage("|r          Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. "          " .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "|r, " .. getClassColor(v.enemyClass3) .. v.enemy3 .. "\n\n")
  1664.                 end
  1665.             end
  1666.         end
  1667.     end
  1668. end
  1669.  
  1670. -- Grabs 5v5 Specific Players To Display On Screen --
  1671. function get5v5SpecificPlayers()
  1672.     for k,v in pairs (player) do
  1673.         if (k == playerChoice) then
  1674.             scrollFrameContent:AddMessage("\n     " .. v.playerName .. " - " .. v.playerRealm .. " vs Specific \n\n")
  1675.             for k,v in pairs (v.specificPlayer) do
  1676.                 checkContain = false
  1677.                 specificPlayerExists = checkSpecific5v5Exists(v.specificEnemy)
  1678.                 if (specificPlayerExists == true) then
  1679.                     scrollFrameContent:AddMessage("     " .. getClassColor(v.specificEnemyClass) .. v.specificEnemy .. " \n\n")
  1680.                     grab5v5SpecificPlayersTeams(v)
  1681.                 end
  1682.             end
  1683.         end
  1684.     end
  1685. end
  1686.  
  1687. -- Works With Above Two Functions --
  1688. function checkSpecific5v5Exists(enemy)
  1689.     for k,v in pairs (player) do
  1690.         if (k == playerChoice) then
  1691.             for k,v in pairs (v.fiveEnemyArenaTeams) do
  1692.                 checkContain = tContains5v5(v, enemy)
  1693.                 if (checkContain == true) then
  1694.                     return true
  1695.                 end
  1696.             end
  1697.         end
  1698.      end
  1699.      return false
  1700. end
  1701.  
  1702. -- Works With Above Two Functions --
  1703. function grab5v5SpecificPlayersTeams(object)
  1704.     for k,v in pairs (player) do
  1705.         if (k == playerChoice) then
  1706.             for k,v in pairs (v.fiveEnemyArenaTeams) do
  1707.                 if (object.specificEnemy == v.enemy1 or object.specificEnemy == v.enemy2 or object.specificEnemy == v.enemy3 or object.specificEnemy == v.enemy4 or object.specificEnemy == v.enemy5) then
  1708.                     scrollFrameContent:AddMessage("|r          Win - Loss: " .. v.win .. " - " .. v.loss .. " (" .. round(((v.win / (v.win + v.loss)) * 100)) .. "%) \n" .. "          " .. getClassColor(v.enemyClass1) .. v.enemy1 .. "|r, " .. getClassColor(v.enemyClass2) .. v.enemy2 .. "|r, " .. getClassColor(v.enemyClass3) .. v.enemy3 .. "\n          " .. getClassColor(v.enemyClass4) .. getClassColor(v.enemyClass5) ..v.enemy4 .. "|r, " .. v.enemy5 .. "\n\n")
  1709.                 end
  1710.             end
  1711.         end
  1712.     end
  1713. end
  1714.  
  1715. -- If User Included Check Boxes In Search --
  1716. function ifClassCheckIsTrue()
  1717.     checkedClasses = {}
  1718.     if deathKnightBoolean == true then
  1719.         table.insert(checkedClasses, "DEATHKNIGHT")
  1720.     end
  1721.     if druidBoolean == true then
  1722.         table.insert(checkedClasses, "DRUID")
  1723.     end
  1724.     if hunterBoolean == true then
  1725.         table.insert(checkedClasses, "HUNTER")
  1726.     end
  1727.     if mageBoolean == true then
  1728.         table.insert(checkedClasses, "MAGE")
  1729.     end
  1730.     if monkBoolean == true then
  1731.         table.insert(checkedClasses, "MONK")
  1732.     end
  1733.     if paladinBoolean == true then
  1734.         table.insert(checkedClasses, "PALADIN")
  1735.     end
  1736.     if priestBoolean == true then
  1737.         table.insert(checkedClasses, "PRIEST")
  1738.     end
  1739.     if rogueCBoolean == true then
  1740.         table.insert(checkedClasses, "ROGUE")
  1741.     end
  1742.     if shamanBoolean == true then
  1743.         table.insert(checkedClasses, "SHAMAN")
  1744.     end
  1745.     if warlockBoolean == true then
  1746.         table.insert(checkedClasses, "WARLOCK")
  1747.     end
  1748.     if warriorBoolean == true then
  1749.         table.insert(checkedClasses, "WARRIOR")
  1750.     end
  1751.     return checkedClasses
  1752. end
  1753.  
  1754. -- Return Colors For Classes To Input To String --
  1755. function getClassColor(ssClass)
  1756.     if (ssClass == "DEATHKNIGHT") then
  1757.         return  "|cffC41F3B"
  1758.     elseif (ssClass == "DRUID") then
  1759.         return "|cffFF7D0A"
  1760.     elseif (ssClass == "HUNTER") then
  1761.         return "|cffABD473"
  1762.     elseif (ssClass == "MAGE") then
  1763.         return "|cff69CCF0"
  1764.     elseif (ssClass == "MONK") then
  1765.         return "|cff00FF96"
  1766.     elseif (ssClass == "PALADIN") then
  1767.         return "|cffF58CBA"
  1768.     elseif (ssClass == "PRIEST") then
  1769.         return "|cffFFFFFF"
  1770.     elseif (ssClass == "ROGUE") then
  1771.         return "|cffFFF569"
  1772.     elseif (ssClass == "SHAMAN") then
  1773.         return "|cff0070DE"
  1774.     elseif (ssClass == "WARLOCK") then
  1775.         return "|cff9482C9"
  1776.     elseif (ssClass == "WARRIOR") then
  1777.         return "|cffC79C6E"
  1778.     end
  1779. end
  1780.  
  1781. -- Returns  Class Name With Colors For CheckBoxes --
  1782. function getClassName(number)
  1783.     if (number == 1) then
  1784.         return  "|cffC41F3B Death Knight"
  1785.     elseif (number == 2) then
  1786.         return "|cffFF7D0A Druid"
  1787.     elseif (number == 3) then
  1788.         return "|cffABD473 Hunter"
  1789.     elseif (number == 4) then
  1790.         return "|cff69CCF0 Mage"
  1791.     elseif (number == 5) then
  1792.         return "|cff00FF96 Monk"
  1793.     elseif (number == 6) then
  1794.         return "|cffF58CBA Paladin"
  1795.     elseif (number == 7) then
  1796.         return "|cffFFFFFF Priest"
  1797.     elseif (number == 8) then
  1798.         return "|cffFFF569 Rogue"
  1799.     elseif (number == 9) then
  1800.         return "|cff0070DE Shaman"
  1801.     elseif (number == 10) then
  1802.         return "|cff9482C9 Warlock"
  1803.     elseif (number == 11) then
  1804.         return "|cffC79C6E Warrior"
  1805.     end
  1806. end
  1807.  
  1808. -- Round Percentages --
  1809. function round(number)
  1810.     return (("%d"):format(number))
  1811. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement