#include <amxmodx>
#include <amxmisc>
#include <dhudmessage>
#include <cstrike>
#include <colorchat>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <xs>
#include <sqlx>
 
new Szint[33], Kulcs[33], name[32][32];
new bool:Belepve[33], bool:Beirtjelszot[33], bool:Beirtjelszot1[33], bool:Beirtfelhasznalot[33], bool:Beirtfelhasznalot1[33], Regisztralt[33], Felhasznalonev[33][100], Jelszo[33][100], regJelszo[33][100], regFh[33][100];
 
new const REGMENU[][][] = { { "\w[Státusz]: \dNem Regisztrált", "\w[Státusz]: \dKijelentkezve" } };
 
new const SQLINFO[][] = { "", "", "", "" };
 
new Handle:g_SqlTuple;
 
public plugin_init() 
{
register_impulse(201, "Ellenorzes")
 
register_clcmd("Reg_Felhasznalonev", "regisztralas_felh");
register_clcmd("Reg_Jelszo", "regisztralas_jelszo");
register_clcmd("Log_Felhasznalonev", "bejelentkezes_felh");
register_clcmd("Log_Jelszo", "bejelentkezes_jelszo");
}
 
public Ellenorzes(id)
{
    if(Belepve[id] == false)
    {
    Menu_Fo(id);
    }
    else
    {
    Szint[id] ++
        Kulcs[id] ++
    }
}
 
public Menu_Fo(id) 
{
    new String[121];
    formatex(String, charsmax(String), "\r- \dRegisztrációs rendszer^n%s", REGMENU[0][Regisztralt[id]]);
    new menu = menu_create(String, "Menu_Fo_h");
    
    formatex(String, charsmax(String), "Regisztáció^n");
    menu_additem(menu, String, "2",0);
    formatex(String, charsmax(String), "Bejelentkezés");
    menu_additem(menu, String, "1",0);
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}
 
public Menu_Fo_h(id, menu, item)
{
       if(item == MENU_EXIT)
       {
       menu_destroy(menu);
       return;
       }
 
       new data[9], szName[64];
       new access, callback;
       menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
       new key = str_to_num(data);
 
       switch(key) 
       {
      case 1: Menu_Bejelentkezes(id);
      case 2: Menu_Regisztracio(id);
       }
}
 
public Menu_Regisztracio(id) 
{
    new String[121], Nev[32];
    get_user_name(id, Nev, 31);
    formatex(String, charsmax(String), "\r- \dRegisztráció^n%s", REGMENU[0][Regisztralt[id]]);
    new menu = menu_create(String, "Menu_Regisztracio_h");
    
    if(Regisztralt[id] == 0)
    {
    formatex(String, charsmax(String), "\wFelhasználónév: \r%s^n", regFh[id]);
    menu_additem(menu, String, "1",0);
    formatex(String, charsmax(String), "\wJelszó: \r%s^n", regJelszo[id]);
    menu_additem(menu, String, "2",0);
    }
    else
    {
    formatex(String, charsmax(String), "\rNév: \d%s^n\wTe már regisztráltál a szerverre.", Nev, regFh[id]);
    menu_additem(menu, String, "",0);
    }
    
    if(Beirtfelhasznalot[id] == true && Beirtjelszot[id] == true)
    {
    formatex(String, charsmax(String), "\yRegisztráció");
    menu_additem(menu, String, "3",0);
    }
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}
 
public Menu_Regisztracio_h(id, menu, item)
{
 
       if(item == MENU_EXIT)
       {
       menu_destroy(menu);
       return;
       }
 
       new data[9], szName[64];
       new access, callback;
       menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
       new key = str_to_num(data);
 
       switch(key) 
       {
 
       case 1: client_cmd(id, "messagemode Reg_Felhasznalonev");
       case 2: client_cmd(id, "messagemode Reg_Jelszo");
       case 3: 
       {
       Regisztralt[id] = 1;
       ColorChat(id, GREEN, "[Reg.] ^1Sikeresen regisztráltál a szerverre.");
       SQL_Update_Reg(id);
       }
 
       }
}
 
public Menu_Bejelentkezes(id) 
{
    new String[121];
    formatex(String, charsmax(String), "\r- \dBejelentkezés^n%s", REGMENU[0][Regisztralt[id]]);
    new menu = menu_create(String, "Menu_Bejelentkezes_h");
    
    formatex(String, charsmax(String), "Felhasználónév: \r%s^n", Felhasznalonev[id]);
    menu_additem(menu, String, "1",0);
    formatex(String, charsmax(String), "Jelszó: \r%s^n", Jelszo[id]);
    menu_additem(menu, String, "2",0);
    
    formatex(String, charsmax(String), "\yBejelentkezés^n");
    menu_additem(menu, String, "3",0);
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}
 
public Menu_Bejelentkezes_h(id, menu, item)
{
        if(item == MENU_EXIT)
        {
        menu_destroy(menu);
        return;
        }
 
        new data[9], szName[64], Nev[32];
        get_user_name(id, Nev, 31);
        new access, callback;
        menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
        new key = str_to_num(data);
 
        switch(key) 
    {
        case 1: client_cmd(id, "messagemode Log_Felhasznalonev");
        case 2: client_cmd(id, "messagemode Log_Jelszo");
        case 3:
                {
                 if(equali(Jelszo[id], regJelszo[id]) && (equali(Felhasznalonev[id], regFh[id])))
             {
                         Belepve[id] = true;
                         ColorChat(id, GREEN, "[Információ] ^1Üdv újra itt ^4%s ^1!", Nev);
                 }
             else ColorChat(id, GREEN, "[Információ] ^1Hibás Felhasználónév vagy Jelszó.");
                }
    }
}
 
public regisztralas_felh(id)
{
    new adat[32];
    new hosszusag = strlen(adat);
    read_args(adat, charsmax(adat));
    remove_quotes(adat);
 
    if(hosszusag >= 5) 
    {
        regFh[id] = adat;
        Beirtfelhasznalot[id] = true;
        Menu_Regisztracio(id);
    }
    else 
    {
        regFh[id] = adat;
        Beirtfelhasznalot[id] = true;
        Menu_Regisztracio(id);
    }
    return PLUGIN_CONTINUE;
}
 
public regisztralas_jelszo(id)
{
    new adat[32];
    new hosszusag = strlen(adat);
    read_args(adat, charsmax(adat));
    remove_quotes(adat);
 
    if(hosszusag >= 5) {
        regJelszo[id] = adat;
        Beirtjelszot[id] = true;
        Menu_Regisztracio(id);
    }
    else 
    {
        regJelszo[id] = adat;
        Beirtjelszot[id] = true;
        Menu_Regisztracio(id);
    }
    return PLUGIN_CONTINUE;
}
 
public bejelentkezes_jelszo(id)
{
    new adat[32];
    new hosszusag = strlen(adat);
    read_args(adat, charsmax(adat));
    remove_quotes(adat);
 
    if(hosszusag >= 5) 
    {
        Jelszo[id] = adat;
        Beirtjelszot1[id] = true;
        Menu_Bejelentkezes(id);
    }
    else 
    {
        Jelszo[id] = adat;
        Beirtjelszot1[id] = true;
        Menu_Bejelentkezes(id);
    }
    return PLUGIN_CONTINUE;
}
 
public bejelentkezes_felh(id)
{
    new adat[32];
    new hosszusag = strlen(adat);
    read_args(adat, charsmax(adat));
    remove_quotes(adat);
 
    if(hosszusag >= 5) 
    {
        Felhasznalonev[id] = adat;
        Beirtfelhasznalot1[id] = true;
        Menu_Bejelentkezes(id);
    }
    else 
    {
        Felhasznalonev[id] = adat;
        Beirtfelhasznalot1[id] = true;
        Menu_Bejelentkezes(id);
    }
    return PLUGIN_CONTINUE;
}
 
public client_disconnect(id)
{
 
if(!is_user_bot(id)) Update(id);
 
Regisztralt[id] = 0;
 
Belepve[id] = false;
Beirtjelszot[id] = false;
Beirtjelszot1[id] = false;
Beirtfelhasznalot[id] = false;
Beirtfelhasznalot1[id] = false;
 
regFh[id][0] = EOS;
regJelszo[id][0] = EOS;
Felhasznalonev[id][0] = EOS;
Jelszo[id][0] = EOS;
 
Kulcs[id] = 0
Szint[id] = 0
 
copy(name[id], charsmax(name[]), "");
}
 
public client_putinserver(id)
{
 
if(!is_user_bot(id)) 
{
    get_user_name(id, name[id], charsmax(name));
    Load(id);
}
 
Felhasznalonev[id] = "";
Jelszo[id] = "";
 
}
 
public plugin_cfg()
{
 
g_SqlTuple = SQL_MakeDbTuple(SQLINFO[0], SQLINFO[1], SQLINFO[2], SQLINFO[3]);
 
static Query[10048];
new Len;
 
Len += formatex(Query[Len], charsmax(Query), "CREATE TABLE IF NOT EXISTS `ujgu`");
Len += formatex(Query[Len], charsmax(Query)-Len, "(`Nev` varchar(32) NOT NULL, ");
Len += formatex(Query[Len], charsmax(Query)-Len, "`Felhasznalonev` varchar(32) NOT NULL,");
Len += formatex(Query[Len], charsmax(Query)-Len, "`Jelszo` varchar(32) NOT NULL,");
 
Len += formatex(Query[Len], charsmax(Query)-Len, "`Kulcs` int(11) NOT NULL,");
Len += formatex(Query[Len], charsmax(Query)-Len, "`Szint` int(11) NOT NULL,");
 
SQL_ThreadQuery(g_SqlTuple, "createTableThread", Query);
}
 
public Load(id)
{
 
static Query[10048];
new Data[1];
Data[0] = id;
 
formatex(Query, charsmax(Query), "SELECT * FROM `ujgu` WHERE Nev = ^"%s^";", name[id]);
SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1);
 
}
 
public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) 
{
 
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) 
{
log_amx("%s", Error);
return;
}
else 
{
 
new id = Data[0];
 
if(SQL_NumRows(Query) > 0) 
{
 
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Felhasznalonev"), regFh[id], charsmax(regFh[]));
SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Jelszo"), regJelszo[id], charsmax(regJelszo[]));
 
Kulcs[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Kulcs"));
Szint[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Szint"));
}
else Save(id);
}
 
}
 
public Save(id)
{
 
static Query[256];
 
formatex(Query, charsmax(Query), "INSERT INTO `ujgu` (`Nev`) VALUES (^"%s^");", name[id]);
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
 
}
 
public SQL_Update_Reg(id)
{
 
static Query[10048];
new Len;
 
Len += formatex(Query[Len], charsmax(Query), "UPDATE `ujgu` SET Felhasznalonev = ^"%s^", ", regFh[id]);
Len += formatex(Query[Len], charsmax(Query)-Len, "Jelszo = ^"%s^", ", regJelszo[id]);
Len += formatex(Query[Len], charsmax(Query)-Len, "Regisztralt = ^"%i^" WHERE Nev = ^"%s^";", Regisztralt[id], name[id]);
 
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
 
public Update(id)
{
 
static Query[10048];
new Len;
 
Len += formatex(Query[Len], charsmax(Query), "UPDATE `ujgu` SET Kulcs = ^"%i^", ",Kulcs[id]);
Len += formatex(Query[Len], charsmax(Query)-Len, "Szint = ^"%i^", ", Szint[id]);
 
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", Query);
}
 
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) 
{
if(FailState == TQUERY_CONNECT_FAILED) set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error");
 
if(Errcode)
log_amx("[HIBA*] HIBAT DOBTAM: %s",Error);
}
 
public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime) 
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", Error);
return;
}
 
}