| contrebasse@0 | 1 local addonName, A = ... | 
| contrebasse@0 | 2 | 
| contrebasse@41 | 3 -- @todo: complete jewelcrafting items | 
| contrebasse@67 | 4 -- @todo: enchants, elementals, prospecting | 
| contrebasse@0 | 5 | 
| contrebasse@0 | 6 -- @todo improve scanning | 
| contrebasse@0 | 7 -- @todo be sure that skillName is unique, or use something else | 
| contrebasse@0 | 8 -- @todo add support for multi-reagents recipes | 
| contrebasse@67 | 9 | 
| contrebasse@67 | 10 A.data = {} | 
| contrebasse@67 | 11 | 
| contrebasse@15 | 12 do | 
| contrebasse@15 | 13 	-- lua functions | 
| contrebasse@15 | 14 	local print = print | 
| contrebasse@15 | 15 	local ipairs = ipairs | 
| contrebasse@15 | 16 	local tinsert = tinsert | 
| contrebasse@67 | 17 	local select = select | 
| contrebasse@0 | 18 | 
| contrebasse@15 | 19 	-- Wow functions | 
| contrebasse@15 | 20 	local GetNumTradeSkills = GetNumTradeSkills | 
| contrebasse@15 | 21 	local GetTradeSkillInfo = GetTradeSkillInfo | 
| contrebasse@15 | 22 	local GetTradeSkillNumReagents = GetTradeSkillNumReagents | 
| contrebasse@15 | 23 	local GetTradeSkillItemLink = GetTradeSkillItemLink | 
| contrebasse@67 | 24 	local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink | 
| contrebasse@15 | 25 	local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink | 
| contrebasse@15 | 26 	local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo | 
| contrebasse@15 | 27 	local GetTradeSkillNumMade = GetTradeSkillNumMade | 
| contrebasse@67 | 28 	local GetSpellInfo = GetSpellInfo | 
| contrebasse@67 | 29 | 
| contrebasse@67 | 30 	-- Wow objects | 
| contrebasse@67 | 31 	local GetTradeSkillLine = GetTradeSkillLine | 
| contrebasse@0 | 32 | 
| contrebasse@15 | 33 	-- the function who scans the tradeskill | 
| contrebasse@15 | 34 	function A:ScanSimpleRecipes() | 
| contrebasse@26 | 35 		-- Check if the tradeskill is loaded | 
| contrebasse@26 | 36 		-- Has to have recipes and begin with a header | 
| contrebasse@26 | 37 		local NRecipes = GetNumTradeSkills() | 
| contrebasse@26 | 38 		if NRecipes==0 or select(2,GetTradeSkillInfo(1))~="header" then | 
| contrebasse@26 | 39 			return | 
| contrebasse@26 | 40 		end | 
| contrebasse@66 | 41 | 
| contrebasse@67 | 42 		-- Check if the pseudo tradeskills have to be added | 
| contrebasse@67 | 43 		if GetTradeSkillLine() == GetSpellInfo(25229) then -- Jewelcrafting | 
| contrebasse@67 | 44 			if not A.ProspectingDataLoaded then | 
| contrebasse@68 | 45 				for itemID,data in pairs(A.ProspectingData) do | 
| contrebasse@67 | 46 					A.data[itemID] = data | 
| contrebasse@67 | 47 				end | 
| contrebasse@67 | 48 				A.ProspectingDataLoaded = true | 
| contrebasse@67 | 49 			end | 
| contrebasse@69 | 50 		elseif GetTradeSkillLine() == GetSpellInfo(45357) then -- Inscription | 
| contrebasse@67 | 51 			if not A.MillingDataLoaded then | 
| contrebasse@68 | 52 				for itemID,data in pairs(A.MillingData) do | 
| contrebasse@67 | 53 					A.data[itemID] = data | 
| contrebasse@67 | 54 				end | 
| contrebasse@67 | 55 				A.MillingDataLoaded = true | 
| contrebasse@67 | 56 			end | 
| contrebasse@67 | 57 		end | 
| contrebasse@67 | 58 | 
| contrebasse@26 | 59 		for i = 2,NRecipes do -- The first one is a header | 
| contrebasse@15 | 60 			local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i) | 
| contrebasse@15 | 61 			if skillType ~= "header" then | 
| contrebasse@36 | 62 				--if GetTradeSkillNumReagents(i) == 1 then | 
| contrebasse@15 | 63 					-- item ID | 
| contrebasse@15 | 64 					local itemID = A.link2ID(GetTradeSkillItemLink(i)) | 
| contrebasse@0 | 65 | 
| contrebasse@67 | 66 					-- reagent ID, valid only if there's only one reagent as we take only the first one | 
| contrebasse@15 | 67 					local reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) | 
| contrebasse@14 | 68 | 
| contrebasse@15 | 69 					-- reagent number needed | 
| contrebasse@67 | 70 					local _, _, reagentCount, _ = GetTradeSkillReagentInfo(i, 1) | 
| contrebasse@14 | 71 | 
| contrebasse@15 | 72 					-- number of reagent created by the recipe | 
| contrebasse@15 | 73 					local minMade, maxMade = GetTradeSkillNumMade(i) | 
| contrebasse@66 | 74 | 
| contrebasse@30 | 75 					-- recipe link (for tooltips) | 
| contrebasse@30 | 76 					local recipeLink = GetTradeSkillRecipeLink(i) | 
| contrebasse@0 | 77 | 
| contrebasse@15 | 78 					-- error checking | 
| contrebasse@30 | 79 					if not reagentID or not reagentCount or not skillName or not itemID or not minMade or not maxMade or not recipeLink then | 
| contrebasse@64 | 80 						--@debug@ | 
| contrebasse@30 | 81 						print("Erreur de scan :",itemID,skillName,reagentID,reagentCount,minMade,maxMade,recipeLink) | 
| contrebasse@64 | 82 						--@end-debug@ | 
| contrebasse@66 | 83 | 
| contrebasse@37 | 84 					else -- Zap incomplete recipes, they will be scanned later | 
| contrebasse@37 | 85 						-- remove unneeded minMade/maxMade | 
| contrebasse@37 | 86 						if maxMade==minMade then | 
| contrebasse@37 | 87 							maxMade = nil | 
| contrebasse@37 | 88 							if minMade==1 then | 
| contrebasse@37 | 89 								minMade = nil | 
| contrebasse@37 | 90 							end -- if | 
| contrebasse@37 | 91 						end -- if | 
| contrebasse@15 | 92 | 
| contrebasse@37 | 93 						-- skillName or...??? | 
| contrebasse@37 | 94 						-- There's still a problem when multiple recipes craft the same item | 
| contrebasse@37 | 95 						if not A.data[itemID] then | 
| contrebasse@37 | 96 							A.data[itemID] = {} | 
| contrebasse@15 | 97 						end -- if | 
| contrebasse@37 | 98 						local newSpell = true | 
| contrebasse@37 | 99 						for _,v in ipairs(A.data[itemID]) do | 
| contrebasse@37 | 100 							if v.spellName==skillName then | 
| contrebasse@37 | 101 								newSpell = nil | 
| contrebasse@37 | 102 								break | 
| contrebasse@37 | 103 							end -- if | 
| contrebasse@37 | 104 						end -- for | 
| contrebasse@37 | 105 						if newSpell then | 
| contrebasse@37 | 106 							A.data[itemID].spellLink = recipeLink | 
| contrebasse@38 | 107 							A.data[itemID].manyReagents = A.data[itemID].manyReagents or GetTradeSkillNumReagents(i)>1 | 
| contrebasse@37 | 108 							tinsert(A.data[itemID],{reagentID,reagentCount,minMade,maxMade,spellName=skillName}) | 
| contrebasse@15 | 109 						end -- if | 
| contrebasse@15 | 110 					end -- if | 
| contrebasse@36 | 111 				--end -- if | 
| contrebasse@0 | 112 			end -- if | 
| contrebasse@15 | 113 		end -- for | 
| contrebasse@66 | 114 | 
| contrebasse@26 | 115 		-- the scanning is complete | 
| contrebasse@26 | 116 		return true | 
| contrebasse@15 | 117 	end -- function | 
| contrebasse@15 | 118 end -- do |