From 2342ed4278295182e9fa3da51dc29a68a026d597 Mon Sep 17 00:00:00 2001 From: Paul Schifferer Date: Mon, 20 Dec 2010 22:08:11 -0800 Subject: [PATCH] Tweaked the layout of reagents when a skill is expanded. Eliminated some unneeded event registrations, and moved around some events so they're only registered when needed. Eliminated rescans and isolated an issue where some reagents would be incomplete (and a client hiccup occurs). --- CauldronMain.lua | 143 ++++++----------------- CauldronMain.xml | 18 +-- CauldronMainUI.lua | 30 +++-- CauldronTradeskill.lua | 298 ++++++++++++++++++++++++++++-------------------- 4 files changed, 239 insertions(+), 250 deletions(-) diff --git a/CauldronMain.lua b/CauldronMain.lua index a40223a..368bd4f 100644 --- a/CauldronMain.lua +++ b/CauldronMain.lua @@ -284,28 +284,12 @@ function Cauldron:OnEnable() -- register for events we're interested in self:RegisterEvent("TRADE_SKILL_SHOW", "OnTradeShow"); - self:RegisterEvent("TRADE_SKILL_UPDATE", "OnSkillUpdate"); self:RegisterEvent("TRADE_SKILL_CLOSE", "OnTradeClose"); --- self:RegisterEvent("TRADE_TARGET_ITEM_CHANGED", "OnTradeItemChanged"); - self:RegisterEvent("SKILL_LINES_CHANGED", "OnSkillUpdate"); self:RegisterEvent("ADDON_LOADED", "OnAddonLoaded"); - self:RegisterEvent("UNIT_PORTRAIT_UPDATE", "OnEvent"); self:RegisterEvent("BANKFRAME_OPENED", "OnBankOpened"); self:RegisterEvent("BANKFRAME_CLOSED", "OnBankClosed"); --- self:RegisterEvent("PLAYERBANKSLOTS_CHANGED"); --- self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED"); self:RegisterEvent("MERCHANT_SHOW", "OnMerchantShow"); --- self:RegisterEvent("MERCHANT_UPDATE"); self:RegisterEvent("MERCHANT_CLOSED", "OnMerchantClose"); - self:RegisterEvent("BAG_UPDATE", "OnBagUpdate"); --- self:RegisterEvent("TRAINER_CLOSED"); --- self:RegisterEvent("PLAYER_REGEN_DISABLED"); --- self:RegisterEvent("PLAYER_REGEN_ENABLED", "PlayerRegenEnabled"); --- self:RegisterEvent("AUCTION_HOUSE_CLOSED"); --- self:RegisterEvent("AUCTION_HOUSE_SHOW"); --- self:RegisterEvent("CRAFT_SHOW", "OnCraftShow"); --- self:RegisterEvent("CRAFT_CLOSE", "OnCraftClose"); --- self:RegisterEvent("PLAYER_LOGOUT"); self:RegisterEvent("UI_ERROR_MESSAGE", "OnError"); self:RegisterEvent("UNIT_QUEST_LOG_CHANGED", "OnQuestLogChanged"); self:RegisterEvent("ACHIEVEMENT_EARNED", "OnAchievementEarned"); @@ -366,7 +350,7 @@ function Cauldron:OnTradeShow() -- update our known skills if not Cauldron.updatingSkills then - Cauldron.updatingSkills = Cauldron:NeedsSkillUpdate(); + Cauldron.updatingSkills = true; -- Cauldron:NeedsSkillUpdate(); Cauldron:UpdateSkills(); end @@ -383,7 +367,7 @@ function Cauldron:OnTradeShow() end -function Cauldron:OnTradeUpdate() +function Cauldron:OnTradeUpdate(event) -- TODO @@ -404,8 +388,8 @@ function Cauldron:OnTradeClose() end function Cauldron:OnSkillUpdate(event) ---Cauldron:info("skill update: event="..tostring(event)); + Cauldron:UpdateSkillItemCounts(); --[[ if CURRENT_TRADESKILL ~= "" then if not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[CURRENT_TRADESKILL] then @@ -435,12 +419,14 @@ function Cauldron:OnTradeSkillRecast() -- keep the processing flag set self.processing = true; - self:UpdateSkills(); +-- self:UpdateSkills(); --- CauldronAmountInputBox:SetNumber(GetTradeskillRepeatCount()); + CauldronInputBox:SetNumber(GetTradeskillRepeatCount()); - Cauldron.needsRedraw = true; - self:Frame_Update(); + Cauldron:UpdateSkillItemCounts(); + Cauldron:UpdateSkillList(); +-- Cauldron.needsRedraw = true; +-- self:Frame_Update(); end @@ -453,88 +439,13 @@ function Cauldron:OnBagUpdate(event, bagid) local queue = self.db.realm.userdata[self.vars.playername].queue; ---[==[ - -- check if the item acquired is in the intermediate list or shopping list - local items = Cauldron:GetItemDeltas(bagid); - self:debug("items="..tostring(items)); - local recalc = false; - for item, itemCount in pairs(items) do - if itemCount > 0 then - -- adjust shopping list - local amtRemoved = CauldronShopping:RemoveFromList(self.db.realm.shopping, self.vars.playername, item, itemCount); - if amtRemoved > 0 then - local str = string.format("%s: %s: %d", L["Shopping list"], item, amtRemoved); - UIErrorsFrame:AddMessage(str, 1.0, 0.5, 0.25, 86, 3); - end - - -- adjust intermediate list - self:debug("OnBagUpdate: adjust intermediate list"); - local intItem = CauldronQueue:GetIntermediateItem(queue, item); - if intItem then - -- the item is found in the intermediate list, so recalculate the queue - self:debug("OnBagUpdate: set recalc flag"); - recalc = true; - - local counts = Cauldron:ReagentCount(item); - local amount = math.min(counts.has, intItem.amount); - local str = string.format("%s: %s: %d, %d %s", L["Intermediate"], item, amount, intItem.amount, L["remaining"]); - if (counts.has - itemCount) < intItem.amount then - UIErrorsFrame:AddMessage(str, 0.0, 0.9, 0.4, 86, 3); - end - else - local rItem = CauldronQueue:GetReagentItem(queue, item); - if rItem then - local counts = Cauldron:ReagentCount(item); - local amount = math.min(counts.has, rItem.amount); - local str = string.format("%s: %s: %d/%d", L["Reagent"], item, amount, rItem.amount); - if amount <= rItem.amount then - UIErrorsFrame:AddMessage(str, 0.0, 0.9, 0.0, 86, 3); - end - end - end - end - end - - if recalc then - self:debug("OnBagUpdate: recalculating queue"); - CauldronQueue:CalculateAllRequiredItems(queue); - Cauldron:UpdateQueue(); - end + CauldronQueue:CalculateAllRequiredItems(queue); + Cauldron:UpdateQueue(); - -- check if we were making something, and then update the queue - --[[ - if self.makingItem then - --@alpha@ - self:debug("OnBagUpdate: self.makingItem="..self.makingItem); - --@end-alpha@ - local count = GetItemCount(self.makingItem); - --@alpha@ - self:debug("OnBagUpdate: count="..count); - self:debug("OnBagUpdate: self.itemCurrentCount="..self.itemCurrentCount); - --@end-alpha@ - if count ~= self.itemCurrentCount then - local delta = self.itemCurrentCount - count; -- TODO: is this necessary? - --@alpha@ - self:debug("OnBagUpdate: delta="..delta); - --@end-alpha@ - CauldronQueue:AdjustItemCount(Cauldron:GetQueue(), self.queueInfo.name, -1); - self.itemCurrentCount = count; - end - else - -- - end - --]] - - -- Cauldron:UpdateSkills(); - - self:Frame_Update(); - Cauldron:UpdateShoppingList(); - - -- update the bags - Cauldron:ScanBags(); - --]==] - + Cauldron:UpdateSkillItemCounts(); Cauldron:UpdateSkillList(); + + Cauldron:UpdateShoppingList(); end @@ -630,6 +541,10 @@ function Cauldron:OnSpellcastSucceed(event, unit, spell, rank) Cauldron.makingItemCount = count; end end + + Cauldron:UpdateSkillItemCounts(); + Cauldron:UpdateSkillList(); + --[[ -- adjust queue, but only if window is open if CauldronFrame:IsShown() then @@ -734,7 +649,7 @@ function Cauldron:QueueTradeSkillItem() local skillInfo = Cauldron:GetSelectedSkill(); if skillInfo then - local amount = TradeSkillInputBox:GetNumber(); + local amount = CauldronInputBox:GetNumber(); if not amount or amount < 1 then amount = 1; end @@ -751,26 +666,32 @@ end function Cauldron:CreateAllTradeSkillItem() if (not PartialPlayTime()) and (not NoPlayTime()) then - CauldronAmountInputBox:ClearFocus(); + CauldronInputBox:ClearFocus(); local skillInfo = Cauldron:GetSelectedSkill(); - CauldronAmountInputBox:SetNumber(skillInfo.available); + CauldronInputBox:SetNumber(skillInfo.available); DoTradeSkill(skillInfo.index, skillInfo.available); + + Cauldron:UpdateSkillItemCounts(); + Cauldron:UpdateSkillList(); end end function Cauldron:CreateTradeSkillItem() - if ( (not PartialPlayTime()) and (not NoPlayTime()) ) then - CauldronAmountInputBox:ClearFocus(); + if ((not PartialPlayTime()) and (not NoPlayTime())) then + CauldronInputBox:ClearFocus(); local skillInfo = Cauldron:GetSelectedSkill(); - local amount = CauldronAmountInputBox:GetNumber(); + local amount = CauldronInputBox:GetNumber(); DoTradeSkill(skillInfo.index, amount); + + Cauldron:UpdateSkillItemCounts(); + Cauldron:UpdateSkillList(); end end @@ -936,6 +857,7 @@ function Cauldron:FirstPage() end self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset = 0; + CauldronSkillListScrollFrame:SetVerticalScroll(0); end function Cauldron:PrevPage() @@ -957,6 +879,7 @@ function Cauldron:PrevPage() else self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset = math.max(0, offset - CAULDRON_SKILL_LIST_MAX); end + CauldronSkillListScrollFrame:SetVerticalScroll(0); end function Cauldron:NextPage() @@ -982,6 +905,7 @@ function Cauldron:NextPage() self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset = offset + CAULDRON_SKILL_LIST_MAX; end end + CauldronSkillListScrollFrame:SetVerticalScroll(0); end function Cauldron:LastPage() @@ -999,6 +923,7 @@ function Cauldron:LastPage() local numSkills = table.getn(Cauldron:GetSkillList(self.vars.playername, skillName)); self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset = math.floor(numSkills / CAULDRON_SKILL_LIST_MAX) * CAULDRON_SKILL_LIST_MAX; + CauldronSkillListScrollFrame:SetVerticalScroll(0); end function Cauldron:GetQueue(player) diff --git a/CauldronMain.xml b/CauldronMain.xml index 034bb1d..8354f2b 100755 --- a/CauldronMain.xml +++ b/CauldronMain.xml @@ -317,7 +317,7 @@ - + @@ -344,7 +344,7 @@ - + @@ -409,6 +409,7 @@ + @@ -437,7 +438,7 @@ - + @@ -1177,11 +1178,7 @@ - if ( (not PartialPlayTime()) and (not NoPlayTime()) ) then - CauldronInputBox:SetNumber(CauldronFrame.numAvailable); - DoTradeSkill(CauldronFrame.selectedSkill, CauldronFrame.numAvailable); - CauldronInputBox:ClearFocus(); - end + Cauldron:CreateAllTradeSkillItem(); @@ -1313,10 +1310,7 @@ - if ( (not PartialPlayTime()) and (not NoPlayTime()) ) then - DoTradeSkill(CauldronFrame.selectedSkill, CauldronInputBox:GetNumber()); - CauldronInputBox:ClearFocus(); - end + Cauldron:CreateTradeSkillItem(); diff --git a/CauldronMainUI.lua b/CauldronMainUI.lua index e597276..51ca9b9 100644 --- a/CauldronMainUI.lua +++ b/CauldronMainUI.lua @@ -59,10 +59,15 @@ function Cauldron:Frame_Show() end --]] - self:RegisterMessage("Cauldron_Update", "OnCauldronUpdate"); +-- self:RegisterMessage("Cauldron_Update", "OnCauldronUpdate"); Cauldron.needsRedraw = true; self:Frame_Update(); + + self:RegisterEvent("TRADE_SKILL_UPDATE", "OnSkillUpdate"); + self:RegisterEvent("SKILL_LINES_CHANGED", "OnSkillUpdate"); + self:RegisterEvent("UNIT_PORTRAIT_UPDATE", "OnEvent"); + self:RegisterEvent("BAG_UPDATE", "OnBagUpdate"); else -- show the Blizzard frame Cauldron.blizzTradeSkillShow(); @@ -72,7 +77,7 @@ end function Cauldron:Frame_Hide() - self:UnregisterEvent("Cauldron_Update"); +-- self:UnregisterEvent("Cauldron_Update"); HideUIPanel(CauldronQueueWindowFrame); HideUIPanel(CauldronFrame); @@ -86,6 +91,11 @@ function Cauldron:Frame_Hide() -- CloseTradeSkill(); + self:UnregisterEvent("TRADE_SKILL_UPDATE"); + self:UnregisterEvent("SKILL_LINES_CHANGED"); + self:UnregisterEvent("UNIT_PORTRAIT_UPDATE"); + self:UnregisterEvent("BAG_UPDATE"); + end function Cauldron:Frame_Toggle() @@ -129,10 +139,10 @@ function Cauldron:Frame_Update() self:UpdateStatus(); -- display list of matching skills - if CAULDRON_TRADESKILL_NAME ~= CURRENT_TRADESKILL then - CAULDRON_TRADESKILL_NAME = CURRENT_TRADESKILL; +-- if CAULDRON_TRADESKILL_NAME ~= CURRENT_TRADESKILL then +-- CAULDRON_TRADESKILL_NAME = CURRENT_TRADESKILL; self:UpdateSkillList(); - end +-- end -- display queue self:UpdateQueue(); @@ -269,7 +279,7 @@ function Cauldron:UpdateFilterDropDowns() end function Cauldron:UpdateSkillList() - + if Cauldron.updatingSkillList then return; end @@ -610,7 +620,13 @@ function Cauldron:UpdateSkillList() -- only adjust height for expanded views if reagentsExpanded then local reagentRows = math.floor((reagentCount - 1) / 4); - reagentDetailsFrame:SetHeight(52 + (_G["CauldronSkillItem"..i.."ItemDetailsReagent1"]:GetHeight() * reagentRows)); + local reqHeight = _G["CauldronSkillItem"..i.."ItemDetailsRequirementText"]:GetHeight(); + local cooldownHeight = _G["CauldronSkillItem"..i.."ItemDetailsSkillCooldown"]:GetHeight(); + local descHeight = _G["CauldronSkillItem"..i.."ItemDetailsDescription"]:GetHeight(); + local detail1Frame = _G["CauldronSkillItem"..i.."ItemDetailsReagent1"]; + local detailHeight = detail1Frame:GetHeight(); + detail1Frame:SetPoint("TOPLEFT", _G["CauldronSkillItem"..i.."ItemDetailsDescription"], "BOTTOMLEFT", 0, -5); + reagentDetailsFrame:SetHeight(40 + (reqHeight + cooldownHeight + descHeight) + (detailHeight * reagentRows)); skillFrame:SetHeight(reagentDetailsFrame:GetHeight() + CAULDRON_SKILLITEM_COLLAPSED_HEIGHT + 2); else skillFrame:SetHeight(CAULDRON_SKILLITEM_COLLAPSED_HEIGHT); diff --git a/CauldronTradeskill.lua b/CauldronTradeskill.lua index 7ba3a87..b2bf10f 100644 --- a/CauldronTradeskill.lua +++ b/CauldronTradeskill.lua @@ -58,6 +58,52 @@ function Cauldron:NeedsSkillUpdate() return false; end +function Cauldron:UpdateSkillItemCounts() + + local skillName, rank, maxRank = GetTradeSkillLine(); + + if skillName == "UNKNOWN" then + return; + end + -- check for linked or guild lists + if IsTradeSkillLinked() then + skillName = "Linked-"..skillName; + end + if IsTradeSkillGuild() then + skillName = "Guild-"..skillName; + end + + local skillDB = self.db.realm.userdata[self.vars.playername].skills[skillName]; + if not skillDB then + return; + end + + for i=1,GetNumTradeSkills() do + local name, difficulty, avail, expanded, verb, numSkillUps = GetTradeSkillInfo(i); + + if name and difficulty ~= "header" then + + local minMade, maxMade = GetTradeSkillNumMade(i); + + if skillDB.recipes[name] then + -- update the recipe info + skillDB.recipes[name].index = i; + skillDB.recipes[name].difficulty = difficulty; + skillDB.recipes[name].available = avail; + skillDB.recipes[name].minMade = minMade; + skillDB.recipes[name].maxMade = maxMade; + skillDB.recipes[name].numSkillUps = numSkillUps; + + -- update reagent skill index + for _,r in ipairs(skillDB.recipes[name].reagents) do + r.skillIndex = i; + end + end + end + end + +end + function Cauldron:UpdateSkills(firstIndex, lastIndex) if not self.updatingSkills then @@ -181,6 +227,7 @@ function Cauldron:UpdateSkills(firstIndex, lastIndex) -- adjust min/max made for specialities -- TODO +--[[ -- check if we're rescanning, updating or adding local rescan = false; if skillDB.rescan then @@ -188,7 +235,7 @@ function Cauldron:UpdateSkills(firstIndex, lastIndex) rescan = true; end end - + if skillDB.recipes[name] and not rescan then -- update the recipe info skillDB.recipes[name].index = i; @@ -203,135 +250,140 @@ function Cauldron:UpdateSkills(firstIndex, lastIndex) r.skillIndex = i; end else - -- add the recipe info and other miscellaneous info - local itemLink = GetTradeSkillItemLink(i); - local recipeLink = GetTradeSkillRecipeLink(i); - local _, _, _, _, _, itemType, itemSubType, _, slot, _ = GetItemInfo(itemLink); - - local keywords = name; - - if rescan then - -- local msg = string.format(L["Rescanning recipe: %1$s..."], name); - -- Cauldron:Print(msg); - - -- remove it from the list - skillDB.rescan.failedRecipes[name] = nil; - - -- populate the reagent list - local num = GetTradeSkillNumReagents(i); - for j=1,num do - local rName, rIcon, rCount, _ = GetTradeSkillReagentInfo(i, j); - local rLink = GetTradeSkillReagentItemLink(i, j); - local rItemId = Cauldron:GetIdFromLink(rLink); - local key = not Cauldron:IsVendorItem(rItemId); - - if not skillDB.recipes[name].reagents[j].name then - if (not rName) or (not rIcon) or (not rLink) then +--]] + -- add the recipe info and other miscellaneous info + local itemLink = GetTradeSkillItemLink(i); + local recipeLink = GetTradeSkillRecipeLink(i); + local _, _, _, _, _, itemType, itemSubType, _, slot, _ = GetItemInfo(itemLink); + + local keywords = name; + +--[[ + if rescan then + -- local msg = string.format(L["Rescanning recipe: %1$s..."], name); + -- Cauldron:Print(msg); + + -- remove it from the list + skillDB.rescan.failedRecipes[name] = nil; + + -- populate the reagent list + local num = GetTradeSkillNumReagents(i); + for j=1,num do + local rName, rIcon, rCount, _ = GetTradeSkillReagentInfo(i, j); + local rLink = GetTradeSkillReagentItemLink(i, j); + local rItemId = Cauldron:GetIdFromLink(rLink); + local key = not Cauldron:IsVendorItem(rItemId); + + if not skillDB.recipes[name].reagents[j].name then + if (not rName) or (not rIcon) or (not rLink) then -- Cauldron:MarkRecipeForRescan(skillDB, name); -- rescanCount = rescanCount + 1; - else - local r = { - ["index"] = j, - ["name"] = rName, - ["numRequired"] = rCount, - ["skillIndex"] = i, - ["icon"] = rIcon, - ["link"] = rLink, - ["key"] = key, - }; - - skillDB.recipes[name].reagents[j] = r; - - if not self.db.realm.userdata[self.vars.playername].reagentMap[rName] then - self.db.realm.userdata[self.vars.playername].reagentMap[rName] = {}; - end - table.insert(self.db.realm.userdata[self.vars.playername].reagentMap[rName], skillName..";"..recipeLink); - - skillDB.recipes[name].keywords = skillDB.recipes[name].keywords..","..rName; + else + local r = { + ["index"] = j, + ["name"] = rName, + ["numRequired"] = rCount, + ["skillIndex"] = i, + ["icon"] = rIcon, + ["link"] = rLink, + ["key"] = key, + }; + + skillDB.recipes[name].reagents[j] = r; + + if not self.db.realm.userdata[self.vars.playername].reagentMap[rName] then + self.db.realm.userdata[self.vars.playername].reagentMap[rName] = {}; end + table.insert(self.db.realm.userdata[self.vars.playername].reagentMap[rName], skillName..";"..recipeLink); + + skillDB.recipes[name].keywords = skillDB.recipes[name].keywords..","..rName; end - end - else - -- fill in the db entry - skillDB.recipes[name] = { - ['index'] = i, - ['name'] = name, - ['description'] = GetTradeSkillDescription(i), - ['itemLink'] = itemLink, - ['recipeLink'] = recipeLink, - ['icon'] = GetTradeSkillIcon(i), - ['tradeskill'] = baseSkillName, - ['difficulty'] = difficulty, - ['available'] = avail, - ['minMade'] = minMade, - ['maxMade'] = maxMade, - ['numSkillUps'] = numSkillUps, - ['verb'] = verb, - - -- filter information - ['slot'] = _G[slot], - ['defaultCategory'] = category, - ['type'] = itemType, - ['subtype'] = itemSubType, - - ['reagents'] = {}, - }; + end + end + else +--]] + -- fill in the db entry + skillDB.recipes[name] = { + ['index'] = i, + ['name'] = name, + ['description'] = GetTradeSkillDescription(i), + ['itemLink'] = itemLink, + ['recipeLink'] = recipeLink, + ['icon'] = GetTradeSkillIcon(i), + ['tradeskill'] = baseSkillName, + ['difficulty'] = difficulty, + ['available'] = avail, + ['minMade'] = minMade, + ['maxMade'] = maxMade, + ['numSkillUps'] = numSkillUps, + ['verb'] = verb, - -- set the action verb for this skill - -- skillDB.recipes[name].verb = verb; + -- filter information + ['slot'] = _G[slot], + ['defaultCategory'] = category, + ['type'] = itemType, + ['subtype'] = itemSubType, - -- make sure the skill window info is initialized - if not skillDB.window.skills[name] then - skillDB.window.skills[name] = { - ['expanded'] = false, - ['favorite'] = false, - }; - end - - -- make sure the category for the window is initialized - if category ~= "" then - if not skillDB.window.categories[category] then - skillDB.window.categories[category] = { - ['shown'] = true, - ['expanded'] = true, - }; - end - end + ['reagents'] = {}, + }; + + -- set the action verb for this skill +-- skillDB.recipes[name].verb = verb; + + -- make sure the skill window info is initialized + if not skillDB.window.skills[name] then + skillDB.window.skills[name] = { + ['expanded'] = false, + ['favorite'] = false, + }; + end - --[[ - -- populate the slot list - Cauldron:debug("slot: "..tostring(slot)); - if slot and (slot ~= "") then - skillDB.window.slots[slot] = { - checked = true, - }; - else - -- special slot representing items that don't have a slot - skillDB.window.slots.none = { - checked = true, + -- make sure the category for the window is initialized + if category ~= "" then + if not skillDB.window.categories[category] then + skillDB.window.categories[category] = { + ['shown'] = true, + ['expanded'] = true, }; end - --]] - - -- populate the reagent list - local num = GetTradeSkillNumReagents(i); - for j=1,num do - local rName, rIcon, rCount, _ = GetTradeSkillReagentInfo(i, j); - local rLink = GetTradeSkillReagentItemLink(i, j); - local rItemId = Cauldron:GetIdFromLink(rLink); - local key = not Cauldron:IsVendorItem(rItemId); - - if (not rName) or (not rIcon) or (not rLink) then - rescanNotify = true; - - -- store the info if it's not already from rescanning - if not rescan then - -- Cauldron:error("Failed to retrieve reagent info; marking recipe for rescan: "..name); + end + + --[[ + -- populate the slot list + Cauldron:debug("slot: "..tostring(slot)); + if slot and (slot ~= "") then + skillDB.window.slots[slot] = { + checked = true, + }; + else + -- special slot representing items that don't have a slot + skillDB.window.slots.none = { + checked = true, + }; + end + --]] + + -- populate the reagent list + local num = GetTradeSkillNumReagents(i); + for j=1,num,1 do + local rName, rIcon, rCount, playerAmount = GetTradeSkillReagentInfo(i, j); + local rLink = GetTradeSkillReagentItemLink(i, j); + local rItemId = Cauldron:GetIdFromLink(rLink); + local key = not Cauldron:IsVendorItem(rItemId); + + if (not rName) or (not rIcon) or (not rLink) then + rescanNotify = true; +Cauldron:error("Failed to retrieve reagent info; marking recipe for rescan: "..name); +Cauldron:warn("i="..tostring(i).."; j="..tostring(j)); +--[[ + -- store the info if it's not already from rescanning + if not rescan then + -- Cauldron:error("Failed to retrieve reagent info; marking recipe for rescan: "..name); -- Cauldron:MarkRecipeForRescan(skillDB, name); -- rescanCount = rescanCount + 1; - end end - +--]] + else local r = { ["index"] = j, ["name"] = rName, @@ -340,6 +392,7 @@ function Cauldron:UpdateSkills(firstIndex, lastIndex) ["icon"] = rIcon, ["link"] = rLink, ["key"] = key, + ["amount"] = playerAmount, }; table.insert(skillDB.recipes[name].reagents, r); @@ -354,11 +407,12 @@ function Cauldron:UpdateSkills(firstIndex, lastIndex) keywords = keywords..","..rName; end end - - -- fill in the keywords db entry - skillDB.recipes[name].keywords = keywords; end - end + + -- fill in the keywords db entry + skillDB.recipes[name].keywords = keywords; +-- end +-- end else -- save the header name if name then -- 1.7.9.5