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.
|