09-23-18, 08:15 PM | #1 |
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" 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. |
|
WoWInterface » Developer Discussions » General Authoring Discussion » Azerite bar not showing |
«
Previous Thread
|
Next Thread
»
|
Thread Tools | |
Display Modes | |
|
|