[Tutorial] Cуmo crear un sistema de registro con Dini
#1

[Tutorial] Cуmo crear un sistema de registro con Dini



Hola, les enseсarй cуmo crear un sistema de registro con Dini, este podrб guardar Asesinatos, Muertes, Logins, Puntaje, etc...


_________________________________________________


1) Primero necesitaremos los includes Dini 1.6, Dudb 2.4 y Dutils 1.10




2) Ahora vamos arriba de todo de nuestro script, donde estбn los includes y agregamos los includes Dini y Dudb:

pawn Код:
#include <a_samp>
#include <dini>
#include <dudb>

#pragma unused ret_mempcy
Explicaciуn: Los includes son los archivos que tienen las funciones que usaremos, la funcion ret_memcpy como no es usada ni en los includes ni en nuestro tutorial, le pusimos el #pragma para que no de una advertencia.




3) Ahora debajo de los includes agregamos esto:

pawn Код:
new IsLogged[MAX_PLAYERS];
new IsRegistered[MAX_PLAYERS];

enum pInfo
{
    pAdmin,
    pKills,
    pDeaths,
    pLogins
}

new PlayerInfo[MAX_PLAYERS][pInfo];
Explicaciуn:
El enum junto con el PlayerInfo funcionan como un contador de lo que especifican. Ej: PlayerInfo[killerid][pKills] ++;
Los IsLogged e IsRegistered son para hacer restricciones. Ej: if(IsLogged) ...





4) Ahora nos situaremos en OnPlayerConnect y agregaremos esto:
pawn Код:
public OnPlayerConnect(playerid)
{
    IsLogged[playerid] = 0;
    IsRegistered[playerid] = 0;

    new Nombre[MAX_PLAYERS];
    new file[MAX_PLAYERS];
    GetPlayerName(playerid, Nombre, sizeof(Nombre));
    format(file, sizeof(file), "%s.ini", Nombre);

    if(fexist(file)) { IsRegistered[playerid] = 1; }

    if(IsRegistered[playerid] == 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Cuenta sin registrar, por favor registrate: /Registrar [Contraseсa]");
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Cuenta registrada, por favor identificate: /Sesion [Contraseсa]");
    }
    return 1;
}
Explicaciуn:
Al principio indicamos que cuando el player se conecta, el no estб registrado ni logeado.
En lo siguiente especificamos que file es igual a NombreDelPlayer.ini para poder checkear si su cuenta existe.
Luego al final se checkea si el player estб registrado, luego envia el mensaje correspondiente.




5) Ahora nos situaremos en OnPlayerDisconnect y agregaremos esto:
pawn Код:
public OnPlayerDisconnect(playerid)
{
    new Nombre[MAX_PLAYERS];
    new file[MAX_PLAYERS];
    GetPlayerName(playerid, Nombre, sizeof(Nombre));
    format(file, sizeof(file), "%s.ini", Nombre);

    if(IsLogged[playerid] == 1)
    {
    dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
    dini_IntSet(file, "Kills", PlayerInfo[playerid][pKills]);
    dini_IntSet(file, "Deaths", PlayerInfo[playerid][pDeaths]);
    dini_IntSet(file, "Logins", PlayerInfo[playerid][pLogins]);
    }
    return 1;
}
Explicaciуn:
Al principio especificamos que file es igual a NombreDelJugador.Ini
Luego checkea si esta logeado, si lo estб guarda los datos del jugador en el archivo Ini
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]); (modifica el archivo "file", cambiando el valor de "admin" por el nivel del player)




6) Ahora iremos a OnPlayerDeath y agregaremos esto:
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[playerid][pDeaths] ++;
    PlayerInfo[killerid][pKills] ++;
    return 1;
}
Explicaciуn:
Esto obviamente suma 1 asesinato al asesino y suma 1 muerte a la victima.




7) Ahora iremos a OnPlayerCommandText y crearemos los comandos de registro y de login:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256];
    new idx;
    cmd = strtok(cmdtext, idx);

    if(strcmp(cmd, "/Registrar", true) == 0)
    {
        new tmp[256];
        new Nombre[MAX_PLAYERS];
        new String[100];
        new file[MAX_PLAYERS];
        GetPlayerName(playerid, Nombre, sizeof(Nombre));
        tmp = strtok(cmdtext, idx);
        format(file, sizeof(file), "%s.ini", Nombre);

        if(!strlen(tmp))
        {
            SendClientMessage(playerid, 0xFFFFFFFF, "Use: /Registrar [Contraseсa]");
            return 1;
        }

        if(!fexist(file))
        {
            dini_Create(file);
            dini_IntSet(file, "Password", udb_hash(tmp));
            dini_IntSet(file, "Admin", 0);
            dini_IntSet(file, "Kills", 0);
            dini_IntSet(file, "Deaths", 0);
            dini_IntSet(file, "Logins", 1);
            PlayerInfo[playerid][pAdmin] = dini_Int(file, "Admin");
            PlayerInfo[playerid][pKills] = dini_Int(file, "Kills");
            PlayerInfo[playerid][pDeaths] = dini_Int(file, "Deaths");
            PlayerInfo[playerid][pLogins] = dini_Int(file, "Logins");
            format(String, sizeof(file), "Cuenta creada exitosamente! %s - ''%s''", Nombre, tmp);
            SendClientMessage(playerid, 0xFFFFFFFF, String);
            SendClientMessage(playerid, 0xFFFFFFFF, "Has sido identificado automбticamente");
            IsLogged[playerid] = 1;
        }
        else
        {
            SendClientMessage(playerid, 0xFFFFFFFF, "Error: La cuenta ya estб registrada");
        }

        return 1;
    }


    if(strcmp(cmd, "/Sesion", true) == 0)
    {
        new tmp[256];
        new tmp2[256];
        new Nombre[MAX_PLAYERS];
        new file[MAX_PLAYERS];
        GetPlayerName(playerid, Nombre, sizeof(Nombre));
        format(file, sizeof(file), "%s.ini", Nombre);
        tmp = strtok(cmdtext, idx);
        tmp2 = dini_Get(file, "Password");

        if(!strlen(tmp))
        {
            SendClientMessage(playerid, 0xFFFFFFFF, "Use: /Sesion [Contraseсa]");
            return 1;
        }

        if(IsLogged[playerid] == 1)
        {
            SendClientMessage(playerid, COLOR_VERDE, "Tъ ya estбs identificado!");
            return 1;
        }
        else
        {
        if(fexist(file))
        {
            if(udb_hash(tmp) == strval(tmp2))
            {
                IsLogged[playerid] = 1;
                PlayerInfo[playerid][pAdmin] = dini_Int(file, "Admin");
                PlayerInfo[playerid][pKills] = dini_Int(file, "Kills");
                PlayerInfo[playerid][pDeaths] = dini_Int(file, "Deaths");
                PlayerInfo[playerid][pLogins] = dini_Int(file, "Logins");
                PlayerInfo[playerid][pLogins] ++;
                SendClientMessage(playerid, COLOR_VERDE, "Te has identificado exitosamente.");
            }
        }
        }
        return 1;
    }


    if (strcmp("/Cuenta", cmdtext, true, 10) == 0)
    {
        new Nombre[MAX_PLAYERS];
        new String[100];
        GetPlayerName(playerid, Nombre, sizeof(Nombre));

        format(String, sizeof(String), "%s Estadisticas:", Nombre);
        SendClientMessage(playerid, 0xFFFFFFFF, String);
        format(String, sizeof(String), "Asesinatos: %d - Muertes: %d - Radio: %0.2f - Logins: %d", PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], Float:PlayerInfo[playerid][pKills]/PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pLogins]);
        SendClientMessage(playerid, 0xFFFFFFFF, String);
        return 1;
    }

    return 0;
}
Explicaciуn:
Esos son los comandos, el registro crea un archivo Ini, donde adentro asigna los valores Deaths, Kills, Admin, Logins y Contraseсa.
El login checkea si la contraseсa indicada es igual a la de la cuenta, de ser correcto, hace que los datos del player (PlayerInfo[Playerid][Dato]) sean iguales a los del archivo ini.
Y el comando de cuenta, muestra las estadнsticas.




8 ) Explicaciуn:
Las cuentas que se registren se guardarбn en "scriptfiles" y de nombre tendrбn: NickDelJugador.Ini
Los comando que creamos son /Registrar /Sesion /Cuenta

Bueno este fuй mi primer post, cualquier duda me dicen!
Reply


Messages In This Thread
Cуmo crear un sistema de registro con Dini - by MrDeath537 - 26.12.2009, 05:00
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Miguel - 26.12.2009, 05:40
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Zoutdaxv - 26.12.2009, 07:46
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 27.12.2009, 17:13
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by elvago - 29.12.2009, 02:48
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by pooooolo - 10.01.2010, 13:35
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 10.01.2010, 20:09
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by CristianTdj - 11.01.2010, 15:30
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Ashist - 19.01.2010, 18:45
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Chiri - 19.01.2010, 18:58
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Ashist - 19.01.2010, 20:10
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by John_Race - 19.01.2010, 20:23
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Ashist - 19.01.2010, 20:30
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by agusfn20 - 19.01.2010, 20:52
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Ashist - 20.01.2010, 03:58
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Facuarg - 23.01.2010, 06:24
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Nachotm12 - 23.01.2010, 12:56
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by xenowort - 23.01.2010, 13:52
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Ashist - 23.01.2010, 15:23
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Chiri - 23.01.2010, 17:04
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by angel-laam - 23.01.2010, 20:31
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 25.01.2010, 08:44
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Zoutdaxv - 25.01.2010, 22:22
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 26.01.2010, 10:11
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by Brayan3110 - 28.01.2010, 17:51
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by CristianTdj - 28.02.2010, 12:12
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by CristianTdj - 28.02.2010, 12:50
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 28.02.2010, 16:51
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by CristianTdj - 01.03.2010, 00:55
Re: [Tutorial] Cуmo crear un sistema de registro con Dini - by MrDeath537 - 01.03.2010, 11:09

Forum Jump:


Users browsing this thread: 1 Guest(s)