Try this, untested!.
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
new const PLUGIN_NAME[ ] = "UserPrefix"
new const VERSION[ ] = "1.0"
new const AUTHOR[ ] = "Supremache"
native get_user_level(id)
new g_iSayText;
public plugin_init()
{
register_plugin
(
.plugin_name = PLUGIN_NAME,
.version = VERSION,
.author = AUTHOR
)
register_cvar( PLUGIN_NAME, VERSION, FCVAR_SERVER|FCVAR_SPONLY);
set_cvar_string( PLUGIN_NAME, VERSION);
g_iSayText = get_user_msgid( "SayText" );
register_clcmd("say ", "GlobalChat");
register_clcmd("say_team ", "TeamChat");
}
public GlobalChat(iPlayer)
{
SetPrefix( iPlayer , true );
}
public TeamChat(iPlayer)
{
SetPrefix( iPlayer , false );
}
SetPrefix( iPlayer , bool:bTeam )
{
if(!is_user_connected(iPlayer))
{
return PLUGIN_HANDLED_MAIN;
}
static iAlive,
szMessage[ 192 ],
iPlayers[ 32 ],
iNum,
szName[ 32 ],
szData[ 256 ],
iTarget
iAlive = is_user_alive( iPlayer );
new CsTeams:iTeam = CsTeams:( ( _:cs_get_user_team( iPlayer ) ) % 3 );
new const Say[2][ CsTeams ][] =
{
{ "*SPEC* ", "*DEAD* ", "*DEAD* ", "*DEAD* " },
{ "", "", "", ""}
}
new const SayTeam[2][ CsTeams ][] =
{
{"(Spectator) ", "*DEAD*(Terrorist) ", "*DEAD*(Counter-Terrorist) ", ""},
{"(Spectator) ", "(Terrorist) ", "(Counter-Terrorist) ", ""}
};
enum eTags
{
Prefix[ 32 ],
iFlag
}
new const szTag[ ][ eTags ] =
{
{ "OWNER", ADMIN_IMMUNITY },
{ "HEAD-ADMIN", ADMIN_BAN },
{ "ADMIN", ADMIN_KICK }
}
if( !IsValidMessage( true, szMessage, charsmax( szMessage ) ) )
{
return PLUGIN_HANDLED_MAIN;
}
get_user_name( iPlayer, szName, charsmax(szName));
get_players( iPlayers, iNum );
for( new i ; i < sizeof ( szTag ) ; i++ )
{
if( get_user_flags( iPlayer ) & szTag[ i ][ iFlag ] )
{
formatex( szData , charsmax( szData), "^1%s^4[%s^1-^4 Lv.%d] %s^3: %s", bTeam ? Say[ iAlive ][ iTeam ] : SayTeam[ iAlive ][ iTeam ], szTag[ i ][ Prefix ], get_user_level(iPlayer), szName, szMessage );
}
else
{
formatex( szData , charsmax( szData), "^1%s^4 [Lv.%d]^3 %s^3: %s", bTeam ? Say[ iAlive ][ iTeam ] : SayTeam[ iAlive ][ iTeam ], get_user_level(iPlayer), szName, szMessage );
}
}
for( new i = 0; i < iNum; i++ )
{
iTarget = iPlayers[ i ];
if( iTarget == iPlayer || ( iAlive || is_user_connected( iTarget ) ) && is_user_alive( iTarget ) == iAlive )
{
message_begin( MSG_ONE, g_iSayText, {0, 0, 0}, iTarget );
write_byte( iPlayer );
write_string( szData );
message_end( );
}
}
return PLUGIN_HANDLED_MAIN;
}
bool:IsValidMessage( bool:bTeamSay, szMessage[ ], iLen )
{
read_args( szMessage, iLen );
remove_quotes( szMessage );
if( !szMessage[ 0 ] )
{
return false;
}
new iPos, cChar, i;
while( ( cChar = szMessage[ iPos ] ) == '@' )
{
i++;
iPos++;
}
if( i > 0 )
{
return ( !( bTeamSay ? ( i == 1 ) : ( 1 <= i <= 3 ) ) );
}
while( 0 < ( cChar = szMessage[ iPos++ ] ) <= 255 )
{
if( cChar != ' ' && cChar != '%' )
{
return true;
}
}
return false;
}