| contrebasse@0 | 1 local addonName, A = ... | 
| contrebasse@0 | 2 | 
| contrebasse@93 | 3 A.data = A.CommonData | 
| contrebasse@67 | 4 | 
| contrebasse@15 | 5 do | 
| contrebasse@15 | 6 	-- lua functions | 
| contrebasse@15 | 7 	local print = print | 
| contrebasse@15 | 8 	local ipairs = ipairs | 
| contrebasse@108 | 9 	local pairs = pairs | 
| contrebasse@15 | 10 	local tinsert = tinsert | 
| contrebasse@67 | 11 	local select = select | 
| contrebasse@0 | 12 | 
| contrebasse@15 | 13 	-- Wow functions | 
| contrebasse@15 | 14 	local GetNumTradeSkills = GetNumTradeSkills | 
| contrebasse@15 | 15 	local GetTradeSkillInfo = GetTradeSkillInfo | 
| contrebasse@15 | 16 	local GetTradeSkillNumReagents = GetTradeSkillNumReagents | 
| contrebasse@15 | 17 	local GetTradeSkillItemLink = GetTradeSkillItemLink | 
| contrebasse@67 | 18 	local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink | 
| contrebasse@15 | 19 	local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink | 
| contrebasse@15 | 20 	local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo | 
| contrebasse@15 | 21 	local GetTradeSkillNumMade = GetTradeSkillNumMade | 
| contrebasse@67 | 22 	local GetSpellInfo = GetSpellInfo | 
| contrebasse@67 | 23 | 
| contrebasse@67 | 24 	-- Wow objects | 
| contrebasse@67 | 25 	local GetTradeSkillLine = GetTradeSkillLine | 
| contrebasse@0 | 26 | 
| contrebasse@15 | 27 	-- the function who scans the tradeskill | 
| contrebasse@15 | 28 	function A:ScanSimpleRecipes() | 
| contrebasse@82 | 29 		-- Do not scan while we modify the tradeskill display | 
| contrebasse@82 | 30 		if A.blockScan then return end | 
| contrebasse@82 | 31 | 
| contrebasse@26 | 32 		-- Check if the tradeskill is loaded | 
| contrebasse@26 | 33 		-- Has to have recipes and begin with a header | 
| contrebasse@26 | 34 		local NRecipes = GetNumTradeSkills() | 
| contrebasse@26 | 35 		if NRecipes==0 or select(2,GetTradeSkillInfo(1))~="header" then | 
| contrebasse@26 | 36 			return | 
| contrebasse@26 | 37 		end | 
| contrebasse@108 | 38 | 
| contrebasse@108 | 39 		local tradeskillName = GetTradeSkillLine() | 
| contrebasse@66 | 40 | 
| contrebasse@67 | 41 		-- Check if the pseudo tradeskills have to be added | 
| contrebasse@85 | 42 		if tradeskillName == GetSpellInfo(25229) then -- Jewelcrafting | 
| contrebasse@67 | 43 			if not A.ProspectingDataLoaded then | 
| contrebasse@68 | 44 				for itemID,data in pairs(A.ProspectingData) do | 
| contrebasse@67 | 45 					A.data[itemID] = data | 
| contrebasse@67 | 46 				end | 
| contrebasse@67 | 47 				A.ProspectingDataLoaded = true | 
| contrebasse@67 | 48 			end | 
| contrebasse@85 | 49 		elseif tradeskillName == GetSpellInfo(45357) then -- Inscription | 
| contrebasse@67 | 50 			if not A.MillingDataLoaded then | 
| contrebasse@68 | 51 				for itemID,data in pairs(A.MillingData) do | 
| contrebasse@67 | 52 					A.data[itemID] = data | 
| contrebasse@67 | 53 				end | 
| contrebasse@67 | 54 				A.MillingDataLoaded = true | 
| contrebasse@67 | 55 			end | 
| contrebasse@67 | 56 		end | 
| contrebasse@67 | 57 | 
| contrebasse@82 | 58 		local lastHeader | 
| contrebasse@117 | 59 		local isScanCorrect = true | 
| contrebasse@82 | 60 		for i = 1,NRecipes do | 
| contrebasse@70 | 61 			-- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index) | 
| contrebasse@70 | 62 			-- serviceType is nil if the recipe creates an item | 
| contrebasse@82 | 63 			local skillName, skillType, _, _, serviceType = GetTradeSkillInfo(i) | 
| contrebasse@117 | 64 			if not skillName then return end | 
| contrebasse@117 | 65 | 
| contrebasse@117 | 66 			-- Save the name of the header | 
| contrebasse@82 | 67 			if skillType and skillType == "header" then | 
| contrebasse@82 | 68 				lastHeader = skillName | 
| contrebasse@82 | 69 | 
| contrebasse@117 | 70 			-- Analyse recipe | 
| contrebasse@82 | 71 			elseif skillType and skillType ~= "header" and serviceType==nil then | 
| contrebasse@117 | 72 				local isRecipeCorrect = true | 
| contrebasse@117 | 73 | 
| contrebasse@70 | 74 				-- item ID | 
| contrebasse@70 | 75 				local itemID = A.link2ID(GetTradeSkillItemLink(i)) | 
| contrebasse@117 | 76 				if not itemID then isRecipeCorrect = false; end | 
| contrebasse@0 | 77 | 
| contrebasse@93 | 78 				local numReagents = GetTradeSkillNumReagents(i) | 
| contrebasse@117 | 79 				if not numReagents then isRecipeCorrect = false; end | 
| contrebasse@117 | 80 | 
| contrebasse@93 | 81 				local reagentID, reagentCount | 
| contrebasse@93 | 82 				if numReagents==1 then | 
| contrebasse@93 | 83 					-- reagent ID | 
| contrebasse@93 | 84 					reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) | 
| contrebasse@117 | 85 					if not reagentID then isRecipeCorrect = false; end | 
| contrebasse@14 | 86 | 
| contrebasse@93 | 87 					-- reagent number needed | 
| contrebasse@93 | 88 					reagentCount = select(3,GetTradeSkillReagentInfo(i, 1)) | 
| contrebasse@117 | 89 					if not reagentCount then isRecipeCorrect = false; end | 
| contrebasse@108 | 90 				else | 
| contrebasse@117 | 91 					-- no reagentID (is already nil) | 
| contrebasse@117 | 92 					--reagentID = nil | 
| contrebasse@108 | 93 | 
| contrebasse@108 | 94 					-- contains data for the whole reagents | 
| contrebasse@108 | 95 					reagentCount = {} | 
| contrebasse@108 | 96 					for j = 1,numReagents do | 
| contrebasse@117 | 97 						local id = A.link2ID(GetTradeSkillReagentItemLink(i, j)) | 
| contrebasse@117 | 98 						local num = select(3,GetTradeSkillReagentInfo(i, j)) | 
| contrebasse@117 | 99 						if not id or not num then isRecipeCorrect = false; break; end | 
| contrebasse@117 | 100 						tinsert(reagentCount,{id, num}) | 
| contrebasse@108 | 101 					end | 
| contrebasse@93 | 102 				end | 
| contrebasse@14 | 103 | 
| contrebasse@70 | 104 				-- number of reagent created by the recipe | 
| contrebasse@70 | 105 				local minMade, maxMade = GetTradeSkillNumMade(i) | 
| contrebasse@117 | 106 				if not minMade or not maxMade then isRecipeCorrect = false; end | 
| contrebasse@66 | 107 | 
| contrebasse@70 | 108 				-- recipe link (for tooltips) | 
| contrebasse@70 | 109 				local recipeLink = GetTradeSkillRecipeLink(i) | 
| contrebasse@117 | 110 				if not recipeLink then isRecipeCorrect = false; end | 
| contrebasse@0 | 111 | 
| contrebasse@117 | 112 				if not isRecipeCorrect then | 
| contrebasse@117 | 113 					print("Recette incorrecte") | 
| contrebasse@117 | 114 					isScanCorrect = false | 
| contrebasse@117 | 115 				end | 
| contrebasse@70 | 116 				-- error checking | 
| contrebasse@117 | 117 				if isRecipeCorrect then | 
| contrebasse@70 | 118 					-- remove unneeded minMade/maxMade | 
| contrebasse@70 | 119 					if maxMade==minMade then | 
| contrebasse@70 | 120 						maxMade = nil | 
| contrebasse@70 | 121 						if minMade==1 then | 
| contrebasse@70 | 122 							minMade = nil | 
| contrebasse@70 | 123 						end -- if | 
| contrebasse@70 | 124 					end -- if | 
| contrebasse@66 | 125 | 
| contrebasse@70 | 126 					-- As we scan multiple times, check if this recipe is already stored | 
| contrebasse@70 | 127 					local addSpell	= true | 
| contrebasse@70 | 128 					if not A.data[itemID] then | 
| contrebasse@70 | 129 						A.data[itemID] = {} | 
| contrebasse@70 | 130 					else | 
| contrebasse@37 | 131 						for _,v in ipairs(A.data[itemID]) do | 
| contrebasse@70 | 132 							if v.spellLink==recipeLink then | 
| contrebasse@70 | 133 								addSpell = nil | 
| contrebasse@37 | 134 								break | 
| contrebasse@37 | 135 							end -- if | 
| contrebasse@37 | 136 						end -- for | 
| contrebasse@15 | 137 					end -- if | 
| contrebasse@108 | 138 | 
| contrebasse@70 | 139 					-- Cache the data | 
| contrebasse@70 | 140 					if addSpell then | 
| contrebasse@70 | 141 						local spell = {reagentID,reagentCount,minMade,maxMade} | 
| contrebasse@110 | 142 						spell.skillName = skillName | 
| contrebasse@110 | 143 						spell.tradeskillName = tradeskillName | 
| contrebasse@70 | 144 						spell.spellLink = recipeLink | 
| contrebasse@82 | 145 						spell.header = lastHeader | 
| contrebasse@70 | 146 						tinsert(A.data[itemID],spell) | 
| contrebasse@70 | 147 					end | 
| contrebasse@70 | 148 				end -- if | 
| contrebasse@0 | 149 			end -- if | 
| contrebasse@15 | 150 		end -- for | 
| contrebasse@26 | 151 		-- the scanning is complete | 
| contrebasse@117 | 152 		if not isScanCorrect then | 
| contrebasse@117 | 153 			print("Erreur dans le scan") | 
| contrebasse@117 | 154 		end | 
| contrebasse@117 | 155 		return isScanCorrect | 
| contrebasse@15 | 156 	end -- function | 
| contrebasse@15 | 157 end -- do |