#include < amxmodx >
#include < cstrike >
#include < nvault >
const MAX_PLAYERS = 32;
new const Plugin[] = "ConnectionsRanks";
new const Version[] = "5.0";
new const Authors[] = "Excolent,fLy JumpeR*";
new const DataFileName[] = "ConStats";
enum ConnectionStatus
{
Noob,
Beginner,
Learning,
Knifer,
Rambo,
Butcher,
Matrix,
Probhop,
Freak,
Racer,
Kill_Bill,
Respected_Player
}
new const StatusDescription[ ConnectionStatus ][] =
{
"[Noob]",
"[Halado]",
"[Bot]",
"[Sötét]",
"[Rambo]",
"[Kezdő]",
};
new const StatusLevels[ ConnectionStatus ] =
{
25,
50,
100,
200,
300,
500,
650,
850,
1000,
1200,
1450,
1700
}
new const Teams[ CsTeams ][] =
{
"(Unassigned)",
"(Terrorist)",
"(Counter-Terrorist)",
"(Spectator)"
};
enum PlayerData
{
Name[ 33 ],
AuthID[ 35 ],
Connections,
Status,
PlayTime,
LeaveMsg[ 33 ]
}
new g_PData[ MAX_PLAYERS + 1 ][ PlayerData ];
new g_iConnectTime[ MAX_PLAYERS + 1 ];
new bool:g_bIsBot[ MAX_PLAYERS + 1 ];
new g_iVault;
new g_iMsgSayText;
new g_iMaxPlayers;
new g_pAllChat;
public plugin_init( )
{
register_plugin( Plugin , Version , Authors);
register_clcmd( "say" , "HookSay" );
register_clcmd( "say_team" , "HookSay_Team" );
g_pAllChat = register_cvar( "cat_allchat" , "0" );
g_iMsgSayText = get_user_msgid( "SayText" );
g_iMaxPlayers = get_maxplayers();
}
public plugin_cfg()
g_iVault = nvault_open( DataFileName );
public plugin_end()
nvault_close( g_iVault );
public client_putinserver( id )
{
g_bIsBot[ id ] = bool:!!is_user_bot( id );
if ( g_bIsBot[ id ] )
return PLUGIN_CONTINUE;
get_user_authid( id , g_PData[ id ][ AuthID ] , charsmax( g_PData[][ AuthID ] ) );
static szData[ 128 ] , szConnections[ 5 ] , szStatus[ 2 ] , szPlayTime[ 8 ];
if ( nvault_get( g_iVault , g_PData[ id ][ AuthID ] , szData , charsmax( szData ) ) )
{
parse( szData , g_PData[ id ][ Name ] , charsmax( g_PData[][ Name ] ) ,
g_PData[ id ][ AuthID ] , charsmax( g_PData[][ AuthID ] ) ,
szConnections , charsmax( szConnections ) ,
szStatus , charsmax( szStatus ) ,
szPlayTime , charsmax( szPlayTime ) ,
g_PData[ id ][ LeaveMsg ] , charsmax( g_PData[][ LeaveMsg ] ) );
g_PData[ id ][ Connections ] = str_to_num( szConnections );
g_PData[ id ][ PlayTime ] = str_to_num( szPlayTime );
}
g_PData[ id ][ Connections ]++;
g_iConnectTime[ id ] = get_systime();
{
}
}
public client_infochanged(id)
{
static szNewName[ 33 ];
get_user_info( id , "name" , szNewName , 32 );
if ( !equal( g_PData[ id ][ Name ] , szNewName ) )
copy( g_PData[ id ][ Name ] , charsmax( g_PData[][ Name ] ) , szNewName );
}
public client_disconnect( id )
{
static szMessage[ 128 ];
if ( g_bIsBot[ id ] )
return PLUGIN_CONTINUE;
remove_task( id );
g_PData[ id ][ PlayTime ] += ( get_systime() - g_iConnectTime[ id ] );
formatex( szMessage , charsmax( szMessage ) , "^"%s^" ^"%s^" ^"%d^" ^"%d^" ^"%d^" ^"%s^"" , g_PData[ id ][ Name ] ,
g_PData[ id ][ AuthID ] ,
g_PData[ id ][ Connections ] ,
g_PData[ id ][ Status ] ,
g_PData[ id ][ PlayTime ] ,
g_PData[ id ][ LeaveMsg ] );
nvault_set( g_iVault , g_PData[ id ][ AuthID ] , szMessage );
{
formatex( szMessage , charsmax( szMessage ) , "^x04[Rank System] ^x03Veteran: %s has left the server. [^x04Message: %s^x03]" , g_PData[ id ][ Name ] , g_PData[ id ][ LeaveMsg ] );
Print( 0 , 1 , szMessage );
}
g_PData[ id ][ Name ][ 0 ] = EOS;
g_PData[ id ][ AuthID ][ 0 ] = EOS;
g_PData[ id ][ Connections ] = 0;
g_PData[ id ][ Status ] = 0;
g_PData[ id ][ PlayTime ] = 0;
g_PData[ id ][ LeaveMsg ][ 0 ] = EOS;
g_iConnectTime[ id ] = 0;
return PLUGIN_CONTINUE;
}
public HookSay( id )
{
static szMessage[ 256 ] , szMsgSaid[ 256 ];
new bool:bIsAlive , bool:bAllChat;
read_args( szMsgSaid , charsmax( szMsgSaid ) );
remove_quotes( szMsgSaid );
{
if( szMsgSaid[ 0 ] == '/' && szMsgSaid[ 2 ] == 'e' && szMsgSaid[ 4 ] == 'v' && szMsgSaid[ 6 ] == 'm' )
{
new Arg[ 64 ];
strbreak( szMsgSaid , szMsgSaid , 95 , Arg , 63 );
remove_quotes( Arg );
if( !Arg[ 0 ] )
{
if( g_PData[ id ][ LeaveMsg ][ 0 ] )
{
client_print( id , print_chat , "^x04[Rank System] ^x03Your current leave message is ^x04^"%s^"" , g_PData[ id ][ LeaveMsg ] );
}
else
{
client_print( id , print_chat , "^x04[Rank System] ^x03You haven't set a leave message yet. To do so, type /leavemsg ^"message^"." );
}
}
else if( equali( Arg , "remove" ) )
{
g_PData[ id ][ LeaveMsg ][ 0 ] = EOS;
client_print( id , print_chat , "^x04[Rank System] ^x03 Your leave message was removed." );
}
else
{
copy( g_PData[ id ][ LeaveMsg ] , charsmax( g_PData[][ LeaveMsg ] ) , Arg );
client_print( id , print_chat , "^x04[Rank System] ^x03 Your leave message has been set to ^x04 ^"%s^"" , Arg );
}
return PLUGIN_HANDLED;
}
}
if ( szMsgSaid[ 0 ] == '/' && szMsgSaid[ 1 ] == 'p' && szMsgSaid[ 4 ] == 'y' && szMsgSaid[ 7 ] == 'm' )
{
new iHours , iDays , iMinutes , iCurTime;
static szPlayTime[ 128 ] , iPos;
formatex( szMessage , charsmax( szMessage) , "^x04[Rank System] ^x03 You currently have^x04 %d^x03 connections. [^x04Status: %s^x03]" , g_PData[ id ][ Connections ] , StatusDescription[ ConnectionStatus:g_PData[ id ][ Status ] ] );
Print( id , id , szMessage );
iCurTime = g_PData[ id ][ PlayTime ] + ( get_systime() - g_iConnectTime[ id ] );
iPos = 0;
if ( iCurTime >= 86400 )
{
iDays = iCurTime / 86400;
iCurTime -= iDays * 86400;
iPos = formatex( szPlayTime , charsmax( szPlayTime ) , "%d days, " , iDays );
}
if ( iCurTime >= 3600 )
{
iHours = iCurTime / 3600;
iCurTime -= iHours * 3600;
iPos += formatex( szPlayTime[ iPos ] , charsmax( szPlayTime ) - iPos , "%d hour%s, " , iHours , iHours > 1 ? "s" : "" );
}
if ( iCurTime >= 60 )
{
iMinutes = iCurTime / 60;
iCurTime -= iMinutes * 60;
iPos += formatex( szPlayTime[ iPos ] , charsmax( szPlayTime ) - iPos , "%d minute%s, " , iMinutes , iMinutes > 1 ? "s" : "" );
}
if ( iCurTime )
{
iPos += formatex( szPlayTime[ iPos ] , charsmax( szPlayTime ) - iPos , "%d second%s, " , iCurTime , iCurTime > 1 ? "s" : "" );
}
szPlayTime[ iPos - 2 ] = EOS;
formatex( szMessage , charsmax( szMessage ) , "^x04[Rank System] ^x03 You have played on this server for:^x04 %s", szPlayTime );
Print( id , id , szMessage );
return PLUGIN_HANDLED;
}
bIsAlive = bool:!!is_user_alive( id );
bAllChat = bool:!!get_pcvar_num( g_pAllChat );
if ( bIsAlive )
formatex( szMessage , charsmax( szMessage ) , "^x04[%s]^x03 %s^x01 : %s", StatusDescription[ ConnectionStatus:g_PData[ id ][ Status ] ] , g_PData[ id ][ Name ] , szMsgSaid );
else
formatex( szMessage , charsmax( szMessage ) , "^x01%s^x04[%s]^x03 %s^x01 : %s", ( cs_get_user_team( id ) != CS_TEAM_SPECTATOR ) ? "*DEAD*" : "*SPEC*" , StatusDescription[ ConnectionStatus:g_PData[ id ][ Status ] ] , g_PData[ id ][ Name ] , szMsgSaid );
for ( new iPlayer = 1 ; iPlayer <= g_iMaxPlayers ; iPlayer++ )
if ( is_user_connected( iPlayer ) &&
( bAllChat || ( bIsAlive || ( !bIsAlive && !is_user_alive( iPlayer ) ) ) ) )
Print( iPlayer , id , szMessage );
return PLUGIN_HANDLED;
}
public HookSay_Team( id )
{
static szMessage[ 256 ] , szMsgSaid[ 256 ];
new CsTeams:iTeam , bool:bIsAlive , bool:bAllChat;
read_args( szMsgSaid , charsmax( szMsgSaid ) );
remove_quotes( szMsgSaid );
iTeam = cs_get_user_team( id );
bIsAlive = bool:!!is_user_alive( id );
bAllChat = bool:!!get_pcvar_num( g_pAllChat );
if ( bIsAlive || ( iTeam == CS_TEAM_SPECTATOR ) )
formatex( szMessage , charsmax( szMessage ) , "^x04[%s]^x01 %s^x03 %s^x01 : %s", StatusDescription[ ConnectionStatus:g_PData[ id ][ Status ] ] , Teams[ iTeam ] , g_PData[ id ][ Name ] , szMsgSaid );
else
formatex( szMessage , charsmax( szMessage ) , "*DEAD* ^x04[%s]^x01 %s^x03 %s^x01 : %s", StatusDescription[ ConnectionStatus:g_PData[ id ][ Status ] ] , Teams[ iTeam ], g_PData[ id ][ Name ] , szMsgSaid );
for ( new iPlayer = 1 ; iPlayer <= g_iMaxPlayers ; iPlayer++ )
if ( ( is_user_connected( iPlayer ) && ( cs_get_user_team( iPlayer ) == iTeam ) ) &&
( bAllChat || ( bIsAlive || ( !bIsAlive && !is_user_alive( iPlayer ) ) ) ) )
Print( iPlayer , id , szMessage );
return PLUGIN_HANDLED;
}
Print( id , colorid , szMessage[] )
{
message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST , g_iMsgSayText , {0,0,0} , id );
write_byte( colorid );
write_string( szMessage );
message_end();
}