Cуmo crear un sistema de registro con Dini -
MrDeath537 - 26.12.2009
[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!
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Miguel - 26.12.2009
No se por que pero este post me diу mucha risa, me suena a copiar y pegar :P. Explica mejor...
їQue es esto?
pawn Код:
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Zoutdaxv - 26.12.2009
Quote:
Originally Posted by SAWC™
No se por que pero este post me diу mucha risa, me suena a copiar y pegar :P. Explica mejor...
їQue es esto?
pawn Код:
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
|
hiciste lo mismo :P.
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
MrDeath537 - 27.12.2009
No, no fue copiar y pegar, hace ya bastante que aprendн a hacer los sistemas de registros...
Quote:
Originally Posted by SAWC™
No se por que pero este post me diу mucha risa, me suena a copiar y pegar :P. Explica mejor...
їQue es esto?
pawn Код:
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
|
Eso es para que se guarde en un archivo .Ini el nivel admin del player...
PD: Luego le agregarй explicaciones debajo de cada paso.
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
elvago - 29.12.2009
Quote:
Originally Posted by Infierno
Quote:
Originally Posted by SAWC™
No se por que pero este post me diу mucha risa, me suena a copiar y pegar :P. Explica mejor...
їQue es esto?
pawn Код:
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
|
hiciste lo mismo :P.
|
jajajajaja suerte que yo soy un simple lammer
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
pooooolo - 10.01.2010
No entiendo una cosa, tio podrias acerlo 1 poco mas completo?
esque v eras ponen /sesion [pass] la ponen Invalida
y No dice nada, Almenos podrias Poner "Contraseсa Invalida"
Si me Puedes ayudar te estare agradecido
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
MrDeath537 - 10.01.2010
Quote:
Originally Posted by pooooolo
No entiendo una cosa, tio podrias acerlo 1 poco mas completo?
esque v eras ponen /sesion [pass] la ponen Invalida
y No dice nada, Almenos podrias Poner "Contraseсa Invalida"
Si me Puedes ayudar te estare agradecido
|
pawn Код:
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.");
}
else
{
SendClientMessage(playerid, COLOR_VERDE, "Contraseсa invalida");
}
}
}
return 1;
}
Ahн estб
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
CristianTdj - 11.01.2010
Tampoco era tan difнcil que lo puieras tъ polooooo, siempre agradezco tutoriales y podrнais hacer lo mismo...
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Ashist - 19.01.2010
Hola, necesito ayuda, eh querido usar este metodo, pero cuando le tiro a compilar me tira un monton de errores.
No se si estoy haciendo bien, recien soy un novаto en esto de los servers (empeze modificando el lvdm) y en ese gm me da error la copilacion, ayuda.-
[img width=1024 height=576]/imageshack/img18/2773/asdzzc.jpg[/img]
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Chiri - 19.01.2010
te falta la funcion "SendPlayerFormattedText"
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Ashist - 19.01.2010
Quote:
Originally Posted by Chiri
te falta la funcion "SendPlayerFormattedText"
|
mira, hay esta ,pero mira lo que dice :S
[img width=1024 height=576]/imageshack/img442/9955/asd2b.jpg[/img]
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
John_Race - 19.01.2010
Use la funcion "SendClientMessage".
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Ashist - 19.01.2010
aja, y con las otras que sale onplayerdissconet y onplayercommand not implemented.
y cmdtext..
O es mejor que haga un gamemode aparte, al de las lvdm?
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
agusfn20 - 19.01.2010
Un poco mas de explicacion no vendria mal para los q no saben que hace cada funcion...
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Ashist - 20.01.2010
Quote:
Originally Posted by agusfn20
Un poco mas de explicacion no vendria mal para los q no saben que hace cada funcion...
|
mm.. si necesito ayuda :/
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Facuarg - 23.01.2010
Muchas gracias por el tutorial, me sirviу y ya lo tengo incluнdo en mi gamemode aunque tengo una duda. їCуmo hago para exбctamente agregar una cantidad determinada de (ejemplo) puntos [score] sin usar el "++" que solo agrega uno?
Muchas gracias.
Facu.
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Nachotm12 - 23.01.2010
Hola llevo con el San andreas multiplayer 2 dнas y no se que hay que hacer para lo de la contraseсa invalida. їDonde hay que registrarse? Eso que pone hay es pura programaciуn ademбs de ser lio.
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
xenowort - 23.01.2010
Quote:
Originally Posted by MrDeath
No, no fue copiar y pegar, hace ya bastante que aprendн a hacer los sistemas de registros...
Quote:
Originally Posted by SAWC™
No se por que pero este post me diу mucha risa, me suena a copiar y pegar :P. Explica mejor...
їQue es esto?
pawn Code:
dini_IntSet(file, "Admin", PlayerInfo[playerid][pAdmin]);
|
Eso es para que se guarde en un archivo .Ini el nivel admin del player...
PD: Luego le agregarй explicaciones debajo de cada paso.
|
claro el nivel de admin,pero tiraria error no definistes el nivel de admin,ni los comandos.
esta mal,es mucho mas largo el tuto
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Ashist - 23.01.2010
Gracias , por no ayudar (N)
Re: [Tutorial] Cуmo crear un sistema de registro con Dini -
Chiri - 23.01.2010
mejor con esto en los defines de tu script
pawn Code:
new FALSE = false;
#define SendPlayerFormattedText(%0,%1,%2) \
do{new formatted[MAX_STRING]; format(formatted, sizeof(formatted), %2); SendClientMessage(%0, %1, formatted);}while(FALSE)