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 @@ <Size x="110" y="37" /> <Anchors> <Anchor point="TOPRIGHT"> - <Offset x="-90" y="0" /> + <Offset x="-100" y="0" /> </Anchor> </Anchors> <Layers> @@ -344,7 +344,7 @@ </FontString> <FontString name="$parentCount" inherits="GameFontNormalLarge" justifyH="CENTER" justifyV="CENTER"> - <Size x="40" y="37"/> + <Size x="70" y="37"/> <Anchors> <Anchor point="LEFT" relativeTo="$parentNumSkillUps" relativePoint="RIGHT"> <Offset x="0" y="0"/> @@ -409,6 +409,7 @@ </Anchors> </FontString> <FontString name="$parentSkillCooldown" inherits="GameFontRedSmall"> + <Size x="490" y="0" /> <Anchors> <Anchor point="TOPLEFT" relativeTo="$parentRequirementLabel" relativePoint="BOTTOMLEFT"> <Offset x="0" y="0"/> @@ -437,7 +438,7 @@ <Size x="490" y="0"/> <Anchors> <Anchor point="TOPLEFT"> - <Offset x="5" y="-10"/> + <Offset x="0" y="-10"/> </Anchor> </Anchors> </FontString> @@ -1177,11 +1178,7 @@ </Frames> <Scripts> <OnClick> - if ( (not PartialPlayTime()) and (not NoPlayTime()) ) then - CauldronInputBox:SetNumber(CauldronFrame.numAvailable); - DoTradeSkill(CauldronFrame.selectedSkill, CauldronFrame.numAvailable); - CauldronInputBox:ClearFocus(); - end + Cauldron:CreateAllTradeSkillItem(); </OnClick> </Scripts> </Button> @@ -1313,10 +1310,7 @@ </Frames> <Scripts> <OnClick> - if ( (not PartialPlayTime()) and (not NoPlayTime()) ) then - DoTradeSkill(CauldronFrame.selectedSkill, CauldronInputBox:GetNumber()); - CauldronInputBox:ClearFocus(); - end + Cauldron:CreateTradeSkillItem(); </OnClick> </Scripts> </Button> 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