Universal Aimbot ESP (Updated)
Key RequiredUniversal

Universal Aimbot ESP (Updated)

Universal ScriptJubaJuba 1.7K views 21 executesUpdated Sep 3, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•223 lines (8694 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer

local AimEnabled = true
local AimSensitivity = 1.5
local AimLockPart = "Head"
local AimKey = Enum.UserInputType.MouseButton2
local FOV = 250
local FOVColor = Color3.fromRGB(255, 255, 255)
local ESPColor = Color3.fromRGB(255, 255, 255)
local ESPThickness = 4
local Running = false
local LockedTarget = nil

local function NewLine(thickness, color)
    local line = Drawing.new("Line")
    line.Visible = false
    line.Thickness = thickness
    line.Color = color
    line.Transparency = 1
    return line
end

local function NewQuad(thickness, color)
    local quad = Drawing.new("Quad")
    quad.Visible = false
    quad.Thickness = thickness
    quad.Color = color
    quad.Transparency = 1
    return quad
end

local function NewText(text, color)
    local t = Drawing.new("Text")
    t.Visible = false
    t.Color = color
    t.Size = 16
    t.Center = true
    t.Outline = true
    t.Font = 2
    t.Text = text
    return t
end

local function NewCircle(radius, color)
    local c = Drawing.new("Circle")
    c.Visible = true
    c.Color = color
    c.Radius = radius
    c.Thickness = 1.5
    c.Filled = false
    return c
end

local FOVCircle = NewCircle(FOV, FOVColor)
FOVCircle.Position = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)

local function DrawESP(plr)
    repeat wait() until plr.Character and plr.Character:FindFirstChild("Humanoid") and plr.Character:FindFirstChild("HumanoidRootPart")
    local skeleton = {
        Head_Torso = NewLine(ESPThickness, ESPColor),
        Torso_Legs = NewLine(ESPThickness, ESPColor),
        LeftArm = NewLine(ESPThickness, ESPColor),
        RightArm = NewLine(ESPThickness, ESPColor),
        LeftLeg = NewLine(ESPThickness, ESPColor),
        RightLeg = NewLine(ESPThickness, ESPColor)
    }
    local box = NewQuad(ESPThickness, ESPColor)
    local nameTag = NewText(plr.Name, ESPColor)

    RunService.RenderStepped:Connect(function()
        local char = plr.Character
        local hum = char and char:FindFirstChild("Humanoid")
        local HRP = char and char:FindFirstChild("HumanoidRootPart")
        if char and hum and hum.Health > 0 and HRP then
            local onScreen = false
            local function GetPos(part)
                local pos, vis = Camera:WorldToViewportPoint(part.Position)
                onScreen = onScreen or vis
                return pos
            end

            local head = char:FindFirstChild("Head")
            local torso = char:FindFirstChild("UpperTorso") or char:FindFirstChild("Torso")
            local leftArm = char:FindFirstChild("LeftUpperArm") or char:FindFirstChild("Left Arm")
            local rightArm = char:FindFirstChild("RightUpperArm") or char:FindFirstChild("Right Arm")
            local leftLeg = char:FindFirstChild("LeftUpperLeg") or char:FindFirstChild("Left Leg")
            local rightLeg = char:FindFirstChild("RightUpperLeg") or char:FindFirstChild("Right Leg")
            local leftFoot = char:FindFirstChild("LeftFoot") or char:FindFirstChild("Left Leg")
            local rightFoot = char:FindFirstChild("RightFoot") or char:FindFirstChild("Right Leg")

            if head and torso then
                skeleton.Head_Torso.From = Vector2.new(GetPos(head).X, GetPos(head).Y)
                skeleton.Head_Torso.To = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
            end
            if torso and leftLeg then
                skeleton.Torso_Legs.From = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
                skeleton.Torso_Legs.To = Vector2.new(GetPos(leftLeg).X, GetPos(leftLeg).Y)
            end
            if torso and leftArm then
                skeleton.LeftArm.From = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
                skeleton.LeftArm.To = Vector2.new(GetPos(leftArm).X, GetPos(leftArm).Y)
            end
            if torso and rightArm then
                skeleton.RightArm.From = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
                skeleton.RightArm.To = Vector2.new(GetPos(rightArm).X, GetPos(rightArm).Y)
            end
            if torso and leftFoot then
                skeleton.LeftLeg.From = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
                skeleton.LeftLeg.To = Vector2.new(GetPos(leftFoot).X, GetPos(leftFoot).Y)
            end
            if torso and rightFoot then
                skeleton.RightLeg.From = Vector2.new(GetPos(torso).X, GetPos(torso).Y)
                skeleton.RightLeg.To = Vector2.new(GetPos(rightFoot).X, GetPos(rightFoot).Y)
            end

            local minX, minY, maxX, maxY = math.huge, math.huge, -math.huge, -math.huge
            for _, part in pairs(char:GetChildren()) do
                if part:IsA("BasePart") then
                    local pos, vis = Camera:WorldToViewportPoint(part.Position)
                    if vis then
                        onScreen = true
                        minX = math.min(minX, pos.X)
                        minY = math.min(minY, pos.Y)
                        maxX = math.max(maxX, pos.X)
                        maxY = math.max(maxY, pos.Y)
                    end
                end
            end

            if minX ~= math.huge and onScreen then
                local centerX = (minX + maxX) / 2
                local centerY = (minY + maxY) / 2
                local width = (maxX - minX)
                local height = (maxY - minY)

                box.PointA = Vector2.new(centerX - width/2, centerY - height/2)
                box.PointB = Vector2.new(centerX + width/2, centerY - height/2)
                box.PointC = Vector2.new(centerX + width/2, centerY + height/2)
                box.PointD = Vector2.new(centerX - width/2, centerY + height/2)
                box.Visible = true

                nameTag.Position = Vector2.new(centerX, centerY - height/2 - 16)
                nameTag.Visible = true

                for _, v in pairs(skeleton) do v.Visible = true end
            else
                box.Visible = false
                nameTag.Visible = false
                for _, v in pairs(skeleton) do v.Visible = false end
            end
        else
            box.Visible = false
            nameTag.Visible = false
            for _, v in pairs(skeleton) do v.Visible = false end
        end
    end)
end

local function GetClosestPlayer()
    if LockedTarget and LockedTarget.Character and LockedTarget.Character:FindFirstChild("Humanoid") 
       and LockedTarget.Character.Humanoid.Health > 0 then
        return LockedTarget
    end

    local closest = nil
    local shortestDistance = FOV
    local mousePos = UserInputService:GetMouseLocation()
    for _, plr in pairs(Players:GetPlayers()) do
        if plr ~= LocalPlayer and plr.Character and plr.Character:FindFirstChild("Humanoid") 
           and plr.Character.Humanoid.Health > 0 and plr.Character:FindFirstChild(AimLockPart) then
            local targetPart = plr.Character[AimLockPart]
            local pos = Camera:WorldToViewportPoint(targetPart.Position)
            local distance = (Vector2.new(pos.X, pos.Y) - Vector2.new(mousePos.X, mousePos.Y)).Magnitude
            if distance < shortestDistance then
                shortestDistance = distance
                closest = plr
            end
        end
    end
    return closest
end

RunService.RenderStepped:Connect(function()
    FOVCircle.Position = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
    if Running and AimEnabled then
        LockedTarget = GetClosestPlayer()
        if LockedTarget and LockedTarget.Character and LockedTarget.Character:FindFirstChild(AimLockPart) then
            local targetPos = Camera:WorldToViewportPoint(LockedTarget.Character[AimLockPart].Position)
            local mousePos = UserInputService:GetMouseLocation()
            local deltaX = (targetPos.X - mousePos.X) / AimSensitivity
            local deltaY = (targetPos.Y - mousePos.Y) / AimSensitivity
            mousemoverel(deltaX, deltaY)
        end
    end
end)

UserInputService.InputBegan:Connect(function(input)
    if input.UserInputType == AimKey then
        Running = true
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == AimKey then
        Running = false
        LockedTarget = nil
    end
end)

for _, plr in pairs(Players:GetPlayers()) do
    if plr ~= LocalPlayer then
        DrawESP(plr)
    end
end
Players.PlayerAdded:Connect(function(plr)
    if plr ~= LocalPlayer then
        DrawESP(plr)
    end
end)

Features & Information

If u want me to add new things write it in the comments! Aimbot ESP Box Name Skeleton

Community Comments (3)

JubaJubaSep 3, 2025

It doesnt have a GUi and aimbot activates on M2

pffryupffryuSep 7, 2025

aimbot is good but i dont want esp can you do only aimbot

Replying to @pffryu
JubaJubaSep 7, 2025

@pffryu ii upgraded the script because the esp was laggy do u want that version and try it

More Scripts for Universal Scripts