[Aporte] Crear login y registo en dialogo YSI - INI

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
Trifasico
Aprendiz
Aprendiz
Mensajes: 132
Registrado: 21 Jun 2017 13:22
Ubicación: Venezuela
Reputación: 7

25 Sep 2018 13:59

Buenas comunidad de Pawn Script, hoy vengo a dar un aporte o mejor dicho a solucionar algunos errores que tiene un Sistema de Login y Registro en Dialogo ya aportado por el señor Tusso4 en el 2014, pero el cual tiene algunas fallas y lo esta reparando pero ya tiene 9 Meses que no se conecta, tantos años y no se a arreglado el sistema.

Muchos usuarios aún siguen usando como base ese sistema y se encuentran estos errores, debo decir que yo hace años tome ese sistema y logré solucionar esos problemas y hoy vengo a postearlo, para que futuros usuarios tengan una respuesta rápida.
Acá dejo el link del aporte original realizado en el 2014 por el señor Tusso4: viewtopic.php?f=40&t=1927

Para los experimentados con conocimientos en PAWN les dejo el código completo directamente para que usen:
El sistema guarda: Dinero, Vida, Chaleco, Contraseña, Skin, VitualWorld, Interior, Admin y la última posición.


A partir de este punto te enseño a como agregarlo a tu GM si eres nuevo en PAWN, una explicación como la del señor Tusso4

Primero debes definir el include YSI:
 Codigo Pawno:
1
2

#include <a_samp>
#include <YSI\y_ini>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Donde tengas tus defines, hay que colocar los diálogos que usaremos:
 Codigo Pawno:
1
2

#define DIALOGO_REGISTRO 1
#define DIALOGO_LOGIN 2
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
También definimos la ruta en la cual se van a guardar los datos de las cuentas:
 Codigo Pawno:
1

#define PATH "/Cuentas/%s.ini"
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Luego debemos crear los enum de las variables del jugador:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

enum kInfo
{
    kContra[64],
    kDinero,
    kAdmin,
    kSkin,
    kVirtualWorld,
    kInterior,
    Float:kVida,
    Float:kChaleco,
    Float:kPosX,
    Float:kPosY,
    Float:kPosZ,
}
new Info[MAX_PLAYERS][kInfo];
new PlayerConectado[MAX_PLAYERS]; // Esta variable la usaremos para saber si el jugador esta conectado.
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 16
Dentro del Callback "OnPlayerConnect" agregamos esta línea, le damos a la variable "PlayerConectado" el valor de 0.
 Codigo Pawno:
1

    PlayerConectado[playerid] = 0;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora abajo de su GM vamos a crear la función para que guarde los datos de su cuenta:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

stock GuardarCuenta(playerid)
{
        new path[123];
	UserPath(playerid, path);
        if(!PlayerConectado[playerid]) return 1; 
	new INI:File = INI_Open(path);
	INI_SetTag(File,"data");
	INI_WriteString(File,"Contrasena",Info[playerid][kContra]);
	INI_WriteInt(File,"Dinero",GetPlayerMoney(playerid));
        INI_WriteInt(File,"Admin",Info[playerid][kAdmin]);
	INI_WriteInt(File,"Skin",GetPlayerSkin(playerid));
        INI_WriteInt(File,"VirtualWorld",GetPlayerVirtualWorld(playerid));
	INI_WriteInt(File,"Interior",GetPlayerInterior(playerid));
	GetPlayerHealth(playerid,Info[playerid][kVida]);
	INI_WriteFloat(File,"Vida",Info[playerid][kVida]);
	GetPlayerArmour(playerid, Info[playerid][kChaleco]);
	INI_WriteFloat(File,"Chaleco",Info[playerid][kChaleco]);
	GetPlayerPos(playerid,Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
        INI_WriteFloat(File,"Pos_X",Info[playerid][kPosX]);
	INI_WriteFloat(File,"Pos_Y",Info[playerid][kPosY]);
	INI_WriteFloat(File,"Pos_Z",Info[playerid][kPosZ]);
 	INI_Close(File);
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 24
Abajo de toda su GM deben colocar lo siguiente para cuando el jugador se conecta se puedan cargar sus datos:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_String("Contrasena",Info[playerid][kContra], 64);
    INI_Int("Dinero",Info[playerid][kDinero]);
    INI_Int("Admin",Info[playerid][kAdmin]);
    INI_Int("Skin",Info[playerid][kSkin]);
    INI_Int("VirtualWorld",Info[playerid][kVirtualWorld]);
    INI_Int("Interior",Info[playerid][kInterior]);
    INI_Float("Vida",Info[playerid][kVida]);
    INI_Float("Chaleco",Info[playerid][kChaleco]);
    INI_Float("Pos_X",Info[playerid][kPosX]);
    INI_Float("Pos_Y",Info[playerid][kPosY]);
    INI_Float("Pos_Z",Info[playerid][kPosZ]);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 16
Ahora va la función cual extraerá la dirección exacta de tu cuenta o de la cuenta del jugador que entre para leer los datos:
 Codigo Pawno:
1
2
3
4
5
6
7

stock UserPath(playerid, array[], size = sizeof array)
{
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(array, size, PATH, pname);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Ahora añadiremos el Dialogo de registro y login para cuando el jugador entre al servidor le de alguna de las dos opciones. Para esto debemos ir al Callback "OnPlayerRequestClass" y añadir lo siguiente adentro:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13

 new path[123];
 UserPath(playerid, path);
 if(fexist(path))
    {
        TogglePlayerSpectating(playerid, 1);
        INI_ParseFile(path, "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD,"Cuenta registrada","Contraseña:","Ingresar","Salir");
    }
    else
    {
        TogglePlayerSpectating(playerid, 1);
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT,"Cuenta no registrada","Contraseña:","Siguiente","Salir");
    }
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 13
En el Callback de "OnDialogResponse" añadiremos lo siguiente, lo cual tiene el contenido de los diálogos:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

        new path[123];
        UserPath(playerid, path);
        if(dialogid==DIALOGO_REGISTRO)
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Fallo en el registro","Contraseña:","Sigueinte","Cancelar");
                new INI:File = INI_Open(path);
                INI_SetTag(File,"data");
                format(Info[playerid][kContra], 64, "%s", inputtext);
                INI_WriteString(File,"Contrasena",Info[playerid][kContra]);
                INI_WriteInt(File,"Dinero",10000);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Skin",250);
                INI_WriteInt(File,"VirtualWorld",0);
		INI_WriteInt(File,"Interior",0);
                INI_WriteFloat(File,"Vida",100);
		INI_WriteFloat(File,"Chaleco",0);
                INI_WriteFloat(File,"Pos_X",1715.1239);
                INI_WriteFloat(File,"Pos_Y",-1899.3381);
                INI_WriteFloat(File,"Pos_Z",13.5665);
                INI_Close(File);
		Info[playerid][kDinero]=10000;
                Info[playerid][kSkin]=250;
		Info[playerid][kVida]=100;
		Info[playerid][kChaleco]=0;
		Info[playerid][kPosX]=1715.1239;
		Info[playerid][kPosY]=-1899.3381;
		Info[playerid][kPosZ]=13.5665;
                SpawnPlayer(playerid);
                TogglePlayerSpectating(playerid, 0);
                GivePlayerMoney(playerid, Info[playerid][kDinero]);
                SetPlayerSkin(playerid, Info[playerid][kSkin]);
                SetPlayerPos(playerid, Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
                SendClientMessage(playerid, -1, "{00FF33}Felicidades, tu cuenta fue creada y guardada con éxito.");
            }
        }

        if(dialogid==DIALOGO_LOGIN)
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD, "Escribe tu contraseña","Contraseña:","Ingresar","Cancelar");
            	if(strcmp(inputtext, Info[playerid][kContra], false) == 0)
                {
                    TogglePlayerSpectating(playerid, 0);
                    INI_ParseFile(path, "LoadUser_%s", .bExtra = true, .extra = playerid);
                    SpawnPlayer(playerid);
                    GivePlayerMoney(playerid, Info[playerid][kDinero]);
                    SetPlayerArmour(playerid, Info[playerid][kChaleco]);
                    SetPlayerHealth(playerid, Info[playerid][kVida]);
                    SetPlayerVirtualWorld(playerid, Info[playerid][kVirtualWorld]);
   	            SetPlayerInterior(playerid, Info[playerid][kInterior]);
                    SetPlayerPos(playerid, Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD,"Contraseña Incorrecta","Contraseña:","Ingresar","Cancelar");
                }
                return 1;
            }
        }
  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 64
Dentro del Callback "OnPlayerSpawn" agregamos esta línea, le damos a la variable "PlayerConectado" el valor de 1.
 Codigo Pawno:
1
2

    PlayerConectado[playerid] = 1;
    SetPlayerSkin(playerid, Info[playerid][kSkin]);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Por último en el Callback "OnPlayerDisconnec" colocamos lo siguiente para cuando el jugador se desconecte guarde los datos:
 Codigo Pawno:
1

GuardarCuenta(playerid);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
OJO, para que se guarden los datos en la carpeta de su GM, deben crear una carpeta llamada "Cuentas" dentro de "scriptfiles", para que las cuentas registradas se puedan guardar.

Cambios:
- Sino se coloca ninguna letra a la hora de registrar la contraseña no se podrá seguir en el registro.
- Se soluciono el problema en el código original de Tusso4 que dejaba poner cualquier contraseña para entrar.
- Se soluciono el problema en el código original de Tusso4 que si se cancelaba el Registro o Login la cuenta perdia sus datos.
- Cuando te morías te daba la skin 0, ahora te da la skin que tenias antes de morir.
- Cuando se entra al servidor se mostraban las opciones "<<" ">>" y "spawn" Ya no se ven.
- Se agrego poder guardar la Skin, Vida y Chaleco del jugador.
- Se agrego poder guardar el VirtualWorld e Interior de donde esta el jugador.
- Se eliminaron los return de array en funciones para evitar posibles bugs.
Última edición por Trifasico el 04 Jun 2019 20:46, editado 7 veces en total.
Mis aportes:


Reglas de Pawn Script:
>> http://pawnscript.com/foro/rules <<

Mi Servidor:


Gotsh
Aprendiz
Aprendiz
Mensajes: 30
Registrado: 29 Mar 2018 06:43
Reputación: 0

25 Sep 2018 16:01

Trifasico escribió:
25 Sep 2018 13:59
Buenas comunidad de Pawn Script, hoy vengo a dar un aporte o mejor dicho a solucionar algunos errores que tiene un Sistema de Login y Registro en Dialogo ya aportado por el señor Tusso4 en el 2014, pero el cual tiene algunas fallas y lo esta reparando pero ya tiene 9 Meses que no se conecta, tantos años y no se a arreglado el sistema.

Muchos usuarios aún siguen usando como base ese sistema y se encuentran estos errores, debo decir que yo hace años tome ese sistema y logré solucionar esos problemas y hoy vengo a postearlo, para que futuros usuarios tengan una respuesta rápida.
Acá dejo el link del aporte original realizado en el 2014 por el señor Tusso4: viewtopic.php?f=40&t=1927

Para los experimentados con conocimientos en PAWN les dejo el código completo directamente para que usen:
El sistema guarda: Dinero, Vida, Chaleco, Contraseña, Skin, VitualWorld, Interior, Admin y la última posición.


A partir de este punto te enseño a como agregarlo a tu GM si eres nuevo en PAWN, una explicación como la del señor Tusso4

Primero debes definir el include YSI:
 Codigo Pawno:
1
2

#include <a_samp>
#include <YSI\y_ini>
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Donde tengas tus defines, hay que colocar los diálogos que usaremos:
 Codigo Pawno:
1
2

#define DIALOGO_REGISTRO 1
#define DIALOGO_LOGIN 2
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
También definimos la ruta en la cual se van a guardar los datos de las cuentas:
 Codigo Pawno:
1

#define PATH "/Cuentas/%s.ini"
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Luego debemos crear los enum de las variables del jugador:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

enum kInfo
{
    kContra[64],
    kDinero,
    kAdmin,
    kSkin,
    kVirtualWorld,
    kInterior,
    Float:kVida,
    Float:kChaleco,
    Float:kPosX,
    Float:kPosY,
    Float:kPosZ,
}
new Info[MAX_PLAYERS][kInfo];
new PlayerConectado[MAX_PLAYERS]; // Esta variable la usaremos para saber si el jugador esta conectado.
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 16
Dentro del Callback "OnPlayerConnect" agregamos esta línea, le damos a la variable "PlayerConectado" el valor de 0.
 Codigo Pawno:
1

    PlayerConectado[playerid] = 0;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Ahora abajo de su GM vamos a crear la función para que guarde los datos de su cuenta:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

stock GuardarCuenta(playerid)
{
        if(!PlayerConectado[playerid]) return 1; 
	new INI:File = INI_Open(UserPath(playerid));
	INI_SetTag(File,"data");
	INI_WriteString(File,"Contrasena",Info[playerid][kContra]);
	INI_WriteInt(File,"Dinero",Info[playerid][kDinero]);
        INI_WriteInt(File,"Admin",Info[playerid][kAdmin]);
	INI_WriteInt(File,"Skin",GetPlayerSkin(playerid));
        INI_WriteInt(File,"VirtualWorld",GetPlayerVirtualWorld(playerid));
	INI_WriteInt(File,"Interior",GetPlayerInterior(playerid));
	GetPlayerHealth(playerid,Info[playerid][kVida]);
	INI_WriteFloat(File,"Vida",Info[playerid][kVida]);
	GetPlayerArmour(playerid, Info[playerid][kChaleco]);
	INI_WriteFloat(File,"Chaleco",Info[playerid][kChaleco]);
	GetPlayerPos(playerid,Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
        INI_WriteFloat(File,"Pos_X",Info[playerid][kPosX]);
	INI_WriteFloat(File,"Pos_Y",Info[playerid][kPosY]);
	INI_WriteFloat(File,"Pos_Z",Info[playerid][kPosZ]);
 	INI_Close(File);
	return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 22
Abajo de toda su GM deben colocar lo siguiente para cuando el jugador se conecta se puedan cargar sus datos:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_String("Contrasena",Info[playerid][kContra], 64);
    INI_Int("Dinero",Info[playerid][kDinero]);
    INI_Int("Admin",Info[playerid][kAdmin]);
    INI_Int("Skin",Info[playerid][kSkin]);
    INI_Int("VirtualWorld",Info[playerid][kVirtualWorld]);
    INI_Int("Interior",Info[playerid][kInterior]);
    INI_Float("Vida",Info[playerid][kVida]);
    INI_Float("Chaleco",Info[playerid][kChaleco]);
    INI_Float("Pos_X",Info[playerid][kPosX]);
    INI_Float("Pos_Y",Info[playerid][kPosY]);
    INI_Float("Pos_Z",Info[playerid][kPosZ]);
    return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 16
Ahora va la función cual extraerá la dirección exacta de tu cuenta o de la cuenta del jugador que entre para leer los datos:
 Codigo Pawno:
1
2
3
4
5
6
7

stock UserPath(playerid)
{
    new string[128],pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(string,sizeof(string),PATH,pname);
    return string;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Ahora añadiremos el Dialogo de registro y login para cuando el jugador entre al servidor le de alguna de las dos opciones. Para esto debemos ir al Callback "OnPlayerRequestClass" y añadir lo siguiente adentro:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11

 if(fexist(UserPath(playerid)))
    {
        TogglePlayerSpectating(playerid, 1);
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD,"Cuenta registrada","Contraseña:","Ingresar","Salir");
    }
    else
    {
        TogglePlayerSpectating(playerid, 1);
        ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT,"Cuenta no registrada","Contraseña:","Siguiente","Salir");
    }
  Cantidad de llaves: Abiertas(2)-Cerradas(2) | Lineas Totales: 11
En el Callback de "OnDialogResponse" añadiremos lo siguiente, lo cual tiene el contenido de los diálogos:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

if(dialogid==DIALOGO_REGISTRO)
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOGO_REGISTRO, DIALOG_STYLE_INPUT, "Fallo en el registro","Contraseña:","Sigueinte","Cancelar");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"data");
                format(Info[playerid][kContra], 64, "%s", inputtext);
                INI_WriteString(File,"Contrasena",Info[playerid][kContra]);
                INI_WriteInt(File,"Dinero",10000);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Skin",250);
                INI_WriteInt(File,"VirtualWorld",0);
		INI_WriteInt(File,"Interior",0);
                INI_WriteFloat(File,"Vida",100);
		INI_WriteFloat(File,"Chaleco",0);
                INI_WriteFloat(File,"Pos_X",1715.1239);
                INI_WriteFloat(File,"Pos_Y",-1899.3381);
                INI_WriteFloat(File,"Pos_Z",13.5665);
                INI_Close(File);
		Info[playerid][kDinero]=10000;
                Info[playerid][kSkin]=250;
		Info[playerid][kVida]=100;
		Info[playerid][kChaleco]=0;
		Info[playerid][kPosX]=1715.1239;
		Info[playerid][kPosY]=-1899.3381;
		Info[playerid][kPosZ]=13.5665;
                SpawnPlayer(playerid);
                TogglePlayerSpectating(playerid, 0);
                GivePlayerMoney(playerid, Info[playerid][kDinero]);
                SetPlayerSkin(playerid, Info[playerid][kSkin]);
                SetPlayerPos(playerid, Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
                SendClientMessage(playerid, -1, "{00FF33}Felicidades, tu cuenta fue creada y guardada con éxito.");
            }
        }

        if(dialogid==DIALOGO_LOGIN)
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD, "Escribe tu contraseña","Contraseña:","Ingresar","Cancelar");
            	if(strcmp(inputtext, Info[playerid][kContra], false) == 0)
                {
                    TogglePlayerSpectating(playerid, 0);
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    SpawnPlayer(playerid);
                    GivePlayerMoney(playerid, Info[playerid][kDinero]);
                    SetPlayerArmour(playerid, Info[playerid][kChaleco]);
                    SetPlayerHealth(playerid, Info[playerid][kVida]);
                    SetPlayerVirtualWorld(playerid, Info[playerid][kVirtualWorld]);
   	            SetPlayerInterior(playerid, Info[playerid][kInterior]);
                    SetPlayerSkin(playerid, Info[playerid][kSkin]);
                    SetPlayerPos(playerid, Info[playerid][kPosX], Info[playerid][kPosY], Info[playerid][kPosZ]);
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOGO_LOGIN, DIALOG_STYLE_PASSWORD,"Contraseña Incorrecta","Contraseña:","Ingresar","Cancelar");
                }
                return 1;
            }
        }
  Cantidad de llaves: Abiertas(7)-Cerradas(7) | Lineas Totales: 63
Dentro del Callback "OnPlayerSpawn" agregamos esta línea, le damos a la variable "PlayerConectado" el valor de 1.
 Codigo Pawno:
1

    PlayerConectado[playerid] = 1;
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Por último en el Callback "OnPlayerDisconnec" colocamos lo siguiente para cuando el jugador se desconecte guarde los datos:
 Codigo Pawno:
1

GuardarCuenta(playerid);
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
OJO, para que se guarden los datos en la carpeta de su GM, deben crear una carpeta llamada "Cuentas" dentro de "scriptfiles", para que las cuentas registradas se puedan guardar.

Cambios:
- Sino se coloca ninguna letra a la hora de registrar la contraseña no se podrá seguir en el registro.
- Se soluciono el problema en el código original de Tusso4 que dejaba poner cualquier contraseña para entrar.
- Se soluciono el problema en el código original de Tusso4 que si se cancelaba el Registro o Login la cuenta perdia sus datos.
- Cuando se entra al servidor se mostraban las opciones "<<" ">>" y "spawn" Ya no se ven.
- Se agrego poder guardar la Skin, Vida y Chaleco del jugador.
- Se agrego podr guardar el VirtualWorld e Interior de donde esta el jugador.
Buen post, buena actualizacion +1 Homie -thumbup
Avatar de Usuario
#Fede
Moderador Global
Moderador Global
Mensajes: 3125
Registrado: 12 Ene 2015 06:32
Ubicación: Montevideo, Uruguay.
Reputación: 75

25 Sep 2018 19:13

4 años de la misma guía, y continua con el mismo error (Y no me refiero a usar INI en 2018)

viewtopic.php?t=28785

De igual manera, no debería dar problemas estando así, era una actualización requerida para la guía para quien quisiera usar INI.
Estoy fuera de SA-MP, no me envíen mensajes privados invitándome a proyectos.


scriptnoob escribió:Cada día se va mejorando el foro, nuestro objetivo es como el de una empresa:

Misión: Brindar ayuda y aportes a los usuarios.
Visión: Ser la página de mayor calidad de servicio de soporte referidos a lenguajes de programación.
Lee las reglas del foro para evitar ser sancionado




Avatar de Usuario
Trifasico
Aprendiz
Aprendiz
Mensajes: 132
Registrado: 21 Jun 2017 13:22
Ubicación: Venezuela
Reputación: 7

30 Sep 2018 17:18

#Fede escribió:
25 Sep 2018 19:13
4 años de la misma guía, y continua con el mismo error (Y no me refiero a usar INI en 2018)

viewtopic.php?t=28785

De igual manera, no debería dar problemas estando así, era una actualización requerida para la guía para quien quisiera usar INI.
¡Vaya! no sabía nada de ese bug, aunque lo publicaron en el 2016 osea que la guía tiene 2 años con el error. Ya lo estuve probando y ese bug no actúa generando problemas en el código original de Tusso4, además como tú dices no debería dar errores como esta.

Ya modifique todo el código eliminando los return de array en funciones, para que las personas que vayan a utilizar este sistema no tengan problemas en un futuro. -thumbup

Graber dijo: "Hay que deshacernos de las técnicas inseguras de hace 10 años"
Mis aportes:


Reglas de Pawn Script:
>> http://pawnscript.com/foro/rules <<

Mi Servidor:


Responder