annotate data.lua @ 67:cd7e41015586

Separate Mill and Prospect, and load them only if needed
author contrebasse
date Sat, 14 May 2011 16:27:34 +0200
parents 2ca04183f5f9
children 42aac950bd67
rev   line source
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