Hola a todo Pawno Scripting!
Como se que muchos quieren crear un sistema de registro e ingreso por dialogs, y no saben como hacerlo, aqui les dejo mi guia de como hacerlo paso a paso.
Primero que todo, necesitaremos descargar el include "Dini" (de Dracoblue). Lo que este include permite hacer, es crear, guardar, editar, eliminar y leer archivos de configuracion (.ini).
Para descargar el include, haz click aqui.
Una vez descargado, deben copiar el include en su carpeta /pawno/include.
Echo todo esto, abriremos nuestro GameMode y comenzaremos con el script.
Primero que todo, daremos a identificar el include, por lo que en la parte superior, agregaremos:
Código:
#include <Dini>
Luego, identificaremos cada dialog con un numero que quieran.
Código:
#define Registro 0
#define Ingreso 1
Tambien, agregaremos un nuevo estado:
Código:
new Identificado[MAX_PLAYERS];
Una vez echo esto, en OnPlayerConnect, pondremos lo siguiente:
Código:
Identificado[playerid] = 0;
new nombre[MAX_PLAYER_NAME], archivo[256];
GetPlayerName(playerid, nombre, sizeof(nombre));
format(archivo, sizeof(archivo), "/Usuarios/%s.ini", nombre);
if (!dini_Exists(archivo))
{
ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_INPUT, "Registro", "Ingresa tu contrasñea en el siguiente campo:", "Continuar", "Cancelar");
}
else
{
ShowPlayerDialog(playerid, Ingreso, DIALOG_STYLE_INPUT, "Ingreso", "Ingresa tu contrasñea en el siguiente campo:", "Aceptar", "Cancelar");
}
Lo que esto hace es controlar si el usuario esta registrado y mandarlo al dialog de registro o al de ingreso.
Ahora, nos situaremos en el callback OnDialogResponse, y pondremos lo siguiente:
Código:
if (dialogid == registro)
{
new nombrejugador[MAX_PLAYER_NAME], archivo[256];
if (!strlen(inputtext)) return ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_INPUT, "Registro", "Ingresa tu contrasñea en el siguiente campo:", "Continuar", "Cancelar");
if (!response) return ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_INPUT, "Registro", "Ingresa tu contrasñea en el siguiente campo:", "Continuar", "Cancelar");
GetPlayerName(playerid, nombrejugador, sizeof(nombrejugador));
format(archivo, sizeof(archivo), "/Usuarios/%s.ini", nombrejugador);
dini_Create(archivo);
dini_Set(archivo, "Usuario", nombrejugador);
dini_Set(archivo, "Contraseña", inputtext);
ShowPlayerDialog(playerid, Ingreso, DIALOG_STYLE_INPUT, "Ingreso", "Ingresa tu contrasñea en el siguiente campo:", "Aceptar", "Cancelar");
}
Esta funcion, guarda los datos que se escriban en el dialog de registro. Si el dialog se cancela, vuelve a abrirse. Si al aceptar no hay nada escrito, vuelve a abrirse.
Bien, ahora solo nos queda el dialog de ingreso, por lo que a continuacion de este codigo, ponemos lo siguiente:
Código:
if (dialogid == Ingreso)
{
new nombrejugador[MAX_PLAYER_NAME], archivo[256], comprobante[256];
if (!strlen(inputtext)) return ShowPlayerDialog(playerid, Ingreso, DIALOG_STYLE_INPUT, "Ingreso", "Ingresa tu contrasñea en el siguiente campo:", "Aceptar", "Cancelar");
if (!response) return ShowPlayerDialog(playerid, Ingreso, DIALOG_STYLE_INPUT, "Ingreso", "Ingresa tu contrasñea en el siguiente campo:", "Aceptar", "Cancelar");
GetPlayerName(playerid, nombrejugador, sizeof(nombrejugador));
format(archivo, sizeof(archivo), "/Usuarios/%s.ini", nombrejugador);
format(comprobante, sizeof(comprobante), "%s", dini_Get(archivo, "Contraseña"));
if (!strcmp (inputtext, comprobante))
{
Identificado[playerid] = 1;
}
else
{
ShowPlayerDialog(playerid, Ingreso, DIALOG_STYLE_INPUT, "Ingreso", "Ingresa tu contrasñea en el siguiente campo:", "Aceptar", "Cancelar");
}
}
Igual que en la anterior ves, si la contraseña es incorrecta, no se escribe nada en el campo o se cancela, el cuadro vuelve a abrirse.
Ahora deben crear una carpeta llamada Usuarios en scriptfiles, para que se guarden los usuarios que se registren.
Ademas, podran utilizar la condicion if (Identificado[playerid] == 1), que hace que sea necesario haber ingresado.
Espero que el tutorial les haya servido. Cualquier duda o problema con el codigo, avisenme, que lo escribi todo a mano y no se si esta bien al 100%.
Creditos:Leonardo Parisca