contrebasse@0
|
1 local addonName, A = ...
|
contrebasse@0
|
2
|
contrebasse@93
|
3 A.data = A.CommonData
|
contrebasse@67
|
4
|
contrebasse@15
|
5 do
|
contrebasse@15
|
6 -- lua functions
|
contrebasse@15
|
7 local print = print
|
contrebasse@15
|
8 local ipairs = ipairs
|
contrebasse@108
|
9 local pairs = pairs
|
contrebasse@15
|
10 local tinsert = tinsert
|
contrebasse@67
|
11 local select = select
|
contrebasse@0
|
12
|
contrebasse@15
|
13 -- Wow functions
|
contrebasse@15
|
14 local GetNumTradeSkills = GetNumTradeSkills
|
contrebasse@15
|
15 local GetTradeSkillInfo = GetTradeSkillInfo
|
contrebasse@15
|
16 local GetTradeSkillNumReagents = GetTradeSkillNumReagents
|
contrebasse@15
|
17 local GetTradeSkillItemLink = GetTradeSkillItemLink
|
contrebasse@67
|
18 local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink
|
contrebasse@15
|
19 local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink
|
contrebasse@15
|
20 local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo
|
contrebasse@15
|
21 local GetTradeSkillNumMade = GetTradeSkillNumMade
|
contrebasse@67
|
22 local GetSpellInfo = GetSpellInfo
|
contrebasse@67
|
23
|
contrebasse@67
|
24 -- Wow objects
|
contrebasse@67
|
25 local GetTradeSkillLine = GetTradeSkillLine
|
contrebasse@0
|
26
|
contrebasse@15
|
27 -- the function who scans the tradeskill
|
contrebasse@15
|
28 function A:ScanSimpleRecipes()
|
contrebasse@82
|
29 -- Do not scan while we modify the tradeskill display
|
contrebasse@82
|
30 if A.blockScan then return end
|
contrebasse@82
|
31
|
contrebasse@26
|
32 -- Check if the tradeskill is loaded
|
contrebasse@26
|
33 -- Has to have recipes and begin with a header
|
contrebasse@26
|
34 local NRecipes = GetNumTradeSkills()
|
contrebasse@26
|
35 if NRecipes==0 or select(2,GetTradeSkillInfo(1))~="header" then
|
contrebasse@26
|
36 return
|
contrebasse@26
|
37 end
|
contrebasse@108
|
38
|
contrebasse@108
|
39 local tradeskillName = GetTradeSkillLine()
|
contrebasse@66
|
40
|
contrebasse@67
|
41 -- Check if the pseudo tradeskills have to be added
|
contrebasse@85
|
42 if tradeskillName == GetSpellInfo(25229) then -- Jewelcrafting
|
contrebasse@67
|
43 if not A.ProspectingDataLoaded then
|
contrebasse@68
|
44 for itemID,data in pairs(A.ProspectingData) do
|
contrebasse@67
|
45 A.data[itemID] = data
|
contrebasse@67
|
46 end
|
contrebasse@67
|
47 A.ProspectingDataLoaded = true
|
contrebasse@67
|
48 end
|
contrebasse@85
|
49 elseif tradeskillName == GetSpellInfo(45357) then -- Inscription
|
contrebasse@67
|
50 if not A.MillingDataLoaded then
|
contrebasse@68
|
51 for itemID,data in pairs(A.MillingData) do
|
contrebasse@67
|
52 A.data[itemID] = data
|
contrebasse@67
|
53 end
|
contrebasse@67
|
54 A.MillingDataLoaded = true
|
contrebasse@67
|
55 end
|
contrebasse@67
|
56 end
|
contrebasse@67
|
57
|
contrebasse@82
|
58 local lastHeader
|
contrebasse@117
|
59 local isScanCorrect = true
|
contrebasse@82
|
60 for i = 1,NRecipes do
|
contrebasse@70
|
61 -- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index)
|
contrebasse@70
|
62 -- serviceType is nil if the recipe creates an item
|
contrebasse@82
|
63 local skillName, skillType, _, _, serviceType = GetTradeSkillInfo(i)
|
contrebasse@117
|
64 if not skillName then return end
|
contrebasse@117
|
65
|
contrebasse@117
|
66 -- Save the name of the header
|
contrebasse@82
|
67 if skillType and skillType == "header" then
|
contrebasse@82
|
68 lastHeader = skillName
|
contrebasse@82
|
69
|
contrebasse@117
|
70 -- Analyse recipe
|
contrebasse@82
|
71 elseif skillType and skillType ~= "header" and serviceType==nil then
|
contrebasse@117
|
72 local isRecipeCorrect = true
|
contrebasse@117
|
73
|
contrebasse@70
|
74 -- item ID
|
contrebasse@70
|
75 local itemID = A.link2ID(GetTradeSkillItemLink(i))
|
contrebasse@117
|
76 if not itemID then isRecipeCorrect = false; end
|
contrebasse@0
|
77
|
contrebasse@93
|
78 local numReagents = GetTradeSkillNumReagents(i)
|
contrebasse@117
|
79 if not numReagents then isRecipeCorrect = false; end
|
contrebasse@117
|
80
|
contrebasse@93
|
81 local reagentID, reagentCount
|
contrebasse@93
|
82 if numReagents==1 then
|
contrebasse@93
|
83 -- reagent ID
|
contrebasse@93
|
84 reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1))
|
contrebasse@117
|
85 if not reagentID then isRecipeCorrect = false; end
|
contrebasse@14
|
86
|
contrebasse@93
|
87 -- reagent number needed
|
contrebasse@93
|
88 reagentCount = select(3,GetTradeSkillReagentInfo(i, 1))
|
contrebasse@117
|
89 if not reagentCount then isRecipeCorrect = false; end
|
contrebasse@108
|
90 else
|
contrebasse@117
|
91 -- no reagentID (is already nil)
|
contrebasse@117
|
92 --reagentID = nil
|
contrebasse@108
|
93
|
contrebasse@108
|
94 -- contains data for the whole reagents
|
contrebasse@108
|
95 reagentCount = {}
|
contrebasse@108
|
96 for j = 1,numReagents do
|
contrebasse@117
|
97 local id = A.link2ID(GetTradeSkillReagentItemLink(i, j))
|
contrebasse@117
|
98 local num = select(3,GetTradeSkillReagentInfo(i, j))
|
contrebasse@117
|
99 if not id or not num then isRecipeCorrect = false; break; end
|
contrebasse@117
|
100 tinsert(reagentCount,{id, num})
|
contrebasse@108
|
101 end
|
contrebasse@93
|
102 end
|
contrebasse@14
|
103
|
contrebasse@70
|
104 -- number of reagent created by the recipe
|
contrebasse@70
|
105 local minMade, maxMade = GetTradeSkillNumMade(i)
|
contrebasse@117
|
106 if not minMade or not maxMade then isRecipeCorrect = false; end
|
contrebasse@66
|
107
|
contrebasse@70
|
108 -- recipe link (for tooltips)
|
contrebasse@70
|
109 local recipeLink = GetTradeSkillRecipeLink(i)
|
contrebasse@117
|
110 if not recipeLink then isRecipeCorrect = false; end
|
contrebasse@0
|
111
|
contrebasse@117
|
112 if not isRecipeCorrect then
|
contrebasse@117
|
113 print("Recette incorrecte")
|
contrebasse@117
|
114 isScanCorrect = false
|
contrebasse@117
|
115 end
|
contrebasse@70
|
116 -- error checking
|
contrebasse@117
|
117 if isRecipeCorrect then
|
contrebasse@70
|
118 -- remove unneeded minMade/maxMade
|
contrebasse@70
|
119 if maxMade==minMade then
|
contrebasse@70
|
120 maxMade = nil
|
contrebasse@70
|
121 if minMade==1 then
|
contrebasse@70
|
122 minMade = nil
|
contrebasse@70
|
123 end -- if
|
contrebasse@70
|
124 end -- if
|
contrebasse@66
|
125
|
contrebasse@70
|
126 -- As we scan multiple times, check if this recipe is already stored
|
contrebasse@70
|
127 local addSpell = true
|
contrebasse@70
|
128 if not A.data[itemID] then
|
contrebasse@70
|
129 A.data[itemID] = {}
|
contrebasse@70
|
130 else
|
contrebasse@37
|
131 for _,v in ipairs(A.data[itemID]) do
|
contrebasse@70
|
132 if v.spellLink==recipeLink then
|
contrebasse@70
|
133 addSpell = nil
|
contrebasse@37
|
134 break
|
contrebasse@37
|
135 end -- if
|
contrebasse@37
|
136 end -- for
|
contrebasse@15
|
137 end -- if
|
contrebasse@108
|
138
|
contrebasse@70
|
139 -- Cache the data
|
contrebasse@70
|
140 if addSpell then
|
contrebasse@70
|
141 local spell = {reagentID,reagentCount,minMade,maxMade}
|
contrebasse@110
|
142 spell.skillName = skillName
|
contrebasse@110
|
143 spell.tradeskillName = tradeskillName
|
contrebasse@70
|
144 spell.spellLink = recipeLink
|
contrebasse@82
|
145 spell.header = lastHeader
|
contrebasse@70
|
146 tinsert(A.data[itemID],spell)
|
contrebasse@70
|
147 end
|
contrebasse@70
|
148 end -- if
|
contrebasse@0
|
149 end -- if
|
contrebasse@15
|
150 end -- for
|
contrebasse@26
|
151 -- the scanning is complete
|
contrebasse@117
|
152 if not isScanCorrect then
|
contrebasse@117
|
153 print("Erreur dans le scan")
|
contrebasse@117
|
154 end
|
contrebasse@117
|
155 return isScanCorrect
|
contrebasse@15
|
156 end -- function
|
contrebasse@15
|
157 end -- do
|