Jetts universal script (UPDATE)
Key RequiredUniversal

Jetts universal script (UPDATE)

Universal Scriptjrexbowjrexbow 1.7K views 11.9K executesUpdated Sep 27, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•880 lines (15819 chars)
--==================================================
-- JETT'S UNIVERSAL SCRIPT
-- Mobile Fly + Noclip + Speed + Shift Lock
--==================================================

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

local player = Players.LocalPlayer

--==================================================
-- SETTINGS
--==================================================

local flyEnabled = false
local noclipEnabled = false
local speedEnabled = false
local shiftLockEnabled = false
local menuClear = false

local FLY_SPEED = 60
local NORMAL_SPEED = 16
local FAST_SPEED = 50

local colors = {
	Color3.fromRGB(35,35,40),
	Color3.fromRGB(35,80,150),
	Color3.fromRGB(100,45,150),
	Color3.fromRGB(30,130,90),
	Color3.fromRGB(160,70,40),
	Color3.fromRGB(150,40,90)
}

local colorIndex = 1

--==================================================
-- CHARACTER
--==================================================

local character
local humanoid
local root

local function getCharacter()
	character = player.Character or player.CharacterAdded:Wait()

	humanoid = character:WaitForChild("Humanoid")
	root = character:WaitForChild("HumanoidRootPart")

	return character, humanoid, root
end

getCharacter()

--==================================================
-- GUI
--==================================================

local gui = Instance.new("ScreenGui")
gui.Name = "JettsUniversalScript"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player:WaitForChild("PlayerGui")

local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.fromOffset(300,380)
main.Position = UDim2.new(0.5,-150,0.5,-190)
main.BackgroundColor3 = colors[colorIndex]
main.BackgroundTransparency = 0.08
main.BorderSizePixel = 0
main.Active = true
main.Parent = gui

local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0,14)
corner.Parent = main

local outline = Instance.new("UIStroke")
outline.Thickness = 2
outline.Transparency = 0.2
outline.Parent = main

--==================================================
-- TITLE
--==================================================

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1,-60,0,45)
title.Position = UDim2.fromOffset(15,5)
title.BackgroundTransparency = 1
title.Text = "Jett's Universal Script"
title.TextColor3 = Color3.new(1,1,1)
title.TextSize = 20
title.Font = Enum.Font.GothamBold
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = main

--==================================================
-- CLOSE BUTTON
--==================================================

local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.fromOffset(35,35)
closeButton.Position = UDim2.new(1,-43,0,8)
closeButton.BackgroundColor3 = Color3.fromRGB(200,50,50)
closeButton.Text = "X"
closeButton.TextColor3 = Color3.new(1,1,1)
closeButton.TextSize = 18
closeButton.Font = Enum.Font.GothamBold
closeButton.Parent = main

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0,10)
closeCorner.Parent = closeButton

--==================================================
-- REOPEN BUTTON
--==================================================

local reopenButton = Instance.new("TextButton")
reopenButton.Size = UDim2.fromOffset(55,55)
reopenButton.Position = UDim2.fromOffset(20,200)
reopenButton.BackgroundColor3 = colors[colorIndex]
reopenButton.Text = "J"
reopenButton.TextColor3 = Color3.new(1,1,1)
reopenButton.TextSize = 24
reopenButton.Font = Enum.Font.GothamBold
reopenButton.Visible = false
reopenButton.Parent = gui

local reopenCorner = Instance.new("UICorner")
reopenCorner.CornerRadius = UDim.new(1,0)
reopenCorner.Parent = reopenButton

--==================================================
-- BUTTON FUNCTION
--==================================================

local buttons = {}

local function createButton(text, y)

	local button = Instance.new("TextButton")

	button.Size = UDim2.new(1,-30,0,42)
	button.Position = UDim2.fromOffset(15,y)

	button.BackgroundColor3 =
		Color3.fromRGB(45,45,50)

	button.BorderSizePixel = 0

	button.Text = text
	button.TextColor3 = Color3.new(1,1,1)
	button.TextSize = 16
	button.Font = Enum.Font.GothamSemibold

	button.AutoButtonColor = true

	button.Parent = main

	local c = Instance.new("UICorner")
	c.CornerRadius = UDim.new(0,10)
	c.Parent = button

	table.insert(buttons,button)

	return button
end

local flyButton =
	createButton("✈️ Fly: OFF",55)

local noclipButton =
	createButton("👻 Noclip: OFF",105)

local speedButton =
	createButton("⚡ Speed: OFF",155)

local shiftLockButton =
	createButton("🔒 Shift Lock: OFF",205)

local colorButton =
	createButton("🎨 Change Color",255)

local clearButton =
	createButton("🔲 Clear Menu",305)

--==================================================
-- MOBILE DRAGGING
--==================================================

local dragging = false
local dragInput
local dragStart
local startPosition

main.InputBegan:Connect(function(input)

	if input.UserInputType == Enum.UserInputType.MouseButton1
		or input.UserInputType == Enum.UserInputType.Touch then

		dragging = true
		dragStart = input.Position
		startPosition = main.Position

		dragInput = input
	end
end)

main.InputEnded:Connect(function(input)

	if input.UserInputType == Enum.UserInputType.MouseButton1
		or input.UserInputType == Enum.UserInputType.Touch then

		dragging = false
	end
end)

UserInputService.InputChanged:Connect(function(input)

	if not dragging then
		return
	end

	if input.UserInputType ~= Enum.UserInputType.MouseMovement
		and input.UserInputType ~= Enum.UserInputType.Touch then
		return
	end

	local delta =
		input.Position - dragStart

	main.Position = UDim2.new(
		startPosition.X.Scale,
		startPosition.X.Offset + delta.X,

		startPosition.Y.Scale,
		startPosition.Y.Offset + delta.Y
	)
end)

--==================================================
-- SHIFT LOCK
--==================================================

local function setShiftLock(enabled)

	shiftLockEnabled = enabled

	if shiftLockEnabled then

		shiftLockButton.Text =
			"🔒 Shift Lock: ON"

		if humanoid then
			humanoid.AutoRotate = false
			humanoid.CameraOffset =
				Vector3.new(1.75,0,0)
		end

	else

		shiftLockButton.Text =
			"🔓 Shift Lock: OFF"

		if humanoid then

			humanoid.CameraOffset =
				Vector3.zero

			if not flyEnabled then
				humanoid.AutoRotate = true
			end
		end
	end
end

shiftLockButton.Activated:Connect(function()

	setShiftLock(not shiftLockEnabled)
end)

--==================================================
-- GET CAMERA DIRECTION
--==================================================

local function getCameraDirection()

	local camera =
		workspace.CurrentCamera

	if not camera then
		return Vector3.zero, Vector3.zero
	end

	local look =
		camera.CFrame.LookVector

	local right =
		camera.CFrame.RightVector

	local flatLook =
		Vector3.new(
			look.X,
			0,
			look.Z
		)

	local flatRight =
		Vector3.new(
			right.X,
			0,
			right.Z
		)

	if flatLook.Magnitude > 0 then
		flatLook = flatLook.Unit
	end

	if flatRight.Magnitude > 0 then
		flatRight = flatRight.Unit
	end

	return look, flatLook, flatRight
end

--==================================================
-- FLY
--==================================================

local flyConnection

local savedCollision = {}
local savedAnchored = false
local savedWalkSpeed = NORMAL_SPEED
local savedAutoRotate = true

local function startFly()

	getCharacter()

	if not humanoid or not root then
		return
	end

	-- Save settings
	savedWalkSpeed = humanoid.WalkSpeed
	savedAutoRotate = humanoid.AutoRotate
	savedAnchored = root.Anchored

	-- IMPORTANT:
	-- Keep WalkSpeed above 0 so the mobile joystick
	-- continues giving us Humanoid.MoveDirection.
	humanoid.WalkSpeed =
		speedEnabled and FAST_SPEED or NORMAL_SPEED

	humanoid.AutoRotate = false

	-- Disable collisions
	savedCollision = {}

	for _,part in ipairs(character:GetDescendants()) do

		if part:IsA("BasePart") then

			savedCollision[part] =
				part.CanCollide

			part.CanCollide = false
		end
	end

	-- Anchor root so stairs/gravity cannot mess up flight
	root.Anchored = true

	if flyConnection then
		flyConnection:Disconnect()
	end

	flyConnection =
		RunService.RenderStepped:Connect(function(dt)

			if not flyEnabled then
				return
			end

			if not character
				or not character.Parent
				or not humanoid
				or not root then
				return
			end

			local camera =
				workspace.CurrentCamera

			if not camera then
				return
			end

			-- Mobile joystick direction
			local move =
				humanoid.MoveDirection

			local look =
				camera.CFrame.LookVector

			local right =
				camera.CFrame.RightVector

			local flatLook =
				Vector3.new(
					look.X,
					0,
					look.Z
				)

			local flatRight =
				Vector3.new(
					right.X,
					0,
					right.Z
				)

			if flatLook.Magnitude > 0 then
				flatLook = flatLook.Unit
			end

			if flatRight.Magnitude > 0 then
				flatRight = flatRight.Unit
			end

			-- Convert joystick movement into
			-- camera-relative movement
			local forwardAmount =
				move:Dot(flatLook)

			local rightAmount =
				move:Dot(flatRight)

			local direction =
				flatLook * forwardAmount
				+
				flatRight * rightAmount

			-- Up/down comes from camera angle
			if math.abs(forwardAmount) > 0.01 then

				direction += Vector3.new(
					0,
					look.Y * forwardAmount,
					0
				)
			end

			-- Move
			if direction.Magnitude > 0.01 then

				direction =
					direction.Unit

				local newPosition =
					root.Position
					+
					direction * FLY_SPEED * dt

				--==================================================
				-- FIXED ROTATION
				--==================================================

				-- ALWAYS face the direction of the camera
				-- while flying.
				local facing =
					Vector3.new(
						look.X,
						0,
						look.Z
					)

				if facing.Magnitude > 0.01 then

					facing =
						facing.Unit

					root.CFrame =
						CFrame.lookAt(
							newPosition,
							newPosition + facing
						)

				else

					root.CFrame =
						CFrame.new(newPosition)
				end

			else

				-- Even when standing still,
				-- keep looking wherever the camera looks.

				local facing =
					Vector3.new(
						look.X,
						0,
						look.Z
					)

				if facing.Magnitude > 0.01 then

					facing =
						facing.Unit

					root.CFrame =
						CFrame.lookAt(
							root.Position,
							root.Position + facing
						)
				end
			end

			-- Completely stop physics
			root.AssemblyLinearVelocity =
				Vector3.zero

			root.AssemblyAngularVelocity =
				Vector3.zero

			-- Keep all body parts non-collidable
			for _,part in ipairs(character:GetDescendants()) do

				if part:IsA("BasePart") then
					part.CanCollide = false
				end
			end
		end)
end

local function stopFly()

	if flyConnection then

		flyConnection:Disconnect()
		flyConnection = nil
	end

	if not character
		or not character.Parent then
		return
	end

	-- Restore collision
	for part,oldCollision in pairs(savedCollision) do

		if part and part.Parent then

			if noclipEnabled then
				part.CanCollide = false
			else
				part.CanCollide =
					oldCollision
			end
		end
	end

	savedCollision = {}

	if root then

		root.Anchored =
			savedAnchored

		root.AssemblyLinearVelocity =
			Vector3.zero

		root.AssemblyAngularVelocity =
			Vector3.zero
	end

	if humanoid then

		if speedEnabled then
			humanoid.WalkSpeed =
				FAST_SPEED
		else
			humanoid.WalkSpeed =
				NORMAL_SPEED
		end

		if shiftLockEnabled then
			humanoid.AutoRotate = false
		else
			humanoid.AutoRotate =
				savedAutoRotate
		end
	end
end

flyButton.Activated:Connect(function()

	flyEnabled =
		not flyEnabled

	if flyEnabled then

		flyButton.Text =
			"✈️ Fly: ON"

		startFly()

	else

		flyButton.Text =
			"✈️ Fly: OFF"

		stopFly()
	end
end)

--==================================================
-- NOCLIP
--==================================================

noclipButton.Activated:Connect(function()

	noclipEnabled =
		not noclipEnabled

	if noclipEnabled then

		noclipButton.Text =
			"👻 Noclip: ON"

	else

		noclipButton.Text =
			"👻 Noclip: OFF"
	end

	if not flyEnabled then

		getCharacter()

		for _,part in ipairs(character:GetDescendants()) do

			if part:IsA("BasePart") then

				part.CanCollide =
					not noclipEnabled
			end
		end
	end
end)

RunService.Stepped:Connect(function()

	if flyEnabled then
		return
	end

	if not character then
		return
	end

	if noclipEnabled then

		for _,part in ipairs(character:GetDescendants()) do

			if part:IsA("BasePart") then
				part.CanCollide = false
			end
		end
	end
end)

--==================================================
-- SPEED
--==================================================

speedButton.Activated:Connect(function()

	speedEnabled =
		not speedEnabled

	getCharacter()

	if speedEnabled then

		speedButton.Text =
			"⚡ Speed: ON"

		if not flyEnabled then
			humanoid.WalkSpeed =
				FAST_SPEED
		end

	else

		speedButton.Text =
			"⚡ Speed: OFF"

		if not flyEnabled then
			humanoid.WalkSpeed =
				NORMAL_SPEED
		end
	end
end)

--==================================================
-- COLOR
--==================================================

colorButton.Activated:Connect(function()

	colorIndex += 1

	if colorIndex > #colors then
		colorIndex = 1
	end

	main.BackgroundColor3 =
		colors[colorIndex]

	reopenButton.BackgroundColor3 =
		colors[colorIndex]
end)

--==================================================
-- CLEAR MENU
--==================================================

clearButton.Activated:Connect(function()

	menuClear =
		not menuClear

	if menuClear then

		main.BackgroundTransparency =
			0.65

		clearButton.Text =
			"🔲 Solid Menu"

		for _,button in ipairs(buttons) do
			button.BackgroundTransparency =
				0.35
		end

	else

		main.BackgroundTransparency =
			0.08

		clearButton.Text =
			"🔲 Clear Menu"

		for _,button in ipairs(buttons) do
			button.BackgroundTransparency =
				0
		end
	end
end)

--==================================================
-- CLOSE / REOPEN
--==================================================

closeButton.Activated:Connect(function()

	main.Visible = false
	reopenButton.Visible = true
end)

reopenButton.Activated:Connect(function()

	main.Visible = true
	reopenButton.Visible = false
end)

--==================================================
-- CHARACTER RESPAWN
--==================================================

player.CharacterAdded:Connect(function(newCharacter)

	character = newCharacter

	humanoid =
		newCharacter:WaitForChild("Humanoid")

	root =
		newCharacter:WaitForChild("HumanoidRootPart")

	task.wait(0.5)

	-- Restore speed
	if speedEnabled then
		humanoid.WalkSpeed =
			FAST_SPEED
	else
		humanoid.WalkSpeed =
			NORMAL_SPEED
	end

	-- Restore Shift Lock
	if shiftLockEnabled then

		humanoid.AutoRotate = false

		humanoid.CameraOffset =
			Vector3.new(1.75,0,0)

	else

		humanoid.AutoRotate = true

		humanoid.CameraOffset =
			Vector3.zero
	end

	-- Restore fly
	if flyEnabled then

		task.wait(0.2)

		startFly()
	end
end)

--==================================================
-- SHIFT LOCK ROTATION WHEN NOT FLYING
--==================================================

RunService.RenderStepped:Connect(function()

	if not shiftLockEnabled then
		return
	end

	if flyEnabled then
		return
	end

	if not root or not humanoid then
		return
	end

	local camera =
		workspace.CurrentCamera

	if not camera then
		return
	end

	local look =
		camera.CFrame.LookVector

	local flatLook =
		Vector3.new(
			look.X,
			0,
			look.Z
		)

	if flatLook.Magnitude > 0.01 then

		flatLook =
			flatLook.Unit

		root.CFrame =
			CFrame.lookAt(
				root.Position,
				root.Position + flatLook
			)
	end
end)

Features & Information

Fly Noclip speed changer and menu color changer shift lock

Community Comments (1)

94ky94kySep 27, 2026

--================================================== -- JETT'S UNIVERSAL SCRIPT -- Mobile Fly + Noclip + Speed + Shift Lock --================================================== you already know its over 💔

More Scripts for Universal Scripts