Loading...

GetAzeriteItemXPInfo bad arg #1, but why?

1
I am updating ElvUI Progressively Colored DataBars (finally) and BugSack has stopped me in my tracks.

Code: Select all

1x ElvUI_PDBC\Azerite.lua:12: bad argument #1 to 'GetAzeriteItemXPInfo' (Usage: local xp, totalLevelXP = C_AzeriteItem.GetAzeriteItemXPInfo(azeriteItemLocation))
[string "=[C]"]: in function `GetAzeriteItemXPInfo'
[string "@ElvUI_PDBC\Azerite.lua"]:12: in function <ElvUI_PDBC\Azerite.lua:5>
[string "=(tail call)"]: ?
[string "=[C]"]: in function `AzeriteBar_Update'
[string "@ElvUI_PDBC\Azerite.lua"]:35: in function `HookAzeriteBar'
[string "@ElvUI_PDBC\Core.lua"]:75: in function `EnableDisable'
[string "@ElvUI_PDBC\Core.lua"]:54: in function `Initialize'
[string "@ElvUI_PDBC\Core.lua"]:48: in function <ElvUI_PDBC\Core.lua:47>
[string "=[C]"]: ?
[string "@ElvUI\Core\Core.lua"]:1753: in function `CallLoadFunc'
[string "@ElvUI\Core\Core.lua"]:1766: in function `CallLoadedModule'
[string "@ElvUI\Core\Core.lua"]:1794: in function `InitializeModules'
[string "@ElvUI\Core\Core.lua"]:1898: in function <ElvUI\Core\Core.lua:1866>
[string "=[C]"]: in function `Initialize'
[string "@ElvUI\init.lua"]:163: in function <ElvUI\init.lua:162>
[string "=[C]"]: ?
[string "@Ace3\AceAddon-3.0\AceAddon-3.0-13.lua"]:70: in function <Ace3\AceAddon-3.0\AceAddon-3.0.lua:65>
[string "@Ace3\AceAddon-3.0\AceAddon-3.0-13.lua"]:527: in function `EnableAddon'
[string "@Ace3\AceAddon-3.0\AceAddon-3.0-13.lua"]:630: in function <Ace3\AceAddon-3.0\AceAddon-3.0.lua:615>

Locals:
(*temporary) = <table> {
 GetBagAndSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:34
 IsBagAndSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:52
 SetEquipmentSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:38
 HasAnyLocation = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:56
 Clear = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:21
 IsEquipmentSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:48
 IsEqualToBagAndSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:64
 SetBagAndSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:27
 IsEqualTo = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:80
 GetEquipmentSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:44
 IsEqualToEquipmentSlot = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:72
 slotIndex = 16
 bagID = 6
 IsValid = <function> defined @FrameXML\ObjectAPI\ItemLocation.lua:60
}
Okay, fine. The API can't return valid arguments if I don't have an artifact item. I get that, but what I don't understand is why, given that ElvUI's Azerite bar code is almost the same. I tried with and without an if/then (line 12) to check for a return upon finding an item. Here's my full code:

Code: Select all

local E, L, V, P, G = unpack(ElvUI) -- import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local EDB = E:GetModule("DataBars") -- ElvUI's DataBars
local EPDBC = E:GetModule("EPDBC") -- this AddOn

local function UpdateAzerite(self)
    local bar = EDB.StatusBars.Azerite
    local color = E.db.EPDBC.azeriteBar.color
    bar:SetStatusBarColor(color.r, color.g, color.b, color.a)
    
    local azeriteItemLocation = C_AzeriteItem.FindActiveAzeriteItem()
    if not azeriteItemLocation then return end
    local xp, totalLevelXP = C_AzeriteItem.GetAzeriteItemXPInfo(azeriteItemLocation)

    if E.db.EPDBC.azeriteBar.progress then
        local avg = xp / totalLevelXP
        avg = EPDBC:Round(avg, 2)
        bar:SetAlpha(avg)
    else
        bar:SetAlpha(0.8)
    end
end

function EPDBC:HookAzeriteBar()
    local bar = EDB.StatusBars.Azerite
    if E.db.EPDBC.enabled and bar then
        if not EPDBC:IsHooked(EDB, "AzeriteBar_Update") then
            EPDBC:SecureHook(EDB, "AzeriteBar_Update", UpdateAzerite)
        end
    elseif not E.db.EPDBC.enabled or not bar then
        if EPDBC:IsHooked(EDB, "AzeriteBar_Update") then
            EPDBC:Unhook(EDB, "AzeriteBar_Update")
        end
        EPDBC:RestoreAzeriteBar()
    end
    EDB:AzeriteBar_Update()
end

function EPDBC:RestoreAzeriteBar()
    local bar = EDB.StatusBars.Azerite
    if bar then
        bar:SetStatusBarColor(.901, .8, .601, 0.8)
    end
end