| contrebasse@0 | 1 local addonName, A = ... | 
| contrebasse@0 | 2 | 
| contrebasse@67 | 3 -- @todo: enchants, elementals, prospecting | 
| contrebasse@0 | 4 -- @todo improve scanning | 
| contrebasse@67 | 5 | 
| contrebasse@67 | 6 A.data = {} | 
| contrebasse@67 | 7 | 
| contrebasse@15 | 8 do | 
| contrebasse@15 | 9 	-- lua functions | 
| contrebasse@15 | 10 	local print = print | 
| contrebasse@15 | 11 	local ipairs = ipairs | 
| contrebasse@15 | 12 	local tinsert = tinsert | 
| contrebasse@67 | 13 	local select = select | 
| contrebasse@0 | 14 | 
| contrebasse@15 | 15 	-- Wow functions | 
| contrebasse@15 | 16 	local GetNumTradeSkills = GetNumTradeSkills | 
| contrebasse@15 | 17 	local GetTradeSkillInfo = GetTradeSkillInfo | 
| contrebasse@15 | 18 	local GetTradeSkillNumReagents = GetTradeSkillNumReagents | 
| contrebasse@15 | 19 	local GetTradeSkillItemLink = GetTradeSkillItemLink | 
| contrebasse@67 | 20 	local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink | 
| contrebasse@15 | 21 	local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink | 
| contrebasse@15 | 22 	local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo | 
| contrebasse@15 | 23 	local GetTradeSkillNumMade = GetTradeSkillNumMade | 
| contrebasse@67 | 24 	local GetSpellInfo = GetSpellInfo | 
| contrebasse@67 | 25 | 
| contrebasse@67 | 26 	-- Wow objects | 
| contrebasse@67 | 27 	local GetTradeSkillLine = GetTradeSkillLine | 
| contrebasse@0 | 28 | 
| contrebasse@15 | 29 	-- the function who scans the tradeskill | 
| contrebasse@15 | 30 	function A:ScanSimpleRecipes() | 
| contrebasse@82 | 31 		-- Do not scan while we modify the tradeskill display | 
| contrebasse@82 | 32 		if A.blockScan then return end | 
| contrebasse@82 | 33 | 
| contrebasse@82 | 34 | 
| 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@70 | 41 | 
| contrebasse@70 | 42 		tradeskillID = GetTradeSkillLine() | 
| contrebasse@66 | 43 | 
| contrebasse@67 | 44 		-- Check if the pseudo tradeskills have to be added | 
| contrebasse@70 | 45 		if tradeskillID == GetSpellInfo(25229) then -- Jewelcrafting | 
| contrebasse@67 | 46 			if not A.ProspectingDataLoaded then | 
| contrebasse@68 | 47 				for itemID,data in pairs(A.ProspectingData) do | 
| contrebasse@67 | 48 					A.data[itemID] = data | 
| contrebasse@67 | 49 				end | 
| contrebasse@67 | 50 				A.ProspectingDataLoaded = true | 
| contrebasse@67 | 51 			end | 
| contrebasse@70 | 52 		elseif tradeskillID == GetSpellInfo(45357) then -- Inscription | 
| contrebasse@67 | 53 			if not A.MillingDataLoaded then | 
| contrebasse@68 | 54 				for itemID,data in pairs(A.MillingData) do | 
| contrebasse@67 | 55 					A.data[itemID] = data | 
| contrebasse@67 | 56 				end | 
| contrebasse@67 | 57 				A.MillingDataLoaded = true | 
| contrebasse@67 | 58 			end | 
| contrebasse@67 | 59 		end | 
| contrebasse@67 | 60 | 
| contrebasse@82 | 61 		local lastHeader | 
| contrebasse@82 | 62 		for i = 1,NRecipes do | 
| contrebasse@70 | 63 			-- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index) | 
| contrebasse@70 | 64 			-- serviceType is nil if the recipe creates an item | 
| contrebasse@82 | 65 			local skillName, skillType, _, _, serviceType = GetTradeSkillInfo(i) | 
| contrebasse@82 | 66 			if skillType and skillType == "header" then | 
| contrebasse@82 | 67 				lastHeader = skillName | 
| contrebasse@82 | 68 | 
| contrebasse@82 | 69 			elseif skillType and skillType ~= "header" and serviceType==nil then | 
| contrebasse@70 | 70 				-- item ID | 
| contrebasse@70 | 71 				local itemID = A.link2ID(GetTradeSkillItemLink(i)) | 
| contrebasse@0 | 72 | 
| contrebasse@70 | 73 				-- reagent ID, valid only if there's only one reagent as we take only the first one | 
| contrebasse@70 | 74 				local reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) | 
| contrebasse@14 | 75 | 
| contrebasse@70 | 76 				-- reagent number needed | 
| contrebasse@70 | 77 				local _, _, reagentCount, _ = GetTradeSkillReagentInfo(i, 1) | 
| contrebasse@14 | 78 | 
| contrebasse@70 | 79 				-- number of reagent created by the recipe | 
| contrebasse@70 | 80 				local minMade, maxMade = GetTradeSkillNumMade(i) | 
| contrebasse@66 | 81 | 
| contrebasse@70 | 82 				-- recipe link (for tooltips) | 
| contrebasse@70 | 83 				local recipeLink = GetTradeSkillRecipeLink(i) | 
| contrebasse@0 | 84 | 
| contrebasse@70 | 85 				-- error checking | 
| contrebasse@70 | 86 				if itemID and reagentID and reagentCount and minMade and maxMade and recipeLink then | 
| contrebasse@70 | 87 					-- remove unneeded minMade/maxMade | 
| contrebasse@70 | 88 					if maxMade==minMade then | 
| contrebasse@70 | 89 						maxMade = nil | 
| contrebasse@70 | 90 						if minMade==1 then | 
| contrebasse@70 | 91 							minMade = nil | 
| contrebasse@70 | 92 						end -- if | 
| contrebasse@70 | 93 					end -- if | 
| contrebasse@66 | 94 | 
| contrebasse@70 | 95 					-- As we scan multiple times, check if this recipe is already stored | 
| contrebasse@70 | 96 					local addSpell	= true | 
| contrebasse@70 | 97 					if not A.data[itemID] then | 
| contrebasse@70 | 98 						A.data[itemID] = {} | 
| contrebasse@70 | 99 					else | 
| contrebasse@37 | 100 						for _,v in ipairs(A.data[itemID]) do | 
| contrebasse@70 | 101 							if v.spellLink==recipeLink then | 
| contrebasse@70 | 102 								addSpell = nil | 
| contrebasse@37 | 103 								break | 
| contrebasse@37 | 104 							end -- if | 
| contrebasse@37 | 105 						end -- for | 
| contrebasse@15 | 106 					end -- if | 
| contrebasse@70 | 107 | 
| contrebasse@70 | 108 					-- Cache the data | 
| contrebasse@70 | 109 					if addSpell then | 
| contrebasse@70 | 110 						local spell = {reagentID,reagentCount,minMade,maxMade} | 
| contrebasse@70 | 111 						spell.spellID = tradeskillID | 
| contrebasse@70 | 112 						spell.spellLink = recipeLink | 
| contrebasse@82 | 113 						spell.header = lastHeader | 
| contrebasse@70 | 114 						spell.manyReagents = GetTradeSkillNumReagents(i)>1 | 
| contrebasse@70 | 115 						tinsert(A.data[itemID],spell) | 
| contrebasse@70 | 116 					end | 
| contrebasse@70 | 117 | 
| contrebasse@70 | 118 				else -- Zap incomplete recipes, they will be scanned later | 
| contrebasse@70 | 119 					--@debug@ | 
| contrebasse@70 | 120 					print("Erreur de scan :",itemID,reagentID,reagentCount,minMade,maxMade,recipeLink) | 
| contrebasse@70 | 121 					--@end-debug@ | 
| contrebasse@70 | 122 				end -- if | 
| contrebasse@0 | 123 			end -- if | 
| contrebasse@15 | 124 		end -- for | 
| contrebasse@66 | 125 | 
| contrebasse@70 | 126 		zzz = A.data | 
| contrebasse@26 | 127 		-- the scanning is complete | 
| contrebasse@26 | 128 		return true | 
| contrebasse@15 | 129 	end -- function | 
| contrebasse@15 | 130 end -- do |