2020-11-07, 08:04 PM
Mi problema es que el sistema de registro va bien, pero al desconectarse y loguear otra vez, coloca todos los datos en 0. Estaba probando el sistema hasta que ocurrio.
Los logs:
PHP Code:
new DB:sqldb;
new guardadordeCuenta;
enum d@usuario
{
ID,
Nivel,
NivelStaff,
Vip,
bool:Ingreso,
Muteado,
Dinero,
Vida,
Chaleco,
Genero,
Float:PosX,
Float:PosZ,
Float:PosY,
bool:NewSpawn
};
new Cuenta[MAX_PLAYERS][d@usuario];
forward GuardarCuentas();
/*
*=======================================*
*===============Dialogos================*
*=======================================*
*/
#define DIALOGO_REGISTRO (0)
#define DIALOGO_INGRESO (1)
#define DIALOGO_GENERO (2)
public OnGameModeInit()
{
//Conectar al SQlite.
sqldb = db_open("sqldb.db");
//Crear la tabla Sqlite.
db_query(sqldb, "CREATE TABLE IF NOT EXISTS `usuarios` (ID INTEGER PRIMARY KEY AUTOINCREMENT, Nombre TEXT, Llave TEXT, Nivel NUMERIC, NivelStaff NUMERIC, Vip NUMERIC, Muteado NUMERIC, Vida NUMERIC, Chaleco NUMERIC, Dinero NUMERIC, Genero NUMERIC, PosX FLOAT, PosY FLOAT, PosZ FLOAT)");
// Algunos Timers sobre la base de datos SQlite.
guardadordeCuenta = SetTimer("GuardarCuentas", 120000, true); // Guardar cuentas cada dos minutos.
}
public OnGameModeExit()
{
//Cierro la base de datos.
db_close(sqldb);
return 1;
}
public OnPlayerConnect(playerid)
{
ReiniciarD(playerid);
new query[(59)];
format(query, sizeof(query), "SELECT * FROM usuarios WHERE Nombre = '%s' COLLATE NOCASE", DB_Escape(Nombre(playerid)));
new DBResult:R = db_query(sqldb, query);
if(db_num_rows(R))
{
ShowPlayerDialog(playerid,DIALOGO_INGRESO,DIALOG_STYLE_PASSWORD,""GRISCLARO"? "AZULMARINO"Bienvenido de nuevo al servidor",""ROJO"Escribe tu contrase?a para ingresar al servidor.","Ingresar","Salir");
}
else
{
ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,""GRISCLARO"? "AZULMARINO"Bienvenido al servidor",""ROJO"Escribe tu contrase?a para poder guardar tus datos.",""TURQUESA"Registrar",""ROJO"Salir");
}
db_free_result(R);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Guardar posici?n del jugador.
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
Cuenta[playerid][PosX] = x;
Cuenta[playerid][PosY] = y;
Cuenta[playerid][PosZ] = z;
GuardarCuenta(playerid);
ReiniciarD(playerid);
return 1;
}
public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
{
if(dialogid == DIALOGO_INGRESO)
{
if(!response)Kick(playerid);
if(response){
new query[(76�)];
format(query,sizeof(query),"SELECT * FROM usuarios WHERE Nombre = '%s' AND Llave = '%s' COLLATE NOCASE",DB_Escape(Nombre(playerid)),DB_Escape(inputtext));
new DBResult:R = db_query(sqldb,query);
if(db_num_rows(R)){
Cuenta[playerid][ID]? ? ? = db_get_field_assoc_int(R,"ID");
Cuenta[playerid][Nivel]? ? = db_get_field_assoc_int(R,"Nivel");
Cuenta[playerid][NivelStaff]? ? = db_get_field_assoc_int(R,"NivelStaff");
Cuenta[playerid][Dinero]? = db_get_field_assoc_int(R,"Dinero");
Cuenta[playerid][Vida] = db_get_field_assoc_int(R,"Vida");
Cuenta[playerid][Chaleco] = db_get_field_assoc_int(R,"Chaleco");
Cuenta[playerid][Vip]? ? ? = db_get_field_assoc_int(R,"Vip");
? ? Cuenta[playerid][Muteado]? = db_get_field_assoc_int(R,"Muteado");
? ? Cuenta[playerid][Genero] = db_get_field_assoc_int(R,"Genero");
? ? Cuenta[playerid][PosX] = db_get_field_assoc_float(R, "PosX");
? ? Cuenta[playerid][PosY] = db_get_field_assoc_float(R, "PosY");
? ? Cuenta[playerid][PosZ] = db_get_field_assoc_float(R, "PosZ");
? format(query,sizeof(query),"~y~%s~n~~b~usted Ingreso con exito.",Nombre(playerid));
GameTextForPlayer(playerid,query,4000,5);
Cuenta[playerid][Ingreso] = true;
Cuenta[playerid][NewSpawn] = false;
}else return ShowPlayerDialog(playerid,DIALOGO_INGRESO,DIALOG_STYLE_PASSWORD,""GRISCLARO"? "AZULMARINO"Bienvenido de nuevo al servidor",""TURQUESA"Escribe tu contrase?a para ingresar al servidor.\n"ROJO"La contrase?a que has ingresado es incorrecta.",""TURQUESA"Ingresar",""ROJO"Salir");
db_free_result(R);
}}
if(dialogid == DIALOGO_REGISTRO)
{
if(!response)Kick(playerid);
if(response)
{
if(strlen(inputtext) < 4 || strlen(inputtext) > 32) return ShowPlayerDialog(playerid,DIALOGO_REGISTRO,DIALOG_STYLE_INPUT,""GRISCLARO"? "AZULMARINO"Bienvenido al servidor",""ROJO"Escribe tu contrase?a para poder guardar tus datos.",""TURQUESA"Registrar",""ROJO"Salir");
ShowPlayerDialog(playerid, DIALOGO_GENERO, DIALOG_STYLE_MSGBOX, ""GRISCLARO"? "AZULMARINO"?Excelente!",""ROJO"Selecciona tu genero para poder continuar.", "Hombre", "Mujer");
new query[(144�)];
format(query,sizeof(query),"INSERT INTO usuarios (Nombre,Llave,Dinero,NivelStaff,Vip,Nivel,Muteado,PosX,PosY,PosZ) VALUES ('%s','%s','0','0','0','0','0','0', '0', '0')",Nombre(playerid),inputtext);
db_query(sqldb,query);
format(query,sizeof(query),"~y~%s~n~~b~usted fue registrado con exito.",Nombre(playerid));
GameTextForPlayer(playerid,query,4000,5);
Cuenta[playerid][Ingreso] = true;
Cuenta[playerid][NewSpawn] = true;
}
}
if(dialogid == DIALOGO_GENERO)
{
if(!response)Kick(playerid);
if(!response)
{
new query[60];
format(query,sizeof(query),"INSERT INTO usuarios (Genero) VALUES ('1')");
Cuenta[playerid][Genero] = 1;
}
else
{
new query[60];
format(query,sizeof(query),"INSERT INTO usuarios (Genero) VALUES ('0')");
Cuenta[playerid][Genero] = 0;
}
}
return 1;
}
// Evitar bugs //
public OnPlayerRequestSpawn(playerid)
{
if(Cuenta[playerid][Ingreso] == false)
{
GameTextForPlayer(playerid,"~r~~n~~n~Primero debes ingresar/registrarte.",2000,5);
return 0;
}
return 1;
}
public OnPlayerUpdate(playerid)
{
if(GetPlayerMoney(playerid) != Cuenta[playerid][Dinero])
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,Cuenta[playerid][Dinero]);
}
if(GetPlayerScore(playerid) != Cuenta[playerid][Nivel])
{
SetPlayerScore(playerid,Cuenta[playerid][Nivel]);
}
if(IsPlayerAdmin(playerid) && !TienePermisos(playerid))
{
new msg[(57)];
format(msg,sizeof(msg),"%s fue expulsado por ingresar a la rcon sin autorizaci?n.",Nombre(playerid));
SendClientMessageToAll(-1,msg);
Kick(playerid);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Cuenta[playerid][NewSpawn] == false)
{
SetPlayerPos(playerid, Cuenta[playerid][PosX], Cuenta[playerid][PosY], Cuenta[playerid][PosZ]);
SetPlayerInterior(playerid, 0);
}
else
{
new posal = random(3);
switch(posal)
{
case 0: SetPlayerPos(playerid, 1682.7462,-2292.2656,13.5168);
case 1: SetPlayerPos(playerid, 1663.3788,-2286.2458,5.2656);
case 2: SetPlayerPos(playerid, 1682.0084,-2286.5540,-1.2325);
}
SetPlayerInterior(playerid, 0);
}
return 1;
}
// GuardarCuentas //
public GuardarCuentas()
{
for(new i=0;i<MAX_PLAYERS;i)
{
if(IsPlayerConnected(i))
{
GuardarCuenta(i);
}
}
return 1;
}
// Restablecer datos por defecto //
stock ReiniciarD(playerid)
{
Cuenta[playerid][Ingreso]? = false;
Cuenta[playerid][ID] = -1;
Cuenta[playerid][Dinero]? ? = 0;
Cuenta[playerid][Vida] = 0;
Cuenta[playerid][Chaleco] = 0;
Cuenta[playerid][NivelStaff]? ? = 0;
Cuenta[playerid][Vip]? ? ? = 0;
Cuenta[playerid][Nivel]? ? = 0;
Cuenta[playerid][Muteado]? = 0;
Cuenta[playerid][Genero] = 0;
Cuenta[playerid][PosX] = 0.0;
Cuenta[playerid][PosY] = 0.0;
Cuenta[playerid][PosZ] = 0.0;
}
// Verificar si la Cuenta existe //
stock CuentaExistente(name[])
{
new query[(42)];
format(query,sizeof(query),"SELECT * FROM usuarios WHERE Nombre = '%s'",name);
new DBResult:R = db_query(sqldb,query);
if(db_num_rows(R))
{
return true;
}
db_free_result(R);
return false;
}
// Escape //
stock DB_Escape(text[]){
new ret[80 * 2],
ch,
i,
j;
while ((ch = text[i]) && j < sizeof (ret))
{
if (ch == '\'')
{
if (j < sizeof (ret) - 2)
{
ret[j] = '\'';
ret[j] = '\'';
}
}
else if (j < sizeof (ret))
{
ret[j] = ch;
}
else
{
j;
}
}
ret[sizeof (ret) - 1] = '\0';
return ret;
}
stock Nombre(playerid)
{
new name[24];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
stock GuardarCuenta(playerid)
{
if(CuentaExistente(Nombre(playerid)))
{
new query[400];
format(query,sizeof(query),"UPDATE usuarios SET Nivel = '%d', Dinero = '%d', NivelStaff = '%d', Vip = '%d', Muteado = '%d', PosX = '%f', PosY = '%f' PosZ = '%f' WHERE Nombre = '%s'",Cuenta[playerid][Nivel],Cuenta[playerid][Dinero],Cuenta[playerid][NivelStaff],Cuenta[playerid][Vip],Cuenta[playerid][Muteado],Cuenta[playerid][PosX],Cuenta[playerid][PosY],Cuenta[playerid][PosZ],Nombre(playerid));
db_query(sqldb,query);
}
}
}
Los logs:
PHP Code:
[15:43:41] [db_log_queries]: CREATE TABLE IF NOT EXISTS `usuarios` (ID INTEGER PRIMARY KEY AUTOINCREMENT, Nombre TEXT, Llave TEXT, Nivel NUMERIC, NivelStaff NUMERIC, Vip NUMERIC, Muteado NUMERIC, Vida NUMERIC, Chaleco NUMERIC, Dinero NUMERIC, Genero NUMERIC, PosX FLOAT, PosY FLOAT, PosZ FLOAT)
[15:43:41] Nova Roleplay.
[15:43:41] Number of vehicle models: 0
[15:44:34] [connection] 127.0.0.1:61684 requests connection cookie.
[15:44:35] [connection] incoming connection: 127.0.0.1:61684 id: 0
[15:44:35] [join] Phillip_Blackstone has joined the server (0:127.0.0.1)
[15:44:35] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' COLLATE NOCASE
[15:44:39] [db_log_queries]: INSERT INTO usuarios (Nombre,Llave,Dinero,NivelStaff,Vip,Nivel,Muteado,PosX,PosY,PosZ) VALUES ('Phillip_Blackstone','20061219','0','0','0','0','0','0', '0', '0')
[15:44:54] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
[15:44:54] [db_log_queries]: UPDATE usuarios SET Nivel = '0', Dinero = '0', NivelStaff = '0', Vip = '0', Muteado = '0', PosX = '1668.851074', PosY = '-2242.367187' PosZ = '7.907007' WHERE Nombre = 'Phillip_Blackstone'
[15:44:54] [part] Phillip_Blackstone has left the server (0:1)
[15:45:47] [connection] 127.0.0.1:63435 requests connection cookie.
[15:45:48] [connection] incoming connection: 127.0.0.1:63435 id: 0
[15:45:48] [join] Phillip_Blackstone has joined the server (0:127.0.0.1)
[15:45:48] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' COLLATE NOCASE
[15:45:51] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
[15:45:51] [db_log_queries]: UPDATE usuarios SET Nivel = '0', Dinero = '0', NivelStaff = '0', Vip = '0', Muteado = '0', PosX = '0.000000', PosY = '0.000000' PosZ = '0.000000' WHERE Nombre = 'Phillip_Blackstone'
[15:45:59] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' AND Llave = '20061219' COLLATE NOCASE
[15:46:06] [db_log_queries]: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
[15:46:06] [db_log_queries]: UPDATE usuarios SET Nivel = '0', Dinero = '0', NivelStaff = '0', Vip = '0', Muteado = '0', PosX = '0.000000', PosY = '0.000000' PosZ = '-87.565048' WHERE Nombre = 'Phillip_Blackstone'
[15:46:06] [part] Phillip_Blackstone has left the server (0:1)