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