Quantcast

Added some checks to update the queue if an intermediate item is acquired.

pschifferer [02-01-09 - 20:52]
Added some checks to update the queue if an intermediate item is acquired.
Added a stub function for future implementation of the "key reagent" filter.
Filename
CauldronMain.lua
CauldronQueue.lua
CauldronTradeskill.lua
CauldronUtil.lua
diff --git a/CauldronMain.lua b/CauldronMain.lua
index fb9ab45..ebd32e6 100644
--- a/CauldronMain.lua
+++ b/CauldronMain.lua
@@ -15,7 +15,9 @@ BINDING_NAME_CAULDRONRESET = "Reset Cauldron";
 Cauldron.options = {};
 Cauldron.options.buttons = {};

-Cauldron.vars = {};
+Cauldron.vars = {
+	inventory = {};
+};

 Cauldron.libs = {};
 -- Cauldron.libs.Abacus = LibStub("LibAbacus-3.0");
@@ -248,13 +250,30 @@ function Cauldron:OnTradeSkillRecast()
 	self:debug("OnTradeSkillRecast exit");
 end

-function Cauldron:OnBagUpdate()
+function Cauldron:OnBagUpdate(event, bagid)
 	self:debug("OnBagUpdate enter");

 	if (not CauldronFrame) or (not CauldronFrame:IsShown()) then
 		return;
 	end
+
+	-- check if the item acquired is in the intermediate list
+	local items = Cauldron:GetItemDeltas(bagid);
+	for item, itemCount in pairs(items) do
+		if itemCount > 0 then
+			local queue = self.db.realm.userdata[self.vars.playername].queue;
+			local intItem = CauldronQueue:GetIntermediateItem(queue, item);
+			if intItem then
+				-- the item is found in the intermediate list, so recalculate the queue
+				CauldronQueue:CalculateAllRequiredItems(queue);
+				Cauldron:UpdateQueue();
+
+				return;
+			end
+		end
+	end

+	-- check if we were making something, and then update the queue
 	if self.makingItem then
 		self:debug("OnBagUpdate: self.makingItem="..self.makingItem);
 		local count = GetItemCount(self.makingItem);
diff --git a/CauldronQueue.lua b/CauldronQueue.lua
index ad813f0..f748b60 100644
--- a/CauldronQueue.lua
+++ b/CauldronQueue.lua
@@ -418,7 +418,7 @@ function CauldronQueue:ClearQueue(queue)

 	-- sanity checks
 	if not queue then
-		-- TODO: display error
+		Cauldron:error("No queue found!");
 		return;
 	end

@@ -460,4 +460,13 @@ function CauldronQueue:ClearQueue(queue)
 	Cauldron:debug("ClearQueue exit");
 end

+function CauldronQueue:GetIntermediateItem(queue, itemName)

+	-- sanity checks
+	if not queue then
+		Cauldron:error("No queue found!");
+		return nil;
+	end
+
+	return queue.intermediate[itemName];
+end
diff --git a/CauldronTradeskill.lua b/CauldronTradeskill.lua
index f1acc2d..78101c1 100644
--- a/CauldronTradeskill.lua
+++ b/CauldronTradeskill.lua
@@ -468,7 +468,7 @@ function Cauldron:GetReagentsForSkill(skillInfo)
 	end

 	-- check if the reagents are already populated
-	if #skillInfo.reagents then
+	if #skillInfo.reagents > 0 then
 		return skillInfo.reagents;
 	end

diff --git a/CauldronUtil.lua b/CauldronUtil.lua
index 259fe1c..b73def0 100644
--- a/CauldronUtil.lua
+++ b/CauldronUtil.lua
@@ -103,3 +103,52 @@ function Cauldron:GetNameFromLink(link)
 	return name
 end

+function Cauldron:GetItemDeltas(bagid)
+
+	-- sanity checks
+	if not bagid then
+		self:error("No bag ID specified!");
+		return {};
+	end
+
+	local deltas = {};
+
+	if not self.vars.inventory then
+		self.vars.inventory = {};
+	end
+	local inv = self.vars.inventory;
+
+	for i=1,GetContainerNumSlots(bagid) do
+		local link = GetContainerItemLink(bagid, i);
+		if link then
+			local name = select(1, {GetItemInfo(link)});
+			local count = GetItemCount(link);
+
+			local delta = 0;
+			if inv[name] then
+				delta = count - inv[name].count;
+			end
+
+			if delta ~= 0 then
+				-- save the delta information
+				deltas[name] = delta;
+			end
+
+			-- store the bag slot information
+			if count > 0 then
+				inv[name] = count;
+			else
+				inv[name] = nil;
+			end
+		end
+	end
+
+	return deltas;
+end
+
+function Cauldron:IsKeyReagent(itemName)
+
+	-- TODO
+
+	return false;
+end