contrebasse@0: local addonName, A = ... contrebasse@0: contrebasse@67: -- @todo: enchants, elementals, prospecting contrebasse@0: -- @todo improve scanning 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@82: -- Do not scan while we modify the tradeskill display contrebasse@82: if A.blockScan then return end contrebasse@82: 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@70: contrebasse@85: 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@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@82: if skillType and skillType == "header" then contrebasse@82: lastHeader = skillName contrebasse@82: contrebasse@82: elseif skillType and skillType ~= "header" and serviceType==nil then contrebasse@70: -- item ID contrebasse@70: local itemID = A.link2ID(GetTradeSkillItemLink(i)) contrebasse@0: contrebasse@70: -- reagent ID, valid only if there's only one reagent as we take only the first one contrebasse@70: local reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1)) contrebasse@14: contrebasse@70: -- reagent number needed contrebasse@70: local _, _, reagentCount, _ = GetTradeSkillReagentInfo(i, 1) contrebasse@14: contrebasse@70: -- number of reagent created by the recipe contrebasse@70: local minMade, maxMade = GetTradeSkillNumMade(i) contrebasse@66: contrebasse@70: -- recipe link (for tooltips) contrebasse@70: local recipeLink = GetTradeSkillRecipeLink(i) contrebasse@0: contrebasse@70: -- error checking contrebasse@70: if itemID and reagentID and reagentCount and minMade and maxMade and recipeLink 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@70: contrebasse@70: -- Cache the data contrebasse@70: if addSpell then contrebasse@70: local spell = {reagentID,reagentCount,minMade,maxMade} contrebasse@85: spell.spellName = tradeskillName contrebasse@70: spell.spellLink = recipeLink contrebasse@82: spell.header = lastHeader contrebasse@70: spell.manyReagents = GetTradeSkillNumReagents(i)>1 contrebasse@70: tinsert(A.data[itemID],spell) contrebasse@70: end contrebasse@70: contrebasse@84: --else -- Zap incomplete recipes, they will be scanned later contrebasse@70: --@debug@ contrebasse@84: --print("Erreur de scan :",itemID,reagentID,reagentCount,minMade,maxMade,recipeLink) contrebasse@70: --@end-debug@ contrebasse@70: end -- if contrebasse@0: end -- if contrebasse@15: end -- for contrebasse@66: contrebasse@70: zzz = A.data contrebasse@26: -- the scanning is complete contrebasse@26: return true contrebasse@15: end -- function contrebasse@15: end -- do