
KeylessUniversal

local tw = game:GetService("TweenService")
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
local plrs = game:GetService("Players")
local cg = game:GetService("CoreGui")
local http = game:GetService("HttpService")
local folderName = "M3 Lib Assets"
local jsonName = "m3font.json"
local ttfName = "GoogleSans.ttf"
local fontUrl = "https://github.com/fiangg20/Fian_gg-Repo/raw/refs/heads/main/GoogleSansFlex_24pt-Regular.ttf"
if not isfolder(folderName) then makefolder(folderName) end
if not isfile(folderName .. "/" .. ttfName) then
local fontFile = game:HttpGet(fontUrl)
writefile(folderName .. "/" .. ttfName, fontFile)
end
local assetURL = getcustomasset(folderName .. "/" .. ttfName)
local fontJsonData = {
name = "CustomFamily_GoogleSans",
faces = {
{
name = "Regular",
weight = 400,
style = "normal",
assetId = assetURL
}
}
}
local pathJSON = folderName .. "/" .. jsonName
writefile(pathJSON, http:JSONEncode(fontJsonData))
local m3Font = Font.new(getcustomasset(pathJSON))
local m3Gray = Color3.fromRGB(202, 196, 208)
local cp = {
["Purple"] = {bg=Color3.fromRGB(28,27,31), fg=Color3.fromRGB(230,225,229), pri=Color3.fromRGB(208,188,255), onpri=Color3.fromRGB(56,30,114), inact=Color3.fromRGB(43,41,48), out=Color3.fromRGB(147,143,153)},
["Blue"] = {bg=Color3.fromRGB(26,28,30), fg=Color3.fromRGB(226,226,230), pri=Color3.fromRGB(162,201,255), onpri=Color3.fromRGB(0,50,90), inact=Color3.fromRGB(40,42,46), out=Color3.fromRGB(141,145,153)},
["Red"] = {bg=Color3.fromRGB(32,26,25), fg=Color3.fromRGB(237,224,222), pri=Color3.fromRGB(255,180,168), onpri=Color3.fromRGB(105,0,5), inact=Color3.fromRGB(50,40,38), out=Color3.fromRGB(160,140,137)},
["Green"] = {bg=Color3.fromRGB(26,28,25), fg=Color3.fromRGB(225,227,223), pri=Color3.fromRGB(143,215,135), onpri=Color3.fromRGB(0,57,10), inact=Color3.fromRGB(40,43,40), out=Color3.fromRGB(142,145,143)},
["Orange"] = {bg=Color3.fromRGB(32,27,24), fg=Color3.fromRGB(236,224,219), pri=Color3.fromRGB(255,183,123), onpri=Color3.fromRGB(76,38,0), inact=Color3.fromRGB(50,42,38), out=Color3.fromRGB(159,141,132)},
["PitchBlack"] = {bg=Color3.fromRGB(0,0,0), fg=Color3.fromRGB(230,225,229), pri=Color3.fromRGB(208,188,255), onpri=Color3.fromRGB(56,30,114), inact=Color3.fromRGB(28,28,30), out=Color3.fromRGB(147,143,153)}
}
local curTheme = cp["Blue"]
local objs = {bg={}, fg={}, pri={}, onpri={}, inact={}, out={}, s_trk={}, s_thm={}, tab_btn={}, tbox={}, icon={}, dlg_bg={}, dlg_fg={}, sl_val={}}
local function t(o, p, v, d)
tw:Create(o, TweenInfo.new(d or 0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {[p] = v}):Play()
end
local function CreateM3UI(titleText, sizeX, sizeY)
local lib = {}
local resizeHandle
local old = cg:FindFirstChild(titleText or "Nox")
if old then old:Destroy() end
local gui = Instance.new("ScreenGui")
gui.Name = titleText or "Nox"
gui.IgnoreGuiInset = true
gui.ResetOnSpawn = false
gui.DisplayOrder = 1e6
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = cg
local win = Instance.new("Frame", gui)
win.Size = UDim2.new(0, sizeX or 380, 0, sizeY or 520)
win.Position = UDim2.new(0.5, -sizeX/2, 0.5, -sizeY/2)
win.BackgroundColor3 = curTheme.bg
win.BorderSizePixel = 0
win.ClipsDescendants = true
table.insert(objs.bg, win)
Instance.new("UICorner", win).CornerRadius = UDim.new(0, 16)
local top = Instance.new("TextLabel", win)
top.Size = UDim2.new(1, -120, 0, 45)
top.Position = UDim2.new(0, 24, 0, 10)
top.BackgroundTransparency = 1
top.Text = titleText or "Nameless UI"
top.TextColor3 = curTheme.fg
top.FontFace = Font.new(m3Font.Family, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
top.TextSize = 22
top.TextXAlignment = Enum.TextXAlignment.Left
table.insert(objs.fg, top)
local ctrlCont = Instance.new("Frame", win)
ctrlCont.Size = UDim2.new(0, 100, 0, 32)
ctrlCont.AnchorPoint = Vector2.new(1, 0)
ctrlCont.Position = UDim2.new(1, -12, 0, 16)
ctrlCont.BackgroundTransparency = 1
local ctrlLayout = Instance.new("UIListLayout", ctrlCont)
ctrlLayout.FillDirection = Enum.FillDirection.Horizontal
ctrlLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
ctrlLayout.SortOrder = Enum.SortOrder.LayoutOrder
ctrlLayout.Padding = UDim.new(0, 8)
local function createCtrlBtn(name, icon)
local btn = Instance.new("TextButton", ctrlCont)
btn.Name = name
btn.Size = UDim2.new(0, 32, 0, 32)
btn.BackgroundTransparency = 1
btn.Text = ""
Instance.new("UICorner", btn).CornerRadius = UDim.new(1, 0)
local icn = Instance.new("ImageLabel", btn)
icn.Size = UDim2.new(0, 18, 0, 18)
icn.AnchorPoint = Vector2.new(0.5, 0.5)
icn.Position = UDim2.new(0.5, 0, 0.5, 0)
icn.BackgroundTransparency = 1
icn.Image = icon
icn.ImageColor3 = curTheme.out
table.insert(objs.icon, icn)
btn.MouseEnter:Connect(function()
t(btn, "BackgroundTransparency", 0.9, 0.2)
t(btn, "BackgroundColor3", curTheme.out, 0.2)
end)
btn.MouseLeave:Connect(function()
t(btn, "BackgroundTransparency", 1, 0.2)
end)
return btn, icn
end
local iconMin = "rbxassetid://111317703462067"
local iconMax = "rbxassetid://124475854066414"
local iconClose = "rbxassetid://117872438909014"
local btnMinMax, icnMinMax = createCtrlBtn("Minimize and Maximize", iconMin)
local btnClose, icnClose = createCtrlBtn("Close", iconClose)
local isMin = false
local isMax = false
local preSize = win.Size
local prePos = win.Position
btnMinMax.MouseButton1Click:Connect(function()
if isMin then
isMin = false
icnMinMax.Image = iconMin
t(win, "Size", preSize, 0.4)
if resizeHandle then resizeHandle.Visible = true end
else
if not isMax then preSize = win.Size end
isMin = true
isMax = false
icnMinMax.Image = iconMax
t(win, "Size", UDim2.new(0, win.Size.X.Offset, 0, 64), 0.4)
if resizeHandle then resizeHandle.Visible = false end
end
end)
btnClose.MouseButton1Click:Connect(function()
gui:Destroy()
end)
local tabArea = Instance.new("Frame", win)
tabArea.Size = UDim2.new(1, 0, 0, 40)
tabArea.Position = UDim2.new(0, 0, 0, 55)
tabArea.BackgroundTransparency = 1
tabArea.ClipsDescendants = true
tabArea.Visible = false
local sep = Instance.new("Frame", tabArea)
sep.Size = UDim2.new(1, 0, 0, 1)
sep.AnchorPoint = Vector2.new(0, 1)
sep.Position = UDim2.new(0, 0, 1, 0)
sep.BackgroundColor3 = curTheme.inact
sep.BorderSizePixel = 0
table.insert(objs.inact, sep)
local tabListCont = Instance.new("ScrollingFrame", tabArea)
tabListCont.Size = UDim2.new(1, 0, 1, 0)
tabListCont.BackgroundTransparency = 1
tabListCont.ScrollBarThickness = 0
tabListCont.CanvasSize = UDim2.new(0, 0, 0, 0)
tabListCont.AutomaticCanvasSize = Enum.AutomaticSize.X
local dragTab = false
local isDraggingTabAction = false
local dragTabStartX = 0
local dragTabStartCanvasX = 0
local function startTabDrag(input)
if input.UserInputType.Name:find("MouseButton1") or input.UserInputType.Name:find("Touch") then
dragTab = true
isDraggingTabAction = false
dragTabStartX = input.Position.X
dragTabStartCanvasX = tabListCont.CanvasPosition.X
end
end
tabListCont.InputBegan:Connect(startTabDrag)
uis.InputChanged:Connect(function(input)
if dragTab and (input.UserInputType.Name:find("MouseMovement") or input.UserInputType.Name:find("Touch")) then
local delta = dragTabStartX - input.Position.X
if math.abs(delta) > 5 then
isDraggingTabAction = true
tabListCont.CanvasPosition = Vector2.new(dragTabStartCanvasX + delta, 0)
end
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType.Name:find("MouseButton1") or input.UserInputType.Name:find("Touch") then
dragTab = false
end
end)
local tabListInner = Instance.new("Frame", tabListCont)
tabListInner.Size = UDim2.new(1, 0, 1, 0)
tabListInner.BackgroundTransparency = 1
tabListInner.AutomaticSize = Enum.AutomaticSize.X
local tPad = Instance.new("UIPadding", tabListInner)
tPad.PaddingLeft = UDim.new(0, 24)
tPad.PaddingRight = UDim.new(0, 24)
local tabList = Instance.new("UIListLayout", tabListInner)
tabList.FillDirection = Enum.FillDirection.Horizontal
tabList.SortOrder = Enum.SortOrder.LayoutOrder
tabList.HorizontalAlignment = Enum.HorizontalAlignment.Center
tabList.Padding = UDim.new(0, 12)
local indicator = Instance.new("Frame", tabListCont)
indicator.Size = UDim2.new(0, 0, 0, 3)
indicator.AnchorPoint = Vector2.new(0.5, 1)
indicator.Position = UDim2.new(0, 0, 1, 0)
indicator.BackgroundColor3 = curTheme.pri
Instance.new("UICorner", indicator).CornerRadius = UDim.new(1, 0)
table.insert(objs.pri, indicator)
local defaultCont = Instance.new("ScrollingFrame", win)
defaultCont.Size = UDim2.new(1, 0, 1, -70)
defaultCont.Position = UDim2.new(0, 0, 0, 60)
defaultCont.BackgroundTransparency = 1
defaultCont.ScrollBarThickness = 0
defaultCont.CanvasSize = UDim2.new(0, 0, 0, 0)
defaultCont.AutomaticCanvasSize = Enum.AutomaticSize.Y
local dPad = Instance.new("UIPadding", defaultCont)
dPad.PaddingLeft = UDim.new(0, 24)
dPad.PaddingRight = UDim.new(0, 24)
dPad.PaddingBottom = UDim.new(0, 20)
dPad.PaddingTop = UDim.new(0, 20)
local defLayout = Instance.new("UIListLayout", defaultCont)
defLayout.SortOrder = Enum.SortOrder.LayoutOrder
defLayout.Padding = UDim.new(0, 18)
local contClip = Instance.new("Frame", win)
contClip.Size = UDim2.new(1, 0, 1, -100)
contClip.Position = UDim2.new(0, 0, 0, 100)
contClip.BackgroundTransparency = 1
contClip.ClipsDescendants = true
contClip.Visible = false
lib.Tabs = {}
lib.TabContainers = {}
lib.ActiveTabIndex = 0
lib.CurrentBuildContainer = defaultCont
lib.UseTabs = false
lib.ElementCounter = 0
function lib:ChangePalette(name)
if not cp[name] then return end
curTheme = cp[name]
local d = 0.5
for _,v in pairs(objs.bg) do t(v, "BackgroundColor3", curTheme.bg, d) end
for _,v in pairs(objs.fg) do t(v, "TextColor3", curTheme.fg, d) end
for _,v in pairs(objs.pri) do t(v, "BackgroundColor3", curTheme.pri, d) end
for _,v in pairs(objs.onpri) do t(v, "TextColor3", curTheme.onpri, d) end
for _,v in pairs(objs.inact) do t(v, "BackgroundColor3", curTheme.inact, d) end
for _,x in pairs(objs.s_trk) do t(x.obj, "BackgroundColor3", x.state and curTheme.pri or curTheme.inact, d) end
for _,x in pairs(objs.s_thm) do t(x.obj, "BackgroundColor3", x.state and curTheme.onpri or curTheme.out, d) end
for _,x in pairs(objs.tab_btn) do
t(x.lbl, "TextColor3", x.active and curTheme.pri or m3Gray, d)
if x.icon then t(x.icon, "ImageColor3", x.active and curTheme.pri or m3Gray, d) end
end
for _, icn in pairs(objs.icon) do t(icn, "ImageColor3", curTheme.out, d) end
for _, v in pairs(objs.sl_val) do t(v, "TextColor3", curTheme.pri, d) end
for _,v in pairs(objs.dlg_bg) do t(v, "BackgroundColor3", curTheme.bg:Lerp(curTheme.pri, 0.11), d) end
for _,v in pairs(objs.dlg_fg) do t(v, "TextColor3", curTheme.fg, d) end
for _, tb in pairs(objs.tbox) do
t(tb.lbl, "TextColor3", tb.focused and curTheme.pri or curTheme.out, d)
t(tb.box, "TextColor3", curTheme.fg, d)
t(tb.line, "BackgroundColor3", tb.focused and curTheme.pri or curTheme.out, d)
t(tb.bg, "BackgroundColor3", curTheme.inact, d)
end
end
function lib:SelectTab(txt)
local targetIdx = 1
for i, tData in ipairs(lib.Tabs) do
if tData.btn.Text == txt then targetIdx = i break end
end
if targetIdx == lib.ActiveTabIndex then return end
local dir = (targetIdx > lib.ActiveTabIndex) and 1 or -1
if lib.ActiveTabIndex == 0 then dir = 0 end
local oldCont = (lib.ActiveTabIndex > 0) and lib.TabContainers[lib.ActiveTabIndex] or defaultCont
local newCont = lib.TabContainers[targetIdx]
for i, tData in ipairs(lib.Tabs) do
local btn = tData.btn
if i == targetIdx then
tData.data.active = true
t(tData.data.lbl, "TextColor3", curTheme.pri, 0.3)
if tData.data.icon then t(tData.data.icon, "ImageColor3", curTheme.pri, 0.3) end
task.spawn(function()
rs.RenderStepped:Wait()
rs.RenderStepped:Wait()
local btnCenterX = (btn.AbsolutePosition.X - tabListCont.AbsolutePosition.X) + tabListCont.CanvasPosition.X + (btn.AbsoluteSize.X / 2)
local contentWidth = tData.data.lbl.TextBounds.X
tw:Create(indicator, TweenInfo.new(0.4, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Position = UDim2.new(0, btnCenterX, 1, 0),
Size = UDim2.new(0, contentWidth, 0, 3)
}):Play()
end)
else
tData.data.active = false
t(tData.data.lbl, "TextColor3", m3Gray, 0.3)
if tData.data.icon then t(tData.data.icon, "ImageColor3", m3Gray, 0.3) end
end
end
if oldCont and dir ~= 0 and oldCont ~= defaultCont then
newCont.Position = UDim2.new(dir, dir * 50, 0, 0)
newCont.Visible = true
t(oldCont, "Position", UDim2.new(-dir, -dir * 50, 0, 0), 0.4)
t(newCont, "Position", UDim2.new(0, 0, 0, 0), 0.4)
local savedOld = oldCont
task.delay(0.4, function()
if lib.TabContainers[lib.ActiveTabIndex] ~= savedOld then savedOld.Visible = false end
end)
else
newCont.Position = UDim2.new(0, 0, 0, 0)
newCont.Visible = true
if oldCont and oldCont ~= defaultCont then oldCont.Visible = false end
end
lib.ActiveTabIndex = targetIdx
end
function lib:AddTab(txt, iconId)
if not lib.UseTabs then
lib.UseTabs = true
tabArea.Visible = true
contClip.Visible = true
defaultCont.Visible = false
end
local btn = Instance.new("TextButton", tabListInner)
btn.BackgroundTransparency = 1
btn.FontFace = m3Font
btn.Text = txt
btn.TextSize = 14
btn.TextTransparency = 1
btn.TextColor3 = m3Gray
btn.Size = UDim2.new(0, 20, 1, 0)
btn.AutomaticSize = Enum.AutomaticSize.X
local uip = Instance.new("UIPadding", btn)
uip.PaddingLeft = UDim.new(0, 16)
uip.PaddingRight = UDim.new(0, 16)
local contentLayout = Instance.new("UIListLayout", btn)
contentLayout.FillDirection = Enum.FillDirection.Horizontal
contentLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
contentLayout.VerticalAlignment = Enum.VerticalAlignment.Center
contentLayout.SortOrder = Enum.SortOrder.LayoutOrder
contentLayout.Padding = UDim.new(0, 8)
local iconImg = nil
if iconId and iconId ~= "" then
iconImg = Instance.new("ImageLabel", btn)
iconImg.BackgroundTransparency = 1
iconImg.Image = iconId
iconImg.Size = UDim2.new(0, 18, 0, 18)
iconImg.ImageColor3 = m3Gray
iconImg.LayoutOrder = 1
end
local txtLbl = Instance.new("TextLabel", btn)
txtLbl.BackgroundTransparency = 1
txtLbl.Text = txt
txtLbl.FontFace = m3Font
txtLbl.TextSize = 14
txtLbl.TextColor3 = m3Gray
txtLbl.AutomaticSize = Enum.AutomaticSize.XY
txtLbl.LayoutOrder = 2
local tData = {obj = btn, active = false, icon = iconImg, lbl = txtLbl}
table.insert(objs.tab_btn, tData)
local c = Instance.new("ScrollingFrame", contClip)
c.Size = UDim2.new(1, 0, 1, 0)
c.BackgroundTransparency = 1
c.ScrollBarThickness = 0
c.CanvasSize = UDim2.new(0, 0, 0, 0)
c.AutomaticCanvasSize = Enum.AutomaticSize.Y
c.Visible = false
local cPad = Instance.new("UIPadding", c)
cPad.PaddingLeft = UDim.new(0, 24)
cPad.PaddingRight = UDim.new(0, 24)
cPad.PaddingBottom = UDim.new(0, 20)
cPad.PaddingTop = UDim.new(0, 20)
local cLayout = Instance.new("UIListLayout", c)
cLayout.SortOrder = Enum.SortOrder.LayoutOrder
cLayout.Padding = UDim.new(0, 18)
table.insert(lib.Tabs, {btn = btn, data = tData})
table.insert(lib.TabContainers, c)
lib.CurrentBuildContainer = c
btn.InputBegan:Connect(startTabDrag)
btn.MouseButton1Click:Connect(function()
if not isDraggingTabAction then
lib:SelectTab(txt)
end
end)
if #lib.Tabs == 1 then lib:SelectTab(txt) end
return {
SetText = function(self, newTxt)
btn.Text = newTxt
txtLbl.Text = newTxt
if lib.ActiveTabIndex > 0 and lib.Tabs[lib.ActiveTabIndex].btn == btn then
lib:SelectTab(newTxt)
end
end
}
end
function lib:AddDivider()
lib.ElementCounter += 1
local div = Instance.new("Frame", lib.CurrentBuildContainer)
div.Size = UDim2.new(1, 0, 0, 1)
div.LayoutOrder = lib.ElementCounter
div.BackgroundColor3 = curTheme.inact
div.BorderSizePixel = 0
table.insert(objs.inact, div)
end
function lib:AddTextBox(labelTxt, cb)
lib.ElementCounter += 1
local frame = Instance.new("Frame", lib.CurrentBuildContainer)
frame.LayoutOrder = lib.ElementCounter
frame.Size = UDim2.new(1, 0, 0, 56)
frame.BackgroundColor3 = curTheme.inact
frame.BorderSizePixel = 0
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 4)
table.insert(objs.inact, frame)
local flatBot = Instance.new("Frame", frame)
flatBot.Size = UDim2.new(1, 0, 0, 4)
flatBot.Position = UDim2.new(0, 0, 1, -4)
flatBot.BackgroundColor3 = curTheme.inact
flatBot.BorderSizePixel = 0
table.insert(objs.inact, flatBot)
local lbl = Instance.new("TextLabel", frame)
lbl.Size = UDim2.new(1, -32, 0, 20)
lbl.Position = UDim2.new(0, 16, 0, 6)
lbl.BackgroundTransparency = 1
lbl.Text = labelTxt
lbl.TextColor3 = curTheme.out
lbl.FontFace = m3Font
lbl.TextSize = 11
lbl.TextXAlignment = Enum.TextXAlignment.Left
local tbox = Instance.new("TextBox", frame)
tbox.Size = UDim2.new(1, -32, 0, 24)
tbox.Position = UDim2.new(0, 16, 0, 26)
tbox.BackgroundTransparency = 1
tbox.Text = ""
tbox.PlaceholderText = ""
tbox.TextColor3 = curTheme.fg
tbox.FontFace = m3Font
tbox.TextSize = 15
tbox.TextXAlignment = Enum.TextXAlignment.Left
tbox.ClearTextOnFocus = false
local botLine = Instance.new("Frame", frame)
botLine.Size = UDim2.new(1, 0, 0, 1)
botLine.AnchorPoint = Vector2.new(0, 1)
botLine.Position = UDim2.new(0, 0, 1, 0)
botLine.BackgroundColor3 = curTheme.out
botLine.BorderSizePixel = 0
local tbData = {box = tbox, line = botLine, lbl = lbl, bg = frame, focused = false}
table.insert(objs.tbox, tbData)
tbox.Focused:Connect(function()
tbData.focused = true
t(botLine, "BackgroundColor3", curTheme.pri, 0.2)
t(lbl, "TextColor3", curTheme.pri, 0.2)
tw:Create(botLine, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, 0, 0, 2)}):Play()
end)
tbox.FocusLost:Connect(function(enter)
tbData.focused = false
t(botLine, "BackgroundColor3", curTheme.out, 0.2)
t(lbl, "TextColor3", curTheme.out, 0.2)
tw:Create(botLine, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {Size = UDim2.new(1, 0, 0, 1)}):Play()
if cb then cb(tbox.Text, enter) end
end)
return {
SetText = function(self, newTxt)
lbl.Text = newTxt
end,
SetValue = function(self, newVal)
tbox.Text = tostring(newVal)
end
}
end
function lib:AddButton(txt, cb, wdth)
lib.ElementCounter += 1
local container = Instance.new("Frame", lib.CurrentBuildContainer)
container.LayoutOrder = lib.ElementCounter
container.Size = UDim2.new(1, 0, 0, 44)
container.BackgroundTransparency = 1
local b = Instance.new("TextButton", container)
if wdth then
b.Size = UDim2.new(0, wdth, 1, 0)
b.AnchorPoint = Vector2.new(0.5, 0.5)
b.Position = UDim2.new(0.5, 0, 0.5, 0)
else
b.Size = UDim2.new(1, 0, 1, 0)
b.Position = UDim2.new(0, 0, 0, 0)
end
b.BackgroundColor3 = curTheme.pri
b.Text = ""
b.AutoButtonColor = false
table.insert(objs.pri, b)
Instance.new("UICorner", b).CornerRadius = UDim.new(1, 0)
local txl = Instance.new("TextLabel", b)
txl.Size = UDim2.new(1, 0, 1, 0)
txl.BackgroundTransparency = 1
txl.Text = txt
txl.TextColor3 = curTheme.onpri
txl.FontFace = m3Font
txl.TextSize = 15
table.insert(objs.onpri, txl)
b.MouseEnter:Connect(function() t(b, "BackgroundColor3", curTheme.fg, 0.2) end)
b.MouseLeave:Connect(function() t(b, "BackgroundColor3", curTheme.pri, 0.2) end)
b.MouseButton1Click:Connect(function()
if cb then cb() end
end)
return {
SetText = function(self, newTxt)
txl.Text = newTxt
end
}
end
function lib:AddSwitch(txt, def, cb)
lib.ElementCounter += 1
local st = def or false
local r = Instance.new("Frame", lib.CurrentBuildContainer)
r.LayoutOrder = lib.ElementCounter
r.Size = UDim2.new(1, 0, 0, 48)
r.BackgroundTransparency = 1
local l = Instance.new("TextLabel", r)
l.Size = UDim2.new(1, -60, 1, 0)
l.BackgroundTransparency = 1
l.Text = txt
l.TextColor3 = curTheme.fg
l.FontFace = m3Font
l.TextSize = 16
l.TextXAlignment = Enum.TextXAlignment.Left
table.insert(objs.fg, l)
local trk = Instance.new("TextButton", r)
trk.Size = UDim2.new(0, 52, 0, 32)
trk.AnchorPoint = Vector2.new(1, 0.5)
trk.Position = UDim2.new(1, 0, 0.5, 0)
trk.BackgroundColor3 = st and curTheme.pri or curTheme.inact
trk.Text = ""
trk.AutoButtonColor = false
Instance.new("UICorner", trk).CornerRadius = UDim.new(1, 0)
local tData = {obj=trk, state=st}
table.insert(objs.s_trk, tData)
local thm = Instance.new("Frame", trk)
thm.AnchorPoint = Vector2.new(0.5, 0.5)
thm.Size = st and UDim2.new(0, 24, 0, 24) or UDim2.new(0, 16, 0, 16)
thm.Position = st and UDim2.new(0, 36, 0.5, 0) or UDim2.new(0, 16, 0.5, 0)
thm.BackgroundColor3 = st and curTheme.onpri or curTheme.out
Instance.new("UICorner", thm).CornerRadius = UDim.new(1, 0)
local thData = {obj=thm, state=st}
table.insert(objs.s_thm, thData)
trk.MouseButton1Click:Connect(function()
st = not st
tData.state = st; thData.state = st
t(trk, "BackgroundColor3", st and curTheme.pri or curTheme.inact, 0.3)
tw:Create(thm, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Size = st and UDim2.new(0, 24, 0, 24) or UDim2.new(0, 16, 0, 16),
Position = st and UDim2.new(0, 36, 0.5, 0) or UDim2.new(0, 16, 0.5, 0),
BackgroundColor3 = st and curTheme.onpri or curTheme.out
}):Play()
if cb then cb(st) end
end)
return {
SetText = function(self, newTxt)
l.Text = newTxt
end,
SetValue = function(self, newState)
if st == newState then return end
st = newState
tData.state = st; thData.state = st
t(trk, "BackgroundColor3", st and curTheme.pri or curTheme.inact, 0.3)
tw:Create(thm, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Size = st and UDim2.new(0, 24, 0, 24) or UDim2.new(0, 16, 0, 16),
Position = st and UDim2.new(0, 36, 0.5, 0) or UDim2.new(0, 16, 0.5, 0),
BackgroundColor3 = st and curTheme.onpri or curTheme.out
}):Play()
if cb then cb(st) end
end
}
end
function lib:AddSlider(txt, m, mx, df, lblval, cb)
lib.ElementCounter += 1
local v = math.clamp(df or m, m, mx)
local drag = false
local r = Instance.new("Frame", lib.CurrentBuildContainer)
r.LayoutOrder = lib.ElementCounter
r.Size = UDim2.new(1, 0, 0, 75)
r.BackgroundTransparency = 1
local vl = Instance.new("TextLabel", r)
vl.Size = UDim2.new(1, -50, 0, 20)
vl.BackgroundTransparency = 1
vl.Text = txt
vl.TextColor3 = curTheme.fg
vl.FontFace = m3Font
vl.TextSize = 14
vl.TextXAlignment = Enum.TextXAlignment.Left
table.insert(objs.fg, vl)
local valLbl = Instance.new("TextLabel", r)
valLbl.Size = UDim2.new(0, 50, 0, 20)
valLbl.AnchorPoint = Vector2.new(1, 0)
valLbl.Position = UDim2.new(1, 0, 0, 0)
valLbl.BackgroundTransparency = 1
valLbl.Visible = lblval
valLbl.Text = string.format("%.2f", v)
valLbl.TextColor3 = curTheme.pri
valLbl.FontFace = m3Font
valLbl.TextSize = 14
valLbl.TextXAlignment = Enum.TextXAlignment.Right
table.insert(objs.sl_val, valLbl)
local hb = Instance.new("TextButton", r)
hb.Size = UDim2.new(1, 0, 0, 40)
hb.Position = UDim2.new(0, 0, 0, 25)
hb.BackgroundTransparency = 1
hb.Text = ""
local act = Instance.new("CanvasGroup", hb)
act.AnchorPoint = Vector2.new(0, 0.5)
act.Position = UDim2.new(0, 0, 0.5, 0)
act.BackgroundColor3 = curTheme.pri
act.BorderSizePixel = 0
local actuic = Instance.new("UICorner", act)
actuic.CornerRadius = UDim.new(1, 0)
actuic.TopRightRadius = UDim.new(0, 4)
actuic.BottomRightRadius = UDim.new(0, 4)
table.insert(objs.pri, act)
local inact = Instance.new("CanvasGroup", hb)
inact.AnchorPoint = Vector2.new(1, 0.5)
inact.Position = UDim2.new(1, 0, 0.5, 0)
inact.BackgroundColor3 = curTheme.inact
inact.BorderSizePixel = 0
local inactuic = Instance.new("UICorner", inact)
inactuic.CornerRadius = UDim.new(1, 0)
inactuic.TopLeftRadius = UDim.new(0, 4)
inactuic.BottomLeftRadius = UDim.new(0, 4)
table.insert(objs.inact, inact)
local dot = Instance.new("Frame", inact)
dot.Size = UDim2.new(0, 4, 0, 4)
dot.AnchorPoint = Vector2.new(1, 0.5)
dot.Position = UDim2.new(1, -6, 0.5, 0)
dot.BackgroundColor3 = curTheme.pri
Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0)
table.insert(objs.pri, dot)
local thm = Instance.new("Frame", hb)
thm.Size = UDim2.new(0, 4, 0, 38)
thm.AnchorPoint = Vector2.new(0.5, 0.5)
thm.BackgroundColor3 = curTheme.pri
Instance.new("UICorner", thm).CornerRadius = UDim.new(0, 2)
table.insert(objs.pri, thm)
local g = 6
local function upd(inp)
local pc = math.clamp((inp.Position.X - hb.AbsolutePosition.X) / hb.AbsoluteSize.X, 0, 1)
v = m + ((mx - m) * pc)
valLbl.Text = string.format("%.2f", v)
local tx = hb.AbsoluteSize.X * pc
act.Size = UDim2.new(0, math.max(0, tx - g), 0, 16)
inact.Size = UDim2.new(0, math.max(0, hb.AbsoluteSize.X - tx - g), 0, 16)
thm.Position = UDim2.new(0, tx, 0.5, 0)
if cb then cb(v) end
end
task.defer(function()
local p = (v - m) / (mx - m)
local tX = hb.AbsoluteSize.X * p
act.Size = UDim2.new(0, math.max(0, tX-g), 0, 16)
inact.Size = UDim2.new(0, math.max(0, hb.AbsoluteSize.X-tX-g), 0, 16)
thm.Position = UDim2.new(0, tX, 0.5, 0)
end)
hb:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
local p = (v - m) / (mx - m)
local tX = hb.AbsoluteSize.X * p
act.Size = UDim2.new(0, math.max(0, tX-g), 0, 16)
inact.Size = UDim2.new(0, math.max(0, hb.AbsoluteSize.X-tX-g), 0, 16)
thm.Position = UDim2.new(0, tX, 0.5, 0)
end)
hb.InputBegan:Connect(function(i)
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
drag = true; upd(i)
end
end)
uis.InputChanged:Connect(function(i)
if drag and (i.UserInputType.Name:find("MouseMovement") or i.UserInputType.Name:find("Touch")) then
upd(i)
end
end)
uis.InputEnded:Connect(function(i)
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
drag = false
end
end)
return {
SetText = function(self, newTxt)
vl.Text = newTxt
end,
SetValue = function(self, newVal)
v = math.clamp(newVal, m, mx)
valLbl.Text = string.format("%.2f", v)
local p = (v - m) / (mx - m)
local tX = hb.AbsoluteSize.X * p
act.Size = UDim2.new(0, math.max(0, tX - g), 0, 16)
inact.Size = UDim2.new(0, math.max(0, hb.AbsoluteSize.X - tX - g), 0, 16)
thm.Position = UDim2.new(0, tX, 0.5, 0)
if cb then cb(v) end
end
}
end
function lib:AddDropdown(txt, options, defaultIdx, cb)
lib.ElementCounter += 1
local selectedIdx = defaultIdx or 1
local isOpen = false
local r = Instance.new("Frame", lib.CurrentBuildContainer)
r.LayoutOrder = lib.ElementCounter
r.Size = UDim2.new(1, 0, 0, 56)
r.BackgroundColor3 = curTheme.inact
r.BorderSizePixel = 0
Instance.new("UICorner", r).CornerRadius = UDim.new(0, 4)
table.insert(objs.inact, r)
local lbl = Instance.new("TextLabel", r)
lbl.Size = UDim2.new(1, -32, 0, 20)
lbl.Position = UDim2.new(0, 16, 0, 6)
lbl.BackgroundTransparency = 1
lbl.Text = txt
lbl.TextColor3 = curTheme.out
lbl.FontFace = m3Font
lbl.TextSize = 11
lbl.TextXAlignment = Enum.TextXAlignment.Left
local valLbl = Instance.new("TextLabel", r)
valLbl.Size = UDim2.new(1, -48, 0, 24)
valLbl.Position = UDim2.new(0, 16, 0, 26)
valLbl.BackgroundTransparency = 1
valLbl.Text = options[selectedIdx] or ""
valLbl.TextColor3 = curTheme.fg
valLbl.FontFace = m3Font
valLbl.TextSize = 15
valLbl.TextXAlignment = Enum.TextXAlignment.Left
table.insert(objs.fg, valLbl)
local icn = Instance.new("ImageLabel", r)
icn.Size = UDim2.new(0, 24, 0, 24)
icn.AnchorPoint = Vector2.new(1, 0.5)
icn.Position = UDim2.new(1, -12, 0.5, 0)
icn.BackgroundTransparency = 1
icn.Image = "rbxassetid://10709790948"
icn.ImageColor3 = curTheme.out
table.insert(objs.icon, icn)
local btn = Instance.new("TextButton", r)
btn.Size = UDim2.new(1, 0, 1, 0)
btn.BackgroundTransparency = 1
btn.Text = ""
local botLine = Instance.new("Frame", r)
botLine.Size = UDim2.new(1, 0, 0, 1)
botLine.AnchorPoint = Vector2.new(0, 1)
botLine.Position = UDim2.new(0, 0, 1, 0)
botLine.BackgroundColor3 = curTheme.out
botLine.BorderSizePixel = 0
local menuObj = nil
local trackConn = nil
local closeOverlay = nil
local function closeMenu()
if not isOpen then return end
isOpen = false
tw:Create(icn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Rotation = 0}):Play()
t(botLine, "BackgroundColor3", curTheme.out, 0.3)
t(lbl, "TextColor3", curTheme.out, 0.3)
if trackConn then trackConn:Disconnect() end
if closeOverlay then
closeOverlay:Destroy()
closeOverlay = nil
end
if menuObj then
t(menuObj, "BackgroundTransparency", 1, 0.2)
for _, child in pairs(menuObj:GetChildren()) do
if child:IsA("TextButton") then
t(child, "TextTransparency", 1, 0.2)
end
end
task.delay(0.2, function()
if menuObj then menuObj:Destroy() menuObj = nil end
end)
end
end
btn.MouseButton1Click:Connect(function()
if isOpen then
closeMenu()
else
isOpen = true
tw:Create(icn, TweenInfo.new(0.3, Enum.EasingStyle.Exponential), {Rotation = 180}):Play()
t(botLine, "BackgroundColor3", curTheme.pri, 0.3)
t(lbl, "TextColor3", curTheme.pri, 0.3)
closeOverlay = Instance.new("TextButton", gui)
closeOverlay.Size = UDim2.new(1, 0, 1, 0)
closeOverlay.BackgroundTransparency = 1
closeOverlay.Text = ""
closeOverlay.ZIndex = 499
closeOverlay.MouseButton1Click:Connect(closeMenu)
menuObj = Instance.new("ScrollingFrame", gui)
menuObj.Size = UDim2.new(0, r.AbsoluteSize.X, 0, math.min(#options * 48, 144))
menuObj.Position = UDim2.new(0, r.AbsolutePosition.X, 0, r.AbsolutePosition.Y + r.AbsoluteSize.Y + 4)
menuObj.BackgroundColor3 = curTheme.bg:Lerp(curTheme.pri, 0.08)
menuObj.BorderSizePixel = 0
menuObj.ZIndex = 500
menuObj.ScrollBarThickness = 2
menuObj.ScrollBarImageColor3 = curTheme.out
menuObj.BackgroundTransparency = 1
menuObj.ClipsDescendants = true
menuObj.AutomaticCanvasSize = Enum.AutomaticSize.Y
menuObj.CanvasSize = UDim2.new(0, 0, 0, 0)
Instance.new("UICorner", menuObj).CornerRadius = UDim.new(0, 4)
table.insert(objs.dlg_bg, menuObj)
trackConn = rs.RenderStepped:Connect(function()
if not isOpen or not menuObj then trackConn:Disconnect() return end
menuObj.Position = UDim2.new(0, r.AbsolutePosition.X, 0, r.AbsolutePosition.Y + r.AbsoluteSize.Y + 4)
end)
local mLayout = Instance.new("UIListLayout", menuObj)
mLayout.SortOrder = Enum.SortOrder.LayoutOrder
for i, opt in ipairs(options) do
local optBtn = Instance.new("TextButton", menuObj)
optBtn.Size = UDim2.new(1, 0, 0, 48)
optBtn.BackgroundTransparency = 1
optBtn.Text = opt
optBtn.FontFace = m3Font
optBtn.TextSize = 14
optBtn.TextColor3 = curTheme.fg
optBtn.TextXAlignment = Enum.TextXAlignment.Left
optBtn.LayoutOrder = i
optBtn.ZIndex = 501
optBtn.TextTransparency = 1
table.insert(objs.dlg_fg, optBtn)
local p = Instance.new("UIPadding", optBtn)
p.PaddingLeft = UDim.new(0, 16)
p.PaddingRight = UDim.new(0, 16)
optBtn.MouseEnter:Connect(function() t(optBtn, "BackgroundTransparency", 0.9, 0.1) end)
optBtn.MouseLeave:Connect(function() t(optBtn, "BackgroundTransparency", 1, 0.1) end)
optBtn.MouseButton1Click:Connect(function()
selectedIdx = i
valLbl.Text = opt
if cb then cb(opt) end
closeMenu()
end)
end
tw:Create(menuObj, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {BackgroundTransparency = 0}):Play()
for _, child in pairs(menuObj:GetChildren()) do
if child:IsA("TextButton") then
t(child, "TextTransparency", 0, 0.3)
end
end
end
end)
return {
SetText = function(self, newTxt)
lbl.Text = newTxt
end,
SetValue = function(self, newOpt)
valLbl.Text = newOpt
if cb then cb(newOpt) end
end,
Refresh = function(self, newOptions, newDefaultIdx)
currentOptions = newOptions or {}
selectedIdx = newDefaultIdx or 1
valLbl.Text = currentOptions[selectedIdx] or ""
if isOpen then closeMenu() end
end
}
end
function lib:AddDialog(title, desc, confirmText, cancelText, confirmCb, cancelCb)
local overlay = Instance.new("Frame", gui)
overlay.Size = UDim2.new(1, 0, 1, 0)
overlay.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
overlay.BackgroundTransparency = 1
overlay.Active = true
overlay.Visible = true
local dlgBox = Instance.new("Frame", overlay)
dlgBox.Size = UDim2.new(0, 312, 0, 0)
dlgBox.AnchorPoint = Vector2.new(0.5, 0.5)
dlgBox.Position = UDim2.new(0.5, 0, 0.5, 20)
dlgBox.BackgroundColor3 = curTheme.bg:Lerp(curTheme.pri, 0.11)
dlgBox.AutomaticSize = Enum.AutomaticSize.Y
dlgBox.BackgroundTransparency = 1
table.insert(objs.dlg_bg, dlgBox)
Instance.new("UICorner", dlgBox).CornerRadius = UDim.new(0, 28)
local dPad = Instance.new("UIPadding", dlgBox)
dPad.PaddingLeft = UDim.new(0, 24)
dPad.PaddingRight = UDim.new(0, 24)
dPad.PaddingTop = UDim.new(0, 24)
dPad.PaddingBottom = UDim.new(0, 24)
local dLayout = Instance.new("UIListLayout", dlgBox)
dLayout.SortOrder = Enum.SortOrder.LayoutOrder
dLayout.Padding = UDim.new(0, 16)
local dTitle = Instance.new("TextLabel", dlgBox)
dTitle.Size = UDim2.new(1, 0, 0, 0)
dTitle.AutomaticSize = Enum.AutomaticSize.Y
dTitle.BackgroundTransparency = 1
dTitle.Text = title or "Dialog Title"
dTitle.TextColor3 = curTheme.fg
dTitle.FontFace = Font.new(m3Font.Family, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
dTitle.TextSize = 24
dTitle.TextXAlignment = Enum.TextXAlignment.Left
dTitle.TextWrapped = true
dTitle.TextTransparency = 1
dTitle.LayoutOrder = 1
table.insert(objs.dlg_fg, dTitle)
local dDesc = Instance.new("TextLabel", dlgBox)
dDesc.Size = UDim2.new(1, 0, 0, 0)
dDesc.AutomaticSize = Enum.AutomaticSize.Y
dDesc.BackgroundTransparency = 1
dDesc.Text = desc or "Dialog description text goes here."
dDesc.TextColor3 = curTheme.out
dDesc.FontFace = m3Font
dDesc.TextSize = 14
dDesc.TextXAlignment = Enum.TextXAlignment.Left
dDesc.TextWrapped = true
dDesc.TextTransparency = 1
dDesc.LayoutOrder = 2
local actCont = Instance.new("Frame", dlgBox)
actCont.Size = UDim2.new(1, 0, 0, 40)
actCont.BackgroundTransparency = 1
actCont.LayoutOrder = 3
local actLayout = Instance.new("UIListLayout", actCont)
actLayout.FillDirection = Enum.FillDirection.Horizontal
actLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right
actLayout.VerticalAlignment = Enum.VerticalAlignment.Center
actLayout.SortOrder = Enum.SortOrder.LayoutOrder
actLayout.Padding = UDim.new(0, 8)
local function closeDialog()
t(overlay, "BackgroundTransparency", 1, 0.3)
tw:Create(dlgBox, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Position = UDim2.new(0.5, 0, 0.5, 20),
BackgroundTransparency = 1
}):Play()
t(dTitle, "TextTransparency", 1, 0.2)
t(dDesc, "TextTransparency", 1, 0.2)
for _, b in pairs(actCont:GetChildren()) do
if b:IsA("TextButton") then t(b, "TextTransparency", 1, 0.2) end
end
task.delay(0.3, function()
overlay:Destroy()
end)
end
local function makeTextBtn(txt, isPrimary, cb)
local btn = Instance.new("TextButton", actCont)
btn.BackgroundTransparency = 1
btn.Text = txt
btn.FontFace = Font.new(m3Font.Family, Enum.FontWeight.Medium, Enum.FontStyle.Normal)
btn.TextSize = 14
btn.TextColor3 = curTheme.pri
btn.Size = UDim2.new(0, 0, 0, 40)
btn.AutomaticSize = Enum.AutomaticSize.X
btn.TextTransparency = 1
table.insert(objs.pri, btn)
Instance.new("UICorner", btn).CornerRadius = UDim.new(1, 0)
local padding = Instance.new("UIPadding", btn)
padding.PaddingLeft = UDim.new(0, 12)
padding.PaddingRight = UDim.new(0, 12)
btn.MouseEnter:Connect(function()
t(btn, "BackgroundTransparency", 0.92, 0.2)
t(btn, "BackgroundColor3", curTheme.pri, 0.2)
end)
btn.MouseLeave:Connect(function()
t(btn, "BackgroundTransparency", 1, 0.2)
end)
btn.MouseButton1Click:Connect(function()
closeDialog()
if cb then cb() end
end)
end
if cancelText then makeTextBtn(cancelText, false, cancelCb) end
makeTextBtn(confirmText or "OK", true, confirmCb)
t(overlay, "BackgroundTransparency", 0.6, 0.4)
tw:Create(dlgBox, TweenInfo.new(0.4, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
Position = UDim2.new(0.5, 0, 0.5, 0),
BackgroundTransparency = 0
}):Play()
t(dTitle, "TextTransparency", 0, 0.4)
t(dDesc, "TextTransparency", 0, 0.4)
for _, b in pairs(actCont:GetChildren()) do
if b:IsA("TextButton") then t(b, "TextTransparency", 0, 0.4) end
end
end
resizeHandle = Instance.new("TextButton", win)
resizeHandle.Size = UDim2.new(0, 30, 0, 30)
resizeHandle.AnchorPoint = Vector2.new(1, 1)
resizeHandle.Position = UDim2.new(1, 0, 1, 0)
resizeHandle.BackgroundTransparency = 1
resizeHandle.Text = ""
resizeHandle.ZIndex = 100
local resizing = false
local resDragStart, resStartSize
resizeHandle.InputBegan:Connect(function(i)
if isMin or isMax then return end
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
resizing = true
resDragStart = i.Position
resStartSize = win.AbsoluteSize
end
end)
uis.InputChanged:Connect(function(i)
if resizing and (i.UserInputType.Name:find("MouseMovement") or i.UserInputType.Name:find("Touch")) then
local delta = i.Position - resDragStart
local newX = math.max(320, resStartSize.X + delta.X)
local newY = math.max(400, resStartSize.Y + delta.Y)
win.Size = UDim2.new(0, newX, 0, newY)
end
end)
uis.InputEnded:Connect(function(i)
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
resizing = false
end
end)
win:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
if lib.ActiveTabIndex > 0 and lib.Tabs[lib.ActiveTabIndex] then
task.spawn(function()
rs.RenderStepped:Wait()
rs.RenderStepped:Wait()
local btn = lib.Tabs[lib.ActiveTabIndex].btn
local btnCenterX = (btn.AbsolutePosition.X - tabListCont.AbsolutePosition.X) + tabListCont.CanvasPosition.X + (btn.AbsoluteSize.X / 2)
local contentWidth = lib.Tabs[lib.ActiveTabIndex].data.lbl.TextBounds.X
indicator.Position = UDim2.new(0, btnCenterX, 1, 0)
indicator.Size = UDim2.new(0, contentWidth, 0, 3)
end)
end
end)
local d, di, ds, sp
win.InputBegan:Connect(function(i)
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
if isMax then return end
d = true; ds = i.Position; sp = win.Position
end
end)
win.InputEnded:Connect(function(i)
if i.UserInputType.Name:find("MouseButton1") or i.UserInputType.Name:find("Touch") then
d = false
end
end)
uis.InputChanged:Connect(function(i)
if i.UserInputType.Name:find("MouseMovement") or i.UserInputType.Name:find("Touch") then
di = i
end
end)
rs.RenderStepped:Connect(function()
if d and di and not resizing then
win.Position = UDim2.new(sp.X.Scale, sp.X.Offset + (di.Position - ds).X, sp.Y.Scale, sp.Y.Offset + (di.Position - ds).Y)
end
end)
return setmetatable(lib, {
__index = {
SetTitle = function(self, newTitle)
top.Text = newTitle
end
}
})
end
local ui = CreateM3UI("Material 3 Ultimate Hub", 450, 600)
ui:AddTab("Combat", "rbxassetid://111317703462067")
local aimbotSwitch = ui:AddSwitch("Enable Aimbot", false, function(state)
print("[Combat] Aimbot toggled:", state)
end)
local targetPartDrop = ui:AddDropdown("Target Part", {"Head", "UpperTorso", "LowerTorso", "HumanoidRootPart"}, 1, function(selected)
print("[Combat] Locked target to:", selected)
end)
ui:AddDivider()
local fovSlider = ui:AddSlider("FOV Circle Radius", 10, 500, 150, true, function(value)
print("[Combat] FOV changed to:", value)
end)
local targetBox = ui:AddTextBox("Specific Target Name", function(text, enterPressed)
if enterPressed then
print("[Combat] Targeting player:", text)
end
end)
ui:AddDivider()
local updateBtn = ui:AddButton("Force Update All Values", function()
ui:AddDialog(
"Override Settings?",
"This will dynamically change all text and values of the UI components via script.",
"Override",
"Cancel",
function()
print("[Dialog] Override confirmed by user!")
aimbotSwitch:SetText("Aimbot (Forced On)")
aimbotSwitch:SetValue(true)
targetPartDrop:SetText("Part (Locked)")
targetPartDrop:SetValue("HumanoidRootPart")
fovSlider:SetText("FOV (Maxed Out)")
fovSlider:SetValue(500)
targetBox:SetText("Target (Auto)")
targetBox:SetValue("RobloxPlayer123")
end,
function()
print("[Dialog] Override cancelled by user.")
end
)
end, 402)
ui:AddTab("Visuals", "rbxassetid://111317703462067")
ui:AddSwitch("Enable Player ESP", true, function(state)
print("[Visuals] ESP Status:", state)
end)
ui:AddDropdown("ESP Highlight Type", {"Box", "Skeleton", "Chams", "Glow"}, 1, function(selected)
print("[Visuals] ESP Type:", selected)
end)
ui:AddDivider()
ui:AddSlider("ESP Transparency", 0, 1, 0.5, true, function(value)
print("[Visuals] Transparency:", value)
end)
ui:AddSlider("Max Render Distance", 100, 5000, 1000, true, function(value)
print("[Visuals] Render Distance:", value)
end)
ui:AddTab("Themes")
ui:AddButton("Apply Ocean Blue", function()
ui:ChangePalette("Blue")
print("[Theme] Changed to Ocean Blue")
end)
ui:AddButton("Apply Emerald Green", function()
ui:ChangePalette("Green")
print("[Theme] Changed to Emerald Green")
end)
ui:AddButton("Apply Sunset Orange", function()
ui:ChangePalette("Orange")
print("[Theme] Changed to Sunset Orange")
end)
ui:AddButton("Apply Dark Purple", function()
ui:ChangePalette("Purple")
print("[Theme] Changed to Dark Purple")
end)
ui:AddButton("Apply Crimson Red", function()
ui:ChangePalette("Red")
print("[Theme] Changed to Crimson Red")
end)
ui:AddButton("Apply Pitch Black", function()
ui:ChangePalette("PitchBlack")
print("[Theme] Changed to Pitch Black")
end)
for i = 4, 12 do
ui:AddTab("Misc " .. i)
ui:AddButton("Button in Misc " .. i, function()
print("Clicked dummy button in Tab " .. i)
end)
ui:AddTextBox("Input " .. i, function(text, enter)
if enter then print("Input saved in Tab " .. i .. ":", text) end
end)
endNo comments yet for this script.



