Not sure, but maybe the first element in your g_szAdminPrefixes[][eData] array(the empty string) has to do something with it. Try making it at least {"", 0}, if you already want an empty element.
And you should not recreate chat system like that, you should alter the existing one(hooking "SayText" message). Here's an example:
PHP Code:
public msgSayText( iMsgId, iMsgDest, iMsgEnt ) {
static szMessage[ 192 ], szNewMessage[ 192 ];
new iSender = get_msg_arg_int( 1 );
// Modify only if player is VIP
if( is_user_connected( iSender ) && g_iVip[iSender]) {
get_msg_arg_string( 2, szMessage, charsmax( szMessage ) );
if( equal( szMessage, "#Cstrike_Chat_All" ) ) {
formatex( szMessage, charsmax( szMessage ), "^4[VIP] ^3%%s1 ^1: %%s2");
set_msg_arg_string( 2, szMessage );
}
else if( !equal( szMessage, "#Cstrike_Name_Change" ) && !equal( szMessage, "#Game_radio" ) ) {
formatex( szNewMessage, charsmax( szNewMessage ), "^4[VIP] ^3%s", szMessage );
set_msg_arg_string( 2, szNewMessage );
}
}
}