local fov = 100 local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local Cam = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer local FOVring = Drawing.new("Circle") FOVring.Visible = true FOVring.Thickness = 2 FOVring.Color = Color3.fromRGB(128, 0, 128) FOVring.Filled = false FOVring.Radius = fov FOVring.Position = Cam.ViewportSize / 2 local function updateDrawings() FOVring.Position = Cam.ViewportSize / 2 end UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.Delete then RunService:UnbindFromRenderStep("FOVUpdate") FOVring:Remove() end end) local function lookAt(pos) local lookVector = (pos - Cam.CFrame.Position).Unit Cam.CFrame = CFrame.new(Cam.CFrame.Position, Cam.CFrame.Position + lookVector) end local function getTorso(character) return character:FindFirstChild("Head") or character:FindFirstChild("Torso") or character:FindFirstChild("HumanoidRootPart") end local function isVisible(part) local origin = Cam.CFrame.Position local direction = part.Position - origin local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Blacklist rayParams.FilterDescendantsInstances = {LocalPlayer.Character} local result = workspace:Raycast(origin, direction, rayParams) return not result or result.Instance:IsDescendantOf(part.Parent) end local function getClosestEnemyInFOV() local closestPlayer = nil local closestDistance = math.huge local screenCenter = Cam.ViewportSize / 2 for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.TeamColor ~= LocalPlayer.TeamColor then local char = player.Character if char then local torso = getTorso(char) if torso then local screenPos, visible = Cam:WorldToViewportPoint(torso.Position) local distance = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude if visible and distance < fov and distance < closestDistance and isVisible(torso) then closestDistance = distance closestPlayer = player end end end end end return closestPlayer end RunService:BindToRenderStep("FOVUpdate", Enum.RenderPriority.Camera.Value + 1, function() updateDrawings() local target = getClosestEnemyInFOV() if target and target.Character then local torso = getTorso(target.Character) if torso then lookAt(torso.Position) end end end)