local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local Mouse = LocalPlayer:GetMouse() -- Toggle variable for aim assist local aimAssistEnabled = false -- Variable to track current target local currentTarget = nil -- Configurable settings local MAX_FOV = 45 -- Wide FOV for acquisition and stickiness local PREDICTION_FACTOR = 0.05 -- Minimal prediction for slight smoothing -- Function to create ESP box and tracer for a character local function createESP(character) if character and character ~= LocalPlayer.Character then local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if not humanoidRootPart then return end if not humanoidRootPart:FindFirstChild("ESP_Box") then local box = Instance.new("BoxHandleAdornment") box.Name = "ESP_Box" box.Size = Vector3.new(5, 7, 5) box.Color3 = Color3.fromRGB(255, 0, 0) box.Transparency = 0.7 box.AlwaysOnTop = true box.ZIndex = 10 box.Adornee = humanoidRootPart box.Parent = humanoidRootPart end if not humanoidRootPart:FindFirstChild("ESP_Tracer") then local tracer = Instance.new("Beam") tracer.Name = "ESP_Tracer" tracer.Color = ColorSequence.new(Color3.fromRGB(255, 0, 0)) tracer.Transparency = NumberSequence.new(0.5) tracer.Width0 = 1 tracer.Width1 = 1 tracer.Parent = humanoidRootPart local attachment0 = Instance.new("Attachment") attachment0.Name = "TracerStart" attachment0.Parent = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") or humanoidRootPart local attachment1 = Instance.new("Attachment") attachment1.Name = "TracerEnd" attachment1.Parent = humanoidRootPart tracer.Attachment0 = attachment0 tracer.Attachment1 = attachment1 end end end -- Function to remove ESP elements from a character local function removeESP(character) if character then local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if humanoidRootPart then local box = humanoidRootPart:FindFirstChild("ESP_Box") if box then box:Destroy() end local tracer = humanoidRootPart:FindFirstChild("ESP_Tracer") if tracer then if tracer.Attachment0 then tracer.Attachment0:Destroy() end if tracer.Attachment1 then tracer.Attachment1:Destroy() end tracer:Destroy() end end end end -- Function to update tracer starting point local function updateTracers() local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if myRoot then for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local theirRoot = player.Character:FindFirstChild("HumanoidRootPart") if theirRoot then local tracer = theirRoot:FindFirstChild("ESP_Tracer") if tracer and tracer.Attachment0 then tracer.Attachment0.Parent = myRoot end end end end end end -- Function to update ESP for all players local function updateESP() for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then createESP(player.Character) end end updateTracers() end -- Function to get target with perfect stickiness and team check local function getTargetInView() local cameraDirection = Camera.CFrame.LookVector local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if not myRoot then return nil end -- Get local player's team color local myTeamColor = LocalPlayer.TeamColor -- Stick to current target if valid if currentTarget and currentTarget.Character then local head = currentTarget.Character:FindFirstChild("Head") local humanoid = currentTarget.Character:FindFirstChild("Humanoid") if head and humanoid and humanoid.Health > 0 and currentTarget.TeamColor ~= myTeamColor then local vectorToPlayer = (head.Position - Camera.CFrame.Position).Unit local distance = (head.Position - myRoot.Position).Magnitude local angle = math.deg(math.acos(cameraDirection:Dot(vectorToPlayer))) if angle <= MAX_FOV then local ray = Ray.new(Camera.CFrame.Position, (head.Position - Camera.CFrame.Position).Unit * distance) local hit, _ = workspace:FindPartOnRayWithIgnoreList(ray, {LocalPlayer.Character}) if hit and hit:IsDescendantOf(currentTarget.Character) then local _, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then return currentTarget end end end end currentTarget = nil -- Clear if invalid end -- Find a new target local newTarget = nil for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local head = player.Character:FindFirstChild("Head") local humanoid = player.Character:FindFirstChild("Humanoid") if head and humanoid and humanoid.Health > 0 and player.TeamColor ~= myTeamColor then local vectorToPlayer = (head.Position - Camera.CFrame.Position).Unit local distance = (head.Position - myRoot.Position).Magnitude local angle = math.deg(math.acos(cameraDirection:Dot(vectorToPlayer))) if angle <= MAX_FOV then local ray = Ray.new(Camera.CFrame.Position, (head.Position - Camera.CFrame.Position).Unit * distance) local hit, _ = workspace:FindPartOnRayWithIgnoreList(ray, {LocalPlayer.Character}) if hit and hit:IsDescendantOf(player.Character) then local _, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then newTarget = player break end end end end end end -- Set new target without debounce for instant switch if newTarget then currentTarget = newTarget end return currentTarget end -- Aim assist with perfect, instant tracking local aimConnection local function startAimAssist() if aimConnection then aimConnection:Disconnect() end aimConnection = RunService.RenderStepped:Connect(function(deltaTime) if not LocalPlayer.Character or not aimAssistEnabled then return end local myRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if not myRoot then return end local target = getTargetInView() if target and target.Character then local head = target.Character:FindFirstChild("Head") local humanoidRootPart = target.Character:FindFirstChild("HumanoidRootPart") if head and humanoidRootPart then -- Minimal velocity prediction for slight correction local velocity = humanoidRootPart.Velocity local predictedPosition = head.Position + (velocity * PREDICTION_FACTOR * deltaTime) -- Instant, perfect tracking Camera.CFrame = CFrame.lookAt(Camera.CFrame.Position, predictedPosition) end end end) end -- Toggle aim assist with F key and disable default camera input local cameraInputDisabled = false UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.KeyCode == Enum.KeyCode.F then aimAssistEnabled = not aimAssistEnabled if aimAssistEnabled and not cameraInputDisabled then UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition cameraInputDisabled = true elseif not aimAssistEnabled and cameraInputDisabled then UserInputService.MouseBehavior = Enum.MouseBehavior.Default cameraInputDisabled = false end print("Aim assist " .. (aimAssistEnabled and "enabled" or "disabled")) end end) -- Optimize ESP updates local frameCounter = 0 local updateInterval = 5 RunService.RenderStepped:Connect(function() frameCounter = frameCounter + 1 if frameCounter >= updateInterval then updateESP() frameCounter = 0 end end) -- Connect to player added event Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function(character) if player ~= LocalPlayer then createESP(character) end end) player.CharacterRemoving:Connect(function(character) removeESP(character) end) end) -- Remove ESP when player leaves Players.PlayerRemoving:Connect(function(player) if player.Character then removeESP(player.Character) end end) -- Initial setup for existing players for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then createESP(player.Character) end end -- Clean up and update when local player respawns LocalPlayer.CharacterAdded:Connect(function(character) for _, player in pairs(Players:GetPlayers()) do if player.Character then removeESP(player.Character) if player ~= LocalPlayer then createESP(player.Character) end end end startAimAssist() end) -- Start aim assist initially (off by default) startAimAssist()