annotate data.lua @ 131:9a1260047e35

Update milling data
author contrebasse <contrebasse@gmail.com>
date Thu, 30 Jul 2015 00:53:10 +0200
parents c32d6bf6cfc1
children
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 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