26.12.2009, 05:00
(
Последний раз редактировалось TheChaoz; 08.08.2014 в 20:23.
Причина: [Tutorial] tag added
)
[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:
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:
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:
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:
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:
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:
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!
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
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];
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;
}
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;
}
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;
}
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;
}
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!