Oblivion
Key Required

Oblivion

Free Client Script Executor *BACK*OpenSourceGUYOpenSourceGUY 1.3K views 589 executesUpdated Dec 24, 2025
Unrated
00
Lua Script•1315 lines (53849 chars)
--  ██████╗ ██████╗ ██╗     ██╗██╗   ██╗██╗ ██████╗ ███╗   ██╗
-- ██╔═══██╗██╔══██╗██║     ██║██║   ██║██║██╔═══██╗████╗  ██║
-- ██║   ██║██████╔╝██║     ██║██║   ██║██║██║   ██║██╔██╗ ██║
-- ██║   ██║██╔══██╗██║     ██║╚██╗ ██╔╝██║██║   ██║██║╚██╗██║
-- ╚██████╔╝██████╔╝███████╗██║ ╚████╔╝ ██║╚██████╔╝██║ ╚████║
-- v 0.0.1
	local TweenService = game:GetService("TweenService")
	local Players = game:GetService("Players")
	local ReplicatedFirst = game:GetService("ReplicatedFirst")
	local Workspace = game:GetService("Workspace")
	local UserInputService = game:GetService("UserInputService")
	local RunService = game:GetService("RunService")
	local ReplicatedStorage = game:GetService("ReplicatedStorage")
	local Lighting = game:GetService("Lighting")

	local Player = Players.LocalPlayer
	local PlayerGui = Player:WaitForChild("PlayerGui")

	if PlayerGui:FindFirstChild("OblivionFramework") then 
		return 
	end

	local UI_CONFIG = {
		Primary = Color3.fromRGB(10, 10, 10),
		CardBg = Color3.fromRGB(18, 18, 18),
		Border = Color3.fromRGB(32, 32, 32),
		Highlight = Color3.fromRGB(255, 255, 255),
		Text = Color3.fromRGB(245, 245, 245),
		Muted = Color3.fromRGB(120, 120, 125),
		Destructive = Color3.fromRGB(255, 80, 80),
		SidebarWidth = 72
	}

	local THEMES = {
		Neutral = Color3.fromRGB(150, 150, 150),
		Amber = Color3.fromRGB(255, 170, 0),
		Blue = Color3.fromRGB(0, 120, 255),
		Cyan = Color3.fromRGB(0, 200, 255),
		Emerald = Color3.fromRGB(0, 200, 120),
		Fuchsia = Color3.fromRGB(200, 0, 255),
		Green = Color3.fromRGB(100, 200, 0),
		Indigo = Color3.fromRGB(80, 100, 255),
		Lime = Color3.fromRGB(150, 255, 0),
		Orange = Color3.fromRGB(255, 100, 0),
		Pink = Color3.fromRGB(255, 80, 150)
	}

	local STATES = {
		Fly = {Active = false, Speed = 50},
		Noclip = false,
		HubVisible = true,
		CommandPrefix = "ob/",
		Settings = {
			Appearance = {
				UIScale = 1.0,
				FontSize = 14,
				BlurStrength = 0,
				Transparency = 0,
				AnimationsEnabled = true,
				AccentColor = "Neutral"
			},
			Notifications = {
				Duration = 4,
				SoundEnabled = true,
				Position = "BottomRight",
				SeverityFilter = "All"
			},
			Controls = {
				FlySpeed = 50,
				Sensitivity = 1.0,
				Keybinds = {
					ToggleHub = Enum.KeyCode.RightControl,
					Fly = Enum.KeyCode.F,
					Noclip = Enum.KeyCode.N
				}
			},
			Performance = {
				FPSLimit = 60,
				RenderDistance = 1000,
				ParticlesEnabled = true,
				LowGraphicsMode = false
			},
			Audio = {
				MasterVolume = 0.5,
				MusicVolume = 0.5,
				Muted = false
			},
			Privacy = {
				ChatVisible = true,
				JoinLeaveAlerts = true,
				ScreenshotWatermark = false
			},
			Advanced = {
				DebugMode = false,
				ExperimentalFeatures = false,
				CommandPrefix = "ob/"
			},
			Accessibility = {
				ReducedMotion = false,
				HighContrast = false
			}
		}
	}

	-- [ Core Systems ] --
	local ThemeManager = {}
	local Listeners = {}

	function ThemeManager.Subscribe(object, property, colorKey)
		if not Listeners[colorKey] then Listeners[colorKey] = {} end
		table.insert(Listeners[colorKey], {Obj = object, Prop = property})
		-- Apply immediately
		if colorKey == "Highlight" then object[property] = UI_CONFIG.Highlight
		elseif colorKey == "Border" then object[property] = UI_CONFIG.Border end
	end

	function ThemeManager.Update(key, newColor)
		if key == "Highlight" then UI_CONFIG.Highlight = newColor end
		if Listeners[key] then
			for _, item in ipairs(Listeners[key]) do
				if item.Obj then item.Obj[item.Prop] = newColor end
			end
		end
	end

	local NotificationSystem = {}
	function NotificationSystem.Show(titleText, descText)
		local screenGui = PlayerGui:FindFirstChild("OblivionNotifications") or Instance.new("ScreenGui", PlayerGui)
		screenGui.Name, screenGui.ResetOnSpawn, screenGui.DisplayOrder = "OblivionNotifications", false, 10
		
		local function updateStack()
			local frames = {}
			for _, v in ipairs(screenGui:GetChildren()) do
				if v:IsA("Frame") and v.Name == "Alert" then table.insert(frames, v) end
			end
			for i, v in ipairs(frames) do
				local targetY = -(20 + ((#frames - i) * 80))
				TweenService:Create(v, TweenInfo.new(0.4, Enum.EasingStyle.Quart), {Position = UDim2.new(1, -20, 1, targetY)}):Play()
			end
		end

		local alert = Instance.new("Frame", screenGui)
		alert.Name, alert.Size, alert.BackgroundColor3, alert.AnchorPoint = "Alert", UDim2.new(0, 340, 0, 70), Color3.fromRGB(15, 15, 15), Vector2.new(1, 1)
		alert.Position, alert.BorderSizePixel = UDim2.new(1, 400, 1, -20), 0
		
		Instance.new("UICorner", alert).CornerRadius = UDim.new(0, 8)
		local stroke = Instance.new("UIStroke", alert)
		stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
		ThemeManager.Subscribe(stroke, "Color", "Border")
		
		local title = Instance.new("TextLabel", alert)
		title.Text, title.Size, title.Position = titleText:upper(), UDim2.new(1, -30, 0, 18), UDim2.new(0, 15, 0, 15)
		title.BackgroundTransparency, title.TextColor3, title.TextSize = 1, UI_CONFIG.Text, 13
		title.Font, title.TextXAlignment = Enum.Font.BuilderSansBold, Enum.TextXAlignment.Left
		
		local desc = Instance.new("TextLabel", alert)
		desc.Text, desc.Size, desc.Position = descText, UDim2.new(1, -30, 0, 30), UDim2.new(0, 15, 0, 30)
		desc.BackgroundTransparency, desc.TextColor3, desc.TextSize = 1, UI_CONFIG.Muted, 13
		desc.Font, desc.TextXAlignment = Enum.Font.BuilderSans, Enum.TextXAlignment.Left
		desc.TextWrapped = true
		
		updateStack()
		
		task.delay(4, function()
			if alert and alert.Parent then
				local shrink = TweenService:Create(alert, TweenInfo.new(0.4, Enum.EasingStyle.Quart), {Position = UDim2.new(1, 400, 1, alert.Position.Y.Offset), BackgroundTransparency = 1})
				shrink:Play()
				shrink.Completed:Connect(function()
					alert:Destroy()
					updateStack()
				end)
			end
		end)
	end

	-- [ Command Registry ] --
	local EXE = {}
	local noclipConnection = nil

	function EXE.Speed(val)
		local char = Player.Character
		if char and char:FindFirstChildOfClass("Humanoid") then
			char:FindFirstChildOfClass("Humanoid").WalkSpeed = tonumber(val) or 16
			NotificationSystem.Show("Performance", "Speed set to " .. (tonumber(val) or 16))
		end
	end

	function EXE.Jump(val)
		local char = Player.Character
		if char and char:FindFirstChildOfClass("Humanoid") then
			local hum = char:FindFirstChildOfClass("Humanoid")
			hum.UseJumpPower = true
			hum.JumpPower = tonumber(val) or 50
			NotificationSystem.Show("Performance", "JumpPower set to " .. (tonumber(val) or 50))
		end
	end

	function EXE.Fly()
		STATES.Fly.Active = not STATES.Fly.Active
		NotificationSystem.Show("Movement", "Flight Mode: " .. (STATES.Fly.Active and "Enabled" or "Disabled"))
		
		if STATES.Fly.Active then
			task.spawn(function()
				local char = Player.Character
				local root = char and char:FindFirstChild("HumanoidRootPart")
				if not root then STATES.Fly.Active = false return end

				local att = Instance.new("Attachment", root)
				att.Name = "OblivionFlyAtt"
				
				local lv = Instance.new("LinearVelocity", root)
				lv.Name = "OblivionFlyLV"
				lv.Attachment0 = att
				lv.MaxForce = 1e6
				lv.VectorVelocity = Vector3.new(0, 0, 0)
				lv.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector
				lv.RelativeTo = Enum.ActuatorRelativeTo.World

				local ao = Instance.new("AlignOrientation", root)
				ao.Name = "OblivionFlyAO"
				ao.Attachment0 = att
				ao.Mode = Enum.OrientationAlignmentMode.OneAttachment
				ao.MaxTorque = 1e6
				ao.Responsiveness = 200

				while STATES.Fly.Active and char and char.Parent do
					local camera = Workspace.CurrentCamera
					local move = Vector3.new(0, 0, 0)
					if UserInputService:IsKeyDown(Enum.KeyCode.W) then move = move + camera.CFrame.LookVector end
					if UserInputService:IsKeyDown(Enum.KeyCode.S) then move = move - camera.CFrame.LookVector end
					if UserInputService:IsKeyDown(Enum.KeyCode.A) then move = move - camera.CFrame.RightVector end
					if UserInputService:IsKeyDown(Enum.KeyCode.D) then move = move + camera.CFrame.RightVector end
					if UserInputService:IsKeyDown(Enum.KeyCode.Space) then move = move + Vector3.new(0, 1, 0) end
					if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then move = move - Vector3.new(0, 1, 0) end
					
					lv.VectorVelocity = move * STATES.Fly.Speed
					ao.CFrame = camera.CFrame
					RunService.RenderStepped:Wait()
				end
				
				if att then att:Destroy() end
				if lv then lv:Destroy() end
				if ao then ao:Destroy() end
			end)
		end
	end

	function EXE.Noclip()
		STATES.Noclip = not STATES.Noclip
		NotificationSystem.Show("Physics", "Noclip: " .. (STATES.Noclip and "Enabled" or "Disabled"))
		
		if STATES.Noclip then
			local function setNoclip(char)
				for _, v in pairs(char:GetDescendants()) do
					if v:IsA("BasePart") then v.CanCollide = false end
				end
				if noclipConnection then noclipConnection:Disconnect() end
				noclipConnection = char.DescendantAdded:Connect(function(v)
					if v:IsA("BasePart") then v.CanCollide = false end
				end)
			end
			if Player.Character then setNoclip(Player.Character) end
			
			task.spawn(function()
				while STATES.Noclip do
					if Player.Character then
						for _, v in pairs(Player.Character:GetDescendants()) do
							if v:IsA("BasePart") then v.CanCollide = false end
						end
					end
					RunService.Stepped:Wait()
				end
			end)
		else
			if noclipConnection then noclipConnection:Disconnect(); noclipConnection = nil end
		end
	end

	function EXE.PlayMusic(id)
		local remote = ReplicatedStorage:FindFirstChild("PlayRemote") or ReplicatedStorage:FindFirstChild("MusicRemote") or ReplicatedStorage:FindFirstChild("Music")
		if remote and remote:IsA("RemoteEvent") then
			remote:FireServer("Play", id)
			NotificationSystem.Show("Audio", "Requesting playback ID: " .. id)
		else
			NotificationSystem.Show("Error", "No music remote detected")
		end
	end

	function EXE.GiveTool(name)
		local tool = ReplicatedStorage:FindFirstChild(name, true) or Lighting:FindFirstChild(name, true)
		if tool and tool:IsA("Tool") then
			local clone = tool:Clone()
			clone.Parent = Player.Backpack
			clone.Parent = Player.Character
			NotificationSystem.Show("Inventory", "Obtained " .. name)
		else
			NotificationSystem.Show("Error", "Tool not found: " .. name)
		end
	end

	function EXE.Fling(targetName)
		local char = Player.Character
		if not char then
			NotificationSystem.Show("Error", "Character not found")
			return
		end
		
		local handle = char:FindFirstChildOfClass("Tool")
		if not handle or not handle:FindFirstChild("Handle") then
			NotificationSystem.Show("Error", "Equip a tool with a handle first!")
			return
		end
		handle = handle.Handle
		
		local function GetPlayerFromPartialName(partial)
			partial = partial:lower()
			local matches = {}
			for _, player in ipairs(Players:GetPlayers()) do
				if player.Name:lower():sub(1, #partial) == partial then
					table.insert(matches, player)
				end
			end
			if #matches == 1 then
				return matches[1]
			else
				return nil
			end
		end
		
		local targetPlayer = GetPlayerFromPartialName(targetName)
		if not targetPlayer or not targetPlayer.Character or not targetPlayer.Character:FindFirstChild("HumanoidRootPart") then
			NotificationSystem.Show("Error", "Player not found or multiple matches")
			return
		end
		
		NotificationSystem.Show("Fling", "Flinging " .. targetPlayer.DisplayName .. "...")
		
		if char.Humanoid.RigType == Enum.HumanoidRigType.R15 then
			if char:FindFirstChild("RightHand") then
				char.RightHand:Destroy()
			end
		else
			if char:FindFirstChild("Right Arm") then
				char["Right Arm"]:Destroy()
			end
		end
		
		if handle:FindFirstChild("Mesh") then
			handle.Mesh:Destroy()
		end
		
		handle.RotVelocity = Vector3.new(0, 999999, 0)
		Workspace.CurrentCamera.CameraSubject = targetPlayer.Character
		
		local tp = coroutine.create(function()
			while task.wait() do
				handle.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame
			end
		end)
		coroutine.resume(tp)
		
		task.wait(2)
		coroutine.close(tp)
		Workspace.CurrentCamera.CameraSubject = char.Humanoid
		
		NotificationSystem.Show("Fling", "Flung " .. targetPlayer.DisplayName)
	end

	function EXE.Kill(targetName)
		local char = Player.Character
		if not char then
			NotificationSystem.Show("Error", "Character not found")
			return
		end
		
		if not Player.Backpack:FindFirstChildOfClass("Tool") and not char:FindFirstChildOfClass("Tool") then
			NotificationSystem.Show("Error", "Need a tool in inventory!")
			return
		end
		
		local function findPlayer(name)
			name = name:lower()
			for _, p in pairs(Players:GetPlayers()) do
				if p ~= Player and p.Name:lower():sub(1, #name) == name then
					return p
				end
			end
			return nil
		end
		
		local targetPlayer = findPlayer(targetName)
		if not targetPlayer or not targetPlayer.Character then
			NotificationSystem.Show("Error", "Player not found")
			return
		end
		
		local tchar = targetPlayer.Character
		local thrp = tchar:FindFirstChild("HumanoidRootPart")
		if not thrp then
			NotificationSystem.Show("Error", "Target HumanoidRootPart not found")
			return
		end
		
		NotificationSystem.Show("Kill", "Eliminating " .. targetPlayer.DisplayName .. "...")
		
		local hum = char:FindFirstChildOfClass("Humanoid")
		local hrp = char:FindFirstChild("HumanoidRootPart")
		local cam = Workspace.CurrentCamera
		local anim = char:FindFirstChild("Animate")
		
		if not hum or not hrp or not anim then
			NotificationSystem.Show("Error", "Missing character components")
			return
		end
		
		local clone = hum:Clone()
		clone.Parent = char
		hum:Destroy()
		cam.CameraSubject = char
		anim.Disabled = true
		anim.Disabled = false
		
		if Player.Backpack:FindFirstChildOfClass("Tool") then
			clone:EquipTool(Player.Backpack:FindFirstChildOfClass("Tool"))
		else
			clone:UnequipTools()
			if Player.Backpack:FindFirstChildOfClass("Tool") then
				clone:EquipTool(Player.Backpack:FindFirstChildOfClass("Tool"))
			end
		end
		
		local tool = char:FindFirstChildOfClass("Tool")
		if not tool or not tool:FindFirstChild("Handle") then
			NotificationSystem.Show("Error", "Tool handle not found")
			return
		end
		
		task.wait(0.2)
		thrp.CFrame = tool.Handle.CFrame
		tool.AncestryChanged:Wait()
		hrp.CFrame = CFrame.new(Vector3.new(0, Workspace.FallenPartsDestroyHeight + 1, 0))
		
		NotificationSystem.Show("Kill", "Eliminated " .. targetPlayer.DisplayName)
	end

	-- [ Handlers ] --
	local function onRespawn(char)
		STATES.Fly.Active = false
		STATES.Noclip = false
		if noclipConnection then noclipConnection:Disconnect(); noclipConnection = nil end
	end
	Player.CharacterAdded:Connect(onRespawn)

	Player.Chatted:Connect(function(msg)
		local args = msg:split(" ")
		local cmd = args[1]:lower()
		local prefix = STATES.CommandPrefix
		
		if cmd == prefix .. "reset" then
			if Player.Character then Player.Character:BreakJoints() end
		elseif cmd == prefix .. "speed" then
			EXE.Speed(args[2])
		elseif cmd == prefix .. "jumpower" then
			EXE.Jump(args[2])
		elseif cmd == prefix .. "fly" then
			EXE.Fly()
		elseif cmd == prefix .. "noclip" then
			EXE.Noclip()
		elseif cmd == prefix .. "fling" then
			if args[2] then
				EXE.Fling(args[2])
			else
				NotificationSystem.Show("Error", "Usage: " .. prefix .. "fling <playername>")
			end
		elseif cmd == prefix .. "kill" then
			if args[2] then
				EXE.Kill(args[2])
			else
				NotificationSystem.Show("Error", "Usage: " .. prefix .. "kill <playername>")
			end
		elseif cmd == prefix .. "prefix" then
			if args[2] and args[2] ~= "" then
				STATES.CommandPrefix = args[2]
				STATES.Settings.Advanced.CommandPrefix = args[2]
				NotificationSystem.Show("Settings", "Command prefix changed to: " .. args[2])
			else
				NotificationSystem.Show("Info", "Current prefix: " .. prefix)
			end
		end
	end)

	-- [ UI Construction ] --
	local function makeDraggable(obj)
		local dragging, dragInput, dragStart, startPos
		obj.InputBegan:Connect(function(input)
			if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and not UserInputService:GetFocusedTextBox() then
				dragging = true
				dragStart = input.Position
				startPos = obj.Position
				input.Changed:Connect(function()
					if input.UserInputState == Enum.UserInputState.End then dragging = false end
				end)
			end
		end)
		obj.InputChanged:Connect(function(input)
			if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end
		end)
		UserInputService.InputChanged:Connect(function(input)
			if input == dragInput and dragging then
				local delta = input.Position - dragStart
				obj.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
			end
		end)
	end

	local function createHub()
		local screen = Instance.new("ScreenGui", PlayerGui)
		screen.Name, screen.ResetOnSpawn = "OblivionFramework", false
		screen.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

		local main = Instance.new("Frame", screen)
		main.Name, main.BackgroundColor3, main.Position = "Main", UI_CONFIG.Primary, UDim2.new(0.5, -283, 0.5, -165)
		main.Size, main.BorderSizePixel = UDim2.new(0, 567, 0, 331), 0
		Instance.new("UICorner", main).CornerRadius = UDim.new(0, 12)
		local mainStroke = Instance.new("UIStroke", main)
		mainStroke.Color, mainStroke.Thickness = UI_CONFIG.Border, 1
		ThemeManager.Subscribe(mainStroke, "Color", "Border")

		makeDraggable(main)

		local sidebar = Instance.new("Frame", main)
		sidebar.Name, sidebar.Size, sidebar.BackgroundTransparency = "Sidebar", UDim2.new(0, UI_CONFIG.SidebarWidth, 1, 0), 1
		
		local sep = Instance.new("Frame", main)
		sep.Size, sep.Position, sep.BackgroundColor3 = UDim2.new(0, 1, 1, 0), UDim2.new(0, UI_CONFIG.SidebarWidth, 0, 0), UI_CONFIG.Border
		sep.BorderSizePixel = 0
		ThemeManager.Subscribe(sep, "BackgroundColor3", "Border")

		local container = Instance.new("Frame", main)
		container.Name, container.Size, container.Position = "Content", UDim2.new(1, -UI_CONFIG.SidebarWidth, 1, 0), UDim2.new(0, UI_CONFIG.SidebarWidth, 0, 0)
		container.BackgroundTransparency = 1

		local navItems = {}
		local function createNav(name, iconId, rectOffset, rectSize, pos)
			local btn = Instance.new("ImageButton", sidebar)
			btn.Name, btn.BackgroundTransparency, btn.Size, btn.Position = name, 1, UDim2.new(0, 38, 0, 38), pos
			btn.Image, btn.ImageRectOffset, btn.ImageRectSize, btn.ImageTransparency = iconId, rectOffset, rectSize, 0.6
			
			local page = Instance.new("Frame", container)
			page.Name, page.Size, page.BackgroundTransparency, page.Visible = name, UDim2.new(1, 0, 1, 0), 1, false
			
			btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2), {ImageTransparency = 0}):Play() end)
			btn.MouseLeave:Connect(function() if not page.Visible then TweenService:Create(btn, TweenInfo.new(0.2), {ImageTransparency = 0.6}):Play() end end)
			btn.MouseButton1Click:Connect(function()
				for _, item in pairs(navItems) do item.Page.Visible = false; TweenService:Create(item.Btn, TweenInfo.new(0.3), {ImageTransparency = 0.6}):Play() end
				page.Visible = true; TweenService:Create(btn, TweenInfo.new(0.3), {ImageTransparency = 0}):Play()
			end)
			navItems[name] = {Btn = btn, Page = page}
			return page
		end

		local home = createNav("Home", "rbxassetid://6764432408", Vector2.new(150, 800), Vector2.new(50, 50), UDim2.new(0.5, -19, 0.08, 0))
		local cmdPage = createNav("Commands", "rbxassetid://8445470189", Vector2.new(404, 604), Vector2.new(96, 96), UDim2.new(0.5, -19, 0.38, 0))
		local setPage = createNav("Settings", "rbxassetid://8445471332", Vector2.new(604, 404), Vector2.new(96, 96), UDim2.new(0.5, -19, 0.68, 0))

		-- [ Components ] --
		local UI = {}
		
		function UI.Header(parent, text)
			local h = Instance.new("TextLabel", parent)
			h.Text, h.Size, h.Name = text:upper(), UDim2.new(1, 0, 0, 25), "Header"
			h.BackgroundTransparency, h.TextColor3, h.TextSize, h.Font = 1, UI_CONFIG.Muted, 11, Enum.Font.BuilderSansBold
			h.TextXAlignment = Enum.TextXAlignment.Left
			local pad = Instance.new("UIPadding", h)
			pad.PaddingLeft = UDim.new(0, 10)
		end

		function UI.Toggle(parent, name, default, fn)
			local frame = Instance.new("Frame", parent)
			frame.Size, frame.BackgroundColor3 = UDim2.new(1, 0, 0, 50), UI_CONFIG.CardBg
			Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
			local stroke = Instance.new("UIStroke", frame)
			stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
			ThemeManager.Subscribe(stroke, "Color", "Border")
			
			local t = Instance.new("TextLabel", frame)
			t.Text, t.Size, t.Position = name, UDim2.new(1, -70, 0, 50), UDim2.new(0, 15, 0, 0)
			t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
			t.TextXAlignment = Enum.TextXAlignment.Left
			
			local pill = Instance.new("TextButton", frame)
			pill.Name, pill.Text, pill.Size, pill.Position = "Pill", "", UDim2.new(0, 42, 0, 22), UDim2.new(1, -57, 0.5, -11)
			pill.BackgroundColor3 = default and Color3.fromRGB(45, 45, 45) or Color3.fromRGB(30, 30, 30)
			pill.AutoButtonColor = false
			Instance.new("UICorner", pill).CornerRadius = UDim.new(1, 0)
			
			local knob = Instance.new("Frame", pill)
			knob.Name, knob.Size, knob.Position = "Knob", UDim2.new(0, 16, 0, 16), UDim2.new(0, default and 23 or 3, 0.5, -8)
			knob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
			Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)
			
			local active = default
			pill.MouseButton1Click:Connect(function()
				active = not active
				local targetPos = active and UDim2.new(0, 23, 0.5, -8) or UDim2.new(0, 3, 0.5, -8)
				local targetColor = active and Color3.fromRGB(45, 45, 45) or Color3.fromRGB(30, 30, 30)
				TweenService:Create(knob, TweenInfo.new(0.25, Enum.EasingStyle.Quart), {Position = targetPos}):Play()
				TweenService:Create(pill, TweenInfo.new(0.25, Enum.EasingStyle.Quart), {BackgroundColor3 = targetColor}):Play()
				fn(active)
			end)
		end
		
		function UI.ThemeOption(parent, name, color, isSelect, fn)
			local btn = Instance.new("TextButton", parent)
			btn.Name, btn.Text, btn.Size = name, "", UDim2.new(1, 0, 0, 45)
			btn.BackgroundTransparency = 1
			
			local circ = Instance.new("Frame", btn)
			circ.Size, circ.Position = UDim2.new(0, 18, 0, 18), UDim2.new(0, 10, 0.5, -9)
			circ.BackgroundColor3 = color
			Instance.new("UICorner", circ).CornerRadius = UDim.new(1, 0)
			
			local t = Instance.new("TextLabel", btn)
			t.Text, t.Size, t.Position = name, UDim2.new(1, -80, 1, 0), UDim2.new(0, 40, 0, 0)
			t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
			t.TextXAlignment = Enum.TextXAlignment.Left
			
			if isSelect then
				local check = Instance.new("TextLabel", btn)
				check.Text, check.Size, check.Position = "✓", UDim2.new(0, 30, 1, 0), UDim2.new(1, -40, 0, 0)
				check.BackgroundTransparency, check.TextColor3, check.TextSize, check.Font = 1, UI_CONFIG.Highlight, 16, Enum.Font.BuilderSansBold
				check.TextXAlignment = Enum.TextXAlignment.Right
				ThemeManager.Subscribe(check, "TextColor3", "Highlight")
			end
			
			btn.MouseButton1Click:Connect(fn)
		end

		function UI.ProgressBar(parent, text)
			local container = Instance.new("Frame", parent)
			container.Name, container.Size, container.BackgroundTransparency = "ProgressCont", UDim2.new(1, 0, 0, 45), 1
			
			local lbl = Instance.new("TextLabel", container)
			lbl.Text, lbl.Size, lbl.Position = text, UDim2.new(1, 0, 0, 15), UDim2.new(0, 5, 0, 0)
			lbl.BackgroundTransparency, lbl.TextColor3, lbl.TextSize, lbl.Font = 1, UI_CONFIG.Muted, 11, Enum.Font.BuilderSansBold
			lbl.TextXAlignment = Enum.TextXAlignment.Left
			
			local track = Instance.new("Frame", container)
			track.Name, track.Size, track.Position = "Track", UDim2.new(1, -10, 0, 4), UDim2.new(0, 5, 0, 25)
			track.BackgroundColor3 = UI_CONFIG.Border
			Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0)
			ThemeManager.Subscribe(track, "BackgroundColor3", "Border")
			
			local bar = Instance.new("Frame", track)
			bar.Name, bar.Size, bar.BackgroundColor3 = "Bar", UDim2.new(0.5, 0, 1, 0), UI_CONFIG.Highlight
			Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0)
			ThemeManager.Subscribe(bar, "BackgroundColor3", "Highlight")
			
			return bar
		end
		
	function UI.Slider(parent, name, min, max, default, fn)
		local frame = Instance.new("Frame", parent)
		frame.Size, frame.BackgroundColor3 = UDim2.new(1, 0, 0, 60), UI_CONFIG.CardBg
		Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
		local stroke = Instance.new("UIStroke", frame)
		stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
		ThemeManager.Subscribe(stroke, "Color", "Border")
		
		local t = Instance.new("TextLabel", frame)
		t.Text, t.Size, t.Position = name, UDim2.new(1, -80, 0, 20), UDim2.new(0, 15, 0, 8)
		t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
		t.TextXAlignment = Enum.TextXAlignment.Left
		
		local valueLabel = Instance.new("TextLabel", frame)
		valueLabel.Text, valueLabel.Size, valueLabel.Position = tostring(default), UDim2.new(0, 60, 0, 20), UDim2.new(1, -75, 0, 8)
		valueLabel.BackgroundTransparency, valueLabel.TextColor3, valueLabel.TextSize, valueLabel.Font = 1, UI_CONFIG.Highlight, 14, Enum.Font.BuilderSansBold
		valueLabel.TextXAlignment = Enum.TextXAlignment.Right
		ThemeManager.Subscribe(valueLabel, "TextColor3", "Highlight")
		
		local track = Instance.new("Frame", frame)
		track.Name, track.Size, track.Position = "Track", UDim2.new(1, -30, 0, 4), UDim2.new(0, 15, 0, 38)
		track.BackgroundColor3 = UI_CONFIG.Border
		Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0)
		ThemeManager.Subscribe(track, "BackgroundColor3", "Border")
		
		local fill = Instance.new("Frame", track)
		fill.Name, fill.Size, fill.BackgroundColor3 = "Fill", UDim2.new((default - min) / (max - min), 0, 1, 0), UI_CONFIG.Highlight
		fill.BorderSizePixel = 0
		Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0)
		ThemeManager.Subscribe(fill, "BackgroundColor3", "Highlight")
		
		local knob = Instance.new("Frame", track)
		knob.Name, knob.Size, knob.AnchorPoint = "Knob", UDim2.new(0, 12, 0, 12), Vector2.new(0.5, 0.5)
		knob.Position = UDim2.new((default - min) / (max - min), 0, 0.5, 0)
		knob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
		Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)
		
		local dragging = false
		local currentValue = default
		local ContextActionService = game:GetService("ContextActionService")
		
		local function updateSlider(input)
			local relativeX = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
			currentValue = math.floor(min + (max - min) * relativeX)
			valueLabel.Text = tostring(currentValue)
			knob.Position = UDim2.new(relativeX, 0, 0.5, 0)
			fill.Size = UDim2.new(relativeX, 0, 1, 0)
			fn(currentValue)
		end
		
		local function disableMovement()
			ContextActionService:BindAction("DisableMovement", function() return Enum.ContextActionResult.Sink end, false, Enum.PlayerActions.CharacterForward, Enum.PlayerActions.CharacterBackward, Enum.PlayerActions.CharacterLeft, Enum.PlayerActions.CharacterRight, Enum.PlayerActions.CharacterJump)
		end
		
		local function enableMovement()
			ContextActionService:UnbindAction("DisableMovement")
		end
		
		track.InputBegan:Connect(function(input)
			if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
				dragging = true
				disableMovement()
				updateSlider(input)
			end
		end)
		
		track.InputEnded:Connect(function(input)
			if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
				dragging = false
				enableMovement()
			end
		end)
		
		UserInputService.InputChanged:Connect(function(input)
			if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
				updateSlider(input)
			end
		end)
		
		UserInputService.InputEnded:Connect(function(input)
			if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
				if dragging then
					dragging = false
					enableMovement()
				end
			end
		end)
	end

	function UI.Dropdown(parent, name, options, default, fn)
		local frame = Instance.new("Frame", parent)
		frame.Size, frame.BackgroundColor3 = UDim2.new(1, 0, 0, 50), UI_CONFIG.CardBg
		Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
		local stroke = Instance.new("UIStroke", frame)
		stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
		ThemeManager.Subscribe(stroke, "Color", "Border")
		
		local t = Instance.new("TextLabel", frame)
		t.Text, t.Size, t.Position = name, UDim2.new(0.5, -15, 1, 0), UDim2.new(0, 15, 0, 0)
		t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
		t.TextXAlignment = Enum.TextXAlignment.Left
		
		local dropdown = Instance.new("TextButton", frame)
		dropdown.Name, dropdown.Text, dropdown.Size, dropdown.Position = "Dropdown", default, UDim2.new(0.5, -15, 0, 30), UDim2.new(0.5, 0, 0.5, -15)
		dropdown.BackgroundColor3, dropdown.TextColor3, dropdown.Font, dropdown.TextSize = UI_CONFIG.Border, UI_CONFIG.Text, Enum.Font.BuilderSansBold, 13
		dropdown.AutoButtonColor = false
		Instance.new("UICorner", dropdown).CornerRadius = UDim.new(0, 6)
		ThemeManager.Subscribe(dropdown, "BackgroundColor3", "Border")
		
		local arrow = Instance.new("TextLabel", dropdown)
		arrow.Text, arrow.Size, arrow.Position = "▼", UDim2.new(0, 20, 1, 0), UDim2.new(1, -25, 0, 0)
		arrow.BackgroundTransparency, arrow.TextColor3, arrow.TextSize, arrow.Font = 1, UI_CONFIG.Muted, 10, Enum.Font.BuilderSansBold
		arrow.TextXAlignment = Enum.TextXAlignment.Right
		
		local menu = Instance.new("Frame", frame)
		menu.Name, menu.Size, menu.Position, menu.Visible = "Menu", UDim2.new(0.5, -15, 0, #options * 30), UDim2.new(0.5, 0, 1, 5), false
		menu.BackgroundColor3, menu.BorderSizePixel, menu.ZIndex = UI_CONFIG.CardBg, 0, 10
		Instance.new("UICorner", menu).CornerRadius = UDim.new(0, 6)
		local menuStroke = Instance.new("UIStroke", menu)
		menuStroke.Color = UI_CONFIG.Border
		ThemeManager.Subscribe(menuStroke, "Color", "Border")
		
		local menuLayout = Instance.new("UIListLayout", menu)
		menuLayout.SortOrder = Enum.SortOrder.LayoutOrder
		
		for _, option in ipairs(options) do
			local optionBtn = Instance.new("TextButton", menu)
			optionBtn.Name, optionBtn.Text, optionBtn.Size = option, option, UDim2.new(1, 0, 0, 30)
			optionBtn.BackgroundColor3, optionBtn.TextColor3, optionBtn.Font, optionBtn.TextSize = UI_CONFIG.CardBg, UI_CONFIG.Text, Enum.Font.BuilderSans, 12
			optionBtn.AutoButtonColor = false
			
			optionBtn.MouseEnter:Connect(function()
				optionBtn.BackgroundColor3 = UI_CONFIG.Border
			end)
			
			optionBtn.MouseLeave:Connect(function()
				optionBtn.BackgroundColor3 = UI_CONFIG.CardBg
			end)
			
			optionBtn.MouseButton1Click:Connect(function()
				dropdown.Text = option
				menu.Visible = false
				fn(option)
			end)
		end
		
		dropdown.MouseButton1Click:Connect(function()
			menu.Visible = not menu.Visible
		end)
	end

	function UI.Button(parent, text, fn)
		local btn = Instance.new("TextButton", parent)
		btn.Name, btn.Text, btn.Size = text, text, UDim2.new(1, 0, 0, 40)
		btn.BackgroundColor3, btn.TextColor3, btn.Font, btn.TextSize = UI_CONFIG.Border, UI_CONFIG.Text, Enum.Font.BuilderSansBold, 14
		btn.AutoButtonColor = false
		Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
		ThemeManager.Subscribe(btn, "BackgroundColor3", "Border")
		
		btn.MouseEnter:Connect(function()
			TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = UI_CONFIG.Highlight}):Play()
		end)
		
		btn.MouseLeave:Connect(function()
			TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = UI_CONFIG.Border}):Play()
		end)
		
		btn.MouseButton1Click:Connect(fn)
	end
		function UI.Category(parent, name, fn)
			local btn = Instance.new("TextButton", parent)
			btn.Name, btn.Text, btn.Size = name, "", UDim2.new(1, 0, 0, 50)
			btn.BackgroundColor3 = UI_CONFIG.CardBg
			btn.AutoButtonColor = false
			Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8)
			local stroke = Instance.new("UIStroke", btn)
			stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
			ThemeManager.Subscribe(stroke, "Color", "Border")
			
			local t = Instance.new("TextLabel", btn)
			t.Text, t.Size, t.Position = name, UDim2.new(1, -60, 1, 0), UDim2.new(0, 15, 0, 0)
			t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
			t.TextXAlignment = Enum.TextXAlignment.Left
			
			local arrow = Instance.new("TextLabel", btn)
			arrow.Text, arrow.Size, arrow.Position = "→", UDim2.new(0, 30, 1, 0), UDim2.new(1, -40, 0, 0)
			arrow.BackgroundTransparency, arrow.TextColor3, arrow.TextSize, arrow.Font = 1, UI_CONFIG.Muted, 18, Enum.Font.BuilderSansBold
			arrow.TextXAlignment = Enum.TextXAlignment.Right
			
			btn.MouseEnter:Connect(function() TweenService:Create(stroke, TweenInfo.new(0.2), {Color = UI_CONFIG.Highlight}):Play() end)
			btn.MouseLeave:Connect(function() TweenService:Create(stroke, TweenInfo.new(0.2), {Color = UI_CONFIG.Border}):Play() end)
			btn.MouseButton1Click:Connect(fn)
		end
		
		function UI.Command(parent, name, desc, fn)
			local frame = Instance.new("Frame", parent)
			frame.Size, frame.BackgroundColor3 = UDim2.new(1, 0, 0, 50), UI_CONFIG.CardBg
			Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
			local stroke = Instance.new("UIStroke", frame)
			stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
			ThemeManager.Subscribe(stroke, "Color", "Border")
			
			local t = Instance.new("TextLabel", frame)
			t.Text, t.Size, t.Position = name, UDim2.new(1, -120, 0, 20), UDim2.new(0, 15, 0, 8)
			t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
			t.TextXAlignment = Enum.TextXAlignment.Left
			
			local d = Instance.new("TextLabel", frame)
			d.Text, d.Size, d.Position = desc, UDim2.new(1, -120, 0, 15), UDim2.new(0, 15, 0, 26)
			d.BackgroundTransparency, d.TextColor3, d.TextSize, d.Font = 1, UI_CONFIG.Muted, 12, Enum.Font.BuilderSans
			d.TextXAlignment = Enum.TextXAlignment.Left
			
			local run = Instance.new("TextButton", frame)
			run.Text, run.Size, run.Position = "Run", UDim2.new(0, 80, 0, 30), UDim2.new(1, -95, 0.5, -15)
			run.BackgroundColor3, run.TextColor3, run.Font, run.TextSize = UI_CONFIG.Border, UI_CONFIG.Text, Enum.Font.BuilderSansBold, 13
			ThemeManager.Subscribe(run, "BackgroundColor3", "Border")
			Instance.new("UICorner", run).CornerRadius = UDim.new(0, 6)
			run.MouseButton1Click:Connect(fn)
		end

		-- [ Layouts ] --
		local cmdScroll = Instance.new("ScrollingFrame", cmdPage)
		cmdScroll.Size, cmdScroll.Position = UDim2.new(1, -40, 1, -40), UDim2.new(0, 20, 0, 20)
		cmdScroll.BackgroundTransparency, cmdScroll.BorderSizePixel, cmdScroll.ScrollBarThickness = 1, 0, 0
		local cmdLayout = Instance.new("UIListLayout", cmdScroll)
		cmdLayout.Padding, cmdLayout.SortOrder = UDim.new(0, 8), Enum.SortOrder.LayoutOrder

		UI.Command(cmdScroll, "Fly", "Smooth flight mechanics", function() EXE.Fly() end)
		UI.Command(cmdScroll, "Speed", "Modify movement velocity", function() EXE.Speed(50) end)
		UI.Command(cmdScroll, "JumpPower", "Adjust jump height", function() EXE.Jump(100) end)
		UI.Command(cmdScroll, "Noclip", "Disable collision physics", function() EXE.Noclip() end)
		UI.Command(cmdScroll, "Reset", "Restore character state", function() Player.Character:BreakJoints() end)
		UI.Command(cmdScroll, "Music Player", "Play audio via ID", function() EXE.PlayMusic(1837834515) end)
		UI.Command(cmdScroll, "Grab Tool", "Attempts to find and give a tool", function() EXE.GiveTool("Sword") end)
		UI.Command(cmdScroll, "Fling", "Tool-based fling (equip tool first)", function() NotificationSystem.Show("Info", "Equip tool, then: " .. STATES.CommandPrefix .. "fling <name>") end)
		UI.Command(cmdScroll, "Kill", "Eliminate player with tool (needs tool)", function() NotificationSystem.Show("Info", "Have tool, then: " .. STATES.CommandPrefix .. "kill <name>") end)

		-- Settings Navigation
		local breadcrumb = Instance.new("Frame", setPage)
		breadcrumb.Name, breadcrumb.Size, breadcrumb.Position = "Breadcrumb", UDim2.new(1, -40, 0, 30), UDim2.new(0, 20, 0, 15)
		breadcrumb.BackgroundTransparency = 1
		local bLayout = Instance.new("UIListLayout", breadcrumb)
		bLayout.FillDirection, bLayout.SortOrder, bLayout.Padding = Enum.FillDirection.Horizontal, Enum.SortOrder.LayoutOrder, UDim.new(0, 8)
		bLayout.VerticalAlignment = Enum.VerticalAlignment.Center

		local setViews = Instance.new("Frame", setPage)
		setViews.Size, setViews.Position, setViews.BackgroundTransparency = UDim2.new(1, 0, 1, -45), UDim2.new(0, 0, 0, 45), 1
		
		local currentView = nil
		local history = {}

		local function switchView(name, frame)
			if currentView then currentView.Visible = false end
			currentView = frame
			currentView.Visible = true
			for _, v in pairs(breadcrumb:GetChildren()) do if v:IsA("GuiObject") then v:Destroy() end end
			table.insert(history, {Name = name, View = frame})
			
			for i, h in ipairs(history) do
				local isActive = (i == #history)
				local btn = Instance.new("TextButton", breadcrumb)
				btn.Text, btn.Size, btn.BackgroundTransparency = h.Name, UDim2.new(0, 0, 1, 0), 1
				btn.TextColor3, btn.TextSize, btn.Font = isActive and UI_CONFIG.Text or UI_CONFIG.Muted, 13, Enum.Font.BuilderSansBold
				btn.AutomaticSize = Enum.AutomaticSize.X
				if not isActive then
					btn.MouseButton1Click:Connect(function()
						for j = #history, i + 1, -1 do table.remove(history, j) end
						local last = history[#history]
						table.remove(history, #history)
						switchView(last.Name, last.View)
					end)
					local sep = Instance.new("TextLabel", breadcrumb)
					sep.Text, sep.Size, sep.TextColor3, sep.BackgroundTransparency = ">", UDim2.new(0, 10, 1, 0), UI_CONFIG.Muted, 1
				end
			end
		end

		local function createView(name)
			local sc = Instance.new("ScrollingFrame", setViews)
			sc.Name, sc.Size, sc.Position, sc.Visible = name, UDim2.new(1, -40, 1, -20), UDim2.new(0, 20, 0, 0), false
			sc.BackgroundTransparency, sc.BorderSizePixel, sc.ScrollBarThickness = 1, 0, 0
			local ly = Instance.new("UIListLayout", sc)
			ly.Padding, ly.SortOrder = UDim.new(0, 8), Enum.SortOrder.LayoutOrder
			return sc
		end

		local mainSet = createView("Settings")
		local appSet = createView("Appearance")
		local notSet = createView("Notifications")
		local advSet = createView("Advanced")
		local ctrlSet = createView("Controls")
		local perfSet = createView("Performance")
		local audioSet = createView("Audio")
		local privSet = createView("Privacy & Safety")
		local accSet = createView("Accessibility")
		local lanSet = createView("Language & Region")
		
		-- Populate Settings
		UI.Category(mainSet, "Appearance", function() switchView("Appearance", appSet) end)
		UI.Category(mainSet, "Accessibility", function() switchView("Accessibility", accSet) end)
		UI.Category(mainSet, "Advanced", function() switchView("Advanced", advSet) end)

		UI.Header(appSet, "Display")
		UI.Slider(appSet, "UI Scale", 50, 200, 100, function(val)
			STATES.Settings.Appearance.UIScale = val / 100
			main.Size = UDim2.new(0, 567 * (val / 100), 0, 331 * (val / 100))
		end)
		
		UI.Slider(appSet, "Font Size", 10, 20, 14, function(val)
			STATES.Settings.Appearance.FontSize = val
			NotificationSystem.Show("Appearance", "Font size: " .. val .. " (requires reload)")
		end)
		
		UI.Slider(appSet, "Blur Strength", 0, 10, 0, function(val)
			STATES.Settings.Appearance.BlurStrength = val
			local blur = main:FindFirstChild("BlurEffect") or Instance.new("BlurEffect", main)
			blur.Size = val
		end)
		
		UI.Slider(appSet, "Transparency", 0, 100, 0, function(val)
			STATES.Settings.Appearance.Transparency = val
			main.BackgroundTransparency = val / 100
		end)
		
		UI.Header(appSet, "Behavior")
		UI.Toggle(appSet, "Animations", true, function(val)
			STATES.Settings.Appearance.AnimationsEnabled = val
		end)

		UI.Header(appSet, "Theme")
		local themeList = createView("ThemeSelector")
		UI.Category(appSet, "Select Theme", function() switchView("Theme", themeList) end)
		
		local currentTheme = "Neutral"
		local function refreshThemes()
			for _, v in pairs(themeList:GetChildren()) do if v:IsA("GuiObject") then v:Destroy() end end
			local ly = Instance.new("UIListLayout", themeList)
			ly.Padding, ly.SortOrder = UDim.new(0, 5), Enum.SortOrder.Name
			
			for name, color in pairs(THEMES) do
				UI.ThemeOption(themeList, name, color, currentTheme == name, function()
					currentTheme = name
					ThemeManager.Update("Highlight", color)
					refreshThemes()
					NotificationSystem.Show("Theme", "Applied " .. name .. " theme")
				end)
			end
		end
		refreshThemes()
		
		UI.Header(notSet, "Status")
		UI.ProgressBar(notSet, "Memory Usage")
		UI.ProgressBar(notSet, "Network Latency")
		
		UI.Header(lanSet, "Localization")
		UI.Category(lanSet, "System Language", function() NotificationSystem.Show("Info", "Switching to Roblox System Defaults") end)


	-- Notifications Settings
	UI.Header(notSet, "Notifications")
	UI.Slider(notSet, "Alert Duration", 2, 10, 4, function(val)
		STATES.Settings.Notifications.Duration = val
		NotificationSystem.Show("Settings", "Notification duration: " .. val .. "s")
	end)

	UI.Toggle(notSet, "Sound Enabled", true, function(val)
		STATES.Settings.Notifications.SoundEnabled = val
	end)

	UI.Dropdown(notSet, "Position", {"BottomRight", "BottomLeft", "TopRight", "TopLeft"}, "BottomRight", function(val)
		STATES.Settings.Notifications.Position = val
		NotificationSystem.Show("Settings", "Position: " .. val)
	end)

	UI.Dropdown(notSet, "Severity Filter", {"All", "Warnings", "Errors"}, "All", function(val)
		STATES.Settings.Notifications.SeverityFilter = val
	end)

	UI.Header(notSet, "Status")
	UI.ProgressBar(notSet, "Memory Usage")
	UI.ProgressBar(notSet, "Network Latency")

	-- Controls Settings
	UI.Header(ctrlSet, "Movement")
	UI.Slider(ctrlSet, "Fly Speed", 10, 200, 50, function(val)
		STATES.Settings.Controls.FlySpeed = val
		STATES.Fly.Speed = val
	end)

	UI.Slider(ctrlSet, "Sensitivity", 10, 300, 100, function(val)
		STATES.Settings.Controls.Sensitivity = val / 100
	end)

	UI.Header(ctrlSet, "Keybinds")
	UI.Category(ctrlSet, "Toggle Hub: RightControl", function()
		NotificationSystem.Show("Info", "Keybind remapping coming soon")
	end)

	-- Performance Settings
	UI.Header(perfSet, "Graphics")
	UI.Slider(perfSet, "FPS Limit", 30, 144, 60, function(val)
		STATES.Settings.Performance.FPSLimit = val
		NotificationSystem.Show("Performance", "FPS limited to " .. val)
	end)

	UI.Slider(perfSet, "Render Distance", 100, 2000, 1000, function(val)
		STATES.Settings.Performance.RenderDistance = val
	end)

	UI.Toggle(perfSet, "Particles Enabled", true, function(val)
		STATES.Settings.Performance.ParticlesEnabled = val
	end)

	UI.Toggle(perfSet, "Low Graphics Mode", false, function(val)
		STATES.Settings.Performance.LowGraphicsMode = val
		if val then
			Lighting.GlobalShadows = false
			Lighting.FogEnd = 500
		else
			Lighting.GlobalShadows = true
			Lighting.FogEnd = 100000
		end
	end)

	-- Audio Settings
	UI.Header(audioSet, "Volume")
	UI.Slider(audioSet, "Master Volume", 0, 100, 50, function(val)
		STATES.Settings.Audio.MasterVolume = val / 100
		game:GetService("SoundService").Volume = val / 100
	end)

	UI.Slider(audioSet, "Music Volume", 0, 100, 50, function(val)
		STATES.Settings.Audio.MusicVolume = val / 100
	end)

	UI.Toggle(audioSet, "Mute All", false, function(val)
		STATES.Settings.Audio.Muted = val
		game:GetService("SoundService").Volume = val and 0 or STATES.Settings.Audio.MasterVolume
	end)

	-- Privacy Settings
	UI.Header(privSet, "Visibility")
	UI.Toggle(privSet, "Chat Visible", true, function(val)
		STATES.Settings.Privacy.ChatVisible = val
		local chat = PlayerGui:FindFirstChild("Chat")
		if chat then chat.Enabled = val end
	end)

	UI.Toggle(privSet, "Join/Leave Alerts", true, function(val)
		STATES.Settings.Privacy.JoinLeaveAlerts = val
	end)

	UI.Toggle(privSet, "Screenshot Watermark", false, function(val)
		STATES.Settings.Privacy.ScreenshotWatermark = val
	end)

	-- Accessibility Settings
	UI.Header(accSet, "Motion")
	UI.Toggle(accSet, "Reduced Motion", false, function(val)
		STATES.Settings.Accessibility.ReducedMotion = val
		NotificationSystem.Show("Accessibility", "Reduced motion: " .. (val and "ON" or "OFF"))
	end)

	UI.Header(accSet, "Visual")
	UI.Toggle(accSet, "High Contrast", false, function(val)
		STATES.Settings.Accessibility.HighContrast = val
		if val then
			UI_CONFIG.Border = Color3.fromRGB(255, 255, 255)
			ThemeManager.Update("Border", UI_CONFIG.Border)
		else
			UI_CONFIG.Border = Color3.fromRGB(32, 32, 32)
			ThemeManager.Update("Border", UI_CONFIG.Border)
		end
	end)

	-- Advanced Settings
	UI.Header(advSet, "Developer")
	UI.Toggle(advSet, "Debug Mode", false, function(val)
		STATES.Settings.Advanced.DebugMode = val
		NotificationSystem.Show("Advanced", "Debug mode: " .. (val and "ON" or "OFF"))
	end)

	UI.Toggle(advSet, "Experimental Features", false, function(val)
		STATES.Settings.Advanced.ExperimentalFeatures = val
	end)

	UI.Header(advSet, "Commands")
	function UI.TextInput(parent, name, default, fn)
		local frame = Instance.new("Frame", parent)
		frame.Size, frame.BackgroundColor3 = UDim2.new(1, 0, 0, 50), UI_CONFIG.CardBg
		Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)
		local stroke = Instance.new("UIStroke", frame)
		stroke.Color, stroke.Thickness = UI_CONFIG.Border, 1
		ThemeManager.Subscribe(stroke, "Color", "Border")
		
		local t = Instance.new("TextLabel", frame)
		t.Text, t.Size, t.Position = name, UDim2.new(0.4, -15, 1, 0), UDim2.new(0, 15, 0, 0)
		t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 14, Enum.Font.BuilderSansBold
		t.TextXAlignment = Enum.TextXAlignment.Left
		
		local input = Instance.new("TextBox", frame)
		input.Name, input.Text, input.Size, input.Position = "Input", default, UDim2.new(0.6, -30, 0, 30), UDim2.new(0.4, 0, 0.5, -15)
		input.BackgroundColor3, input.TextColor3, input.Font, input.TextSize = UI_CONFIG.Border, UI_CONFIG.Text, Enum.Font.BuilderSansBold, 13
		input.PlaceholderText = default
		Instance.new("UICorner", input).CornerRadius = UDim.new(0, 6)
		ThemeManager.Subscribe(input, "BackgroundColor3", "Border")
		
		input.FocusLost:Connect(function(enterPressed)
			if enterPressed and input.Text ~= "" then
				fn(input.Text)
			end
		end)
	end

	UI.TextInput(advSet, "Command Prefix", STATES.CommandPrefix, function(val)
		STATES.CommandPrefix = val
		STATES.Settings.Advanced.CommandPrefix = val
		NotificationSystem.Show("Advanced", "Command prefix set to: " .. val)
	end)

	UI.Header(advSet, "Actions")
	UI.Button(advSet, "Reload UI", function()
		NotificationSystem.Show("Advanced", "Reloading UI...")
		task.wait(0.5)
		screen:Destroy()
		createHub()
	end)

	UI.Button(advSet, "Reset All Settings", function()
		NotificationSystem.Show("Advanced", "Settings reset to defaults")
		STATES.Settings.Appearance.UIScale = 1.0
		STATES.Settings.Appearance.FontSize = 14
		STATES.Settings.Appearance.BlurStrength = 0
		STATES.Settings.Appearance.Transparency = 0
		STATES.CommandPrefix = "ob/"
		STATES.Settings.Advanced.CommandPrefix = "ob/"
	end)

		switchView("Settings", mainSet)

		-- Home Tab Profile
		local pArea = Instance.new("Frame", home)
		pArea.Size, pArea.Position, pArea.BackgroundTransparency = UDim2.new(1, 0, 0, 90), UDim2.new(0, 0, 0, 20), 1
		local pImg = Instance.new("ImageLabel", pArea)
		pImg.Size, pImg.Position = UDim2.new(0, 48, 0, 48), UDim2.new(0.5, -24, 0, 0)
		pImg.BackgroundTransparency, pImg.Image = 1, "https://www.roblox.com/headshot-thumbnail/image?userId=" .. Player.UserId .. "&width=150&height=150&format=png"
		Instance.new("UICorner", pImg).CornerRadius = UDim.new(1, 0)
		
		local pName = Instance.new("TextLabel", pArea)
		pName.Text, pName.Size, pName.Position = Player.DisplayName, UDim2.new(1, 0, 0, 20), UDim2.new(0, 0, 0, 55)
		pName.BackgroundTransparency, pName.TextColor3, pName.TextSize, pName.Font = 1, UI_CONFIG.Text, 15, Enum.Font.BuilderSansBold
		
		local function createCard(parent, cardTitle, cardSub, pos, size)
			local c = Instance.new("Frame", parent)
			c.Name, c.Size, c.Position, c.BackgroundColor3 = "Card", size, pos, UI_CONFIG.CardBg
			Instance.new("UICorner", c).CornerRadius = UDim.new(0, 10)
			local s = Instance.new("UIStroke", c); s.Color, s.Thickness = UI_CONFIG.Border, 1
			ThemeManager.Subscribe(s, "Color", "Border")
			local h = Instance.new("Frame", c)
			h.Name, h.Size, h.BackgroundTransparency = "Header", UDim2.new(1, 0, 0, 68), 1
			
			local t = Instance.new("TextLabel", h)
			t.Text, t.Size, t.Position = cardTitle, UDim2.new(1, -36, 0, 22), UDim2.new(0, 18, 0, 15)
			t.BackgroundTransparency, t.TextColor3, t.TextSize, t.Font = 1, UI_CONFIG.Text, 16, Enum.Font.BuilderSansBold
			t.TextXAlignment = Enum.TextXAlignment.Left
			
			local st = Instance.new("TextLabel", h)
			st.Text, st.Size, st.Position = cardSub, UDim2.new(1, -36, 0, 18), UDim2.new(0, 18, 0, 37)
			st.BackgroundTransparency, st.TextColor3, st.TextSize, st.Font = 1, UI_CONFIG.Muted, 13, Enum.Font.BuilderSans
			st.TextXAlignment = Enum.TextXAlignment.Left
			
			local l = Instance.new("Frame", h)
			l.Size, l.Position, l.BackgroundColor3 = UDim2.new(1, 0, 0, 1), UDim2.new(0, 0, 1, 0), UI_CONFIG.Border
			l.BorderSizePixel = 0
			ThemeManager.Subscribe(l, "BackgroundColor3", "Border")
			local b = Instance.new("Frame", c)
			b.Name, b.Size, b.Position, b.BackgroundTransparency = "Body", UDim2.new(1, 0, 1, -68), UDim2.new(0, 0, 0, 68), 1
			return b
		end

		local sBody = createCard(home, "Server Statistics", "Live data for the current instance.", UDim2.new(0, 25, 0, 115), UDim2.new(1, -50, 0, 150))
		local function addRow(parent, rowName, rowVal, pos)
			local r = Instance.new("Frame", parent)
			r.Size, r.Position, r.BackgroundTransparency = UDim2.new(1, -36, 0, 28), pos, 1
			local lt = Instance.new("TextLabel", r)
			lt.Text, lt.Size = rowName, UDim2.new(0.5, 0, 1, 0)
			lt.BackgroundTransparency, lt.TextColor3, lt.TextSize, lt.Font = 1, UI_CONFIG.Text, 12, Enum.Font.BuilderSans
			lt.TextXAlignment = Enum.TextXAlignment.Left
			local rt = Instance.new("TextLabel", r)
			rt.Text, rt.Size, rt.Position = rowVal, UDim2.new(0.5, 0, 1, 0), UDim2.new(0.5, 0, 0, 0)
			rt.BackgroundTransparency, rt.TextColor3, rt.TextSize, rt.Font = 1, UI_CONFIG.Text, 12, Enum.Font.BuilderSansBold
			rt.TextXAlignment = Enum.TextXAlignment.Right
			return rt
		end

		local pCount = addRow(sBody, "Players count", #Players:GetPlayers(), UDim2.new(0, 18, 0, 15))
		local uTime = addRow(sBody, "Server uptime", "0 minutes", UDim2.new(0, 18, 0, 48))

		Players.PlayerAdded:Connect(function() pCount.Text = #Players:GetPlayers() end)
		Players.PlayerRemoving:Connect(function() pCount.Text = #Players:GetPlayers() end)
		
		local function formatTime(seconds)
			local h = math.floor(seconds / 3600)
			local m = math.floor((seconds % 3600) / 60)
			local parts = {}
			if h > 0 then table.insert(parts, h .. " hour" .. (h ~= 1 and "s" or "")) end
			if m > 0 then table.insert(parts, m .. " minute" .. (m ~= 1 and "s" or "")) end
			return #parts > 0 and table.concat(parts, ", ") or "0 minutes"
		end
		
		task.spawn(function()
			while task.wait(60) do if uTime and uTime.Parent then uTime.Text = formatTime(math.floor(Workspace.DistributedGameTime)) end end
		end)
		uTime.Text = formatTime(math.floor(Workspace.DistributedGameTime))

		-- Init
		navItems.Home.Page.Visible = true
		navItems.Home.Btn.ImageTransparency = 0
		
		UserInputService.InputBegan:Connect(function(input, gpe)
			if not gpe and input.KeyCode == Enum.KeyCode.RightControl then
				STATES.HubVisible = not STATES.HubVisible
				screen.Enabled = STATES.HubVisible
			end
		end)
	end

	local function boot()
		ReplicatedFirst:RemoveDefaultLoadingScreen()
		local screen = Instance.new("ScreenGui", PlayerGui)
		screen.Name, screen.IgnoreGuiInset, screen.ResetOnSpawn = "OblivionLoad", true, false
		local box = Instance.new("Frame", screen)
		box.Size, box.Position, box.AnchorPoint = UDim2.new(0, 360, 0, 180), UDim2.new(0.5, 0, 0.5, 0), Vector2.new(0.5, 0.5)
		box.BackgroundColor3, box.BackgroundTransparency = Color3.fromRGB(8, 8, 8), 0
		Instance.new("UICorner", box).CornerRadius = UDim.new(0, 14)
		local stroke = Instance.new("UIStroke", box); stroke.Color = UI_CONFIG.Border
		
		local lbl = Instance.new("TextLabel", box)
		lbl.Text, lbl.Size, lbl.Position = "OBLIVION", UDim2.new(1, 0, 0, 50), UDim2.new(0, 0, 0, 50)
		lbl.BackgroundTransparency, lbl.TextColor3, lbl.TextSize, lbl.Font = 1, UI_CONFIG.Text, 34, Enum.Font.BuilderSansExtraBold
		
		local shell = Instance.new("Frame", box)
		shell.Size, shell.Position, shell.AnchorPoint, shell.BackgroundColor3 = UDim2.new(0, 260, 0, 2), UDim2.new(0.5, 0, 0.8, 0), Vector2.new(0.5, 0.5), UI_CONFIG.Border
		Instance.new("UICorner", shell).CornerRadius = UDim.new(1, 0)
		local bar = Instance.new("Frame", shell)
		bar.Size, bar.BackgroundColor3 = UDim2.new(0, 0, 1, 0), UI_CONFIG.Highlight
		Instance.new("UICorner", bar).CornerRadius = UDim.new(1, 0)
		task.wait(1)
		local move = TweenService:Create(bar, TweenInfo.new(2.5, Enum.EasingStyle.Quart), {Size = UDim2.new(1, 0, 1, 0)})
		move:Play()
		move.Completed:Connect(function() task.wait(0.5); screen:Destroy(); createHub() end)
	end

	task.spawn(boot)

Features & Information

Oblivion is a high-performance, premium Roblox Admin Hub designed for seamless player control and server management. Heavily inspired by the shadcn design , it provides a sleek, dark-mode interface with professional-grade modules and a minimalist aesthetic.
#hub#shadcn

Community Comments (8)

its good, however i feel you need to add a few more things.

Replying to @thisaccountisinactiv
OpenSourceGUYOpenSourceGUYDec 24, 2025

@SirPwnsAlot alright tell me it and i fix it

Replying to @OpenSourceGUY

@OpenSourceGUY Ok first add credits so people don't steal it and call it theirs and then add an "-" button and x button and then add more features and anything of your choice idk

oh yeah and also add more tabs such as require scripts for backdoored games and FE/Admin gui's if you want

OpenSourceGUYOpenSourceGUYDec 25, 2025

k

OpenSourceGUYOpenSourceGUYDec 25, 2025

i cant do require stuff i think

can you give me credits on the fling part? You almost completely copied my fling without crediting me

Replying to @Automated_Account
OpenSourceGUYOpenSourceGUYJan 18, 2026

@Automated_Account sorry but also the fling doesnt work and i took the graffti spam thing so yeah my fault i would credit you in credits in settings tab but this not gotta get updated soon

More Scripts for Free Client Script Executor *BACK*