-- ============================================================ -- CONFIG / SERVICES (make sure these exist ABOVE this script) -- ============================================================ local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer local PURPLE = Color3.fromRGB(170, 0, 255) local MAX_DISTANCE = 1000 local FOV_SIZE = 250 -- drawingWorks: only true if Drawing API is available (exploit/executor) local drawingWorks = pcall(function() local t = Drawing.new("Circle") t:Remove() end) -- ============================================================ -- FOV CIRCLE (single instance — do NOT create twice) -- ============================================================ local fovCircle = drawingWorks and (function() local circle = Drawing.new("Circle") circle.Color = PURPLE circle.Thickness = 2 circle.Transparency = 0.8 circle.Radius = FOV_SIZE circle.NumSides = 60 circle.Filled = false circle.ZIndex = 999 return circle end)() or nil RunService.RenderStepped:Connect(function() if fovCircle then fovCircle.Position = Vector2.new( Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2 ) fovCircle.Visible = true end end) -- ============================================================ -- ESP -- ============================================================ local function createESP(player) if player == LocalPlayer then return end local tracer = Drawing.new("Line") local distanceText = drawingWorks and Drawing.new("Text") or nil local highlight = Instance.new("Highlight") tracer.Color = PURPLE tracer.Thickness = 1.5 if distanceText then distanceText.Color = PURPLE distanceText.Size = 14 distanceText.Center = true distanceText.Outline = true end highlight.FillColor = PURPLE highlight.OutlineColor = Color3.new(1, 1, 1) highlight.FillTransparency = 0.7 highlight.OutlineTransparency = 0 highlight.Parent = LocalPlayer:WaitForChild("PlayerGui") local function setAllVisibility(v) tracer.Visible = v if distanceText then distanceText.Visible = v end highlight.Enabled = v end local connection connection = RunService.RenderStepped:Connect(function() local character = player.Character if not character or not character:IsDescendantOf(workspace) or not LocalPlayer.Character then setAllVisibility(false) if not player:IsDescendantOf(Players) then tracer:Remove() if distanceText then distanceText:Remove() end highlight:Destroy() connection:Disconnect() end return end local rootPart = character:FindFirstChild("HumanoidRootPart") local humanoid = character:FindFirstChildOfClass("Humanoid") local head = character:FindFirstChild("Head") if rootPart and humanoid and humanoid.Health > 0 and head then local headPos, onScreen = Camera:WorldToViewportPoint(head.Position) local localRoot = LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local distance = localRoot and (rootPart.Position - localRoot.Position).Magnitude or 0 if onScreen and distance <= MAX_DISTANCE then highlight.Adornee = character highlight.Enabled = true tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y) tracer.To = Vector2.new(headPos.X, headPos.Y) tracer.Visible = true if distanceText then distanceText.Text = "Distance: " .. math.floor(distance) distanceText.Position = Vector2.new(headPos.X, headPos.Y - 20) distanceText.Visible = true end else setAllVisibility(false) end else setAllVisibility(false) end end) end for _, player in ipairs(Players:GetPlayers()) do createESP(player) end Players.PlayerAdded:Connect(createESP) -- ============================================================ -- AIMBOT LOGIC -- ============================================================ local function getClosestHead() local character = LocalPlayer.Character if not character then return nil end local localRoot = character:FindFirstChild("HumanoidRootPart") if not localRoot then return nil end local centerPos = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) local fovSq = FOV_SIZE * FOV_SIZE local closestHead = nil local closestScreenDist = fovSq for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local head = player.Character:FindFirstChild("Head") local rootPart = player.Character:FindFirstChild("HumanoidRootPart") local hum = player.Character:FindFirstChildOfClass("Humanoid") if head and rootPart and hum and hum.Health > 0 then local distance = (rootPart.Position - localRoot.Position).Magnitude if distance <= MAX_DISTANCE then local screenPoint, onScreen = Camera:WorldToViewportPoint(head.Position) if onScreen then local screenPos = Vector2.new(screenPoint.X, screenPoint.Y) local dist = (screenPos - centerPos).Magnitude if dist < closestScreenDist then closestScreenDist = dist closestHead = head end end end end end end return closestHead end local success, BulletHandler = pcall(function() return require(game:GetService("ReplicatedStorage").ModuleScripts.GunModules.BulletHandler) end) if success and BulletHandler and BulletHandler.Fire then local oldFire = BulletHandler.Fire BulletHandler.Fire = function(p6) local closestHead = getClosestHead() if closestHead then p6.Direction = (closestHead.Position - p6.Origin).Unit end return oldFire(p6) end end