#include <amxmodx>
#include <sqlx>
#include <csgo_register>
#define LOAD_TASK 100000
#define UPDATE_TASK 100001
#define TABLE_TASK 100002
//SQL Adatok
new const SQL_INFO[4][32] = {
"localhost",
"username",
"password",
"database"
}
new Handle:g_SqlTuple
//Birtokolt cuccok
new Skinjei[33][162], Ladak[33][13], Kulcsok[33][14]
new StatTrakSkinjei[33][162], StatTrakSzamlalo[33][162], StatTrakTool[33]
//Kiválasztott skinek
enum _:WEAPONS { AK47, AWP, Deagle, FAMAS, Galil, Glock, Knife, M4A1, M4A4, Scout, USP }
new chosen[33][WEAPONS]
//Pénze
new Float:Dollarja[33]
//M4A1 vagy M4A4
new bool:Is_M4A4[33]
//Felhasználónév mentéshez
new username[33][64]
public plugin_init() {
register_plugin("CS:GO Database System", "1.0", "Toretto")
}
/*========== NATIVOK ==========*/
public plugin_natives()
{
register_native("get_user_dollar", "native_get_user_dollar", 1)
register_native("set_user_dollar", "native_set_user_dollar", 1)
register_native("get_user_cases", "native_get_user_cases", 1)
register_native("set_user_cases", "native_set_user_cases", 1)
register_native("get_user_keys", "native_get_user_keys", 1)
register_native("set_user_keys", "native_set_user_keys", 1)
register_native("get_user_skins", "native_get_user_skins", 1)
register_native("set_user_skins", "native_set_user_skins", 1)
register_native("get_stat_trak_tool", "native_get_stat_trak_tool", 1)
register_native("set_stat_trak_tool", "native_set_stat_trak_tool", 1)
register_native("get_stat_trak_kills", "native_get_stat_trak_kills", 1)
register_native("set_stat_trak_kills", "native_set_stat_trak_kills", 1)
register_native("get_chosen", "native_get_chosen", 1)
register_native("set_chosen", "native_set_chosen", 1)
register_native("is_m4a4", "native_is_m4a4", 1)
register_native("set_m4a4", "native_set_m4a4", 1)
register_native("start_loading_data", "native_start_loading_data", 1)
register_native("SQL_Update", "native_SQL_Update", 1)
}
public Float:native_get_user_dollar(id)
{
return Dollarja[id]
}
public native_set_user_dollar(id, Float:Amount)
{
Dollarja[id] = Amount
}
public native_get_user_cases(id, CaseID)
{
return Ladak[id][CaseID]
}
public native_set_user_cases(id, CaseID, Amount)
{
Ladak[id][CaseID] = Amount
}
public native_get_user_keys(id, KeyID)
{
return Kulcsok[id][KeyID]
}
public native_set_user_keys(id, KeyID, Amount)
{
Kulcsok[id][KeyID] = Amount
}
public native_get_user_skins(id, SkinID, Is_StatTrak)
{
switch(Is_StatTrak)
{
case 0: return Skinjei[id][SkinID]
case 1: return StatTrakSkinjei[id][SkinID]
}
return 0
}
public native_set_user_skins(id, SkinID, Is_StatTrak, Amount)
{
switch(Is_StatTrak)
{
case 0: Skinjei[id][SkinID] = Amount
case 1: StatTrakSkinjei[id][SkinID] = Amount
}
return 0
}
public native_get_stat_trak_tool(id)
{
return StatTrakTool[id]
}
public native_set_stat_trak_tool(id, Amount)
{
StatTrakTool[id] = Amount
}
public native_get_stat_trak_kills(id, SkinID)
{
return StatTrakSzamlalo[id][SkinID]
}
public native_set_stat_trak_kills(id, SkinID, Amount)
{
StatTrakSzamlalo[id][SkinID] = Amount
}
public native_get_chosen(id, WeaponID)
{
return chosen[id][WeaponID]
}
public native_set_chosen(id, WeaponID, Chosen)
{
chosen[id][WeaponID] = Chosen
}
public bool:native_is_m4a4(id)
{
return Is_M4A4[id]
}
public native_set_m4a4(id, bool:Value)
{
Is_M4A4[id] = Value
}
public native_start_loading_data(id, const u_name[])
{
if(is_user_bot(id) || is_user_hltv(id))
return 0
copy(username[id], charsmax(username[]), u_name)
Load_Skins(id)
set_task(1.0, "Load_Other", LOAD_TASK+id)
return 1
}
public SQL_Update(id, Which)
{
switch(Which)
{
case 0: Update_Skins(id)
case 1: Update_Other(id+UPDATE_TASK)
case 2:{
Update_Skins(id)
set_task(1.0, "Update_Other", UPDATE_TASK+id)
}
}
}
/*=============================*/
/*========== TABLAK ==========*/
public client_putinserver(id)
{
arrayset(Skinjei[id], 0, 162)
arrayset(StatTrakSkinjei[id], 0, 162)
arrayset(StatTrakSzamlalo[id], 0, 162)
arrayset(Kulcsok[id], 0, 13)
arrayset(Ladak[id], 0, 14)
arrayset(chosen[id], 0, 11)
Is_M4A4[id] = false
Dollarja[id] = 0.0
StatTrakTool[id] = 0
}
public client_disconnect(id)
{
if((!is_user_bot(id) || !is_user_hltv(id)) && is_user_logged_in(id))
{
Update_Skins(id)
set_task(1.0, "Update_Other", UPDATE_TASK+id)
}
arrayset(Skinjei[id], 0, 162)
arrayset(StatTrakSkinjei[id], 0, 162)
arrayset(StatTrakSzamlalo[id], 0, 162)
arrayset(Kulcsok[id], 0, 13)
arrayset(Ladak[id], 0, 14)
arrayset(chosen[id], 0, 11)
Is_M4A4[id] = false
Dollarja[id] = 0.0
StatTrakTool[id] = 0
}
public plugin_cfg()
{
static Query[2048], Len
g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0], SQL_INFO[1], SQL_INFO[2], SQL_INFO[3])
Len += formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `GO_Skinek` (`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,")
Len += formatex(Query[Len], charsmax(Query)-Len, " `Username` VARCHAR(32) NOT NULL, `Skinek` TEXT, `StatTrak_Skinek` TEXT, `StatTrak_Olesek` TEXT,")
Len += formatex(Query[Len], charsmax(Query)-Len, " `Is_M4A4` INT(2), `Kivalasztva` TEXT)")
SQL_ThreadQuery(g_SqlTuple, "CreateSkinTable", Query)
set_task(1.0, "CFG_Table", TABLE_TASK)
}
public CFG_Table(TaskID)
{
static Query[2048], Len
Len += formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `GO_Egyebek` (`id` NOT NULL AUTO_INCREMENT PRIMARY KEY,")
Len += formatex(Query[Len], charsmax(Query)-Len, " `Username` VARCHAR(32) NOT NULL, `Ladak` TEXT, `Kulcsok` TEXT,")
Len += formatex(Query[Len], charsmax(Query)-Len, " `Dollar` FLOAT(11), `StatTrak_Tool` INT(11))")
SQL_ThreadQuery(g_SqlTuple, "CreateOtherTable", Query)
}
public CreateSkinTable(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED)
set_fail_state("Nem lehet csatlakozni az adatbazishoz [Skin tabla!!!]")
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error [Skin tabla!!!]")
if(Errcode)
log_amx("[Skin tabla!!!] Hiba: %s", Error)
}
public CreateOtherTable(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED)
set_fail_state("Nem lehet csatlakozni az adatbazishoz [Egyeb tabla!!!]")
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error [Egyeb tabla!!!]")
if(Errcode)
log_amx("[Egyeb tabla!!!] Hiba: %s", Error)
}
/*=============================*/
/*========== BETOLTES =========*/
public Load_Skins(id)
{
static Query[2048], Data[1]
Data[0] = id
formatex(Query, charsmax(Query), "SELECT * FROM `GO_Skinek` WHERE Username = '%s';", username[id])
SQL_ThreadQuery(g_SqlTuple, "QueryLoadSkins", Query, Data, 1)
}
public QueryLoadSkins(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Skin Betoltes] Hiba: %s", Error)
return
}
else
{
new id = Data[0]
if(SQL_NumRows(Query) > 0)
{
new Text[1024], Data[8]
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Skinek"), Text, charsmax(Text))
for(new i; i<162; i++)
{
strtok(Text, Data, charsmax(Data), Text, charsmax(Text), ',', 0)
Skinjei[id][i] = str_to_num(Data)
Data[0] = EOS
}
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "StatTrak_Skinek"), Text, charsmax(Text))
for(new i; i<162; i++)
{
strtok(Text, Data, charsmax(Data), Text, charsmax(Text), ',', 0)
StatTrakSkinjei[id][i] = str_to_num(Data)
Data[0] = EOS
}
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "StatTrak_Olesek"), Text, charsmax(Text))
for(new i; i<162; i++)
{
strtok(Text, Data, charsmax(Data), Text, charsmax(Text), ',', 0)
StatTrakSzamlalo[id][i] = str_to_num(Data)
Data[0] = EOS
}
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Kivalasztva"), Text, charsmax(Text))
for(new i; i<11; i++)
{
strtok(Text, Data, charsmax(Data), Text, charsmax(Text), ',', 0)
chosen[id][i] = str_to_num(Data)
Data[0] = EOS
}
new stg = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Is_M4A4"))
switch(stg)
{
case 0:Is_M4A4[id] = false
case 1:Is_M4A4[id] = true
}
}
else
Save_Skins(id)
}
}
public Load_Other(TaskID)
{
static Query[2048], Data[1]
Data[0] = TaskID-LOAD_TASK
formatex(Query, charsmax(Query), "SELECT * FROM `GO_Egyebek` WHERE Username = '%s';", username[TaskID-LOAD_TASK])
SQL_ThreadQuery(g_SqlTuple, "QueryLoadOther", Query, Data, 1)
}
public QueryLoadOther(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Skin Betoltes] Hiba: %s", Error)
return
}
else
{
new id = Data[0]
if(SQL_NumRows(Query) > 0)
{
new Text[512], Data[14][8]
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Kulcsok"), Text, charsmax(Text))
parse(Text, Data[0], 7, Data[1], 7, Data[2], 7, Data[3], 7, Data[4], 7, Data[5], 7, Data[6], 7, Data[7], 7, Data[8], 7, Data[9], 7, Data[10], 7,
Data[11], 7, Data[12], 7, Data[13], 7)
Text[0] = EOS
for(new i; i<14; i++)
{
Kulcsok[id][i] = str_to_num(Data[i])
Data[i][0] = EOS
}
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Ladak"), Text, charsmax(Text))
parse(Text, Data[0], 7, Data[1], 7, Data[2], 7, Data[3], 7, Data[4], 7, Data[5], 7, Data[6], 7, Data[7], 7, Data[8], 7, Data[9], 7, Data[10], 7,
Data[11], 7, Data[12], 7)
Text[0] = EOS
for(new i; i<13; i++)
{
Ladak[id][i] = str_to_num(Data[i])
Data[i][0] = EOS
}
StatTrakTool[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "StatTrak_Tool"))
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Dollar"), Dollarja[id])
}
else
Save_Other(id)
}
}
/*==============================*/
/*========== MENTES ===========*/
public Save_Skins(id)
{
static Query[2048], Len
new Text[1024]
Len += formatex(Query, charsmax(Query), "INSERT INTO `GO_Skinek`(`Username`, `Skinek`, `StatTrak_Skinek`, `StatTrak_Olesek`, `Is_M4A4`, `Kivalasztva`)")
for(new i; i< 162; i++)
{
if(i== 161)
add(Text, charsmax(Text), "0")
else
add(Text, charsmax(Text), "0,")
}
Len += formatex(Query[Len], charsmax(Query)-Len, " VALUES ('%s', '%s', '%s', '%s', 0,", username[id], Text, Text, Text)
Text[0] = EOS
for(new i; i< 11; i++)
{
if(i == 10)
add(Text, charsmax(Text), "0")
else
add(Text, charsmax(Text), "0,")
}
Len += formatex(Query[Len], charsmax(Query)-Len, " '%s');", Text)
SQL_ThreadQuery(g_SqlTuple, "QuerySaveSkins", Query)
}
public QuerySaveSkins(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Skinek Mentese] Hiba: %s", Error)
return
}
}
public Save_Other(id)
{
static Query[2048], Len
new Text[512]
Len += formatex(Query, charsmax(Query), "INSERT INTO `GO_Egyebek`(`Username`, `Ladak`, `Kulcsok`, `Dollar`, `StatTrak_Tool`)")
for(new i; i< 13; i++)
{
if(i== 12)
add(Text, charsmax(Text), "0")
else
add(Text, charsmax(Text), "0,")
}
Len += formatex(Query[Len], charsmax(Query)-Len, " VALUES ('%s', '%s',", username[id], Text)
Text[0] = EOS
for(new i; i< 14; i++)
{
if(i == 13)
add(Text, charsmax(Text), "0")
else
add(Text, charsmax(Text), "0,")
}
Len += formatex(Query[Len], charsmax(Query)-Len, " '%s', 0, 0);", Text)
SQL_ThreadQuery(g_SqlTuple, "QuerySaveOther", Query)
}
public QuerySaveOther(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Egyebek Mentese] Hiba: %s", Error)
return
}
}
/*=============================*/
/*======== FRISSITES ==========*/
public Update_Skins(id)
{
static Query[2048], Len
new Text[1024]
for(new i; i<162; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", Skinjei[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, Skinjei[id][i])
}
Len += formatex(Query, charsmax(Query), "UPDATE `GO_Skinek` SET `Skinek` = '%s',", Text)
Text[0] = EOS
for(new i; i<162; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", StatTrakSkinjei[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, StatTrakSkinjei[id][i])
}
Len += formatex(Query[Len], charsmax(Query)-Len, " `StatTrak_Skinek` = '%s',", Text)
Text[0] = EOS
for(new i; i<162; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", StatTrakSzamlalo[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, StatTrakSzamlalo[id][i])
}
new m4a4
switch(Is_M4A4[id])
{
case true: m4a4 = 1
case false: m4a4 = 0
}
Len += formatex(Query[Len], charsmax(Query)-Len, " `StatTrak_Olesek` = '%s', `Is_M4A4` = ^"%i^",", Text, m4a4)
Text[0] = EOS
for(new i; i<11; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", chosen[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, chosen[id][i])
}
Len += formatex(Query[Len], charsmax(Query)-Len, " `Kivalasztva` = '%s' WHERE `Username` = '%s';", Text, username[id])
SQL_ThreadQuery(g_SqlTuple, "QueryUpdateSkins", Query)
}
public QueryUpdateSkins(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Skinek Frissitese] Hiba: %s", Error)
return
}
}
public Update_Other(TaskID)
{
static Query[2048], Len
new Text[512]
new id = TaskID-UPDATE_TASK
for(new i; i<13; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", Ladak[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, Ladak[id][i])
}
Len += formatex(Query, charsmax(Query), "UPDATE `GO_Skinek` SET `Ladak` = '%s',", Text)
Text[0] = EOS
for(new i; i<14; i++)
{
if(i == 0)
format(Text, charsmax(Text), "%d,", Kulcsok[id][i])
else
format(Text, charsmax(Text), "%s%d,", Text, Kulcsok[id][i])
}
Len += formatex(Query[Len], charsmax(Query)-Len, " `Kulcsok` = '%s',", Text)
Text[0] = EOS
formatex(Text, charsmax(Text), "%.2f", Dollarja[id])
Len += formatex(Query[Len], charsmax(Query)-Len, " `Dollar` = '%s', `StatTrak_Tool` = ^"%i^"", Text, StatTrakTool[id])
Text[0] = EOS
Len += formatex(Query[Len], charsmax(Query)-Len, " WHERE `Username` = '%s';", username[id])
SQL_ThreadQuery(g_SqlTuple, "QueryUpdateOther", Query)
}
public QueryUpdateOther(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("[Egyebek Frissitese] Hiba: %s", Error)
return
}
}
/*=============================*/