local util = require(game:GetService("ReplicatedStorage").Modules.Utility) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Camera = workspace.CurrentCamera local LP = Players.LocalPlayer local MAX_DIST = 200 local FOV = 150 local circle = Drawing.new("Circle") circle.Thickness = 1.5 circle.Filled = false circle.NumSides = 64 circle.Visible = true local function getTarget(origin) local center = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) local best, bestDist = nil, math.huge local myChar = LP.Character for _, p in pairs(Players:GetPlayers()) do if p == LP then continue end local char = p.Character if not char or char == myChar then continue end local head = char:FindFirstChild("Head") local hum = char:FindFirstChildOfClass("Humanoid") if not head or not hum or hum.Health <= 0 then continue end if (origin - head.Position).Magnitude > MAX_DIST then continue end local sp, vis = Camera:WorldToViewportPoint(head.Position) if not vis then continue end local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude if d < FOV and d < bestDist then bestDist = d best = head end end return best end RunService.RenderStepped:Connect(function() local center = Camera.ViewportSize / 2 circle.Position = Vector2.new(center.X, center.Y) circle.Radius = FOV local myRoot = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") circle.Color = getTarget(myRoot and myRoot.Position or Camera.CFrame.Position) and Color3.fromRGB(255, 50, 50) or Color3.fromRGB(0, 200, 255) end) local orig = util.Raycast util.Raycast = function(self, origin, direction, distance, ...) local target = getTarget(origin) if target then return orig(self, origin, target.Position, distance, ...) end return orig(self, origin, direction, distance, ...) end local orig = util.PlayParticles util.PlayParticles = function(self, obj) if typeof(obj) == "Instance" then local n = obj.Name:lower() if n:find("flash") or n:find("smoke") or n:find("blind") then return end end return orig(self, obj) end