third person aimbot by grok
Key RequiredUniversal

third person aimbot by grok

Universal Scriptm4arm4ar 7.5K views 1.2K executesUpdated Nov 6, 2025
2.5/ 5(2 votes)
1150% Positive
Lua Script•633 lines (24277 chars)
local Settings = {
    Enabled = false,
    Key = "Q", -- default (now stored as Enum.KeyCode.Name string)
    Prediction = 0.135,
    AimPart = "Head",
    FOV = 180,
    OffsetX = 0,
    OffsetY = 58,
    Smoothness = 5,
    TeamCheck = true,
    FovVisible = true,
    WallCheck = true,
    AimNPCs = false,
    MaxDistance = 500,
    InfDistance = false,
    TeamWhitelist = {},
    ESPOpposite = false
}

-- normalize key to uppercase Enum.KeyCode name format
Settings.Key = tostring(Settings.Key):upper()

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Camera = workspace.CurrentCamera
local Mouse = Players.LocalPlayer:GetMouse()
local LocalPlayer = Players.LocalPlayer
local Target = nil
local RightClick = false

local displayParts = {"Head", "Torso", "HumanoidRootPart", "Right Arm", "Left Arm", "Right Leg", "Left Leg", "Right Hand"}
local actualParts = {"Head", "Torso", "HumanoidRootPart", "RightUpperArm", "LeftUpperArm", "RightUpperLeg", "LeftUpperLeg", "RightHand"}
local currentPartIndex = 1

local okDrawing, Drawing = pcall(function() return Drawing end)
if not okDrawing then
    Drawing = nil
end

local FOVCircle, CenterDot
if Drawing then
    FOVCircle = Drawing.new("Circle")
    FOVCircle.Radius = Settings.FOV
    FOVCircle.Color = Color3.new(1,1,1)
    FOVCircle.Thickness = 1.5
    FOVCircle.Filled = false
    FOVCircle.Transparency = 1
    FOVCircle.Visible = false

    CenterDot = Drawing.new("Circle")
    CenterDot.Radius = 2
    CenterDot.Color = Color3.new(1,1,1)
    CenterDot.Filled = true
    CenterDot.Transparency = 1
    CenterDot.Visible = false
end

-- Create a storage folder in CoreGui for highlights (safer and easier cleanup)
local CoreGui = game:GetService("CoreGui")
local STORAGE_NAME = "Highlight_Storage_AIMBOT"
local storage = CoreGui:FindFirstChild(STORAGE_NAME)
if not storage then
    storage = Instance.new("Folder")
    storage.Name = STORAGE_NAME
    storage.Parent = CoreGui
end

local Gui = Instance.new("ScreenGui")
Gui.Name = "AimbotGUI"
Gui.ResetOnSpawn = false
Gui.Parent = game:GetService("CoreGui")

local Frame = Instance.new("Frame")
Frame.Size = UDim2.new(0, 200, 0, 550)
Frame.Position = UDim2.new(0, 10, 0.5, -275)
Frame.BackgroundColor3 = Color3.fromRGB(30,30,30)
Frame.BorderSizePixel = 2
Frame.BorderColor3 = Color3.fromRGB(100,100,100)
Frame.Active = true
Frame.Draggable = true
Frame.Visible = true
Frame.Parent = Gui

local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1,0,0,25)
Title.BackgroundTransparency = 1
Title.Text = "Aimbot Settings"
Title.TextColor3 = Color3.new(1,1,1)
Title.Font = Enum.Font.SourceSansBold
Title.TextSize = 16
Title.Parent = Frame

-- Key bind button (placed top-right of frame, does not overlap existing labels)
local KeyBindButton = Instance.new("TextButton")
KeyBindButton.Size = UDim2.new(0, 80, 0, 20)
KeyBindButton.Position = UDim2.new(1, -90, 0, 4)
KeyBindButton.BackgroundColor3 = Color3.fromRGB(60,60,60)
KeyBindButton.TextColor3 = Color3.new(1,1,1)
KeyBindButton.Font = Enum.Font.SourceSans
KeyBindButton.TextSize = 14
KeyBindButton.Text = "Key: " .. (Settings.Key or "Q")
KeyBindButton.Parent = Frame

local keyCapturing = false

KeyBindButton.MouseButton1Click:Connect(function()
    if keyCapturing then return end
    keyCapturing = true
    KeyBindButton.Text = "Press a key..."
    -- temporary capture connection
    local conn
    conn = UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if gameProcessed then return end
        if input.UserInputType == Enum.UserInputType.Keyboard then
            local name = input.KeyCode and input.KeyCode.Name
            if name and name ~= "" then
                Settings.Key = tostring(name):upper()
                KeyBindButton.Text = "Key: " .. Settings.Key
            end
            keyCapturing = false
            conn:Disconnect()
        end
    end)
end)

local function CreateLabel(text, posY)
    local l = Instance.new("TextLabel")
    l.Size = UDim2.new(1,0,0,20)
    l.Position = UDim2.new(0,0,0,posY)
    l.BackgroundTransparency = 1
    l.Text = text
    l.TextColor3 = Color3.new(1,1,1)
    l.Font = Enum.Font.SourceSans
    l.TextSize = 14
    l.Parent = Frame
    return l
end

local YLabel = CreateLabel("Up/Down: 58", 25)
local XLabel = CreateLabel("Left/Right: 0", 70)
local FOVLabel = CreateLabel("FOV: 180", 115)
local SLabel = CreateLabel("Smooth: 5", 160)
local DLabel = CreateLabel("Max Dist: 500", 205)
local PLabel = CreateLabel("Predict: 0.135", 250)

local function CreateSlider(posY, fillColor)
    local btn = Instance.new("TextButton")
    btn.Size = UDim2.new(1,-20,0,20)
    btn.Position = UDim2.new(0,10,0,posY)
    btn.BackgroundColor3 = Color3.fromRGB(60,60,60)
    btn.Text = ""
    btn.BorderSizePixel = 0
    btn.Parent = Frame
    local fill = Instance.new("Frame")
    fill.Size = UDim2.new(0.5,0,1,0)
    fill.BackgroundColor3 = fillColor
    fill.BorderSizePixel = 0
    fill.Parent = btn
    return btn, fill
end

local YSlider, YFill = CreateSlider(45, Color3.fromRGB(0,170,255))
local XSlider, XFill = CreateSlider(90, Color3.fromRGB(0,170,255))
local FOVSlider, FOVFill = CreateSlider(135, Color3.fromRGB(0,170,255))
local SSlider, SFill = CreateSlider(180, Color3.fromRGB(0,255,0))
local DSlider, DFill = CreateSlider(225, Color3.fromRGB(255,100,100))
local PSlider, PFill = CreateSlider(270, Color3.fromRGB(255,200,0))

local AimPartLabel = CreateLabel("Aim Part: Head", 295)
local AimPartToggle = Instance.new("TextButton")
AimPartToggle.Size = UDim2.new(1,-20,0,20)
AimPartToggle.Position = UDim2.new(0,10,0,315)
AimPartToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
AimPartToggle.Text = "Aim Part: Head"
AimPartToggle.TextColor3 = Color3.new(1,1,1)
AimPartToggle.Font = Enum.Font.SourceSans
AimPartToggle.TextSize = 14
AimPartToggle.BorderSizePixel = 0
AimPartToggle.Parent = Frame

AimPartToggle.MouseButton1Click:Connect(function()
    currentPartIndex = currentPartIndex + 1
    if currentPartIndex > #displayParts then currentPartIndex = 1 end
    Settings.AimPart = actualParts[currentPartIndex]
    AimPartToggle.Text = "Aim Part: " .. displayParts[currentPartIndex]
    AimPartLabel.Text = "Aim Part: " .. displayParts[currentPartIndex]
end)

local WhitelistLabel = CreateLabel("Whitelist Teams: None", 340)
local TeamNameBox = Instance.new("TextBox")
TeamNameBox.Size = UDim2.new(0.6,0,0,20)
TeamNameBox.Position = UDim2.new(0,10,0,360)
TeamNameBox.BackgroundColor3 = Color3.fromRGB(60,60,60)
TeamNameBox.PlaceholderText = "Team name (e.g., Blue)"
TeamNameBox.TextColor3 = Color3.new(1,1,1)
TeamNameBox.Font = Enum.Font.SourceSans
TeamNameBox.TextSize = 14
TeamNameBox.BorderSizePixel = 0
TeamNameBox.Parent = Frame

local AddTeamButton = Instance.new("TextButton")
AddTeamButton.Size = UDim2.new(0.4,0,0,20)
AddTeamButton.Position = UDim2.new(0.6,0,0,360)
AddTeamButton.BackgroundColor3 = Color3.fromRGB(0,170,0)
AddTeamButton.Text = "Add"
AddTeamButton.TextColor3 = Color3.new(1,1,1)
AddTeamButton.Font = Enum.Font.SourceSans
AddTeamButton.TextSize = 14
AddTeamButton.BorderSizePixel = 0
AddTeamButton.Parent = Frame

local ClearWhitelistButton = Instance.new("TextButton")
ClearWhitelistButton.Size = UDim2.new(1,-20,0,20)
ClearWhitelistButton.Position = UDim2.new(0,10,0,380)
ClearWhitelistButton.BackgroundColor3 = Color3.fromRGB(200,60,60)
ClearWhitelistButton.Text = "Clear"
ClearWhitelistButton.TextColor3 = Color3.new(1,1,1)
ClearWhitelistButton.Font = Enum.Font.SourceSans
ClearWhitelistButton.TextSize = 14
ClearWhitelistButton.BorderSizePixel = 0
ClearWhitelistButton.Parent = Frame

local TeamCheckToggle = Instance.new("TextButton")
TeamCheckToggle.Size = UDim2.new(1,-20,0,20)
TeamCheckToggle.Position = UDim2.new(0,10,0,410)
TeamCheckToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
TeamCheckToggle.Text = "Team Check: ON"
TeamCheckToggle.TextColor3 = Color3.new(1,1,1)
TeamCheckToggle.Font = Enum.Font.SourceSans
TeamCheckToggle.TextSize = 14
TeamCheckToggle.BorderSizePixel = 0
TeamCheckToggle.Parent = Frame

local FovVisibleToggle = Instance.new("TextButton")
FovVisibleToggle.Size = UDim2.new(1,-20,0,20)
FovVisibleToggle.Position = UDim2.new(0,10,0,435)
FovVisibleToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
FovVisibleToggle.Text = "FOV Visible: ON"
FovVisibleToggle.TextColor3 = Color3.new(1,1,1)
FovVisibleToggle.Font = Enum.Font.SourceSans
FovVisibleToggle.TextSize = 14
FovVisibleToggle.BorderSizePixel = 0
FovVisibleToggle.Parent = Frame

local ESPToggle = Instance.new("TextButton")
ESPToggle.Size = UDim2.new(1,-20,0,20)
ESPToggle.Position = UDim2.new(0,10,0,460)
ESPToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
ESPToggle.Text = "ESP Opposite: OFF"
ESPToggle.TextColor3 = Color3.new(1,1,1)
ESPToggle.Font = Enum.Font.SourceSans
ESPToggle.TextSize = 14
ESPToggle.BorderSizePixel = 0
ESPToggle.Parent = Frame

local WallCheckToggle = Instance.new("TextButton")
WallCheckToggle.Size = UDim2.new(1,-20,0,20)
WallCheckToggle.Position = UDim2.new(0,10,0,485)
WallCheckToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
WallCheckToggle.Text = "Wall Check: ON"
WallCheckToggle.TextColor3 = Color3.new(1,1,1)
WallCheckToggle.Font = Enum.Font.SourceSans
WallCheckToggle.TextSize = 14
WallCheckToggle.BorderSizePixel = 0
WallCheckToggle.Parent = Frame

local AimNPCsToggle = Instance.new("TextButton")
AimNPCsToggle.Size = UDim2.new(1,-20,0,20)
AimNPCsToggle.Position = UDim2.new(0,10,0,510)
AimNPCsToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
AimNPCsToggle.Text = "Aim NPCs: OFF"
AimNPCsToggle.TextColor3 = Color3.new(1,1,1)
AimNPCsToggle.Font = Enum.Font.SourceSans
AimNPCsToggle.TextSize = 14
AimNPCsToggle.BorderSizePixel = 0
AimNPCsToggle.Parent = Frame

local InfDistanceToggle = Instance.new("TextButton")
InfDistanceToggle.Size = UDim2.new(1,-20,0,20)
InfDistanceToggle.Position = UDim2.new(0,10,0,535)
InfDistanceToggle.BackgroundColor3 = Color3.fromRGB(60,60,60)
InfDistanceToggle.Text = "Inf Dist: OFF"
InfDistanceToggle.TextColor3 = Color3.new(1,1,1)
InfDistanceToggle.Font = Enum.Font.SourceSans
InfDistanceToggle.TextSize = 14
InfDistanceToggle.BorderSizePixel = 0
InfDistanceToggle.Parent = Frame

TeamCheckToggle.MouseButton1Click:Connect(function()
    Settings.TeamCheck = not Settings.TeamCheck
    TeamCheckToggle.Text = "Team Check: " .. (Settings.TeamCheck and "ON" or "OFF")
    RefreshESP()
end)

FovVisibleToggle.MouseButton1Click:Connect(function()
    Settings.FovVisible = not Settings.FovVisible
    FovVisibleToggle.Text = "FOV Visible: " .. (Settings.FovVisible and "ON" or "OFF")
    if Drawing and FOVCircle and CenterDot then
        FOVCircle.Visible = Settings.FovVisible and Settings.Enabled
        CenterDot.Visible = Settings.FovVisible and Settings.Enabled
    end
end)

-- ESP storage/tracking
local ESPInstances = {} -- key: model -> Highlight instance

local function destroyHighlightForModel(model)
    if not model then return end
    local hl = ESPInstances[model]
    if hl and hl.Parent then hl:Destroy() end
    ESPInstances[model] = nil
end

local function createHighlightForModel(model, fillColor)
    if not model or not model:IsA("Model") then return end
    -- avoid duplicates
    destroyHighlightForModel(model)
    local ok, Highlight = pcall(Instance.new, "Highlight")
    if not ok or not Highlight then return end
    Highlight.Name = "ESP_Highlight"
    Highlight.Adornee = model
    Highlight.FillColor = fillColor or Color3.new(1, 0, 0)
    -- default transparency; can be updated by slider later
    Highlight.FillTransparency = 0.7
    Highlight.OutlineColor = Color3.new(0, 0, 0)
    Highlight.OutlineTransparency = 0.5
    Highlight.Enabled = true
    -- parent to storage for easier cleanup / visibility isolation
    Highlight.Parent = storage
    ESPInstances[model] = Highlight
end

-- Clear all tracked highlights safely
local function ClearAllESP()
    -- snapshot keys to avoid modifying table while iterating
    local keys = {}
    for model, _ in pairs(ESPInstances) do keys[#keys+1] = model end
    for _, model in ipairs(keys) do
        destroyHighlightForModel(model)
    end
end

local function shouldHighlightPlayerModel(model)
    if not model then return false end
    local plr = Players:GetPlayerFromCharacter(model)
    if not plr or plr == LocalPlayer then return false end
    if plr.Team and table.find(Settings.TeamWhitelist, plr.Team.Name) then return false end
    if Settings.TeamCheck and LocalPlayer.Team and plr.Team == LocalPlayer.Team then return false end
    return true
end

function RefreshESP()
    -- remove highlights for models that are no longer valid or no longer should be highlighted
    local keys = {}
    for model, _ in pairs(ESPInstances) do keys[#keys+1] = model end
    for _, model in ipairs(keys) do
        if not model or not model.Parent then
            destroyHighlightForModel(model)
        else
            -- if ESPOpposite disabled, clear everything
            if not Settings.ESPOpposite then
                destroyHighlightForModel(model)
            else
                -- if model no longer should be highlighted, remove
                if not shouldHighlightPlayerModel(model) then
                    destroyHighlightForModel(model)
                end
            end
        end
    end

    if not Settings.ESPOpposite then return end

    -- create highlights for eligible players
    for _, plr in pairs(Players:GetPlayers()) do
        if plr ~= LocalPlayer and plr.Character and plr.Character.Parent then
            if shouldHighlightPlayerModel(plr.Character) then
                local col = (plr.Team and plr.Team.TeamColor and plr.Team.TeamColor.Color) or Color3.new(1, 0, 0)
                createHighlightForModel(plr.Character, col)
            else
                destroyHighlightForModel(plr.Character)
            end
        end
    end
end

ESPToggle.MouseButton1Click:Connect(function()
    Settings.ESPOpposite = not Settings.ESPOpposite
    ESPToggle.Text = "ESP Opposite: " .. (Settings.ESPOpposite and "ON" or "OFF")
    if Settings.ESPOpposite then
        RefreshESP()
    else
        -- ensure all highlights are removed when disabling ESP
        ClearAllESP()
    end
end)

WallCheckToggle.MouseButton1Click:Connect(function()
    Settings.WallCheck = not Settings.WallCheck
    WallCheckToggle.Text = "Wall Check: " .. (Settings.WallCheck and "ON" or "OFF")
end)

AimNPCsToggle.MouseButton1Click:Connect(function()
    Settings.AimNPCs = not Settings.AimNPCs
    AimNPCsToggle.Text = "Aim NPCs: " .. (Settings.AimNPCs and "ON" or "OFF")
end)

InfDistanceToggle.MouseButton1Click:Connect(function()
    Settings.InfDistance = not Settings.InfDistance
    InfDistanceToggle.Text = "Inf Dist: " .. (Settings.InfDistance and "ON" or "OFF")
end)

AddTeamButton.MouseButton1Click:Connect(function()
    local teamName = TeamNameBox.Text
    if teamName ~= "" and not table.find(Settings.TeamWhitelist, teamName) then
        table.insert(Settings.TeamWhitelist, teamName)
        WhitelistLabel.Text = "Whitelist Teams: " .. table.concat(Settings.TeamWhitelist, ", ")
        TeamNameBox.Text = ""
        RefreshESP()
    end
end)

ClearWhitelistButton.MouseButton1Click:Connect(function()
    Settings.TeamWhitelist = {}
    WhitelistLabel.Text = "Whitelist Teams: None"
    RefreshESP()
end)

YFill.Size = UDim2.new((Settings.OffsetY + 100)/200, 0, 1, 0)
XFill.Size = UDim2.new((Settings.OffsetX + 100)/200, 0, 1, 0)
FOVFill.Size = UDim2.new(math.clamp(Settings.FOV / 500, 0, 1), 0, 1, 0)
SFill.Size = UDim2.new((Settings.Smoothness - 1)/19, 0, 1, 0)
DFill.Size = UDim2.new(Settings.MaxDistance / 1000, 0, 1, 0)
PFill.Size = UDim2.new(Settings.Prediction / 0.5, 0, 1, 0)

local dragging = nil
YSlider.MouseButton1Down:Connect(function() dragging = "Y" end)
XSlider.MouseButton1Down:Connect(function() dragging = "X" end)
FOVSlider.MouseButton1Down:Connect(function() dragging = "F" end)
SSlider.MouseButton1Down:Connect(function() dragging = "S" end)
DSlider.MouseButton1Down:Connect(function() dragging = "D" end)
PSlider.MouseButton1Down:Connect(function() dragging = "P" end)

UserInputService.InputEnded:Connect(function(i)
    if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = nil end
end)

RunService.RenderStepped:Connect(function()
    if not dragging then return end
    if not Mouse then return end
    local mx = Mouse.X
    local slider = dragging == "Y" and YSlider or dragging == "X" and XSlider or dragging == "S" and SSlider or dragging == "D" and DSlider or dragging == "P" and PSlider or dragging == "F" and FOVSlider
    local fill = dragging == "Y" and YFill or dragging == "X" and XFill or dragging == "S" and SFill or dragging == "D" and DFill or dragging == "P" and PFill or dragging == "F" and FOVFill
    local label = dragging == "Y" and YLabel or dragging == "X" and XLabel or dragging == "S" and SLabel or dragging == "D" and DLabel or dragging == "P" and PLabel or dragging == "F" and FOVLabel
    if not slider then return end
    local sx = slider.AbsolutePosition.X
    local w = slider.AbsoluteSize.X
    local rel = math.clamp((mx - sx) / w, 0, 1)
    fill.Size = UDim2.new(rel, 0, 1, 0)
    if dragging == "Y" then
        Settings.OffsetY = math.floor(rel * 200 - 100)
        YLabel.Text = "Up/Down: " .. Settings.OffsetY
    elseif dragging == "X" then
        Settings.OffsetX = math.floor(rel * 200 - 100)
        XLabel.Text = "Left/Right: " .. Settings.OffsetX
    elseif dragging == "S" then
        Settings.Smoothness = math.max(1, math.floor(rel * 19 + 1))
        SLabel.Text = "Smooth: " .. Settings.Smoothness
    elseif dragging == "D" then
        Settings.MaxDistance = math.floor(rel * 1000)
        DLabel.Text = "Max Dist: " .. Settings.MaxDistance
    elseif dragging == "F" then
        Settings.FOV = math.max(0, math.floor(rel * 500))
        FOVLabel.Text = "FOV: " .. Settings.FOV
        if Drawing and FOVCircle then FOVCircle.Radius = Settings.FOV end
    else
        Settings.Prediction = rel * 0.5
        PLabel.Text = "Predict: " .. string.format("%.3f", Settings.Prediction)
    end
end)

local function IsInRange(aimPart)
    if Settings.InfDistance then return true end
    if not aimPart then return false end
    return (Camera.CFrame.Position - aimPart.Position).Magnitude <= Settings.MaxDistance
end

local function IsVisible(aimPart)
    if not Settings.WallCheck then return true end
    if not aimPart then return false end
    local origin = Camera.CFrame.Position
    local dir = (aimPart.Position - origin)
    local ray = Ray.new(origin, dir.Unit * dir.Magnitude)
    local hit = workspace:FindPartOnRayWithIgnoreList(ray, {LocalPlayer.Character})
    return hit and (hit:IsDescendantOf(aimPart.Parent) or hit == aimPart)
end

Players.PlayerAdded:Connect(function(plr)
    plr.CharacterAdded:Connect(function() task.wait(0.1); RefreshESP() end)
    plr:GetPropertyChangedSignal("Team"):Connect(RefreshESP)
end)

Players.PlayerRemoving:Connect(function(plr)
    destroyHighlightForModel(plr.Character)
    RefreshESP()
end)

LocalPlayer:GetPropertyChangedSignal("Team"):Connect(RefreshESP)

local function IsPlayerCharacter(model)
    return Players:GetPlayerFromCharacter(model) ~= nil
end

local function GetClosestTarget()
    local best = nil
    local bestDist = Settings.FOV
    local cx = Mouse.X + Settings.OffsetX
    local cy = Mouse.Y + Settings.OffsetY
    for _, plr in pairs(Players:GetPlayers()) do
        if plr == LocalPlayer or not plr.Character then continue end
        if Settings.TeamCheck and plr.Team == LocalPlayer.Team then continue end
        if plr.Team and table.find(Settings.TeamWhitelist, plr.Team.Name) then continue end
        local char = plr.Character
        local aimPart = char:FindFirstChild(Settings.AimPart)
        local hum = char:FindFirstChild("Humanoid")
        if aimPart and hum and hum.Health > 0 and IsInRange(aimPart) then
            local pos, onScreen = Camera:WorldToViewportPoint(aimPart.Position)
            if onScreen then
                local dist = (Vector2.new(pos.X, pos.Y) - Vector2.new(cx, cy)).Magnitude
                if dist < bestDist and IsVisible(aimPart) then
                    best = char
                    bestDist = dist
                end
            end
        end
    end
    if Settings.AimNPCs then
        for _, model in pairs(workspace:GetDescendants()) do
            if not model:IsA("Model") or model == LocalPlayer.Character or IsPlayerCharacter(model) then continue end
            local hum = model:FindFirstChild("Humanoid")
            local aimPart = model:FindFirstChild(Settings.AimPart)
            if hum and aimPart and hum.Health > 0 and IsInRange(aimPart) then
                local pos, onScreen = Camera:WorldToViewportPoint(aimPart.Position)
                if onScreen then
                    local dist = (Vector2.new(pos.X, pos.Y) - Vector2.new(cx, cy)).Magnitude
                    if dist < bestDist and IsVisible(aimPart) then
                        best = model
                        bestDist = dist
                    end
                end
            end
        end
    end
    return best
end

-- Use Settings.Key (Enum.KeyCode.Name string) for toggling aimbot
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode and input.KeyCode.Name == Settings.Key then
        Settings.Enabled = not Settings.Enabled
        if Settings.Enabled then
            Target = GetClosestTarget()
            if Drawing and Settings.FovVisible then
                FOVCircle.Visible = true
                CenterDot.Visible = true
            end
        else
            Target = nil
            if Drawing and FOVCircle and CenterDot then
                FOVCircle.Visible = false
                CenterDot.Visible = false
            end
        end
    end
end)

if Mouse then
    Mouse.Button2Down:Connect(function() RightClick = true end)
    Mouse.Button2Up:Connect(function() RightClick = false end)
end

RunService.Heartbeat:Connect(function()
    local cx = Mouse.X + Settings.OffsetX
    local cy = Mouse.Y + Settings.OffsetY
    if Drawing and FOVCircle and CenterDot then
        FOVCircle.Position = Vector2.new(cx, cy)
        CenterDot.Position = Vector2.new(cx, cy)
        FOVCircle.Radius = Settings.FOV
        FOVCircle.Visible = Settings.Enabled and Settings.FovVisible
        CenterDot.Visible = Settings.Enabled and Settings.FovVisible
    end
    if Settings.ESPOpposite then
        RefreshESP()
    end
    if not Settings.Enabled or RightClick then return end
    if not Target or not Target:FindFirstChild(Settings.AimPart) then
        Target = GetClosestTarget()
        if not Target then return end
    end
    local aimPart = Target:FindFirstChild(Settings.AimPart)
    local hum = Target:FindFirstChild("Humanoid")
    local pos, onScreen = Camera:WorldToViewportPoint(aimPart.Position)
    if not hum or hum.Health <= 0 or not onScreen or not IsInRange(aimPart) then
        Target = GetClosestTarget()
        if not Target then return end
        aimPart = Target:FindFirstChild(Settings.AimPart)
        hum = Target:FindFirstChild("Humanoid")
        pos, onScreen = Camera:WorldToViewportPoint(aimPart.Position)
        if not onScreen or not hum or hum.Health <= 0 then return end
    end
    if Settings.WallCheck and not IsVisible(aimPart) then return end
    local pred = aimPart.Position
    if Settings.Prediction > 0 then
        local velocity = aimPart.AssemblyLinearVelocity or aimPart.Velocity or Vector3.new()
        pred = aimPart.Position + velocity * Settings.Prediction
    end
    local scr = Camera:WorldToScreenPoint(pred)
    local deltaX = math.round((scr.X - Mouse.X) / Settings.Smoothness)
    local deltaY = math.round((scr.Y - Mouse.Y) / Settings.Smoothness)
    if type(mousemoverel) == "function" then
        mousemoverel(deltaX, deltaY)
    end
end)

Players.PlayerRemoving:Connect(function(p)
    if Target and Target == p.Character then Target = nil end
    destroyHighlightForModel(p.Character)
end)

-- ensure no stale highlights remain at load
ClearAllESP()

Features & Information

made by grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok grok gro
#aimlock#aimbot#aim#third person aimbot#third person aimlock

Community Comments (3)

longtycoon71longtycoon71Nov 6, 2025

is this made by paid grok?

Replying to @longtycoon71
m4arm4arNov 8, 2025

@longtycoon71 yes

lcvrrialcvrriaAug 8, 2026

yo make new one that works for all executors

More Scripts for Universal Scripts