| 
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@67
 | 
    45 				for itemID,data in 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@67
 | 
    50 		elseif GetTradeSkillLine:GetText() == GetSpellInfo(45357) then -- Inscription
 | 
| 
contrebasse@67
 | 
    51 			if not A.MillingDataLoaded then
 | 
| 
contrebasse@67
 | 
    52 				for itemID,data in 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
 |