@Allan: change the hookname from global_start to attachment_start and then use the following as the inner most if block:
Code:
if (empty($zzz_userfield) && $zzz_userfield != "0")
{
eval(standard_error(fetch_error('zzz_update_profile',$vbulletin->options['bburl'],$vbulletin->session->vars['sessionurl'])));
}
Those two changes should make it so a member needs to fill out required, editable profile fields to download any attachment.