#include <amxmodx>
#include <sqlx>
#include <hamsandwich>
#pragma semicolon 1
/* -------- [DB NAME] -------- */
new const DataBaseMainName[] = "NumeBazaDeDate"; // aici pui ce nume vrei la baza de date ! Exemplu "KnifeKillsDB"
#define ARMA CSW_KNIFE
#define MAX 33
#define SAVE_DATA 10.0 // Aici modifici la cate secunde sa se introduca datele in DB , recomand 10 sec. ptr ca sa nu fie probleme
/* ------ [ Aici sunt setarile pentru hud, le modifici valorile daca ai nevoie ] ------*/
// Culori ( site : http://www.valmindesign.com/blog/web-design/coduri-culori/ )
#define ROSU 255
#define VERDE 215
#define ALBASTRU 0
//Aranajre pe axa xOy
#define XO 0.03 // stanga dreapta
#define YO 0.17 // sus jos
// aici modifici cum vr sa scrie in hud ; De exemplu : Kill Count : 5
new const Text[] = "Cutite date :";
new const Text2[] = "Cutite Primite pe cocoasa :";
/* ------ [ Sfarsit setari hud ] ------*/
#if AMXX_VERSION_NUM < 190
#define client_disconnected(%1) client_disconnect(%1)
#endif
enum
{
DB_IP,
DB_USER,
DB_PASS,
DB_NAME,
MAX_VARS
};
new VAR[MAX_VARS];
new Handle:g_SqlTuple;
new g_Error[512];
new CutiteDate[33];
new CutitePrimite[33];
new SyncHudMessage;
public plugin_init() {
register_plugin("knife Top", "1.4", "SenorAMXX");
VAR[DB_IP] = register_cvar("database_ip" ," ");
VAR[DB_USER] = register_cvar("database_user" ," ");
VAR[DB_PASS] = register_cvar("database_pass" ," ");
VAR[DB_NAME] = register_cvar("database_name" ," ");
register_event("DeathMsg", "Event_DeathMsg", "a");
register_event("ResetHUD", "event_ResetHud", "be");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawnedPost", 1);
register_clcmd("say /knifetop", "CheckData");
set_task(1.0,"HudMSG",_,_,_, "b");
set_task(SAVE_DATA,"Save_MySql",_,_,_,"b",0);
set_task(1.0, "MySql_Init");
SyncHudMessage = CreateHudSyncObj();
}
public event_ResetHud(id) HudMSG(id);
public Ham_PlayerSpawnedPost(id)
{
if(is_user_connected(id))
set_task(1.0, "HudMSG", id, _, _, "b");
}
public HudMSG(id)
{
if(!is_user_alive(id) || is_user_hltv(id) || is_user_bot(id)) return;
new txtData[ 256 ];
formatex(txtData, sizeof( txtData ) - 1,"%s %d^n%s %d",Text,CutiteDate[id],Text2,CutitePrimite[id]);
set_hudmessage(ROSU, VERDE, ALBASTRU, XO, YO, 0, 0.5, 15.0, 2.0, 2.0, -1);
ShowSyncHudMsg(id, SyncHudMessage, txtData);
}
public MySql_Init()
{
new IP[128],USER[64],PASS[64],NAME[64];
get_cvar_string(VAR[DB_IP], IP, charsmax(IP));
get_cvar_string(VAR[DB_USER], USER, charsmax(USER));
get_cvar_string(VAR[DB_PASS], PASS, charsmax(PASS));
get_cvar_string(VAR[DB_NAME], NAME, charsmax(NAME));
g_SqlTuple = SQL_MakeDbTuple(IP,USER,PASS,NAME);
new ErrorCode,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 (steamid varchar(32),cutite_date INT(11),cutite_primite INT(11))",DataBaseMainName);
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error));
set_fail_state(g_Error);
}
SQL_FreeHandle(Queries);
SQL_FreeHandle(SqlConnection);
}
public plugin_end() SQL_FreeHandle(g_SqlTuple);
public Load_MySql(id)
{
new szSteamId[32], szTemp[512];
get_user_authid(id, szSteamId, charsmax(szSteamId));
new Data[1];
Data[0] = id;
format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`steamid` = '%s')",DataBaseMainName, DataBaseMainName, szSteamId);
SQL_ThreadQuery(g_SqlTuple,"add_user",szTemp,Data,1);
}
public add_user(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);
new id;
id = Data[0];
if(SQL_NumResults(Query) < 2)
{
new szSteamId[32];
get_user_authid(id, szSteamId, charsmax(szSteamId));
if (equal(szSteamId,"ID_PENDING"))
return PLUGIN_HANDLED;
new szTemp[512];
format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `steamid` , `cutite_date` , `cutite_primite` )VALUES ('%s','0', '0');",DataBaseMainName,szSteamId);
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp);
}
else
{
CutiteDate[id] = SQL_ReadResult(Query, 1);
CutitePrimite[id] = SQL_ReadResult(Query, 2);
}
return PLUGIN_HANDLED;
}
public Save_MySql(id)
{
new szSteamId[32], szTemp[512];
get_user_authid(id, szSteamId, charsmax(szSteamId));
format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `cutite_date` = '%i' AND `cutite_primite` = `%i` WHERE `%s`.`steamid` = '%s';",DataBaseMainName, CutiteDate[id], CutitePrimite[id], DataBaseMainName, szSteamId);
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp);
}
public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
SQL_FreeHandle(Query);
return PLUGIN_HANDLED;
}
public client_putinserver(id) Load_MySql(id);
public client_disconnected(id) Save_MySql(id);
public Event_DeathMsg()
{
new killer = read_data(1);
new victim = read_data(2);
new killer_weapon = get_user_weapon(killer);
new victim_weapon = get_user_weapon(victim);
if(!is_user_alive(killer) || is_user_hltv(killer) || is_user_bot(killer) && killer_weapon != ARMA) return;
else
{
++CutiteDate[killer];
}
if(victim == killer)
{
if(!is_user_alive(victim) || is_user_hltv(victim) || is_user_bot(victim) && victim_weapon != ARMA) return;
else
{
++CutitePrimite[killer];
}
}
}
public CheckData(id)
{
for(new i; i < MAX; i++)
{
if(is_user_connected(i))
Save_MySql(i);
}
new Data[1];
Data[0] = id;
new szTemp[512];
format(szTemp,charsmax(szTemp),"SELECT COUNT(*) FROM `%s` WHERE `cutite_date` >= %d",DataBaseMainName, CutiteDate[id]);
SQL_ThreadQuery(g_SqlTuple,"Sql_Rank",szTemp,Data,1);
return PLUGIN_HANDLED;
}
public Sql_Rank(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);
new count = 0;
count = SQL_ReadResult(Query,0);
if(count == 0) count = 1;
new iUser;
iUser = Data[0];
client_print(iUser, print_chat, "[KNIFE] You're rank is %i with %i knife kills", count, CutiteDate[iUser]);
return PLUGIN_HANDLED;
}