Universal Aimbot and ESP Script
Key RequiredUniversal

Universal Aimbot and ESP Script

Universal Scriptarandomskiddiearandomskiddie 9.4K views 164 executesUpdated Jun 15, 2025
5.0/ 5(4 votes)
40100% Positive
Lua Script•568 lines (19908 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local mouse = player:GetMouse()

local aiming = false
local aimbotEnabled = false
local aimPart = "Head"
local STICKINESS_THRESHOLD = 2
local lastTarget = nil
local smoothness = 0.2
local fovCircleEnabled = false
local fovRadius = 100
local teamCheck = true

local espEnabled = true
local espBoxes = {}
local espColor = Color3.new(1, 0, 0)
local espTransparency = 0.5
local espNames = {}
local nameTagsEnabled = false
local healthBarsEnabled = false
local espTeamCheck = true

local currentTab = "Aimbot"

local fovCircle = nil
local function isEnemy(otherPlayer)
    if not teamCheck then
        return otherPlayer ~= player
    end
    return player.Team ~= nil and otherPlayer.Team ~= nil and player.Team ~= otherPlayer.Team
end

local function isESPTarget(otherPlayer)
    if not espTeamCheck then
        return otherPlayer ~= player
    end
    return player.Team ~= nil and otherPlayer.Team ~= nil and player.Team ~= otherPlayer.Team
end
local function createESP(targetPlayer)
    local box = Instance.new("BoxHandleAdornment")
    box.Name = "ESPBox"
    box.Adornee = targetPlayer.Character
    box.Size = Vector3.new(4, 6, 2)
    box.Color3 = espColor
    box.Transparency = espTransparency
    box.AlwaysOnTop = true
    box.ZIndex = 10
    box.Parent = targetPlayer.Character:FindFirstChild("HumanoidRootPart") or targetPlayer.Character
    espBoxes[targetPlayer] = box
    
    if nameTagsEnabled then
        local billboard = Instance.new("BillboardGui")
        billboard.Name = "ESPName"
        billboard.Adornee = targetPlayer.Character:FindFirstChild("Head")
        billboard.Size = UDim2.new(0, 100, 0, 50)
        billboard.StudsOffset = Vector3.new(0, 2, 0)
        billboard.AlwaysOnTop = true
        billboard.Parent = targetPlayer.Character:FindFirstChild("Head")
        
        local nameLabel = Instance.new("TextLabel")
        nameLabel.Size = UDim2.new(1, 0, 1, 0)
        nameLabel.BackgroundTransparency = 1
        nameLabel.Text = targetPlayer.Name
        nameLabel.TextColor3 = espColor
        nameLabel.TextStrokeTransparency = 0
        nameLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
        nameLabel.Font = Enum.Font.GothamBold
        nameLabel.TextSize = 14
        nameLabel.Parent = billboard
        
        espNames[targetPlayer] = billboard
    end
end

local function removeESP(targetPlayer)
    if espBoxes[targetPlayer] then
        espBoxes[targetPlayer]:Destroy()
        espBoxes[targetPlayer] = nil
    end
    if espNames[targetPlayer] then
        espNames[targetPlayer]:Destroy()
        espNames[targetPlayer] = nil
    end
end

RunService.RenderStepped:Connect(function()
    if espEnabled then
        for _, p in pairs(Players:GetPlayers()) do
            if p ~= player then
                if isESPTarget(p) and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                    if not espBoxes[p] then
                        createESP(p)
                    end
                else
                    removeESP(p)
                end
            end
        end
    else
        for _, p in pairs(Players:GetPlayers()) do
            removeESP(p)
        end
    end
end)
local function getClosestEnemyToMouseRay()
    local closestPlayer = nil
    local shortestDistance = math.huge
    local mouseRay = camera:ScreenPointToRay(mouse.X, mouse.Y)

    for _, otherPlayer in ipairs(Players:GetPlayers()) do
        if otherPlayer ~= player and isEnemy(otherPlayer) and otherPlayer.Character and otherPlayer.Character:FindFirstChild(aimPart) then
            local partPos = otherPlayer.Character[aimPart].Position

            local originToTarget = partPos - mouseRay.Origin
            local projected = mouseRay.Direction.Unit:Dot(originToTarget)
            local closestPoint = mouseRay.Origin + mouseRay.Direction.Unit * projected
            local distance = (partPos - closestPoint).Magnitude

            if distance < shortestDistance then
                shortestDistance = distance
                closestPlayer = otherPlayer
            end
        end
    end

    if lastTarget and lastTarget.Character and lastTarget.Character:FindFirstChild(aimPart) and isEnemy(lastTarget) then
        local partPos = lastTarget.Character[aimPart].Position
        local originToTarget = partPos - mouseRay.Origin
        local projected = mouseRay.Direction.Unit:Dot(originToTarget)
        local closestPoint = mouseRay.Origin + mouseRay.Direction.Unit * projected
        local lastDistance = (partPos - closestPoint).Magnitude

        if lastDistance <= shortestDistance + STICKINESS_THRESHOLD then
            return lastTarget
        end
    end

    return closestPlayer
end

RunService.RenderStepped:Connect(function()
    if aimbotEnabled and aiming then
        local target = getClosestEnemyToMouseRay()
        if target and target.Character and target.Character:FindFirstChild(aimPart) then
            lastTarget = target

            local targetPos = target.Character[aimPart].Position
            local camPos = camera.CFrame.Position
            local direction = (targetPos - camPos).Unit
            camera.CFrame = camera.CFrame:Lerp(CFrame.new(camPos, camPos + direction), 1 - smoothness)
        end
    end
end)
local function createFOVCircle()
    if fovCircle then fovCircle:Remove() end
    fovCircle = Drawing.new("Circle")
    fovCircle.Thickness = 2
    fovCircle.NumSides = 30
    fovCircle.Radius = fovRadius
    fovCircle.Filled = false
    fovCircle.Visible = fovCircleEnabled
    fovCircle.Color = Color3.fromRGB(255, 255, 255)
    fovCircle.Transparency = 0.5
end

RunService.RenderStepped:Connect(function()
    if fovCircleEnabled and fovCircle then
        fovCircle.Position = Vector2.new(mouse.X, mouse.Y)
        fovCircle.Visible = true
    elseif fovCircle then
        fovCircle.Visible = false
    end
end)
UserInputService.InputBegan:Connect(function(input, processed)
    if input.UserInputType == Enum.UserInputType.MouseButton2 and not processed then
        aiming = true
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton2 then
        aiming = false
        lastTarget = nil
    end
end)

local screenGui = Instance.new("ScreenGui", player:WaitForChild("PlayerGui"))
screenGui.Name = "AimbotGUI"

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 350, 0, 380)
frame.Position = UDim2.new(0, 20, 0, 20)
frame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
frame.BorderSizePixel = 0
frame.BackgroundTransparency = 0.1
frame.Parent = screenGui
frame.Active = true
frame.Draggable = true

local uicorner = Instance.new("UICorner", frame)
uicorner.CornerRadius = UDim.new(0, 8)

local shadow = Instance.new("ImageLabel", frame)
shadow.AnchorPoint = Vector2.new(0.5, 0.5)
shadow.Position = UDim2.new(0.5, 0, 0.5, 4)
shadow.Size = UDim2.new(1, 30, 1, 30)
shadow.BackgroundTransparency = 1
shadow.Image = "rbxassetid://1316045217"
shadow.ImageColor3 = Color3.new(0, 0, 0)
shadow.ImageTransparency = 0.5
shadow.ScaleType = Enum.ScaleType.Slice
shadow.SliceCenter = Rect.new(10, 10, 118, 118)
shadow.ZIndex = 0

local title = Instance.new("TextLabel", frame)
title.Size = UDim2.new(1, 0, 0, 35)
title.Position = UDim2.new(0, 0, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Universal Aimbot"
title.Font = Enum.Font.GothamSemibold
title.TextSize = 18
title.TextColor3 = Color3.fromRGB(255, 255, 255)

local tabFrame = Instance.new("Frame", frame)
tabFrame.Size = UDim2.new(1, -20, 0, 30)
tabFrame.Position = UDim2.new(0, 10, 0, 40)
tabFrame.BackgroundTransparency = 1

local function createTabButton(text, position)
    local button = Instance.new("TextButton")
    button.Size = UDim2.new(0.5, -5, 1, 0)
    button.Position = UDim2.new(position * 0.5, position == 1 and 5 or 0, 0, 0)
    button.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    button.TextColor3 = Color3.fromRGB(200, 200, 200)
    button.Text = text
    button.Font = Enum.Font.Gotham
    button.TextSize = 14
    button.AutoButtonColor = false
    local corner = Instance.new("UICorner", button)
    corner.CornerRadius = UDim.new(0, 4)
    button.Parent = tabFrame
    return button
end

local aimbotTab = createTabButton("Aimbot", 0)
local espTab = createTabButton("ESP", 1)

local contentFrame = Instance.new("Frame", frame)
contentFrame.Size = UDim2.new(1, -20, 1, -140)
contentFrame.Position = UDim2.new(0, 10, 0, 80)
contentFrame.BackgroundTransparency = 1
local function switchTab(tabName)
    currentTab = tabName
    
    if tabName == "Aimbot" then
        aimbotTab.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
        aimbotTab.TextColor3 = Color3.fromRGB(255, 255, 255)
        espTab.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
        espTab.TextColor3 = Color3.fromRGB(200, 200, 200)
    else
        espTab.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
        espTab.TextColor3 = Color3.fromRGB(255, 255, 255)
        aimbotTab.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
        aimbotTab.TextColor3 = Color3.fromRGB(200, 200, 200)
    end
    
    for _, child in pairs(contentFrame:GetChildren()) do
        child:Destroy()
    end
    
    if tabName == "Aimbot" then
        createAimbotContent()
    else
        createESPContent()
    end
end

local function createButton(text, yPos, parent)
    local button = Instance.new("TextButton")
    button.Size = UDim2.new(1, 0, 0, 32)
    button.Position = UDim2.new(0, 0, 0, yPos)
    button.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
    button.TextColor3 = Color3.fromRGB(255, 255, 255)
    button.Text = text
    button.Font = Enum.Font.Gotham
    button.TextSize = 16
    button.AutoButtonColor = true
    local corner = Instance.new("UICorner", button)
    corner.CornerRadius = UDim.new(0, 6)
    local stroke = Instance.new("UIStroke", button)
    stroke.Thickness = 1
    stroke.Color = Color3.fromRGB(80, 80, 80)
    button.Parent = parent or contentFrame
    return button
end

local function createSlider(labelText, minVal, maxVal, currentVal, yPos, callback)
    local sliderFrame = Instance.new("Frame")
    sliderFrame.Size = UDim2.new(1, 0, 0, 50)
    sliderFrame.Position = UDim2.new(0, 0, 0, yPos)
    sliderFrame.BackgroundTransparency = 1
    sliderFrame.Parent = contentFrame
    
    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(1, 0, 0, 20)
    label.Position = UDim2.new(0, 0, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = labelText .. ": " .. math.floor(currentVal * 100) .. "%"
    label.Font = Enum.Font.Gotham
    label.TextSize = 14
    label.TextColor3 = Color3.fromRGB(255, 255, 255)
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = sliderFrame
    
    local sliderBg = Instance.new("Frame")
    sliderBg.Size = UDim2.new(1, 0, 0, 20)
    sliderBg.Position = UDim2.new(0, 0, 0, 25)
    sliderBg.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    local bgCorner = Instance.new("UICorner", sliderBg)
    bgCorner.CornerRadius = UDim.new(0, 10)
    sliderBg.Parent = sliderFrame
    
    local sliderFill = Instance.new("Frame")
    sliderFill.Size = UDim2.new(currentVal, 0, 1, 0)
    sliderFill.Position = UDim2.new(0, 0, 0, 0)
    sliderFill.BackgroundColor3 = Color3.fromRGB(0, 150, 255)
    local fillCorner = Instance.new("UICorner", sliderFill)
    fillCorner.CornerRadius = UDim.new(0, 10)
    sliderFill.Parent = sliderBg
    
    local sliderButton = Instance.new("TextButton")
    sliderButton.Size = UDim2.new(1, 0, 1, 0)
    sliderButton.Position = UDim2.new(0, 0, 0, 0)
    sliderButton.BackgroundTransparency = 1
    sliderButton.Text = ""
    sliderButton.Parent = sliderBg
    
    local dragging = false
    
    sliderButton.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
        end
    end)
    
    sliderButton.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = false
        end
    end)
    
    UserInputService.InputChanged:Connect(function(input)
        if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
            local relativeX = math.clamp((mouse.X - sliderBg.AbsolutePosition.X) / sliderBg.AbsoluteSize.X, 0, 1)
            local value = minVal + (maxVal - minVal) * relativeX
            
            sliderFill.Size = UDim2.new(relativeX, 0, 1, 0)
            label.Text = labelText .. ": " .. math.floor(value * 100) .. "%"
            
            callback(value)
        end
    end)
    
    return sliderFrame
end

local function createNumberSlider(labelText, minVal, maxVal, currentVal, yPos, callback)
    local sliderFrame = Instance.new("Frame")
    sliderFrame.Size = UDim2.new(1, 0, 0, 50)
    sliderFrame.Position = UDim2.new(0, 0, 0, yPos)
    sliderFrame.BackgroundTransparency = 1
    sliderFrame.Parent = contentFrame
    
    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(1, 0, 0, 20)
    label.Position = UDim2.new(0, 0, 0, 0)
    label.BackgroundTransparency = 1
    label.Text = labelText .. ": " .. math.floor(currentVal)
    label.Font = Enum.Font.Gotham
    label.TextSize = 14
    label.TextColor3 = Color3.fromRGB(255, 255, 255)
    label.TextXAlignment = Enum.TextXAlignment.Left
    label.Parent = sliderFrame
    
    local sliderBg = Instance.new("Frame")
    sliderBg.Size = UDim2.new(1, 0, 0, 20)
    sliderBg.Position = UDim2.new(0, 0, 0, 25)
    sliderBg.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
    local bgCorner = Instance.new("UICorner", sliderBg)
    bgCorner.CornerRadius = UDim.new(0, 10)
    sliderBg.Parent = sliderFrame
    
    local sliderFill = Instance.new("Frame")
    local fillPercent = (currentVal - minVal) / (maxVal - minVal)
    sliderFill.Size = UDim2.new(fillPercent, 0, 1, 0)
    sliderFill.Position = UDim2.new(0, 0, 0, 0)
    sliderFill.BackgroundColor3 = Color3.fromRGB(0, 150, 255)
    local fillCorner = Instance.new("UICorner", sliderFill)
    fillCorner.CornerRadius = UDim.new(0, 10)
    sliderFill.Parent = sliderBg
    
    local sliderButton = Instance.new("TextButton")
    sliderButton.Size = UDim2.new(1, 0, 1, 0)
    sliderButton.Position = UDim2.new(0, 0, 0, 0)
    sliderButton.BackgroundTransparency = 1
    sliderButton.Text = ""
    sliderButton.Parent = sliderBg
    
    local dragging = false
    
    sliderButton.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
        end
    end)
    
    sliderButton.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = false
        end
    end)
    
    UserInputService.InputChanged:Connect(function(input)
        if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
            local relativeX = math.clamp((mouse.X - sliderBg.AbsolutePosition.X) / sliderBg.AbsoluteSize.X, 0, 1)
            local value = minVal + (maxVal - minVal) * relativeX
            
            sliderFill.Size = UDim2.new(relativeX, 0, 1, 0)
            label.Text = labelText .. ": " .. math.floor(value)
            
            callback(value)
        end
    end)
    
    return sliderFrame
end

function createAimbotContent()
    local toggleBtn = createButton("Aimbot: OFF", 0)
    toggleBtn.MouseButton1Click:Connect(function()
        aimbotEnabled = not aimbotEnabled
        toggleBtn.Text = "Aimbot: " .. (aimbotEnabled and "ON" or "OFF")
        if aimbotEnabled and not fovCircle then
            createFOVCircle()
        end
    end)
    
    local teamBtn = createButton("Team Check: ON", 35)
    teamBtn.MouseButton1Click:Connect(function()
        teamCheck = not teamCheck
        teamBtn.Text = "Team Check: " .. (teamCheck and "ON" or "OFF")
    end)
    
    local partDropdown = createButton("Aim Part: Head", 70)
    local parts = {"Head", "HumanoidRootPart", "Torso", "UpperTorso", "LowerTorso"}
    local currentIndex = 1
    partDropdown.MouseButton1Click:Connect(function()
        currentIndex = currentIndex + 1
        if currentIndex > #parts then currentIndex = 1 end
        aimPart = parts[currentIndex]
        partDropdown.Text = "Aim Part: " .. aimPart
    end)
    
    createSlider("Smoothness", 0.05, 0.95, smoothness, 110, function(value)
        smoothness = value
    end)
    
    createNumberSlider("FOV Radius", 50, 300, fovRadius, 170, function(value)
        fovRadius = value
        if fovCircle then
            fovCircle.Radius = fovRadius
        end
    end)
    
    local fovBtn = createButton("FOV Circle: OFF", 230)
    fovBtn.MouseButton1Click:Connect(function()
        fovCircleEnabled = not fovCircleEnabled
        fovBtn.Text = "FOV Circle: " .. (fovCircleEnabled and "ON" or "OFF")
        if not fovCircle then createFOVCircle() end
    end)
end

function createESPContent()
    local espToggle = createButton("ESP: ON", 0)
    espToggle.MouseButton1Click:Connect(function()
        espEnabled = not espEnabled
        espToggle.Text = "ESP: " .. (espEnabled and "ON" or "OFF")
    end)
    
    local espTeamBtn = createButton("ESP Team Check: ON", 35)
    espTeamBtn.MouseButton1Click:Connect(function()
        espTeamCheck = not espTeamCheck
        espTeamBtn.Text = "ESP Team Check: " .. (espTeamCheck and "ON" or "OFF")
        
        for player, _ in pairs(espBoxes) do
            removeESP(player)
        end
    end)
    
    local colorBtn = createButton("Color: Red", 70)
    local colors = {
        {name = "Red", color = Color3.new(1, 0, 0)},
        {name = "Green", color = Color3.new(0, 1, 0)},
        {name = "Blue", color = Color3.new(0, 0, 1)},
        {name = "Yellow", color = Color3.new(1, 1, 0)},
        {name = "Purple", color = Color3.new(1, 0, 1)},
        {name = "Cyan", color = Color3.new(0, 1, 1)},
        {name = "White", color = Color3.new(1, 1, 1)}
    }
    local colorIndex = 1
    colorBtn.MouseButton1Click:Connect(function()
        colorIndex = colorIndex + 1
        if colorIndex > #colors then colorIndex = 1 end
        espColor = colors[colorIndex].color
        colorBtn.Text = "Color: " .. colors[colorIndex].name
        
        for _, box in pairs(espBoxes) do
            if box then box.Color3 = espColor end
        end
        for _, nameGui in pairs(espNames) do
            if nameGui and nameGui:FindFirstChild("TextLabel") then
                nameGui.TextLabel.TextColor3 = espColor
            end
        end
    end)
    
    createSlider("Transparency", 0.1, 0.9, espTransparency, 110, function(value)
        espTransparency = value
        for _, box in pairs(espBoxes) do
            if box then box.Transparency = espTransparency end
        end
    end)
    
    local nameBtn = createButton("Names: OFF", 170)
    nameBtn.MouseButton1Click:Connect(function()
        nameTagsEnabled = not nameTagsEnabled
        nameBtn.Text = "Names: " .. (nameTagsEnabled and "ON" or "OFF")
        
        for player, _ in pairs(espBoxes) do
            removeESP(player)
        end
    end)
end
aimbotTab.MouseButton1Click:Connect(function()
    switchTab("Aimbot")
end)

espTab.MouseButton1Click:Connect(function()
    switchTab("ESP")
end)

local credit = Instance.new("TextLabel", frame)
credit.Size = UDim2.new(1, 0, 0, 20)
credit.Position = UDim2.new(0, 0, 1, -20)
credit.BackgroundTransparency = 1
credit.Text = "Universal Aimbot v1.1"
credit.Font = Enum.Font.Gotham
credit.TextSize = 12
credit.TextColor3 = Color3.fromRGB(140, 140, 140)

createFOVCircle()
switchTab("Aimbot")

Features & Information

Has aimbot and ESP (hold right click for aimbot) Update: FOV circle works.

Community Comments (1)

BoilerMakeItBoilerMakeItMar 1, 2026

seems cool

More Scripts for Universal Scripts