Silly Hubs Aimbot
Key RequiredUniversal

Silly Hubs Aimbot

Universal ScriptChilliesosillyChilliesosilly 2.1K views 61 executesUpdated Sep 26, 2025
0.0/ 5(1 votes)
010% Positive
Lua Script•337 lines (21944 chars)
-- FULL Silly GUI with ESP (boxes) + Aimbot (hard lock, centered circle) + Player tab
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Workspace = workspace

local OUTLINE_COLOR = Color3.fromRGB(255,150,150)
local TITLE_COLOR = Color3.fromRGB(140,10,10)
local BG_COLOR = Color3.fromRGB(30,30,30)
local BUTTON_COLOR = Color3.fromRGB(60,10,10)

-- newFrameGui: titlebar + body. Minimize hides ONLY the body (all children inside)
local function newFrameGui(titleText, height)
    local gui = Instance.new("ScreenGui"); gui.Name = ("Silly_%s_GUI"):format(titleText:gsub("%s","")); gui.ResetOnSpawn = false; gui.Parent = PlayerGui
    local frame = Instance.new("Frame", gui); frame.AnchorPoint = Vector2.new(.5, .5); frame.Position = UDim2.new(.5, 0, .5, 0); frame.Size = UDim2.new(0, 280, 0, height or 200); frame.BackgroundColor3 = BG_COLOR; frame.BorderSizePixel = 0
    local stroke = Instance.new("UIStroke", frame); stroke.Color = OUTLINE_COLOR; stroke.Thickness = 3; Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8)

    local titleBar = Instance.new("Frame", frame); titleBar.Name = "TitleBar"; titleBar.Size = UDim2.new(1, 0, 0, 34); titleBar.BackgroundColor3 = TITLE_COLOR
    local title = Instance.new("TextLabel", titleBar); title.AnchorPoint = Vector2.new(.5, .5); title.Position = UDim2.new(.5, 0, .5, 0); title.Size = UDim2.new(.7, 0, .9, 0)
    title.BackgroundTransparency = 1; title.Text = titleText; title.Font = Enum.Font.GothamBold; title.TextSize = 16; title.TextColor3 = Color3.fromRGB(255,255,255)

    local close = Instance.new("TextButton", titleBar); close.Name = "MinimizeBtn"; close.AnchorPoint = Vector2.new(1, .5); close.Position = UDim2.new(1, -8, 0.5, 0); close.Size = UDim2.new(0, 26, 0, 26)
    close.BackgroundColor3 = Color3.fromRGB(40,10,10); close.Text = "-" ; close.Font = Enum.Font.GothamBold; close.TextSize = 16; close.TextColor3 = Color3.fromRGB(255,255,255)
    Instance.new("UICorner", close).CornerRadius = UDim.new(0, 6);

    -- Body frame where all content goes (buttons, sliders, etc)
    local body = Instance.new("Frame", frame); body.Name = "Body"; body.Size = UDim2.new(1, 0, 1, -34); body.Position = UDim2.new(0, 0, 0, 34); body.BackgroundTransparency = 1
    local list = Instance.new("UIListLayout", body); list.Padding = UDim.new(0, 10); list.HorizontalAlignment = Enum.HorizontalAlignment.Center; list.VerticalAlignment = Enum.VerticalAlignment.Top

    -- Minimize / Maximize: only affects this frame's body
    local minimized = false
    local fullSize = frame.Size
    close.MouseButton1Click:Connect(function()
        if not minimized then
            fullSize = frame.Size
            frame.Size = UDim2.new(fullSize.X.Scale, fullSize.X.Offset, 0, titleBar.Size.Y.Offset)
            body.Visible = false
            close.Text = "+"
            minimized = true
        else
            frame.Size = fullSize
            body.Visible = true
            close.Text = "-"
            minimized = false
        end
    end)

    -- Dragging logic (title bar draggable even when minimized)
    do
        local dragging = false; local dragInput, dragStart, startPos
        local function update(input)
            local delta = input.Position - dragStart
            local view = Workspace.CurrentCamera and Workspace.CurrentCamera.ViewportSize or Vector2.new(1920,1080)
            frame.Position = UDim2.new(math.clamp(startPos.X.Scale + delta.X / view.X, 0, 1), startPos.X.Offset + delta.X, math.clamp(startPos.Y.Scale + delta.Y / view.Y, 0, 1), startPos.Y.Offset + delta.Y)
        end
        titleBar.InputBegan:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                dragging = true; dragStart = input.Position; startPos = frame.Position; dragInput = input
                input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end)
            end
        end)
        titleBar.InputChanged:Connect(function(input) if input == dragInput and dragging and input.Position then update(input) end end)
        UIS.TouchMoved:Connect(function(t) if dragging and dragInput and dragInput.UserInputType == Enum.UserInputType.Touch then update(t) end end)
        UIS.InputChanged:Connect(function(input) if input == dragInput and dragging and input.Position then update(input) end end)
    end

    local function makeBtn(name, text, cb)
        local b = Instance.new("TextButton", body); b.Name = name; b.Size = UDim2.new(0, 220, 0, 36); b.BackgroundColor3 = BUTTON_COLOR; b.Text = text; b.Font = Enum.Font.GothamSemibold; b.TextSize = 18; b.TextColor3 = Color3.fromRGB(255,255,255)
        Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
        if cb then b.MouseButton1Click:Connect(cb) end
        return b
    end

    return { gui = gui, frame = frame, body = body, makeBtn = makeBtn }
end

-- createESPGui with red boxes (dynamic sizing) -------------------------------
local function createESPGui()
    local o = newFrameGui("ESP", 200)
    local state = { esp = false, ignoreTeam = false, boxes = {}, boxConns = {} }

    local function shouldShow(plr)
        if not plr or plr == LocalPlayer then return false end
        if not plr.Character or not plr.Character.Parent then return false end
        if state.ignoreTeam and plr.Team == LocalPlayer.Team then return false end
        return state.esp
    end

    local function getPrimaryPart(plrChar)
        if not plrChar then return nil end
        return plrChar:FindFirstChild("HumanoidRootPart") or plrChar:FindFirstChild("UpperTorso") or plrChar:FindFirstChild("Torso") or plrChar.PrimaryPart
    end

    local function ensureBox(plr)
        if not plr or not plr.Character then return end
        local id = plr.UserId
        if state.boxes[id] and state.boxes[id].Parent then return end

        local root = getPrimaryPart(plr.Character)
        if not root then return end

        -- compute a model extents size (falls back to root.Size)
        local success, extents = pcall(function() return plr.Character:GetExtentsSize() end)
        if not success or not extents then extents = root.Size end

        local box = Instance.new("BoxHandleAdornment")
        box.Name = "ESP_Box_" .. tostring(id)
        box.Adornee = root
        box.Size = extents
        box.Transparency = 0.4
        box.Color = BrickColor.new("Bright red")
        box.AlwaysOnTop = true
        box.ZIndex = 10
        -- Parenting to Workspace allows client-side visibility; keep separate folder for cleanup
        box.Parent = Workspace

        -- dynamic update connection
        local conn = RunService.Heartbeat:Connect(function()
            if not box or not box.Parent or not plr.Character or not plr.Character.Parent then
                return
            end
            -- update adornee in case character's primary part changed
            local newRoot = getPrimaryPart(plr.Character)
            if newRoot and box.Adornee ~= newRoot then
                box.Adornee = newRoot
            end
            -- update size to match model extents (handles scaling/pose)
            local ok, newExt = pcall(function() return plr.Character:GetExtentsSize() end)
            if ok and newExt then
                box.Size = newExt
            else
                local rsz = box.Adornee and box.Adornee.Size or Vector3.new(2,5,1)
                box.Size = rsz
            end
        end)

        state.boxes[id] = box
        state.boxConns[id] = conn
    end

    local function removeBox(plr)
        if not plr then return end
        local id = plr.UserId
        if state.boxConns[id] then
            pcall(function() state.boxConns[id]:Disconnect() end)
            state.boxConns[id] = nil
        end
        if state.boxes[id] then
            pcall(function() state.boxes[id]:Destroy() end)
            state.boxes[id] = nil
        end
    end

    local function updateAll()
        for _, plr in ipairs(Players:GetPlayers()) do
            if shouldShow(plr) then
                ensureBox(plr)
            else
                removeBox(plr)
            end
        end
    end

    o.makeBtn("IgnoreTeamBtn", "Ignore Team: OFF", function()
        state.ignoreTeam = not state.ignoreTeam
        o.body.IgnoreTeamBtn.Text = "Ignore Team: " .. (state.ignoreTeam and "ON" or "OFF")
        updateAll()
    end)

    o.makeBtn("ESPBtn", "ESP: OFF", function()
        state.esp = not state.esp
        o.body.ESPBtn.Text = "ESP: " .. (state.esp and "ON" or "OFF")
        updateAll()
    end)

    -- auto-refresh while GUI exists
    spawn(function()
        while o.gui and o.gui.Parent do
            wait(5)
            if state.esp then updateAll() end
        end
    end)

    Players.PlayerAdded:Connect(function(plr)
        plr.CharacterAdded:Connect(function()
            wait(0.05)
            if o.gui and o.gui.Parent and shouldShow(plr) then
                ensureBox(plr)
            end
        end)
    end)

    Players.PlayerRemoving:Connect(function(plr)
        removeBox(plr)
    end)

    o.gui.Destroying:Connect(function()
        for k,conn in pairs(state.boxConns) do
            if conn then pcall(function() conn:Disconnect() end) end
            state.boxConns[k] = nil
        end
        for k,box in pairs(state.boxes) do
            if box and box.Parent then pcall(function() box:Destroy() end) end
            state.boxes[k] = nil
        end
    end)

    return o.gui
end

-- createAimbotGui with centered circle --------------------------------------
local function createAimbotGui()
    local o = newFrameGui("Aimbot", 300)
    local state = { circleSize = 150, ignoreTeam = false, ignoreWalls = false, aimbotOn = false }
    local visGui = Instance.new("ScreenGui", PlayerGui); visGui.Name = "Silly_AimbotCircle"; visGui.ResetOnSpawn = false
    local circle = Instance.new("Frame", visGui); circle.AnchorPoint = Vector2.new(.5, .5); circle.Position = UDim2.new(0.5, 0, 0.5, 0)
    circle.Size = UDim2.new(0, state.circleSize, 0, state.circleSize); circle.BackgroundTransparency = 1
    local circleStroke = Instance.new("UIStroke", circle); circleStroke.Color = Color3.fromRGB(255,0,0); circleStroke.Thickness = 2
    local circleCorner = Instance.new("UICorner", circle); circleCorner.CornerRadius = UDim.new(0, state.circleSize/2)
    local lbl = Instance.new("TextLabel", o.body); lbl.Text = "Circle Size: " .. state.circleSize; lbl.Size = UDim2.new(0, 220, 0, 18); lbl.BackgroundTransparency = 1; lbl.TextColor3 = Color3.fromRGB(255,255,255); lbl.Font = Enum.Font.GothamSemibold; lbl.TextSize = 14
    local track = Instance.new("Frame", o.body); track.Size = UDim2.new(0, 220, 0, 16); track.BackgroundColor3 = Color3.fromRGB(50,50,50); Instance.new("UICorner", track).CornerRadius = UDim.new(0, 6)
    local fill = Instance.new("Frame", track); fill.Size = UDim2.new((state.circleSize-30) / (600-30), 0, 1, 0); fill.BackgroundColor3 = Color3.fromRGB(140,10,10); Instance.new("UICorner", fill).CornerRadius = UDim.new(0, 6)
    local knob = Instance.new("TextButton", track); knob.Size = UDim2.new(0, 18, 0, 18); knob.AnchorPoint = Vector2.new(.5, .5); knob.Position = UDim2.new((state.circleSize-30) / (600-30), 0, .5, 0); knob.BackgroundColor3 = Color3.fromRGB(200,50,50); knob.Text = ""; Instance.new("UICorner", knob).CornerRadius = UDim.new(0, 9)
    local minSize, maxSize = 30, 600
    local function setSizeFromX(x)
        if not track:IsDescendantOf(game) then return end
        local pos = track.AbsolutePosition.X; local size = track.AbsoluteSize.X if size <= 0 then return end
        local ratio = math.clamp((x - pos) / size, 0, 1)
        state.circleSize = math.floor(minSize + (maxSize - minSize) * ratio)
        lbl.Text = "Circle Size: " .. state.circleSize
        fill.Size = UDim2.new(ratio, 0, 1, 0); knob.Position = UDim2.new(ratio, 0, .5, 0)
        circle.Size = UDim2.new(0, state.circleSize, 0, state.circleSize); circleCorner.CornerRadius = UDim.new(0, state.circleSize / 2)
    end
    local function beginDrag(input)
        if not input or not input.Position then return end
        setSizeFromX(input.Position.X)
        local moveConn; moveConn = UIS.InputChanged:Connect(function(i) if (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) and i.Position then setSizeFromX(i.Position.X) end end)
        input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then if moveConn then moveConn:Disconnect() end end end)
    end
    knob.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then beginDrag(i) end end)
    track.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then beginDrag(i) end end)
    o.makeBtn("IgnoreTeamBtn", "Ignore Team: OFF", function() state.ignoreTeam = not state.ignoreTeam; o.body.IgnoreTeamBtn.Text = "Ignore Team: " .. (state.ignoreTeam and "ON" or "OFF") end)
    o.makeBtn("IgnoreWallsBtn", "Ignore Walls: OFF", function() state.ignoreWalls = not state.ignoreWalls; o.body.IgnoreWallsBtn.Text = "Ignore Walls: " .. (state.ignoreWalls and "ON" or "OFF") end)
    local function visibleThrough(head, char)
        if not state.ignoreWalls then return true end
        local cam = Workspace.CurrentCamera if not cam then return true end
        local rp = RaycastParams.new(); rp.FilterDescendantsInstances = { LocalPlayer.Character }; rp.FilterType = Enum.RaycastFilterType.Blacklist; rp.IgnoreWater = true
        local dir = (head.Position - cam.CFrame.Position)
        local r = Workspace:Raycast(cam.CFrame.Position, dir, rp)
        if not r then return true end
        if r.Instance and char and r.Instance:IsDescendantOf(char) then return true end
        return false
    end
    local function getTarget()
        local cam = Workspace.CurrentCamera; if not cam then return nil end
        local cx, cy = cam.ViewportSize.X/2, cam.ViewportSize.Y/2
        local best, bestDist = nil, math.huge
        for _, plr in ipairs(Players:GetPlayers()) do
            if plr ~= LocalPlayer and plr.Character and plr.Character.Parent then
                if state.ignoreTeam and plr.Team == LocalPlayer.Team then
                else
                    local head = plr.Character:FindFirstChild("Head")
                    if head then
                        local pos, on = cam:WorldToViewportPoint(head.Position)
                        if on and visibleThrough(head, plr.Character) then
                            local dx, posy = pos.X - cx, pos.Y - cy
                            local dist = math.sqrt(dx*dx + posy*posy)
                            if dist <= state.circleSize/2 and dist < bestDist then best, bestDist = head, dist end
                        end
                    end
                end
            end
        end
        return best
    end
    local aimbotConn
    aimbotConn = RunService.RenderStepped:Connect(function()
        pcall(function() circle.Position = UDim2.new(0.5, 0, 0.5, 0) end)
        if not state.aimbotOn then return end
        local cam = Workspace.CurrentCamera; if not cam then return end
        local t = getTarget()
        if t then cam.CFrame = CFrame.new(cam.CFrame.Position, t.Position) end
    end)
    o.makeBtn("AimbotBtn", "Aimbot: OFF", function() state.aimbotOn = not state.aimbotOn; o.body.AimbotBtn.Text = "Aimbot: " .. (state.aimbotOn and "ON" or "OFF") end)
    o.gui.Destroying:Connect(function() if aimbotConn then aimbotConn:Disconnect() aimbotConn = nil end; if visGui and visGui.Parent then visGui:Destroy() end end)
    return o.gui
end

-- createPlayerGui: walkspeed, jumppower, infinite jump, noclip ----------------
local function createPlayerGui()
    local o = newFrameGui("Player", 300)
    local state = { ws = 16, jp = 50, inf = false, noclip = false }
    local nocConn; local saved = {}
    local function applyChar(c)
        if not c then return end
        local h = c:FindFirstChildOfClass("Humanoid")
        if h then pcall(function() h.WalkSpeed = state.ws; h.JumpPower = state.jp end) end
        if state.noclip then for _, p in pairs(c:GetDescendants()) do if p:IsA("BasePart") then saved[p] = p.CanCollide; p.CanCollide = false end end end
    end
    Players.LocalPlayer.CharacterAdded:Connect(function(ch) wait(0.05); applyChar(ch); if state.noclip then if nocConn then nocConn:Disconnect() end; nocConn = RunService.Heartbeat:Connect(function() local ch2 = LocalPlayer.Character; if not ch2 then return end; for _, pp in pairs(ch2:GetDescendants()) do if pp:IsA("BasePart") then if saved[pp] == nil then saved[pp] = pp.CanCollide end; pp.CanCollide = false end end end) end end)
    local function makeSlider(labelText, minV, maxV, default, onChange)
        local lbl = Instance.new("TextLabel", o.body); lbl.Text = labelText .. ": " .. tostring(default); lbl.Size = UDim2.new(0,220,0,18); lbl.BackgroundTransparency = 1; lbl.TextColor3 = Color3.fromRGB(255,255,255); lbl.Font = Enum.Font.GothamSemibold; lbl.TextSize = 14
        local track = Instance.new("Frame", o.body); track.Size = UDim2.new(0,220,0,16); track.BackgroundColor3 = Color3.fromRGB(50,50,50); Instance.new("UICorner", track).CornerRadius = UDim.new(0,6)
        local fill = Instance.new("Frame", track); fill.Size = UDim2.new((default - minV)/(maxV - minV), 0, 1, 0); fill.BackgroundColor3 = Color3.fromRGB(140,10,10); Instance.new("UICorner", fill).CornerRadius = UDim.new(0,6)
        local knob = Instance.new("TextButton", track); knob.Size = UDim2.new(0,18,0,18); knob.AnchorPoint = Vector2.new(.5, .5); knob.Position = UDim2.new((default - minV)/(maxV - minV), 0, .5, 0); knob.BackgroundColor3 = Color3.fromRGB(200,50,50); knob.Text = ""; Instance.new("UICorner", knob).CornerRadius = UDim.new(0,9)
        local function setFromX(x)
            if not track:IsDescendantOf(game) then return end
            local pos = track.AbsolutePosition.X; local size = track.AbsoluteSize.X; if size <= 0 then return end
            local r = math.clamp((x - pos)/size, 0, 1); local val = math.floor(minV + r*(maxV - minV))
            lbl.Text = labelText .. ": " .. tostring(val); fill.Size = UDim2.new(r, 0, 1, 0); knob.Position = UDim2.new(r, 0, .5, 0); onChange(val)
        end
        local function b(input) if not input or not input.Position then return end; setFromX(input.Position.X); local mv; mv = UIS.InputChanged:Connect(function(i) if (i.UserInputType == Enum.UserInputType.MouseMovement or i.UserInputType == Enum.UserInputType.Touch) and i.Position then setFromX(i.Position.X) end end); input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then if mv then mv:Disconnect() end end end) end
        knob.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then b(i) end end)
        track.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.Touch then b(i) end end)
        return lbl, track, knob
    end
    state.ws = 16; makeSlider("WalkSpeed", 16, 500, state.ws, function(v) state.ws = v; if LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") then pcall(function() LocalPlayer.Character:FindFirstChildOfClass("Humanoid").WalkSpeed = v end) end end)
    state.jp = 50; makeSlider("JumpPower", 50, 500, state.jp, function(v) state.jp = v; if LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") then pcall(function() LocalPlayer.Character:FindFirstChildOfClass("Humanoid").JumpPower = v end) end end)
    o.makeBtn("InfJumpBtn", "Infinite Jump: OFF", function() state.inf = not state.inf; o.body.InfJumpBtn.Text = "Infinite Jump: " .. (state.inf and "ON" or "OFF") end)
    local jr = UIS.JumpRequest:Connect(function() if state.inf and LocalPlayer.Character then local hum = LocalPlayer.Character:FindFirstChildOfClass("Humanoid"); if hum then hum:ChangeState(Enum.HumanoidStateType.Jumping) end end end)
    local function enableNoclip() local ch = LocalPlayer.Character; if not ch then return end; saved = {}; for _, p in pairs(ch:GetDescendants()) do if p:IsA("BasePart") then saved[p] = p.CanCollide; p.CanCollide = false end end; if nocConn then nocConn:Disconnect() end; nocConn = RunService.Heartbeat:Connect(function() local ch2 = LocalPlayer.Character; if not ch2 then return end; for _, pp in pairs(ch2:GetDescendants()) do if pp:IsA("BasePart") then if saved[pp] == nil then saved[pp] = pp.CanCollide end; pp.CanCollide = false end end end) end
    local function disableNoclip() if nocConn then nocConn:Disconnect(); nocConn = nil end; for p, v in pairs(saved) do if p and p.Parent then pcall(function() p.CanCollide = v end) end end; saved = {} end
    o.makeBtn("NoclipBtn", "Noclip: OFF", function() state.noclip = not state.noclip; o.body.NoclipBtn.Text = "Noclip: " .. (state.noclip and "ON" or "OFF"); if state.noclip then enableNoclip() else disableNoclip() end end)
    o.gui.Destroying:Connect(function() if jr then jr:Disconnect() end; disableNoclip() end)
    if LocalPlayer.Character then applyChar(LocalPlayer.Character) end
    return o.gui
end

-- Main GUI ------------------------------------------------------------------
local main = newFrameGui("silly's aimbot", 200)
main.makeBtn("ESP", "ESP", function() createESPGui() end)
main.makeBtn("Aimbot", "Aimbot", function() createAimbotGui() end)
main.makeBtn("Player", "Player", function() createPlayerGui() end)

print("[Silly GUI] Loaded.")

Features & Information

Has aimbot, esp and player editor

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts