local player = game.Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local rootPart = character:WaitForChild("HumanoidRootPart") local RunService = game:GetService("RunService") local isFloating = false local floatTime = 3 -- seconds to float local delayBeforeFloat = 0.2 -- 0.2 second delay before floating humanoid.Jumping:Connect(function() if isFloating then return end -- prevent stacking -- Wait until the character is actually falling (in the air) repeat wait() until humanoid:GetState() == Enum.HumanoidStateType.Freefall -- Wait 0.2 seconds before starting to float wait(delayBeforeFloat) isFloating = true local elapsed = 0 local connection connection = RunService.Heartbeat:Connect(function(delta) elapsed = elapsed + delta if elapsed < floatTime then -- Freeze vertical velocity to hover local velocity = rootPart.Velocity rootPart.Velocity = Vector3.new(velocity.X, 0, velocity.Z) else -- Stop hovering and disconnect connection:Disconnect() isFloating = false end end) end)