#include <amxmodx>
    #include <amxmisc>
    #include <sqlx>
 
    #define PLUGIN "New Plug-In"
    #define VERSION "1.0"
    #define AUTHOR "x"
 
 
    //regisztráció
    new bool:g_LoggedIn[33]
    new g_RegisterSelection[33]
    new g_szTempName[33][100]
    new g_szTempPassWord[33][100]
    new Handle:g_SqlTuple
    new bool:kerdezze[33] = true
 
    //Mysql csatlakozás
    new Host[] = "mysql host"
    new User[] = "mysql felhasznev"
    new Pass[] = "mysql jelszo"
    new Db[] = "mysql adatbazis neve"
 
    public plugin_init()
    {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /reg", "regiszraciofomenu")
    register_logevent("round_start", 2, "1=Round_Start")
    register_clcmd("FELHASZNALONEV", "cmdUsername")
    register_clcmd("JELSZO", "cmdPw")
    makeTuple()
    createTable()
    }
 
 
    public regiszraciofomenu(id)
    {
 
    new szTemp[192]
    formatex(szTemp, charsmax(szTemp), "\y[SG]\r ~\y Regisztrációs Menü^n\rStátusz:\d %s",g_LoggedIn[id] ? "Bejelentkezve":"Kijelentkezve" )
    new menuLoginCreate = menu_create(szTemp, "menuLoginCreateHandler")
 
    formatex(szTemp, charsmax(szTemp), "\w%s^n", g_LoggedIn[id] ? "Biztonsági mentés":"Nem regisztrálok")
    menu_additem(menuLoginCreate, szTemp, "0")
 
    formatex(szTemp, charsmax(szTemp), "\w%s", g_LoggedIn[id] ? "Kijelentkezés":"Bejelentkezés")
 
    menu_additem(menuLoginCreate, szTemp, "1")
    menu_additem(menuLoginCreate, "\yRegisztrA?ciAl", "2")
 
    menu_setprop(menuLoginCreate, MPROP_EXIT, MEXIT_ALL);
    menu_setprop(menuLoginCreate, MPROP_PERPAGE, 7);
    menu_display(id, menuLoginCreate, 0);
    }
 
    public menuLoginCreateHandler(id, menuLoginCreate, item)
    {	
    if(item == MENU_EXIT)
    {
    menu_cancel(id);
    return PLUGIN_HANDLED;
    }
    new data[6], iName[64], access, callback
    menu_item_getinfo(menuLoginCreate, item, access, data, 5, iName, 63, callback)
 
    new key = str_to_num(data)
 
    switch(key)
    {
    case 0:
    {
    if(g_LoggedIn[id])
    {
    updateTable(id)
    print_color(id, "!g[SG]!t ~!y Sikeresen elkészítetted a!g biztonsági!y mentést.")
    }
    else if(g_LoggedIn[id] == false)
    {
    kerdezomenu(id)
    }
    }
    case 1:
    {
    if(!g_LoggedIn[id])
    {
    g_RegisterSelection[id] = 2
    client_cmd(id, "messagemode FELHASZNALONEV")
    }
    else if(g_LoggedIn[id])
    {
    g_LoggedIn[id] = false
    print_color(id, "!g[SG]!t ~!y Sikeresen kijelentkeztél.")
    }
    }
 
    case 2:
    {
    if(!g_LoggedIn[id]) {
    g_RegisterSelection[id] = 1
    client_cmd(id, "messagemode FELHASZNALONEV")
    }
    else if(g_LoggedIn[id])
    {
    print_color(id, "!g[SG]!t ~!y Be vagy jelentkezve ezért nem regisztrálhatsz.")
    }
    }
    }
    return PLUGIN_CONTINUE
    }
 
    public cmdUsername(id)
    {
    if(g_LoggedIn[id])
    {
    return PLUGIN_HANDLED
    }
 
    read_args(g_szTempName[id], 99)
    remove_quotes(g_szTempName[id])
 
    if(contain(g_szTempName[id], " ") != -1 || strlen(g_szTempName[id]) < 3)
    {
    print_color(id, "!g[SG]!t ~!y Hibás felhasználónév, próbáld meg még egyszer.")
    client_cmd(id, "messagemode FELHASZNALONEV")
 
    return PLUGIN_HANDLED
    }
 
    if(g_RegisterSelection[id] == 2 || g_RegisterSelection[id] == 1)
    {
    new ErrorCode
    new Error[512]
    new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
 
    if(SqlConnection == Empty_Handle)
    {	
    set_fail_state(Error)
    }
 
    new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM reg_system_kes WHERE username='%s'", g_szTempName[id])
 
    if(!SQL_Execute(Query))
    {
    SQL_QueryError(Query, Error, 511)
    set_fail_state(Error)
    }
 
    new iRowsFound = SQL_NumRows(Query)
 
    switch(g_RegisterSelection[id])
    {
    case 1:
    {
    // No Resluts
    if(iRowsFound < 1)
    {
    client_cmd(id, "messagemode JELSZO")
    }
    // Username Found
    else
    {
    print_color(id, "![SG]!t ~!y Ez a felhasználónév már foglalt. Válassz másikat.")
    client_cmd(id, "messagemode FELHASZNALONEV")
    }
    }
    case 2:
    {
    // No Resluts
    if(iRowsFound < 1)
    {
    print_color(id, "!g[SG]!t ~!y Nincs ilyen felhasználónév az adatbázisban, próbáld meg egy másikkal.")
    client_cmd(id, "messagemode FELHASZNALONEV")
    }
    // Username Found
    else
    {
    client_cmd(id, "messagemode JELSZO")
    }
    }
    }
 
 
    SQL_FreeHandle(Query)
    SQL_FreeHandle(SqlConnection)
    }
 
    return PLUGIN_CONTINUE
    }
 
    public cmdPw(id)
    {
    // if user is already logged in stop him
    if(g_LoggedIn[id] == true)
    {
    return PLUGIN_HANDLED
    }
 
    read_args(g_szTempPassWord[id], 99)
    remove_quotes(g_szTempPassWord[id])
 
    if(contain(g_szTempPassWord[id], " ") != -1 || strlen(g_szTempPassWord[id]) < 3 || strlen(g_szTempName[id]) < 3)
    {
    print_color(id, "!g[SG]!t ~!y Érvénytelen jelszó. Válassz másikat.")
 
    client_cmd(id, "messagemode JELSZO")
 
    return PLUGIN_HANDLED
    }
 
    switch(g_RegisterSelection[id])
    {
    // Register new User
    case 1:
    {
    new ErrorCode
    new Error[512]
    new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
 
    if(SqlConnection == Empty_Handle)
    {	
    set_fail_state(Error)
    }
 
    new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO reg_system_kes VALUES('%s','%s','0','0', '0', '0', '0', '0', '0')", g_szTempName[id], g_szTempPassWord[id])
 
    if(!SQL_Execute(Query))
    {
    SQL_QueryError(Query, Error, 511)
    set_fail_state(Error)
    }	
    g_LoggedIn[id] = true
 
    print_color(id, "!g[SG]!t ~!y Sikeres regisztráció! - Nevedet, jelszavadat:!t NE FELEJTSD EL - NE ADD MEG SENKINEK!")
    print_color(id, "!g[SG]!t ~!y Felhasználó neved:!t %s", g_szTempName[id])
    print_color(id, "!g[SG]!t ~!y Jelszavad:!t %s",g_szTempPassWord[id])
 
    SQL_FreeHandle(Query)
    SQL_FreeHandle(SqlConnection)
    }
    // Login User
    case 2:
    {
    new ErrorCode
    new Error[512]
    new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
 
    if(SqlConnection == Empty_Handle)
    {	
    set_fail_state(Error)
    }
 
    new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM reg_system_kes WHERE username='%s'", g_szTempName[id])
 
    if(!SQL_Execute(Query))
    {
    SQL_QueryError(Query, Error, 511)
    set_fail_state(Error)
    }
 
    new szSqlPassword[100]
    SQL_ReadResult(Query, 1, szSqlPassword, 99)
 
 
    // if password is right
    if(equal(g_szTempPassWord[id], szSqlPassword))
    {
    // Kick Player who has logged in with same data
    new players[32], pnum, tempid
    get_players(players, pnum)
    for(new i; i<pnum; i++)
    {
    tempid = players[i]
    if(equal(g_szTempName[id], g_szTempName[tempid]) && id != tempid)
    {
    client_cmd(tempid, "disconnect")
    }
    }
    g_LoggedIn[id] = true
    print_color(id, "!g[SG]!t ~!y Szia!t %s!!y - Kellemes Idotöltést a szerveren!", g_szTempName[id])	
 
    }
    else
    {
    print_color(id, "!g[SG]!t ~!y Hibás jelszó, nézd meg hogy mindent helyesen írtál-e be.")
    client_cmd(id, "messagemode JELSZO")
    }
 
    SQL_FreeHandle(Query)
    SQL_FreeHandle(SqlConnection)
    }
    }
 
    return PLUGIN_CONTINUE
    }
 
    public updateTable(id)
    {
    // Save Data
    if(g_LoggedIn[id])
    {
    new szTemp[512]
    format(szTemp,charsmax(szTemp),"UPDATE `reg_system_kes` SET `arany` = '%i', `ezust` = '%i', `szint` = '%i', `kes` = '%i', `tor` = '%i', `lila` = '%i', `xp` = '%i' WHERE `reg_system_kes`.`username` = '%s';", g_szTempName[id])
 
    SQL_ThreadQuery(g_SqlTuple,"updateTableThread", szTemp)
    }
    }
 
    public updateTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
    {
    // lots of error checking
    if(FailState == TQUERY_CONNECT_FAILED)
    return set_fail_state("Could not connect to SQL database.")
    else if(FailState == TQUERY_QUERY_FAILED)
    return set_fail_state("Query failed.")
 
    if(Errcode)
    return log_amx("Error on query: %s",Error)
 
    return PLUGIN_CONTINUE
    }
 
 
    public updateTableStatsThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
    {
    // lots of error checking
    if(FailState == TQUERY_CONNECT_FAILED)
    return set_fail_state("Nem tudtam letrehozni az adatbazist.")
    else if(FailState == TQUERY_QUERY_FAILED)
    return set_fail_state("Te fasz, elrontottal valamit.")
 
    if(Errcode)
    return log_amx("Hibat dobtam: %s",Error)
 
    return PLUGIN_CONTINUE
    }
 
    public plugin_end()
    {
    SQL_FreeHandle(g_SqlTuple)
    }
 
    public makeTuple()
    {
 
    g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
    }
 
    public createTable()
    {
 
    SQL_ThreadQuery(g_SqlTuple,"createTableThread", "CREATE TABLE IF NOT EXISTS reg_system_kes (username varchar(32),password varchar(32), `arany` INT(255), `ezust` INT(255), `szint` INT(255), `kes` INT(11), `tor` INT(11), `lila` INT(11), `xp` INT(11) )")
    }
 
    public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
    {
    if(FailState == TQUERY_CONNECT_FAILED)
    return set_fail_state("Nem tudtam csatlakozni az adatbazishoz.")
    else if(FailState == TQUERY_QUERY_FAILED)
    return set_fail_state("Te fasz, elbasztal valamit.")
 
    if(Errcode)
    return log_amx("Hibat dobtam: %s",Error)
 
    return PLUGIN_CONTINUE
    }
 
    public kerdezomenu(id)
    {
    new menu = menu_create("\y[SG]\r ~\y Regisztrációs Menü^n\rVálassz:", "kerd_hand");
 
    menu_additem(menu, "\yNe kérdezze többet", "", 0); // case 0
    menu_additem(menu, "\wKövetkező körben is kérdezze meg", "", 0); // case 1
 
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
 
    menu_display(id, menu, 0);
 
    return PLUGIN_HANDLED;
    }
 
    public kerd_hand(id, menu, item)
    {
    if(item == MENU_EXIT)
    {
    menu_cancel(id);
    return PLUGIN_HANDLED;
    }
 
    new command[6], name[64], access, callback;
 
    menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
 
    switch(item)
    {
    case 0: {
    kerdezze[id] = false
 
 
 
    }
    case 1: {
    kerdezze[id] = true
 
    }
    }
 
    menu_destroy(menu);
 
    return PLUGIN_HANDLED;
    }
 
    public round_start()
    {
    new players[32], pnum, tempid
    get_players(players, pnum)
 
    for(new i; i<pnum; i++)
    {
    tempid = players[i]	
    if(!g_LoggedIn[tempid])
    {
    if(kerdezze[tempid] == false)
    {
    show_menu(tempid, 0, "^n", 1)
    }
    else if(kerdezze[tempid] == true)
    {
    regiszraciofomenu(tempid)
    }
    }
 
    }
    return PLUGIN_CONTINUE
    }
 
    public client_disconnect(id)
    {
    updateTable(id)
    g_LoggedIn[id] = false
    }
 
    public client_putinserver(id)
    {
    g_LoggedIn[id] = false
    set_task(3.0, "regiszraciofomenu", id)
 
    }
 
    stock print_color(const id, const input[], any:...)
    {
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
 
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!t", "^3")
    replace_all(msg, 190, "á", "A?")
    replace_all(msg, 190, "é", "A©")
    replace_all(msg, 190, "í", "A")
    replace_all(msg, 190, "ó", "Al")
    replace_all(msg, 190, "ö", "A¶")
    replace_all(msg, 190, "o", "L‘")
    replace_all(msg, 190, "ú", "As")
    replace_all(msg, 190, "ü", "AL")
    replace_all(msg, 190, "u", "L±")
    replace_all(msg, 190, "Á", "A")
    replace_all(msg, 190, "É", "A‰")
    replace_all(msg, 190, "Í", "AT")
    replace_all(msg, 190, "Ó", "A“")
    replace_all(msg, 190, "Ö", "A–")
    replace_all(msg, 190, "O", "L")
    replace_all(msg, 190, "Ú", "Aš")
    replace_all(msg, 190, "Ü", "As")
    replace_all(msg, 190, "U", "L°")
 
    if (id) players[0] = id; else get_players(players, count, "ch")
    {
    for (new i = 0; i < count; i++)
    {
    if (is_user_connected(players[i]))
    {
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
    write_byte(players[i])
    write_string(msg)
    message_end()
    }
    }
    }
    return PLUGIN_HANDLED
    }