-- Credit Dollynho -- local fov = 40 local maxDistance = 400 local maxTransparency = 0.1 local teamCheck = false local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local Cam = game.Workspace.CurrentCamera 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() local camViewportSize = Cam.ViewportSize FOVring.Position = camViewportSize / 2 end local function onKeyDown(input) if input.KeyCode == Enum.KeyCode.Delete then RunService:UnbindFromRenderStep("FOVUpdate") FOVring:Remove() end end UserInputService.InputBegan:Connect(onKeyDown) local function lookAt(target) local lookVector = (target - Cam.CFrame.Position).unit local newCFrame = CFrame.new(Cam.CFrame.Position, Cam.CFrame.Position + lookVector) Cam.CFrame = newCFrame end local function calculateTransparency(distance) local maxDistance = fov local transparency = (1 - (distance / maxDistance)) * maxTransparency return transparency end local function isPlayerAlive(player) local character = player.Character if character and character:FindFirstChild("Humanoid") then return character.Humanoid.Health > 0 end return false end local function getClosestPlayerInFOV(trg_part) local nearest = nil local last = math.huge local playerMousePos = Cam.ViewportSize / 2 local localPlayer = Players.LocalPlayer for i = 1, #Players:GetPlayers() do local player = Players:GetPlayers()[i] if player and player ~= localPlayer and (not teamCheck or player.Team ~= localPlayer.Team) then if isPlayerAlive(player) then local part = player.Character and player.Character:FindFirstChild(trg_part) if part then local ePos, isVisible = Cam:WorldToViewportPoint(part.Position) local distance = (Vector2.new(ePos.x, ePos.y) - playerMousePos).Magnitude if distance < last and isVisible and distance < fov and distance < maxDistance then last = distance nearest = player end end end end end return nearest end local function toggleTeamCheck() teamCheck = not teamCheck end toggleTeamCheck() toggleTeamCheck() RunService.RenderStepped:Connect(function() updateDrawings() local closest = getClosestPlayerInFOV("Head") if closest and closest.Character:FindFirstChild("Head") then lookAt(closest.Character.Head.Position) end if closest then local ePos, isVisible = Cam:WorldToViewportPoint(closest.Character.Head.Position) local distance = (Vector2.new(ePos.x, ePos.y) - (Cam.ViewportSize / 2)).Magnitude FOVring.Transparency = calculateTransparency(distance) else FOVring.Transparency = maxTransparency end wait(0.03) end)