Code:
#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >
#include < nvault >
#include < time >
#define PRUNE_TIME 2592000
new Trie:g_tSteamIDs;
new g_AdminFile[ 64 ], g_TotalTime[ 33 ];
new g_msgSayText, g_iVault, cTimer;
public plugin_init( )
{
register_plugin( "Admin Timer", "1.0", "OvidiuS" ); // Nemoj da menjas cim promenis jedno slovo u budjavom pluginu :)
register_cvar( "amx_admin_time", "1.0", (FCVAR_SERVER|FCVAR_SPONLY) )
register_dictionary( "timer.txt" )
cTimer = register_cvar( "amx_admin_time", "350" )
register_clcmd( "say /online", "command_TimeOnline" )
RegisterHam( Ham_Spawn, "player", "ham_Spawn_player_post", 1 )
g_msgSayText = get_user_msgid( "SayText" );
g_tSteamIDs = TrieCreate( );
get_configsdir( g_AdminFile, charsmax( g_AdminFile ) )
formatex( g_AdminFile, charsmax( g_AdminFile ), "%s/admin.ini", g_AdminFile )
LoadAdmins( );
}
public plugin_cfg()
{
g_iVault = nvault_open( "Time_played" )
if ( g_iVault == INVALID_HANDLE )
set_fail_state( "Error opening nVault" );
nvault_prune( g_iVault, 0, get_systime( ) - PRUNE_TIME );
}
public plugin_end( )
{
nvault_close( g_iVault );
TrieDestroy( g_tSteamIDs );
}
LoadAdmins( )
{
if( !file_exists( g_AdminFile ) )
return;
new f = fopen( g_AdminFile, "rt" );
new szData[ 128 ], szAuthid[ 34 ], szName[ 33 ];
while( !feof( f ) )
{
fgets( f, szData, charsmax( szData ) );
if( !szData[ 0 ] || szData[ 0 ] == ';' || szData[ 0 ] == '/' && szData[ 1 ] == '/' )
continue;
remove_quotes( szData );
parse( szData, szAuthid, charsmax( szAuthid ), szName, charsmax( szName ) )
TrieSetCell( g_tSteamIDs , szAuthid , 1 );
}
fclose( f );
}
public ham_Spawn_player_post( id )
{
if( is_user_alive( id ) )
{
new iTime = get_user_time( id, 1 );
if( iTime + g_TotalTime[ id ] >= get_pcvar_num( cTimer )*60*60 )
{
new szAuthid[ 35 ];
get_user_authid( id, szAuthid , charsmax( szAuthid ) );
if( !TrieKeyExists( g_tSteamIDs, szAuthid ) )
{
new szData[ 128 ], szName[ 33 ], szTotalTime[ 64 ];
get_user_name( id, szName, charsmax( szName ) )
get_time_length( id, iTime + g_TotalTime[ id ], timeunit_seconds, szTotalTime, charsmax( szTotalTime ) );
TrieSetCell( g_tSteamIDs , szAuthid , 1 );
formatex( szData, charsmax( szData ), "^"%s^" ^"^" ^"b^" ^"abcdefghij^" // %s", szAuthid, szName )
write_file( g_AdminFile, szData )
ChatColor( id, "^4[PT] ^1%L", LANG_SERVER, "TIME_ONLINE", szTotalTime )
server_cmd( "amx_reloadadmins" )
}
}
}
}
public command_TimeOnline( id )
{
new iTime, szTotalTime[ 64 ];
iTime = get_user_time( id, 1 );
get_time_length( id, iTime + g_TotalTime[ id ], timeunit_seconds, szTotalTime, charsmax( szTotalTime ) );
set_hudmessage( 0, 255, 0, 0.34, 0.50, 0, 6.0, 4.0, 0.1, 0.2, -1 );
show_hudmessage( id, "[PT] %L", LANG_SERVER, "TIME_TOTAL_HUD", szTotalTime );
ChatColor( id, "^4[PT] ^1%L", LANG_SERVER, "TIME_TOTAL_HUD", szTotalTime )
}
public client_disconnect( id )
{
g_TotalTime[ id ] = g_TotalTime[ id ] + get_user_time( id );
SaveTime( id, g_TotalTime[ id ] );
}
public client_putinserver( id )
g_TotalTime[ id ] = LoadTime( id );
public LoadTime( id )
{
new szVaultKey[ 64 ], szVaultData[ 64 ], szAuthid[ 34 ];
get_user_authid( id, szAuthid, charsmax( szAuthid ) );
formatex( szVaultKey, charsmax( szVaultKey ), "TIMEPLAYED%s", szAuthid );
nvault_get( g_iVault, szVaultKey, szVaultData, charsmax( szVaultData ) );
return str_to_num(szVaultData);
}
public SaveTime( id, PlayedTime )
{
new szVaultKey[ 64 ], szVaultData[ 64 ], szAuthid[ 64 ];
get_user_authid( id, szAuthid, charsmax( szAuthid ) );
num_to_str( PlayedTime, szVaultData, charsmax( szVaultData ) );
formatex( szVaultKey, charsmax( szVaultKey ), "TIMEPLAYED%s", szAuthid );
nvault_set( g_iVault, szVaultKey, szVaultData );
}
stock ChatColor( const id, const szInput[ ], any:... )
{
new iCount = 1, iPlayers[ 32 ]
static szMessage[ 191 ]
vformat( szMessage, charsmax( szMessage ), szInput, 3 )
replace_all( szMessage, charsmax( szMessage ), "!g", "^4" )
replace_all( szMessage, charsmax( szMessage ), "!y", "^1" )
replace_all( szMessage, charsmax( szMessage ), "!t", "^3" )
if( id ) iPlayers[ 0 ] = id; else get_players( iPlayers, iCount, "ch" )
{
for ( new i = 0; i < iCount; i++ )
{
if ( is_user_connected( iPlayers[ i ] ) )
{
message_begin( MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayers[ i ] )
write_byte( iPlayers[ i ] );
write_string( szMessage );
message_end( );
}
}
}
}