annotate data.lua @ 96:e3147b41ea9d v1.0beta9

Correct display, tooltips and error message when there are actual tradeskill spells in the SecureMenu. Still not sure that it works with enough reagents...
author contrebasse
date Fri, 20 May 2011 00:53:42 +0200
parents c369a2e16ab6
children b980c00affcd
rev   line source
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@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@82 31 -- Do not scan while we modify the tradeskill display
contrebasse@82 32 if A.blockScan then return end
contrebasse@82 33
contrebasse@82 34
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@70 41
contrebasse@85 42 tradeskillName = GetTradeSkillLine()
contrebasse@66 43
contrebasse@67 44 -- Check if the pseudo tradeskills have to be added
contrebasse@85 45 if tradeskillName == GetSpellInfo(25229) then -- Jewelcrafting
contrebasse@67 46 if not A.ProspectingDataLoaded then
contrebasse@68 47 for itemID,data in pairs(A.ProspectingData) do
contrebasse@67 48 A.data[itemID] = data
contrebasse@67 49 end
contrebasse@67 50 A.ProspectingDataLoaded = true
contrebasse@67 51 end
contrebasse@85 52 elseif tradeskillName == GetSpellInfo(45357) then -- Inscription
contrebasse@67 53 if not A.MillingDataLoaded then
contrebasse@68 54 for itemID,data in pairs(A.MillingData) do
contrebasse@67 55 A.data[itemID] = data
contrebasse@67 56 end
contrebasse@67 57 A.MillingDataLoaded = true
contrebasse@67 58 end
contrebasse@67 59 end
contrebasse@67 60
contrebasse@82 61 local lastHeader
contrebasse@82 62 for i = 1,NRecipes do
contrebasse@70 63 -- skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index)
contrebasse@70 64 -- serviceType is nil if the recipe creates an item
contrebasse@82 65 local skillName, skillType, _, _, serviceType = GetTradeSkillInfo(i)
contrebasse@82 66 if skillType and skillType == "header" then
contrebasse@82 67 lastHeader = skillName
contrebasse@82 68
contrebasse@82 69 elseif skillType and skillType ~= "header" and serviceType==nil then
contrebasse@70 70 -- item ID
contrebasse@70 71 local itemID = A.link2ID(GetTradeSkillItemLink(i))
contrebasse@0 72
contrebasse@93 73 local numReagents = GetTradeSkillNumReagents(i)
contrebasse@93 74 local reagentID, reagentCount
contrebasse@93 75 if numReagents==1 then
contrebasse@93 76 -- reagent ID
contrebasse@93 77 reagentID = A.link2ID(GetTradeSkillReagentItemLink(i, 1))
contrebasse@14 78
contrebasse@93 79 -- reagent number needed
contrebasse@93 80 reagentCount = select(3,GetTradeSkillReagentInfo(i, 1))
contrebasse@93 81 end
contrebasse@14 82
contrebasse@70 83 -- number of reagent created by the recipe
contrebasse@70 84 local minMade, maxMade = GetTradeSkillNumMade(i)
contrebasse@66 85
contrebasse@70 86 -- recipe link (for tooltips)
contrebasse@70 87 local recipeLink = GetTradeSkillRecipeLink(i)
contrebasse@0 88
contrebasse@70 89 -- error checking
contrebasse@93 90 if itemID and (numReagents ~= 1 or (reagentID and reagentCount)) and minMade and maxMade and recipeLink then
contrebasse@70 91 -- remove unneeded minMade/maxMade
contrebasse@70 92 if maxMade==minMade then
contrebasse@70 93 maxMade = nil
contrebasse@70 94 if minMade==1 then
contrebasse@70 95 minMade = nil
contrebasse@70 96 end -- if
contrebasse@70 97 end -- if
contrebasse@66 98
contrebasse@70 99 -- As we scan multiple times, check if this recipe is already stored
contrebasse@70 100 local addSpell = true
contrebasse@70 101 if not A.data[itemID] then
contrebasse@70 102 A.data[itemID] = {}
contrebasse@70 103 else
contrebasse@37 104 for _,v in ipairs(A.data[itemID]) do
contrebasse@70 105 if v.spellLink==recipeLink then
contrebasse@70 106 addSpell = nil
contrebasse@37 107 break
contrebasse@37 108 end -- if
contrebasse@37 109 end -- for
contrebasse@15 110 end -- if
contrebasse@70 111
contrebasse@70 112 -- Cache the data
contrebasse@70 113 if addSpell then
contrebasse@70 114 local spell = {reagentID,reagentCount,minMade,maxMade}
contrebasse@85 115 spell.spellName = tradeskillName
contrebasse@70 116 spell.spellLink = recipeLink
contrebasse@82 117 spell.header = lastHeader
contrebasse@70 118 tinsert(A.data[itemID],spell)
contrebasse@70 119 end
contrebasse@70 120
contrebasse@84 121 --else -- Zap incomplete recipes, they will be scanned later
contrebasse@70 122 --@debug@
contrebasse@84 123 --print("Erreur de scan :",itemID,reagentID,reagentCount,minMade,maxMade,recipeLink)
contrebasse@70 124 --@end-debug@
contrebasse@70 125 end -- if
contrebasse@0 126 end -- if
contrebasse@15 127 end -- for
contrebasse@66 128
contrebasse@70 129 zzz = A.data
contrebasse@26 130 -- the scanning is complete
contrebasse@26 131 return true
contrebasse@15 132 end -- function
contrebasse@15 133 end -- do