Update 2.0.2

- Fixed a compatibility issue with other addons where the bank would not scan
- Added a delay to the scanning functions to avoid performance issues or client crashes
- Fixed a UI bug in the syncing progress bar
- Added compatibility with SuperWoW for consumables that have charges
This commit is contained in:
Cinecom
2024-12-30 14:37:42 +01:00
parent 12d6963dab
commit f3c896503e
3 changed files with 140 additions and 107 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ classPresets = {
{ raid = "Emerald Sanctum", id = {13454, 61224} },
{ raid = "Molten Core", id = {13454, 61224} },
{ raid = "Blackwing Lair", id = {13454, 61224} },
{ raid = "Temple of Ahn'Qiraj", id = {13454, 61224} },
{ raid = "Temple of Ahn'Qiraj", id = {13454, 61224, 21546} },
{ raid = "Naxxramas", id = {13454, 21546, 20079, 20749, 60977, 13512, 61224} }
},
["Frost Mage"] = {
+1 -1
View File
@@ -2,7 +2,7 @@
## Title: |cff00ff00Consumes Manager|r |cff808080[Horyoshi]|r
## Notes: Easily track and manage your consumables, food buffs, and more across your inventory, bank, and mail, while supporting multiple characters and accounts.
## Author: Horyoshi
## Version: 2.0.1
## Version: 2.0.2
## SavedVariables: ConsumesManager_Options, ConsumesManager_SelectedItems, ConsumesManager_Data
libs\LibStub\LibStub.lua
+138 -105
View File
@@ -57,6 +57,17 @@
ConsumesManager_EventFrame:RegisterEvent("MAIL_CLOSED")
ConsumesManager_EventFrame:SetScript("OnEvent", function()
if event == "BANKFRAME_OPENED" then
isBankOpen = true
elseif event == "BANKFRAME_CLOSED" then
isBankOpen = false
elseif event == "MAIL_SHOW" then
isMailOpen = true
elseif event == "MAIL_CLOSED" then
isMailOpen = false
end
if event == "PLAYER_LOGIN" then
if ConsumesManager_Options and ConsumesManager_Options.Channel and ConsumesManager_Options.Password then
local channelName = DecodeMessage(ConsumesManager_Options.Channel)
@@ -88,10 +99,10 @@
ConsumesManager_ScanPlayerMail()
elseif event == "BAG_UPDATE" then
ConsumesManager_ScanPlayerInventory()
if BankFrame and BankFrame:IsShown() then
if isBankOpen == true then
ConsumesManager_ScanPlayerBank()
end
if MailFrame and MailFrame:IsShown() then
if isMailOpen == true then
ConsumesManager_ScanPlayerMail()
end
elseif event == "BANKFRAME_OPENED" then
@@ -100,11 +111,11 @@
ConsumesManager_ScanPlayerBank()
ConsumesManager_ScanPlayerInventory()
elseif event == "ITEM_LOCK_CHANGED" then
if BankFrame and BankFrame:IsShown() then
if isBankOpen == true then
ConsumesManager_ScanPlayerInventory()
ConsumesManager_ScanPlayerBank()
end
if MailFrame and MailFrame:IsShown() then
if isMailOpen == true then
ConsumesManager_ScanPlayerInventory()
ConsumesManager_ScanPlayerMail()
end
@@ -399,10 +410,10 @@ function ConsumesManager_ShowMainWindow()
ConsumesManager_ScanPlayerInventory()
-- Only scan bank and mail if they are open
if BankFrame and BankFrame:IsShown() then
if event == "BANKFRAME_OPENED" then
ConsumesManager_ScanPlayerBank()
end
if MailFrame and MailFrame:IsShown() then
if event == "MAIL_SHOW" or event == "MAIL_INBOX_UPDATE" then
ConsumesManager_ScanPlayerMail()
end
@@ -418,7 +429,6 @@ function ConsumesManager_ShowMainWindow()
-- Update Settings content
ConsumesManager_UpdateSettingsContent()
-- Removed duplicate call to ConsumesManager_UpdateManagerContent()
end
@@ -2861,7 +2871,6 @@ function ConsumesManager_UpdateSettingsContent()
end
end
function ConsumesManager_UpdateSettingsScrollBar()
local OptionsFrame = ConsumesManager_MainFrame and ConsumesManager_MainFrame.tabs and ConsumesManager_MainFrame.tabs[4]
if not OptionsFrame then
@@ -3457,126 +3466,150 @@ end
-- Scan Functions ---------------------------------------------------------------------------------------
function ConsumesManager_ScanPlayerInventory()
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
local delayFrameInv = CreateFrame("Frame")
local delayStartTime = GetTime()
local delay = 0.5
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["inventory"] = {}
delayFrameInv:SetScript("OnUpdate", function()
if GetTime() - delayStartTime >= delay then
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
for bag = 0, 4 do
local numSlots = GetContainerNumSlots(bag)
if numSlots then
for slot = 1, numSlots do
local link = GetContainerItemLink(bag, slot)
if link then
local _, _, itemID = string.find(link, "item:(%d+)")
if itemID then
itemID = tonumber(itemID)
if consumablesList[itemID] then
local _, itemCount = GetContainerItemInfo(bag, slot)
if itemCount and itemCount > 0 then
data["inventory"][itemID] = (data["inventory"][itemID] or 0) + itemCount
end
end
end
end
end
end
end
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["inventory"] = {}
ConsumesManager_UpdateUseButtons()
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
end
function ConsumesManager_ScanPlayerBank()
local isBankOpen = false
if BankFrame and BankFrame:IsShown() then
isBankOpen = true
elseif _G["BBankFrame"] and _G["BBankFrame"]:IsShown() then
isBankOpen = true
end
if not isBankOpen then
return
end
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["bank"] = {}
for bag = -1, 10 do
if bag == -1 or (bag >= 5 and bag <= 10) then
local numSlots = GetContainerNumSlots(bag)
if numSlots then
for slot = 1, numSlots do
local link = GetContainerItemLink(bag, slot)
if link then
local _, _, itemID = string.find(link, "item:(%d+)")
if itemID then
itemID = tonumber(itemID)
if consumablesList[itemID] then
local _, itemCount = GetContainerItemInfo(bag, slot)
if itemCount and itemCount > 0 then
data["bank"][itemID] = (data["bank"][itemID] or 0) + itemCount
for bag = 0, 4 do
local numSlots = GetContainerNumSlots(bag)
if numSlots then
for slot = 1, numSlots do
local link = GetContainerItemLink(bag, slot)
if link then
local _, _, itemID = string.find(link, "item:(%d+)")
if itemID then
itemID = tonumber(itemID)
if consumablesList[itemID] then
local _, itemCount = GetContainerItemInfo(bag, slot)
if itemCount and itemCount ~= 0 then
if itemCount < 0 then itemCount = -itemCount end
data["inventory"][itemID] = (data["inventory"][itemID] or 0) + itemCount
end
end
end
end
end
end
end
end
end
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
ConsumesManager_UpdateUseButtons()
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
delayFrameInv:SetScript("OnUpdate", nil)
end
end)
end
function ConsumesManager_ScanPlayerBank()
if not isBankOpen then return end
local delayFrameBank = CreateFrame("Frame")
local delayStartTime = GetTime()
local delay = 0.5
delayFrameBank:SetScript("OnUpdate", function()
if GetTime() - delayStartTime >= delay then
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["bank"] = {}
for bag = -1, 10 do
if bag == -1 or (bag >= 5 and bag <= 10) then
local numSlots = GetContainerNumSlots(bag)
if numSlots then
for slot = 1, numSlots do
local link = GetContainerItemLink(bag, slot)
if link then
local _, _, itemID = string.find(link, "item:(%d+)")
if itemID then
itemID = tonumber(itemID)
if consumablesList[itemID] then
local _, itemCount = GetContainerItemInfo(bag, slot)
if itemCount and itemCount ~= 0 then
if itemCount < 0 then itemCount = -itemCount end
data["bank"][itemID] = (data["bank"][itemID] or 0) + itemCount
end
end
end
end
end
end
end
end
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
delayFrameBank:SetScript("OnUpdate", nil)
end
end)
end
function ConsumesManager_ScanPlayerMail()
if not MailFrame or not MailFrame:IsShown() then
return
end
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
if not isMailOpen then return end
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["mail"] = {}
local delayFrameMail = CreateFrame("Frame")
local delayStartTime = GetTime()
local delay = 0.5
local numInboxItems = GetInboxNumItems()
if numInboxItems and numInboxItems > 0 then
for mailIndex = 1, numInboxItems do
local itemName, _, itemCount = GetInboxItem(mailIndex)
if itemName and itemCount and itemCount > 0 then
local itemID = consumablesNameToID[itemName]
if itemID and consumablesList[itemID] then
data["mail"][itemID] = (data["mail"][itemID] or 0) + itemCount
delayFrameMail:SetScript("OnUpdate", function()
if GetTime() - delayStartTime >= delay then
local playerName = UnitName("player")
local realmName = GetRealmName()
local faction = UnitFactionGroup("player")
ConsumesManager_Data[realmName] = ConsumesManager_Data[realmName] or {}
ConsumesManager_Data[realmName][faction] = ConsumesManager_Data[realmName][faction] or {}
ConsumesManager_Data[realmName][faction][playerName] = ConsumesManager_Data[realmName][faction][playerName] or {}
local data = ConsumesManager_Data[realmName][faction][playerName]
data["mail"] = {}
local numInboxItems = GetInboxNumItems()
if numInboxItems and numInboxItems > 0 then
for mailIndex = 1, numInboxItems do
local itemName, _, itemCount = GetInboxItem(mailIndex)
if itemName and itemCount and itemCount > 0 then
local itemID = consumablesNameToID[itemName]
if itemID and consumablesList[itemID] then
data["mail"][itemID] = (data["mail"][itemID] or 0) + itemCount
end
end
end
end
end
end
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
ConsumesManager_UpdateManagerContent()
ConsumesManager_UpdateTabStates()
delayFrameMail:SetScript("OnUpdate", nil)
end
end)
end
-- Multi-Account Data Handling --------------------------------------------------------------------------
@@ -3604,7 +3637,6 @@ end
resetButton:SetAlpha(0.5)
ProgressBarFrame:Show()
ProgressBarFrame_fill:Show()
ProgressBarFrame_Text:Show()
ProgressBar = totalTime
@@ -3650,6 +3682,7 @@ end
BarHeight = 492
end
end
ProgressBarFrame_fill:Show()
ProgressBarFrame_fill:SetHeight(BarHeight)
countdownTimer = 0
end