Code: Select all
#include < amxmodx >
#include < amxmisc >
#include < nvault >
#define PLUGIN "Admins activity"
#define VERSION "0.1"
#pragma tabsize 0
#define MAX_WARN 5
new g_szFile[ 128 ];
new const g_szFileName[ ] = "admini.ini" /* Numele la fisierul de unde sunt incarcate datele fiecarui admin */
new g_iPlayerWarn[ 33 ];
new g_iPlayerMinutes[ 33 ];
new g_iHourPlayer[ 33 ];
new szName[ 33 ][32];
new szData[ 512 ], szParseName[ 32 ], szParsePassword[ 32 ], szParseFlags[ 32 ], szParseRFlags[ 32 ], iLine,
szParseHours[ 32 ],szFile,szVaultData[ 256 ], szVaultKey[ 32 ];
new const nVault_Name[]="Activitate_Admini"
new g_vault
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, "falcao" );
/* Verificare fisier */
get_configsdir( g_szFile, sizeof( g_szFile ) -1 );
formatex( g_szFile, sizeof( g_szFile ) -1, "%s/%s", g_szFile, g_szFileName );
if( !file_exists( g_szFile ) )
{
write_file( g_szFile, "; Adaugare ^"nume admin^" ^"ore necesare^"^n; Pentru evitarea citirii cuiva pune ^";^" in fata sa.");
}
/* Clcmd */
register_clcmd( "say /warn", "cmdWarn" );
register_clcmd( "say /program", "cmdProgram" );
g_vault = nvault_open(nVault_Name)
if(g_vault == INVALID_HANDLE)
set_fail_state("Eroare la deschiderea bazei de date din vault.")
set_task(5.0,"read_vault",_,_,_,"b")
}
public read_vault() {
new iPlayers[32],iNum,id,i;
get_players(iPlayers,iNum,"c");
for(i = 0; i < iNum; i++)
{
id = iPlayers[i];
if(!is_user_admin(id)) continue;
SaveHours(id);
}
}
public client_infochanged(id) {
SaveHours(id);
new newname[32];
get_user_info(id,"name",newname,charsmax(newname));
if(!equal(newname,szName[id]))
{
set_task(0.3,"LoadHours",id);
copy( szName[ id ], charsmax(szName[]), newname );
}
}
public client_putinserver( id )
{
if(is_user_bot(id)||!is_user_admin(id)) return;
get_user_name( id, szName[id], charsmax(szName[]) );
LoadHours( id );
set_task( 3.0, "verifyPlayer", id );
set_task( 60.0, "adaugareMinut", id, _, _, "b");
}
public client_disconnect( id )
{
SaveHours( id );
remove_task(id);
}
public adaugareMinut( id )
{
if( is_user_connected( id ) )
{
g_iPlayerMinutes[ id ]++;
if( g_iPlayerMinutes[ id ] == 60 )
{
g_iHourPlayer[ id ] ++;
g_iPlayerMinutes[ id ] = 0;
}
}
}
public verifyPlayer( id )
{
szFile = fopen( g_szFile, "rt" );
if( !szFile )
return 1;
while( !feof( szFile ) )
{
fgets( szFile, szData, sizeof( szData ) -1 );
if( szData[ 0 ] == ';' || szData[ 0 ] == '!' || szData[ 0 ] == '/' && szData[ 1 ] == '/'||!szData[0] )
continue;
parse( szData, szParseName, sizeof( szParseName ), szParseHours, sizeof( szParseHours ) );
if( equal( szParseName, szName[id] ) )
{
if( g_iHourPlayer[ id ] >= str_to_num( szParseHours ) )
{
log_to_file( "activity_admins.log", "%s si-a respectat programul cu %d/%d or%s.", szName[id], g_iHourPlayer[ id ], str_to_num( szParseHours ),str_to_num( szParseHours )==1?"a":"e" );
}
else
{
log_to_file( "activity_admins.log", "%s a stat doar %d minut%s pe server. A primit +1 warn.", szName[id], g_iPlayerMinutes[ id ],g_iPlayerMinutes[ id ]==1?"":"e" );
C_PrintChat( id, "Atentie ! Azi ai facut !v%d!c minut%s. Trebuie sa stai minim !v%d!c or%s.", g_iPlayerMinutes[ id ],g_iPlayerMinutes[ id ]==1?"":"e", str_to_num( szParseHours ), str_to_num( szParseHours )==1?"a":"e" );
C_PrintChat( id, "Ai primit !v+1!c warn, pentru ca nu ai stat !v%d!c or%s. (!v%d!c/!v%d!c)", str_to_num( szParseHours ),str_to_num( szParseHours )==1?"a":"e", g_iHourPlayer[ id ], str_to_num( szParseHours ) );
if(++g_iPlayerWarn[ id ]>=MAX_WARN) check_access(id)
else g_iPlayerWarn[ id ] ++;
}
break;
}
}
fclose( szFile );
return 1;
}
public mesajWarn( id )
{
C_PrintChat( id, "Ai facut !v%d!c/!v%d!v warn!c-uri.!e Adminul tau a fost oprit!c.",MAX_WARN,MAX_WARN );
//remove_task(id);
return PLUGIN_HANDLED;
}
public check_access(id)
{
if( g_iPlayerWarn[ id ] >= MAX_WARN )
{
szFile = fopen( "addons/amxmodx/configs/users.ini", "rt" );
if( !szFile )
return;
while( !feof( szFile ) )
{
fgets( szFile, szData, sizeof( szData ) -1 );
if( szData[ 0 ] == ';' || !szData[0])
continue;
parse( szData, szParseName, sizeof( szParseName ) -1, szParsePassword, sizeof( szParsePassword ) -1, szParseFlags, sizeof( szParseFlags ) -1, szParseRFlags, sizeof( szParseRFlags ) -1 );
if( equal( szParseName, szName[id] ) )
{
new szPlayerInfo[ 256 ];
formatex( szPlayerInfo, sizeof( szPlayerInfo ) -1, "; ^"%s^" ^"%s^" ^"%s^" ^"%s^"", szParseName, szParsePassword, szParseFlags, szParseRFlags );
write_file( "addons/amxmodx/configs/users.ini", szPlayerInfo, iLine );
g_iPlayerWarn[ id ] = 0;
log_to_file( "activity_admins.log", "%s a primit remove pentru nerespectarea programului impus.", szName[id] );
set_task( 3.0, "mesajWarn", id );
break;
}
iLine++;
}
fclose( szFile );
}
}
public cmdWarn( id )
{
szFile = fopen( g_szFile, "rt" );
if( !szFile )
return 1;
while( !feof( szFile ) )
{
fgets( szFile, szData, sizeof( szData ) -1 );
if( szData[ 0 ] == ';' || szData[ 0 ] == '!' || szData[ 0 ] == '/' && szData[ 1 ] == '/'||!szData[0] )
continue;
parse( szData,\
szParseName, sizeof( szParseName ),\
szParseHours, sizeof( szParseHours ) );
if( equal( szParseName, szName[id] ) )
{
if(g_iPlayerWarn[ id ]<MAX_WARN) C_PrintChat( id, "Ai !v%d!c/!v%d!c warn-uri, respectati programul zilnic sau primesti!e remove!c.", g_iPlayerWarn[ id ], MAX_WARN );
else if(g_iPlayerWarn[ id ]>=MAX_WARN) C_PrintChat( id, "Ai primit!v remove!c din cauza acumularii a!v %d!c/!v%d!e WARN!c-uri.", MAX_WARN,MAX_WARN );
break
}
}
fclose( szFile );
return 1;
}
public cmdProgram( id )
{
if( is_user_admin(id) )
{
szFile = fopen( g_szFile, "rt" );
if( !szFile )
return 1;
while( !feof( szFile ) )
{
fgets( szFile, szData, sizeof( szData ) -1 );
if( szData[ 0 ] == ';' || szData[ 0 ] == '!' || szData[ 0 ] == '/' && szData[ 1 ] == '/'||!szData[0] )
continue;
parse( szData, szParseName, sizeof( szParseName ), szParseHours, sizeof( szParseHours ) );
if( equal( szParseName, szName[id] ) )
{
C_PrintChat( id, "Mai ai !v%i!c or%s pana iti termini programul de azi.", g_iHourPlayer[ id ],g_iHourPlayer[ id ]==1?"a":"e" );
break;
}
}
fclose( szFile );
}
else
{
C_PrintChat( id, "Ne pare rau, dar nu ai admin pe server." );
}
return 1;
}
public LoadHours( id )
{
formatex( szVaultKey, sizeof( szVaultKey ) -1, "%s", szName[id] );
formatex( szVaultData, sizeof( szVaultData ) -1, "%d %d %d", g_iHourPlayer[ id ], g_iPlayerMinutes[ id ], g_iPlayerWarn[ id ] );
nvault_get( g_vault, szVaultKey, szVaultData, sizeof( szVaultData ) -1 );
new iHours[ 32 ], iWarn[ 33 ], iMinutes[ 33 ];
parse( szVaultData,\
iHours, sizeof( iHours ) -1,\
iWarn, sizeof( iWarn ) -1,\
iMinutes, sizeof( iMinutes ) -1 );
g_iHourPlayer[ id ] = str_to_num( iHours );
g_iPlayerWarn[ id ] = str_to_num( iWarn );
g_iPlayerMinutes[ id ] = str_to_num( iMinutes );
}
public SaveHours( id )
{
formatex( szVaultKey, sizeof( szVaultKey ) -1, "%s", szName[id] );
formatex( szVaultData, sizeof( szVaultData ) -1, "%d %d %d", g_iHourPlayer[ id ], g_iPlayerMinutes[ id ], g_iPlayerWarn[ id ] );
nvault_set( g_vault, szVaultKey, szVaultData );
}
public plugin_end() nvault_close(g_vault)
stock C_PrintChat( const id, const szInput[ ], any:... )
{
static szMesage[192];
vformat(szMesage, charsmax(szMesage), szInput, 3);
replace_all(szMesage, charsmax(szMesage), "!c", "^1");
replace_all(szMesage, charsmax(szMesage), "!e", "^3");
replace_all(szMesage, charsmax(szMesage), "!v", "^4");
replace_all(szMesage, charsmax(szMesage), "!e2", "^0");
static g_msg_SayText = 0;
if(!g_msg_SayText) g_msg_SayText = get_user_msgid("SayText");
new Players[32], iNum = 1, i;
if(id) Players[0] = id;
else get_players(Players, iNum, "ch");
for(--iNum; iNum >= 0; iNum--)
{
i = Players[iNum];
message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
write_byte(i);
write_string(szMesage);
message_end();
}
}