Код:
#include <amxmodx>
#include <sqlx>
#include <hamsandwich>
#pragma semicolon 1
#define PLUGIN "Lite_Stats"
#define VERSION "1.61"
#define AUTHOR "BIGs"
new db_cvar_host , db_cvar_name , db_cvar_user ,db_cvar_pass;
new db_host[32] , db_name[32] ,db_user[32] , db_pass[32];
new log_cv , log_v;
enum pDataR {
SteamID[ 33 ],
IP[ 16 ],
Nick[ 64 ],
Time,
Frags
};
new gPlayer[ 33 ][ pDataR];
new Handle: zSqlTup;
new Handle:link;
//new Handle:up_kill;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
set_task( 0.1, "SqlStart" );
//Cvars
db_cvar_host = register_cvar("liteS_db_host" , "localhost");
db_cvar_name = register_cvar("liteS_db_name" , "db_name");
db_cvar_user = register_cvar("liteS_db_user" , "db_user");
db_cvar_pass = register_cvar("liteS_db_pass" , "*******");
log_cv = register_cvar("liteS_log" , "1");
get_pcvar_string(db_cvar_host , db_host , 31);
get_pcvar_string(db_cvar_name , db_name , 31);
get_pcvar_string(db_cvar_user , db_user , 31);
get_pcvar_string(db_cvar_pass , db_pass , 31);
log_v = get_pcvar_num(log_cv);
//------------------------------------------------------
if(file_exists("addons/amxmodx/configs/lite_stats.cfg"))
{
server_cmd("exec addons/amxmodx/configs/lite_stats.cfg");
}
//------------------------------------------------------
inForm();
RegisterHam(Ham_Killed,"player","EVENT_Kill");
}
public EVENT_Kill(victim, attacker, corpse)
{
if(attacker <= get_maxplayers() && attacker != 0 && !is_user_bot(attacker) && !is_user_hltv(attacker))
{
Updator(attacker);
//set_task(1.0 , "Updator" ,attacker);
}
}
public SqlStart()
{
zSqlTup = SQL_MakeDbTuple(db_host,db_name,db_pass,db_user);
if(zSqlTup == Empty_Handle )
{
if(is_amd64_server())
{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 1]");
server_print("[Lite_Stats][MySQL] : Could not connect [Step 1]");
}else{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 1]");
server_print("[Lite_Stats][MySQL] : ^e[01;38;05;196mCould not connect [Step 1]^e[0m");
}
}else{
if(is_amd64_server())
{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 1]");
server_print("[Lite_Stats][MySQL] : Connected! [Step 1]");
}else{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 1]");
server_print("[Lite_Stats][MySQL] : ^e[01;38;05;46mConnected! [Step 1]^e[0m");
}
}
new iErr, szError[32];
link = SQL_Connect( zSqlTup, iErr, szError, 31);
if(link == Empty_Handle)
{
log_amx( "[Lite_Stats][MySQL] : Error (%d): %s", iErr, szError );
if(is_amd64_server())
{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 2]");
server_print("[Lite_Stats][MySQL] : Could not connect [Step 2]");
}else{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 2]");
server_print("[Lite_Stats][MySQL] : ^e[01;38;05;196mCould not connect [Step 2]^e[0m");
}
}else{
if(is_amd64_server())
{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 2]");
server_print("[Lite_Stats][MySQL] : Connected! [Step 2]");
}else{
if(log_v)
log_amx("[Lite_Stats][MySQL] : Could not connect [Step 2]");
server_print("[Lite_Stats][MySQL] : ^e[01;38;05;46mConnected! [Step 2]^e[0m");
}
}
new Handle: Query;
Query = SQL_PrepareQuery(link, "CREATE TABLE IF NOT EXISTS `lite_stats` (\
`id` int(11) NOT NULL AUTO_INCREMENT,\
`steamid` varchar(33) NOT NULL,\
`nick` varchar(64) NOT NULL,\
`ip` varchar(16) NOT NULL,\
`first` int(16) NOT NULL,\
`last` int(16) NOT NULL,\
`time` int(16) NOT NULL,\
`frags` int(16) NOT NULL,\
`type` int(1) NOT NULL,\
PRIMARY KEY (`id`),\
UNIQUE KEY `authid` (`nick`)\
)");
SQL_Execute(Query);
SQL_FreeHandle(Query);
}
public sql_query( failstate, Handle:query, error[ ] ,err ,data[], size, Float:querytime)
{
if( failstate != TQUERY_SUCCESS ) {
if(log_v)
log_amx( "[Lite_Stats][MySQL] : query error: %s", error );
server_print("[Lite_Stats][MySQL] : query error: %s | %s", error ,err);
return;
}
}
public client_connect( id )
{
gPlayer[ id ][ Time ] = 0;
get_user_authid(id, gPlayer[id][SteamID], 32);
get_user_ip(id, gPlayer[id][IP], 15, 1 );
get_user_name(id, gPlayer[id][Nick], 63);
SQL_PrepareString(gPlayer[id][Nick], gPlayer[id][Nick], 63);
}
public client_disconnect(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return PLUGIN_HANDLED;
gPlayer[ id ][ Time ] = get_user_time( id, 1 );
TimeSaveR(id);
gPlayer[ id ][ Time ] = 0;
return PLUGIN_CONTINUE;
}
public inForm()
{
if(is_amd64_server())
{
server_print("**************************************^n");
server_print("[Lite_Stats] : Satus - Started!");
server_print("[Lite_Stats] : Version - %s" ,VERSION);
server_print("[Lite_Stats] : Author - %s^n" ,AUTHOR);
server_print("**************************************");
}else{
server_print("^e[01;38;05;201m**************************************^e[0m ^n");
server_print("[Lite_Stats] : Satus - Started!");
server_print("[Lite_Stats] : Version - %s" ,VERSION);
server_print("[Lite_Stats] : Author - %s^n" ,AUTHOR);
server_print("^e[01;38;05;201m**************************************^e[0m");
}
}
stock SQL_PrepareString( const szQuery[], szOutPut[], size )
{
copy( szOutPut, size, szQuery );
replace_all( szOutPut, size, "'", "\'" );
replace_all( szOutPut, size, "`", "\`" );
replace_all( szOutPut, size, "\\", "\\\\" );
replace_all( szOutPut, size, "^0", "\0");
replace_all( szOutPut, size, "^n", "\n");
replace_all( szOutPut, size, "^r", "\r");
replace_all( szOutPut, size, "^x1a", "\Z");
}
public Updator(id)
{
//up_kill = SQL_PrepareQuery(link, "SELECT `frags` FROM `lite_stats` WHERE `steamid` = '%s'" , gPlayer[ id ][ SteamID ]);
//SQL_Execute(up_kill);
//new cv_KillS = SQL_ReadResult(up_kill ,0) / 4;
//SQL_FreeHandle(up_kill);
new input_q[1024];
new kills;
kills = get_user_frags(id);
//formatex(input_q , charsmax(input_q) , "UPDATE `lite_stats` SET `frags` = '%d' WHERE `steamid` = '%s'" , val,gPlayer[ id ][ SteamID ]);
formatex(input_q , charsmax(input_q) , "UPDATE `lite_stats` SET frags = frags + '%d' WHERE `steamid` = '%s'" ,kills,gPlayer[ id ][ SteamID ]);
server_print("---->%s" ,input_q);
if(zSqlTup)
SQL_ThreadQuery (zSqlTup, "sql_query", input_q );
}
stock TimeSaveR(id)
{
new query[2048],
flags = get_user_flags( id );
formatex( query, charsmax( query ), "INSERT INTO `lite_stats` ( `steamid`,`nick`, `ip`, `first`, `last`, `time`, `type` ) VALUES ( '%s','%s', '%s', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()), %d, %d ) ON DUPLICATE KEY UPDATE `time` = `time` + %d, `last` = UNIX_TIMESTAMP(NOW())",
gPlayer[ id ][ SteamID ], gPlayer[ id ][ Nick ], gPlayer[ id ][ IP ], gPlayer[ id ][ Time ], ( ( flags > 0 && !( flags & ADMIN_USER ) ) ? 1 : 0 ), gPlayer[ id ][ Time ]);
if(zSqlTup)
SQL_ThreadQuery (zSqlTup, "sql_query", query );
}
public plugin_end()
{
SQL_FreeHandle(link);
//SQL_FreeHandle(up_kill);
}