contrebasse@0: local addonName, A = ... contrebasse@0: contrebasse@41: -- @todo: complete jewelcrafting items contrebasse@67: -- @todo: enchants, elementals, prospecting contrebasse@0: contrebasse@0: -- @todo improve scanning contrebasse@0: -- @todo be sure that skillName is unique, or use something else contrebasse@0: -- @todo add support for multi-reagents recipes contrebasse@67: contrebasse@67: A.data = {} contrebasse@67: contrebasse@15: do contrebasse@15: -- lua functions contrebasse@15: local print = print contrebasse@15: local ipairs = ipairs contrebasse@15: local tinsert = tinsert contrebasse@67: local select = select contrebasse@0: contrebasse@15: -- Wow functions contrebasse@15: local GetNumTradeSkills = GetNumTradeSkills contrebasse@15: local GetTradeSkillInfo = GetTradeSkillInfo contrebasse@15: local GetTradeSkillNumReagents = GetTradeSkillNumReagents contrebasse@15: local GetTradeSkillItemLink = GetTradeSkillItemLink contrebasse@67: local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink contrebasse@15: local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink contrebasse@15: local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo contrebasse@15: local GetTradeSkillNumMade = GetTradeSkillNumMade contrebasse@67: local GetSpellInfo = GetSpellInfo contrebasse@67: contrebasse@67: -- Wow objects contrebasse@67: local GetTradeSkillLine = GetTradeSkillLine contrebasse@0: contrebasse@15: -- the function who scans the tradeskill contrebasse@15: function A:ScanSimpleRecipes() contrebasse@26: -- Check if the tradeskill is loaded contrebasse@26: -- Has to have recipes and begin with a header contrebasse@26: local NRecipes = GetNumTradeSkills() contrebasse@26: if NRecipes==0 or select(2,GetTradeSkillInfo(1))~="header" then contrebasse@26: return contrebasse@26: end contrebasse@66: contrebasse@67: -- Check if the pseudo tradeskills have to be added contrebasse@67: if GetTradeSkillLine() == GetSpellInfo(25229) then -- Jewelcrafting contrebasse@67: if not A.ProspectingDataLoaded then contrebasse@68: for itemID,data in pairs(A.ProspectingData) do contrebasse@67: A.data[itemID] = data contrebasse@67: end contrebasse@67: A.ProspectingDataLoaded = true contrebasse@67: end contrebasse@67: elseif GetTradeSkillLine:GetText() == GetSpellInfo(45357) then -- Inscription contrebasse@67: if not A.MillingDataLoaded then contrebasse@68: for itemID,data in pairs(A.MillingData) do contrebasse@67: A.data[itemID] = data contrebasse@67: end contrebasse@67: A.MillingDataLoaded = true contrebasse@67: end contrebasse@67: end contrebasse@67: contrebasse@26: for i = 2,NRecipes do -- The first one is a header contrebasse@15: local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i) contrebasse@15: if skillType ~= "header" then contrebasse@36: --if GetTradeSkillNumReagents(i) == 1 then contrebasse@15: -- item ID contrebasse@15: local itemID = A.link2ID(GetTradeSkillItemLink(i)) contrebasse@0: contrebasse@67: -- reagent ID, valid only if there's only one reagent as we take only the first one contrebasse@15: local reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) contrebasse@14: contrebasse@15: -- reagent number needed contrebasse@67: local _, _, reagentCount, _ = GetTradeSkillReagentInfo(i, 1) contrebasse@14: contrebasse@15: -- number of reagent created by the recipe contrebasse@15: local minMade, maxMade = GetTradeSkillNumMade(i) contrebasse@66: contrebasse@30: -- recipe link (for tooltips) contrebasse@30: local recipeLink = GetTradeSkillRecipeLink(i) contrebasse@0: contrebasse@15: -- error checking contrebasse@30: if not reagentID or not reagentCount or not skillName or not itemID or not minMade or not maxMade or not recipeLink then contrebasse@64: --@debug@ contrebasse@30: print("Erreur de scan :",itemID,skillName,reagentID,reagentCount,minMade,maxMade,recipeLink) contrebasse@64: --@end-debug@ contrebasse@66: contrebasse@37: else -- Zap incomplete recipes, they will be scanned later contrebasse@37: -- remove unneeded minMade/maxMade contrebasse@37: if maxMade==minMade then contrebasse@37: maxMade = nil contrebasse@37: if minMade==1 then contrebasse@37: minMade = nil contrebasse@37: end -- if contrebasse@37: end -- if contrebasse@15: contrebasse@37: -- skillName or...??? contrebasse@37: -- There's still a problem when multiple recipes craft the same item contrebasse@37: if not A.data[itemID] then contrebasse@37: A.data[itemID] = {} contrebasse@15: end -- if contrebasse@37: local newSpell = true contrebasse@37: for _,v in ipairs(A.data[itemID]) do contrebasse@37: if v.spellName==skillName then contrebasse@37: newSpell = nil contrebasse@37: break contrebasse@37: end -- if contrebasse@37: end -- for contrebasse@37: if newSpell then contrebasse@37: A.data[itemID].spellLink = recipeLink contrebasse@38: A.data[itemID].manyReagents = A.data[itemID].manyReagents or GetTradeSkillNumReagents(i)>1 contrebasse@37: tinsert(A.data[itemID],{reagentID,reagentCount,minMade,maxMade,spellName=skillName}) contrebasse@15: end -- if contrebasse@15: end -- if contrebasse@36: --end -- if contrebasse@0: end -- if contrebasse@15: end -- for contrebasse@66: contrebasse@26: -- the scanning is complete contrebasse@26: return true contrebasse@15: end -- function contrebasse@15: end -- do