--================================================== -- 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)