Код
#include <amxmodx>
#include <sqlx>
#include <ks>
#include <hamsandwich>
#include <fakemeta>
new playerID[33][32], Handle: SqlTuple, query_string[1000];
const PEV_SPEC_TARGET = pev_iuser2;
new g_Points[33];
new regkill, kill, c_name[32], c_authid[32], CurrentTime[22], logtext[256], ID[46], type, Data[2];
new g_szLogFile[64], szTime[32];
new szLogInfo[] = "amx_logdir";
public plugin_init()
{
register_plugin("kill_Sistem", "0.1", "Jah");
RegisterHam(Ham_Killed, "player", "ham_PlayerKilled");
register_cvar("aa_sql_host", "host");
register_cvar("aa_sql_user", "test");
register_cvar("aa_sql_pass", "test");
register_cvar("aa_sql_db", "test");
get_localinfo(szLogInfo, g_szLogFile, charsmax(g_szLogFile));
add(g_szLogFile, charsmax(g_szLogFile), "/ks");
if(!dir_exists(g_szLogFile))
mkdir(g_szLogFile);
get_time("L%Y%m%d", szTime, charsmax(szTime));
format(g_szLogFile, charsmax(g_szLogFile), "%s/%s.log", g_szLogFile, szTime);
get_time("%d/%m/%Y - %X", CurrentTime, 21);
}
public plugin_cfg()
{
new host[64], user[64], password[64], database[64];
get_cvar_string("aa_sql_host", host, charsmax(host));
get_cvar_string("aa_sql_user", user, charsmax(user));
get_cvar_string("aa_sql_pass", password, charsmax(password));
get_cvar_string("aa_sql_db", database, charsmax(database));
SqlTuple = SQL_MakeDbTuple(host, user, password, database);
formatex (query_string, charsmax(query_string), "CREATE TABLE IF NOT EXISTS `bdkills` (`Kills` int(11) NOT NULL ,`SteamID` varchar(100) NOT NULL, INDEX (`SteamID`)) ENGINE=MyISAM;");
SQL_ThreadQuery(SqlTuple, "sqlthread_Ignore", query_string, query_string, strlen(query_string)+1)
return PLUGIN_CONTINUE;
}
public sqlthread_Ignore(failstate, Handle:query, const error[], errnum, const args[], args_num, Float:queuetime)
{
if(failstate)
{
format(logtext, 255, "[KS_DEBUG] %s: - Error! Threaded query error #%d.", CurrentTime, errnum);
write_file(g_szLogFile, logtext);
format(logtext, 255, "[KS_DEBUG] %s: - --> Error is: %s", CurrentTime, error);
write_file(g_szLogFile, logtext);
format(logtext, 255, "[KS_DEBUG] %s: - --> Query was: %s", CurrentTime, args);
write_file(g_szLogFile, logtext);
}
}
public ham_PlayerKilled(victim, attacker)
{
if (is_user_bot(attacker))
return HAM_HANDLED;
static selfkill;
selfkill = (victim == attacker || !is_user_connected(attacker)) ? true : false;
if (!selfkill)
{
g_Points[attacker]++;
}
return HAM_HANDLED;
}
public client_putinserver(id)
{
if (is_user_bot(id))
return PLUGIN_HANDLED;
if (is_user_connected(id) && is_user_alive(id))
{
set_task(10.0, "ShowHud", id, _, _, "b");
}
set_task(300.0, "SaveData", id);
format(Data,1,"%d",id);
get_user_name(id, c_name, charsmax(c_name));
get_user_authid(id, c_authid, charsmax(c_authid));
//formatex (query_string, charsmax(query_string), "SELECT * FROM `bdkills`");
formatex (query_string, charsmax(query_string), "SELECT * FROM `bdkills` WHERE `SteamID` = '%s'", c_authid);
SQL_ThreadQuery(SqlTuple, "sqlthread_bdload", query_string, Data, 1);
return PLUGIN_CONTINUE;
}
public sqlthread_bdload(failstate, Handle:q_query, const e_error[], errnum, Data[], DataSize)
{
if(failstate == TQUERY_CONNECT_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-load) Could not connect to SQL database. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
else if(failstate == TQUERY_QUERY_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-load) Load Query failed. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
new id = str_to_num(Data);
get_user_name(id, c_name, charsmax(c_name));
get_user_authid(id, c_authid, charsmax(c_authid));
if (!SQL_NumResults(q_query))
{
server_print("[KS_DEBUG] Nick not found.");
format(logtext, 255, "[KS_DEBUG] %s: (BD-load) Steam id not found.", CurrentTime);
write_file(g_szLogFile, logtext);
formatex (query_string, charsmax(query_string), "INSERT INTO `bdkills` VALUES('%s','%d')", c_authid, g_Points[id]);
SQL_ThreadQuery(SqlTuple, "sqlthread_bdinsert", query_string, Data, 1);
return PLUGIN_HANDLED;
}
else
{
while(SQL_MoreResults(q_query))
{
type = SQL_ReadResult(q_query, 1);
SQL_ReadResult(q_query, 1, ID, charsmax(ID));
switch(type)
{
case 0:
{
if(containi(ID, c_name) != -1)
{
SQL_ReadResult(q_query, 0, playerID[id], charsmax(playerID));
break;
}
}
case 1:
{
if(containi(ID, c_authid) != -1)
{
SQL_ReadResult(q_query, 0, playerID[id], charsmax(playerID));
break;
}
}
}
server_print("SQL Select Result: %d %s",type,playerID[id])
format(logtext, 255, "[KS_DEBUG] %s: (BD-load) SQL Select Result: %d %s", CurrentTime, type, playerID[id]);
write_file(g_szLogFile, logtext);
SQL_NextRow(q_query);
}
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public sqlthread_bdinsert(failstate, Handle:q_query, const e_error[], errnum, Data[], DataSize)
{
new id = str_to_num(Data);
if (is_user_bot(id))
return PLUGIN_HANDLED;
if(failstate == TQUERY_CONNECT_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-insert) Could not connect to SQL database. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
else if(failstate == TQUERY_QUERY_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-insert) Insert Query failed. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
get_user_name(id, c_name, charsmax(c_name));
get_user_authid(id, c_authid, charsmax(c_authid));
format(logtext, 255, "[KS_DEBUG] %s: - (BD-insert) New player added to database. [%d] %s", CurrentTime, c_authid, c_name);
write_file(g_szLogFile, logtext);
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
SaveData(id);
}
public SaveData(id)
{
if (is_user_bot(id))
return PLUGIN_HANDLED;
if(equal(playerID[id], ""))
return PLUGIN_HANDLED;
format(Data,1,"%d",id);
formatex (query_string, charsmax(query_string), "SELECT * FROM `bdkills` WHERE `SteamID` = '%s'", playerID[id]);
SQL_ThreadQuery(SqlTuple, "sqlthread_bdsave", query_string, Data, 1);
return PLUGIN_CONTINUE;
}
public sqlthread_bdsave(failstate, Handle:q_query, const e_error[], errnum, Data[], DataSize)
{
if(failstate == TQUERY_CONNECT_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-save) Could not connect to SQL database. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
else if(failstate == TQUERY_QUERY_FAILED)
{
format(logtext, 255, "[KS_DEBUG] %s: - (BD-save) Saving Query failed. [%d] %s", CurrentTime, errnum, e_error);
write_file(g_szLogFile, logtext);
}
new id = str_to_num(Data);
kill = g_Points[id];
if(SQL_MoreResults(q_query))
{
SQL_ReadResult(q_query, 1, regkill);
regkill += kill;
formatex (query_string, charsmax(query_string), "UPDATE `bdkills` SET `Kills` = '%d', WHERE `SteamID` = '%s'", regkill, playerID[id]);
SQL_ThreadQuery(SqlTuple, "sqlthread_Ignore", query_string);
}
else
{
formatex (query_string, charsmax(query_string), "INSERT INTO `bdkills` VALUES ('%s', '%d')", playerID[id], kill);
SQL_ThreadQuery(SqlTuple, "sqlthread_Ignore", query_string);
}
playerID[id] = "";
return PLUGIN_CONTINUE;
}
public ShowHud(id)
{
new iName[32];
get_user_name(id, iName, 31);
if (is_user_connected(id) && is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2))
{
set_hudmessage(255, 145, 0, 0.01, 0.18, 0, 0.5, 15.0, 0.1, 0.2, -1);
show_hudmessage( id, "Nik: %s^nУбийств: %d", iName, g_Points[id]);
}
else
{
new idSpec;
new iPlayerName[32];
idSpec = pev(id, PEV_SPEC_TARGET);
get_user_name(idSpec, iPlayerName, 31);
set_hudmessage(60, 60, 60, 0.01, 0.18, 0, 0.5, 15.0, 0.1, 0.2, -1);
show_hudmessage( id, "Nik: %s^nУбийств: %d", iPlayerName, g_Points[idSpec]);
}
}