-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] getgenv().Config = { Enabled = true, TargetPart = "Head", FOV = 250, Color = Color3.fromRGB(0, 255, 255), Thickness = 1.5, ShowFOV = true } local Players = game:GetService("Players") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer local fovCircle = Drawing.new("Circle") fovCircle.Filled = false fovCircle.NumSides = 30 fovCircle.Thickness = Config.Thickness fovCircle.Color = Config.Color fovCircle.Visible = Config.ShowFOV local headCache = {} local headSet = {} local function addHead(part) if part:IsA("BasePart") and part.Name == Config.TargetPart then local parent = part.Parent if parent and parent:IsA("Model") then if not headSet[part] then headSet[part] = true table.insert(headCache, part) end end end end local function removeHead(part) if headSet[part] then headSet[part] = nil for i = #headCache, 1, -1 do if headCache[i] == part then table.remove(headCache, i) break end end end end for _, descendant in ipairs(workspace:GetDescendants()) do addHead(descendant) end workspace.DescendantAdded:Connect(function(descendant) addHead(descendant) end) workspace.DescendantRemoving:Connect(function(descendant) removeHead(descendant) end) local function isIgnored(character, ignoreArg) if not ignoreArg then return false end if typeof(ignoreArg) == "Instance" and character:IsDescendantOf(ignoreArg) then return true elseif typeof(ignoreArg) == "table" then for _, v in pairs(ignoreArg) do if v == character or (typeof(v) == "Instance" and character:IsDescendantOf(v)) then return true end end end return false end local function getTargetNotClosestToCamera(ignoreArg) local cameraPos = Camera.CFrame.Position local viewportSize = Camera.ViewportSize local screenCenter = Vector2.new(viewportSize.X / 2, viewportSize.Y / 2) local closestHeadToCam = nil local shortestCamDistance = math.huge local targetsInFOV = {} for i = #headCache, 1, -1 do local part = headCache[i] if not part or not part.Parent then table.remove(headCache, i) headSet[part] = nil continue end local parentModel = part.Parent if not parentModel:IsA("Model") then removeHead(part) continue end if LocalPlayer.Character and (parentModel == LocalPlayer.Character or part:IsDescendantOf(LocalPlayer.Character)) then continue end if isIgnored(parentModel, ignoreArg) then continue end local camDist = (part.Position - cameraPos).Magnitude if camDist < shortestCamDistance then shortestCamDistance = camDist closestHeadToCam = part end local viewportPos, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen and viewportPos.Z > 0 then local screenDist = (Vector2.new(viewportPos.X, viewportPos.Y) - screenCenter).Magnitude if screenDist <= Config.FOV then table.insert(targetsInFOV, { part = part, screenDist = screenDist }) end end end local validTargets = {} for _, item in ipairs(targetsInFOV) do if item.part ~= closestHeadToCam then table.insert(validTargets, item) end end if #validTargets == 0 then return nil end table.sort(validTargets, function(a, b) return a.screenDist < b.screenDist end) return validTargets[1].part end RunService.RenderStepped:Connect(function() local viewportSize = Camera.ViewportSize local screenCenter = Vector2.new(viewportSize.X / 2, viewportSize.Y / 2) fovCircle.Visible = Config.ShowFOV fovCircle.Radius = Config.FOV fovCircle.Position = screenCenter fovCircle.Color = Config.Color fovCircle.Thickness = Config.Thickness end) local bulletServicePath = ReplicatedStorage:WaitForChild("Shared"):WaitForChild("Services"):WaitForChild("BulletService") local success, BulletServiceModule = pcall(function() return require(bulletServicePath) end) if success and BulletServiceModule then local oldDischarge oldDischarge = hookfunction(BulletServiceModule.Discharge, newcclosure(function(self, originCFrame, p3, p4, p5, p6, p7, p8, ignoreList, ...) if Config.Enabled then local target = getTargetNotClosestToCamera(ignoreList) if target then originCFrame = CFrame.new(originCFrame.Position, target.Position) end end return oldDischarge(self, originCFrame, p3, p4, p5, p6, p7, p8, ignoreList, ...) end)) end