
Key Required VerifiedUniversal

--[[
============================================================
š 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"
)No comments yet for this script.



