NEW Ghost hub  ORIGINAL
Key RequiredUniversal

NEW Ghost hub ORIGINAL

Universal ScriptJfert_alt_accJfert_alt_acc 330.1K views 42.6K executesUpdated Apr 17, 2025
5.0/ 5(6 votes)
60100% Positive
Lua Script•775 lines (21538 chars)
-- GHOST UI Hub for Roblox
-- Made by camreng1234 on scriptblox

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local StarterGui = game:GetService("StarterGui")

local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local Camera = workspace.CurrentCamera

-- Constants
local NORMAL_WALKSPEED = 16
local NORMAL_GRAVITY = workspace.Gravity

-- Variables for states
local flying = false
local flySpeed = 100
local flyBodyVelocity = nil
local flyBodyGyro = nil

local espEnabled = false
local espHighlights = {}

local noclipEnabled = false
local noclipConnection = nil

local humpEnabled = false
local humpTarget = nil
local humpAnimConnection = nil
local humpFollowConnection = nil

local glitchEnabled = false
local glitchConnection = nil
local glitchTargets = {}

local distanceEspEnabled = false
local distanceEspLabels = {}

local gravityChanged = false

-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GHOST_UIHub"
screenGui.ResetOnSpawn = false
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")

-- Notification on load
StarterGui:SetCore("SendNotification", {
	Title = "GHOST UI Hub";
	Text = "Made by camreng1234 on scriptblox";
	Duration = 5;
})

-- Main Frame
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 280, 0, 400)
mainFrame.Position = UDim2.new(1, -290, 0, 10) -- Top right with 10px margin
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
mainFrame.BorderSizePixel = 0
mainFrame.BackgroundTransparency = 0.15
mainFrame.Parent = screenGui
mainFrame.ClipsDescendants = true
mainFrame.Active = true

-- UI Corner rounding
local uicorner = Instance.new("UICorner")
uicorner.CornerRadius = UDim.new(0, 8)
uicorner.Parent = mainFrame

-- Title
local title = Instance.new("TextLabel")
title.Name = "Title"
title.Size = UDim2.new(1, 0, 0, 30)
title.BackgroundTransparency = 1
title.Text = "GHOST"
title.Font = Enum.Font.GothamBold
title.TextSize = 22
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Parent = mainFrame

-- Scrolling frame for buttons
local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Name = "ScrollFrame"
scrollFrame.Size = UDim2.new(1, 0, 1, -30)
scrollFrame.Position = UDim2.new(0, 0, 0, 30)
scrollFrame.BackgroundTransparency = 1
scrollFrame.ScrollBarThickness = 6
scrollFrame.Parent = mainFrame
scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)

local uiListLayout = Instance.new("UIListLayout")
uiListLayout.Parent = scrollFrame
uiListLayout.SortOrder = Enum.SortOrder.LayoutOrder
uiListLayout.Padding = UDim.new(0, 6)

local uiPadding = Instance.new("UIPadding")
uiPadding.Parent = scrollFrame
uiPadding.PaddingTop = UDim.new(0, 6)
uiPadding.PaddingLeft = UDim.new(0, 6)
uiPadding.PaddingRight = UDim.new(0, 6)
uiPadding.PaddingBottom = UDim.new(0, 6)

-- Dragging functionality for mainFrame
do
	local dragging = false
	local dragInput, dragStart, startPos

	mainFrame.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			dragging = true
			dragStart = input.Position
			startPos = mainFrame.Position
			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragging = false
				end
			end)
		end
	end)

	mainFrame.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement then
			dragInput = input
		end
	end)

	UserInputService.InputChanged:Connect(function(input)
		if input == dragInput and dragging then
			local delta = input.Position - dragStart
			local newPos = UDim2.new(
				math.clamp(startPos.X.Scale, 0, 1),
				math.clamp(startPos.X.Offset + delta.X, 0, workspace.CurrentCamera.ViewportSize.X - mainFrame.AbsoluteSize.X),
				math.clamp(startPos.Y.Scale, 0, 1),
				math.clamp(startPos.Y.Offset + delta.Y, 0, workspace.CurrentCamera.ViewportSize.Y - mainFrame.AbsoluteSize.Y)
			)
			mainFrame.Position = newPos
		end
	end)
end

-- Helper function to create buttons
local function createButton(text)
	local btn = Instance.new("TextButton")
	btn.Size = UDim2.new(1, 0, 0, 30)
	btn.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
	btn.BorderSizePixel = 0
	btn.TextColor3 = Color3.fromRGB(255, 255, 255)
	btn.Font = Enum.Font.GothamSemibold
	btn.TextSize = 18
	btn.Text = text
	btn.AutoButtonColor = true
	btn.Name = text:gsub("%s", "") -- Remove spaces for name
	local btnCorner = Instance.new("UICorner")
	btnCorner.CornerRadius = UDim.new(0, 6)
	btnCorner.Parent = btn
	return btn
end

-- Helper function to create textboxes
local function createTextbox(placeholder)
	local tb = Instance.new("TextBox")
	tb.Size = UDim2.new(1, 0, 0, 25)
	tb.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
	tb.BorderSizePixel = 0
	tb.TextColor3 = Color3.fromRGB(255, 255, 255)
	tb.Font = Enum.Font.Gotham
	tb.TextSize = 16
	tb.PlaceholderText = placeholder
	tb.ClearTextOnFocus = false
	tb.Name = placeholder:gsub("%s", "") .. "Textbox"
	local tbCorner = Instance.new("UICorner")
	tbCorner.CornerRadius = UDim.new(0, 6)
	tbCorner.Parent = tb
	return tb
end

-- ========== BUTTONS AND TEXTBOXES ==========

-- 1. FLY
local btnFly = createButton("FLY")
btnFly.Parent = scrollFrame

-- 2. UNFLY
local btnUnFly = createButton("UNFLY")
btnUnFly.Parent = scrollFrame

-- 3. ESP
local btnESP = createButton("ESP")
btnESP.Parent = scrollFrame

-- 4. UN ESP
local btnUnESP = createButton("UN ESP")
btnUnESP.Parent = scrollFrame

-- 5. NOCLIP
local btnNoclip = createButton("NOCLIP")
btnNoclip.Parent = scrollFrame

-- 6. UN NOCLIP
local btnUnNoclip = createButton("UN NOCLIP")
btnUnNoclip.Parent = scrollFrame

-- 7. WALK SPEED
local btnWalkSpeed = createButton("WALK SPEED")
btnWalkSpeed.Parent = scrollFrame

-- 8. UN WALK SPEED
local btnUnWalkSpeed = createButton("UN WALK SPEED")
btnUnWalkSpeed.Parent = scrollFrame

-- 9. TELEPORT + textbox
local btnTeleport = createButton("TELEPORT")
btnTeleport.Parent = scrollFrame
local tbTeleport = createTextbox("Player name or first 3 letters")
tbTeleport.Parent = scrollFrame

-- 10. GLITCH
local btnGlitch = createButton("GLITCH")
btnGlitch.Parent = scrollFrame

-- 11. UN GLITCH
local btnUnGlitch = createButton("UN GLITCH")
btnUnGlitch.Parent = scrollFrame

-- 12. HUMP + textbox
local btnHump = createButton("HUMP")
btnHump.Parent = scrollFrame
local tbHump = createTextbox("Player name or first 3 letters")
tbHump.Parent = scrollFrame

-- 13. UN HUMP
local btnUnHump = createButton("UN HUMP")
btnUnHump.Parent = scrollFrame

-- 14. DISTANCE ESP
local btnDistanceESP = createButton("DISTANCE ESP")
btnDistanceESP.Parent = scrollFrame

-- 15. UN DISTANCE ESP
local btnUnDistanceESP = createButton("UN DISTANCE ESP")
btnUnDistanceESP.Parent = scrollFrame

-- 16. GRAVITY CHANGER + textbox
local btnGravityChanger = createButton("GRAVITY CHANGER")
btnGravityChanger.Parent = scrollFrame
local tbGravityChanger = createTextbox("0-100")
tbGravityChanger.Parent = scrollFrame

-- 17. RESET GRAVITY
local btnResetGravity = createButton("RESET GRAVITY")
btnResetGravity.Parent = scrollFrame

-- Update canvas size on layout change
uiListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
	scrollFrame.CanvasSize = UDim2.new(0, 0, 0, uiListLayout.AbsoluteContentSize.Y + 10)
end)

-- ========== FUNCTIONALITY ==========

-- FLY implementation
local function startFly()
	if flying then return end
	flying = true

	-- Create BodyVelocity and BodyGyro for smooth flying
	flyBodyVelocity = Instance.new("BodyVelocity")
	flyBodyVelocity.MaxForce = Vector3.new(1e5, 1e5, 1e5)
	flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
	flyBodyVelocity.Parent = HumanoidRootPart

	flyBodyGyro = Instance.new("BodyGyro")
	flyBodyGyro.MaxTorque = Vector3.new(1e5, 1e5, 1e5)
	flyBodyGyro.CFrame = HumanoidRootPart.CFrame
	flyBodyGyro.Parent = HumanoidRootPart

	-- Disable Humanoid's platform stand to allow flying
	Humanoid.PlatformStand = false

	-- Fly control variables
	local speed = flySpeed
	local moveDirection = Vector3.new(0, 0, 0)

	local function updateFly()
		if not flying then return end
		local cameraCFrame = Camera.CFrame
		local moveVec = Vector3.new(0, 0, 0)
		if UserInputService:IsKeyDown(Enum.KeyCode.W) then
			moveVec = moveVec + cameraCFrame.LookVector
		end
		if UserInputService:IsKeyDown(Enum.KeyCode.S) then
			moveVec = moveVec - cameraCFrame.LookVector
		end
		if UserInputService:IsKeyDown(Enum.KeyCode.A) then
			moveVec = moveVec - cameraCFrame.RightVector
		end
		if UserInputService:IsKeyDown(Enum.KeyCode.D) then
			moveVec = moveVec + cameraCFrame.RightVector
		end
		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
			moveVec = moveVec + Vector3.new(0, 1, 0)
		end
		if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
			moveVec = moveVec - Vector3.new(0, 1, 0)
		end
		moveVec = moveVec.Unit * speed
		if moveVec ~= moveVec then -- NaN check
			moveVec = Vector3.new(0, 0, 0)
		end
		flyBodyVelocity.Velocity = moveVec
		flyBodyGyro.CFrame = Camera.CFrame
	end

	-- Connect to RenderStepped for smooth flying
	flyConnection = RunService.RenderStepped:Connect(updateFly)
end

local function stopFly()
	if not flying then return end
	flying = false
	if flyBodyVelocity then
		flyBodyVelocity:Destroy()
		flyBodyVelocity = nil
	end
	if flyBodyGyro then
		flyBodyGyro:Destroy()
		flyBodyGyro = nil
	end
	if flyConnection then
		flyConnection:Disconnect()
		flyConnection = nil
	end
	Humanoid.PlatformStand = false
end

-- ESP implementation
local function enableESP()
	if espEnabled then return end
	espEnabled = true
	for _, plr in pairs(Players:GetPlayers()) do
		if plr ~= LocalPlayer and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
			local highlight = Instance.new("Highlight")
			highlight.Adornee = plr.Character
			highlight.FillTransparency = 0.5
			highlight.OutlineTransparency = 0
			highlight.Parent = plr.Character
			espHighlights[plr] = highlight
		end
	end
	-- Connect to player added and character added to add highlights dynamically
	espConnection = Players.PlayerAdded:Connect(function(plr)
		plr.CharacterAdded:Connect(function(char)
			if espEnabled and plr ~= LocalPlayer then
				wait(0.1)
				if char and char:FindFirstChild("HumanoidRootPart") then
					local highlight = Instance.new("Highlight")
					highlight.Adornee = char
					highlight.FillTransparency = 0.5
					highlight.OutlineTransparency = 0
					highlight.Parent = char
					espHighlights[plr] = highlight
				end
			end
		end)
	end)
	-- Rainbow color update loop
	espRainbowConnection = RunService.RenderStepped:Connect(function()
		if not espEnabled then return end
		local time = tick()
		for plr, highlight in pairs(espHighlights) do
			local hue = (time * 60) % 360
			local color = Color3.fromHSV(hue / 360, 1, 1)
			highlight.FillColor = color
			highlight.OutlineColor = color
		end
	end)
end

local function disableESP()
	if not espEnabled then return end
	espEnabled = false
	for plr, highlight in pairs(espHighlights) do
		if highlight and highlight.Parent then
			highlight:Destroy()
		end
	end
	espHighlights = {}
	if espConnection then
		espConnection:Disconnect()
		espConnection = nil
	end
	if espRainbowConnection then
		espRainbowConnection:Disconnect()
		espRainbowConnection = nil
	end
end

-- NOCLIP implementation
local function enableNoclip()
	if noclipEnabled then return end
	noclipEnabled = true
	noclipConnection = RunService.Stepped:Connect(function()
		if Character then
			for _, part in pairs(Character:GetChildren()) do
				if part:IsA("BasePart") and part.CanCollide then
					part.CanCollide = false
				end
			end
		end
	end)
end

local function disableNoclip()
	if not noclipEnabled then return end
	noclipEnabled = false
	if noclipConnection then
		noclipConnection:Disconnect()
		noclipConnection = nil
	end
	if Character then
		for _, part in pairs(Character:GetChildren()) do
			if part:IsA("BasePart") then
				part.CanCollide = true
			end
		end
	end
end

-- WALK SPEED implementation
local function setWalkSpeed(speed)
	if Humanoid then
		Humanoid.WalkSpeed = speed
	end
end

-- TELEPORT implementation
local function teleportToPlayer(nameOrPrefix)
	if not nameOrPrefix or nameOrPrefix == "" then return end
	local targetPlayer = nil
	local lowerInput = nameOrPrefix:lower()
	for _, plr in pairs(Players:GetPlayers()) do
		if plr.Name:lower():sub(1, #lowerInput) == lowerInput or (plr.DisplayName and plr.DisplayName:lower():sub(1, #lowerInput) == lowerInput) then
			targetPlayer = plr
			break
		end
	end
	if targetPlayer and targetPlayer.Character and targetPlayer.Character:FindFirstChild("HumanoidRootPart") then
		HumanoidRootPart.CFrame = targetPlayer.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0)
	end
end

-- GLITCH implementation (head and neck only)
local function startGlitch()
	if glitchEnabled then return end
	glitchEnabled = true

	local function glitchPlayer(plr)
		if not plr.Character then return end
		local head = plr.Character:FindFirstChild("Head")
		local humanoid = plr.Character:FindFirstChildOfClass("Humanoid")
		if not head or not humanoid then return end
		local neck = nil
		for _, joint in pairs(head:GetJoints()) do
			if joint.Name == "Neck" then
				neck = joint
				break
			end
		end
		if not neck then
			-- Try to find neck via HumanoidRootPart and Head CFrame difference
			neck = humanoid:FindFirstChild("Neck")
		end
		if glitchTargets[plr] then return end -- Already glitching

		local originalC0 = nil
		if neck and neck:IsA("Motor6D") then
			originalC0 = neck.C0
		end

		local glitching = true

		local conn
		conn = RunService.Heartbeat:Connect(function()
			if not glitchEnabled or not plr.Character or not head or not neck or not neck:IsDescendantOf(plr.Character) then
				conn:Disconnect()
				if neck and originalC0 then
					neck.C0 = originalC0
				end
				glitchTargets[plr] = nil
				return
			end
			local t = tick() * 20
			local offsetY = math.sin(t) * 2
			head.CFrame = head.CFrame * CFrame.new(0, offsetY, 0)
			if neck and neck:IsA("Motor6D") and originalC0 then
				neck.C0 = originalC0 * CFrame.new(0, offsetY, 0)
			end
		end)
		glitchTargets[plr] = conn
	end

	for _, plr in pairs(Players:GetPlayers()) do
		glitchPlayer(plr)
	end

	Players.PlayerAdded:Connect(function(plr)
		plr.CharacterAdded:Connect(function()
			if glitchEnabled then
				wait(0.1)
				glitchPlayer(plr)
			end
		end)
	end)
end

local function stopGlitch()
	if not glitchEnabled then return end
	glitchEnabled = false
	for plr, conn in pairs(glitchTargets) do
		if conn then
			conn:Disconnect()
		end
		if plr.Character then
			local head = plr.Character:FindFirstChild("Head")
			local humanoid = plr.Character:FindFirstChildOfClass("Humanoid")
			local neck = nil
			if head and humanoid then
				for _, joint in pairs(head:GetJoints()) do
					if joint.Name == "Neck" then
						neck = joint
						break
					end
				end
				if neck and neck:IsA("Motor6D") then
					neck.C0 = neck.C0 -- Reset to current to avoid weirdness
				end
			end
		end
	end
	glitchTargets = {}
end

-- HUMP implementation
local function startHump(targetName)
	if humpEnabled then return end
	if not targetName or targetName == "" then return end
	local targetPlayer = nil
	local lowerInput = targetName:lower()
	for _, plr in pairs(Players:GetPlayers()) do
		if plr.Name:lower():sub(1, #lowerInput) == lowerInput or (plr.DisplayName and plr.DisplayName:lower():sub(1, #lowerInput) == lowerInput) then
			targetPlayer = plr
			break
		end
	end
	if not targetPlayer or not targetPlayer.Character or not targetPlayer.Character:FindFirstChild("HumanoidRootPart") then return end

	humpEnabled = true
	humpTarget = targetPlayer

	-- Animation: move back and forth fast behind target, facing them, on ground
	local function humpStep()
		if not humpEnabled or not humpTarget or not humpTarget.Character or not humpTarget.Character:FindFirstChild("HumanoidRootPart") then
			return
		end
		local targetHRP = humpTarget.Character.HumanoidRootPart
		local targetCF = targetHRP.CFrame
		local behindOffset = -3 -- studs behind
		local heightOffset = -3 -- on ground (approximate)
		local directionToTarget = (targetCF.Position - HumanoidRootPart.Position).Unit
		local desiredPos = targetCF * CFrame.new(0, heightOffset, behindOffset)
		-- Face the target
		local lookAt = CFrame.new(desiredPos.Position, targetCF.Position)
		-- Oscillate back and forth fast
		local oscillate = math.sin(tick() * 30) * 1.5
		local offset = lookAt.LookVector * oscillate
		local finalPos = desiredPos.Position + offset
		HumanoidRootPart.CFrame = CFrame.new(finalPos, targetCF.Position)
	end

	humpAnimConnection = RunService.Heartbeat:Connect(function()
		if not humpEnabled then return end
		if not humpTarget or not humpTarget.Character or not humpTarget.Character:FindFirstChild("HumanoidRootPart") then
			humpEnabled = false
			if humpAnimConnection then
				humpAnimConnection:Disconnect()
				humpAnimConnection = nil
			end
			return
		end
		humpStep()
	end)
end

local function stopHump()
	if not humpEnabled then return end
	humpEnabled = false
	if humpAnimConnection then
		humpAnimConnection:Disconnect()
		humpAnimConnection = nil
	end
	humpTarget = nil
end

-- DISTANCE ESP implementation
local function enableDistanceESP()
	if distanceEspEnabled then return end
	distanceEspEnabled = true

	local function createDistanceLabel(plr)
		if plr == LocalPlayer then return end
		if distanceEspLabels[plr] then return end
		local billboard = Instance.new("BillboardGui")
		billboard.Name = "DistanceESP"
		billboard.Adornee = nil
		billboard.Size = UDim2.new(0, 100, 0, 30)
		billboard.StudsOffset = Vector3.new(0, 3, 0)
		billboard.AlwaysOnTop = true
		billboard.Parent = screenGui

		local textLabel = Instance.new("TextLabel")
		textLabel.BackgroundTransparency = 1
		textLabel.Size = UDim2.new(1, 0, 1, 0)
		textLabel.TextColor3 = Color3.new(1, 1, 1)
		textLabel.Font = Enum.Font.GothamBold
		textLabel.TextSize = 18
		textLabel.TextStrokeTransparency = 0
		textLabel.Parent = billboard

		distanceEspLabels[plr] = {Billboard = billboard, Label = textLabel}
	end

	for _, plr in pairs(Players:GetPlayers()) do
		createDistanceLabel(plr)
	end

	Players.PlayerAdded:Connect(function(plr)
		createDistanceLabel(plr)
	end)

	distanceEspConnection = RunService.RenderStepped:Connect(function()
		if not distanceEspEnabled then return end
		for plr, data in pairs(distanceEspLabels) do
			if plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
				data.Billboard.Adornee = plr.Character.HumanoidRootPart
				local dist = (HumanoidRootPart.Position - plr.Character.HumanoidRootPart.Position).Magnitude
				data.Label.Text = string.format("%s: %.1f studs", plr.Name, dist)
			else
				data.Billboard.Adornee = nil
				data.Label.Text = ""
			end
		end
	end)
end

local function disableDistanceESP()
	if not distanceEspEnabled then return end
	distanceEspEnabled = false
	if distanceEspConnection then
		distanceEspConnection:Disconnect()
		distanceEspConnection = nil
	end
	for _, data in pairs(distanceEspLabels) do
		if data.Billboard then
			data.Billboard:Destroy()
		end
	end
	distanceEspLabels = {}
end

-- GRAVITY CHANGER implementation
local function setGravity(value)
	value = tonumber(value)
	if not value then return end
	if value < 0 then value = 0 end
	if value > 100 then value = 100 end
	workspace.Gravity = value
	gravityChanged = true
end

local function resetGravity()
	workspace.Gravity = NORMAL_GRAVITY
	gravityChanged = false
end

-- ========== BUTTON CONNECTIONS ==========

btnFly.MouseButton1Click:Connect(function()
	startFly()
end)

btnUnFly.MouseButton1Click:Connect(function()
	stopFly()
end)

btnESP.MouseButton1Click:Connect(function()
	enableESP()
end)

btnUnESP.MouseButton1Click:Connect(function()
	disableESP()
end)

btnNoclip.MouseButton1Click:Connect(function()
	enableNoclip()
end)

btnUnNoclip.MouseButton1Click:Connect(function()
	disableNoclip()
end)

btnWalkSpeed.MouseButton1Click:Connect(function()
	setWalkSpeed(100)
end)

btnUnWalkSpeed.MouseButton1Click:Connect(function()
	setWalkSpeed(NORMAL_WALKSPEED)
end)

btnTeleport.MouseButton1Click:Connect(function()
	teleportToPlayer(tbTeleport.Text)
end)

btnGlitch.MouseButton1Click:Connect(function()
	startGlitch()
end)

btnUnGlitch.MouseButton1Click:Connect(function()
	stopGlitch()
end)

btnHump.MouseButton1Click:Connect(function()
	startHump(tbHump.Text)
end)

btnUnHump.MouseButton1Click:Connect(function()
	stopHump()
end)

btnDistanceESP.MouseButton1Click:Connect(function()
	enableDistanceESP()
end)

btnUnDistanceESP.MouseButton1Click:Connect(function()
	disableDistanceESP()
end)

btnGravityChanger.MouseButton1Click:Connect(function()
	setGravity(tbGravityChanger.Text)
end)

btnResetGravity.MouseButton1Click:Connect(function()
	resetGravity()
end)

-- Cleanup on character respawn
LocalPlayer.CharacterAdded:Connect(function(char)
	Character = char
	Humanoid = char:WaitForChild("Humanoid")
	HumanoidRootPart = char:WaitForChild("HumanoidRootPart")
	-- Reset walk speed and gravity on respawn
	setWalkSpeed(NORMAL_WALKSPEED)
	resetGravity()
	-- Stop fly, noclip, hump, glitch on respawn
	stopFly()
	disableNoclip()
	stopHump()
	stopGlitch()
	disableESP()
	disableDistanceESP()
end)

Features & Information

This is a hub I am working on I will make it better the glitch is messed up rn it was supposed to make the head of it glitch but i am working on it
#universal

Community Comments (5)

Jfert_alt_accJfert_alt_accApr 17, 2025

I am also new at scripting and making scripts so don't expect it to be amazing

Jfert_alt_accJfert_alt_accApr 17, 2025

did I do bad?

tapiaolivert9tapiaolivert9May 21, 2025

Buenísimo

atishayrai02atishayrai02Oct 21, 2025

nahh soo good 10/100 keep doing it

YAAINOLIYAAINOLIJan 25, 2026

A1 D3t3ct3d

More Scripts for Universal Scripts