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