Cub Hub
Key RequiredUniversal

Cub Hub

Universal Scriptnowayimgonnabackdownowayimgonnabackdow 23 views 193 executesUpdated Jul 6, 2026
Unrated
00
Lua Scriptâ€ĸ1649 lines (57531 chars)
-- =============================================
-- Cub's Hub v2.1 | Built for Solara
-- =============================================

-- Cleanup old instances
pcall(function()
    if gethui then
        for _, v in pairs(gethui():GetChildren()) do
            if v.Name == "CubsHub" then v:Destroy() end
        end
    end
    for _, v in pairs(game.CoreGui:GetChildren()) do
        if v.Name == "CubsHub" then v:Destroy() end
    end
end)
task.wait(0.3)

-- Reset all globals
getgenv().InfJump = false
getgenv().Noclip = false
getgenv().Flying = false
getgenv().FlySpeed = 80
getgenv().GodMode = false
getgenv().AutoHeal = false
getgenv().NoRagdoll = false
getgenv().AntiFall = false
getgenv().RainbowBody = false
getgenv().Freecam = false
getgenv().Spinning = false
getgenv().KillAura = false
getgenv().AutoParry = false
getgenv().AttackRange = 15
getgenv().AttackSpeed = 5
getgenv().CubKeybind = true
getgenv().CubNotifs = true

-- Services
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local HttpService = game:GetService("HttpService")
local LP = Players.LocalPlayer

-- Safe parent
local GuiParent
if gethui then
    GuiParent = gethui()
else
    GuiParent = game.CoreGui
end

-- =============================================
-- THEME
-- =============================================
local C = {
    BG = Color3.fromRGB(18, 18, 28),
    Bar = Color3.fromRGB(25, 25, 40),
    Side = Color3.fromRGB(22, 22, 34),
    Accent = Color3.fromRGB(85, 125, 255),
    AccentDark = Color3.fromRGB(60, 90, 200),
    Card = Color3.fromRGB(28, 28, 42),
    Btn = Color3.fromRGB(35, 35, 52),
    BtnHover = Color3.fromRGB(48, 48, 68),
    Text = Color3.fromRGB(255, 255, 255),
    TextDim = Color3.fromRGB(160, 160, 185),
    TextDark = Color3.fromRGB(100, 100, 125),
    Green = Color3.fromRGB(75, 195, 115),
    Yellow = Color3.fromRGB(255, 175, 55),
    Red = Color3.fromRGB(240, 65, 65),
    Line = Color3.fromRGB(45, 45, 65),
    Scroll = Color3.fromRGB(55, 55, 80),
}

-- =============================================
-- UTILITIES
-- =============================================
local function MakeCorner(p, r)
    local c = Instance.new("UICorner")
    c.CornerRadius = UDim.new(0, r or 8)
    c.Parent = p
end

local function MakeStroke(p, col, t)
    local s = Instance.new("UIStroke")
    s.Color = col or C.Line
    s.Thickness = t or 1
    s.Parent = p
end

local function MakePad(p, t, b, l, r)
    local pad = Instance.new("UIPadding")
    pad.PaddingTop = UDim.new(0, t or 0)
    pad.PaddingBottom = UDim.new(0, b or 0)
    pad.PaddingLeft = UDim.new(0, l or 0)
    pad.PaddingRight = UDim.new(0, r or 0)
    pad.Parent = p
end

local function Anim(obj, props, dur)
    TweenService:Create(obj, TweenInfo.new(dur or 0.25, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), props):Play()
end

-- =============================================
-- SCREEN GUI
-- =============================================
local Gui = Instance.new("ScreenGui")
Gui.Name = "CubsHub"
Gui.ResetOnSpawn = false
Gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
Gui.Parent = GuiParent

-- =============================================
-- NOTIFICATION SYSTEM
-- =============================================
local NotifHolder = Instance.new("Frame")
NotifHolder.Name = "Notifs"
NotifHolder.Size = UDim2.new(0, 290, 1, 0)
NotifHolder.Position = UDim2.new(1, -300, 0, 0)
NotifHolder.BackgroundTransparency = 1
NotifHolder.Parent = Gui

local NotifList = Instance.new("UIListLayout")
NotifList.SortOrder = Enum.SortOrder.LayoutOrder
NotifList.VerticalAlignment = Enum.VerticalAlignment.Bottom
NotifList.Padding = UDim.new(0, 6)
NotifList.Parent = NotifHolder
MakePad(NotifHolder, 0, 10, 0, 0)

local function Notify(title, msg, ntype)
    local col = C.Accent
    if ntype == "success" then col = C.Green
    elseif ntype == "warning" then col = C.Yellow
    elseif ntype == "error" then col = C.Red end

    local n = Instance.new("Frame")
    n.Size = UDim2.new(1, 0, 0, 60)
    n.BackgroundColor3 = C.Card
    n.BorderSizePixel = 0
    n.Parent = NotifHolder
    MakeCorner(n, 8)
    MakeStroke(n, col, 1.2)

    local bar = Instance.new("Frame")
    bar.Size = UDim2.new(0, 3, 1, -8)
    bar.Position = UDim2.new(0, 4, 0, 4)
    bar.BackgroundColor3 = col
    bar.BorderSizePixel = 0
    bar.Parent = n
    MakeCorner(bar, 2)

    local t = Instance.new("TextLabel")
    t.Size = UDim2.new(1, -20, 0, 22)
    t.Position = UDim2.new(0, 14, 0, 6)
    t.BackgroundTransparency = 1
    t.Text = "đŸģ " .. title
    t.TextColor3 = C.Text
    t.TextSize = 13
    t.Font = Enum.Font.GothamBold
    t.TextXAlignment = Enum.TextXAlignment.Left
    t.Parent = n

    local m = Instance.new("TextLabel")
    m.Size = UDim2.new(1, -20, 0, 22)
    m.Position = UDim2.new(0, 14, 0, 28)
    m.BackgroundTransparency = 1
    m.Text = msg
    m.TextColor3 = C.TextDim
    m.TextSize = 11
    m.Font = Enum.Font.Gotham
    m.TextXAlignment = Enum.TextXAlignment.Left
    m.TextWrapped = true
    m.Parent = n

    local prog = Instance.new("Frame")
    prog.Size = UDim2.new(1, -8, 0, 2)
    prog.Position = UDim2.new(0, 4, 1, -4)
    prog.BackgroundColor3 = col
    prog.BorderSizePixel = 0
    prog.Parent = n
    MakeCorner(prog, 1)

    n.BackgroundTransparency = 1
    Anim(n, {BackgroundTransparency = 0}, 0.3)
    Anim(prog, {Size = UDim2.new(0, 0, 0, 2)}, 3.5)

    task.delay(4, function()
        Anim(n, {BackgroundTransparency = 1}, 0.3)
        task.delay(0.35, function()
            pcall(function() n:Destroy() end)
        end)
    end)
end

-- =============================================
-- MAIN WINDOW
-- =============================================
local Main = Instance.new("Frame")
Main.Name = "Main"
Main.Size = UDim2.new(0, 680, 0, 440)
Main.Position = UDim2.new(0.5, -340, 0.5, -220)
Main.BackgroundColor3 = C.BG
Main.BorderSizePixel = 0
Main.ClipsDescendants = true
Main.Parent = Gui
MakeCorner(Main, 12)
MakeStroke(Main, C.Accent, 1.5)

-- =============================================
-- TOP BAR
-- =============================================
local TopBar = Instance.new("Frame")
TopBar.Name = "TopBar"
TopBar.Size = UDim2.new(1, 0, 0, 48)
TopBar.BackgroundColor3 = C.Bar
TopBar.BorderSizePixel = 0
TopBar.Parent = Main
MakeCorner(TopBar, 12)

local BarFix = Instance.new("Frame")
BarFix.Size = UDim2.new(1, 0, 0, 14)
BarFix.Position = UDim2.new(0, 0, 1, -14)
BarFix.BackgroundColor3 = C.Bar
BarFix.BorderSizePixel = 0
BarFix.Parent = TopBar

local TitleLabel = Instance.new("TextLabel")
TitleLabel.Size = UDim2.new(0, 180, 1, 0)
TitleLabel.Position = UDim2.new(0, 18, 0, 0)
TitleLabel.BackgroundTransparency = 1
TitleLabel.Text = "đŸģ Cub's Hub"
TitleLabel.TextColor3 = C.Accent
TitleLabel.TextSize = 20
TitleLabel.Font = Enum.Font.GothamBold
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
TitleLabel.Parent = TopBar

local Badge = Instance.new("TextLabel")
Badge.Size = UDim2.new(0, 45, 0, 18)
Badge.Position = UDim2.new(0, 162, 0.5, -9)
Badge.BackgroundColor3 = C.Accent
Badge.BackgroundTransparency = 0.8
Badge.Text = "v2.1"
Badge.TextColor3 = C.Accent
Badge.TextSize = 10
Badge.Font = Enum.Font.GothamBold
Badge.Parent = TopBar
MakeCorner(Badge, 4)

local PlayerLabel = Instance.new("TextLabel")
PlayerLabel.Size = UDim2.new(0, 200, 1, 0)
PlayerLabel.Position = UDim2.new(1, -310, 0, 0)
PlayerLabel.BackgroundTransparency = 1
PlayerLabel.Text = "👤 " .. LP.Name
PlayerLabel.TextColor3 = C.TextDim
PlayerLabel.TextSize = 12
PlayerLabel.Font = Enum.Font.Gotham
PlayerLabel.TextXAlignment = Enum.TextXAlignment.Right
PlayerLabel.Parent = TopBar

local MinBtn = Instance.new("TextButton")
MinBtn.Size = UDim2.new(0, 34, 0, 34)
MinBtn.Position = UDim2.new(1, -80, 0.5, -17)
MinBtn.BackgroundColor3 = C.Yellow
MinBtn.BackgroundTransparency = 0.75
MinBtn.Text = "─"
MinBtn.TextColor3 = C.Yellow
MinBtn.TextSize = 16
MinBtn.Font = Enum.Font.GothamBold
MinBtn.BorderSizePixel = 0
MinBtn.Parent = TopBar
MakeCorner(MinBtn, 8)

MinBtn.MouseEnter:Connect(function() Anim(MinBtn, {BackgroundTransparency = 0.4}, 0.15) end)
MinBtn.MouseLeave:Connect(function() Anim(MinBtn, {BackgroundTransparency = 0.75}, 0.15) end)

local CloseBtn = Instance.new("TextButton")
CloseBtn.Size = UDim2.new(0, 34, 0, 34)
CloseBtn.Position = UDim2.new(1, -42, 0.5, -17)
CloseBtn.BackgroundColor3 = C.Red
CloseBtn.BackgroundTransparency = 0.75
CloseBtn.Text = "✕"
CloseBtn.TextColor3 = C.Red
CloseBtn.TextSize = 14
CloseBtn.Font = Enum.Font.GothamBold
CloseBtn.BorderSizePixel = 0
CloseBtn.Parent = TopBar
MakeCorner(CloseBtn, 8)

CloseBtn.MouseEnter:Connect(function() Anim(CloseBtn, {BackgroundTransparency = 0.4}, 0.15) end)
CloseBtn.MouseLeave:Connect(function() Anim(CloseBtn, {BackgroundTransparency = 0.75}, 0.15) end)

CloseBtn.MouseButton1Click:Connect(function()
    -- Reset all toggles
    getgenv().InfJump = false
    getgenv().Noclip = false
    getgenv().Flying = false
    getgenv().GodMode = false
    getgenv().AutoHeal = false
    getgenv().NoRagdoll = false
    getgenv().AntiFall = false
    getgenv().RainbowBody = false
    getgenv().Freecam = false
    getgenv().Spinning = false
    getgenv().KillAura = false

    Anim(Main, {Size = UDim2.new(0, 0, 0, 0), Position = UDim2.new(0.5, 0, 0.5, 0)}, 0.35)
    task.delay(0.4, function()
        pcall(function() Gui:Destroy() end)
    end)
end)

local minimized = false
MinBtn.MouseButton1Click:Connect(function()
    minimized = not minimized
    if minimized then
        Anim(Main, {Size = UDim2.new(0, 680, 0, 48)}, 0.3)
    else
        Anim(Main, {Size = UDim2.new(0, 680, 0, 440)}, 0.3)
    end
end)

-- =============================================
-- DRAGGING
-- =============================================
do
    local dragToggle = false
    local dragStart = Vector2.new(0, 0)
    local startPos = UDim2.new(0, 0, 0, 0)

    TopBar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragToggle = true
            dragStart = input.Position
            startPos = Main.Position

            local moveConn
            local endConn

            moveConn = UIS.InputChanged:Connect(function(moved)
                if moved.UserInputType == Enum.UserInputType.MouseMovement and dragToggle then
                    local delta = moved.Position - dragStart
                    Main.Position = UDim2.new(
                        startPos.X.Scale, startPos.X.Offset + delta.X,
                        startPos.Y.Scale, startPos.Y.Offset + delta.Y
                    )
                end
            end)

            endConn = UIS.InputEnded:Connect(function(ended)
                if ended.UserInputType == Enum.UserInputType.MouseButton1 then
                    dragToggle = false
                    pcall(function() moveConn:Disconnect() end)
                    pcall(function() endConn:Disconnect() end)
                end
            end)
        end
    end)
end

-- =============================================
-- SIDEBAR
-- =============================================
local SidebarHolder = Instance.new("Frame")
SidebarHolder.Name = "SidebarHolder"
SidebarHolder.Size = UDim2.new(0, 155, 1, -48)
SidebarHolder.Position = UDim2.new(0, 0, 0, 48)
SidebarHolder.BackgroundColor3 = C.Side
SidebarHolder.BorderSizePixel = 0
SidebarHolder.Parent = Main

local SideLine = Instance.new("Frame")
SideLine.Size = UDim2.new(0, 1, 1, 0)
SideLine.Position = UDim2.new(1, 0, 0, 0)
SideLine.BackgroundColor3 = C.Line
SideLine.BorderSizePixel = 0
SideLine.Parent = SidebarHolder

local Sidebar = Instance.new("ScrollingFrame")
Sidebar.Name = "Sidebar"
Sidebar.Size = UDim2.new(1, -1, 1, 0)
Sidebar.Position = UDim2.new(0, 0, 0, 0)
Sidebar.BackgroundTransparency = 1
Sidebar.BorderSizePixel = 0
Sidebar.ScrollBarThickness = 0
Sidebar.CanvasSize = UDim2.new(0, 0, 0, 0)
Sidebar.AutomaticCanvasSize = Enum.AutomaticSize.Y
Sidebar.Parent = SidebarHolder

local SideLayout = Instance.new("UIListLayout")
SideLayout.SortOrder = Enum.SortOrder.LayoutOrder
SideLayout.Padding = UDim.new(0, 4)
SideLayout.VerticalAlignment = Enum.VerticalAlignment.Top
SideLayout.Parent = Sidebar

local SidePad = Instance.new("UIPadding")
SidePad.PaddingTop = UDim.new(0, 8)
SidePad.PaddingBottom = UDim.new(0, 8)
SidePad.PaddingLeft = UDim.new(0, 6)
SidePad.PaddingRight = UDim.new(0, 6)
SidePad.Parent = Sidebar
-- =============================================
-- CONTENT AREA
-- =============================================
local Content = Instance.new("Frame")
Content.Name = "Content"
Content.Size = UDim2.new(1, -156, 1, -48)
Content.Position = UDim2.new(0, 156, 0, 48)
Content.BackgroundTransparency = 1
Content.Parent = Main

-- =============================================
-- TAB SYSTEM
-- =============================================
local Pages = {}
local Buttons = {}
local ActiveTab = nil

local TabList = {
    {Name = "🏠 Home",     ID = "Home",     Order = 1},
    {Name = "âš”ī¸ Combat",   ID = "Combat",   Order = 2},
    {Name = "🌍 World",    ID = "World",    Order = 3},
    {Name = "🎭 Player",   ID = "Player",   Order = 4},
    {Name = "🔧 Misc",     ID = "Misc",     Order = 5},
    {Name = "âš™ī¸ Settings", ID = "Settings", Order = 6},
}

local function MakePage(id)
    local page = Instance.new("ScrollingFrame")
    page.Name = id
    page.Size = UDim2.new(1, 0, 1, 0)
    page.BackgroundTransparency = 1
    page.BorderSizePixel = 0
    page.ScrollBarThickness = 4
    page.ScrollBarImageColor3 = C.Scroll
    page.Visible = false
    page.CanvasSize = UDim2.new(0, 0, 0, 0)
    page.AutomaticCanvasSize = Enum.AutomaticSize.Y
    page.Parent = Content

    local layout = Instance.new("UIListLayout")
    layout.SortOrder = Enum.SortOrder.LayoutOrder
    layout.Padding = UDim.new(0, 8)
    layout.Parent = page
    MakePad(page, 10, 10, 12, 12)

    return page
end

local function SwitchTab(id)
    for k, v in pairs(Pages) do
        v.Visible = false
    end
    for k, v in pairs(Buttons) do
        Anim(v, {BackgroundColor3 = C.Btn, BackgroundTransparency = 0.5}, 0.2)
        local txt = v:FindFirstChildWhichIsA("TextLabel")
        if txt then Anim(txt, {TextColor3 = C.TextDim}, 0.2) end
    end

    if Pages[id] then Pages[id].Visible = true end
    if Buttons[id] then
        Anim(Buttons[id], {BackgroundColor3 = C.Accent, BackgroundTransparency = 0.15}, 0.2)
        local txt = Buttons[id]:FindFirstChildWhichIsA("TextLabel")
        if txt then Anim(txt, {TextColor3 = C.Text}, 0.2) end
    end
    ActiveTab = id
end

for _, tab in ipairs(TabList) do
    local btn = Instance.new("TextButton")
    btn.Name = tab.ID
    btn.Size = UDim2.new(1, 0, 0, 34)
    btn.BackgroundColor3 = C.Btn
    btn.BackgroundTransparency = 0.5
    btn.Text = ""
    btn.BorderSizePixel = 0
    btn.LayoutOrder = tab.Order
    btn.Parent = Sidebar
    MakeCorner(btn, 7)

    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(1, -12, 1, 0)
    label.Position = UDim2.new(0, 6, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = tab.Name
    label.TextColor3 = C.TextDim
    label.TextSize = 13
    label.Font = Enum.Font.GothamSemibold
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = btn

    btn.MouseEnter:Connect(function()
        if ActiveTab ~= tab.ID then
            Anim(btn, {BackgroundTransparency = 0.3}, 0.15)
        end
    end)
    btn.MouseLeave:Connect(function()
        if ActiveTab ~= tab.ID then
            Anim(btn, {BackgroundTransparency = 0.5}, 0.15)
        end
    end)
    btn.MouseButton1Click:Connect(function()
        SwitchTab(tab.ID)
    end)

    Buttons[tab.ID] = btn
    Pages[tab.ID] = MakePage(tab.ID)
end

-- =============================================
-- UI ELEMENT BUILDERS
-- =============================================

local function Section(parent, title, order)
    local sec = Instance.new("Frame")
    sec.Size = UDim2.new(1, 0, 0, 0)
    sec.AutomaticSize = Enum.AutomaticSize.Y
    sec.BackgroundColor3 = C.Card
    sec.BorderSizePixel = 0
    sec.LayoutOrder = order or 1
    sec.Parent = parent
    MakeCorner(sec, 8)
    MakeStroke(sec, C.Line)

    local lay = Instance.new("UIListLayout")
    lay.SortOrder = Enum.SortOrder.LayoutOrder
    lay.Padding = UDim.new(0, 5)
    lay.Parent = sec
    MakePad(sec, 10, 10, 12, 12)

    local t = Instance.new("TextLabel")
    t.Size = UDim2.new(1, 0, 0, 22)
    t.BackgroundTransparency = 1
    t.Text = title or "Section"
    t.TextColor3 = C.Accent
    t.TextSize = 14
    t.Font = Enum.Font.GothamBold
    t.TextXAlignment = Enum.TextXAlignment.Left
    t.LayoutOrder = 0
    t.Parent = sec

    local div = Instance.new("Frame")
    div.Size = UDim2.new(1, 0, 0, 1)
    div.BackgroundColor3 = C.Line
    div.BorderSizePixel = 0
    div.LayoutOrder = 1
    div.Parent = sec

    return sec
end

local function Button(parent, text, desc, callback, order)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(1, 0, 0, 36)
    btn.BackgroundColor3 = C.Btn
    btn.Text = ""
    btn.BorderSizePixel = 0
    btn.LayoutOrder = order or 10
    btn.Parent = parent
    btn.ClipsDescendants = true
    MakeCorner(btn, 6)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0.6, 0, 1, 0)
    lbl.Position = UDim2.new(0, 10, 0, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = C.Text
    lbl.TextSize = 13
    lbl.Font = Enum.Font.GothamSemibold
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = btn

    if desc then
        local d = Instance.new("TextLabel")
        d.Size = UDim2.new(0.38, 0, 1, 0)
        d.Position = UDim2.new(0.6, 0, 0, 0)
        d.BackgroundTransparency = 1
        d.Text = desc
        d.TextColor3 = C.TextDark
        d.TextSize = 11
        d.Font = Enum.Font.Gotham
        d.TextXAlignment = Enum.TextXAlignment.Right
        d.Parent = btn
    end

    btn.MouseEnter:Connect(function() Anim(btn, {BackgroundColor3 = C.BtnHover}, 0.15) end)
    btn.MouseLeave:Connect(function() Anim(btn, {BackgroundColor3 = C.Btn}, 0.15) end)
    btn.MouseButton1Click:Connect(function()
        local ripple = Instance.new("Frame")
        ripple.Size = UDim2.new(0, 0, 0, 0)
        ripple.Position = UDim2.new(0.5, 0, 0.5, 0)
        ripple.AnchorPoint = Vector2.new(0.5, 0.5)
        ripple.BackgroundColor3 = Color3.new(1, 1, 1)
        ripple.BackgroundTransparency = 0.75
        ripple.BorderSizePixel = 0
        ripple.Parent = btn
        MakeCorner(ripple, 100)
        Anim(ripple, {Size = UDim2.new(2, 0, 2, 0), BackgroundTransparency = 1}, 0.4)
        task.delay(0.45, function() pcall(function() ripple:Destroy() end) end)
        if callback then callback() end
    end)

    return btn
end

local function Toggle(parent, text, default, callback, order)
    local frame = Instance.new("Frame")
    frame.Size = UDim2.new(1, 0, 0, 38)
    frame.BackgroundColor3 = C.Btn
    frame.BorderSizePixel = 0
    frame.LayoutOrder = order or 10
    frame.Parent = parent
    MakeCorner(frame, 6)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -60, 1, 0)
    lbl.Position = UDim2.new(0, 10, 0, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = C.Text
    lbl.TextSize = 13
    lbl.Font = Enum.Font.GothamSemibold
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = frame

    local toggled = default or false

    local bg = Instance.new("Frame")
    bg.Size = UDim2.new(0, 42, 0, 22)
    bg.Position = UDim2.new(1, -52, 0.5, -11)
    bg.BackgroundColor3 = toggled and C.Accent or Color3.fromRGB(55, 55, 75)
    bg.BorderSizePixel = 0
    bg.Parent = frame
    MakeCorner(bg, 11)

    local circle = Instance.new("Frame")
    circle.Size = UDim2.new(0, 16, 0, 16)
    circle.Position = toggled and UDim2.new(1, -19, 0.5, -8) or UDim2.new(0, 3, 0.5, -8)
    circle.BackgroundColor3 = Color3.new(1, 1, 1)
    circle.BorderSizePixel = 0
    circle.Parent = bg
    MakeCorner(circle, 8)

    local clickBtn = Instance.new("TextButton")
    clickBtn.Size = UDim2.new(1, 0, 1, 0)
    clickBtn.BackgroundTransparency = 1
    clickBtn.Text = ""
    clickBtn.Parent = frame

    clickBtn.MouseButton1Click:Connect(function()
        toggled = not toggled
        Anim(bg, {BackgroundColor3 = toggled and C.Accent or Color3.fromRGB(55, 55, 75)}, 0.2)
        Anim(circle, {Position = toggled and UDim2.new(1, -19, 0.5, -8) or UDim2.new(0, 3, 0.5, -8)}, 0.2)
        if callback then callback(toggled) end
    end)

    return frame
end

local function Slider(parent, text, min, max, default, callback, order)
    local frame = Instance.new("Frame")
    frame.Size = UDim2.new(1, 0, 0, 52)
    frame.BackgroundColor3 = C.Btn
    frame.BorderSizePixel = 0
    frame.LayoutOrder = order or 10
    frame.Parent = parent
    MakeCorner(frame, 6)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, -55, 0, 22)
    lbl.Position = UDim2.new(0, 10, 0, 4)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = C.Text
    lbl.TextSize = 13
    lbl.Font = Enum.Font.GothamSemibold
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = frame

    local val = Instance.new("TextLabel")
    val.Size = UDim2.new(0, 45, 0, 22)
    val.Position = UDim2.new(1, -55, 0, 4)
    val.BackgroundTransparency = 1
    val.Text = tostring(default or min)
    val.TextColor3 = C.Accent
    val.TextSize = 13
    val.Font = Enum.Font.GothamBold
    val.TextXAlignment = Enum.TextXAlignment.Right
    val.Parent = frame

    local track = Instance.new("Frame")
    track.Size = UDim2.new(1, -24, 0, 5)
    track.Position = UDim2.new(0, 12, 0, 36)
    track.BackgroundColor3 = Color3.fromRGB(45, 45, 60)
    track.BorderSizePixel = 0
    track.Parent = frame
    MakeCorner(track, 3)

    local pct = math.clamp(((default or min) - min) / (max - min), 0, 1)
    local fill = Instance.new("Frame")
    fill.Size = UDim2.new(pct, 0, 1, 0)
    fill.BackgroundColor3 = C.Accent
    fill.BorderSizePixel = 0
    fill.Parent = track
    MakeCorner(fill, 3)

    local hitbox = Instance.new("TextButton")
    hitbox.Size = UDim2.new(1, 0, 0, 22)
    hitbox.Position = UDim2.new(0, 0, 0, 28)
    hitbox.BackgroundTransparency = 1
    hitbox.Text = ""
    hitbox.Parent = frame

    local sliding = false

    hitbox.MouseButton1Down:Connect(function() sliding = true end)
    UIS.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then sliding = false end
    end)
    UIS.InputChanged:Connect(function(input)
        if sliding and input.UserInputType == Enum.UserInputType.MouseMovement then
            local p = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
            local v = math.floor(min + (max - min) * p)
            fill.Size = UDim2.new(p, 0, 1, 0)
            val.Text = tostring(v)
            if callback then callback(v) end
        end
    end)

    return frame
end

local function Textbox(parent, text, placeholder, callback, order)
    local frame = Instance.new("Frame")
    frame.Size = UDim2.new(1, 0, 0, 38)
    frame.BackgroundColor3 = C.Btn
    frame.BorderSizePixel = 0
    frame.LayoutOrder = order or 10
    frame.Parent = parent
    MakeCorner(frame, 6)

    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(0.4, 0, 1, 0)
    lbl.Position = UDim2.new(0, 10, 0, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = C.Text
    lbl.TextSize = 13
    lbl.Font = Enum.Font.GothamSemibold
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.Parent = frame

    local box = Instance.new("TextBox")
    box.Size = UDim2.new(0.55, -10, 0, 26)
    box.Position = UDim2.new(0.45, 0, 0.5, -13)
    box.BackgroundColor3 = C.BG
    box.Text = ""
    box.PlaceholderText = placeholder or "Type here..."
    box.PlaceholderColor3 = C.TextDark
    box.TextColor3 = C.Text
    box.TextSize = 12
    box.Font = Enum.Font.Gotham
    box.BorderSizePixel = 0
    box.ClearTextOnFocus = false
    box.Parent = frame
    MakeCorner(box, 5)
    MakePad(box, 0, 0, 6, 6)

    box.FocusLost:Connect(function(enter)
        if enter and callback then callback(box.Text) end
    end)

    return box
end

local function Label(parent, text, order)
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, 0, 0, 18)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = C.TextDim
    lbl.TextSize = 12
    lbl.Font = Enum.Font.Gotham
    lbl.TextXAlignment = Enum.TextXAlignment.Left
    lbl.TextWrapped = true
    lbl.AutomaticSize = Enum.AutomaticSize.Y
    lbl.LayoutOrder = order or 10
    lbl.Parent = parent
    return lbl
end

-- =============================================
-- HOME TAB
-- =============================================
do
    local s1 = Section(Pages.Home, "đŸģ Welcome to Cub's Hub", 1)
    Label(s1, "Your all-in-one universal Roblox script hub!", 2)
    Label(s1, "Browse the tabs on the left to find tools and scripts.", 3)
    Label(s1, "Press Right Shift to toggle the UI on/off.", 4)

    local s2 = Section(Pages.Home, "📊 Session Info", 2)
    local gameName = "Unknown"
    pcall(function()
        gameName = game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId).Name
    end)
    Label(s2, "Game: " .. gameName, 2)
    Label(s2, "Place ID: " .. tostring(game.PlaceId), 3)
    Label(s2, "Player: " .. LP.Name .. " (ID: " .. LP.UserId .. ")", 4)
    Label(s2, "Server: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers .. " players", 5)

    local s3 = Section(Pages.Home, "💎 Credits", 3)
    Label(s3, "Developer: Cub", 2)
    Label(s3, "Version: 2.1 | Optimized for Solara", 3)
    Label(s3, "Thank you for using Cub's Hub! đŸģâ¤ī¸", 4)
end

-- =============================================
-- COMBAT TAB
-- =============================================
do
    local s1 = Section(Pages.Combat, "âš”ī¸ Combat Tools", 1)

    Toggle(s1, "Hit Expansion", false, function(state)
        Notify("Combat", "Hit Expansion " .. (state and "ON" or "OFF"), state and "success" or "warning")
        for _, p in pairs(Players:GetPlayers()) do
            if p ~= LP and p.Character then
                local hrp = p.Character:FindFirstChild("HumanoidRootPart")
                if hrp then
                    hrp.Size = state and Vector3.new(15, 15, 15) or Vector3.new(2, 2, 1)
                    hrp.Transparency = state and 0.6 or 1
                end
            end
        end
    end, 2)

    Toggle(s1, "Auto Parry", false, function(state)
        getgenv().AutoParry = state
        Notify("Combat", "Auto Parry " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 3)

    Toggle(s1, "Kill Aura", false, function(state)
        getgenv().KillAura = state
        Notify("Combat", "Kill Aura " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                while getgenv().KillAura and task.wait(0.1) do
                    pcall(function()
                        local char = LP.Character
                        if not char or not char:FindFirstChild("HumanoidRootPart") then return end
                        for _, p in pairs(Players:GetPlayers()) do
                            if p ~= LP and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                                local dist = (char.HumanoidRootPart.Position - p.Character.HumanoidRootPart.Position).Magnitude
                                if dist < (getgenv().AttackRange or 15) then
                                    -- game specific attack logic
                                end
                            end
                        end
                    end)
                end
            end)
        end
    end, 4)

    Slider(s1, "Attack Range", 5, 50, 15, function(v)
        getgenv().AttackRange = v
    end, 5)

    Slider(s1, "Attack Speed", 1, 10, 5, function(v)
        getgenv().AttackSpeed = v
    end, 6)
end

-- =============================================
-- WORLD TAB
-- =============================================
do
    local s1 = Section(Pages.World, "🌍 World Scripts", 1)

    Button(s1, "ESP - All Players", "Highlight everyone", function()
        for _, p in pairs(Players:GetPlayers()) do
            if p ~= LP and p.Character then
                pcall(function()
                    local old = p.Character:FindFirstChild("CubESP")
                    if old then old:Destroy() end
                    local h = Instance.new("Highlight")
                    h.Name = "CubESP"
                    h.FillColor = C.Accent
                    h.FillTransparency = 0.5
                    h.OutlineColor = Color3.new(1, 1, 1)
                    h.Parent = p.Character
                end)
            end
        end
        Notify("World", "ESP enabled!", "success")
    end, 2)

    Button(s1, "Remove ESP", "Remove highlights", function()
        for _, p in pairs(Players:GetPlayers()) do
            pcall(function()
                if p.Character then
                    local h = p.Character:FindFirstChild("CubESP")
                    if h then h:Destroy() end
                end
            end)
        end
        Notify("World", "ESP removed!", "warning")
    end, 3)

    Toggle(s1, "Fullbright", false, function(state)
        if state then
            Lighting.Brightness = 2
            Lighting.ClockTime = 14
            Lighting.FogEnd = 100000
            Lighting.GlobalShadows = false
        else
            Lighting.Brightness = 1
            Lighting.ClockTime = 14
            Lighting.FogEnd = 1000
            Lighting.GlobalShadows = true
        end
        Notify("World", "Fullbright " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 4)

    Toggle(s1, "No Fog", false, function(state)
        Lighting.FogEnd = state and 999999 or 1000
        Lighting.FogStart = state and 999999 or 0
        Notify("World", "No Fog " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 5)

    local s2 = Section(Pages.World, "🔮 Teleportation", 2)

    Textbox(s2, "Teleport To", "Player name...", function(txt)
        for _, p in pairs(Players:GetPlayers()) do
            if string.lower(p.Name):find(string.lower(txt)) then
                pcall(function()
                    LP.Character.HumanoidRootPart.CFrame = p.Character.HumanoidRootPart.CFrame * CFrame.new(0, 0, 3)
                end)
                Notify("Teleport", "Teleported to " .. p.Name, "success")
                return
            end
        end
        Notify("Teleport", "Player not found!", "error")
    end, 2)

    Button(s2, "Infinite Yield", "Load IY admin", function()
        Notify("World", "Loading Infinite Yield...", "warning")
        pcall(function()
            loadstring(game:HttpGet("https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source"))()
        end)
    end, 3)
end

-- =============================================
-- PLAYER TAB (FULL MODIFIERS)
-- =============================================
do
    -- MOVEMENT
    local s1 = Section(Pages.Player, "🏃 Movement", 1)

    Slider(s1, "Walk Speed", 16, 500, 16, function(v)
        pcall(function() LP.Character.Humanoid.WalkSpeed = v end)
    end, 2)

    Slider(s1, "Jump Power", 50, 500, 50, function(v)
        pcall(function() LP.Character.Humanoid.JumpPower = v end)
    end, 3)

    Toggle(s1, "Infinite Jump", false, function(state)
        getgenv().InfJump = state
        Notify("Player", "Infinite Jump " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 4)

    UIS.JumpRequest:Connect(function()
        if getgenv().InfJump then
            pcall(function()
                LP.Character.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
            end)
        end
    end)

    Toggle(s1, "Noclip", false, function(state)
        getgenv().Noclip = state
        Notify("Player", "Noclip " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 5)

    RunService.Stepped:Connect(function()
        if getgenv().Noclip and LP.Character then
            pcall(function()
                for _, part in pairs(LP.Character:GetDescendants()) do
                    if part:IsA("BasePart") then
                        part.CanCollide = false
                    end
                end
            end)
        end
    end)

    Toggle(s1, "Fly", false, function(state)
        getgenv().Flying = state
        Notify("Player", "Fly " .. (state and "ON" or "OFF"), state and "success" or "warning")

        if state then
            task.spawn(function()
                local char = LP.Character
                if not char then return end
                local hrp = char:FindFirstChild("HumanoidRootPart")
                local hum = char:FindFirstChildOfClass("Humanoid")
                if not hrp or not hum then return end

                local bv = Instance.new("BodyVelocity")
                bv.Name = "CubFly"
                bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
                bv.Velocity = Vector3.new(0, 0, 0)
                bv.Parent = hrp

                local bg = Instance.new("BodyGyro")
                bg.Name = "CubGyro"
                bg.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
                bg.D = 200
                bg.P = 10000
                bg.Parent = hrp

                while getgenv().Flying and char and char.Parent do
                    local speed = getgenv().FlySpeed or 80
                    local cam = workspace.CurrentCamera
                    local dir = Vector3.new(0, 0, 0)

                    if UIS:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end
                    if UIS:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end
                    if UIS:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end
                    if UIS:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end
                    if UIS:IsKeyDown(Enum.KeyCode.Space) then dir = dir + Vector3.new(0, 1, 0) end
                    if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then dir = dir - Vector3.new(0, 1, 0) end

                    if dir.Magnitude > 0 then dir = dir.Unit * speed end

                    bv.Velocity = dir
                    bg.CFrame = cam.CFrame
                    hum.PlatformStand = true
                    RunService.Heartbeat:Wait()
                end

                pcall(function()
                    hum.PlatformStand = false
                    if hrp:FindFirstChild("CubFly") then hrp.CubFly:Destroy() end
                    if hrp:FindFirstChild("CubGyro") then hrp.CubGyro:Destroy() end
                end)
            end)
        else
            pcall(function()
                local hrp = LP.Character:FindFirstChild("HumanoidRootPart")
                if hrp then
                    if hrp:FindFirstChild("CubFly") then hrp.CubFly:Destroy() end
                    if hrp:FindFirstChild("CubGyro") then hrp.CubGyro:Destroy() end
                end
                LP.Character:FindFirstChildOfClass("Humanoid").PlatformStand = false
            end)
        end
    end, 6)

    Slider(s1, "Fly Speed", 20, 500, 80, function(v)
        getgenv().FlySpeed = v
    end, 7)

    Toggle(s1, "Anti Fall Damage", false, function(state)
        getgenv().AntiFall = state
        Notify("Player", "Anti Fall Damage " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                while getgenv().AntiFall and task.wait(0.1) do
                    pcall(function()
                        local hum = LP.Character:FindFirstChildOfClass("Humanoid")
                        if hum then
                            hum:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
                            hum:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
                        end
                    end)
                end
            end)
        end
    end, 8)

    -- HEALTH & STATS
    local s2 = Section(Pages.Player, "â¤ī¸ Health & Stats", 2)

    Toggle(s2, "God Mode (Client)", false, function(state)
        getgenv().GodMode = state
        Notify("Player", "God Mode " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                while getgenv().GodMode and task.wait(0.1) do
                    pcall(function()
                        local hum = LP.Character:FindFirstChildOfClass("Humanoid")
                        if hum then
                            hum.MaxHealth = math.huge
                            hum.Health = math.huge
                        end
                    end)
                end
            end)
        else
            pcall(function()
                LP.Character:FindFirstChildOfClass("Humanoid").MaxHealth = 100
                LP.Character:FindFirstChildOfClass("Humanoid").Health = 100
            end)
        end
    end, 2)

    Toggle(s2, "Auto Heal", false, function(state)
        getgenv().AutoHeal = state
        Notify("Player", "Auto Heal " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                while getgenv().AutoHeal and task.wait(0.5) do
                    pcall(function()
                        local hum = LP.Character:FindFirstChildOfClass("Humanoid")
                        if hum and hum.Health < hum.MaxHealth then
                            hum.Health = hum.MaxHealth
                        end
                    end)
                end
            end)
        end
    end, 3)

    Slider(s2, "Set Max Health", 100, 10000, 100, function(v)
        pcall(function()
            local hum = LP.Character:FindFirstChildOfClass("Humanoid")
            hum.MaxHealth = v
            hum.Health = v
        end)
    end, 4)

    Toggle(s2, "No Ragdoll", false, function(state)
        getgenv().NoRagdoll = state
        Notify("Player", "No Ragdoll " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                while getgenv().NoRagdoll and task.wait(0.1) do
                    pcall(function()
                        local hum = LP.Character:FindFirstChildOfClass("Humanoid")
                        if hum then
                            hum:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
                            hum:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
                        end
                    end)
                end
            end)
        end
    end, 5)

    -- SIZE & SCALE
    local s3 = Section(Pages.Player, "📏 Size & Scale", 3)

    Slider(s3, "Head Size", 1, 10, 1, function(v)
        pcall(function()
            local head = LP.Character:FindFirstChild("Head")
            if head then
                head.Size = Vector3.new(v, v, v)
                local mesh = head:FindFirstChildOfClass("SpecialMesh")
                if mesh then mesh.Scale = Vector3.new(v * 0.8, v * 0.8, v * 0.8) end
            end
        end)
    end, 2)

    Slider(s3, "Hip Height", 0, 50, 2, function(v)
        pcall(function()
            LP.Character:FindFirstChildOfClass("Humanoid").HipHeight = v
        end)
    end, 3)

    Button(s3, "Long Arms", "Stretch arms", function()
        pcall(function()
            local char = LP.Character
            local la = char:FindFirstChild("Left Arm") or char:FindFirstChild("LeftUpperArm")
            local ra = char:FindFirstChild("Right Arm") or char:FindFirstChild("RightUpperArm")
            if la then la.Size = Vector3.new(1, 4, 1) end
            if ra then ra.Size = Vector3.new(1, 4, 1) end
        end)
        Notify("Player", "Long arms applied!", "success")
    end, 4)

    Button(s3, "Long Legs", "Stretch legs", function()
        pcall(function()
            local char = LP.Character
            local ll = char:FindFirstChild("Left Leg") or char:FindFirstChild("LeftUpperLeg")
            local rl = char:FindFirstChild("Right Leg") or char:FindFirstChild("RightUpperLeg")
            if ll then ll.Size = Vector3.new(1, 4, 1) end
            if rl then rl.Size = Vector3.new(1, 4, 1) end
        end)
        Notify("Player", "Long legs applied!", "success")
    end, 5)

    Button(s3, "Reset Size", "Normal size", function()
        pcall(function()
            LP.Character:FindFirstChildOfClass("Humanoid").HipHeight = 2
            local head = LP.Character:FindFirstChild("Head")
            if head then head.Size = Vector3.new(2, 1, 1) end
            local la = LP.Character:FindFirstChild("Left Arm") or LP.Character:FindFirstChild("LeftUpperArm")
            local ra = LP.Character:FindFirstChild("Right Arm") or LP.Character:FindFirstChild("RightUpperArm")
            local ll = LP.Character:FindFirstChild("Left Leg") or LP.Character:FindFirstChild("LeftUpperLeg")
            local rl = LP.Character:FindFirstChild("Right Leg") or LP.Character:FindFirstChild("RightUpperLeg")
            if la then la.Size = Vector3.new(1, 2, 1) end
            if ra then ra.Size = Vector3.new(1, 2, 1) end
            if ll then ll.Size = Vector3.new(1, 2, 1) end
            if rl then rl.Size = Vector3.new(1, 2, 1) end
        end)
        Notify("Player", "Size reset!", "success")
    end, 6)

    -- APPEARANCE
    local s4 = Section(Pages.Player, "🎨 Appearance", 4)

    Button(s4, "Invisible (Client)", "Hide yourself", function()
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") then p.Transparency = 1
                elseif p:IsA("Decal") then p.Transparency = 1 end
            end
        end)
        Notify("Player", "Invisible!", "success")
    end, 2)

    Button(s4, "Visible", "Show yourself", function()
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 0
                elseif p:IsA("Decal") then p.Transparency = 0 end
            end
        end)
        Notify("Player", "Visible!", "success")
    end, 3)

    Button(s4, "Glass Body", "Semi transparent", function()
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then
                    p.Transparency = 0.6
                    p.Material = Enum.Material.Glass
                    p.Reflectance = 0.3
                end
            end
        end)
        Notify("Player", "Glass body!", "success")
    end, 4)

    Button(s4, "Neon Body", "Glow effect", function()
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then
                    p.Material = Enum.Material.Neon
                    p.Color = C.Accent
                end
            end
        end)
        Notify("Player", "Neon body!", "success")
    end, 5)

    Button(s4, "Forcefield Body", "Force field look", function()
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then
                    p.Material = Enum.Material.ForceField
                end
            end
        end)
        Notify("Player", "Forcefield body!", "success")
    end, 6)

    Button(s4, "Rainbow Body", "Cycling colors", function()
        getgenv().RainbowBody = true
        Notify("Player", "Rainbow ON! Click Stop Rainbow to stop", "success")
        task.spawn(function()
            local hue = 0
            while getgenv().RainbowBody and task.wait(0.05) do
                pcall(function()
                    hue = (hue + 0.01) % 1
                    local color = Color3.fromHSV(hue, 1, 1)
                    for _, p in pairs(LP.Character:GetDescendants()) do
                        if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then
                            p.Color = color
                        end
                    end
                end)
            end
        end)
    end, 7)

    Button(s4, "Stop Rainbow", "Stop effect", function()
        getgenv().RainbowBody = false
        Notify("Player", "Rainbow stopped!", "warning")
    end, 8)

    Button(s4, "Reset Appearance", "Back to normal", function()
        getgenv().RainbowBody = false
        pcall(function()
            for _, p in pairs(LP.Character:GetDescendants()) do
                if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then
                    p.Transparency = 0
                    p.Material = Enum.Material.SmoothPlastic
                    p.Reflectance = 0
                end
            end
        end)
        Notify("Player", "Appearance reset!", "success")
    end, 9)

    -- CAMERA
    local s5 = Section(Pages.Player, "📷 Camera", 5)

    Slider(s5, "FOV", 30, 120, 70, function(v)
        pcall(function() workspace.CurrentCamera.FieldOfView = v end)
    end, 2)

    Slider(s5, "Zoom Distance", 0, 200, 50, function(v)
        pcall(function() LP.CameraMaxZoomDistance = v end)
    end, 3)

    Toggle(s5, "First Person Lock", false, function(state)
        pcall(function()
            if state then
                LP.CameraMaxZoomDistance = 0.5
                LP.CameraMinZoomDistance = 0.5
            else
                LP.CameraMaxZoomDistance = 128
                LP.CameraMinZoomDistance = 0.5
            end
        end)
        Notify("Player", "First Person " .. (state and "ON" or "OFF"), state and "success" or "warning")
    end, 4)

    Toggle(s5, "Freecam", false, function(state)
        getgenv().Freecam = state
        Notify("Player", "Freecam " .. (state and "ON" or "OFF"), state and "success" or "warning")
        if state then
            task.spawn(function()
                local cam = workspace.CurrentCamera
                cam.CameraType = Enum.CameraType.Scriptable
                while getgenv().Freecam and task.wait() do
                    pcall(function()
                        local moveDir = Vector3.new(0, 0, 0)
                        local speed = 1
                        if UIS:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + cam.CFrame.LookVector end
                        if UIS:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - cam.CFrame.LookVector end
                        if UIS:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - cam.CFrame.RightVector end
                        if UIS:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + cam.CFrame.RightVector end
                        if UIS:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + Vector3.new(0, 1, 0) end
                        if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir = moveDir - Vector3.new(0, 1, 0) end
                        if UIS:IsKeyDown(Enum.KeyCode.LeftControl) then speed = 3 end
                        cam.CFrame = cam.CFrame + moveDir * speed
                    end)
                end
                pcall(function()
                    cam.CameraType = Enum.CameraType.Custom
                    cam.CameraSubject = LP.Character:FindFirstChildOfClass("Humanoid")
                end)
            end)
        else
            pcall(function()
                workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
                workspace.CurrentCamera.CameraSubject = LP.Character:FindFirstChildOfClass("Humanoid")
            end)
        end
    end, 5)

    -- POSITION & SPAWN
    local s6 = Section(Pages.Player, "📍 Position & Spawn", 6)

    Button(s6, "Save Position", "Save current spot", function()
        pcall(function()
            getgenv().SavedPos = LP.Character.HumanoidRootPart.CFrame
        end)
        Notify("Player", "Position saved!", "success")
    end, 2)

    Button(s6, "Load Position", "Go to saved spot", function()
        if getgenv().SavedPos then
            pcall(function()
                LP.Character.HumanoidRootPart.CFrame = getgenv().SavedPos
            end)
            Notify("Player", "Teleported to saved position!", "success")
        else
            Notify("Player", "No position saved!", "error")
        end
    end, 3)

    Button(s6, "Go To Sky", "Teleport up high", function()
        pcall(function()
            LP.Character.HumanoidRootPart.CFrame = LP.Character.HumanoidRootPart.CFrame + Vector3.new(0, 1000, 0)
        end)
        Notify("Player", "Sent to sky!", "success")
    end, 4)

    Button(s6, "Go To Ground", "Teleport to origin", function()
        pcall(function()
            LP.Character.HumanoidRootPart.CFrame = CFrame.new(0, 50, 0)
        end)
        Notify("Player", "Teleported to ground!", "success")
    end, 5)

    Textbox(s6, "TP to Coords", "X, Y, Z", function(txt)
        pcall(function()
            local coords = {}
            for num in string.gmatch(txt, "%-?%d+%.?%d*") do
                table.insert(coords, tonumber(num))
            end
            if #coords >= 3 then
                LP.Character.HumanoidRootPart.CFrame = CFrame.new(coords[1], coords[2], coords[3])
                Notify("Player", "Teleported to " .. txt, "success")
            else
                Notify("Player", "Use format: X, Y, Z", "error")
            end
        end)
    end, 6)

    -- ACTIONS
    local s7 = Section(Pages.Player, "đŸŽŦ Actions", 7)

    Button(s7, "Spin Character", "Start spinning", function()
        getgenv().Spinning = true
        Notify("Player", "Spinning!", "success")
        task.spawn(function()
            pcall(function()
                local hrp = LP.Character:FindFirstChild("HumanoidRootPart")
                local av = Instance.new("BodyAngularVelocity")
                av.Name = "CubSpin"
                av.AngularVelocity = Vector3.new(0, 30, 0)
                av.MaxTorque = Vector3.new(0, math.huge, 0)
                av.Parent = hrp
                while getgenv().Spinning and task.wait(0.1) do end
                if hrp:FindFirstChild("CubSpin") then hrp.CubSpin:Destroy() end
            end)
        end)
    end, 2)

    Button(s7, "Stop Spin", "Stop spinning", function()
        getgenv().Spinning = false
        pcall(function()
            local hrp = LP.Character:FindFirstChild("HumanoidRootPart")
            if hrp and hrp:FindFirstChild("CubSpin") then hrp.CubSpin:Destroy() end
        end)
        Notify("Player", "Stopped!", "warning")
    end, 3)

    Button(s7, "Sit", "Force sit", function()
        pcall(function() LP.Character:FindFirstChildOfClass("Humanoid").Sit = true end)
        Notify("Player", "Sitting!", "success")
    end, 4)

    Button(s7, "Super Jump", "Jump really high", function()
        pcall(function()
            LP.Character.HumanoidRootPart.Velocity = Vector3.new(0, 200, 0)
        end)
        Notify("Player", "Super jump!", "success")
    end, 5)

    Button(s7, "Fling Self", "Launch yourself", function()
        pcall(function()
            local hrp = LP.Character.HumanoidRootPart
            hrp.Velocity = Vector3.new(math.random(-300, 300), 300, math.random(-300, 300))
        end)
        Notify("Player", "Flung!", "warning")
    end, 6)

    Button(s7, "Reset Character", "Respawn", function()
        pcall(function()
            LP.Character:FindFirstChildOfClass("Humanoid").Health = 0
        end)
        Notify("Player", "Reset!", "warning")
    end, 7)
end

-- =============================================
-- MISC TAB
-- =============================================
do
    local s1 = Section(Pages.Misc, "🔧 Miscellaneous", 1)

    Button(s1, "Anti AFK", "Prevent idle kick", function()
        pcall(function()
            local vu = game:GetService("VirtualUser")
            LP.Idled:Connect(function()
                vu:CaptureController()
                vu:ClickButton2(Vector2.new())
            end)
        end)
        Notify("Misc", "Anti-AFK enabled!", "success")
    end, 2)

    Button(s1, "Rejoin Server", "Rejoin this server", function()
        Notify("Misc", "Rejoining...", "warning")
        task.delay(1, function()
            pcall(function()
                game:GetService("TeleportService"):Teleport(game.PlaceId, LP)
            end)
        end)
    end, 3)

    Button(s1, "Server Hop", "Join different server", function()
        Notify("Misc", "Finding server...", "warning")
        pcall(function()
            local url = "https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100"
            local data = HttpService:JSONDecode(game:HttpGet(url))
            for _, s in pairs(data.data) do
                if s.playing < s.maxPlayers and s.id ~= game.JobId then
                    game:GetService("TeleportService"):TeleportToPlaceInstance(game.PlaceId, s.id, LP)
                    break
                end
            end
        end)
    end, 4)

    Button(s1, "Copy Game Link", "Copy place URL", function()
        pcall(function()
            if setclipboard then
                setclipboard("https://www.roblox.com/games/" .. game.PlaceId)
                Notify("Misc", "Link copied!", "success")
            else
                Notify("Misc", "Not supported!", "error")
            end
        end)
    end, 5)

    Toggle(s1, "FPS Unlocker", false, function(state)
        pcall(function()
            if setfpscap then
                setfpscap(state and 9999 or 60)
                Notify("Misc", "FPS " .. (state and "Uncapped" or "Capped"), state and "success" or "warning")
            else
                Notify("Misc", "Not supported!", "error")
            end
        end)
    end, 6)

    local s2 = Section(Pages.Misc, "📜 Script Executor", 2)

    local execBox = Instance.new("TextBox")
    execBox.Size = UDim2.new(1, 0, 0, 100)
    execBox.BackgroundColor3 = C.BG
    execBox.Text = ""
    execBox.PlaceholderText = "-- Paste your script here..."
    execBox.PlaceholderColor3 = C.TextDark
    execBox.TextColor3 = C.Text
    execBox.TextSize = 12
    execBox.Font = Enum.Font.Code
    execBox.TextXAlignment = Enum.TextXAlignment.Left
    execBox.TextYAlignment = Enum.TextYAlignment.Top
    execBox.ClearTextOnFocus = false
    execBox.MultiLine = true
    execBox.TextWrapped = true
    execBox.BorderSizePixel = 0
    execBox.LayoutOrder = 2
    execBox.Parent = s2
    MakeCorner(execBox, 6)
    MakePad(execBox, 8, 8, 8, 8)
    MakeStroke(execBox, C.Line)

    Button(s2, "â–ļ Execute", "Run script", function()
        if execBox.Text == "" then
            Notify("Executor", "Nothing to execute!", "warning")
            return
        end
        local ok, err = pcall(function()
            loadstring(execBox.Text)()
        end)
        if ok then
            Notify("Executor", "Executed!", "success")
        else
            Notify("Executor", "Error: " .. tostring(err), "error")
        end
    end, 3)

    Button(s2, "đŸ—‘ī¸ Clear", "Clear box", function()
        execBox.Text = ""
        Notify("Executor", "Cleared!", "success")
    end, 4)
end

-- =============================================
-- SETTINGS TAB
-- =============================================
do
    local s1 = Section(Pages.Settings, "âš™ī¸ UI Settings", 1)

    Toggle(s1, "Keybind (Right Shift)", true, function(state)
        getgenv().CubKeybind = state
    end, 2)

    Toggle(s1, "Notifications", true, function(state)
        getgenv().CubNotifs = state
    end, 3)

    local s2 = Section(Pages.Settings, "â„šī¸ Hub Information", 2)
    Label(s2, "Name: Cub's Hub", 2)
    Label(s2, "Version: 2.1", 3)
    Label(s2, "Author: Cub", 4)
    Label(s2, "Executor: Solara", 5)
    Label(s2, "Status: Active ✅", 6)

    Button(s2, "đŸ—‘ī¸ Destroy Hub", "Remove completely", function()
        Notify("Goodbye!", "Cub's Hub destroyed! đŸģ", "warning")
        getgenv().InfJump = false
        getgenv().Noclip = false
        getgenv().Flying = false
        getgenv().GodMode = false
        getgenv().AutoHeal = false
        getgenv().RainbowBody = false
        getgenv().Freecam = false
        getgenv().Spinning = false
        getgenv().KillAura = false
        task.delay(2, function()
            pcall(function() Gui:Destroy() end)
        end)
    end, 7)
end

-- =============================================
-- KEYBIND (Right Shift)
-- =============================================
UIS.InputBegan:Connect(function(input, gp)
    if gp then return end
    if input.KeyCode == Enum.KeyCode.RightShift and getgenv().CubKeybind then
        Gui.Enabled = not Gui.Enabled
    end
end)

-- =============================================
-- STARTUP ANIMATION
-- =============================================
Main.Size = UDim2.new(0, 0, 0, 0)
Main.Position = UDim2.new(0.5, 0, 0.5, 0)
task.wait(0.2)
Anim(Main, {
    Size = UDim2.new(0, 680, 0, 440),
    Position = UDim2.new(0.5, -340, 0.5, -220)
}, 0.45)

SwitchTab("Home")

task.delay(0.8, function()
    Notify("Cub's Hub", "Welcome, " .. LP.Name .. "!", "success")
end)
task.delay(2, function()
    Notify("Tip", "Press Right Shift to toggle the hub", "info")
end)

print("đŸģ Cub's Hub v2.1 | Loaded | Solara")

Features & Information

universal and made with arena.ai because i am lazy

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts