Advertisement
Gredunza

Untitled

Apr 29th, 2017
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.12 KB | None | 0 0
  1. local addonName, addonTable = ...
  2. WowheadBagScannerBankData = {}
  3.  
  4. local stringVersion = 2
  5.  
  6. local fullitemlist = ''
  7. local eventframe = CreateFrame("FRAME",addonName.."Events");
  8. local scanningguildbank = 0
  9.  
  10. local function buildItemLink(itemName,itemQuantity,itemID)
  11. --[[
  12.     -- |cff9d9d9d|Hitem:7073:0:0:0:0:0:0:0:80:0|h[Broken Fang]|h|r
  13.     local tr = string.match(itemLink,"item:([%d:-]+)",13)
  14.     if not tr then return '' end
  15.  
  16.     tr = ','..qty..':'..tr
  17.  
  18.     return tr
  19. ]]
  20.     local rep = string.gsub(itemName,'\"','\\\"')
  21.     local ret = '"'..rep..'",'..itemQuantity..','..itemID.."\n"
  22.    
  23.     return ret
  24. end
  25.  
  26. local function recalcitemlist()
  27.     local _, realmServer = pcall(function() return GetCVar('realmList') end)
  28.     if not _ then realmServer = '' end
  29.     if not realmServer then realmServer = '' end
  30.  
  31.     fullitemlist = '"Realm","Faction","Character","Location","Item Class","Item Subclass","Item Name","Item Quantity","Item ID"\n'
  32.     for bag = 0,NUM_BAG_SLOTS,1 do
  33.         for slot = 1,GetContainerNumSlots(bag),1 do
  34.             local item = GetContainerItemLink(bag,slot)
  35.             if item then
  36.                 fullitemlist = fullitemlist..'"'..GetRealmName()..'","'..UnitFactionGroup("player")..'","'..UnitName("player")..'",'..'"Bags","'..select(6,GetItemInfo(GetContainerItemLink(bag,slot)))..'","'..select(7,GetItemInfo(GetContainerItemLink(bag,slot)))..'",'..buildItemLink(select(1,GetItemInfo(GetContainerItemLink(bag,slot))), select(2,GetContainerItemInfo(bag,slot)),select(10,GetContainerItemInfo(bag,slot)))
  37.             else
  38.                 --fullitemlist = fullitemlist..','
  39.             end
  40.         end
  41.     end
  42.     --fullitemlist = fullitemlist..'!'
  43.     if WowheadBagScannerBankData.bank then
  44.         fullitemlist = fullitemlist..WowheadBagScannerBankData.bank
  45.     end
  46.     if stringVersion > 1 then
  47.     --    fullitemlist = fullitemlist..'!'
  48.         if WowheadBagScannerBankData.reagentbank then
  49.             fullitemlist = fullitemlist..WowheadBagScannerBankData.reagentbank
  50.         end
  51.     end
  52.     --[[fullitemlist = fullitemlist..'!'
  53.     if WowheadBagScannerBankData.voidstorage then
  54.         fullitemlist = fullitemlist..WowheadBagScannerBankData.voidstorage
  55.     end]]
  56.     --[[if WowheadBagScannerBankData.guild then
  57.         for banktab = 1,9,1 do
  58.             if WowheadBagScannerBankData.guild[banktab] then
  59.                 fullitemlist = fullitemlist..WowheadBagScannerBankData.guild[banktab]
  60.             end
  61.         end
  62.     end]]
  63.  
  64.     --fullitemlist = "~" .. stringVersion .. "~" .. strlen(fullitemlist) .. "~" .. fullitemlist
  65. end
  66.  
  67. local function handler(...)
  68.     local function NOP() return end
  69.     StaticPopupDialogs["WOWHEADBAGSCANNERCOPYPASTEDIALOG"] = StaticPopupDialogs["WOWHEADBAGSCANNERCOPYPASTEDIALOG"] or {
  70.             text = "Copy the following to the clipboard (Ctrl-C): ",
  71.             button1 = OKAY,
  72.             hasEditBox = 1,
  73.  
  74.             OnShow = function(self, data)
  75.                 recalcitemlist()
  76.                 self.editBox:SetScript('OnEditFocusGained', function(thisbox)
  77.                     thisbox:HighlightText(0,-1)
  78.                 end)
  79.                 self.editBox:SetText(fullitemlist)
  80.             end,
  81.  
  82.             OnHide = NOP,
  83.             OnAccept = NOP,
  84.             OnCancel = NOP,
  85.             EditBoxOnEscapePressed = function(self, ...) self:GetParent():Hide() end,
  86.             EditBoxOnTextChanged = function(self, ...)
  87.                 self:SetText(fullitemlist)
  88.                 self:SetFocus()
  89.                 self:HighlightText()
  90.             end,
  91.             timeout = 0,
  92.             whileDead = 1,
  93.             hideOnEscape = 1
  94.         };
  95.     StaticPopup_Show("WOWHEADBAGSCANNERCOPYPASTEDIALOG");
  96. end
  97.  
  98. local function onEvent(self,event)
  99.     local partitemlist, gotitem, tabname, tabicon, _ = '',false
  100.     --print(addonName,event)
  101.     if (event == 'ADDON_LOADED') then
  102.         if (not WowheadBagScannerBankData.version) or (not WowheadBagScannerBankData.version == stringVersion) then
  103.             wipe(WowheadBagScannerBankData)
  104.             WowheadBagScannerBankData.version = stringVersion
  105.         end
  106.  
  107.         return
  108.     end
  109.     if (string.sub(event,1,9) == 'BANKFRAME') then
  110.         if (select("#",GetContainerNumFreeSlots(-1)) > 1) then
  111.             for bagidx = NUM_BAG_SLOTS,NUM_BAG_SLOTS+NUM_BANKBAGSLOTS,1 do
  112.                 local bag = bagidx;
  113.                 if (bag == NUM_BAG_SLOTS) then bag = -1 end
  114.                 for slot = 1,GetContainerNumSlots(bag),1 do
  115.                     local item = GetContainerItemLink(bag,slot)
  116.                     if item then
  117.                         partitemlist = partitemlist..'"'..GetRealmName()..'","'..UnitFactionGroup("player")..'","'..UnitName("player")..'",'..'"Bank","'..select(6,GetItemInfo(GetContainerItemLink(bag,slot)))..'","'..select(7,GetItemInfo(GetContainerItemLink(bag,slot)))..'",'..buildItemLink(select(1,GetItemInfo(GetContainerItemLink(bag,slot))), select(2,GetContainerItemInfo(bag,slot)),select(10,GetContainerItemInfo(bag,slot)))
  118.                         gotitem = true
  119.                     else
  120.                         --partitemlist = partitemlist..','
  121.                     end
  122.                 end
  123.             end
  124.             if gotitem then
  125.                 WowheadBagScannerBankData.bank = partitemlist
  126.             end
  127.         end
  128.  
  129.         partitemlist = ''
  130.         gotitem = false
  131.         bag = REAGENTBANK_CONTAINER
  132.         for slot = 1,GetContainerNumSlots(bag),1 do
  133.             local item = GetContainerItemLink(bag,slot)
  134.             if item then
  135.                 partitemlist = partitemlist..'"'..GetRealmName()..'","'..UnitFactionGroup("player")..'","'..UnitName("player")..'",'..'"Reagent Bank","'..select(6,GetItemInfo(GetContainerItemLink(bag,slot)))..'","'..select(7,GetItemInfo(GetContainerItemLink(bag,slot)))..'",'..buildItemLink(select(1,GetItemInfo(GetContainerItemLink(bag,slot))), select(2,GetContainerItemInfo(bag,slot)),select(10,GetContainerItemInfo(bag,slot)))
  136.                 gotitem = true
  137.             else
  138.                 --partitemlist = partitemlist..','
  139.             end
  140.         end
  141.         if gotitem then
  142.             WowheadBagScannerBankData.reagentbank = partitemlist
  143.         end
  144.     end
  145.     if (string.sub(event,1,4) == 'VOID') then
  146.     --[[
  147.         local iid, linkstring, tab
  148.         for tab = 1,2,1 do
  149.             for row = 1,8,1 do
  150.                 for slot = row,80,8 do
  151.                     linkstring = nil
  152.                     iid, _, _, _, _ = GetVoidItemInfo(tab,slot)
  153.                     if (iid) then
  154.                         linkstring = GetVoidItemHyperlinkString(slot+(80*(tab - 1)))
  155.                     end
  156.                     if (linkstring) then
  157.                         -- The following line is totally wrong.
  158.                         partitemlist = partitemlist..'"'..GetRealmName()..'","'..UnitFactionGroup("player")..'","'..UnitName("player")..'",'..'"Void Storage","'..select(6,GetItemInfo(GetContainerItemLink(bag,slot)))..'","'..select(7,GetItemInfo(GetContainerItemLink(bag,slot)))..'",'..buildItemLink(select(1,GetItemInfo(GetContainerItemLink(bag,slot))), select(2,GetContainerItemInfo(bag,slot)),select(10,GetContainerItemInfo(bag,slot)))
  159.                         gotitem = true
  160.                     else
  161.                         --partitemlist = partitemlist..','
  162.                     end
  163.                 end
  164.             end
  165.         end
  166.         if gotitem then
  167.             WowheadBagScannerBankData.voidstorage = partitemlist
  168.         end
  169.     ]]
  170.     end
  171.     if (event == 'GUILDBANKBAGSLOTS_CHANGED') then
  172.         if not WowheadBagScannerBankData.guild then WowheadBagScannerBankData.guild = {} end
  173.         local banktab
  174.         if (scanningguildbank > 0) then banktab = scanningguildbank else banktab = GetCurrentGuildBankTab() end
  175.  
  176.         tabname,tabicon,gotitem,_ = GetGuildBankTabInfo(banktab)
  177.         if (gotitem) then
  178.             gotitem = false
  179.             for row = 1,7,1 do
  180.                 for slot = row,98,7 do
  181.                     local item = GetGuildBankItemLink(banktab,slot)
  182.                     if item then
  183.                         partitemlist = partitemlist..'\"'..GetRealmName()..'\",\"'..UnitFactionGroup("player")..'\",\"'..UnitName("player")..'\",'..'"Guild Bank","'..select(6,GetItemInfo(GetContainerItemLink(bag,slot)))..'","'..select(7,GetItemInfo(GetContainerItemLink(bag,slot)))..'",'..buildItemLink(select(1,GetItemInfo(GetGuildBankItemLink(banktab,slot))), select(2,GetGuildBankItemInfo(banktab,slot)),select(10,GetGuildBankItemInfo(banktab,slot)))
  184.                         gotitem = true
  185.                     else
  186.                         --partitemlist = partitemlist..','
  187.                     end
  188.                 end
  189.             end
  190.         end
  191.         if (gotitem) then
  192.             guildname = GetGuildInfo("player")
  193.             WowheadBagScannerBankData.guild[banktab] = '"<'..string.gsub(guildname,'"','')..'> '..string.gsub(tabname,'"','')..'""'..string.gsub(tabicon,'"','')..'"'..partitemlist
  194.         end
  195.  
  196.         if ((scanningguildbank > 0) or (not WowheadBagScannerBankData.guildscanned) or ((time() - WowheadBagScannerBankData.guildscanned) > 1800)) then
  197.             scanningguildbank = scanningguildbank + 1
  198.             if scanningguildbank > GetNumGuildBankTabs() then
  199.                 for x = scanningguildbank,9,1 do
  200.                     WowheadBagScannerBankData.guild[x] = nil
  201.                 end
  202.                 scanningguildbank = 0
  203.                 WowheadBagScannerBankData.guildscanned = time()
  204.                 banktab = GetCurrentGuildBankTab()
  205.             else
  206.                 banktab = scanningguildbank
  207.             end
  208.             QueryGuildBankTab(banktab)
  209.         end
  210.     end
  211. end
  212.  
  213. eventframe:RegisterEvent("ADDON_LOADED")
  214. eventframe:RegisterEvent("BANKFRAME_CLOSED")
  215. eventframe:RegisterEvent("BANKFRAME_OPENED")
  216. eventframe:RegisterEvent("VOID_STORAGE_OPEN")
  217. eventframe:RegisterEvent("VOID_STORAGE_UPDATE")
  218. eventframe:RegisterEvent("VOID_STORAGE_CONTENTS_UPDATE")
  219. eventframe:RegisterEvent("VOID_TRANSFER_DONE")
  220. eventframe:RegisterEvent("GUILDBANKBAGSLOTS_CHANGED")
  221.  
  222. eventframe:SetScript("OnEvent", onEvent)
  223.  
  224. SLASH_WHBAGSCANNER1 = '/whbagscanner'
  225. SLASH_WHBAGSCANNER2 = '/whbs'
  226. SlashCmdList["WHBAGSCANNER"] = handler
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement