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@67
|
6 A.data = {}
|
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@15
|
12 local tinsert = tinsert
|
contrebasse@67
|
13 local select = select
|
contrebasse@0
|
14
|
contrebasse@15
|
15 -- Wow functions
|
contrebasse@15
|
16 local GetNumTradeSkills = GetNumTradeSkills
|
contrebasse@15
|
17 local GetTradeSkillInfo = GetTradeSkillInfo
|
contrebasse@15
|
18 local GetTradeSkillNumReagents = GetTradeSkillNumReagents
|
contrebasse@15
|
19 local GetTradeSkillItemLink = GetTradeSkillItemLink
|
contrebasse@67
|
20 local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink
|
contrebasse@15
|
21 local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink
|
contrebasse@15
|
22 local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo
|
contrebasse@15
|
23 local GetTradeSkillNumMade = GetTradeSkillNumMade
|
contrebasse@67
|
24 local GetSpellInfo = GetSpellInfo
|
contrebasse@67
|
25
|
contrebasse@67
|
26 -- Wow objects
|
contrebasse@67
|
27 local GetTradeSkillLine = GetTradeSkillLine
|
contrebasse@0
|
28
|
contrebasse@15
|
29 -- the function who scans the tradeskill
|
contrebasse@15
|
30 function A:ScanSimpleRecipes()
|
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@70
|
37
|
contrebasse@70
|
38 tradeskillID = GetTradeSkillLine()
|
contrebasse@66
|
39
|
contrebasse@67
|
40 -- Check if the pseudo tradeskills have to be added
|
contrebasse@70
|
41 if tradeskillID == 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@70
|
48 elseif tradeskillID == 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@26
|
57 for i = 2,NRecipes do -- The first one is a header
|
contrebasse@70
|
58 -- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index)
|
contrebasse@70
|
59 -- serviceType is nil if the recipe creates an item
|
contrebasse@70
|
60 local _, skillType, _, _, serviceType = GetTradeSkillInfo(i)
|
contrebasse@70
|
61 if skillType and skillType ~= "header" and serviceType==nil then
|
contrebasse@70
|
62 -- item ID
|
contrebasse@70
|
63 local itemID = A.link2ID(GetTradeSkillItemLink(i))
|
contrebasse@0
|
64
|
contrebasse@70
|
65 -- reagent ID, valid only if there's only one reagent as we take only the first one
|
contrebasse@70
|
66 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1))
|
contrebasse@14
|
67
|
contrebasse@70
|
68 -- reagent number needed
|
contrebasse@70
|
69 local _, _, reagentCount, _ = GetTradeSkillReagentInfo(i, 1)
|
contrebasse@14
|
70
|
contrebasse@70
|
71 -- number of reagent created by the recipe
|
contrebasse@70
|
72 local minMade, maxMade = GetTradeSkillNumMade(i)
|
contrebasse@66
|
73
|
contrebasse@70
|
74 -- recipe link (for tooltips)
|
contrebasse@70
|
75 local recipeLink = GetTradeSkillRecipeLink(i)
|
contrebasse@0
|
76
|
contrebasse@70
|
77 -- error checking
|
contrebasse@70
|
78 if itemID and reagentID and reagentCount and minMade and maxMade and recipeLink then
|
contrebasse@70
|
79 -- remove unneeded minMade/maxMade
|
contrebasse@70
|
80 if maxMade==minMade then
|
contrebasse@70
|
81 maxMade = nil
|
contrebasse@70
|
82 if minMade==1 then
|
contrebasse@70
|
83 minMade = nil
|
contrebasse@70
|
84 end -- if
|
contrebasse@70
|
85 end -- if
|
contrebasse@66
|
86
|
contrebasse@70
|
87 -- As we scan multiple times, check if this recipe is already stored
|
contrebasse@70
|
88 local addSpell = true
|
contrebasse@70
|
89 if not A.data[itemID] then
|
contrebasse@70
|
90 A.data[itemID] = {}
|
contrebasse@70
|
91 else
|
contrebasse@37
|
92 for _,v in ipairs(A.data[itemID]) do
|
contrebasse@70
|
93 if v.spellLink==recipeLink then
|
contrebasse@70
|
94 addSpell = nil
|
contrebasse@37
|
95 break
|
contrebasse@37
|
96 end -- if
|
contrebasse@37
|
97 end -- for
|
contrebasse@15
|
98 end -- if
|
contrebasse@70
|
99
|
contrebasse@70
|
100 -- Cache the data
|
contrebasse@70
|
101 if addSpell then
|
contrebasse@70
|
102 local spell = {reagentID,reagentCount,minMade,maxMade}
|
contrebasse@70
|
103 spell.spellID = tradeskillID
|
contrebasse@70
|
104 spell.spellLink = recipeLink
|
contrebasse@70
|
105 spell.manyReagents = GetTradeSkillNumReagents(i)>1
|
contrebasse@70
|
106 tinsert(A.data[itemID],spell)
|
contrebasse@70
|
107 end
|
contrebasse@70
|
108
|
contrebasse@70
|
109 else -- Zap incomplete recipes, they will be scanned later
|
contrebasse@70
|
110 --@debug@
|
contrebasse@70
|
111 print("Erreur de scan :",itemID,reagentID,reagentCount,minMade,maxMade,recipeLink)
|
contrebasse@70
|
112 --@end-debug@
|
contrebasse@70
|
113 end -- if
|
contrebasse@0
|
114 end -- if
|
contrebasse@15
|
115 end -- for
|
contrebasse@66
|
116
|
contrebasse@70
|
117 zzz = A.data
|
contrebasse@26
|
118 -- the scanning is complete
|
contrebasse@26
|
119 return true
|
contrebasse@15
|
120 end -- function
|
contrebasse@15
|
121 end -- do
|