Retinol S Hub | Keyless
Key RequiredUniversal

Retinol S Hub | Keyless

Universal ScriptEddieScriptsEddieScripts 2K views 8.4K executesUpdated Sep 30, 2026
Unrated
00
Lua Script•974 lines (37568 chars)
local Retinol = {}
Retinol.__index = Retinol

local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local Teams = game:GetService("Teams")
local VirtualUser = game:GetService("VirtualUser")
local LocalPlayer = Players.LocalPlayer

local function getParent()
    if gethui then return gethui() end
    if syn and syn.protect_gui then
        local sg = Instance.new("ScreenGui")
        syn.protect_gui(sg)
        sg.Parent = game:GetService("CoreGui")
        return sg
    end
    local ok = pcall(function()
        local t = Instance.new("ScreenGui")
        t.Parent = game:GetService("CoreGui")
        t:Destroy()
    end)
    if ok then return game:GetService("CoreGui") end
    return LocalPlayer:WaitForChild("PlayerGui")
end

local CONFIG = {
    Accent = Color3.fromRGB(220, 40, 90),
    Accent2 = Color3.fromRGB(255, 120, 160),
    BG = Color3.fromRGB(12, 10, 16),
    Panel = Color3.fromRGB(20, 16, 26),
    Panel2 = Color3.fromRGB(28, 22, 36),
    Border = Color3.fromRGB(60, 40, 80),
    Text = Color3.fromRGB(240, 230, 250),
    Dim = Color3.fromRGB(150, 130, 170),
    Font = Enum.Font.Gotham,
    FontBold = Enum.Font.GothamBold,
}

local function new(class, props, parent)
    local inst = Instance.new(class)
    for k, v in pairs(props or {}) do inst[k] = v end
    if parent then inst.Parent = parent end
    return inst
end

local function corner(obj, r)
    local c = Instance.new("UICorner")
    c.CornerRadius = UDim.new(0, r or 8)
    c.Parent = obj
    return c
end

local function stroke(obj, color, thickness, transparency)
    local s = Instance.new("UIStroke")
    s.Color = color or CONFIG.Border
    s.Thickness = thickness or 1
    s.Transparency = transparency or 0
    s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
    s.Parent = obj
    return s
end

local function gradient(obj, c1, c2, rot)
    local g = Instance.new("UIGradient")
    g.Color = ColorSequence.new(c1, c2)
    g.Rotation = rot or 0
    g.Parent = obj
    return g
end

local ScreenGui = new("ScreenGui", {
    Name = "RetinolSHub",
    ResetOnSpawn = false,
    ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
    DisplayOrder = 9999,
    IgnoreGuiInset = true,
}, getParent())

local MainFrame = new("Frame", {
    Name = "Main",
    Size = UDim2.new(0, 620, 0, 480),
    Position = UDim2.new(0.5, -310, 0.5, -240),
    BackgroundColor3 = CONFIG.BG,
    BorderSizePixel = 0,
    ClipsDescendants = true,
    Visible = false,
    Active = true,
}, ScreenGui)
corner(MainFrame, 14)
stroke(MainFrame, CONFIG.Accent, 1.5, 0.2)
gradient(MainFrame, CONFIG.BG, Color3.fromRGB(8, 6, 12), 90)

local TopBar = new("Frame", {
    Name = "TopBar",
    Size = UDim2.new(1, 0, 0, 44),
    BackgroundColor3 = CONFIG.Panel,
    BorderSizePixel = 0,
}, MainFrame)
corner(TopBar, 14)
new("Frame", {
    Size = UDim2.new(1, 0, 0, 14),
    Position = UDim2.new(0, 0, 1, -14),
    BackgroundColor3 = CONFIG.Panel,
    BorderSizePixel = 0,
}, TopBar)

local Logo = new("Frame", {
    Size = UDim2.new(0, 28, 0, 28),
    Position = UDim2.new(0, 12, 0.5, -14),
    BackgroundColor3 = CONFIG.Accent,
    BorderSizePixel = 0,
}, TopBar)
corner(Logo, 8)
gradient(Logo, CONFIG.Accent, CONFIG.Accent2, 45)
new("TextLabel", {
    Size = UDim2.new(1, 0, 1, 0),
    BackgroundTransparency = 1,
    Text = "R",
    TextColor3 = Color3.new(1,1,1),
    Font = CONFIG.FontBold,
    TextSize = 16,
}, Logo)

new("TextLabel", {
    Size = UDim2.new(0, 300, 0, 20),
    Position = UDim2.new(0, 50, 0, 6),
    BackgroundTransparency = 1,
    Text = "Retinol S Hub",
    TextColor3 = CONFIG.Text,
    Font = CONFIG.FontBold,
    TextSize = 15,
    TextXAlignment = Enum.TextXAlignment.Left,
}, TopBar)

new("TextLabel", {
    Size = UDim2.new(0, 300, 0, 14),
    Position = UDim2.new(0, 50, 0, 24),
    BackgroundTransparency = 1,
    Text = "custom library build",
    TextColor3 = CONFIG.Dim,
    Font = CONFIG.Font,
    TextSize = 10,
    TextXAlignment = Enum.TextXAlignment.Left,
}, TopBar)

local MinimizeBtn = new("TextButton", {
    Size = UDim2.new(0, 26, 0, 26),
    Position = UDim2.new(1, -70, 0.5, -13),
    BackgroundColor3 = CONFIG.Panel2,
    BorderSizePixel = 0,
    Text = "—",
    TextColor3 = CONFIG.Text,
    Font = CONFIG.FontBold,
    TextSize = 14,
    AutoButtonColor = false,
}, TopBar)
corner(MinimizeBtn, 8)

local CloseBtn = new("TextButton", {
    Size = UDim2.new(0, 26, 0, 26),
    Position = UDim2.new(1, -38, 0.5, -13),
    BackgroundColor3 = CONFIG.Panel2,
    BorderSizePixel = 0,
    Text = "✕",
    TextColor3 = CONFIG.Text,
    Font = CONFIG.FontBold,
    TextSize = 13,
    AutoButtonColor = false,
}, TopBar)
corner(CloseBtn, 8)

local SideBar = new("Frame", {
    Size = UDim2.new(0, 150, 1, -44),
    Position = UDim2.new(0, 0, 0, 44),
    BackgroundColor3 = CONFIG.Panel,
    BorderSizePixel = 0,
}, MainFrame)

local TabScroll = new("ScrollingFrame", {
    Size = UDim2.new(1, 0, 1, -10),
    Position = UDim2.new(0, 0, 0, 5),
    BackgroundTransparency = 1,
    BorderSizePixel = 0,
    ScrollBarThickness = 2,
    ScrollBarImageColor3 = CONFIG.Accent,
    CanvasSize = UDim2.new(0, 0, 0, 0),
    AutomaticCanvasSize = Enum.AutomaticSize.Y,
}, SideBar)

local TabList = new("UIListLayout", {
    Padding = UDim.new(0, 4),
    SortOrder = Enum.SortOrder.LayoutOrder,
}, TabScroll)

local Content = new("Frame", {
    Size = UDim2.new(1, -150, 1, -44),
    Position = UDim2.new(0, 150, 0, 44),
    BackgroundTransparency = 1,
}, MainFrame)

local ContentScroll = new("ScrollingFrame", {
    Size = UDim2.new(1, -10, 1, -10),
    Position = UDim2.new(0, 5, 0, 5),
    BackgroundTransparency = 1,
    BorderSizePixel = 0,
    ScrollBarThickness = 3,
    ScrollBarImageColor3 = CONFIG.Accent,
    CanvasSize = UDim2.new(0, 0, 0, 0),
    AutomaticCanvasSize = Enum.AutomaticSize.Y,
}, Content)

local ContentList = new("UIListLayout", {
    Padding = UDim.new(0, 6),
    SortOrder = Enum.SortOrder.LayoutOrder,
}, ContentScroll)

local NotificationHolder = new("Frame", {
    Size = UDim2.new(0, 260, 0, 400),
    Position = UDim2.new(1, -280, 0, 60),
    BackgroundTransparency = 1,
}, ScreenGui)
new("UIListLayout", {
    Padding = UDim.new(0, 6),
    SortOrder = Enum.SortOrder.LayoutOrder,
    VerticalAlignment = Enum.VerticalAlignment.Top,
}, NotificationHolder)

local dragging, dragStart, startPos
TopBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        dragStart = input.Position
        startPos = MainFrame.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then dragging = false end
        end)
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local delta = input.Position - dragStart
        MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
    end
end)

local minimized = false
MinimizeBtn.MouseButton1Click:Connect(function()
    minimized = not minimized
    TweenService:Create(MainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quart), {
        Size = minimized and UDim2.new(0, 620, 0, 44) or UDim2.new(0, 620, 0, 480)
    }):Play()
    SideBar.Visible = not minimized
    Content.Visible = not minimized
end)

CloseBtn.MouseButton1Click:Connect(function()
    TweenService:Create(MainFrame, TweenInfo.new(0.25), {Size = UDim2.new(0, 620, 0, 0)}):Play()
    task.wait(0.25)
    MainFrame.Visible = false
end)

function Retinol:Notify(data)
    local n = new("Frame", {
        Size = UDim2.new(0, 260, 0, 60),
        BackgroundColor3 = CONFIG.Panel,
        BorderSizePixel = 0,
    }, NotificationHolder)
    corner(n, 10)
    stroke(n, CONFIG.Accent, 1, 0.3)
    local bar = new("Frame", {
        Size = UDim2.new(0, 3, 1, 0),
        BackgroundColor3 = CONFIG.Accent,
        BorderSizePixel = 0,
    }, n)
    corner(bar, 3)
    gradient(bar, CONFIG.Accent, CONFIG.Accent2, 90)
    new("TextLabel", {
        Size = UDim2.new(1, -16, 0, 18),
        Position = UDim2.new(0, 12, 0, 8),
        BackgroundTransparency = 1,
        Text = data.Title or "Retinol S Hub",
        TextColor3 = CONFIG.Text,
        Font = CONFIG.FontBold,
        TextSize = 13,
        TextXAlignment = Enum.TextXAlignment.Left,
    }, n)
    new("TextLabel", {
        Size = UDim2.new(1, -16, 0, 24),
        Position = UDim2.new(0, 12, 0, 26),
        BackgroundTransparency = 1,
        Text = data.Content or "",
        TextColor3 = CONFIG.Dim,
        Font = CONFIG.Font,
        TextSize = 11,
        TextWrapped = true,
        TextXAlignment = Enum.TextXAlignment.Left,
    }, n)
    n.Position = UDim2.new(1, 300, 0, 0)
    TweenService:Create(n, TweenInfo.new(0.3, Enum.EasingStyle.Quart), {Position = UDim2.new(0, 0, 0, 0)}):Play()
    task.delay(data.Duration or 3, function()
        TweenService:Create(n, TweenInfo.new(0.3), {Position = UDim2.new(1, 300, 0, 0)}):Play()
        task.wait(0.35)
        n:Destroy()
    end)
end

local Tabs = {}
local CurrentTab = nil

function Retinol:CreateWindow(data)
    self.Title = data.Title or "Retinol S Hub"
    return self
end

function Retinol:Tab(data)
    local tab = {}
    tab.Name = data.Title or "Tab"

    local btn = new("TextButton", {
        Size = UDim2.new(1, -10, 0, 32),
        BackgroundColor3 = CONFIG.Panel2,
        BorderSizePixel = 0,
        Text = "  " .. tab.Name,
        TextColor3 = CONFIG.Dim,
        Font = CONFIG.FontBold,
        TextSize = 12,
        TextXAlignment = Enum.TextXAlignment.Left,
        AutoButtonColor = false,
    }, TabScroll)
    corner(btn, 8)

    local page = new("Frame", {
        Size = UDim2.new(1, 0, 0, 0),
        BackgroundTransparency = 1,
        Visible = false,
        AutomaticSize = Enum.AutomaticSize.Y,
    }, ContentScroll)
    local pageList = new("UIListLayout", {
        Padding = UDim.new(0, 6),
        SortOrder = Enum.SortOrder.LayoutOrder,
    }, page)

    btn.MouseButton1Click:Connect(function()
        for _, t in pairs(Tabs) do
            t.page.Visible = false
            TweenService:Create(t.btn, TweenInfo.new(0.15), {BackgroundColor3 = CONFIG.Panel2, TextColor3 = CONFIG.Dim}):Play()
        end
        page.Visible = true
        TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundColor3 = CONFIG.Accent, TextColor3 = Color3.new(1,1,1)}):Play()
        CurrentTab = tab
    end)

    tab.btn = btn
    tab.page = page
    tab.list = pageList
    Tabs[#Tabs + 1] = tab

    if #Tabs == 1 then
        page.Visible = true
        btn.BackgroundColor3 = CONFIG.Accent
        btn.TextColor3 = Color3.new(1,1,1)
        CurrentTab = tab
    end

    function tab:Section(title)
        local s = new("Frame", {
            Size = UDim2.new(1, -8, 0, 26),
            BackgroundTransparency = 1,
        }, page)
        new("TextLabel", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = string.upper(title or "Section"),
            TextColor3 = CONFIG.Accent2,
            Font = CONFIG.FontBold,
            TextSize = 11,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, s)
        local line = new("Frame", {
            Size = UDim2.new(1, 0, 0, 1),
            Position = UDim2.new(0, 0, 1, -2),
            BackgroundColor3 = CONFIG.Border,
            BorderSizePixel = 0,
        }, s)
        gradient(line, CONFIG.Accent, CONFIG.Border, 0)
        return s
    end

    function tab:Toggle(data)
        local state = data.Value or false
        local frame = new("Frame", {
            Size = UDim2.new(1, -8, 0, 40),
            BackgroundColor3 = CONFIG.Panel,
            BorderSizePixel = 0,
        }, page)
        corner(frame, 8)
        stroke(frame, CONFIG.Border, 1, 0.5)
        new("TextLabel", {
            Size = UDim2.new(1, -70, 0, 20),
            Position = UDim2.new(0, 12, 0, 4),
            BackgroundTransparency = 1,
            Text = data.Title or "Toggle",
            TextColor3 = CONFIG.Text,
            Font = CONFIG.FontBold,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        new("TextLabel", {
            Size = UDim2.new(1, -70, 0, 14),
            Position = UDim2.new(0, 12, 0, 22),
            BackgroundTransparency = 1,
            Text = data.Desc or "",
            TextColor3 = CONFIG.Dim,
            Font = CONFIG.Font,
            TextSize = 10,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        local track = new("Frame", {
            Size = UDim2.new(0, 36, 0, 20),
            Position = UDim2.new(1, -50, 0.5, -10),
            BackgroundColor3 = state and CONFIG.Accent or CONFIG.Panel2,
            BorderSizePixel = 0,
        }, frame)
        corner(track, 10)
        stroke(track, CONFIG.Border, 1, 0.3)
        local knob = new("Frame", {
            Size = UDim2.new(0, 16, 0, 16),
            Position = state and UDim2.new(1, -18, 0, 2) or UDim2.new(0, 2, 0, 2),
            BackgroundColor3 = Color3.new(1,1,1),
            BorderSizePixel = 0,
        }, track)
        corner(knob, 8)
        local btn = new("TextButton", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = "",
        }, frame)
        btn.MouseButton1Click:Connect(function()
            state = not state
            TweenService:Create(track, TweenInfo.new(0.2), {BackgroundColor3 = state and CONFIG.Accent or CONFIG.Panel2}):Play()
            TweenService:Create(knob, TweenInfo.new(0.2), {Position = state and UDim2.new(1, -18, 0, 2) or UDim2.new(0, 2, 0, 2)}):Play()
            if data.Callback then data.Callback(state) end
        end)
        return frame
    end

    function tab:Slider(data)
        local min = data.Value.Min
        local max = data.Value.Max
        local val = data.Value.Default
        local frame = new("Frame", {
            Size = UDim2.new(1, -8, 0, 52),
            BackgroundColor3 = CONFIG.Panel,
            BorderSizePixel = 0,
        }, page)
        corner(frame, 8)
        stroke(frame, CONFIG.Border, 1, 0.5)
        new("TextLabel", {
            Size = UDim2.new(1, -70, 0, 20),
            Position = UDim2.new(0, 12, 0, 4),
            BackgroundTransparency = 1,
            Text = data.Title or "Slider",
            TextColor3 = CONFIG.Text,
            Font = CONFIG.FontBold,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        local valLbl = new("TextLabel", {
            Size = UDim2.new(0, 60, 0, 20),
            Position = UDim2.new(1, -72, 0, 4),
            BackgroundTransparency = 1,
            Text = tostring(val),
            TextColor3 = CONFIG.Accent2,
            Font = CONFIG.FontBold,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Right,
        }, frame)
        local track = new("Frame", {
            Size = UDim2.new(1, -24, 0, 6),
            Position = UDim2.new(0, 12, 0, 34),
            BackgroundColor3 = CONFIG.Panel2,
            BorderSizePixel = 0,
        }, frame)
        corner(track, 3)
        local fill = new("Frame", {
            Size = UDim2.new((val - min) / (max - min), 0, 1, 0),
            BackgroundColor3 = CONFIG.Accent,
            BorderSizePixel = 0,
        }, track)
        corner(fill, 3)
        gradient(fill, CONFIG.Accent, CONFIG.Accent2, 0)
        local dragging = false
        local function update(input)
            local rel = math.clamp((input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
            val = math.floor(min + (max - min) * rel)
            fill.Size = UDim2.new(rel, 0, 1, 0)
            valLbl.Text = tostring(val)
            if data.Callback then data.Callback(val) end
        end
        track.InputBegan:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                dragging = true
                update(input)
            end
        end)
        UserInputService.InputChanged:Connect(function(input)
            if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
                update(input)
            end
        end)
        UserInputService.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                dragging = false
            end
        end)
        return frame
    end

    function tab:Button(data)
        local frame = new("Frame", {
            Size = UDim2.new(1, -8, 0, 40),
            BackgroundColor3 = CONFIG.Panel,
            BorderSizePixel = 0,
        }, page)
        corner(frame, 8)
        stroke(frame, CONFIG.Border, 1, 0.5)
        new("TextLabel", {
            Size = UDim2.new(1, -20, 0, 20),
            Position = UDim2.new(0, 12, 0, 4),
            BackgroundTransparency = 1,
            Text = data.Title or "Button",
            TextColor3 = CONFIG.Text,
            Font = CONFIG.FontBold,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        new("TextLabel", {
            Size = UDim2.new(1, -20, 0, 14),
            Position = UDim2.new(0, 12, 0, 22),
            BackgroundTransparency = 1,
            Text = data.Desc or "",
            TextColor3 = CONFIG.Dim,
            Font = CONFIG.Font,
            TextSize = 10,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        local btn = new("TextButton", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = "",
        }, frame)
        btn.MouseButton1Click:Connect(function()
            TweenService:Create(frame, TweenInfo.new(0.1), {BackgroundColor3 = CONFIG.Accent}):Play()
            task.delay(0.1, function()
                TweenService:Create(frame, TweenInfo.new(0.2), {BackgroundColor3 = CONFIG.Panel}):Play()
            end)
            if data.Callback then data.Callback() end
        end)
        return frame
    end

    function tab:Dropdown(data)
        local open = false
        local selected = data.Value or (data.Values and data.Values[1]) or ""
        local frame = new("Frame", {
            Size = UDim2.new(1, -8, 0, 40),
            BackgroundColor3 = CONFIG.Panel,
            BorderSizePixel = 0,
            ClipsDescendants = true,
        }, page)
        corner(frame, 8)
        stroke(frame, CONFIG.Border, 1, 0.5)
        new("TextLabel", {
            Size = UDim2.new(1, -80, 0, 20),
            Position = UDim2.new(0, 12, 0, 4),
            BackgroundTransparency = 1,
            Text = data.Title or "Dropdown",
            TextColor3 = CONFIG.Text,
            Font = CONFIG.FontBold,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Left,
        }, frame)
        local valLbl = new("TextLabel", {
            Size = UDim2.new(0, 90, 0, 20),
            Position = UDim2.new(1, -102, 0, 4),
            BackgroundTransparency = 1,
            Text = tostring(selected),
            TextColor3 = CONFIG.Accent2,
            Font = CONFIG.FontBold,
            TextSize = 11,
            TextXAlignment = Enum.TextXAlignment.Right,
        }, frame)
        local list = new("Frame", {
            Size = UDim2.new(1, 0, 0, 0),
            Position = UDim2.new(0, 0, 0, 36),
            BackgroundTransparency = 1,
            AutomaticSize = Enum.AutomaticSize.Y,
        }, frame)
        new("UIListLayout", {
            Padding = UDim.new(0, 2),
            SortOrder = Enum.SortOrder.LayoutOrder,
        }, list)
        for _, opt in ipairs(data.Values or {}) do
            local ob = new("TextButton", {
                Size = UDim2.new(1, -16, 0, 26),
                BackgroundColor3 = CONFIG.Panel2,
                BorderSizePixel = 0,
                Text = "  " .. tostring(opt),
                TextColor3 = CONFIG.Text,
                Font = CONFIG.Font,
                TextSize = 11,
                TextXAlignment = Enum.TextXAlignment.Left,
                AutoButtonColor = false,
            }, list)
            corner(ob, 6)
            ob.MouseButton1Click:Connect(function()
                selected = opt
                valLbl.Text = tostring(opt)
                open = false
                TweenService:Create(frame, TweenInfo.new(0.2), {Size = UDim2.new(1, -8, 0, 40)}):Play()
                if data.Callback then data.Callback(opt) end
            end)
        end
        local btn = new("TextButton", {
            Size = UDim2.new(1, 0, 0, 36),
            BackgroundTransparency = 1,
            Text = "",
        }, frame)
        btn.MouseButton1Click:Connect(function()
            open = not open
            local target = 40
            if open then
                target = 40 + ((#(data.Values or {}) * 28) + 4)
            end
            TweenService:Create(frame, TweenInfo.new(0.25, Enum.EasingStyle.Quart), {Size = UDim2.new(1, -8, 0, target)}):Play()
        end)
        return frame
    end

    return tab
end

local State = {
    AimbotEnabled = false, AimbotHeld = false, AimbotSmooth = 8, AimbotFOV = 90,
    ShowFOV = true, AimbotTargetPart = "Head", LockTeammates = true, WallCheck = true,
    TriggerEnabled = false, TriggerAlwaysOn = false, TriggerDelay = 0, TriggerHeld = false,
    ESP = { BoxESP = false, OutlineESP = false, NameESP = false, DistanceESP = false, ESPTeammates = false },
    WalkSpeed = 16, JumpPower = 50, Fullbright = false, NoFog = false,
    InfJump = false, Noclip = false, Fly = false, FlySpeed = 80,
    AutoRespawn = false, TouchKill = false, AntiAFK = false, FPSBoost = false,
}

local FOVCircle
pcall(function()
    FOVCircle = Drawing.new("Circle")
    FOVCircle.Color = CONFIG.Accent
    FOVCircle.Thickness = 1.5
    FOVCircle.NumSides = 64
    FOVCircle.Filled = false
    FOVCircle.Visible = true
end)

local function isTeammate(p) return LocalPlayer.Team and p.Team == LocalPlayer.Team end
local function getESPColor(p)
    if #Teams:GetChildren() > 0 and p.TeamColor then return p.TeamColor.Color end
    return CONFIG.Accent
end

local win = Retinol:CreateWindow({ Title = "Retinol S Hub" })

local AimbotTab = Retinol:Tab({ Title = "Aimbot" })
AimbotTab:Section("Aim Lock")
AimbotTab:Toggle({ Title = "Aimbot Enabled", Desc = "Enable aimbot lock", Value = false, Callback = function(v) State.AimbotEnabled = v end })
AimbotTab:Toggle({ Title = "Team Check", Desc = "Skip teammates", Value = true, Callback = function(v) State.LockTeammates = v end })
AimbotTab:Toggle({ Title = "Wall Check", Desc = "Ignore behind walls", Value = true, Callback = function(v) State.WallCheck = v end })
AimbotTab:Toggle({ Title = "Show FOV Circle", Desc = "Draw FOV ring", Value = true, Callback = function(v)
    State.ShowFOV = v
    if FOVCircle then pcall(function() FOVCircle.Visible = v end) end
end })
AimbotTab:Section("Target")
AimbotTab:Dropdown({ Title = "Target Part", Desc = "Body part to aim at", Values = {"Head","HumanoidRootPart","Torso","UpperTorso","LowerTorso"}, Value = "Head", Callback = function(v) State.AimbotTargetPart = v end })
AimbotTab:Section("Values")
AimbotTab:Slider({ Title = "FOV Radius", Value = { Min = 10, Max = 600, Default = 90 }, Callback = function(v) State.AimbotFOV = v end })
AimbotTab:Slider({ Title = "Smooth", Value = { Min = 1, Max = 100, Default = 8 }, Callback = function(v) State.AimbotSmooth = v end })

local TriggerTab = Retinol:Tab({ Title = "Trigger" })
TriggerTab:Section("Trigger")
TriggerTab:Toggle({ Title = "Triggerbot Enabled", Desc = "Auto fire", Value = false, Callback = function(v) State.TriggerEnabled = v end })
TriggerTab:Toggle({ Title = "Always On", Desc = "No key needed", Value = false, Callback = function(v) State.TriggerAlwaysOn = v end })
TriggerTab:Slider({ Title = "Fire Delay", Value = { Min = 0, Max = 2000, Default = 0 }, Callback = function(v) State.TriggerDelay = v end })

local ESPTab = Retinol:Tab({ Title = "ESP" })
ESPTab:Section("ESP Options")
ESPTab:Toggle({ Title = "Box ESP", Desc = "Draw box", Value = false, Callback = function(v) State.ESP.BoxESP = v end })
ESPTab:Toggle({ Title = "Name ESP", Desc = "Show names", Value = false, Callback = function(v) State.ESP.NameESP = v end })
ESPTab:Toggle({ Title = "Distance ESP", Desc = "Show distance", Value = false, Callback = function(v) State.ESP.DistanceESP = v end })
ESPTab:Toggle({ Title = "Show Teammates", Desc = "Include mates", Value = false, Callback = function(v) State.ESP.ESPTeammates = v end })

local MiscTab = Retinol:Tab({ Title = "Misc" })
MiscTab:Section("Movement")
MiscTab:Toggle({ Title = "Infinite Jump", Desc = "Jump forever", Value = false, Callback = function(v) State.InfJump = v end })
MiscTab:Toggle({ Title = "Noclip", Desc = "Walk through walls", Value = false, Callback = function(v) State.Noclip = v end })
MiscTab:Toggle({ Title = "Fly", Desc = "Enable flight", Value = false, Callback = function(v) State.Fly = v end })
MiscTab:Slider({ Title = "Fly Speed", Value = { Min = 1, Max = 500, Default = 80 }, Callback = function(v) State.FlySpeed = v end })
MiscTab:Section("Utility")
MiscTab:Toggle({ Title = "Auto Respawn", Desc = "Respawn on death", Value = false, Callback = function(v) State.AutoRespawn = v end })
MiscTab:Toggle({ Title = "Anti-AFK", Desc = "Prevent kick", Value = false, Callback = function(v) State.AntiAFK = v end })
MiscTab:Section("Danger")
MiscTab:Button({ Title = "Kill Aura Toggle", Desc = "Toggle touch kill", Callback = function()
    State.TouchKill = not State.TouchKill
    Retinol:Notify({ Title = "Retinol S Hub", Content = "Touch Kill: " .. (State.TouchKill and "ON" or "OFF"), Duration = 3 })
end })

local SettingsTab = Retinol:Tab({ Title = "Settings" })
SettingsTab:Section("Player")
SettingsTab:Slider({ Title = "Walk Speed", Value = { Min = 0, Max = 500, Default = 16 }, Callback = function(v)
    State.WalkSpeed = v
    local c = LocalPlayer.Character
    local h = c and c:FindFirstChildOfClass("Humanoid")
    if h then h.WalkSpeed = v end
end })
SettingsTab:Slider({ Title = "Jump Power", Value = { Min = 0, Max = 500, Default = 50 }, Callback = function(v)
    State.JumpPower = v
    local c = LocalPlayer.Character
    local h = c and c:FindFirstChildOfClass("Humanoid")
    if h then h.UseJumpPower = true; h.JumpPower = v end
end })
SettingsTab:Section("Visual")
SettingsTab:Toggle({ Title = "Fullbright", Desc = "Brighten map", Value = false, Callback = function(v)
    State.Fullbright = v
    Lighting.Brightness = v and 2 or 1
    Lighting.ClockTime = v and 14 or Lighting.ClockTime
    Lighting.FogEnd = v and 9e9 or 100000
    Lighting.GlobalShadows = not v
end })
SettingsTab:Toggle({ Title = "No Fog", Desc = "Remove fog", Value = false, Callback = function(v)
    State.NoFog = v
    Lighting.FogEnd = v and 9e9 or 100000
end })

local CreditsTab = Retinol:Tab({ Title = "Credits" })
CreditsTab:Section("Retinol S Hub")
CreditsTab:Button({ Title = "Retinol S Hub", Desc = "Custom library build. Maintained by Retinol.", Callback = function()
    Retinol:Notify({ Title = "Retinol S Hub", Content = "Custom UI. No dependencies.", Duration = 3 })
end })

local function getChar() return LocalPlayer.Character end
local function getHRP() local c = getChar(); return c and c:FindFirstChild("HumanoidRootPart") end

local function getNearestTarget()
    local cam = workspace.CurrentCamera
    local vp = cam.ViewportSize
    local center = Vector2.new(vp.X/2, vp.Y/2)
    local best, bestDist = nil, State.AimbotFOV
    for _, p in ipairs(Players:GetPlayers()) do
        if p == LocalPlayer then continue end
        if State.LockTeammates and isTeammate(p) then continue end
        local char = p.Character
        if not char then continue end
        local hum = char:FindFirstChildOfClass("Humanoid")
        if not hum or hum.Health <= 0 then continue end
        local part = char:FindFirstChild(State.AimbotTargetPart) or char:FindFirstChild("HumanoidRootPart")
        if not part then continue end
        if State.WallCheck then
            local rp = RaycastParams.new()
            rp.FilterDescendantsInstances = {getChar(), char}
            rp.FilterType = Enum.RaycastFilterType.Exclude
            local origin = cam.CFrame.Position
            local result = workspace:Raycast(origin, (part.Position - origin), rp)
            if result then continue end
        end
        local screenPos, onScreen = cam:WorldToViewportPoint(part.Position)
        if not onScreen then continue end
        local dist = Vector2.new(screenPos.X, screenPos.Y) - center
        if dist.Magnitude < bestDist then
            bestDist = dist.Magnitude
            best = {player=p, char=char, part=part}
        end
    end
    return best
end

RunService.RenderStepped:Connect(function()
    if FOVCircle then
        pcall(function()
            local vp = workspace.CurrentCamera.ViewportSize
            FOVCircle.Position = Vector2.new(vp.X/2, vp.Y/2)
            FOVCircle.Radius = State.AimbotFOV
            FOVCircle.Visible = State.ShowFOV
        end)
    end
    if not State.AimbotEnabled or not State.AimbotHeld then return end
    local target = getNearestTarget()
    if not target then return end
    local cam = workspace.CurrentCamera
    local smooth = math.clamp(State.AimbotSmooth, 1, 100)
    cam.CFrame = cam.CFrame:Lerp(CFrame.new(cam.CFrame.Position, target.part.Position), 1 / smooth)
end)

local trigLastFire = 0
RunService.Heartbeat:Connect(function()
    if not State.TriggerEnabled then return end
    if not (State.TriggerAlwaysOn or State.TriggerHeld) then return end
    local cam = workspace.CurrentCamera
    local vp = cam.ViewportSize
    local ray = cam:ScreenPointToRay(vp.X/2, vp.Y/2)
    local rp = RaycastParams.new()
    rp.FilterDescendantsInstances = {getChar() or {}}
    rp.FilterType = Enum.RaycastFilterType.Exclude
    local res = workspace:Raycast(ray.Origin, ray.Direction * 1000, rp)
    if res and res.Instance then
        local char = res.Instance.Parent
        local hum = char:FindFirstChildOfClass("Humanoid") or (char.Parent and char.Parent:FindFirstChildOfClass("Humanoid"))
        if hum and hum.Health > 0 then
            for _, p in ipairs(Players:GetPlayers()) do
                if p ~= LocalPlayer and (p.Character == char or p.Character == char.Parent) then
                    if State.LockTeammates and isTeammate(p) then break end
                    if tick() - trigLastFire < (State.TriggerDelay / 1000) then break end
                    trigLastFire = tick()
                    if mouse1press then mouse1press(); task.delay(0.03, function() if mouse1release then mouse1release() end end)
                    elseif mouse1click then mouse1click()
                    elseif VirtualInputManager then
                        pcall(function()
                            VirtualInputManager:SendMouseButtonEvent(0,0,0,true,game,1)
                            task.delay(0.03,function() VirtualInputManager:SendMouseButtonEvent(0,0,0,false,game,1) end)
                        end)
                    end
                    break
                end
            end
        end
    end
end)

local espObjects = {}
local function cleanESP(p)
    if espObjects[p] then
        for _, d in ipairs(espObjects[p]) do pcall(function() d:Remove() end) end
        espObjects[p] = nil
    end
end

RunService.Heartbeat:Connect(function()
    local cam = workspace.CurrentCamera
    for _, p in ipairs(Players:GetPlayers()) do
        if p == LocalPlayer then continue end
        if not State.ESP.ESPTeammates and isTeammate(p) then cleanESP(p); continue end
        local char = p.Character
        local hrp = char and char:FindFirstChild("HumanoidRootPart")
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if not hrp or not hum or hum.Health <= 0 then cleanESP(p); continue end
        local screenPos, onScreen = cam:WorldToViewportPoint(hrp.Position)
        if not onScreen then cleanESP(p); continue end
        pcall(function()
            if not espObjects[p] then espObjects[p] = {} end
            local col = getESPColor(p)
            if State.ESP.NameESP then
                local n = espObjects[p].nameLbl
                if not n then
                    n = Drawing.new("Text"); n.Center = true; n.Outline = true; n.Size = 13; n.Font = Drawing.Fonts.Plex
                    espObjects[p].nameLbl = n
                end
                n.Position = Vector2.new(screenPos.X, screenPos.Y - 40)
                n.Text = p.DisplayName; n.Color = col; n.Visible = true
            elseif espObjects[p].nameLbl then espObjects[p].nameLbl.Visible = false end
            if State.ESP.DistanceESP then
                local dist = math.floor((hrp.Position - cam.CFrame.Position).Magnitude)
                local d = espObjects[p].distLbl
                if not d then
                    d = Drawing.new("Text"); d.Center = true; d.Outline = true; d.Size = 11; d.Font = Drawing.Fonts.Plex
                    espObjects[p].distLbl = d
                end
                d.Position = Vector2.new(screenPos.X, screenPos.Y + 30)
                d.Text = dist .. " studs"; d.Color = col; d.Visible = true
            elseif espObjects[p].distLbl then espObjects[p].distLbl.Visible = false end
            if State.ESP.BoxESP then
                local top = cam:WorldToViewportPoint((hrp.Position + Vector3.new(0,3,0)))
                local bot = cam:WorldToViewportPoint((hrp.Position - Vector3.new(0,2.5,0)))
                local h2 = math.abs(top.Y - bot.Y)
                local w2 = h2 * 0.6
                local bx = espObjects[p].box
                if not bx then
                    bx = Drawing.new("Square"); bx.Filled = false; bx.Thickness = 1.5
                    espObjects[p].box = bx
                end
                bx.Position = Vector2.new(screenPos.X - w2/2, math.min(top.Y, bot.Y))
                bx.Size = Vector2.new(w2, h2); bx.Color = col; bx.Visible = true
            elseif espObjects[p].box then espObjects[p].box.Visible = false end
        end)
    end
end)

Players.PlayerRemoving:Connect(function(p) cleanESP(p) end)

UserInputService.JumpRequest:Connect(function()
    if not State.InfJump then return end
    local hrp = getHRP()
    if hrp then hrp.AssemblyLinearVelocity = Vector3.new(hrp.AssemblyLinearVelocity.X, 55, hrp.AssemblyLinearVelocity.Z) end
end)

RunService.Stepped:Connect(function()
    if State.Noclip then
        local c = getChar()
        if c then
            for _, p in ipairs(c:GetDescendants()) do
                if p:IsA("BasePart") then p.CanCollide = false end
            end
        end
    end
end)

local flyBF
RunService.Heartbeat:Connect(function()
    if not State.Fly then
        if flyBF then flyBF:Destroy(); flyBF = nil end
        return
    end
    local hrp = getHRP()
    if not hrp then return end
    if not flyBF then
        flyBF = Instance.new("BodyVelocity", hrp)
        flyBF.MaxForce = Vector3.new(1e6,1e6,1e6)
        flyBF.Velocity = Vector3.zero
    end
    local cam = workspace.CurrentCamera
    local mv = Vector3.zero
    if UserInputService:IsKeyDown(Enum.KeyCode.W) then mv = mv + cam.CFrame.LookVector end
    if UserInputService:IsKeyDown(Enum.KeyCode.S) then mv = mv - cam.CFrame.LookVector end
    if UserInputService:IsKeyDown(Enum.KeyCode.A) then mv = mv - cam.CFrame.RightVector end
    if UserInputService:IsKeyDown(Enum.KeyCode.D) then mv = mv + cam.CFrame.RightVector end
    if UserInputService:IsKeyDown(Enum.KeyCode.Space) then mv = mv + Vector3.new(0,1,0) end
    if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then mv = mv - Vector3.new(0,1,0) end
    flyBF.Velocity = mv.Magnitude > 0 and mv.Unit * State.FlySpeed or Vector3.zero
end)

RunService.Heartbeat:Connect(function()
    if State.AntiAFK then
        pcall(function() VirtualUser:ActivateVirtualCursor(Vector2.new(math.random(-5,5), math.random(-5,5))) end)
    end
end)

RunService.Heartbeat:Connect(function()
    if not State.TouchKill then return end
    local hrp = getHRP()
    if not hrp then return end
    for _, p in ipairs(Players:GetPlayers()) do
        if p == LocalPlayer then continue end
        local c = p.Character
        local h = c and c:FindFirstChildOfClass("Humanoid")
        local r = c and c:FindFirstChild("HumanoidRootPart")
        if h and r and (hrp.Position - r.Position).Magnitude < 5 then h.Health = 0 end
    end
end)

LocalPlayer.CharacterAdded:Connect(function(char)
    local hum = char:WaitForChild("Humanoid")
    hum.Died:Connect(function()
        if State.AutoRespawn then task.wait(1); LocalPlayer:LoadCharacter() end
    end)
    task.wait(0.1)
    local h2 = char:FindFirstChildOfClass("Humanoid")
    if h2 then
        h2.WalkSpeed = State.WalkSpeed
        h2.UseJumpPower = true
        h2.JumpPower = State.JumpPower
    end
end)

MainFrame.Visible = true
Retinol:Notify({ Title = "Retinol S Hub", Content = "Loaded. Custom library active.", Duration = 4 })

Features & Information

[NEW🔥] RETINOL S HUB | PREMIUM UNIVERSAL SCRIPT👑 🎮|FEATURES SHOWCASE🎥 🎯 Aimbot ⚡ Triggerbot 👁️ ESP 🛠️ Utility Features ⚙️ Custom Settings ✨ Clean Premium UI 🌐 Universal Support 💻|SCRIPT INFO💻 Retinol S Hub is a premium-style universal Roblox hub designed with multiple gameplay, visual, and utility features in one interface.
#Universal Keyless#Retinol S Hub#Universal Aimbot#Universal Hub

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts