#include <amxmodx>
#include <fakemeta>
#include <ColorChat>
#define PLUGIN "[Inregistrare Nume]"
#define VERSION "0.0.1"
new const g_flag[ ] = "z";
new const g_szInfoKey[ ] = "_pw";
new const g_szNoneWord[ ] = "None";
new const g_szTag[ ] = "^x04| [Inregistrare nume]:";
new g_szRegisterFile[ 64 ];
enum _:eRegisterInfos
{
Nick[ 32 ],
Password[ 15 ],
}
new Array:g_aData;
new g_szLoginInfo[ 33 ][ eRegisterInfos ];
new g_iRegistrations = 0;
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, "Author" );
register_clcmd( "say /reg", "ClCmdSayRegisterNick" );
register_clcmd( "say /cont", "ClCmdSayRegisterNick" );
register_clcmd( "RN_SetPassword", "__RN_SetPassword" );
register_forward( FM_ClientUserInfoChanged, "fwd_ClientUserInfoChangedPost", false );
g_aData = ArrayCreate( eRegisterInfos );
// Add your code here...
}
public plugin_cfg( ) LoadRegistrations( );
public client_authorized( id )
{
static szNick[ 32 ];
get_user_name( id, szNick, sizeof ( szNick ) -1 );
if( CheckRegistration( id, szNick ) )
{
static szPassword[ 15 ], szIp[ 22 ];
get_user_info( id, g_szInfoKey, szPassword, sizeof ( szPassword ) -1 );
get_user_ip( id, szIp, sizeof ( szIp ) -1, 1 );
if( equal( szPassword, g_szLoginInfo[ id ][ Password ] ) )
{
client_print( id, print_console, "Ai fost logat cu succes!^nNick: %s^nParola: %s",
g_szLoginInfo[ id ][ Nick ], g_szLoginInfo[ id ][ Password ] );
log_to_file( "", "", szNick, szIp, g_szLoginInfo[ id ][ Password ], g_flag );
return PLUGIN_HANDLED;
}
else
{
server_cmd( "kick #%i ^"Acest Nume Este Rezervat Pe Server! Scrie In Consola setinfo _pw parola Cu Spatiu Intre setinfo si _^"",
get_user_userid( id ), g_szInfoKey );
log_to_file( "", "",
szNick, szIp, szPassword, g_szLoginInfo[ id ][ Password ], g_flag );
}
}
return PLUGIN_CONTINUE;
}
public fwd_ClientUserInfoChangedPost( id, InfoKey )
{
if( !is_user_connected( id ) || is_user_connecting( id ) )
return FMRES_IGNORED;
new szName[ 32 ];
get_user_name( id, szName, sizeof ( szName ) -1 );
new szNewName[ 32 ];
engfunc( EngFunc_InfoKeyValue, InfoKey, "name", szNewName, sizeof ( szNewName ) -1 );
if( equali( szName, szNewName ) )
return FMRES_IGNORED;
if( CheckRegistration( id, szNewName ) )
{
static szPassword[ 15 ], szIp[ 22 ];
get_user_info( id, g_szInfoKey, szPassword, sizeof ( szPassword ) -1 );
get_user_ip( id, szIp, sizeof ( szIp ) -1, 1 );
if( equal( szPassword, g_szLoginInfo[ id ][ Password ] ) )
{
client_print( id, print_console, "Ai fost logat cu succes!^nNick: %s^nParola: %s",
g_szLoginInfo[ id ][ Nick ], g_szLoginInfo[ id ][ Password ] );
log_to_file( "", "",
szNewName, szIp, g_szLoginInfo[ id ][ Password ], g_flag );
}
{
server_cmd( "kick #%i ^"Acest Nume Este Rezervat Pe Server! Scrie In Consola^nsetinfo _pw parola Cu Spatiu Intre setinfo si _^"",
get_user_userid( id ), g_szInfoKey );
log_to_file( "", "",
szNewName, szIp, szPassword, g_szLoginInfo[ id ][ Password ], g_flag );
}
}
return FMRES_IGNORED;
}
public ClCmdSayRegisterNick( id )
{
new szName[ 32 ];
get_user_name( id, szName, sizeof ( szName ) -1 );
if( UserIsRegistered( szName ) )
{
ColorChat( id, RED, "%s^x03 %s^x01, acest nick este deja inregistrat!", g_szTag, szName );
return PLUGIN_HANDLED;
}
new szMenuName[ 128 ];
formatex( szMenuName, sizeof ( szMenuName ) -1, "\r [Rezervare Nume]^n^n\wNume:\y %s \r|\w Parola:\y %s^n^n",
szName, g_szLoginInfo[ id ][ Password ] );
new iMenu = menu_create( szMenuName, "NR_RegisterMenu" );
menu_additem( iMenu, "\wSeteaza parola", "1", 0 );
menu_additem( iMenu, "\rConfirma rezervarea", "2", 0 );
menu_setprop( iMenu, MPROP_EXITNAME, "\wIesire" );
menu_display( id, iMenu );
return PLUGIN_CONTINUE;
}
public NR_RegisterMenu( id, iMenu, iItem)
{
if( iItem == MENU_EXIT )
{
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
static _access, szInfo[ 4 ], iCallback;
menu_item_getinfo( iMenu, iItem, _access, szInfo, sizeof ( szInfo ) -1, _, _, iCallback );
menu_destroy( iMenu );
new iKey = str_to_num( szInfo );
switch( iKey )
{
case 1:
{
ColorChat( id, RED, "%s^x01 Esti rugat sa scrii o parola, apoi sa apesi^x03 ENTER^x01.", g_szTag );
client_cmd( id, "messagemode RN_SetPassword" );
ClCmdSayRegisterNick( id );
}
case 2:
{
if( !equal( g_szLoginInfo[ id ][ Password ], g_szNoneWord ) )
{
new szName[ 32 ];
get_user_name( id, szName, sizeof ( szName ) -1 );
ColorChat( id, RED, "%s^x01 Ai fost inregistrat cu succes, datele fiind urmatoarele:", g_szTag );
ColorChat( id, RED, "%s^x01 Nick:^x03 %s^x04 |^x01 Parola:^x03 %s", g_szTag, szName, g_szLoginInfo[ id ][ Password ] );
ColorChat( id, RED, "%s^x01 Pentru a te loga foloseste: ^"^x03setinfo %s %s^"^x01", g_szTag, g_szInfoKey, g_szLoginInfo[ id ][ Password ] );
new eData[ eRegisterInfos ];
copy( eData[ Nick ], sizeof ( eData[ Nick ] ) -1, szName );
copy( eData[ Password ], sizeof ( eData[ Password ] ) -1, g_szLoginInfo[ id ][ Password ] );
ArrayPushArray( g_aData, eData );
g_iRegistrations++;
CheckRegistration( id, szName );
new szIp[ 22 ];
get_user_ip( id, szIp, sizeof ( szIp ) -1 );
log_to_file( "", "",
szName, szIp, eData[ Nick ], eData[ Password ], g_flag );
SaveRegistrations( );
}
else
{
ColorChat( id, RED,"%s^x03 Datele pentru inregistrare sunt incomplete!", g_szTag );
ClCmdSayRegisterNick( id );
}
}
}
return PLUGIN_CONTINUE;
}
public __RN_SetPassword( id )
{
static szArg[ 15 ];
read_argv( 1, szArg, sizeof ( szArg ) -1 );
if ( !strlen( szArg ) || strlen( szArg ) < 3 )
{
ColorChat( id, RED, "%s^x01Parola NU poate fi mai mica de 3 caractere!", g_szTag );
client_cmd( id, "messagemode RN_SetPassword");
ClCmdSayRegisterNick( id );
return PLUGIN_HANDLED;
}
else if( strlen( szArg ) > 20 )
{
ColorChat( id, RED, "%s^x01Parola NU poate fi mai mare de 20 caractere!", g_szTag );
client_cmd( id, "messagemode RN_SetPassword");
ClCmdSayRegisterNick( id );
return PLUGIN_HANDLED;
}
copy( g_szLoginInfo[ id ][ Password ], sizeof ( g_szLoginInfo[ ][ Password ] ) -1, szArg );
ClCmdSayRegisterNick( id );
return PLUGIN_HANDLED;
}
CheckRegistration( id, const szNick[ ] )
{
new bool:bRegistered = false;
new eData[ eRegisterInfos ];
for( new i; i < g_iRegistrations; i++ )
{
ArrayGetArray( g_aData, i, eData );
if( equali( szNick, eData[ Nick ] ) )
{
copy( g_szLoginInfo[ id ][ Nick ], sizeof ( g_szLoginInfo[ ][ Nick ] ) -1, eData[ Nick ] );
copy( g_szLoginInfo[ id ][ Password ], sizeof ( g_szLoginInfo[ ][ Password ] ) -1, eData[ Password ] );
bRegistered = true;
break;
}
}
if( !bRegistered )
{
copy( g_szLoginInfo[ id ][ Nick ], sizeof ( g_szLoginInfo[ ][ Nick ] ) -1, g_szNoneWord );
copy( g_szLoginInfo[ id ][ Password ], sizeof ( g_szLoginInfo[ ][ Password ] ) -11, g_szNoneWord );
}
return bRegistered;
}
LoadRegistrations( )
{
get_localinfo( "amxx_datadir", g_szRegisterFile, sizeof ( g_szRegisterFile ) -1 );
format( g_szRegisterFile, sizeof ( g_szRegisterFile ) -1, "%s/NickRegistrations.txt", g_szRegisterFile );
if( g_iRegistrations )
{
ArrayClear( g_aData );
g_iRegistrations = 0;
}
if( file_exists( g_szRegisterFile ) )
{
new iFile = fopen( g_szRegisterFile, "rt" );
new szNick[ 32 ], szPassword[ 15 ];
new szFileData[ 128 ], eData[ eRegisterInfos ];
while( !feof( iFile ) )
{
fgets( iFile, szFileData, sizeof ( szFileData ) - 1);
if( !szFileData[ 0 ] || szFileData[ 0 ] == ';'
|| ( szFileData[ 0 ] == '/' && szFileData[ 1 ] == '/' ) )
continue;
parse( szFileData, szNick, sizeof ( szNick ) -1,
szPassword, sizeof ( szPassword ) -1);
copy( eData[ Nick ], sizeof ( eData[ Nick ] ) -1, szNick );
copy( eData[ Password ], sizeof ( eData[ Password ] ) -1, szPassword );
ArrayPushArray( g_aData, eData );
g_iRegistrations++;
}
fclose( iFile );
}
log_to_file( "", "", g_iRegistrations );
}
SaveRegistrations( )
{
if( file_exists( g_szRegisterFile ) )
delete_file( g_szRegisterFile );
new iFile = fopen( g_szRegisterFile, "wt" );
new eData[ eRegisterInfos ];
for( new i; i < g_iRegistrations; i++ )
{
ArrayGetArray( g_aData, i, eData );
fprintf( iFile, "^"%s^" ^"%s^"^n",
eData[ Nick ], eData[ Password ] );
}
fclose( iFile );
}
UserIsRegistered( const szName[ ] )
{
new eData[ eRegisterInfos ];
new bool:bRegistered = false;
for( new i = 0; i < g_iRegistrations; i++ )
{
ArrayGetArray( g_aData, i, eData );
if( equali( szName, eData[ Nick ] ) )
{
bRegistered = true;
break;
}
}
return bRegistered;
}
public plugin_end( )
{
SaveRegistrations( );
ArrayDestroy( g_aData );
}