diff --git a/IIfA/IIfABackpack.lua b/IIfA/IIfABackpack.lua
index f6acc3c..aa374d6 100644
--- a/IIfA/IIfABackpack.lua
+++ b/IIfA/IIfABackpack.lua
@@ -243,6 +243,9 @@ local function matchFilter(itemName, itemLink)
IIfA.filterGroup == "Body" then
if IIfA.filterGroup == "Weapons" then
itemType = GetItemLinkWeaponType(itemLink)
+ if itemType == WEAPONTYPE_SHIELD and IIfA.filterTypes == nil then -- all weaps is selected, don't show shields in list
+ itemType = 0
+ end
elseif IIfA.filterGroup == "Body" then
-- Body takes extra arg at beginning of array, if array is used at all
-- Item type (armor, non-armor)
@@ -645,7 +648,6 @@ function IIfA:QueryAccountInventory(itemLink)
locationName = IIfA.CharIdToName[locationName]
end
if locationName ~= nil then
-
for x, QILocation in pairs(queryItem.locations) do
if (QILocation.name == locationName)then
QILocation.itemsFound = QILocation.itemsFound + location.itemCount
@@ -653,7 +655,7 @@ function IIfA:QueryAccountInventory(itemLink)
end
end
- if nil ~= location.itemCount then
+ if location.itemCount ~= nil and location.itemCount > 0 then
if (not AlreadySavedLoc) and (location.itemCount > 0) then
newLocation = {}
newLocation.name = locationName
@@ -677,6 +679,9 @@ function IIfA:QueryAccountInventory(itemLink)
return queryItem
end
+-- test query
+-- /script d(IIfA:QueryAccountInventory("|H0:item:134629:6:1:0:0:0:0:0:0:0:0:0:0:0:1:0:0:1:0:0:0|h|h"))
+
function IIfA:SetSceneVisible(name, value)
IIfA:GetSettings().frameSettings[name].hidden = not value
end
diff --git a/IIfA/IIfADataCollection.lua b/IIfA/IIfADataCollection.lua
index 1c4d4d5..6fe8306 100644
--- a/IIfA/IIfADataCollection.lua
+++ b/IIfA/IIfADataCollection.lua
@@ -11,7 +11,7 @@ local function grabBagContent(bagId, override)
if bagId >= BAG_HOUSE_BANK_ONE and bagId <= BAG_HOUSE_BANK_TEN and not IsOwnerOfCurrentHouse() then return end
local bagItems = GetBagSize(bagId)
- IIfA:DebugOut("grabBagContent - bagId = <<1>>", bagId)
+ IIfA:DebugOut("grabBagContent(<<1>>, <<2>>", bagId, override)
for slotId=0, bagItems, 1 do
local dbItem, itemKey = IIfA:EvalBagItem(bagId, slotId, false, nil, nil, nil, nil, override)
end
@@ -286,10 +286,10 @@ function IIfA:RescanHouse(houseCollectibleId)
houseCollectibleId = houseCollectibleId or GetCollectibleIdForHouse(GetCurrentZoneHouseId())
if not houseCollectibleId then return end
- if not IIfA:GetHouseTracking() then return end
+
IIfA.data.collectHouseData[houseCollectibleId] = IIfA.data.collectHouseData[houseCollectibleId] or IIfA:GetHouseTracking()
-
+
if not IIfA.data.collectHouseData[houseCollectibleId] then
if IIfA:GetHouseTracking() and IIfA:GetIgnoredHouseIds()[houseCollectibleId] then
IIfA.trackedBags[houseCollectibleId] = false
@@ -308,7 +308,7 @@ function IIfA:RescanHouse(houseCollectibleId)
if not ret[itemLink] then
ret[itemLink] = 1
else
- ret[itemLink] = ret[itemLink] +1
+ ret[itemLink] = ret[itemLink] + 1
end
end
end
@@ -321,13 +321,14 @@ function IIfA:RescanHouse(houseCollectibleId)
for itemLink, itemCount in pairs(getAllPlacedFurniture()) do
-- (bagId, slotId, fromXfer, itemCount, itemLink, itemName, locationID)
IIfA:DebugOut("furniture item <<1>> x<<2>>", itemLink, itemCount)
- IIfA:EvalBagItem(houseCollectibleId, IIfA:GetItemID(itemLink), false, itemCount, itemLink, GetItemLinkName(itemLink), houseCollectibleId)
+ IIfA:EvalBagItem(houseCollectibleId, tonumber(IIfA:GetItemID(itemLink)), false, itemCount, itemLink, GetItemLinkName(itemLink), houseCollectibleId)
end
end)
end
+--[[ causing massive problems because we're creating the BSI entry while trying to use it from EvalBagItem
-- try to read item link from bag/slot - if that's an empty string, we try to read it from BSI
local function getItemLink(bagId, slotId)
if nil == bagId or nil == slotId then return end
@@ -341,8 +342,9 @@ local function getItemLink(bagId, slotId)
if nil == IIfA.BagSlotInfo[bagId] then return end
return IIfA.BagSlotInfo[bagId][slotId]
end
+--]]
--- try to read item name from bag/slot - if that's empty, we read it from item link that we generated from BSI
+-- try to read item name from bag/slot - if that's empty, we read it from item link
local function getItemName(bagId, slotId, itemLink)
local itemName = GetItemName(bagId, slotId)
if "" ~= itemName then return itemName end
@@ -425,14 +427,15 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
local DBv3 = IIfA.database
-- item link is either passed as arg or we need to read it from the system
- itemLink = itemLink or getItemLink(bagId, slotId)
+ itemLink = itemLink or GetItemLink(bagId, slotId)
+ itemLink = string.gsub(itemLink, '|H0', '|H1') -- always store/eval with brackets on the link
--IIfA:DebugOut("trying to save <<1>> x<<2>>", itemLink, itemCount)
-- return if we don't have any item to track
- if nil == itemLink then return end
+ if itemLink == nil or itemLink == "" then return end
- -- item nams is either passed or we get it from bag/slot or item link
+ -- item names is either passed or we get it from bag/slot or item link
itemName = itemName or getItemName(bagId, slotId, itemLink) or EMPTY_STRING
-- item count is either passed or we have to get it from bag/slot ID or item link
@@ -440,13 +443,22 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
-- get item key from crafting type
- local usedInCraftingType, _ = GetItemCraftingInfo(bagId, slotId)
- local itemType = GetItemType(bagId, slotId)
+ local usedInCraftingType, itemType
+ local qty, itemQuality
+
+ if bagId <= BAG_MAX_VALUE then
+ usedInCraftingType, _ = GetItemCraftingInfo(bagId, slotId)
+ _, qty, _, _, _, _, _, itemQuality = GetItemInfo(bagId, slotId)
+ else -- these are furniture items in a house
+ usedInCraftingType = GetItemLinkCraftingSkillType(itemLink)
+ qty = itemCount or 0
+ itemQuality = GetItemLinkQuality(itemLink)
+ end
+
+ local itemType = GetItemLinkItemType(itemLink)
-- IIfA:DebugOut("CraftingType, ItemType <<1>>, <<2>>", usedInCraftingType, itemType)
- local qty, itemQuality
- _, qty, _, _, _, _, _, itemQuality = GetItemInfo(bagId, slotId)
if 0 == qty and itemLink then
itemQuality = GetItemLinkQuality(itemLink)
@@ -454,6 +466,8 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
itemType = GetItemLinkItemType(itemLink)
end
+ itemLink = string.gsub(itemLink, '|H0', '|H1')
+
local itemKey
if bagId == BAG_VIRTUAL then
itemKey = tostring(slotId)
@@ -461,7 +475,6 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
itemKey = IIfA:GetItemKey(itemLink, usedInCraftingType, itemType) or itemLink
end
- IIfA:DebugOut("saving slot=<<1>> <<2>> x<<3>> -> <<4>>", slotId, itemLink, itemCount, itemKey)
if nil == itemKey then return end
@@ -481,7 +494,12 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
DBitem.locations[location].itemCount = itemCount
end
if qty < 1 then
- DBitem.locations[location].itemCount = getItemCount(bagId, slotId, itemLink)
+ qty = getItemCount(bagId, slotId, itemLink)
+ if qty == 0 then
+ DBitem.locations[location] = nil
+ else
+ DBitem.locations[location].itemCount = qty
+ end
end
else
DBv3[itemKey] = {}
@@ -494,6 +512,7 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
DBv3[itemKey].locations[location].bagSlot = slotId
DBv3[itemKey].locations[location].itemCount = itemCount
end
+
if zo_strlen(itemKey) < 10 then
DBv3[itemKey].itemLink = itemLink
end
@@ -501,6 +520,8 @@ function IIfA:EvalBagItem(bagId, slotId, fromXfer, itemCount, itemLink, itemName
IIfA:ValidateItemCounts(bagId, slotId, DBv3[itemKey], itemKey, itemLink, true)
end
+ IIfA:DebugOut("saved bag/slot=<<1>>/<<2>> <<3>> x<<4>> -> <<5>>, loc=<<6>>", bagId, slotId, itemLink, itemCount, itemKey, location)
+
return DBv3[itemKey], itemKey
end
@@ -544,8 +565,7 @@ function IIfA:ValidateItemCounts(bagID, slotId, dbItem, itemKey, itemLinkOverrid
end
-
-function IIfA:CollectAll()
+function IIfA:CollectAll(bagId, tracked) -- the args aren't used, but by making them args to function, they're avail to the task
local bagItems = nil
local itemLink, dbItem = nil
local itemKey
@@ -553,42 +573,44 @@ function IIfA:CollectAll()
local BagList = IIfA:GetTrackedBags() -- 20.1. mana: Iterating over a list now
for bagId, tracked in pairs(BagList) do -- do NOT use ipairs, it's non-linear list (holes in the # sequence)
- -- call with libAsync to avoid lags
- task:Call(function()
- bagItems = GetBagSize(bagId)
- if bagId == BAG_WORN then
- IIfA:ClearLocationData(IIfA.currentCharacterId, BAG_WORN)
- elseif bagId == BAG_BANK then -- do NOT add BAG_SUBSCRIBER_BANK here, it'll wipe whatever already got put into the bank on first hit
- IIfA:ClearLocationData(GetString(IIFA_BAG_BANK))
- elseif bagId == BAG_BACKPACK then
- IIfA:ClearLocationData(IIfA.currentCharacterId, BAG_BACKPACK)
- elseif bagId == BAG_VIRTUAL then
- IIfA:ClearLocationData(GetString(IIFA_BAG_CRAFTBAG))
- elseif bagId >= BAG_HOUSE_BANK_ONE and bagId <= BAG_HOUSE_BANK_TEN then
- if IsOwnerOfCurrentHouse() then
- IIfA:ClearLocationData(GetCollectibleForHouseBankBag(bagId))
- else
- tracked = false -- prevent reading the house bag if we're not in our own home
+ if bagId <= BAG_MAX_VALUE then
+ -- call with libAsync to avoid lags
+ task:Call(function()
+ bagItems = GetBagSize(bagId)
+ if bagId == BAG_WORN then
+ IIfA:ClearLocationData(IIfA.currentCharacterId, BAG_WORN)
+ elseif bagId == BAG_BANK then -- do NOT add BAG_SUBSCRIBER_BANK here, it'll wipe whatever already got put into the bank on first hit
+ IIfA:ClearLocationData(GetString(IIFA_BAG_BANK))
+ elseif bagId == BAG_BACKPACK then
+ IIfA:ClearLocationData(IIfA.currentCharacterId, BAG_BACKPACK)
+ elseif bagId == BAG_VIRTUAL then
+ IIfA:ClearLocationData(GetString(IIFA_BAG_CRAFTBAG))
+ elseif bagId >= BAG_HOUSE_BANK_ONE and bagId <= BAG_HOUSE_BANK_TEN then
+ if IsOwnerOfCurrentHouse() then
+ IIfA:ClearLocationData(GetCollectibleForHouseBankBag(bagId))
+ else
+ tracked = false -- prevent reading the house bag if we're not in our own home
+ end
end
- end
- if tracked then
- if bagId ~= BAG_VIRTUAL then
- if bagId ~= BAG_SUBSCRIBER_BANK then
- grabBagContent(bagId)
- if bagId == BAG_BANK then
- grabBagContent(BAG_SUBSCRIBER_BANK)
+ if tracked then
+ if bagId ~= BAG_VIRTUAL then
+ if bagId ~= BAG_SUBSCRIBER_BANK then
+ grabBagContent(bagId)
+ if bagId == BAG_BANK then
+ grabBagContent(BAG_SUBSCRIBER_BANK)
+ end
+ end
+ else -- it's bag virtual
+ local slotId = GetNextVirtualBagSlotId(nil)
+ while slotId ~= nil do
+ IIfA:EvalBagItem(bagId, slotId)
+ slotId = GetNextVirtualBagSlotId(slotId)
end
- end
- else -- it's bag virtual
- local slotId = GetNextVirtualBagSlotId(nil)
- while slotId ~= nil do
- IIfA:EvalBagItem(bagId, slotId)
- slotId = GetNextVirtualBagSlotId(slotId)
end
end
- end
- end)
+ end)
+ end
end
-- 6-3-17 AM - need to clear unowned items when deleting char/guildbank too
diff --git a/IIfA/IIfAMenu.lua b/IIfA/IIfAMenu.lua
index 6149bb9..d00d681 100644
--- a/IIfA/IIfAMenu.lua
+++ b/IIfA/IIfAMenu.lua
@@ -105,7 +105,7 @@ function IIfA:CreateOptionsMenu()
name = "Wipe database",
tooltip = "Deletes all collected data",
func = function()
- IIfA.database = {}
+ IIfA.database = {}
IIfA:ScanCurrentCharacterAndBank()
end,
}, -- button end
diff --git a/IIfA/IIfASettingsAdapter.lua b/IIfA/IIfASettingsAdapter.lua
index 572de52..807f951 100644
--- a/IIfA/IIfASettingsAdapter.lua
+++ b/IIfA/IIfASettingsAdapter.lua
@@ -4,22 +4,23 @@ IIfA.houseNameToIdTbl = {}
local task = IIfA.task or LibStub("LibAsync"):Create("IIfA_DataCollection")
IIfA.task = task
-local function GetRealCollectibleName(collectibleId)
- local collectibleName = GetCollectibleNickname(collectibleId)
- if collectibleName and #collectibleName == 0 then collectibleName = GetCollectibleName(collectibleId) end
- return collectibleName
-end
-
-function IIfA:IsCharacterInventoryIgnored(ignoreChar)
- if not ignoreChar then return end
- ignoreChar = IIfA.CharNameToId[ignoreChar] or ignoreChar
- return IIfA.data.ignoredCharEquipment[ignoreChar]
+function IIfA:IsCharacterInventoryIgnored()
+ return IIfA.data.ignoredCharInventories[IIfA.currentCharacterId] or false
end
-function IIfA:IsCharacterEquipIgnored(ignoreChar)
- if not ignoreChar then return end
- ignoreChar = IIfA.CharNameToId[ignoreChar] or ignoreChar
- return IIfA.data.ignoredCharInventories[ignoreChar]
+function IIfA:IgnoreCharacterInventory(value)
+ IIfA.data.ignoredCharInventories[IIfA.currentCharacterId] = value
+
+ IIfA.trackedBags[BAG_BACKPACK] = not value
+ task:Call(function()
+ if value then
+ IIfA:ClearLocationData(IIfA.currentCharacterId, BAG_BACKPACK)
+ else
+ IIfA:ScanCurrentCharacter()
+ end
+ end):Then(function()
+ IIfA:RefreshInventoryScroll()
+ end)
end
function IIfA:IsCharacterEquipIgnored()
@@ -139,15 +140,16 @@ end
function IIfA:GetTrackingWithHouseNames()
local ret = {}
for collectibleId, trackIt in pairs(IIfA.data.collectHouseData) do
- ret[GetRealCollectibleName(collectibleId)] = true
+ ret[GetCollectibleName(collectibleId)] = true
end
return ret
end
+
function IIfA:RebuildHouseMenuDropdowns()
local tracked = {}
local ignored = {}
for collectibleId, trackIt in pairs(IIfA.data.collectHouseData) do
- local collectibleName = GetRealCollectibleName(collectibleId)
+ local collectibleName = GetCollectibleName(collectibleId)
-- cache house name for lookup
IIfA.houseNameToIdTbl[collectibleName] = collectibleId
local targetTable = (trackIt and tracked) or ignored