- Код: Выделить всё
#include < amxmodx >
#include < hamsandwich >
#include < cstrike >
#include < sqlx >
enum _:NUMZ{ STARTBY, KILLS, DIES, EXP }
new g_UserName[ 33 ][ 32 ], g_Loaded[ 33 ], g_szSteam[ 33 ][ 40 ], g_Total[ 33 ][ NUMZ ], Handle:SQL_Tuple;
new const
Host[ ]= "host", // Хост
Db[ ]= "vps22808", // База данных
User[ ]= "vps22808", // Пользователь
Pass[ ]= "", // Пароль
Table[ ] = "stats", // Таблица
AuthRow[ ] = "steam",
MoneyRow[ ]= "user_money";
public plugin_init( )
{
RegisterHam( Ham_Killed, "player", "fw_HamKilled" );
set_task( 15.0, "Load_Debug" );
//register_clcmd( "say /stats", "show_stats" );
}
public fw_HamKilled( id, attacker )
{
if( !is_user_connected( id ) || !is_user_connected( attacker ) )
return;
g_Total[ attacker ][ KILLS ]++;
g_Total[ attacker ][ EXP ]++;
g_Total[ id ][ DIES ]++;
}
public Load_Debug( )
{
static g_Error[ 15 ];
SQL_Tuple = SQL_MakeDbTuple( Host, User, Pass, Db );
new ErrorCode, Handle:SqlConnection = SQL_Connect( SQL_Tuple, ErrorCode, g_Error, charsmax( g_Error ) );
if( SqlConnection == Empty_Handle )
set_fail_state( g_Error );
SQL_FreeHandle( SqlConnection );
}
public QueryHandler( FailState, Handle:Query, Error[ ], ErrCode, data[ ], size, Float:querytime )
{
if( !CheckQuery( FailState, ErrCode, Error ) )
{
SQL_FreeHandle( Query );
return 1;
}
static id;
id = data[ 0 ];
if( !is_user_connected( id ) )
return 1;
if( SQL_NumResults( Query ) < 1 )
{
new Query[ 1024 ];
format( Query, 1023, "INSERT INTO `%s` (`%s`, `%s`) VALUES ('%s', '0');", Table, AuthRow, MoneyRow, g_szSteam[ id ] );
SQL_ThreadQueryFormatNoData( SQL_Tuple, "IgnoreHandle", Query );
}
else
{
cs_set_user_money( id, 0 );
cs_set_user_money( id, SQL_ReadResult( Query, 0 ) );
if( equal( g_szSteam[ id ], "STEAM_ID_LAN" ) || equal( g_szSteam[ id ], "VALVE_ID_LAN" ) )
set_user_money( id, 0 );
}
SQL_FreeHandle( Query );
g_Loaded[ id ] = true;
return 0;
}
public LoadData( task )
{
new id = task - 73218 ;
if( !is_user_connected( id ) )
return;
g_szSteam[ id ][ 0 ] = '^0';
set_user_money( id, 0 );
get_user_authid( id, g_szSteam[ id ], charsmax( g_szSteam ) );
g_UserName[ id ][ 0 ] = '^0';
get_user_name( id, g_UserName[ id ], 31 );
new Query[ 1024 ];
static data[ 1 ];
data[ 0 ] = id;
format( Query, 255, "SELECT `%s` FROM `%s` WHERE `%s`='%s'", MoneyRow, Table, AuthRow, g_szSteam[ id ] );
SQL_ThreadQueryFormat( SQL_Tuple, "QueryHandler", Query, data, 1 );
}
public Save_Data( id )
{
if( !g_Loaded[ id ] )
return;
static sQuery[ 4096 ], iLen, iValue;
iLen = 0;
new current_time = get_systime( );
iValue = cs_get_user_money( id );
iLen += formatex( sQuery[ iLen ], charsmax( sQuery ) - iLen, "UPDATE `%s` SET `%s` = '%i', `kills` = `kills` + %d,", Table, MoneyRow, iValue, g_Total[ id ][ KILLS ] );
iLen += formatex( sQuery[ iLen ], charsmax( sQuery ) - iLen, "`joined` = %d, `leaved` = %d, `seconline` = `seconline` + %d, `nick` = ^"%s^", `dies` = `dies` + %d, `exp` = `exp` + %d WHERE `%s`.`%s` = '%s'",
g_Total[ id ][ STARTBY ],
current_time,
( current_time - g_Total[ id ][ STARTBY ] ),
g_UserName[ id ],
g_Total[ id ][ DIES ],
g_Total[ id ][ EXP ],
Table,
AuthRow,
g_szSteam[ id ] );
SQL_ThreadQueryFormatNoData( SQL_Tuple, "IgnoreHandle", sQuery );
g_Total[ id ][ KILLS ] = 0;
g_Total[ id ][ STARTBY ] = 0;
g_Total[ id ][ DIES ] = 0;
g_Total[ id ][ EXP ] = 0;
}
public IgnoreHandle( FailState, Handle:Query, Error[ ], ErrCode, Data[ ], DataSize )
{
CheckQuery( FailState, ErrCode, Error );
SQL_FreeHandle( Query );
return 1;
}
public plugin_end( )
{
if( SQL_Tuple )
SQL_FreeHandle( SQL_Tuple );
}
public client_putinserver( id )
{
g_Loaded[ id ] = false;
cs_set_user_money( id, 0 );
set_task( random_float( 16.0, 19.0 ), "LoadData", id + 73218 );
g_Total[ id ][ KILLS ] = 0;
g_Total[ id ][ STARTBY ] = 0;
g_Total[ id ][ STARTBY ] = get_systime( );
g_Total[ id ][ DIES ] = 0;
g_Total[ id ][ EXP ] = 0;
}
public client_disconnect( id )
{
if( !g_Loaded[ id ] )
{
if( task_exists( id + 73218 ) )
{
remove_task( id + 73218 );
}
}
Save_Data( id );
}
public set_user_money( id, value )
cs_set_user_money( id, value );
stock bool:CheckQuery( FailState, ErrCode, Error[ ] )
{
if( FailState == 0 )
return true;
else if( FailState ==- 2 )
log_amx( "Load - Could not connect to SQL database. [%d] %s", ErrCode, Error );
else if( FailState ==- 1 )
log_amx( "Load Query failed. [%d] %s", ErrCode, Error );
return false;
}
stock SQL_ThreadQueryFormat( Handle:Db_Tuple, const handler[ ], const query[ ], const data[ ] ="", dataSize = 0, any:... )
{
static szQueryFormat[ 1024 ];
vformat( szQueryFormat, charsmax( szQueryFormat ), query, 6 );
return SQL_ThreadQuery( Db_Tuple, handler, szQueryFormat, data, dataSize );
}
stock SQL_ThreadQueryFormatNoData( Handle:Db_Tuple, const handler[ ], const query[ ], any:... )
{
static szQueryFormat[ 5000 ];
vformat( szQueryFormat, charsmax( szQueryFormat ), query, 4 );
return SQL_ThreadQuery( Db_Tuple, handler, szQueryFormat );
}
после выхода с сервера, в mysql сохраняет вот так:
Может кто поможет?