Thread Tools Display Modes
Prev Previous Post   Next Post Next
09-23-18, 08:15 PM   #1
superfula
A Deviate Faerie Dragon
Join Date: Mar 2006
Posts: 14
Azerite tooltip throwing error when mousing over azerite bar

I'm working on a bar addon that is supposed to place an xp/rep bar below the minimap and then an azerite bar just below that. I am able to get both bars to show, however I'm down to one last issue. The azerite tooltip that should show when you mouseover the azerite bar gives this error:

Code:
30x modules/exp.lua:255: bad argument #1 to 'format' (string expected, got nil)
[C]: in function `format'
modules/exp.lua:255: in function <modules/exp.lua:248>
modules/exp.lua:280: in function <modules/exp.lua:280>

Locals:
(*temporary) = "Level %s (%s Artifact Power to next level)"
(*temporary) = nil
(*temporary) = nil
(*temporary) = "string expected, got nil"
Full addon code.

Code:
local SCALE			= 1
--local WIDTH 			= 348
local WIDTH 		= 236
local HEIGHT 		= 4
local _, CLASS 		= UnitClass('player')
local COLOR			= CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[CLASS] or RAID_CLASS_COLORS[CLASS]
--local POSITION		= {'CENTER', UIParent, 'BOTTOM', 0, 4}
local POSITION		= {'TOP', Minimap, 'BOTTOM', 0, 17}
local OFFSET		= -13
--local TIP				= {'TOPRIGHT', UIParent, -275, -235}
local TIP			= {'TOPRIGHT', UIParent, -275, -235}
local TEXTURE 		= [[Interface\AddOns\LynExperience\assets\statusbar]]
local CLASSCOLOR 	= CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[CLASS] or RAID_CLASS_COLORS[CLASS]

f = CreateFrame('Frame', nil, UIParent)
f:SetPoint(POSITION[1], POSITION[2], POSITION[3], POSITION[4], POSITION[5])
f:SetWidth(WIDTH)
f:SetHeight(HEIGHT)
f:SetScale(SCALE)

-- SETUP BARS
local setBar = function(frame)
	frame:SetStatusBarTexture(TEXTURE)
	frame:SetWidth(WIDTH)
	frame:SetHeight(HEIGHT)
	frame:SetScale(SCALE)
end

local setBackdrop = function(frame)
	frame.bg = CreateFrame('Frame', nil, frame)
	frame.bg:SetBackdrop({
		bgFile = [[Interface/Buttons/WHITE8X8]],
		tiled = false,
		insets = {left = 0, right = 0, top = 0, bottom = 0}
	})
	frame.bg:SetPoint('TOPLEFT', frame, 0, 0)
	frame.bg:SetPoint('BOTTOMRIGHT', frame, 0, 0)
	frame.bg:SetFrameLevel(1)
	frame.bg:SetBackdropColor(0, 0, 0, 0.2)

	frame.shadow = CreateFrame('Frame', nil, frame)
	frame.shadow:SetBackdrop({
		bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
		tiled = false,
		insets = {left = 0, right = 0, top = 0, bottom = 0}
	})
	frame.shadow:SetPoint('TOPLEFT', frame, -3, 3)
	frame.shadow:SetPoint('BOTTOMRIGHT', frame, 3, -3)
	frame.shadow:SetFrameLevel(0)
	frame.shadow:SetBackdropColor(0, 0, 0, 0)
end

local exp = CreateFrame('StatusBar', nil, f, 'AnimatedStatusBarTemplate')
setBar(exp)
exp:SetFrameLevel(4)
exp:SetStatusBarColor(.4, .1, .6)
exp:SetAnimatedTextureColors(.4, .1, .6)
exp:SetPoint(POSITION[1], POSITION[2], POSITION[3], POSITION[4], POSITION[5])
setBackdrop(exp)

local rest = CreateFrame('StatusBar', nil, xp)
setBar(rest)
rest:SetFrameLevel(3)
rest:EnableMouse(false)
rest:SetStatusBarColor(.2, .4, .8)
rest:SetAllPoints(exp)

local azerite = CreateFrame('StatusBar', nil, f, 'AnimatedStatusBarTemplate')
setBar(azerite)
azerite:SetFrameLevel(4)
azerite:SetStatusBarColor(.9, .8, .6)
azerite:SetAnimatedTextureColors(.9, .8, .6)
azerite:SetPoint(POSITION[1], POSITION[2], POSITION[3], POSITION[4], POSITION[5] + OFFSET)
setBackdrop(azerite)

-- DATA METHODS
local factionStanding = {
	[1] = { name = 'Hated' },
	[2] = { name = 'Hostile' },
	[3] = { name = 'Unfriendly' },
	[4] = { name = 'Neutral' },
	[5] = { name = 'Friendly' },
	[6] = { name = 'Honored' },
	[7] = { name = 'Revered' },
	[8] = { name = 'Exalted' },
};

local numberize = function(v)
    if v <= 9999 then return v end
    if v >= 1000000 then
        local value = string.format('%.1fm', v/1000000)
        return value
    elseif v >= 10000 then
        local value = string.format('%.1fk', v/1000)
        return value
    end
end


local exp_update = function()
	if UnitLevel('player') == MAX_PLAYER_LEVEL then
		local name, standing, min, max, cur = GetWatchedFactionInfo()
		if name then
			local faction = FACTION_BAR_COLORS[standing]
			exp:SetStatusBarColor(faction.r, faction.g, faction.b)
			exp:SetAnimatedTextureColors(faction.r, faction.g, faction.b)
			--print(cur, min, max, cur-min, 0, max-min)
			exp:SetAnimatedValues(cur - min, 0, max - min, standing)
			-- xp:SetMinMaxValues(min, max)
			-- xp:SetValue(cur)

			rest:SetMinMaxValues(0, 1)
			rest:SetValue(0)

			exp:Show()
			rest:Show()
			return
		end

		--xp:SetAnimatedValues(0, 0, 1, 1)
		exp:Hide()
		rest:Hide()
		--rest:SetMinMaxValues(0, 1)
		--rest:SetValue(0)
	else
		local c, m, l	= UnitXP('player'), UnitXPMax('player'), UnitLevel('player')
		local p 			= math.ceil(c/m*100)
		local r			= GetXPExhaustion()

		exp:SetAnimatedValues(c, 0, m, l)
		-- xp:SetMinMaxValues(min(0, c), m)
		-- xp:SetValue(c)
		rest:SetMinMaxValues(min(0, c), m)
		rest:SetValue(r and (c + r) or 0)

		exp:Show()
		rest:Show()
	end
end

local showExperienceTooltip = function(self)
	if UnitLevel('player') == MAX_PLAYER_LEVEL then
		local name, standing, min, max, cur = GetWatchedFactionInfo()
		if name then
			local faction = FACTION_BAR_COLORS[standing]

			GameTooltip:SetOwner(self, 'ANCHOR_NONE')
			GameTooltip:SetPoint(TIP[1], TIP[2], TIP[3], TIP[4], TIP[5])

			GameTooltip:AddLine(name, faction.r, faction.g, faction.b)
			GameTooltip:AddLine(factionStanding[standing].name, 1, 1, 1)
			GameTooltip:AddLine(cur-min.."/"..max-min, 1, 1, 1)

			GameTooltip:Show()
		end
	else
		local xpc, xpm, xpr = UnitXP('player'), UnitXPMax('player'), GetXPExhaustion('player')

		GameTooltip:SetOwner(self, 'ANCHOR_NONE')
		GameTooltip:SetPoint(TIP[1], TIP[2], TIP[3], TIP[4], TIP[5])

		GameTooltip:AddLine('Level '..UnitLevel('player'), COLOR.r, COLOR.g, COLOR.b)
		GameTooltip:AddLine((numberize(xpc)..'/'..numberize(xpm)..' ('..floor((xpc/xpm)*100) ..'%)'), 1, 1, 1)
		if xpr then
			GameTooltip:AddLine(numberize(xpr)..' ('..floor((xpr/xpm)*100) ..'%)', .2, .4, .8)
		end

		GameTooltip:Show()
	end
end

local azerite_update = function(self)
local azeriteItemLocation = C_AzeriteItem.FindActiveAzeriteItem()
--if C_AzeriteItem.HasActiveAzeriteItem() then

	if azeriteItemLocation then
		--local azeriteItem = Item:CreateFromItemLocation(azeriteItemLocation);
		--local azeriteItemName = azeriteItem:GetItemName()

		local xp, totalLevelXP = C_AzeriteItem.GetAzeriteItemXPInfo(azeriteItemLocation)
		local currentLevel = C_AzeriteItem.GetPowerLevel(azeriteItemLocation)
		local xpToNextLevel = totalLevelXP - xp
		
		if not azerite:IsShown() then
			azerite:Show()
		end

		azerite:SetAnimatedValues(xp, 0, totalLevelXP)
--		azerite:SetMinMaxValues(0, totalLevelXP)
--		azerite:SetValue(xp)
--		azerite:Show()

--		local y
--		if UnitLevel'player' < MAX_PLAYER_LEVEL or faction then
--			y = POSITION[5] + OFFSET
--		else
--			y = POSITION[5]
--		end
--		
--		azerite:SetPoint(POSITION[1], POSITION[2], POSITION[3], POSITION[4], y)
	else
		if azerite:IsShown() then
			azerite:Hide()
		end
	end
	if event == 'AZERITE_ITEM_EXPERIENCE_CHANGED' or event == 'PLAYER_ENTERING_WORLD' then
		if not azerite:IsShown() then
			azerite:Show()
		end
	end
end
		


local showAzeriteTooltip = function(self)
	local azeriteItemLocation = C_AzeriteItem.FindActiveAzeriteItem();
	local azeriteItem = Item:CreateFromItemLocation(azeriteItemLocation);
    local azeriteItemName = azeriteItem:GetItemName();
	
	GameTooltip:SetOwner(self, 'ANCHOR_NONE')
	GameTooltip:SetPoint(TIP[1], TIP[2], TIP[3], TIP[4], TIP[5])
	GameTooltip:SetText(AZERITE_POWER_TOOLTIP_TITLE:format(currentLevel, xpToNextLevel), HIGHLIGHT_FONT_COLOR:GetRGB());
    GameTooltip:AddLine(AZERITE_POWER_TOOLTIP_BODY:format(azeriteItemName));

	GameTooltip:Show()
end

-- events
exp:RegisterEvent('PLAYER_LEVEL_UP')
exp:RegisterEvent('PLAYER_XP_UPDATE')
exp:RegisterEvent('UPDATE_EXHAUSTION')
exp:RegisterEvent('PLAYER_ENTERING_WORLD')
exp:RegisterEvent('MODIFIER_STATE_CHANGED')
exp:RegisterEvent('UPDATE_FACTION')
exp:RegisterEvent('ADDON_LOADED')
exp:SetScript('OnEvent', exp_update)
exp:SetScript('OnEnter', function() showExperienceTooltip(exp) end)
exp:SetScript('OnLeave', function() GameTooltip:Hide() end)

azerite:RegisterEvent('PLAYER_ENTERING_WORLD')
azerite:RegisterEvent('AZERITE_ITEM_EXPERIENCE_CHANGED')
azerite:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
azerite:RegisterEvent('PLAYER_LEVEL_UP')
azerite:RegisterEvent('UPDATE_FACTION')
azerite:RegisterEvent('ADDON_LOADED')
azerite:SetScript('OnEvent', azerite_update)
azerite:SetScript('OnEnter', function() showAzeriteTooltip(azerite) end)
azerite:SetScript('OnLeave', function() GameTooltip:Hide() end)

hooksecurefunc("SetWatchedFactionIndex", function(self)
	exp_update()
    azerite_update()
end)

Last edited by superfula : 09-27-18 at 03:20 PM.
  Reply With Quote
 

WoWInterface » Developer Discussions » General Authoring Discussion » Azerite bar not showing

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off