Harden Altoholic frames against partial alt records (no-value char getters)
DataStore char-based getters return *no value* for any module that hasn't scanned a given char (DataStore.lua: 'if not arg1.lastUpdate then return end'). Fresh CoA alts have partial per-module data, so the frames crashed feeding 'no value' into format()/concat/arithmetic/pairs. Guarded every such site: AccountSummary, Activity, BagUsage, Quests, Reputations, TabCharacters, DrawCharacterTooltip, recipe tooltip. No DataStore contract change.
This commit is contained in:
@@ -249,12 +249,14 @@ function ns:Update()
|
||||
_G[entry..i.."Name"]:SetWidth(170)
|
||||
_G[entry..i.."Name"]:SetPoint("TOPLEFT", 10, 0)
|
||||
_G[entry..i.."NameNormalText"]:SetWidth(170)
|
||||
_G[entry..i.."NameNormalText"]:SetText(icon .. format("%s (%s)", DS:GetColoredCharacterName(character), DS:GetCharacterClass(character)))
|
||||
_G[entry..i.."Level"]:SetText(GREEN .. DS:GetCharacterLevel(character))
|
||||
-- CoA: DataStore char-based getters return *no value* for any module that hasn't scanned this char
|
||||
-- (DataStore.lua: "if not arg1.lastUpdate then return end"). Fresh alts have partial module data, so guard every result.
|
||||
_G[entry..i.."NameNormalText"]:SetText(icon .. format("%s (%s)", DS:GetColoredCharacterName(character) or "?", DS:GetCharacterClass(character) or ""))
|
||||
_G[entry..i.."Level"]:SetText(GREEN .. (DS:GetCharacterLevel(character) or 0))
|
||||
|
||||
_G[entry..i.."Money"]:SetText(addon:GetMoneyString(DS:GetMoney(character)))
|
||||
_G[entry..i.."Played"]:SetText(addon:GetTimeString(DS:GetPlayTime(character)))
|
||||
_G[entry..i.."XP"]:SetText(GREEN .. DS:GetXPRate(character) .. "%")
|
||||
_G[entry..i.."Money"]:SetText(addon:GetMoneyString(DS:GetMoney(character) or 0))
|
||||
_G[entry..i.."Played"]:SetText(addon:GetTimeString(DS:GetPlayTime(character) or 0))
|
||||
_G[entry..i.."XP"]:SetText(GREEN .. (DS:GetXPRate(character) or 0) .. "%")
|
||||
|
||||
if DS:GetCharacterLevel(character) == MAX_PLAYER_LEVEL then
|
||||
_G[entry..i.."Rested"]:SetText(WHITE .. "0%")
|
||||
@@ -262,7 +264,7 @@ function ns:Update()
|
||||
_G[entry..i.."Rested"]:SetText( addon:GetRestedXP(character) )
|
||||
end
|
||||
|
||||
_G[entry..i.."AvgILevelNormalText"]:SetText(YELLOW..format("%.1f", DS:GetAverageItemLevel(character)))
|
||||
_G[entry..i.."AvgILevelNormalText"]:SetText(YELLOW..format("%.1f", DS:GetAverageItemLevel(character) or 0))
|
||||
|
||||
elseif (lineType == INFO_TOTAL_LINE) then
|
||||
_G[entry..i.."Collapse"]:Hide()
|
||||
@@ -343,22 +345,22 @@ function ns:Level_OnEnter(frame)
|
||||
AltoTooltip:SetOwner(frame, "ANCHOR_RIGHT");
|
||||
|
||||
AltoTooltip:AddDoubleLine(DS:GetColoredCharacterName(character), DS:GetColoredCharacterFaction(character))
|
||||
AltoTooltip:AddLine(format("%s %s |r%s %s", L["Level"],
|
||||
GREEN..DS:GetCharacterLevel(character), DS:GetCharacterRace(character), DS:GetCharacterClass(character)),1,1,1)
|
||||
AltoTooltip:AddLine(format("%s %s |r%s %s", L["Level"],
|
||||
GREEN..(DS:GetCharacterLevel(character) or 0), DS:GetCharacterRace(character) or "", DS:GetCharacterClass(character) or ""),1,1,1)
|
||||
|
||||
local zone, subZone = DS:GetLocation(character)
|
||||
AltoTooltip:AddLine(format("%s: %s |r(%s|r)", L["Zone"], GOLD..zone, GOLD..subZone),1,1,1)
|
||||
|
||||
AltoTooltip:AddLine(format("%s: %s |r(%s|r)", L["Zone"], GOLD..(zone or "?"), GOLD..(subZone or "")),1,1,1)
|
||||
|
||||
local guildName = DS:GetGuildInfo(character)
|
||||
if guildName then
|
||||
AltoTooltip:AddLine(format("%s: %s", GUILD, GREEN..guildName),1,1,1)
|
||||
end
|
||||
|
||||
AltoTooltip:AddLine(EXPERIENCE_COLON .. " "
|
||||
.. GREEN .. DS:GetXP(character) .. WHITE .. "/"
|
||||
.. GREEN .. DS:GetXPMax(character) .. WHITE .. " ("
|
||||
.. GREEN .. DS:GetXPRate(character) .. "%"
|
||||
.. WHITE .. ")",1,1,1);
|
||||
|
||||
AltoTooltip:AddLine(EXPERIENCE_COLON .. " "
|
||||
.. GREEN .. (DS:GetXP(character) or 0) .. WHITE .. "/"
|
||||
.. GREEN .. (DS:GetXPMax(character) or 0) .. WHITE .. " ("
|
||||
.. GREEN .. (DS:GetXPRate(character) or 0) .. "%"
|
||||
.. WHITE .. ")",1,1,1);
|
||||
|
||||
local restXP = DS:GetRestXP(character)
|
||||
if restXP and restXP > 0 then
|
||||
@@ -448,7 +450,7 @@ function ns:AIL_OnEnter(frame)
|
||||
AltoTooltip:ClearLines();
|
||||
AltoTooltip:SetOwner(frame, "ANCHOR_RIGHT");
|
||||
AltoTooltip:AddLine(DS:GetColoredCharacterName(character),1,1,1);
|
||||
AltoTooltip:AddLine(WHITE .. L["Average Item Level"] ..": " .. GREEN.. format("%.1f", DS:GetAverageItemLevel(character)),1,1,1);
|
||||
AltoTooltip:AddLine(WHITE .. L["Average Item Level"] ..": " .. GREEN.. format("%.1f", DS:GetAverageItemLevel(character) or 0),1,1,1);
|
||||
|
||||
addon:AiLTooltip()
|
||||
AltoTooltip:Show();
|
||||
|
||||
Reference in New Issue
Block a user