Skip to content
RoRoScripts
aimbot preview
Unknown

aimbot

Script
Arsenal7mrqnygbjqzcnabj1nkv
Views
93K
Likes
2
Dislikes
3
Added
Script
local settings = {
    aimbotEnabled = false,
    aimbotKey = Enum.UserInputType.MouseButton2,
    fovRadius = 150,
    fovColor = Color3.fromRGB(255, 255, 255),
    fovThickness = 2,
    aimPart = "Head",
    teamCheck = true,
    useWhitelistedTeams = false,
    whitelistedTeams = {"Team1", "Team2"},
    whitelistedPlayers = {"Player1", "Player2"},
    espFontSize = 16,
    espEnabled = true,
    wallCheckEnabled = true,
}

local fovCircle = Drawing.new("Circle")
fovCircle.Visible = false
fovCircle.Radius = settings.fovRadius
fovCircle.Color = settings.fovColor
fovCircle.Thickness = settings.fovThickness
fovCircle.Position = Vector2.new(workspace.CurrentCamera.ViewportSize.X / 2, workspace.CurrentCamera.ViewportSize.Y / 2)

local currentTarget = nil
local espObjects = {}

local function isInFOV(targetPosition, camera)
    local screenPoint = camera:WorldToViewportPoint(targetPosition)
    local screenCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2)
    local distanceFromCenter = (Vector2.new(screenPoint.X, screenPoint.Y) - screenCenter).Magnitude
    return screenPoint.Z > 0 and distanceFromCenter < settings.fovRadius
end

local function shouldAvoidAimingAt(player)
    if settings.teamCheck then
        if player.Team then
            if player.Team == game.Players.LocalPlayer.Team then
                return true
            end
            if settings.useWhitelistedTeams then
                for _, teamName in pairs(settings.whitelistedTeams) do
                    if player.Team.Name == teamName then
                        return true
                    end
                end
            end
        end
    end
    for _, playerName in pairs(settings.whitelistedPlayers) do
        if player.Name == playerName then
            return true
        end
    end
    return false
end

local function isVisible(targetPart)
    if not settings.wallCheckEnabled then
        return true
    end
    
    local origin = workspace.CurrentCamera.CFrame.Position
    local direction = (targetPart.Position - origin).unit * 1000
    local ray = Ray.new(origin, direction)
    local hit, _ = workspace:FindPartOnRayWithIgnoreList(ray, {workspace.CurrentCamera, game.Players.LocalPlayer.Character})
    
    return hit and hit:IsDescendantOf(targetPart.Parent)
end

local function findClosestTarget(camera)
    local closestPlayer = nil
    local closestDistance = settings.fovRadius

    for _, player in pairs(game.Players:GetPlayers()) do
        if player ~= game.Players.LocalPlayer and not shouldAvoidAimingAt(player) then
            local character = player.Character
            if character and character:FindFirstChild("HumanoidRootPart") and character:FindFirstChild(settings.aimPart) then
                local targetPosition = character.HumanoidRootPart.Position
                if isInFOV(targetPosition, camera) and isVisible(character[settings.aimPart]) then
                    local screenPoint = camera:WorldToViewportPoint(targetPosition)
                    local distanceFromCenter = (Vector2.new(screenPoint.X, screenPoint.Y) - fovCircle.Position).Magnitude
                    if distanceFromCenter < closestDistance then
                        closestPlayer = character
                        closestDistance = distanceFromCenter
                    end
                end
            end
        end
    end

    return closestPlayer
end

local function aimAt(target)
    if not target then return end
    local targetPart = target:FindFirstChild(settings.aimPart)
    if not targetPart then return end
    local targetPosition = targetPart.Position
    local camera = workspace.CurrentCamera
    
    local aimDirection = (targetPosition - camera.CFrame.Position).unit
    local newCFrame = CFrame.new(camera.CFrame.Position, camera.CFrame.Position + aimDirection)
    
    camera.CFrame = newCFrame
end

local function createESP(player)
    local espBox = Drawing.new("Square")
    espBox.Visible = false
    espBox.Color = settings.fovColor
    espBox.Thickness = 2
    espBox.Filled = false

    local espText = Drawing.new("Text")
    espText.Visible = false
    espText.Color = settings.fovColor
    espText.Size = settings.espFontSize
    espText.Center = true
    espText.Outline = true
    espText.Font = Drawing.Fonts.UI

    espObjects[player] = {box = espBox, text = espText}
end

local function updateESP()
    for _, player in pairs(game.Players:GetPlayers()) do
        if player ~= game.Players.LocalPlayer and player.Team ~= game.Players.LocalPlayer.Team then
            if not espObjects[player] then
                createESP(player)
            end
            
            local character = player.Character
            if character and character:FindFirstChild("HumanoidRootPart") then
                local humanoidRootPart = character.HumanoidRootPart
                local screenPoint = workspace.CurrentCamera:WorldToViewportPoint(humanoidRootPart.Position)

                if screenPoint.Z > 0 then
                    local boxWidth = 50
                    local boxHeight = 75

                    espObjects[player].box.Position = Vector2.new(screenPoint.X - boxWidth / 2, screenPoint.Y - boxHeight / 2)
                    espObjects[player].box.Size = Vector2.new(boxWidth, boxHeight)
                    espObjects[player].box.Visible = true

                    espObjects[player].text.Position = Vector2.new(screenPoint.X, screenPoint.Y - boxHeight / 2 - 20)
                    espObjects[player].text.Text = player.Name
                    espObjects[player].text.Visible = true
                else
                    espObjects[player].box.Visible = false
                    espObjects[player].text.Visible = false
                end
            else
                espObjects[player].box.Visible = false
                espObjects[player].text.Visible = false
            end
        elseif espObjects[player] then
            espObjects[player].box.Visible = false
            espObjects[player].text.Visible = false
        end
    end
end

game:GetService("RunService").RenderStepped:Connect(function()
    if settings.aimbotEnabled then
        fovCircle.Position = Vector2.new(workspace.CurrentCamera.ViewportSize.X / 2, workspace.CurrentCamera.ViewportSize.Y / 2)
        fovCircle.Visible = true

        local camera = workspace.CurrentCamera

        if currentTarget and currentTarget.Parent then
            if isInFOV(currentTarget.HumanoidRootPart.Position, camera) and isVisible(currentTarget[settings.aimPart]) then
                aimAt(currentTarget)
            else
                currentTarget = findClosestTarget(camera)
                if currentTarget then
                    aimAt(currentTarget)
                end
            end
        else
            currentTarget = findClosestTarget(camera)
            if currentTarget then
                aimAt(currentTarget)
            end
        end
    else
        fovCircle.Visible = false
        currentTarget = nil
    end

    if settings.espEnabled then
        updateESP()
    end
end)

game:GetService("UserInputService").InputBegan:Connect(function(input)
    if input.UserInputType == settings.aimbotKey then
        settings.aimbotEnabled = not settings.aimbotEnabled
        fovCircle.Visible = settings.aimbotEnabled
        if not settings.aimbotEnabled then
            currentTarget = nil
        end
    end
end)

game.Players.PlayerRemoving:Connect(function(player)
    if espObjects[player] then
        espObjects[player].box:Remove()
        espObjects[player].text:Remove()
        espObjects[player] = nil
    end
end)

Features

  • esp
  • aimbot
  • wallcheck
  • press rightclick once and then it automatically locks on players