Mercurial > wow > reagentmaker
comparison utils.lua @ 108:618163a6d970 v1.0beta13
Always show counts and bypass all filtering and searches
| author | contrebasse |
|---|---|
| date | Thu, 02 Jun 2011 14:12:06 +0200 |
| parents | d64a19e5a47d |
| children | d60d6b4cab0c |
comparison
equal
deleted
inserted
replaced
| 107:d64a19e5a47d | 108:618163a6d970 |
|---|---|
| 41 local GetTradeSkillInfo = GetTradeSkillInfo | 41 local GetTradeSkillInfo = GetTradeSkillInfo |
| 42 local GetNumTradeSkills = GetNumTradeSkills | 42 local GetNumTradeSkills = GetNumTradeSkills |
| 43 local GetTradeSkillItemLink = GetTradeSkillItemLink | 43 local GetTradeSkillItemLink = GetTradeSkillItemLink |
| 44 | 44 |
| 45 -- Gives the number of craftable objects | 45 -- Gives the number of craftable objects |
| 46 --[[ | |
| 46 function A.numMakable(reagentID) | 47 function A.numMakable(reagentID) |
| 47 -- Look for the recipe to make the item | 48 -- Look for the recipe to make the item |
| 48 local reagentIndex = A.findSkillIndex(reagentID) | 49 local reagentIndex = A.findSkillIndex(reagentID) |
| 49 if not reagentIndex then return end | 50 if not reagentIndex then return end |
| 50 | 51 |
| 51 -- Check how many items we can craft | 52 -- Check how many items we can craft |
| 52 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) | 53 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) |
| 53 return numReagentMakable, reagentIndex | 54 return numReagentMakable, reagentIndex |
| 54 end | 55 end |
| 56 --]] | |
| 57 function A.numMakable(reagentID) | |
| 58 -- No recipe | |
| 59 if not A.data[reagentID] then return 0 end | |
| 60 | |
| 61 -- Many recipes | |
| 62 local n = 0 | |
| 63 local itemCount | |
| 64 for _,recipe in pairs(A.data[reagentID]) do | |
| 65 if recipe[1] then -- only one reagent | |
| 66 itemCount = GetItemCount(recipe[1]) | |
| 67 if not itemCount then return end | |
| 68 n = n + math.floor(itemCount/recipe[2]) | |
| 69 else -- many reagents | |
| 70 local m | |
| 71 for _,reagent in pairs(recipe[2]) do | |
| 72 itemCount = GetItemCount(reagent[1]) | |
| 73 if not itemCount then return end | |
| 74 if not m then | |
| 75 m = math.floor(itemCount/reagent[2]) | |
| 76 else | |
| 77 m = math.min(m,math.floor(itemCount/reagent[2])) | |
| 78 end | |
| 79 if m==0 then break end | |
| 80 end | |
| 81 n = n + m | |
| 82 end -- if | |
| 83 end -- for | |
| 84 return n | |
| 85 end -- function | |
| 55 | 86 |
| 56 -- Find the first tradeskill index of the recipe to make an item | 87 -- Find the first tradeskill index of the recipe to make an item |
| 57 function A.findSkillIndex(itemID) | 88 function A.findSkillIndex(itemID) |
| 58 for i = 1,GetNumTradeSkills() do | 89 for i = 1,GetNumTradeSkills() do |
| 59 local _, skillType = GetTradeSkillInfo(i) | 90 local _, skillType = GetTradeSkillInfo(i) |
| 75 local selectedTradeSkillIndex | 106 local selectedTradeSkillIndex |
| 76 local stateSaved | 107 local stateSaved |
| 77 local filtersState = {} | 108 local filtersState = {} |
| 78 local headersState = {} | 109 local headersState = {} |
| 79 | 110 |
| 80 local function GetSubClassID() | |
| 81 -- The purpose of this function is to get the subClassID in a UI independant way | |
| 82 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. | |
| 83 | |
| 84 if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0 | |
| 85 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown)) | |
| 86 end | |
| 87 | |
| 88 local filter | |
| 89 for i = 1, #subClasses do | |
| 90 filter = GetTradeSkillSubClassFilter(i) | |
| 91 if filter then | |
| 92 return i+1 -- ex: 3rd element of the subClasses array, but 4th in the dropdown due to "All Subclasses", so return i+1 | |
| 93 end | |
| 94 end | |
| 95 end | |
| 96 | |
| 97 local function GetInvSlotID() | |
| 98 -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID) | |
| 99 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name. | |
| 100 | |
| 101 if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0 | |
| 102 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown)) | |
| 103 end | |
| 104 | |
| 105 local filter | |
| 106 for i = 1, #invSlots do | |
| 107 filter = GetTradeSkillInvSlotFilter(i) | |
| 108 if filter then | |
| 109 return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 | |
| 110 end | |
| 111 end | |
| 112 end | |
| 113 | |
| 114 local function ApplyFilters() | 111 local function ApplyFilters() |
| 115 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); | 112 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); |
| 116 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); | 113 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); |
| 117 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); | 114 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); |
| 118 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); | 115 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); |
| 122 | 119 |
| 123 function A.SaveActiveFilters(headerName) | 120 function A.SaveActiveFilters(headerName) |
| 124 A.blockScan = true | 121 A.blockScan = true |
| 125 | 122 |
| 126 -- Save filters | 123 -- Save filters |
| 124 filtersState.text = GetTradeSkillItemNameFilter() | |
| 125 filtersState.minLevel, filtersState.maxLevel = GetTradeSkillItemLevelFilter() | |
| 127 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials | 126 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials |
| 128 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp | 127 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp |
| 129 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue | 128 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue |
| 130 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue | 129 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue |
| 131 | 130 |
| 132 -- Remove all filters | 131 -- Remove all filters |
| 132 SetTradeSkillItemNameFilter(nil) | |
| 133 SetTradeSkillItemLevelFilter(0, 0) | |
| 133 TradeSkillFrame.filterTbl.hasMaterials = false | 134 TradeSkillFrame.filterTbl.hasMaterials = false |
| 134 TradeSkillFrame.filterTbl.hasSkillUp = false | 135 TradeSkillFrame.filterTbl.hasSkillUp = false |
| 135 TradeSkillFrame.filterTbl.subClassValue = -1 | 136 TradeSkillFrame.filterTbl.subClassValue = -1 |
| 136 TradeSkillFrame.filterTbl.slotValue = -1 | 137 TradeSkillFrame.filterTbl.slotValue = -1 |
| 137 ApplyFilters() | 138 ApplyFilters() |
| 138 | 139 |
| 139 -- Headers | 140 -- Headers |
| 140 --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. | |
| 141 headersState.headerName = headerName | 141 headersState.headerName = headerName |
| 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories | 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories |
| 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) | 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) |
| 144 if (skillType == "header") and skillName==headerName then | 144 if (skillType == "header") and skillName==headerName then |
| 145 if not isExpanded then | 145 if not isExpanded then |
| 146 ExpandTradeSkillSubClass(i) | 146 ExpandTradeSkillSubClass(i) |
| 147 table.insert(headersState,true) | 147 table.insert(headersState,true) |
| 148 else | 148 else |
| 149 table.insert(headersState,false) | 149 table.insert(headersState,false) |
| 150 end | |
| 151 end | 150 end |
| 152 end | 151 end |
| 152 end | |
| 153 | |
| 154 stateSaved = true | |
| 155 A.blockScan = nil | |
| 153 | 156 |
| 154 --@todo Scroll down to the selected recipe | 157 --@todo Scroll down to the selected recipe |
| 155 -- with TradeSkillSkillXX:Show() ? | 158 -- with TradeSkillSkillXX:Show() ? |
| 156 | |
| 157 stateSaved = true | |
| 158 | |
| 159 A.blockScan = nil | |
| 160 end | 159 end |
| 161 | 160 |
| 162 function A.RestoreActiveFilters() | 161 function A.RestoreActiveFilters() |
| 163 if not stateSaved then return end | 162 if not stateSaved then return end |
| 164 | |
| 165 A.blockScan = true | 163 A.blockScan = true |
| 166 | 164 |
| 167 -- restore headers | 165 -- restore headers |
| 168 for i = GetNumTradeSkills(), 1, -1 do | 166 for i = GetNumTradeSkills(), 1, -1 do |
| 169 local skillName, skillType = GetTradeSkillInfo(i) | 167 local skillName, skillType = GetTradeSkillInfo(i) |
| 172 end | 170 end |
| 173 end | 171 end |
| 174 wipe(headersState) | 172 wipe(headersState) |
| 175 | 173 |
| 176 -- restore filters | 174 -- restore filters |
| 175 SetTradeSkillItemNameFilter(filtersState.text) | |
| 176 SetTradeSkillItemLevelFilter(filtersState.minLevel, filtersState.maxLevel) | |
| 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials | 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials |
| 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp | 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp |
| 179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue | 179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue |
| 180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue | 180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue |
| 181 ApplyFilters() | 181 ApplyFilters() |
| 182 | 182 |
| 183 | |
| 184 --print("restored") | |
| 185 | |
| 186 stateSaved = nil | 183 stateSaved = nil |
| 187 | |
| 188 A.blockScan = nil | 184 A.blockScan = nil |
| 185 | |
| 186 --@todo Scroll down to the selected recipe | |
| 187 -- with TradeSkillSkillXX:Show() ? | |
| 189 end | 188 end |
| 190 end | 189 end |
| 191 | 190 |
| 192 function A.isRecipeUnique(itemData) | 191 function A.isRecipeUnique(itemData) |
| 193 local unique = true | 192 local unique = true |
