disableweapons() is certainly the best way to go that I can think of if you want to stick with the default movement system. Though, I think some people have made very nice replicas, perhaps check the code gallery.
What I recommend is making a custom Q-Menu and then using disableweapons(); You actually wouldn't even need a custom Q menu, just a script like this:
PHP Code:
//#CLIENTSIDE
function onKeyPressed( code, key )
{
if ( key == "d" )
{
( @ player.weapon ).trigger( "onWeaponFired", "" );
}
}