| 
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
 |