81 lines
3.1 KiB
Lua
81 lines
3.1 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local DT = E:GetModule('DataTexts')
|
|
|
|
local _G = _G
|
|
local format = format
|
|
local UnitXP, UnitXPMax = UnitXP, UnitXPMax
|
|
local IsXPUserDisabled, GetXPExhaustion = IsXPUserDisabled, GetXPExhaustion
|
|
local IsPlayerAtEffectiveMaxLevel = IsPlayerAtEffectiveMaxLevel
|
|
|
|
local CurrentXP, XPToLevel, RestedXP, PercentRested
|
|
local PercentXP, RemainXP, RemainTotal, RemainBars
|
|
|
|
local function OnEvent(self)
|
|
local displayString = ''
|
|
if IsXPUserDisabled() then
|
|
displayString = L["Disabled"]
|
|
elseif IsPlayerAtEffectiveMaxLevel() then
|
|
displayString = L["Max Level"]
|
|
else
|
|
CurrentXP, XPToLevel, RestedXP = UnitXP('player'), UnitXPMax('player'), GetXPExhaustion()
|
|
if XPToLevel <= 0 then XPToLevel = 1 end
|
|
|
|
local remainXP = XPToLevel - CurrentXP
|
|
local remainPercent = remainXP / XPToLevel
|
|
|
|
-- values we also use in OnEnter
|
|
RemainTotal, RemainBars = remainPercent * 100, remainPercent * 20
|
|
PercentXP, RemainXP = (CurrentXP / XPToLevel) * 100, E:ShortValue(remainXP)
|
|
|
|
local textFormat = E.global.datatexts.settings.Experience.textFormat
|
|
if textFormat == 'PERCENT' then
|
|
displayString = format('%.2f%%', PercentXP)
|
|
elseif textFormat == 'CURMAX' then
|
|
displayString = format('%s - %s', E:ShortValue(CurrentXP), E:ShortValue(XPToLevel))
|
|
elseif textFormat == 'CURPERC' then
|
|
displayString = format('%s - %.2f%%', E:ShortValue(CurrentXP), PercentXP)
|
|
elseif textFormat == 'CUR' then
|
|
displayString = format('%s', E:ShortValue(CurrentXP))
|
|
elseif textFormat == 'REM' then
|
|
displayString = format('%s', RemainXP)
|
|
elseif textFormat == 'CURREM' then
|
|
displayString = format('%s - %s', E:ShortValue(CurrentXP), RemainXP)
|
|
elseif textFormat == 'CURPERCREM' then
|
|
displayString = format('%s - %.2f%% (%s)', E:ShortValue(CurrentXP), PercentXP, RemainXP)
|
|
end
|
|
|
|
if RestedXP and RestedXP > 0 then
|
|
PercentRested = (RestedXP / XPToLevel) * 100
|
|
|
|
if textFormat == 'PERCENT' then
|
|
displayString = format('%s R:%.2f%%', displayString, PercentRested)
|
|
elseif textFormat == 'CURPERC' then
|
|
displayString = format('%s R:%s [%.2f%%]', displayString, E:ShortValue(RestedXP), PercentRested)
|
|
elseif textFormat ~= 'NONE' then
|
|
displayString = format('%s R:%s', displayString, E:ShortValue(RestedXP))
|
|
end
|
|
end
|
|
end
|
|
|
|
self.text:SetText(displayString)
|
|
end
|
|
|
|
local function OnEnter()
|
|
if IsXPUserDisabled() or IsPlayerAtEffectiveMaxLevel() then return end
|
|
|
|
DT.tooltip:ClearLines()
|
|
DT.tooltip:AddLine(L["Experience"])
|
|
DT.tooltip:AddLine(' ')
|
|
|
|
DT.tooltip:AddDoubleLine(L["XP:"], format(' %d / %d (%.2f%%)', CurrentXP, XPToLevel, PercentXP), 1, 1, 1)
|
|
DT.tooltip:AddDoubleLine(L["Remaining:"], format(' %s (%.2f%% - %d '..L["Bars"]..')', RemainXP, RemainTotal, RemainBars), 1, 1, 1)
|
|
|
|
if RestedXP and RestedXP > 0 then
|
|
DT.tooltip:AddDoubleLine(L["Rested:"], format('+%d (%.2f%%)', RestedXP, PercentRested), 1, 1, 1)
|
|
end
|
|
|
|
DT.tooltip:Show()
|
|
end
|
|
|
|
DT:RegisterDatatext('Experience', nil, {'PLAYER_XP_UPDATE', 'DISABLE_XP_GAIN', 'ENABLE_XP_GAIN', 'UPDATE_EXHAUSTION'}, OnEvent, nil, nil, OnEnter, nil, _G.COMBAT_XP_GAIN)
|