[quote=Fizzlemizz;325288]There's also the problem (Edit: as mentioned by Kakjens) with small remainders giving a result of x.00 Mil. so it could be extended too:
ok the question is how do i implement this with my self.text at the bottom
Lua Code:
--Thank you for your help
--SDPhantom
--Phanx
--Fizzlemizz
local AXP_COLOR = { r = 0.6, g = 0.2, b = 0.1 }
--Lets set up the Frame
local derArtifactBar = CreateFrame("Statusbar", "derArtifactBar",artifactFrame)
derArtifactBar:SetPoint("CENTER", 0, 0)
derArtifactBar:SetHeight(18)
derArtifactBar:SetWidth(artifactFrame:GetWidth() * .968)
derArtifactBar:SetStatusBarTexture("Interface\\AddOns\\_Deranjata\\media\\cast\\Waterline")
derArtifactBar:SetStatusBarColor(AXP_COLOR.r, AXP_COLOR.g, AXP_COLOR.b, 0.5)
derArtifactBar:SetBackdrop({
bgFile = "Interface\\AddOns\\_Deranjata\\media\\cast\\Lines",
insets = { left = 1, right = 1, top = 1, bottom = 1 }
})
derArtifactBar:SetBackdropColor(0.1, 0.1, 0.1)
derArtifactBar:SetBackdropBorderColor(0.6, 0.6, 0.6)
--lets clear any text then set out centerpoint
derArtifactBar.Text=derArtifactBar:CreateFontString(nil, "OVERLAY", "GameFontNormal")
derArtifactBar.Text:SetPoint("CENTER")
--Registering out watched events
derArtifactBar:RegisterEvent("PLAYER_ENTERING_WORLD")
derArtifactBar:RegisterEvent("ARTIFACT_XP_UPDATE")
derArtifactBar:RegisterEvent("UNIT_INVENTORY_CHANGED")
-- now lets update the position and text on the bar so we can always have accurate info
derArtifactBar:SetScript("OnEvent", function(self, event, ...)
if not HasArtifactEquipped() then self:Hide() return end
self:Show()
local itemID, altItemID, name, icon, xp, pointsSpent, quality, artifactAppearanceID, appearanceModID, itemAppearanceID, altItemAppearanceID, altOnTop, artifactTier = C_ArtifactUI.GetEquippedArtifactInfo()
local numPoints, artifactXP, xpForNextPoint = MainMenuBar_GetNumArtifactTraitsPurchasableFromXP(pointsSpent, xp, artifactTier)
self:SetMinMaxValues(0,xpForNextPoint)
self:SetValue(artifactXP)
--Begin Stack Overflow Fix
--function for beautiful numbers
local floor = math.floor
local strlen, strsub = string.len, string.sub
local function ReadableNumber(num)
local ret
local placeValue = ("%%.%df"):format(2) --probably can be improved into "%.0f"
local prefix = ""
if not num then
return "0 "
elseif num >= 1000000000000 then
prefix = " Tril" -- trillion
if mod(num, 1000000000000) < 10000000000 then
ret = floor(num / 1000000000000)
else
ret = placeValue:format(num / 1000000000000) .. " Tril" -- trillion
end
elseif num >= 1000000000 then
prefix = " Bil" -- billion
if mod(num, 1000000000) < 10000000 then
ret = floor(num / 1000000000)
else
ret = placeValue:format(num / 1000000000)
end
elseif num >= 1000000 then
prefix = " Mil" -- million
if mod(num, 1000000) < 10000 then
ret = floor(num / 1000000)
else
ret = placeValue:format(num / 1000000)
end
elseif num >= 1000 then
prefix = "k" -- thousand
ret = placeValue:format(num / 1000)
else
ret = num
end
local len = strlen(ret)
if len > 3 then
if strsub(ret, len-2, len-2) == "." and strsub(ret, len) == "0" then
ret = strsub(ret, 1, len-1)
end
end
return ret..prefix
end
self.Text:SetFormattedText("Current %d%s/%d%s +%d Points",artifactXP,prefix,xpForNextPoint,prefix,numPoints)
end)