contrebasse@0: local addonName, A = ... contrebasse@0: contrebasse@93: A.data = A.CommonData contrebasse@67: contrebasse@15: do contrebasse@15: -- lua functions contrebasse@15: local print = print contrebasse@15: local ipairs = ipairs contrebasse@108: local pairs = pairs 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@82: -- Do not scan while we modify the tradeskill display contrebasse@82: if A.blockScan then return end contrebasse@82: 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@108: contrebasse@108: local tradeskillName = GetTradeSkillLine() contrebasse@66: contrebasse@67: -- Check if the pseudo tradeskills have to be added contrebasse@85: if tradeskillName == 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@85: elseif tradeskillName == 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@82: local lastHeader contrebasse@117: local isScanCorrect = true contrebasse@82: for i = 1,NRecipes do contrebasse@70: -- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index) contrebasse@70: -- serviceType is nil if the recipe creates an item contrebasse@82: local skillName, skillType, _, _, serviceType = GetTradeSkillInfo(i) contrebasse@117: if not skillName then return end contrebasse@117: contrebasse@117: -- Save the name of the header contrebasse@82: if skillType and skillType == "header" then contrebasse@82: lastHeader = skillName contrebasse@82: contrebasse@117: -- Analyse recipe contrebasse@82: elseif skillType and skillType ~= "header" and serviceType==nil then contrebasse@117: local isRecipeCorrect = true contrebasse@117: contrebasse@70: -- item ID contrebasse@70: local itemID = A.link2ID(GetTradeSkillItemLink(i)) contrebasse@117: if not itemID then isRecipeCorrect = false; end contrebasse@0: contrebasse@93: local numReagents = GetTradeSkillNumReagents(i) contrebasse@117: if not numReagents then isRecipeCorrect = false; end contrebasse@117: contrebasse@93: local reagentID, reagentCount contrebasse@93: if numReagents==1 then contrebasse@93: -- reagent ID contrebasse@93: reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) contrebasse@117: if not reagentID then isRecipeCorrect = false; end contrebasse@14: contrebasse@93: -- reagent number needed contrebasse@93: reagentCount = select(3,GetTradeSkillReagentInfo(i, 1)) contrebasse@117: if not reagentCount then isRecipeCorrect = false; end contrebasse@108: else contrebasse@117: -- no reagentID (is already nil) contrebasse@117: --reagentID = nil contrebasse@108: contrebasse@108: -- contains data for the whole reagents contrebasse@108: reagentCount = {} contrebasse@108: for j = 1,numReagents do contrebasse@117: local id = A.link2ID(GetTradeSkillReagentItemLink(i, j)) contrebasse@117: local num = select(3,GetTradeSkillReagentInfo(i, j)) contrebasse@117: if not id or not num then isRecipeCorrect = false; break; end contrebasse@117: tinsert(reagentCount,{id, num}) contrebasse@108: end contrebasse@93: end contrebasse@14: contrebasse@70: -- number of reagent created by the recipe contrebasse@70: local minMade, maxMade = GetTradeSkillNumMade(i) contrebasse@117: if not minMade or not maxMade then isRecipeCorrect = false; end contrebasse@66: contrebasse@70: -- recipe link (for tooltips) contrebasse@70: local recipeLink = GetTradeSkillRecipeLink(i) contrebasse@117: if not recipeLink then isRecipeCorrect = false; end contrebasse@0: contrebasse@117: if not isRecipeCorrect then contrebasse@117: print("Recette incorrecte") contrebasse@117: isScanCorrect = false contrebasse@117: end contrebasse@70: -- error checking contrebasse@117: if isRecipeCorrect then contrebasse@70: -- remove unneeded minMade/maxMade contrebasse@70: if maxMade==minMade then contrebasse@70: maxMade = nil contrebasse@70: if minMade==1 then contrebasse@70: minMade = nil contrebasse@70: end -- if contrebasse@70: end -- if contrebasse@66: contrebasse@70: -- As we scan multiple times, check if this recipe is already stored contrebasse@70: local addSpell = true contrebasse@70: if not A.data[itemID] then contrebasse@70: A.data[itemID] = {} contrebasse@70: else contrebasse@37: for _,v in ipairs(A.data[itemID]) do contrebasse@70: if v.spellLink==recipeLink then contrebasse@70: addSpell = nil contrebasse@37: break contrebasse@37: end -- if contrebasse@37: end -- for contrebasse@15: end -- if contrebasse@108: contrebasse@70: -- Cache the data contrebasse@70: if addSpell then contrebasse@70: local spell = {reagentID,reagentCount,minMade,maxMade} contrebasse@110: spell.skillName = skillName contrebasse@110: spell.tradeskillName = tradeskillName contrebasse@70: spell.spellLink = recipeLink contrebasse@82: spell.header = lastHeader contrebasse@70: tinsert(A.data[itemID],spell) contrebasse@70: end contrebasse@70: end -- if contrebasse@0: end -- if contrebasse@15: end -- for contrebasse@26: -- the scanning is complete contrebasse@117: if not isScanCorrect then contrebasse@117: print("Erreur dans le scan") contrebasse@117: end contrebasse@117: return isScanCorrect contrebasse@15: end -- function contrebasse@15: end -- do