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.
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;
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;
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 = x;
Cuenta = y;
Cuenta = 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;
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? ? ? = db_get_field_assoc_int(R,"ID");
Cuenta? ? = db_get_field_assoc_int(R,"Nivel");
Cuenta? ? = db_get_field_assoc_int(R,"NivelStaff");
Cuenta? = db_get_field_assoc_int(R,"Dinero");
Cuenta = db_get_field_assoc_int(R,"Vida");
Cuenta = db_get_field_assoc_int(R,"Chaleco");
Cuenta? ? ? = db_get_field_assoc_int(R,"Vip");
? ? Cuenta? = db_get_field_assoc_int(R,"Muteado");
? ? Cuenta = db_get_field_assoc_int(R,"Genero");
? ? Cuenta = db_get_field_assoc_float(R, "PosX");
? ? Cuenta = db_get_field_assoc_float(R, "PosY");
? ? Cuenta = 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 = true;
Cuenta = 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;
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 = true;
Cuenta = true;
}
}
if(dialogid == DIALOGO_GENERO)
{
if(!response)Kick(playerid);
if(!response)
{
new query;
format(query,sizeof(query),"INSERT INTO usuarios (Genero) VALUES ('1')");
Cuenta = 1;
}
else
{
new query;
format(query,sizeof(query),"INSERT INTO usuarios (Genero) VALUES ('0')");
Cuenta = 0;
}
}
return 1;
}
// Evitar bugs //
public OnPlayerRequestSpawn(playerid)
{
if(Cuenta == false)
{
GameTextForPlayer(playerid,"~r~~n~~n~Primero debes ingresar/registrarte.",2000,5);
return 0;
}
return 1;
}
public OnPlayerUpdate(playerid)
{
if(GetPlayerMoney(playerid) != Cuenta)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,Cuenta);
}
if(GetPlayerScore(playerid) != Cuenta)
{
SetPlayerScore(playerid,Cuenta);
}
if(IsPlayerAdmin(playerid) && !TienePermisos(playerid))
{
new msg;
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 == false)
{
SetPlayerPos(playerid, Cuenta, Cuenta, Cuenta);
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? = false;
Cuenta = -1;
Cuenta? ? = 0;
Cuenta = 0;
Cuenta = 0;
Cuenta? ? = 0;
Cuenta? ? ? = 0;
Cuenta? ? = 0;
Cuenta? = 0;
Cuenta = 0;
Cuenta = 0.0;
Cuenta = 0.0;
Cuenta = 0.0;
}
// Verificar si la Cuenta existe //
stock CuentaExistente(name[])
{
new query;
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,
ch,
i,
j;
while ((ch = text) && j < sizeof (ret))
{
if (ch == '\'')
{
if (j < sizeof (ret) - 2)
{
ret = '\'';
ret = '\'';
}
}
else if (j < sizeof (ret))
{
ret = ch;
}
else
{
j;
}
}
ret = '\0';
return ret;
}
stock Nombre(playerid)
{
new name;
GetPlayerName(playerid,name,sizeof(name));
return name;
}
stock GuardarCuenta(playerid)
{
if(CuentaExistente(Nombre(playerid)))
{
new query;
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,Cuenta,Cuenta,Cuenta,Cuenta,Cuenta,Cuenta,Cuenta,Nombre(playerid));
db_query(sqldb,query);
}
}
}
Los logs:
: 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)
Nova Roleplay.
Number of vehicle models: 0
127.0.0.1:61684 requests connection cookie.
incoming connection: 127.0.0.1:61684 id: 0
Phillip_Blackstone has joined the server (0:127.0.0.1)
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' COLLATE NOCASE
: 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')
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
: 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'
Phillip_Blackstone has left the server (0:1)
127.0.0.1:63435 requests connection cookie.
incoming connection: 127.0.0.1:63435 id: 0
Phillip_Blackstone has joined the server (0:127.0.0.1)
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' COLLATE NOCASE
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
: 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'
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone' AND Llave = '20061219' COLLATE NOCASE
: SELECT * FROM usuarios WHERE Nombre = 'Phillip_Blackstone'
: 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'
Phillip_Blackstone has left the server (0:1)