Mercurial > wow > reagentmaker
view utils.lua @ 107:d64a19e5a47d
Bypass the filtering. Not fully tested, but mostly works.
author | contrebasse |
---|---|
date | Thu, 02 Jun 2011 00:57:17 +0200 |
parents | 8dd86b6b76d8 |
children | 618163a6d970 |
line wrap: on
line source
local addonName, A = ... -- Lua functions local tonumber = tonumber local select = select local sfind = string.find -- Wow functions -- DEBUG Print function A.DEBUG(msg) -- GLOBALS: DEFAULT_CHAT_FRAME DEFAULT_CHAT_FRAME:AddMessage(msg or "nil",1,0,0) end -- function -- Messages to the user function A.Warn(msg) if not msg then return end local event = "UI_INFO_MESSAGE" UIErrorsFrame_OnEvent(UIErrorsFrame, event, msg) end -- function function A.Error(msg) if not msg then return end local event = "UI_ERROR_MESSAGE" UIErrorsFrame_OnEvent(UIErrorsFrame, event, msg) end -- function -- Returns the item ID from its link function A.link2ID(link) return tonumber(select(3,sfind(link or "", "-*:(%d+)[:|].*")) or "") end -- function -- Returns the button number for the reagents buttons function A.buttonNumber(btn) -- "TradeSkillReagentN" return tonumber(btn:GetName():sub(-1)) end do -- Wow functions local GetTradeSkillInfo = GetTradeSkillInfo local GetNumTradeSkills = GetNumTradeSkills local GetTradeSkillItemLink = GetTradeSkillItemLink -- Gives the number of craftable objects function A.numMakable(reagentID) -- Look for the recipe to make the item local reagentIndex = A.findSkillIndex(reagentID) if not reagentIndex then return end -- Check how many items we can craft local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) return numReagentMakable, reagentIndex end -- Find the first tradeskill index of the recipe to make an item function A.findSkillIndex(itemID) for i = 1,GetNumTradeSkills() do local _, skillType = GetTradeSkillInfo(i) if skillType == "header" then else local ID = A.link2ID(GetTradeSkillItemLink(i)) if ID and ID == itemID then return i end -- if end -- if end -- for end -- function end -- do -- Taken from Datastore_Crafts -- *** Scanning functions *** do local selectedTradeSkillIndex local stateSaved local filtersState = {} local headersState = {} local function GetSubClassID() -- The purpose of this function is to get the subClassID in a UI independant way -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown)) end local filter for i = 1, #subClasses do filter = GetTradeSkillSubClassFilter(i) if filter then return i+1 -- ex: 3rd element of the subClasses array, but 4th in the dropdown due to "All Subclasses", so return i+1 end end end local function GetInvSlotID() -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID) -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name. if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown)) end local filter for i = 1, #invSlots do filter = GetTradeSkillInvSlotFilter(i) if filter then return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 end end end local function ApplyFilters() TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); TradeSkillUpdateFilterBar(); CloseDropDownMenus(); end function A.SaveActiveFilters(headerName) A.blockScan = true -- Save filters filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue -- Remove all filters TradeSkillFrame.filterTbl.hasMaterials = false TradeSkillFrame.filterTbl.hasSkillUp = false TradeSkillFrame.filterTbl.subClassValue = -1 TradeSkillFrame.filterTbl.slotValue = -1 ApplyFilters() -- Headers --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. headersState.headerName = headerName for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) if (skillType == "header") and skillName==headerName then if not isExpanded then ExpandTradeSkillSubClass(i) table.insert(headersState,true) else table.insert(headersState,false) end end end --@todo Scroll down to the selected recipe -- with TradeSkillSkillXX:Show() ? stateSaved = true A.blockScan = nil end function A.RestoreActiveFilters() if not stateSaved then return end A.blockScan = true -- restore headers for i = GetNumTradeSkills(), 1, -1 do local skillName, skillType = GetTradeSkillInfo(i) if (skillType == "header") and skillName==headersState.headerName and table.remove(headersState,1) then CollapseTradeSkillSubClass(i) end end wipe(headersState) -- restore filters TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue ApplyFilters() --print("restored") stateSaved = nil A.blockScan = nil end end function A.isRecipeUnique(itemData) local unique = true -- Check if the item is made by only one recipe. If not, return if #itemData>1 then local spellLink for _,v in ipairs(itemData) do if not spellLink then spellLink = v.spellLink else if v.spellLink ~= spellLink then unique = nil break end end end end return unique end --[[ function A.isTradeskillUnique(itemData) local spellName = itemData[1].spellName -- Check if the item is made by only one recipe. If not, return if #itemData>1 then for _,v in ipairs(itemData) do if v.spellName ~= spellName then spellName = nil break end end end return spellName end --]]