What he said, and since you were giving random() a floating-point number ( . = decimal point here, to be clear), it was generating one of those from 0 up to (not including)1.5, therefore making it impossible to match anything but the name for 1, which would still be a long-shot. Feed it an integer, and it acts as Citnarf said.
Also, you could replace all of those events for the different names with something like this:
+ System: Is global variable 'person1_number' Greater than 0
-> person1: Set text to {"Breen","Alyx","Barney","Freeman","Lammar"} global('person1_number')
That expression returns the array value at the index provided, which is the global there.
You can do a similar thing with the system expression GetToken and a string, as well. There is more info on that here: http://sourceforge.net/apps/mediawiki/c ... xpressions.
Both of those use 1-based indices instead of 0-based.
Anyway, I'm not looking for any credit for that.