--[[ ============================================================ 🍆 GOONER HUB 🍑 ============================================================ Roblox Studio LocalScript Place in: StarterPlayer > StarterPlayerScripts FEATURES • Mobile / PC compatible • R6 + R15 • Fly • Fly speed: DEFAULT 50 / MAX 350 • Camera-controlled 3D flying • Avatar physically pitches up/down while flying • No flying animations • Noclip • Infinite jump • Player teleport list • RGB menu • RGB ESP • Username ESP • RGB minimized button • Square responsive GUI • Draggable GUI • Mobile-friendly controls ============================================================ ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") --========================================================-- -- SETTINGS --========================================================-- local MIN_FLY_SPEED = 1 local MAX_FLY_SPEED = 350 local FlySpeed = 50 local Flying = false local Noclip = false local InfiniteJump = false local ESPEnabled = false local Character local Humanoid local Root local FlyAttachment local FlyVelocity local ESPObjects = {} --========================================================-- -- CHARACTER SETUP --========================================================-- local function SetupCharacter(char) Character = char Humanoid = char:WaitForChild("Humanoid") Root = char:WaitForChild("HumanoidRootPart") end if LocalPlayer.Character then SetupCharacter(LocalPlayer.Character) end LocalPlayer.CharacterAdded:Connect(function(char) Flying = false if FlyVelocity then FlyVelocity:Destroy() FlyVelocity = nil end if FlyAttachment then FlyAttachment:Destroy() FlyAttachment = nil end SetupCharacter(char) end) --========================================================-- -- RGB --========================================================-- local function GetRGB() return Color3.fromHSV( (tick() % 6) / 6, 1, 1 ) end --========================================================-- -- GUI --========================================================-- local Gui = Instance.new("ScreenGui") Gui.Name = "🍆 Gooner Hub 🍑" Gui.ResetOnSpawn = false Gui.IgnoreGuiInset = true Gui.Parent = PlayerGui --========================================================-- -- RESPONSIVE SQUARE --========================================================-- local function GetGuiSize() local Camera = workspace.CurrentCamera if not Camera then return 320 end local Viewport = Camera.ViewportSize local Smallest = math.min( Viewport.X, Viewport.Y ) return math.floor( math.clamp( Smallest * 0.86, 285, 365 ) ) end local GuiSize = GetGuiSize() --========================================================-- -- MAIN WINDOW --========================================================-- local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.fromOffset( GuiSize, GuiSize ) Main.AnchorPoint = Vector2.new( 0.5, 0.5 ) Main.Position = UDim2.fromScale( 0.5, 0.5 ) Main.BackgroundColor3 = Color3.fromRGB( 20, 20, 27 ) Main.BorderSizePixel = 0 Main.Parent = Gui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new( 0, 15 ) MainCorner.Parent = Main local MainStroke = Instance.new("UIStroke") MainStroke.Thickness = 3 MainStroke.Parent = Main --========================================================-- -- DRAGGING --========================================================-- local function MakeDraggable(Object) local Dragging = false local StartInput local StartPosition Object.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseButton1 then Dragging = true StartInput = Input.Position StartPosition = Object.Position end end) UserInputService.InputChanged:Connect(function(Input) if not Dragging then return end if Input.UserInputType ~= Enum.UserInputType.Touch and Input.UserInputType ~= Enum.UserInputType.MouseMovement then return end local Delta = Input.Position - StartInput Object.Position = UDim2.new( StartPosition.X.Scale, StartPosition.X.Offset + Delta.X, StartPosition.Y.Scale, StartPosition.Y.Offset + Delta.Y ) end) UserInputService.InputEnded:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseButton1 then Dragging = false end end) end MakeDraggable(Main) --========================================================-- -- TITLE --========================================================-- local Title = Instance.new("TextLabel") Title.Size = UDim2.new( 1, -60, 0, 40 ) Title.Position = UDim2.fromOffset( 12, 4 ) Title.BackgroundTransparency = 1 Title.Text = "🍆 Gooner Hub 🍑" Title.TextColor3 = Color3.new( 1, 1, 1 ) Title.TextSize = 19 Title.Font = Enum.Font.GothamBold Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = Main --========================================================-- -- CLOSE BUTTON --========================================================-- local Close = Instance.new("TextButton") Close.Size = UDim2.fromOffset( 34, 34 ) Close.Position = UDim2.new( 1, -42, 0, 7 ) Close.BackgroundColor3 = Color3.fromRGB( 170, 45, 50 ) Close.Text = "X" Close.TextColor3 = Color3.new( 1, 1, 1 ) Close.TextSize = 15 Close.Font = Enum.Font.GothamBold Close.Parent = Main local CloseCorner = Instance.new("UICorner") CloseCorner.CornerRadius = UDim.new( 0, 8 ) CloseCorner.Parent = Close --========================================================-- -- BUTTON CREATOR --========================================================-- local function CreateButton( Text, X, Y, Width, Height ) local Button = Instance.new("TextButton") Button.Size = UDim2.fromOffset( Width, Height ) Button.Position = UDim2.fromOffset( X, Y ) Button.BackgroundColor3 = Color3.fromRGB( 43, 43, 52 ) Button.Text = Text Button.TextColor3 = Color3.new( 1, 1, 1 ) Button.TextSize = 12 Button.Font = Enum.Font.GothamBold Button.Parent = Main local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new( 0, 8 ) Corner.Parent = Button local Stroke = Instance.new("UIStroke") Stroke.Thickness = 1.25 Stroke.Parent = Button return Button end local Padding = 10 local Gap = 7 local ButtonWidth = (GuiSize - Padding * 2 - Gap) / 2 --========================================================-- -- MAIN BUTTONS --========================================================-- local FlyButton = CreateButton( "FLY: OFF", Padding, 48, ButtonWidth, 38 ) local NoclipButton = CreateButton( "NOCLIP: OFF", Padding + ButtonWidth + Gap, 48, ButtonWidth, 38 ) local JumpButton = CreateButton( "INFINITE JUMP: OFF", Padding, 91, ButtonWidth, 38 ) local ESPButton = CreateButton( "ESP: OFF", Padding + ButtonWidth + Gap, 91, ButtonWidth, 38 ) --========================================================-- -- SPEED LABEL --========================================================-- local SpeedLabel = Instance.new("TextLabel") SpeedLabel.Size = UDim2.new( 1, -20, 0, 22 ) SpeedLabel.Position = UDim2.fromOffset( 10, 134 ) SpeedLabel.BackgroundTransparency = 1 SpeedLabel.Text = "Fly Speed: 50" SpeedLabel.TextColor3 = Color3.new( 1, 1, 1 ) SpeedLabel.TextSize = 13 SpeedLabel.Font = Enum.Font.GothamBold SpeedLabel.TextXAlignment = Enum.TextXAlignment.Left SpeedLabel.Parent = Main --========================================================-- -- SPEED SLIDER --========================================================-- local Slider = Instance.new("Frame") Slider.Size = UDim2.new( 1, -20, 0, 14 ) Slider.Position = UDim2.fromOffset( 10, 158 ) Slider.BackgroundColor3 = Color3.fromRGB( 50, 50, 60 ) Slider.BorderSizePixel = 0 Slider.Parent = Main local SliderCorner = Instance.new("UICorner") SliderCorner.CornerRadius = UDim.new( 1, 0 ) SliderCorner.Parent = Slider local Fill = Instance.new("Frame") Fill.BorderSizePixel = 0 Fill.Parent = Slider local FillCorner = Instance.new("UICorner") FillCorner.CornerRadius = UDim.new( 1, 0 ) FillCorner.Parent = Fill local Knob = Instance.new("TextButton") Knob.Size = UDim2.fromOffset( 22, 22 ) Knob.AnchorPoint = Vector2.new( 0.5, 0.5 ) Knob.BackgroundColor3 = Color3.new( 1, 1, 1 ) Knob.Text = "" Knob.Parent = Slider local KnobCorner = Instance.new("UICorner") KnobCorner.CornerRadius = UDim.new( 1, 0 ) KnobCorner.Parent = Knob local function UpdateSlider() local Percent = (FlySpeed - MIN_FLY_SPEED) / (MAX_FLY_SPEED - MIN_FLY_SPEED) Fill.Size = UDim2.new( Percent, 0, 1, 0 ) Knob.Position = UDim2.new( Percent, 0, 0.5, 0 ) SpeedLabel.Text = "Fly Speed: " .. tostring(FlySpeed) end UpdateSlider() local Sliding = false local function SetSpeed(X) local Percent = math.clamp( (X - Slider.AbsolutePosition.X) / Slider.AbsoluteSize.X, 0, 1 ) FlySpeed = math.clamp( math.floor( MIN_FLY_SPEED + ( MAX_FLY_SPEED - MIN_FLY_SPEED ) * Percent + 0.5 ), MIN_FLY_SPEED, MAX_FLY_SPEED ) UpdateSlider() end Slider.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseButton1 then Sliding = true SetSpeed(Input.Position.X) end end) Knob.InputBegan:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseButton1 then Sliding = true end end) UserInputService.InputChanged:Connect(function(Input) if not Sliding then return end if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseMovement then SetSpeed(Input.Position.X) end end) UserInputService.InputEnded:Connect(function(Input) if Input.UserInputType == Enum.UserInputType.Touch or Input.UserInputType == Enum.UserInputType.MouseButton1 then Sliding = false end end) --========================================================-- -- STOP CHARACTER ANIMATIONS --========================================================-- local function StopAnimations() if not Humanoid then return end for _, Track in ipairs( Humanoid:GetPlayingAnimationTracks() ) do Track:Stop(0) end end --========================================================-- -- FLY START --========================================================-- local function StartFly() if not Root or not Humanoid then return end Flying = true Humanoid.AutoRotate = false StopAnimations() FlyAttachment = Instance.new("Attachment") FlyAttachment.Parent = Root FlyVelocity = Instance.new("LinearVelocity") FlyVelocity.Attachment0 = FlyAttachment FlyVelocity.RelativeTo = Enum.ActuatorRelativeTo.World FlyVelocity.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector FlyVelocity.MaxForce = math.huge FlyVelocity.VectorVelocity = Vector3.zero FlyVelocity.Parent = Root end --========================================================-- -- FLY STOP --========================================================-- local function StopFly() Flying = false if FlyVelocity then FlyVelocity:Destroy() FlyVelocity = nil end if FlyAttachment then FlyAttachment:Destroy() FlyAttachment = nil end if Humanoid then Humanoid.AutoRotate = true end end --========================================================-- -- FLY BUTTON --========================================================-- FlyButton.Activated:Connect(function() if Flying then StopFly() else StartFly() end FlyButton.Text = "FLY: " .. ( Flying and "ON" or "OFF" ) end) --========================================================-- -- FINAL MOBILE FLY MOVEMENT --========================================================-- RunService.RenderStepped:Connect(function() if not Flying or not FlyVelocity or not Humanoid or not Root then return end StopAnimations() local Camera = workspace.CurrentCamera local MoveDirection = Humanoid.MoveDirection if MoveDirection.Magnitude < 0.01 then FlyVelocity.VectorVelocity = Vector3.zero else local CameraLook = Camera.CFrame.LookVector local CameraRight = Camera.CFrame.RightVector local FlatRight = Vector3.new( CameraRight.X, 0, CameraRight.Z ) if FlatRight.Magnitude > 0.001 then FlatRight = FlatRight.Unit else FlatRight = Vector3.new( 1, 0, 0 ) end local FlatForward = Vector3.new( CameraLook.X, 0, CameraLook.Z ) if FlatForward.Magnitude > 0.001 then FlatForward = FlatForward.Unit else FlatForward = Vector3.new( 0, 0, -1 ) end local ForwardAmount = MoveDirection:Dot( FlatForward ) local SideAmount = MoveDirection:Dot( FlatRight ) local Direction = ( CameraLook * ForwardAmount ) + ( FlatRight * SideAmount ) if Direction.Magnitude > 0.001 then Direction = Direction.Unit FlyVelocity.VectorVelocity = Direction * FlySpeed else FlyVelocity.VectorVelocity = Vector3.zero end end local LookVector = Camera.CFrame.LookVector local UpVector = Camera.CFrame.UpVector if LookVector.Magnitude > 0.001 then Root.CFrame = CFrame.lookAt( Root.Position, Root.Position + LookVector, UpVector ) end end) --========================================================-- -- NOCLIP --========================================================-- NoclipButton.Activated:Connect(function() Noclip = not Noclip NoclipButton.Text = "NOCLIP: " .. ( Noclip and "ON" or "OFF" ) end) RunService.Stepped:Connect(function() if not Noclip or not Character then return end for _, Part in ipairs( Character:GetDescendants() ) do if Part:IsA("BasePart") then Part.CanCollide = false end end end) --========================================================-- -- INFINITE JUMP --========================================================-- JumpButton.Activated:Connect(function() InfiniteJump = not InfiniteJump JumpButton.Text = "INFINITE JUMP: " .. ( InfiniteJump and "ON" or "OFF" ) end) UserInputService.JumpRequest:Connect(function() if InfiniteJump and Humanoid then Humanoid:ChangeState( Enum.HumanoidStateType.Jumping ) end end) --========================================================-- -- ESP --========================================================-- local function RemoveESP(Player) local Data = ESPObjects[Player] if not Data then return end if Data.Highlight then Data.Highlight:Destroy() end if Data.Billboard then Data.Billboard:Destroy() end ESPObjects[Player] = nil end local function AddESP(Player) if Player == LocalPlayer then return end RemoveESP(Player) local Char = Player.Character if not Char then return end local Highlight = Instance.new("Highlight") Highlight.FillTransparency = 0.75 Highlight.OutlineTransparency = 0 Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop Highlight.Parent = Char local Head = Char:FindFirstChild("Head") if not Head then return end local Billboard = Instance.new("BillboardGui") Billboard.Size = UDim2.fromOffset( 200, 30 ) Billboard.StudsOffset = Vector3.new( 0, 3.5, 0 ) Billboard.AlwaysOnTop = true Billboard.Adornee = Head Billboard.Parent = Head local Label = Instance.new("TextLabel") Label.Size = UDim2.fromScale( 1, 1 ) Label.BackgroundTransparency = 1 Label.Text = Player.DisplayName .. " @" .. Player.Name Label.TextStrokeTransparency = 0 Label.TextSize = 12 Label.Font = Enum.Font.GothamBold Label.Parent = Billboard ESPObjects[Player] = { Highlight = Highlight, Billboard = Billboard, Label = Label } end local function RefreshESP() for Player in pairs( ESPObjects ) do RemoveESP(Player) end if not ESPEnabled then return end for _, Player in ipairs( Players:GetPlayers() ) do if Player ~= LocalPlayer then AddESP(Player) end end end ESPButton.Activated:Connect(function() ESPEnabled = not ESPEnabled ESPButton.Text = "ESP: " .. ( ESPEnabled and "ON" or "OFF" ) RefreshESP() end) Players.PlayerAdded:Connect(function(Player) Player.CharacterAdded:Connect(function() task.wait(0.5) if ESPEnabled then AddESP(Player) end end) end) Players.PlayerRemoving:Connect( RemoveESP ) --========================================================-- -- TELEPORT SECTION --========================================================-- local TeleportTitle = Instance.new("TextLabel") TeleportTitle.Size = UDim2.new( 1, -20, 0, 22 ) TeleportTitle.Position = UDim2.fromOffset( 10, 180 ) TeleportTitle.BackgroundTransparency = 1 TeleportTitle.Text = "Teleport To Player" TeleportTitle.TextColor3 = Color3.new( 1, 1, 1 ) TeleportTitle.TextSize = 13 TeleportTitle.Font = Enum.Font.GothamBold TeleportTitle.TextXAlignment = Enum.TextXAlignment.Left TeleportTitle.Parent = Main --========================================================-- -- PLAYER SCROLLING LIST --========================================================-- local PlayerList = Instance.new("ScrollingFrame") PlayerList.Position = UDim2.fromOffset( 10, 205 ) PlayerList.Size = UDim2.new( 1, -20, 1, -215 ) PlayerList.BackgroundColor3 = Color3.fromRGB( 28, 28, 35 ) PlayerList.BorderSizePixel = 0 PlayerList.ScrollBarThickness = 4 PlayerList.CanvasSize = UDim2.fromOffset( 0, 0 ) PlayerList.Parent = Main local ListCorner = Instance.new("UICorner") ListCorner.CornerRadius = UDim.new( 0, 9 ) ListCorner.Parent = PlayerList local ListLayout = Instance.new("UIListLayout") ListLayout.Padding = UDim.new( 0, 4 ) ListLayout.Parent = PlayerList local function RefreshPlayers() for _, Child in ipairs( PlayerList:GetChildren() ) do if Child:IsA("TextButton") then Child:Destroy() end end for _, Target in ipairs( Players:GetPlayers() ) do if Target ~= LocalPlayer then local Button = Instance.new("TextButton") Button.Size = UDim2.new( 1, -8, 0, 30 ) Button.BackgroundColor3 = Color3.fromRGB( 45, 45, 53 ) Button.TextColor3 = Color3.new( 1, 1, 1 ) Button.Text = "Teleport → " .. Target.DisplayName Button.TextSize = 11 Button.Font = Enum.Font.GothamBold Button.Parent = PlayerList local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new( 0, 6 ) Corner.Parent = Button Button.Activated:Connect(function() if not Root then return end local TargetCharacter = Target.Character if not TargetCharacter then return end local TargetRoot = TargetCharacter:FindFirstChild( "HumanoidRootPart" ) if TargetRoot then Root.CFrame = TargetRoot.CFrame * CFrame.new( 3, 0, 0 ) end end) end end task.wait() PlayerList.CanvasSize = UDim2.fromOffset( 0, ListLayout.AbsoluteContentSize.Y + 5 ) end RefreshPlayers() Players.PlayerAdded:Connect( RefreshPlayers ) Players.PlayerRemoving:Connect( RefreshPlayers ) --========================================================-- -- MINIMIZED BUTTON --========================================================-- local Tiger = Instance.new("TextButton") Tiger.Size = UDim2.fromOffset( 60, 60 ) Tiger.AnchorPoint = Vector2.new( 0.5, 0 ) Tiger.Position = UDim2.new( 0.5, 0, 0, 12 ) Tiger.BackgroundColor3 = Color3.fromRGB( 20, 20, 25 ) -- CHANGED TO 🥵 Tiger.Text = "🥵" Tiger.TextSize = 30 Tiger.Visible = false Tiger.Parent = Gui local TigerCorner = Instance.new("UICorner") TigerCorner.CornerRadius = UDim.new( 0, 14 ) TigerCorner.Parent = Tiger local TigerStroke = Instance.new("UIStroke") TigerStroke.Thickness = 4 TigerStroke.Parent = Tiger MakeDraggable(Tiger) --========================================================-- -- CLOSE --========================================================-- Close.Activated:Connect(function() Main.Visible = false Tiger.Visible = true -- Keeps the existing behavior: -- minimized button returns to top-center. Tiger.Position = UDim2.new( 0.5, 0, 0, 12 ) end) --========================================================-- -- OPEN --========================================================-- Tiger.Activated:Connect(function() Main.Visible = true Tiger.Visible = false end) --========================================================-- -- RGB LOOP --========================================================-- RunService.RenderStepped:Connect(function() local Color = GetRGB() MainStroke.Color = Color TigerStroke.Color = Color Fill.BackgroundColor3 = Color if ESPEnabled then for _, Data in pairs( ESPObjects ) do if Data.Highlight then Data.Highlight.FillColor = Color Data.Highlight.OutlineColor = Color end if Data.Label then Data.Label.TextColor3 = Color end end end end) --========================================================-- -- CLEANUP --========================================================-- Gui.Destroying:Connect(function() StopFly() for Player in pairs( ESPObjects ) do RemoveESP(Player) end end) print( "🍆 Gooner Hub 🍑 loaded successfully." ) print( "Default fly speed: 50" ) print( "Maximum fly speed: 350" )