No, I'll try to explain better.
The main text is held in the variable
$message.
We create a new variable called $test, which is equal to $message, just with the replaced words. So we want to replace more words, we'll use the $test variable as third argument in str_replace() as $test contains the variables we replaced first. We want these plus the ones we're gonna replace now.
Do you understand? $message remains untouched as we assign the NEW text to a different variable. So use this new variable for the other replacements too.
PHP Code:
$test = @str_replace("{username}", $vbulletin->userinfo['username'], $message);
$test = @str_replace("{userid}", $vbulletin->userinfo['userid'], $test);
$test = @str_replace("{blah}", $vbulletin->userinfo['userid'], $test);
$test = @str_replace("{blah2}", $vbulletin->userinfo['userid'], $test);
//...
Another option is using arrays as arguments.
PHP Code:
$replacements = array(
'{username}' => $vbulletin->userinfo['username'],
'{userid}' => $vbulletin->userinfo['userid'],
'{blah}' => $vbulletin->userinfo['blah']
// ...
);
$test = str_replace(array_keys($replacements), array_values($replacements), $message);