[quote]#include <amxmodx>
#include <amxmisc > // -> stock is_user_admin(id) ...
#include <sqlx>
#define PLUGIN "Admin Activity SQLx"
#define VERSION "0.Ox"
#define AUTHOR "Hades Ownage, M0hikan"
#define MAX_BALLS 3
#pragma tabsize 0
//sqlx stuff, don't touch too much.
new const SQL_TABLE[ ] = "admin_activity";
new g_pcvarHost;
new g_pcvaruUser;
new g_pcvarPass;
new g_pcvarDB;
new Handle:g_SqlTuple;
new g_Error[ 512 ]
new steamid[32]
new playedTime[32]
new string[32]
new uid[32]
new BlackBalls[3]
//time refference
//new timeLapse, szHours[64], szMinutes[64], dayTime[64]
//timeLapse = get_systime();
//format_time(szHours, 64, "%I" , timeLapse); //ore
//format_time(szMinutes, 64, "%M" , timeLapse); //minute
//format_time(dayTime, 64, "%I:%M %p" , timeLapse); //ore si minute AM/PM
//end time refference
//Plugin init
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
g_pcvarHost = register_cvar( "sql_host", "127.0.0.1" )
g_pcvaruUser = register_cvar( "sql_user", "root" )
g_pcvarPass = register_cvar( "sql_pass", "" )
g_pcvarDB = register_cvar( "sql_db", "cstrike" )
//client commands
register_clcmd("say /activity", "AdminCheck");
set_task( 0.1, "SqlInit" )
set_task(3600.0, "CheckAdminActivity",_, _, _, "b") //la fiecare ora verifica timpul jucat al adminului
// si daca iasa adminul respectiv de pe server ?
}
/*
SQL stuff
*/
public SqlInit( )
{
new szHost[ 32 ]
new szUser[ 32 ]
new szPass[ 32 ]
new szDB[ 32 ]
get_pcvar_string( g_pcvarHost, szHost, charsmax( szHost ) )
get_pcvar_string( g_pcvaruUser, szUser, charsmax( szUser ) )
get_pcvar_string( g_pcvarPass, szPass, charsmax( szPass ) )
get_pcvar_string( g_pcvarDB, szDB, charsmax( szDB ) )
g_SqlTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB )
new ErrorCode
new Handle:SqlConnection = SQL_Connect( g_SqlTuple, ErrorCode, g_Error, charsmax( g_Error ) )
if( SqlConnection == Empty_Handle )
set_fail_state( g_Error )
new Handle:Queries
Queries = SQL_PrepareQuery( SqlConnection, "CREATE TABLE IF NOT EXISTS %s (id INT(11) NOT NULL PRIMARY KEY, steamid varchar(32), playedTime int(11), blackBalls int(11)) ", SQL_TABLE )
if( !SQL_Execute( Queries ) )
{
SQL_QueryError( Queries, g_Error, charsmax( g_Error ) )
set_fail_state( g_Error )
}
SQL_FreeHandle( Queries )
SQL_FreeHandle( SqlConnection )
}
public LoadData(id)
{
static Data[1]; Data[0] = id
new name[32]
get_user_name(id, name, 31)
new szTemp[ 512 ]
formatex( szTemp, charsmax( szTemp ), "SELECT * FROM %s WHERE (`%s`.`steamid` = '%s');", SQL_TABLE, SQL_TABLE, name)
SQL_ThreadQuery( g_SqlTuple, "AddAdminActivity", szTemp, Data, 1 )
}
public AddAdminActivity( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
{
if( SQL_IsFail( FailState, Errcode, Error ) )
return PLUGIN_HANDLED_MAIN
static id; id = Data[0]
if(is_user_admin(id)){
if( SQL_NumResults( Query ) < 1 )
{
static playTime
playTime = get_user_time(id, 1) / 60;
new name[32]
get_user_name(id, name, 31)
new szTemp[ 512 ]
formatex( szTemp, charsmax( szTemp ), "INSERT INTO %s (steamid, playedTime, blackBalls) VALUES('%s', '0', '0');", SQL_TABLE, name, playTime)
SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
}
}/* else { // Nu e necesar. Conditia este adevarata cat timp jucatorul e admin
return PLUGIN_HANDLED
}*/
SQL_FreeHandle(Query)
return PLUGIN_CONTINUE
}
public ResetData(id)
{
new name[32]
get_user_name(id, name, 31)
new szTemp[ 512 ]
formatex( szTemp, charsmax( szTemp ), "UPDATE `%s` SET `playedTime` = '0' WHERE `%s`.`steamid` = '%s';", SQL_TABLE, SQL_TABLE, name)
SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
}
public CheckAdminActivity(/*id*/){
new szPlayers[ 32 ], iNum, id;
get_players( szPlayers, iNum, "c" );
for( new i = 0 ; i < iNum ; i++ )
{
id = szPlayers[ i ];
if( is_user_admin( id ) )
{ // luam doar adminii din toti jucatorii ON
//if(get_user_flags(id) & ADMIN_KICK){
new name[32]
get_user_name(id, name, 31)
static Data[1]; Data[0] = id
new szTemp[512]
formatex( szTemp, charsmax( szTemp ), "SELECT * FROM %s WHERE (`%s`.`steamid` = '%s');", SQL_TABLE, SQL_TABLE, name)
SQL_ThreadQuery(g_SqlTuple,"AdminCheck",szTemp,Data,1)
/*} else { // Nu e necesar
return PLUGIN_HANDLED
*/
//return PLUGIN_CONTINUE
}
}
}
public AdminCheck(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
else if(FailState == TQUERY_QUERY_FAILED)
log_amx("Load Query failed. [%d] %s", Errcode, Error)
static id; id = Data[0]
//we have results
if( SQL_NumResults( Query ) > 0 )
{
uid[id] = SQL_ReadResult(Query, 0) //integer
steamid[id] = SQL_ReadResult(Query, 1, string, 31) //string
playedTime[id] = SQL_ReadResult(Query, 2) //integer
BlackBalls[id] = SQL_ReadResult(Query, 3) //integer
new timeLapse, szHours[64], szMinutes[64], dayTime[64]
timeLapse = get_systime();
format_time(szHours, 64, "%I" , timeLapse); //ore
format_time(szMinutes, 64, "%M" , timeLapse); //minute
format_time(dayTime, 64, "%I:%M %p" , timeLapse); //ore si minute AM/PM
if(BlackBalls[id] >= MAX_BALLS){
removeAdmin(uid[id])
client_print(id, print_chat, "[ADMIN ACTIVITY] %s ti-a fost scos adminul pentru acumularea de 3 bile negre.", steamid[id])
return PLUGIN_HANDLED
} else {
//180 minutes = 3 hours of activity
if((szHours[id] >= 00) || (szMinutes[id] >= 00) || playedTime[id] >= 180){
return PLUGIN_HANDLED
}
//leap check
if(playedTime[id] >= 180){
client_print(id,print_chat,"[ADMIN ACTIVITY] Azi ai jucat %d minute si ti-ai terminat programul, felicitari pentru activitate admin %s.", playedTime[id], steamid[id])
} else {
client_print(id,print_chat,"[ADMIN ACTIVITY] %s azi ai jucat %d minute si inca nu ti-ai terminat programul.", steamid[id], playedTime[id])
}
//Nu are destule ore jucate
if((szHours[id] >= 00) || (szMinutes[id] >= 00) || playedTime[id] != 180){
AddAdminBlackBalls(uid[id])
client_print(id,print_chat,"[ADMIN ACTIVITY] %s ti-a fost adaugata o bila neagra in cont,la %d bile negre ramai fara admin.Momentan ai %d/%d.", playedTime[id], steamid[id], MAX_BALLS, BlackBalls[id], MAX_BALLS)
}
}
}
return PLUGIN_HANDLED
}
public AddAdminBlackBalls(id)
{
new name[32]
get_user_name(id, name, 31)
new bball[1]
new szTemp[ 512 ]
formatex( szTemp, charsmax( szTemp ), "UPDATE `%s` SET `blackBalls` = `blackBalls` + '%d' WHERE `%s`.`steamid` = '%s';", SQL_TABLE, bball, SQL_TABLE,name)
SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
}
public removeAdmin(id){
new name[32]
get_user_name(id, name, 31)
new szFile = fopen( "addons/amxmodx/configs/users.ini", "r" );
if( !szFile )
return 1;
new szData[ 512 ], szParseName[ 32 ], szParsePassword[ 32 ], szParseFlags[ 32 ], szParseRFlags[ 32 ], iLine;
while( !feof( szFile ) )
{
fgets( szFile, szData, sizeof( szData ) -1 );
if( szData[ 0 ] == ';' || szData[ 0 ] == '!' || szData[ 0 ] == '/' && szData[ 1 ] == '/' )
continue;
parse( szData, szParseName, sizeof( szParseName ) -1, szParsePassword, sizeof( szParsePassword ) -1, szParseFlags, sizeof( szParseFlags ) -1, szParseRFlags, sizeof( szParseRFlags ) -1 );
if( equali( szParseName, name ) )
{
new szPlayerInfo[ 256 ];
format( szPlayerInfo, sizeof( szPlayerInfo ) -1, "; ^"%s^" ^"%s^" ^"%s^" ^"%s^"", szParseName, szParsePassword, szParseFlags, szParseRFlags );
write_file( "addons/amxmodx/configs/users.ini", szPlayerInfo, iLine );
}
iLine++;
}
fclose( szFile );
return PLUGIN_HANDLED
}
public client_putinserver( id ){
LoadData(id)
}
public client_disconnect(id){
ResetData(id)
}
public IgnoreHandle( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
SQL_FreeHandle( Query )
SQL_IsFail( const FailState, const Errcode, const Error[ ] ) {
if( FailState == TQUERY_CONNECT_FAILED )
{
log_amx( "[Error] Could not connect to SQL database: %s", Error )
return true
}
else if( FailState == TQUERY_QUERY_FAILED )
{
log_amx( "[Error] Query failed: %s", Error )
return true
}
else if( Errcode )
{
log_amx( "[Error] Error on query: %s", Error )
return true
}
return false
}
[/quote]