here is the full thing the first chunk is the grimUI core. so you can see what is going on or at lest what i have attempted to make go on... 2nd chunk is the xpbar file, all of it.
GrimUIcore.lua
Code:
GrimUI = {}
local mt_grimui = {__index = GrimUI}
local modules = {}
local defaults = {__index={}}
local dummy = function() end
GrimUI.Modules = modules
GrimUI.Dummy = dummy
local function RunSlashCmd(cmd)
local slash, rest = cmd:match("^(%S+)%s*(.-)$")
for name in pairs(SlashCmdList) do
local i = 1
local slashCmd
repeat
slashCmd = _G["SLASH_"..name..i]
if slashCmd == slash then
-- Call the handler
SlashCmdList[name](rest)
return true
end
i = i + 1
until not slashCmd
end
end
GrimUI.RunSlashCMD = RunSlashCmd
function GrimUI:RegisterModule(name)
local module = setmetatable({}, mt_grimui)
modules[name] = module
return module
end
function GrimUI:GetModule(name)
return modules[name]
end
function GrimUI:HideFrame(frame)
if not frame then return end
frame:Hide()
frame.Show = dummy
end
function GrimUI:ShowFrame(frame)
if not frame then return end
frame.Show = nil
frame:Show()
end
function GrimUI:LockFrame(frame)
if not frame then return end
frame.SetPoint = dummy
frame.ClearAllPoints = dummy
end
function GrimUI:UnlockFrame(frame)
if not frame then return end
frame.SetPoint = nil
frame.ClearAllPoints = nil
end
local reloadFrame
function GrimUI:OpenReloadFrame()
if(reloadFrame) then
return reloadFrame:Show()
end
reloadFrame = CreateFrame("Frame", nil, UIParent)
reloadFrame:SetHeight(160)
reloadFrame:SetWidth(350)
reloadFrame:SetFrameStrata("HIGH")
reloadFrame:SetFrameLevel(5)
reloadFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 200)
reloadFrame:SetBackdrop{
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
tile = true,
tileSize = 32,
edgeSize = 32,
insets = {
left = 11,
right = 12,
top = 12,
bottom = 11
}
}
local text = reloadFrame:CreateFontString(nil, "ARTWORK", "GameFontNormalHuge")
text:SetText("GrimUI: Reload")
text:SetPoint("TOP", 0, -20)
local text2 = reloadFrame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
text2:SetText("GrimUI requires a relog or ReloadUI\n to finish its configuration.")
text2:SetPoint("TOP", 0, -60)
local button = CreateFrame("Button", nil, reloadFrame, "UIPanelButtonTemplate")
button:SetHeight(45)
button:SetWidth(125)
button:SetPoint("BOTTOMLEFT", 15, 15)
button:SetText("Reload")
button:RegisterForClicks("AnyUp")
button:SetScript("OnClick", ReloadUI)
local button2 = CreateFrame("Button", nil, reloadFrame, "UIPanelButtonTemplate")
button2:SetHeight(45)
button2:SetWidth(125)
button2:SetPoint("BOTTOMRIGHT", -15, 15)
button2:SetText("Cancel")
button2:RegisterForClicks("AnyUp")
button2:SetScript("OnClick", function() reloadFrame:Hide() end)
end
local eventFrame = CreateFrame("Frame", nil, UIParent)
eventFrame:RegisterEvent("PLAYER_LOGIN")
eventFrame:SetScript("OnEvent", function()
if not GrimUIData then GrimUIData = {modsConfigured = {}} end
GrimUI.Data = setmetatable(GrimUIData, defaults)
for name, module in pairs(modules) do
if module.OnFirstLoad and not GrimUIData.modsConfigured[name] then
module:OnFirstLoad(GrimUIData)
GrimUIData.modsConfigured[name] = true
end
if module.OnInitialize then
module:OnInitialize()
end
end
end)
ExpRepBar.lua
Code:
local module = GrimUI:RegisterModule("ExpRepBar")
function module:OnInitialize()
if GrimUIData.xpBarvar == nil then
GrimUIData.xpBarvar = xpTot
end
end
local frame = CreateFrame("Frame", nil, UIParent)
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
frame:RegisterEvent("PLAYER_XP_UPDATE")
frame:RegisterEvent("PLAYER_LEVEL_UP")
frame:RegisterEvent("UPDATE_EXHAUSTION")
GrimUI.frame = frame
local border = CreateFrame('Button', "xpBarClick", UIParent)
border:SetHeight(20)
border:SetWidth(220)
border:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
border:SetFrameStrata("HIGH")
border:SetFrameLevel("4")
local xpText = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
xpText:SetPoint("CENTER", border, "CENTER", 0, 0)
xpText:SetTextColor(.9, .7, 1)
xpText:SetFont("Fonts\\FRIZQT__.TTF", 11, "nil")
frame.xpText = xpText
local xpBar = CreateFrame("StatusBar", nil, frame, "TextStatusBar")
xpBar:SetWidth(218)
xpBar:SetHeight(20)
xpBar:SetPoint("CENTER", border, "CENTER", 0, 0)
xpBar:SetStatusBarTexture[[Interface\TargetingFrame\UI-StatusBar]]
xpBar:SetStatusBarColor(.5, 0, .75, 1)
xpBar:SetFrameLevel("1")
frame.xpBar = xpBar
local bg = xpBar:CreateTexture(nil, "BACKGROUND")
bg:SetTexture(0, 0, 0, .5)
bg:SetWidth(218)
bg:SetHeight(20)
bg:SetPoint("CENTER", border, "CENTER", 0, 0)
frame:SetScript("OnEvent", function(self)
local currXP, nextXP = UnitXP("Player"), UnitXPMax("Player")
local leftXP = (nextXP - currXP)
local _, myClass = UnitClass("player")
local petXPcur, petXPnex = GetPetExperience();
local petXPleft = (petXPnex - petXPcur)
local restXP, percentXP = GetXPExhaustion(), floor(currXP / nextXP * 100)
local percentRestXP = floor(restXP / nextXP * 100)
local str
if GrimUIData.xpBarvar == xpLeft and myClass == "HUNTER" then
str = ("%s L (%s %s%%R) P %s"):format(leftXP, restXP, percentRestXP, petXPleft)
elseif GrimUIData.xpBarvar == xpLeft and myClass ~= "HUNTER" then
str = ("%s L (%s %s%%R)"):format(leftXP, restXP, percentRestXP)
elseif GrimUIData.xpBarvar == xpTot and myclass == "HUNTER" then
str = ("%s/%s (%s%%R) P %s/%s"):format(currXP, nextXP, percentRestXP, petXPcur, petXPnex)
elseif GrimUIData.xpBarvar == xpTot and myclass ~= "HUNTER" then
str = ("%s/%s (%s%%R)"):format(curXP, nextXP, percentRestXP)
end
xpText:SetText(str)
xpBar:SetMinMaxValues(min(0, currXP), nextXP)
xpBar:SetValue(currXP)
end)
border:RegisterForClicks('LeftButtonUp', 'RightButtonUp')
border:SetScript('OnClick', function(self, button)
if button == "LeftButton" then
if GrimUIData.xpBarvar == xpLeft then
GrimUIData.xpBarvar = xpTot
elseif GrimUIData.xpBarvar == xpTot then
GrimUIData.xpBarvar = xpLeft
end
frame:GetScript("OnEvent")(frame)
end
end)