Not thoroughly tested.
The plugin will not display the admins current time if they are actively connected. The data displayed with the /at command is saved on disconnect.
Cvar apt_adminflags holds the flags the player must have to be considered an admin
PHP Code:
#include <amxmodx>
#include <nvault_array>
#include <nvault_util>
#define MAX_PLAYERS 32
new const Version[] = "0.1";
enum AdminData
{
adName[ 32 ],
adAuthID[ 34 ],
adFlags[ 26 ],
bool:adIsAdmin,
adConnectTime,
adPlayTime,
adConnections
}
new g_adData[ MAX_PLAYERS + 1 ][ AdminData ];
new g_Vault;
new pcvarAdminFlags;
public plugin_init()
{
register_plugin( "Admin Play Time" , Version , "bugsy" );
register_clcmd( "say /at" , "AdminTime" );
register_clcmd( "say_team /at" , "AdminTime" );
pcvarAdminFlags = register_cvar( "apt_adminflags" , "cde" );
g_Vault = nvault_open( "apt_data" );
}
public plugin_end()
{
nvault_close( g_Vault );
}
public client_authorized( id )
{
new szFlags[ 26 ] , iPlayerFlags , iRequiredFlags;
get_pcvar_string( pcvarAdminFlags , szFlags , charsmax( szFlags ) );
iPlayerFlags = get_user_flags( id );
iRequiredFlags = read_flags( szFlags );
if ( ( g_adData[ id ][ adIsAdmin ] = bool:!!( ( iPlayerFlags & iRequiredFlags ) == iRequiredFlags ) ) )
{
get_user_authid( id , g_adData[ id ][ adAuthID ] , charsmax( g_adData[][ adAuthID ] ) );
nvault_get_array( g_Vault , g_adData[ id ][ adAuthID ] , g_adData[ id ][ AdminData:0 ] , sizeof( g_adData[] ) );
get_flags( iPlayerFlags , g_adData[ id ][ adFlags ] , charsmax( g_adData[][ adFlags ] ) );
get_user_name( id , g_adData[ id ][ adName ] , sizeof( g_adData[][ adName ] ) );
g_adData[ id ][ adConnections ]++;
g_adData[ id ][ adConnectTime ] = get_systime();
}
}
public client_disconnect( id )
{
if ( g_adData[ id ][ adIsAdmin ] )
{
g_adData[ id ][ adPlayTime ] += ( get_systime() - g_adData[ id ][ adConnectTime ] );
nvault_set_array( g_Vault , g_adData[ id ][ adAuthID ] , g_adData[ id ][ AdminData:0 ] , sizeof( g_adData[] ) );
}
}
public AdminTime( id )
{
new szHUD[ 1024 ] , iHUDPos;
new iVault , iCount , iPos , szKey[ 1 ] , adData[ AdminData ] , iTS;
nvault_close( g_Vault );
g_Vault = nvault_open( "apt_data" );
iVault = nvault_util_open( "apt_data" );
iCount = nvault_util_count( iVault );
if ( iCount )
{
for ( new i = 0 ; i < iCount ; i++ )
{
iPos = nvault_util_read_array( iVault , iPos , szKey , 1 , adData[ AdminData:0 ] , sizeof( adData ) , iTS );
iHUDPos += formatex( szHUD[ iHUDPos ] , charsmax( szHUD ) - iHUDPos , "^n%d. %s, %s, %d connections, %d minutes" , i+1 , adData[ adName ] , adData[ adFlags ] , adData[ adConnections ] , adData[ adPlayTime ] / 60 );
}
}
else
{
copy( szHUD , charsmax( szHUD ) , "No data to display" );
}
set_hudmessage( 255 , 255 , 255 , 0.05 , 0.30 , 0 , 0.0, 7.0 );
show_hudmessage( id , szHUD );
return PLUGIN_HANDLED;
}