milutinke |
12-06-2015 18:00 |
Re: [Request] So cool script . Can anyone teach ?
Can someone test it, i wrote this using my mobile phone :P
AMXX:
PHP Code:
#include < amxmodx > #include < sqlx >
enum _:StructPlayerInfo { g_szSteamID[ 32 ], g_szName[ 32 ], g_szIp[ 20 ], g_iPlayerId, g_iPlayedTime }
enum _:StructCvars { g_szCvarHost, g_szCvarUser, g_szCvarPwd, g_szCvarDb }
new g_szCvars[ StructCvars ][ ][ ] = { // Name Value { "aat_host", "localhost" }, { "aat_user", "root" }, { "aat_pwd", "root" }, { "aat_db", "root" } };
new g_szCvarData[ StructCvars ][ 64 ]; new g_iCvarData[ StructCvars ]; new Handle: g_hSqlConnection; new g_iMaxPlayers;
new g_PlayerInfo[ 33 ][ StructPlayerInfo ];
public plugin_init( ) { register_plugin( "Admin Activity Tracker", "1.0", "Milutinke (ByM)" ); g_iMaxPlayers = get_maxplayers( ); for( new i = 0; i < sizeof( g_szCvars[ ] ); i++ ) { g_iCvarData[ i ] = register_cvar( g_szCvars[ i ][ 0 ], g_szCvars[ i ][ 1 ] ); get_cvar_string( g_iCvarData[ i ], g_szCvarData[ i ], charsmax( g_szCvarData[ ] ) ); } g_hSqlConnection = SQL_MakeDbTuple( g_szCvarData[ g_szCvarHost ], g_szCvarData[ g_szCvarUser ], g_szCvarData[ g_szCvarPwd ], g_szCvarData[ g_szCvarDb ] ); }
public plugin_end( ) { SQL_FreeHandle( g_hSqlConnection ); }
public client_putinserver( iPlayer ) { if( is_user_bot( iPlayer ) ) return; get_user_authid( iPlayer, g_PlayerInfo[ iPlayer ][ g_szSteamID ], charsmax( g_PlayerInfo[ ][ g_szSteamID ] ) ); get_user_name( iPlayer, g_PlayerInfo[ iPlayer ][ g_szName ], charsmax( g_PlayerInfo[ ][ g_szName ] ) ); get_user_ip( iPlayer, g_PlayerInfo[ iPlayer ][ g_szIp ], charsmax( g_PlayerInfo[ ][ g_szIp ] ), 1 ); PlayerHasConnected( iPlayer ); }
public client_disconnect( iPlayer ) { if( is_user_bot( iPlayer ) ) return; PlayerHasDisconnected( iPlayer ); }
public PlayerHasConnected( iPlayer ) { if( !is_user_connected( iPlayer ) || !( 1 <= iPlayer <= g_iMaxPlayers ) ) return; new szQuery[ 128 ]; formatex( szQuery, charsmax( szQuery ), "SELECT `Id`, `PlayedTime` FROM `aatdb` WHERE `SteamID` = '%s'", g_PlayerInfo[ iPlayer ][ g_szSteamID ] ); new iData[ 1 ]; iData[ 0 ] = iPlayer; SQL_ThreadQuery( g_hSqlConnection, "HandlePlayerConnect", szQuery, iData, 1 ); }
public HandlePlayerConnect( iFailState, Handle: hQuery, szError[ ], iError, iData[ ], iSize, Float: flQueueTime ) { if( SQL_IsFail( iFailState, iError, szError ) ) { return; } new iPlayer = iData[ 0 ]; if( !is_user_connected( iPlayer ) || !( 1 <= iPlayer <= g_iMaxPlayers ) ) return; if( SQL_NumResults( hQuery ) ) { g_PlayerInfo[ iPlayer ][ g_iPlayerId ] = SQL_ReadResult( hQuery, 0 ); g_PlayerInfo[ iPlayer ][ g_iPlayedTime ] = SQL_ReadResult( hQuery, 1 ); SQL_QueryMe( _, "UPDATE `aatdb` SET `Online` = '1', `Nick` = '%s', `Ip` = '%s' WHERE `Id` = '%d'", g_PlayerInfo[ iPlayer ][ g_szName ], g_PlayerInfo[ iPlayer ][ g_szIp ], g_PlayerInfo[ iPlayer ][ g_iPlayerId ] ); } else { new szQuery[ 128 ], szDate[ 32 ]; get_time( "%m.%d.%Y - %H:%M", szDate, charsmax( szDate ) ); formatex( szQuery, charsmax( szQuery ), "INSERT INTO `aatdb` (`SteamID`, `LastConnection`, `Nick`, `Ip`, `Online`, `PlayedTime`) VALUES ('%s', '%s', '%s', '%s', '1', '0')", g_PlayerInfo[ iPlayer ][ g_szSteamID ], szDate, g_PlayerInfo[ iPlayer ][ g_szName ], g_PlayerInfo[ iPlayer ][ g_szIp ] ); SQL_ThreadQuery( g_hSqlConnection, "HandlePlayerInsert", szQuery, iData, 1 ); } }
public HandlePlayerInsert( iFailState, Handle: hQuery, szError[ ], iError, iData[ ], iSize, Float: flQueueTime ) { if( SQL_IsFail( iFailState, iError, szError ) ) { return; } new iPlayer = iData[ 0 ]; if( !is_user_connected( iPlayer ) || !( 1 <= iPlayer <= g_iMaxPlayers ) ) return; g_PlayerInfo[ iPlayer ][ g_iPlayerId ] = SQL_GetInsertId( hQuery ); g_PlayerInfo[ iPlayer ][ g_iPlayedTime ] = 0; }
public PlayerHasDisconnected( iPlayer ) { SQL_QueryMe( _, "UPDATE `aatdb` SET `PlayedTime` = '%d', `Score` = '%d', `Online` = '0' WHERE `Id` = '%d'", get_user_time( iPlayer ) + g_PlayerInfo[ iPlayer ][ g_iPlayedTime ], get_user_frags( iPlayer ), g_PlayerInfo[ iPlayer ][ g_iPlayerId ] ); }
//Following code is taken from xPawn plugins (Saved 5 minute of work xD) public HandleQuery( iFailState, Handle: hQuery, szError[ ], iError, szData[ ], iSize, Float: flQueueTime ) { SQL_IsFail( iFailState, iError, szError ); }
SQL_QueryMe( szHandle[ ] = "HandleQuery", const szQuery[ ], any:... ) { new szMessage[ 256 ]; vformat( szMessage, 255, szQuery, 3 ); SQL_ThreadQuery( g_hSqlConnection, szHandle, szMessage ); }
stock bool: SQL_IsFail( const iFailState, const iError, const szError[ ] ) { if( iFailState == TQUERY_CONNECT_FAILED ) { server_print( "[ByM] Could not connect to SQL database: %s", szError ); log_to_file( "SQL_Error.txt", "[ByM] Could not connect to SQL database: %s", szError ); return true; } else if( iFailState == TQUERY_QUERY_FAILED ) { server_print( "[ByM] Query failed: (%i) %s", iError, szError ); log_to_file( "SQL_Error.txt", "[ByM] Could not connect to SQL database: %s", szError ); return true; } return false; }
SQL:
Code:
CREATE TABLE IF NOT EXISTS `aatdb` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`SteamID` varchar(32) NOT NULL DEFAULT '',
`Nick` varchar(64) NOT NULL DEFAULT '',
`Ip` varchar(32) NOT NULL DEFAULT '',
`Online` int(11) NOT NULL DEFAULT '0',
`PlayedTime` int(11) NOT NULL DEFAULT '0',
`LastConnection` varchar(64) NOT NULL DEFAULT '',
`Score` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
UNIQUE KEY `SteamID` (`SteamID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|