Hola, me encuentro creando un registro mysql. Solo da un error, no en el pawn si no al crear la cuenta.
El gm es base OSRP.
Y lo esta tambien, el error creo que esta en el guardado de la contraseсa. їAlguien me ayuda?
pawn Код:
#include <a_samp>
#include <a_mysql>
#define DIALOG_LOGIN 1111
#define DIALOGO_REGISTRO 1112
new strtokex_string[1500];
#define COLOR_RED 0xAA3333AA
enum infoj
{
pSQLID,
};
new InfoJugador[MAX_PLAYERS][infoj];
forward MensajeCarga(playerid);
forward GuardarCuenta(playerid);
forward ConectarJugador(playerid, contra[]);
forward InsertarJugador(pname[], password[]);
forward RegistrarJugador(playerid, contra[]);
forward ExisteUsuario(nombre_jugador[]);
#if defined FILTERSCRIPT
#else
main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}
#endif
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_LOGIN)
{
if(response == 0)
{
Kick(playerid);
return 1;
}
else
{
if(strlen(inputtext))
{
new tmppass[64];
strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
ConectarJugador(playerid,tmppass);
return 1;
}
else
{
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
return 1;
}
}
}
if(dialogid == DIALOGO_REGISTRO)//Registrar una cuenta
{
if(response == 0)
{
Kick(playerid);
return 1;
}
else
{
if(strlen(inputtext))
{
new tmppass[64];
strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
RegistrarJugador(playerid,tmppass);
return 1;
}
else
{
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick NO esta Registrado.\nIngresa la contra parar crear la cuenta:",loginname);
ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");
return 1;
}
}
}
return 0;
}
public RegistrarJugador(playerid, contra[])
{
if(IsPlayerConnected(playerid))
{
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
new newaccountsqlid = InsertarJugador(playername3, contra);
if (newaccountsqlid != 0)
{
InfoJugador[playerid][pSQLID] = newaccountsqlid;
printf("Registrando Jugador: [%s]",playername3);
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
}
else
{
SendClientMessage(playerid, COLOR_RED, "Ha ocurrido un error, desconectando.");
Kick(playerid);
return 0;
}
}
return 0;
}
public ConectarJugador(playerid, contra[])
{
new pName[MAX_PLAYER_NAME], query[256];
GetPlayerName(playerid,pName,sizeof(pName));
mysql_real_escape_string(pName,pName);
mysql_real_escape_string(contra,contra);
format(query,sizeof(query),"SELECT * FROM `players` WHERE usuario = '%s' AND Password = '%s' LIMIT 1",pName,contra);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
new Data[1024];
new Field[64];
new rcnt = 1;
format(query,sizeof(query),"SELECT * FROM `players` WHERE usuario = '%s'",pName);
mysql_query(query);
mysql_store_result();
mysql_fetch_row(Data);
mysql_strtok(Field, "|", Data);
while (mysql_strtok(Field, "|", "")==1)
{
// if (rcnt == 3) InfoJugador[playerid][Dinero_Jugador] = strval(Field);
// if (rcnt == 4) InfoJugador[playerid][Skin_Jugador] = strval(Field);
rcnt++;
}
}
else
{
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
}
SpawnPlayer(playerid);
SetPlayerPos(playerid, 409.4352,-1543.2668,32.2734);
SetPlayerFacingAngle(playerid, 270.0);
SetPlayerInterior(playerid,0);
return 1;
}
public InsertarJugador(pname[], password[])
{
new escapedname[ MAX_PLAYER_NAME ], escapedpass[ MAX_PLAYER_NAME ], query[ 200 ];
mysql_real_escape_string( pname, escapedname );
mysql_real_escape_string( password, escapedpass );
format(query, sizeof(query), "INSERT INTO players (`Nombre`, `Password`) VALUES ('%s', '%s')", pname, password);
mysql_query(query);
new newplayersid = ExisteUsuario(pname);
if (newplayersid != 0)
{
return newplayersid;
}
return 0;
}
mysql_strtok(dest[], delimiterstr[], source[])
{
new delimiter = delimiterstr[0];
if(strlen(source) > sizeof(strtokex_string))
{
print("[ERROR] strtokex: source too long");
return 0;
}
if(strlen(source) > 0)
{
format(strtokex_string, sizeof(strtokex_string), "%s", source);
}
if(strlen(strtokex_string) == 0)
{
return 0;
}
new length = strlen(strtokex_string);
new index = 0;
while ((index < length) && (strtokex_string[index] != delimiter))
{
dest[index] = strtokex_string[index];
index++;
}
dest[index] = 0;
strmid(strtokex_string, strtokex_string, index+1, length);
return 1;
}
public ExisteUsuario(nombre_jugador[])
{
new escapedname[ MAX_PLAYER_NAME ], query[ 200 ];
mysql_real_escape_string( nombre_jugador, escapedname );
format( query, sizeof( query ), "SELECT id FROM `players` WHERE LOWER(usuario) = ('%s') LIMIT 1", escapedname );
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() == 0)
{
return 0;
}
else
{
new strid[32];
new intid;
mysql_fetch_row(strid);
intid = strval(strid);
return intid;
}
}
public OnPlayerConnect(playerid)
{
SetTimerEx("MensajeCarga",100,false, "d", playerid);
return 1;
}
public MensajeCarga(playerid)
{
SetSpawnInfo( playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 26, 36, 28, 150, 0, 0 );
new nombre_jugador[MAX_PLAYER_NAME];//,lstring[128];
GetPlayerName(playerid, nombre_jugador,sizeof(nombre_jugador));
new sqlaccountstatus = ExisteUsuario(nombre_jugador);
if(sqlaccountstatus != 0)
{
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick esta Registrado.\nIngresa la contraseña para logear:",loginname);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Iniciar Sesion",loginstring,"Conectar","Salir");
InfoJugador[playerid][pSQLID] = sqlaccountstatus;
}
else
{
new loginstring[128];
new loginname[64];
GetPlayerName(playerid,loginname,sizeof(loginname));
TogglePlayerSpectating(playerid, 1);
format(loginstring,sizeof(loginstring),"Bienvenido, %s\nTu nick NO esta Registrado.\nIngresa la contra parar crear la cuenta:",loginname);
ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,"Registrar Cuenta",loginstring,"Registrar","Salir");
}
return 1;
}
primero tenйs que tener una conecciуn a mysql, cosa que no vi en el script que generalmente va en OnGameModeInit(), segundo debes de tener la tabla players ya creada en la db y otra cosa es que en algunos querys usбs "Nombre" y en otros "usuario" al campo donde se guarda en nombre del jugador, tenйs que usar solo el que existe en la db si no no va a funcionar.
Me lo soluciono un amigo por msn, de todas formas muchas gracias Daniel-92!