------------------------------------------------------
-- VARIABLES
------------------------------------------------------
local color = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[(select(2, UnitClass("player")))]
local width = 500
local height = 6
local point = "BOTTOM"
local posx = 0
local posy = 16
local strata = "MEDIUM"
local statusbartex = "Interface\\AddOns\\AdvancementBar\\statusbar.tga"
local circle = "Interface\\AddOns\\AdvancementBar\\orb.tga"
local gloss = "Interface\\AddOns\\AdvancementBar\\gloss.tga"
--number format func
local SVal = function(val)
if val > 1E10 then
return (floor(val/1E9)).."b"
elseif val > 1E9 then
return (floor((val/1E9)*10)/10).."b"
elseif val > 1E7 then
return (floor(val/1E6)).."m"
elseif val > 1E6 then
return (floor((val/1E6)*10)/10).."m"
elseif val > 1E5 then
return (floor(val/1E3)).."k"
elseif val >= 1E3 then
return (floor(val/1E3)) .. (" %03d"):format(val % 1E3)
else
return val
end
end
------------------------------------------------------
-- UPDATING THE BAR
------------------------------------------------------
local updateOrb = function(statusbar,value)
local min, max = statusbar:GetMinMaxValues()
local per = 0
if max > 0 then per = value/max*100 end
local offset = statusbar:GetWidth()-(per*statusbar:GetWidth()/100)
orba:SetPoint("CENTER",statusbar,"RIGHT",-offset,0)
local orbr, orbg, orbb = statusbar:GetStatusBarColor()
orbt:SetVertexColor(orbr,orbg,orbb)
end
local function rbar_ReSetValue(rxp, xp, mxp)
if rxp then
if rxp+xp >= mxp then
restbar:SetValue(mxp)
else
restbar:SetValue(rxp+xp)
end
else
restbar:SetValue(0)
end
end
--showxp
local function bf_ShowXP(rxp, xp, mxp)
bgt:SetVertexColor(color.r,color.g,color.b, 0.2)
statusbar:SetStatusBarColor(color.r,color.g,color.b, 0.85)
statusbar:SetMinMaxValues(0,mxp)
statusbar:SetValue(xp)
text:SetText(format(SVal(xp)).." / "..format(SVal(mxp)).." / "..floor((xp/mxp)*1000)/10 .." %")
restbar:SetMinMaxValues(0,mxp)
rbar_ReSetValue(rxp, xp, mxp)
end
--showrep
local function bf_ShowRep()
name, standing, minrep, maxrep, value = GetWatchedFactionInfo()
if name then
bgt:SetVertexColor(FACTION_BAR_COLORS[standing].r, FACTION_BAR_COLORS[standing].g, FACTION_BAR_COLORS[standing].b, 0.2)
statusbar:SetStatusBarColor(FACTION_BAR_COLORS[standing].r, FACTION_BAR_COLORS[standing].g, FACTION_BAR_COLORS[standing].b, 0.85)
statusbar:SetMinMaxValues(0,maxrep)
statusbar:SetValue(value)
text:SetText("")
restbar:SetValue(0)
local orbr, orbg, orbb = statusbar:GetStatusBarColor()
orbt:SetVertexColor(orbr,orbg,orbb)
else
mxp = UnitXPMax("player")
xp = UnitXP("player")
rxp = GetXPExhaustion()
bf_ShowXP(rxp, xp, mxp)
end
end
------------------------------------------------------
-- CREATE STATUSBAR
------------------------------------------------------
local bg = CreateFrame("Frame", UIParent)
bg:SetSize(width, height)
bg:SetPoint(point, posx, posy)
local bgtexture = bg:CreateTexture(nil,"OVERLAY",nil,0)
bgtexture:SetAllPoints()
bgtexture:SetTexture(statusbartex)
bgtexture:SetVertexColor(color.r,color.g,color.b,0.2)
bgt = bgtexture
local sbar = CreateFrame("StatusBar", nil, bg)
sbar:SetFrameLevel(2)
sbar:SetFrameStrata(strata)
sbar:SetSize(bg:GetSize())
sbar:SetStatusBarTexture(statusbartex)
sbar:SetStatusBarColor(color.r,color.g,color.b,0.8)
sbar:SetPoint("CENTER")
sbar:SetMinMaxValues(0,100)
sbar:SetValue(0)
sbar:SetScript("OnValueChanged", updateOrb)
statusbar = sbar
local rbar = CreateFrame("StatusBar", nil, sbar)
rbar:SetFrameLevel(1)
rbar:SetFrameStrata(strata)
rbar:SetSize(bg:GetSize())
rbar:SetStatusBarTexture(statusbartex)
rbar:SetStatusBarColor(0.6,0.6,0.6,0.6)
rbar:SetPoint("CENTER")
rbar:SetMinMaxValues(0,100)
rbar:SetValue(0)
restbar = rbar
local orb = CreateFrame("Frame", nil, sbar)
orb:SetFrameLevel(3)
orb:SetSize(height*1.5, height*1.5)
local orbtexture = orb:CreateTexture(nil,"OVERLAY",nil,0)
local orbr, orbg, orbb = sbar:GetStatusBarColor()
orbtexture:SetVertexColor(orbr,orbg,orbb)
orbtexture:SetTexture(circle)
orbtexture:SetAllPoints()
orbgloss = orb:CreateTexture(nil,"OVERLAY",nil,7)
orbgloss:SetTexture(gloss)
orbgloss:SetAllPoints()
orbt = orbtexture
orba = orb
orb:EnableMouse(true)
orb:RegisterEvent("PLAYER_XP_UPDATE")
orb:RegisterEvent("PLAYER_LEVEL_UP")
orb:RegisterEvent("PLAYER_ENTERING_WORLD")
orb:RegisterEvent("UPDATE_FACTION")
orb:RegisterEvent("MODIFIER_STATE_CHANGED")
textframe = sbar:CreateFontString(nil, "OVERLAY")
textframe:SetFont(STANDARD_TEXT_FONT, 7, "THINOUTLINE")
textframe:SetPoint("CENTER", 0, 0)
textframe:SetTextColor(color.r,color.g,color.b)
textframe:SetText("XP BAR")
text = textframe
orb:SetScript("OnEvent", function(this, event, arg1, arg2, arg3, arg4, ...)
mxp = UnitXPMax("player")
xp = UnitXP("player")
rxp = GetXPExhaustion()
if event == "PLAYER_ENTERING_WORLD" then
if UnitLevel("player") == MAX_PLAYER_LEVEL then
bf_ShowRep()
else
bf_ShowXP(rxp, xp, mxp)
end
elseif event == "PLAYER_XP_UPDATE" and arg1 == "player" then
statusbar:SetValue(xp)
rbar_ReSetValue(rxp, xp, mxp)
elseif event == "PLAYER_LEVEL_UP" then
if UnitLevel("player") == MAX_PLAYER_LEVEL then
bf_ShowRep()
else
bf_ShowXP(rxp, xp, mxp)
end
elseif event == "MODIFIER_STATE_CHANGED" then
if arg1 == "LCTRL" or arg1 == "RCTRL" then
if arg2 == 1 then
bf_ShowRep()
elseif arg2 == 0 and UnitLevel("player") ~= MAX_PLAYER_LEVEL then
bf_ShowXP(rxp, xp, mxp)
end
end
elseif event == "UPDATE_FACTION" then
if UnitLevel("player") == MAX_PLAYER_LEVEL then
bf_ShowRep()
end
end
end)
orb:SetScript("OnEnter", function()
if UnitAffectingCombat('player') then
else
local mxp = UnitXPMax("player")
local xp = UnitXP("player")
local nxp = mxp - xp
local rxp = GetXPExhaustion()
local name, standing, minrep, maxrep, value = GetWatchedFactionInfo()
GameTooltip:SetOwner(UIParent, "ANCHOR_CURSOR")
if UnitLevel("player") ~= MAX_PLAYER_LEVEL then
GameTooltip:AddLine("exp Bar")
GameTooltip:AddDoubleLine(COMBAT_XP_GAIN, format(SVal(xp)).."|cffffd100/|r"..format(SVal(mxp)).." |cffffd100/|r "..floor((xp/mxp)*1000)/10 .."%",NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
GameTooltip:AddDoubleLine(NEED, format(SVal(nxp)).." |cffffd100/|r "..floor((nxp/mxp)*1000)/10 .."%",NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
if rxp then
GameTooltip:AddDoubleLine(TUTORIAL_TITLE26, format(SVal(rxp)) .." |cffffd100/|r ".. floor((rxp/mxp)*1000)/10 .."%", NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
end
if name then
GameTooltip:AddLine(" ")
end
else
GameTooltip:AddLine("rep Bar")
end
if name then
GameTooltip:AddDoubleLine(FACTION, name, NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
GameTooltip:AddDoubleLine(STANDING, getglobal("FACTION_STANDING_LABEL"..standing), NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,FACTION_BAR_COLORS[standing].r, FACTION_BAR_COLORS[standing].g, FACTION_BAR_COLORS[standing].b)
GameTooltip:AddDoubleLine(REPUTATION, value-minrep .."|cffffd100/|r"..maxrep-minrep.." |cffffd100/|r "..floor((value-minrep)/(maxrep-minrep)*1000)/10 .."%", NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
nrep = maxrep - value
GameTooltip:AddDoubleLine(NEED, format(SVal(nrep)).." |cffffd100/|r "..floor((nrep/maxrep)*1000)/10 .."%",NORMAL_FONT_COLOR.r,NORMAL_FONT_COLOR.g,NORMAL_FONT_COLOR.b,1,1,1)
end
GameTooltip:Show()
end
end)
orb:SetScript("OnLeave", function()
GameTooltip:Hide()
end)