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@68
|
45 for itemID,data in pairs(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@68
|
52 for itemID,data in pairs(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
|