• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problema de guardado con SQL.
#1
Exclamation 
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.



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"120000true); // 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(querysizeof(query), "SELECT * FROM usuarios WHERE Nombre = '%s' COLLATE NOCASE"DB_Escape(Nombre(playerid)));

new 
DBResult:db_query(sqldbquery);

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(playeridreason)

{

//Guardar posici?n del jugador.

new Float:xFloat:yFloat:z;

GetPlayerPos(playeridx,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: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) < || 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(playeridDIALOGO_GENERODIALOG_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(playeridCuenta[playerid][PosX], Cuenta[playerid][PosY], Cuenta[playerid][PosZ]);

SetPlayerInterior(playerid0);

}

else 

{

new 
posal random(3);

switch(
posal)

{

case 
0SetPlayerPos(playerid1682.7462,-2292.2656,13.5168);

case 
1SetPlayerPos(playerid1663.3788,-2286.2458,5.2656);

case 
2SetPlayerPos(playerid1682.0084,-2286.5540,-1.2325);

}

SetPlayerInterior(playerid0);

}

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: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]) && sizeof (ret))

{

if (
ch == '\'')

{

if (
sizeof (ret) - 2)

{

ret[j] = '\'';

ret[j] = '\'';

}

}

else if (
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 AUTOINCREMENTNombre TEXTLlave TEXTNivel NUMERICNivelStaff NUMERICVip NUMERICMuteado NUMERICVida NUMERICChaleco NUMERICDinero NUMERICGenero NUMERICPosX FLOATPosY FLOATPosZ FLOAT)

[
15:43:41Nova Roleplay.

[
15:43:41Number of vehicle models0

[15:44:34] [connection127.0.0.1:61684 requests connection cookie.

[
15:44:35] [connectionincoming connection127.0.0.1:61684 id0

[15:44:35] [joinPhillip_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,PosZVALUES ('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] [partPhillip_Blackstone has left the server (0:1)

[
15:45:47] [connection127.0.0.1:63435 requests connection cookie.

[
15:45:48] [connectionincoming connection127.0.0.1:63435 id0

[15:45:48] [joinPhillip_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] [partPhillip_Blackstone has left the server (0:1
  Reply


Forum Jump: