Chapter 11: Page 198 - 'Writing a Bag Scanner'
In the first code block in this section, and thereby in all printed code samples beyond that there is a small subtle error in the BagBuddy_Update()
function. Specifically, the returns from GetContainerItemInfo()
are not consistent for all types of items, bags being one example. Here are the first few lines of the original function:
function BagBuddy_Update()
local items = {}
local nameFilter = BagBuddy.input:GetText():lower()
-- Scan through the bag slots, looking for items
for bag = 0, NUM_BAG_SLOTS do
for slot = 0, GetContainerNumSlots(bag) do
local texture, count, locked, quality, readable, lootable, link = GetContainerItemInfo(bag, slot)
if texture then
local shown = true
if BagBuddy.qualityFilter then
shown = shown and BagBuddy.filters[quality]:GetChecked()
end
It should be changed to be the following:
function BagBuddy_Update()
local items = {}
local nameFilter = BagBuddy.input:GetText():lower()
-- Scan through the bag slots, looking for items
for bag = 0, NUM_BAG_SLOTS do
for slot = 1, GetContainerNumSlots(bag) do
-- This code has changed since the book was printed. The return from
-- GetContainerItemInfo is not consistent for all items, so we will
-- use the return from GetItemInfo instead.
local texture, count, locked, qualityBroken, readable, lootable, link = GetContainerItemInfo(bag, slot)
if texture then
-- Fetch the name and quality returns so we can use them later
local name, link, quality = GetItemInfo(link)
local shown = true
if BagBuddy.qualityFilter then
shown = shown and BagBuddy.filters[quality]:GetChecked()
end
The change is to ignore the quality return from GetContainerItemInfo() and grab the name, link and quality from GetItemInfo()
. This should resolve the issues with containers showing up in the listing, and quality being borked up.