annotate data.lua @ 117:e6bb47c6d8d6

Hopefuly fixed ticket #1
author contrebasse
date Sun, 19 Jun 2011 13:04:37 +0200
parents d60d6b4cab0c
children c32d6bf6cfc1
rev   line source
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