-- [[ 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 ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local Drones = workspace:WaitForChild("Drones") local JammedDroneRemote = game:GetService("ReplicatedStorage"):WaitForChild("Events"):WaitForChild("Weapon"):WaitForChild("Jammer"):WaitForChild("JammedDrone") local GUI_NAME = "DroneHubGUI" local targetParent = game:GetService("CoreGui") or LocalPlayer:WaitForChild("PlayerGui") if targetParent:FindFirstChild(GUI_NAME) then targetParent[GUI_NAME]:Destroy() end local espEnabled = false local aimlockEnabled = false local autoDestroyEnabled = false local tpEnabled = false local noRecoilEnabled = false local autoDestroyDistance = 1000 local MAX_ESP_DISTANCE = 500000 local COLOR_DANGER = Color3.fromRGB(235, 60, 60) local COLOR_IN_RANGE = Color3.fromRGB(60, 235, 100) local trackedDrones = {} local savedCameraCFrame = nil local isAutoLocking = false local rawMetatable = getrawmetatable(game) local oldNamecall = rawMetatable.__namecall setreadonly(rawMetatable, false) rawMetatable.__namecall = newcclosure(function(self, ...) local method = getnamecallmethod() if noRecoilEnabled and method == "Fire" and self.Name == "CameraShakeEventBindable" then return nil end return oldNamecall(self, ...) end) setreadonly(rawMetatable, true) local function isDroneValid(drone) if not drone or not drone.Parent or not drone:IsA("Model") then return false end local lifeStatus = drone:FindFirstChild("LifeStatus") return lifeStatus ~= nil and lifeStatus.Value == true end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = GUI_NAME ScreenGui.ResetOnSpawn = false local success, _ = pcall(function() ScreenGui.Parent = game:GetService("CoreGui") end) if not success then ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 260, 0, 320) MainFrame.Position = UDim2.new(0, 30, 0.25, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 23) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Draggable = true MainFrame.Parent = ScreenGui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 8) MainCorner.Parent = MainFrame local MainStroke = Instance.new("UIStroke") MainStroke.Color = Color3.fromRGB(45, 45, 52) MainStroke.Thickness = 1 MainStroke.Parent = MainFrame local TitleBar = Instance.new("Frame") TitleBar.Size = UDim2.new(1, 0, 0, 36) TitleBar.BackgroundTransparency = 1 TitleBar.Parent = MainFrame local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, -24, 1, 0) Title.Position = UDim2.new(0, 14, 0, 0) Title.BackgroundTransparency = 1 Title.Text = "Drone Module" Title.TextColor3 = Color3.fromRGB(230, 230, 235) Title.TextSize = 13 Title.Font = Enum.Font.GothamMedium Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = TitleBar local Divider = Instance.new("Frame") Divider.Size = UDim2.new(1, -24, 0, 1) Divider.Position = UDim2.new(0, 12, 0, 36) Divider.BackgroundColor3 = Color3.fromRGB(35, 35, 42) Divider.BorderSizePixel = 0 Divider.Parent = MainFrame local Container = Instance.new("Frame") Container.Size = UDim2.new(1, -24, 1, -52) Container.Position = UDim2.new(0, 12, 0, 44) Container.BackgroundTransparency = 1 Container.Parent = MainFrame local UIList = Instance.new("UIListLayout") UIList.SortOrder = Enum.SortOrder.LayoutOrder UIList.Padding = UDim.new(0, 6) UIList.Parent = Container local tweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local function createToggleButton(name, text, layoutOrder) local btn = Instance.new("TextButton") btn.Name = name btn.Size = UDim2.new(1, 0, 0, 32) btn.BackgroundColor3 = Color3.fromRGB(26, 26, 31) btn.Text = "" btn.AutoButtonColor = false btn.LayoutOrder = layoutOrder btn.Parent = Container local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6) corner.Parent = btn local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(38, 38, 45) stroke.Thickness = 1 stroke.Parent = btn local label = Instance.new("TextLabel") label.Size = UDim2.new(1, -40, 1, 0) label.Position = UDim2.new(0, 12, 0, 0) label.BackgroundTransparency = 1 label.Text = text label.TextColor3 = Color3.fromRGB(160, 160, 172) label.TextSize = 12 label.Font = Enum.Font.Gotham label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = btn local statusDot = Instance.new("Frame") statusDot.Size = UDim2.new(0, 6, 0, 6) statusDot.Position = UDim2.new(1, -18, 0.5, -3) statusDot.BackgroundColor3 = Color3.fromRGB(60, 60, 70) statusDot.BorderSizePixel = 0 statusDot.Parent = btn local dotCorner = Instance.new("UICorner") dotCorner.CornerRadius = UDim.new(1, 0) dotCorner.Parent = statusDot btn.MouseEnter:Connect(function() TweenService:Create(stroke, tweenInfo, {Color = Color3.fromRGB(65, 65, 78)}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(stroke, tweenInfo, {Color = Color3.fromRGB(38, 38, 45)}):Play() end) return btn, label, statusDot, stroke end local EspBtn, EspLbl, EspDot = createToggleButton("EspBtn", "ESP Tracers", 1) local AimlockBtn, AimlockLbl, AimlockDot = createToggleButton("AimlockBtn", "Camera Aimlock", 2) local AutoJammerBtn, AutoJammerLbl, AutoJammerDot = createToggleButton("AutoJammerBtn", "Auto-Destroy", 3) local TpBtn, TpLbl, TpDot = createToggleButton("TpBtn", "TP Loop (Above)", 5) local NoRecoilBtn, NoRecoilLbl, NoRecoilDot = createToggleButton("NoRecoilBtn", "Anti Camera Shake", 6) local DistFrame = Instance.new("Frame") DistFrame.Size = UDim2.new(1, 0, 0, 32) DistFrame.BackgroundColor3 = Color3.fromRGB(26, 26, 31) DistFrame.LayoutOrder = 4 DistFrame.Parent = Container local DistCorner = Instance.new("UICorner") DistCorner.CornerRadius = UDim.new(0, 6) DistCorner.Parent = DistFrame local DistStroke = Instance.new("UIStroke") DistStroke.Color = Color3.fromRGB(38, 38, 45) DistStroke.Thickness = 1 DistStroke.Parent = DistFrame local DistLabel = Instance.new("TextLabel") DistLabel.Size = UDim2.new(0.65, 0, 1, 0) DistLabel.Position = UDim2.new(0, 12, 0, 0) DistLabel.BackgroundTransparency = 1 DistLabel.Text = "Auto-Range (Studs)" DistLabel.TextColor3 = Color3.fromRGB(160, 160, 172) DistLabel.TextSize = 12 DistLabel.Font = Enum.Font.Gotham DistLabel.TextXAlignment = Enum.TextXAlignment.Left DistLabel.Parent = DistFrame local DistBox = Instance.new("TextBox") DistBox.Size = UDim2.new(0.28, 0, 0.65, 0) DistBox.Position = UDim2.new(0.68, 0, 0.175, 0) DistBox.BackgroundColor3 = Color3.fromRGB(18, 18, 22) DistBox.Text = tostring(autoDestroyDistance) DistBox.TextColor3 = Color3.fromRGB(230, 230, 235) DistBox.TextSize = 11 DistBox.Font = Enum.Font.GothamMedium DistBox.Parent = DistFrame local BoxCorner = Instance.new("UICorner") BoxCorner.CornerRadius = UDim.new(0, 4) BoxCorner.Parent = DistBox local BoxStroke = Instance.new("UIStroke") BoxStroke.Color = Color3.fromRGB(45, 45, 55) BoxStroke.Thickness = 1 BoxStroke.Parent = DistBox DistBox.FocusLost:Connect(function() local num = tonumber(DistBox.Text) if num then autoDestroyDistance = num else DistBox.Text = tostring(autoDestroyDistance) end end) local function getJammer() return LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Jammer") or LocalPlayer.Backpack:FindFirstChild("Jammer") end local function addESP(drone) if trackedDrones[drone] then return end local highlight = Instance.new("Highlight") highlight.Name = "DroneHighlight" highlight.FillColor = COLOR_DANGER highlight.OutlineColor = COLOR_DANGER highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = drone local line = Drawing.new("Line") line.Color = COLOR_DANGER line.Thickness = 1.2 line.Transparency = 0.8 line.Visible = false local text = Drawing.new("Text") text.Color = COLOR_DANGER text.Size = 14 text.Center = true text.Outline = true text.OutlineColor = Color3.fromRGB(0, 0, 0) text.Visible = false trackedDrones[drone] = { Highlight = highlight, Line = line, Text = text } end local function removeESP(drone) local data = trackedDrones[drone] if data then if data.Highlight then data.Highlight:Destroy() end if data.Line then data.Line:Remove() end if data.Text then data.Text:Remove() end trackedDrones[drone] = nil end end for _, child in ipairs(Drones:GetChildren()) do addESP(child) end Drones.ChildAdded:Connect(addESP) Drones.ChildRemoved:Connect(removeESP) local steppedConnection steppedConnection = RunService.Stepped:Connect(function() if not ScreenGui or not ScreenGui.Parent then steppedConnection:Disconnect() return end if tpEnabled then local character = LocalPlayer.Character local rootPart = character and character:FindFirstChild("HumanoidRootPart") if rootPart then rootPart.AssemblyLinearVelocity = Vector3.zero rootPart.AssemblyAngularVelocity = Vector3.zero end end end) task.spawn(function() while ScreenGui and ScreenGui.Parent do local character = LocalPlayer.Character local rootPart = character and character:FindFirstChild("HumanoidRootPart") local humanoid = character and character:FindFirstChildOfClass("Humanoid") if rootPart and humanoid then if tpEnabled then for _, drone in ipairs(Drones:GetChildren()) do if not tpEnabled then break end if isDroneValid(drone) then local dronePos = drone:GetPivot().Position rootPart.CFrame = CFrame.new(dronePos + Vector3.new(0, 500, 0)) local timeout = 0 while isDroneValid(drone) and tpEnabled and timeout < 20 do if autoDestroyEnabled then local jammerInBackpack = LocalPlayer.Backpack:FindFirstChild("Jammer") if jammerInBackpack then humanoid:EquipTool(jammerInBackpack) end local activeJammer = character:FindFirstChild("Jammer") if activeJammer then local currentDronePos = drone:GetPivot().Position Camera.CFrame = CFrame.new(Camera.CFrame.Position, currentDronePos) local fanEvent = activeJammer:FindFirstChild("Events") and activeJammer.Events:FindFirstChild("FanEvent") if fanEvent then fanEvent:FireServer(30) end JammedDroneRemote:FireServer(drone, Camera.CFrame) end end timeout = timeout + 1 task.wait(0.08) end end end elseif autoDestroyEnabled then local closestDrone = nil local shortestDist = autoDestroyDistance for _, drone in ipairs(Drones:GetChildren()) do if isDroneValid(drone) then local dronePos = drone:GetPivot().Position local dist = (dronePos - rootPart.Position).Magnitude if dist <= shortestDist then shortestDist = dist closestDrone = drone end end end if closestDrone then if not isAutoLocking then savedCameraCFrame = Camera.CFrame isAutoLocking = true end local jammerInBackpack = LocalPlayer.Backpack:FindFirstChild("Jammer") if jammerInBackpack then humanoid:EquipTool(jammerInBackpack) end local activeJammer = character:FindFirstChild("Jammer") if activeJammer then local dronePos = closestDrone:GetPivot().Position Camera.CFrame = CFrame.new(Camera.CFrame.Position, dronePos) local fanEvent = activeJammer:FindFirstChild("Events") and activeJammer.Events:FindFirstChild("FanEvent") if fanEvent then fanEvent:FireServer(30) end JammedDroneRemote:FireServer(closestDrone, Camera.CFrame) end else if isAutoLocking then humanoid:UnequipTools() if savedCameraCFrame then Camera.CFrame = savedCameraCFrame savedCameraCFrame = nil end isAutoLocking = false end end else if isAutoLocking then humanoid:UnequipTools() if savedCameraCFrame then Camera.CFrame = savedCameraCFrame savedCameraCFrame = nil end isAutoLocking = false end end end task.wait(0.1) end end) local renderConnection renderConnection = RunService.RenderStepped:Connect(function() if not ScreenGui or not ScreenGui.Parent then for drone, _ in pairs(trackedDrones) do removeESP(drone) end renderConnection:Disconnect() return end local viewportSize = Camera.ViewportSize local screenBottom = Vector2.new(viewportSize.X / 2, viewportSize.Y) local cameraPos = Camera.CFrame.Position for drone, data in pairs(trackedDrones) do if espEnabled and isDroneValid(drone) then local dronePos = drone:GetPivot().Position local distance = math.floor((dronePos - cameraPos).Magnitude) if distance <= MAX_ESP_DISTANCE then local screenPos, onScreen = Camera:WorldToViewportPoint(dronePos) if onScreen then local currentColor = (distance <= autoDestroyDistance) and COLOR_IN_RANGE or COLOR_DANGER data.Highlight.Enabled = true data.Highlight.FillColor = currentColor data.Highlight.OutlineColor = currentColor data.Line.Color = currentColor data.Line.From = screenBottom data.Line.To = Vector2.new(screenPos.X, screenPos.Y) data.Line.Visible = true data.Text.Color = currentColor data.Text.Position = Vector2.new(screenPos.X, screenPos.Y - 22) data.Text.Text = string.format("%d Studs", distance) data.Text.Visible = true else data.Highlight.Enabled = false data.Line.Visible = false data.Text.Visible = false end else data.Highlight.Enabled = false data.Line.Visible = false data.Text.Visible = false end else if data.Highlight then data.Highlight.Enabled = false end data.Line.Visible = false data.Text.Visible = false end end if aimlockEnabled and not isAutoLocking and not tpEnabled then local jammer = getJammer() local closestDrone = nil local shortestDist = autoDestroyDistance for _, drone in ipairs(Drones:GetChildren()) do if isDroneValid(drone) then local dPos = drone:GetPivot().Position local dist = (dPos - cameraPos).Magnitude if dist < shortestDist then shortestDist = dist closestDrone = drone end end end if closestDrone then Camera.CFrame = CFrame.new(Camera.CFrame.Position, closestDrone:GetPivot().Position) end end end) local function toggleState(state, label, dot) local targetLabelColor = state and Color3.fromRGB(240, 240, 245) or Color3.fromRGB(160, 160, 172) local targetDotColor = state and Color3.fromRGB(75, 210, 120) or Color3.fromRGB(60, 60, 70) TweenService:Create(label, tweenInfo, {TextColor3 = targetLabelColor}):Play() TweenService:Create(dot, tweenInfo, {BackgroundColor3 = targetDotColor}):Play() end EspBtn.MouseButton1Click:Connect(function() espEnabled = not espEnabled toggleState(espEnabled, EspLbl, EspDot) end) AimlockBtn.MouseButton1Click:Connect(function() aimlockEnabled = not aimlockEnabled toggleState(aimlockEnabled, AimlockLbl, AimlockDot) end) AutoJammerBtn.MouseButton1Click:Connect(function() autoDestroyEnabled = not autoDestroyEnabled toggleState(autoDestroyEnabled, AutoJammerLbl, AutoJammerDot) end) TpBtn.MouseButton1Click:Connect(function() tpEnabled = not tpEnabled toggleState(tpEnabled, TpLbl, TpDot) end) NoRecoilBtn.MouseButton1Click:Connect(function() noRecoilEnabled = not noRecoilEnabled toggleState(noRecoilEnabled, NoRecoilLbl, NoRecoilDot) end)