Guest User

Untitled

a guest
Apr 1st, 2013
2,819
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- only edit stuff below here
  2. ----------
  3.  
  4. local m_pets = "mypets" -- these four things must be the same on each persons addon
  5. local m_queue = "letsqueue"
  6. local m_pop = "poppinfresh"
  7. local m_no = "know"
  8.  
  9. local m_channel = "PARTY" -- channel to broadcast msg
  10. local m_target = nil -- only use this for m_channel == 'WHISPER' or 'CHANNEL' for chat messages
  11. local include_pet_names = true -- include pet names in the broadcast message, only really useful as a visual aid
  12.  
  13. local use_addon_msg = false -- using addon messages instead of chat messages
  14. local m_addon_prefix = "DIXBUTT" -- prefix to register
  15.  
  16. local max_decline_count = 5 -- if we have to decline a battle more than this number, just enter it to get the person out of the queue
  17. -- either manually forfiet or afk (afking prolly dodgy)
  18.  
  19. local a_cmd = "startomg" -- /command to start
  20.  
  21. ----------
  22. -- only edit stuff above here
  23.  
  24. local addon_name = ...
  25.  
  26. local popped = 0
  27. local popped_ok = false
  28.  
  29. local nextupdate = 0
  30.  
  31. local decline_count = 0
  32.  
  33. local enabled = false
  34.  
  35. local leader = false
  36.  
  37. local events_chat = {
  38.     "CHAT_MSG_ADDON",
  39.     "CHAT_MSG_CHANNEL",
  40.     "CHAT_MSG_EMOTE",
  41.     "CHAT_MSG_GUILD",
  42.     "CHAT_MSG_INSTANCE_CHAT",
  43.     "CHAT_MSG_INSTANCE_CHAT_LEADER",
  44.     "CHAT_MSG_OFFICER",
  45.     "CHAT_MSG_PARTY",
  46.     "CHAT_MSG_PARTY_LEADER",
  47.     "CHAT_MSG_RAID",
  48.     "CHAT_MSG_RAID_LEADER",
  49.     "CHAT_MSG_RAID_WARNING",
  50.     "CHAT_MSG_SAY",
  51.     "CHAT_MSG_WHISPER",
  52.     "CHAT_MSG_YELL",
  53. }
  54.  
  55. local function doprint(s)
  56.     DEFAULT_CHAT_FRAME:AddMessage(addon_name .. ": " .. s)
  57. end
  58.  
  59. local function isok()
  60.     if not enabled then return false end
  61.     if C_PetBattles.IsInBattle() then return false end -- if we're in a battle, don't bother
  62.     if not C_PetJournal.IsFindBattleEnabled() or not C_PetJournal.IsJournalUnlocked() then return false end -- if we can't even queue, dont bother
  63.     return true
  64. end
  65.  
  66. local function dosend(m)
  67.     if use_addon_msg then
  68.         if not IsAddonMessagePrefixRegistered(m_addon_prefix) then
  69.             if not RegisterAddonMessagePrefix(m_addon_prefix) then
  70.                 doprint("Error registering prefix: " .. m_addon_prefix)
  71.                 enabled = false
  72.             end
  73.         else
  74.             SendAddonMessage(m_addon_prefix, m, m_channel, m_target)
  75.         end
  76.     else
  77.         SendChatMessage(m, m_channel, nil, m_target)
  78.     end
  79. end
  80.  
  81. local function onceyoupop(us)
  82.     if GetTime() - popped < 2 then
  83.         nextupdate = GetTime() + 10
  84.         popped_ok = false
  85.         C_PetBattles.AcceptQueuedPVPMatch()
  86.     else
  87.         popped = GetTime()
  88.         popped_ok = true
  89.         if us then
  90.             dosend(m_pop)
  91.         end
  92.     end
  93. end
  94.  
  95. local z = CreateFrame("Button", nil, UIParent, "PetBattleActionButtonTemplate")
  96. z.Icon:SetTexture([[Interface\Icons\INV_Pet_PetTrap]])
  97. z:SetSize(200, 200)
  98. z:SetPoint("CENTER")
  99. z:SetScript("OnClick", function() C_PetBattles.ForfeitGame() end)
  100. z:Hide()
  101.  
  102. local function getpets()
  103.     local levels = ""
  104.     local names = ""
  105.     local count25 = 0
  106.     for i = 1, 3 do
  107.         local petID, ability1ID, ability2ID, ability3ID, locked = C_PetJournal.GetPetLoadOutInfo(i)
  108.         local speciesID, customName, level, xp, maxXp, displayID, isFavorite, name, icon, petType, creatureID, sourceText, description, isWild, canBattle, tradable, unique = C_PetJournal.GetPetInfoByPetID(petID)
  109.         if level == 25 then
  110.             count25 = count25 + 1
  111.         end
  112.         levels = levels .. level .. " "
  113.         names = names .. name .. ", "
  114.     end
  115.     if count25 < 3 then
  116.         if include_pet_names and not use_addon_msg then -- dont include when using addon channel, sorta redundant
  117.             return strtrim(levels) .. " (" .. strtrim(names, " ,")
  118.         else
  119.             return strtrim(levels)
  120.         end
  121.     else
  122.         return nil
  123.     end
  124. end
  125.  
  126. local f = CreateFrame("Frame")
  127. f:RegisterEvent("PET_BATTLE_QUEUE_PROPOSE_MATCH")
  128. for _,v in pairs(events_chat) do -- all the events we should need for chat
  129.     f:RegisterEvent(v)
  130. end
  131. f:SetScript("OnEvent", function(self, event, ...)
  132.     if not isok() then return end
  133.     if event == "PET_BATTLE_QUEUE_PROPOSE_MATCH" then
  134.         onceyoupop(true)
  135.     elseif strfind(event, "CHAT_MSG_") then
  136.         local msg, sender
  137.         if event == "CHAT_MSG_ADDON" then
  138.             local prefix
  139.             prefix, msg, sender = ...
  140.             if prefix ~= m_addon_prefix then
  141.                 return
  142.             end
  143.         else
  144.             msg, sender = ...
  145.         end
  146.         if sender == UnitName('player') then return end
  147.         msg = strtrim(msg)
  148.         --
  149.         if msg == m_pop then
  150.             onceyoupop()
  151.         elseif strmatch(msg, m_pets .. " .*") then
  152.             if msg == m_pets .. " " .. m_no then
  153.                 enabled = false
  154.                 return
  155.             end
  156.             local levels = { strsplit(' ', strsub(msg, strlen(m_pets) + 2), 4) } -- creating table, prolly not a great idea
  157.             for i = 1, 3 do
  158.                 local j = tonumber(levels[i])
  159.                 local petID, ability1ID, ability2ID, ability3ID, locked = C_PetJournal.GetPetLoadOutInfo(i)
  160.                 local speciesID, customName, level, xp, maxXp, displayID, isFavorite, name, icon, petType, creatureID, sourceText, description, isWild, canBattle, tradable, unique = C_PetJournal.GetPetInfoByPetID(petID)
  161.                 for diff = 0, 2 do -- try to put in a pet as close to the level as possible
  162.                     if abs(level - j) > diff then
  163.                         local _, count = C_PetJournal.GetNumPets(PetJournal.isWild)
  164.                         for n = 1, count do -- iterate all our pets
  165.                             local e_petID, e_speciesID, e_isOwned, e_customName, e_level, e_favorite, e_isRevoked, e_name, e_icon, e_petType, e_creatureID, e_sourceText, e_description, e_isWildPet, e_canBattle = C_PetJournal.GetPetInfoByIndex(n, PetJournal.isWild)
  166.                             if e_canBattle and e_petID ~= petID and abs(e_level - j) <= diff then
  167.                                 C_PetJournal.SetPetLoadOutInfo(i, e_petID)
  168.                                 return
  169.                             end
  170.                         end
  171.                     end
  172.                 end
  173.                 if abs(level - j) > 2 then
  174.                     dosend(m_pets .. " " .. m_no)
  175.                     enabled = false
  176.                     return
  177.                 end
  178.             end
  179.             -- all pets have checked out
  180.             if GetTime() > nextupdate then
  181.                 popped_ok = false
  182.                 C_PetBattles.StartPVPMatchmaking()
  183.                 local pets = getpets()
  184.                 if pets then
  185.                     dosend(m_queue .. " " .. pets .. ")")
  186.                 end
  187.             end
  188.         elseif strmatch(msg, m_queue .. " .*") then
  189.             popped_ok = false
  190.             C_PetBattles.StartPVPMatchmaking()
  191.         end
  192.     end
  193. end)
  194. f:SetScript("OnUpdate", function(self, ...)
  195.     if not enabled then return end
  196.     if not PetJournal then PetJournal_LoadUI() end
  197.     C_PetJournal.ClearSearchFilter()
  198.     if C_PetBattles.IsInBattle() then
  199.         decline_count = 0
  200.         popped_ok = false
  201.         nextupdate = GetTime() + 10
  202.         z:Show()
  203.         return
  204.     else
  205.         z:Hide()
  206.     end
  207.     if C_PetBattles.GetPVPMatchmakingInfo() then
  208.         if popped_ok and GetTime() - popped > 2 then
  209.             decline_count = decline_count + 1
  210.             if max_decline_count > 0 and decline_count > max_decline_count then -- accept the pvp match just to get the person out of the queue, afk or manually abandon out
  211.                 C_PetBattles.AcceptQueuedPVPMatch()
  212.                 return
  213.             end
  214.             if C_PetBattles.GetPVPMatchmakingInfo() == "proposal" then
  215.                 C_PetBattles.DeclineQueuedPVPMatch()
  216.             else
  217.                 C_PetBattles.StopPVPMatchmaking()
  218.             end
  219.             popped_ok = false
  220.         end
  221.         return
  222.     end
  223.     if not isok() then return end
  224.     if leader and GetTime() > nextupdate then
  225.         nextupdate = GetTime() + 2
  226.         local pets = getpets()
  227.         if pets then
  228.             dosend(m_pets .. " " .. pets .. ")")
  229.         end
  230.     end
  231. end)
  232.  
  233. _G["SLASH_" .. addon_name .. "1"] = '/' .. a_cmd;
  234. SlashCmdList[addon_name] = function(...)
  235.     enabled = not enabled
  236.     if enabled and use_addon_msg and not IsAddonMessagePrefixRegistered(m_addon_prefix) then
  237.         if not RegisterAddonMessagePrefix(m_addon_prefix) then
  238.             doprint("Error registering prefix: " .. m_addon_prefix)
  239.             enabled = false
  240.         end
  241.     end
  242.     local msg = ...
  243.     leader = msg and strlen(msg) > 0
  244.     doprint((enabled and "enabled" or "disabled") .. ", leader: " .. tostring(leader))
  245. end
Advertisement
Add Comment
Please, Sign In to add comment