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