I don't think that will work teame06.
Player A is "close" to player B and C. Player B and C are NOT "close". If fm_playerprethink() is called for Player A, your code will set SOLID_NOT ONLY to Player B, but not to Player C.
With that in mind I would suggest this in fm_playerprethink(id):
1) If <id> is solid then test if all other players are within range. If found at least one player then set <id> to be insolid.
2) If <id> is insolid then test if all other players are outside range. If found at least one player then set <id> to be solid.
This will solve the problem for <id> only, while the remaining players are not affected. This is not an issue as fm_playerprethink() will be called on them as well. The two suggestions stand true as, to some degree, distance(A, B)=distance(B, A).