Autologin en Sqlite, Ayuda!
#1

Hola chicos estaba editando un fs de lorec_ que la verda apenas estoy iniciando en sql y bien quisiera saber como puedo add un script de autologin.

Esta parte crea la base de datos.

pawn Код:
public OnFilterScriptInit()
{
    print("\nLorencRegister System ( VERSION "#FILE_VERSION" )\n");
    Database = db_open("ServerDatabase.db");
    db_query(Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`)");
    return 1;
}

Y bien esta la parte donde debo de crear el autologin pero no tengo ni idea de como, intente hacer igual q y_ini, pero ni sirbio :/


en y_ini lo tengo asi pero lo logro igualarlo en sql ._., ayudenme para igualarlo en sql :/ pls



pawn Код:
public OnPlayerConnect(playerid)
{
    pLogged[playerid] = 0;
    #if defined AUTOLOGIN
        new tmpIP[16];
        GetPlayerIp(playerid,tmpIP,sizeof(tmpIP)); //Getting IP
    #endif
    if(fexist(PlayerPath(playerid))) {
        INI_ParseFile(PlayerPath(playerid), "UserDataLoad_%s", .bExtra = true, .extra = playerid); //Calling loading callback
        #if defined AUTOLOGIN
            if(strcmp(tmpIP,pIP[playerid],true) == 0) { //Checking if the IPs match
                pLogged[playerid] = 1;
                SetPlayerScore(playerid,pInfo[playerid][Score]);
                GivePlayerMoney(playerid,pInfo[playerid][Cash]);
                SendClientMessage(playerid,lime,"You've been auto-logged in. [IP match]");
                return 1;
            }
        #endif
        ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Please enter your password below.","Login","Leave");
    } else {
        ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Please register by entering a password below.","Register","Leave");
    }
    return 1;
}

pawn Код:
public OnPlayerConnect(playerid)
{
    new
        Query[ 150 ],
        DBResult: Result,
        name[ MAX_PLAYER_NAME ]
    ;


    GetPlayerName(playerid, name, sizeof(name));

    Bit1_Set(g_PlayerLogged, playerid, false);


    format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s'", DB_Escape(name));    
   
    Result = db_query(Database, Query);

    if(db_num_rows(Result))
    {

        format(Query, sizeof(Query), "{FFFFFF}Welcome "COL_BLUE"%s(%d){FFFFFF} to the server, you're registered\n\nPlease log in by inputting your password.", name, playerid);    
       
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Login", "Leave");
    }
    else
    {

        format(Query, sizeof(Query), "{FFFFFF}Welcome "COL_BLUE"%s(%d){FFFFFF} to the server, you're "COL_RED"not{FFFFFF} registered\n\nPlease log in by inputting your password.", name, playerid);

        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Register", "Leave");
    }
    db_free_result(Result);

    return 1;
}
Reply
#2

Bбsicamente lo que tienes que hacer es:
-Guardar su IP cuando se desconecta.
-Cuando se vuelva a conectar obtener su IP y buscar una coincidencia en la base de datos y que tengan el mismo nombre las cuentas.

Aunque yo no lo harнa, a veces las IPs se repiten, aunque sea pocas veces.
Reply
#3

haber si entendн algo asн seria.

pawn Код:
public OnPlayerConnect(playerid)
{
    new
        Query[ 256 ],
        DBResult: Result,
        name[ MAX_PLAYER_NAME ],
        ip[ 16 ]
    ;

    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerIp(playerid, ip, sizeof(ip));
    format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`, `CASH`, `ADMINLEVEL`) VALUES('%s','%s','%s', '0', '500', '0')", DB_Escape(name), DB_Escape(ip));
    Result = db_query(Database, Query);
    if(db_num_rows(Result))
    {

    }
    else
    {

    }
    db_free_result(Result);
    return 1;
}
P.D: Real mente requiero de este sistema de autologin ya que uso el modo de juego changemode asi que si no pongo esto a cada ratotendrian q hacer login & es molesto
Reply
#4

No no, sacas la IP y usas una condiciуn SQL parecida a esta: SELECT * FROM users WHERE ip='%s' AND name='%s' LIMIT 1

Como ves, necesita teners una columna llamada ip para almacenar la IP del usuario, la almacenas cuando se desconecta, o antes de hacer el cambio de game mode.

Luego cuando se conecta, o cuando carga el nuevo game mode haces la consulta que te puse mбs arriba, y te devolverб una fila con los datos del usuario, y asн de simple. Si tienes dudas, ve preguntando, tampoco te quiero hacer todo el cуdigo yo, jajajaja...
Reply
#5

oh ya asi

pawn Код:
public OnPlayerConnect(playerid)
{
    new Query[256],name[MAX_PLAYER_NAME],ip[32],DBResult: Result;
    GetPlayerIp(playerid, ip, sizeof(ip));
    GetPlayerName(playerid,name,sizeof(name));
    format(Query,sizeof(Query),"SELECT * FROM `USERS` WHERE `IP` = '%s' AND `NAME` = '%s LIMIT 1'", DB_Escape(ip), DB_Escape(name));
    Result = db_query(Database, Query);
    if(db_num_rows(Result))
    {
        format(Query, sizeof(Query), "{FFFFFF}Welcome "COL_BLUE"%s(%d){FFFFFF} to the server, you're registered\n\nPlease log in by inputting your password.", name, playerid);
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Login", "Leave");
    }
    else
    {
        format(Query, sizeof(Query), "{FFFFFF}Welcome "COL_BLUE"%s(%d){FFFFFF} to the server, you're "COL_RED"not{FFFFFF} registered\n\nPlease log in by inputting your password.", name, playerid);
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Register", "Leave");
    }
    db_free_result(Result);
    return 1;
}

Si guardo los dato cuando se desconecta el usuario, y no te preocupes no requiero del script solo nesecito entender esto
Reply
#6

La consulta estб bien hecha, ahora te falta hacer el auto-login en caso de devolver alguna fila (db_num_rows(Result) >= 1), imagнnate que justo puso la contraseсa, y ahora le das los datos. El sistema es el mismo, solo que no hace falta que escriba la contraseсa.

Y si no devuelve filas la consulta, le muestras el dialog para ingresar.
Reply
#7

algo asi?


pawn Код:
public OnPlayerConnect(playerid)
{
    new Query[256],name[MAX_PLAYER_NAME],ip[32],DBResult: Result;
    GetPlayerIp(playerid, ip, sizeof(ip));
    GetPlayerName(playerid,name,sizeof(name));
    format(Query,sizeof(Query),"SELECT * FROM `USERS` WHERE `IP` = '%s' AND `NAME` = '%s LIMIT 1'", DB_Escape(ip), DB_Escape(name));
    Result = db_query(Database, Query);
    if(db_num_rows(Result) >= 1)
    {
        new Field[ 20 ];
        db_get_field_assoc(Result, "SCORE", Field, 30);
        SetPlayerScore(playerid, strval(Field));
        db_get_field_assoc(Result, "CASH", Field, 30);
        GivePlayerMoney(playerid, strval(Field));
        db_get_field_assoc(Result, "ADMINLEVEL", Field, 30);
        Bit16_Set(g_AdminLevel, playerid, strval(Field));
        Bit1_Set(g_PlayerLogged, playerid, true);
        SendClientMessage(playerid, -1, "You have "COL_GREEN"successfully{FFFFFF} logged in! ");
    }
    else
    {
        format(Query, sizeof(Query), "{FFFFFF}Welcome "COL_BLUE"%s(%d){FFFFFF} to the server, you're "COL_RED"not{FFFFFF} registered\n\nPlease log in by inputting your password.", name, playerid);
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Register System", Query, "Register", "Leave");
    }
    db_free_result(Result);
    return 1;
}
Reply
#8

solo las variables de la consulta sql van en mayuscula, las del usuario van en minuscula! te ayudaria mas pero no manejo sqlite, solo mysql
Reply
#9

Ahн estб bien, deberнa funcionar, haz una prueba. Recuerda guardar la IP del usuario cuando se desconecta.
Reply
#10

Eso no funcionaria correctamente. Cada vez que se cambie de direcciуn IP deberia registrarse nuevamente el jugador. Lo que debes hacer es obtener la IP desde la base de datos y compararla con la que tiene el jugador actualmente. Si son iguales se logee automaticamente, de lo contrario deba ingresar a la cuenta (en el caso de que este registrado).

Por otro lado, la funciуn "DB_Escape" deberia ser usada solo en cadenas que sean manipuladas por los jugadores. En tu caso, la direcciуn IP no es directamente manipulada por ellos sinу por la funciуn nativa de SA-MP, "GetPlayerIp".
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)