No guarda los datos pero los conserva
#1

Bueno estoy jugando un poco con el pawn y el mysql y a surgido este pequeсo problema y no se porque no funciona.

El problema es que no me guarda las Coordenadas cuando desconecta y para ser poco cuando vuelves al server apareces donde te desconectaste pero en la base de datos no hay datos guardados.

Код:
public GuardarDatos(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		if(EstaLogueado[playerid] == true)
		{
			new puntaje = GetPlayerScore(playerid);
			new dinero = GetPlayerMoney(playerid);
			GetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
			GetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
			new i, arma, municion;
			for(i=0; i<3; i++)
			{
				GetPlayerWeaponData(playerid,i,arma,municion);
			}
			JugadorInfo[playerid][Skin] = GetPlayerSkin(playerid);
			new q[200], jNombre[24];
			GetPlayerName(playerid, jNombre, sizeof(jNombre));
			format(q, sizeof(q), "UPDATE usuarios SET puntaje=%d, dinero=%d xpos=%f ypos=%f zpos=%f apos=%f arma1=%d arma2=%d arma3=%d municion1=%d municion2=%d municion3=%d skin=%d WHERE nombre_usuario='%s' ", puntaje, dinero, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz], JugadorInfo[playerid][posa], arma, arma, arma, municion, municion, municion, JugadorInfo[playerid][Skin], jNombre);
			mysql_query(q);
			mysql_free_result();
			return 1;
		}
	}
	return 1;
}
Estoy usando la versiуn 0.3x.

Gracias!
Reply
#2

Me muestras tu OnPlayerSpawn?
Reply
#3

Quote:
Originally Posted by elvago
Посмотреть сообщение
Me muestras tu OnPlayerSpawn?
Es el siguiente.

Код:
public OnPlayerSpawn(playerid)
{
	if(IsPlayerConnected(playerid))
	{
	    if(EstaLogueado[playerid]== false)
	    {
		    Kick(playerid);
		}
		if(JugadorInfo[playerid][Skin] == 0)
		{
		    ConfigurarCuenta(playerid);
		}
		else
		{
		    SetPlayerSkin(playerid, JugadorInfo[playerid][Skin]);
			SetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
			SetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
		}
	}
	return 1;
}
Reply
#4

No estoy seguro, pero estas seguro que solo es la posiciуn que no guarda??
Creo que vi que faltan unas comas??
Reply
#5

Quote:
Originally Posted by elvago
Посмотреть сообщение
No estoy seguro, pero estas seguro que solo es la posiciуn que no guarda??
Creo que vi que faltan unas comas??
e puesto las comas y en realidad no guarda nada de lo que se envia en la query
Reply
#6

Me excusas si me equivoco pero ando un poco oxidado, me podrнas decir en que lineas chequeas la conexiуn con la Base de datos?
Reply
#7

Seсor no se porque usted utiliza la mysql_free_result si usted no esta conservando datos con mysql_store_result, recuerde que estas funciones no son necesarias cuando se va a modificar la tabla, ya que no se estan obteniendo datos que deben ser conservados.

Trate de poner su cуdigo asi:

pawn Код:
public GuardarDatos(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(EstaLogueado[playerid] == true)
        {
            new puntaje = GetPlayerScore(playerid);
            new dinero = GetPlayerMoney(playerid);
            GetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
            GetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
            new i, arma, municion;
            for(i=0; i<3; i++)
            {
                GetPlayerWeaponData(playerid,i,arma,municion);
            }
            JugadorInfo[playerid][Skin] = GetPlayerSkin(playerid);
            new q[200], jNombre[24];
            GetPlayerName(playerid, jNombre, sizeof(jNombre));
            format(q, sizeof(q), "UPDATE usuarios SET puntaje=%d, dinero=%d, xpos=%f, ypos=%f, zpos=%f, apos=%f, arma1=%d, arma2=%d, arma3=%d, municion1=%d, municion2=%d, municion3=%d, skin=%d WHERE nombre_usuario='%s'", puntaje, dinero, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz], JugadorInfo[playerid][posa], arma, arma, arma, municion, municion, municion, JugadorInfo[playerid][Skin], jNombre);
            mysql_query(q);
            return 1;
        }
    }
    return 1;
}
Recuerde separar cada columna por una "," para asi evitar errores en la consulta.

Un saludo.
Reply
#8

Quote:
Originally Posted by elvago
Посмотреть сообщение
Me excusas si me equivoco pero ando un poco oxidado, me podrнas decir en que lineas chequeas la conexiуn con la Base de datos?
Si te refieres que en que linea conecto a la base de datos es con la siguiente funcion.

Код:
public ConectarSQL()
{
	conectar = mysql_connect(SQL_HOST,SQL_USER,SQL_DB,SQL_PASS);
	if(!conectar)
	{
	  printf("[SQL]Error: No es posible conectar al servidor");
	}
	else
	{
	   printf("[SQL]Aviso: El servidor se a conectado a la base de datos %s", SQL_DB);
	}
	return 1;

}
Quote:
Originally Posted by oOFotherOo
Посмотреть сообщение
Seсor no se porque usted utiliza la mysql_free_result si usted no esta conservando datos con mysql_store_result, recuerde que estas funciones no son necesarias cuando se va a modificar la tabla, ya que no se estan obteniendo datos que deben ser conservados.

Trate de poner su cуdigo asi:

pawn Код:
public GuardarDatos(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(EstaLogueado[playerid] == true)
        {
            new puntaje = GetPlayerScore(playerid);
            new dinero = GetPlayerMoney(playerid);
            GetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
            GetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
            new i, arma, municion;
            for(i=0; i<3; i++)
            {
                GetPlayerWeaponData(playerid,i,arma,municion);
            }
            JugadorInfo[playerid][Skin] = GetPlayerSkin(playerid);
            new q[200], jNombre[24];
            GetPlayerName(playerid, jNombre, sizeof(jNombre));
            format(q, sizeof(q), "UPDATE usuarios SET puntaje=%d, dinero=%d, xpos=%f, ypos=%f, zpos=%f, apos=%f, arma1=%d, arma2=%d, arma3=%d, municion1=%d, municion2=%d, municion3=%d, skin=%d WHERE nombre_usuario='%s'", puntaje, dinero, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz], JugadorInfo[playerid][posa], arma, arma, arma, municion, municion, municion, JugadorInfo[playerid][Skin], jNombre);
            mysql_query(q);
            return 1;
        }
    }
    return 1;
}
Recuerde separar cada columna por una "," para asi evitar errores en la consulta.

Un saludo.
Ya lo e puesto y verificado la consulta y sigue igual. Creo que es problema de la version 0.3x.
Reply
#9

pawn Код:
public GuardarDatos(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(EstaLogueado[playerid] == true)
        {
            new puntaje = GetPlayerScore(playerid);
            new dinero = GetPlayerMoney(playerid);
            GetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
            GetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
            new i, arma, municion;
            for(i=0; i<3; i++)
            {
                GetPlayerWeaponData(playerid,i,arma,municion);
            }
            JugadorInfo[playerid][Skin] = GetPlayerSkin(playerid);
            ConectarSQL();
            new q[200], jNombre[24];
            GetPlayerName(playerid, jNombre, sizeof(jNombre));
            format(q, sizeof(q), "UPDATE usuarios SET puntaje=%d, dinero=%d, xpos=%f, ypos=%f, zpos=%f, apos=%f, arma1=%d, arma2=%d, arma3=%d, municion1=%d, municion2=%d, municion3=%d, skin=%d WHERE nombre_usuario='%s'", puntaje, dinero, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz], JugadorInfo[playerid][posa], arma, arma, arma, municion, municion, municion, JugadorInfo[playerid][Skin], jNombre);
            mysql_query(q);
            return 1;
        }
    }
    return 1;
}

Chequea asн...
Reply
#10

Quote:
Originally Posted by elvago
Посмотреть сообщение
pawn Код:
public GuardarDatos(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(EstaLogueado[playerid] == true)
        {
            new puntaje = GetPlayerScore(playerid);
            new dinero = GetPlayerMoney(playerid);
            GetPlayerPos(playerid, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz]);
            GetPlayerFacingAngle(playerid, JugadorInfo[playerid][posa]);
            new i, arma, municion;
            for(i=0; i<3; i++)
            {
                GetPlayerWeaponData(playerid,i,arma,municion);
            }
            JugadorInfo[playerid][Skin] = GetPlayerSkin(playerid);
            ConectarSQL();
            new q[200], jNombre[24];
            GetPlayerName(playerid, jNombre, sizeof(jNombre));
            format(q, sizeof(q), "UPDATE usuarios SET puntaje=%d, dinero=%d, xpos=%f, ypos=%f, zpos=%f, apos=%f, arma1=%d, arma2=%d, arma3=%d, municion1=%d, municion2=%d, municion3=%d, skin=%d WHERE nombre_usuario='%s'", puntaje, dinero, JugadorInfo[playerid][posx],JugadorInfo[playerid][posy],JugadorInfo[playerid][posz], JugadorInfo[playerid][posa], arma, arma, arma, municion, municion, municion, JugadorInfo[playerid][Skin], jNombre);
            mysql_query(q);
            return 1;
        }
    }
    return 1;
}

Chequea asн...
Sigue sin guardar o.o no se que pasa ya empiezo a creer que es la version 0.3x aunque es poco probable.
Reply
#11

Esto es preferible usarlo en main:

pawn Code:
main ()
{
    conectar = mysql_connect(SQL_HOST,SQL_USER,SQL_DB,SQL_PASS);
    if(!conectar)
    {
      printf("[SQL]Error: No es posible conectar al servidor");
    }
    else
    {
       printf("[SQL]Aviso: El servidor se a conectado a la base de datos %s", SQL_DB);
    }
    return 1;

}
No se para que usted utiliza un Callback para esto al menos que usted verifique si el servidor esta conectado a la tabla con un timer cada X tiempo.

Un saludo.
Reply
#12

Quote:
Originally Posted by oOFotherOo
View Post
Esto es preferible usarlo en main:

pawn Code:
main ()
{
    conectar = mysql_connect(SQL_HOST,SQL_USER,SQL_DB,SQL_PASS);
    if(!conectar)
    {
      printf("[SQL]Error: No es posible conectar al servidor");
    }
    else
    {
       printf("[SQL]Aviso: El servidor se a conectado a la base de datos %s", SQL_DB);
    }
    return 1;

}
No se para que usted utiliza un Callback para esto al menos que usted verifique si el servidor esta conectado a la tabla con un timer cada X tiempo.

Un saludo.
Yo lo uso como stock y creo que asн hace menos lag
Reply
#13

Quote:
Originally Posted by elvago
View Post
Yo lo uso como stock y creo que asн hace menos lag
La funciуn main solo es llamada cuando se abre la consola, por eso dije "para que usted utiliza un Callback para esto ,al menos que usted verifique si el servidor esta conectado a la tabla con un timer cada X tiempo.

PD: Yo recomiendo que para verificar si la tabla hace conexiуn con el servidor usaran la funciуn main.

Un saludo.
Reply
#14

Bueno, para el gusto los colores.
Reply
#15

Algo me dice que el problema esta en tus bases de datos.
Reply
#16

Quote:
Originally Posted by OneBlaack
View Post
Sigue sin guardar o.o no se que pasa ya empiezo a creer que es la version 0.3x aunque es poco probable.
No creo que sea la versiуn de SA-MP, porque este plugin no usa ninguna funciуn de SA-MP, simplemente es un plugin que hace una conversiуn del MySQL en C/C++ para ser usada en PAWN. Ahora si usted me dijera que el plugin usara alguna funciуn de SA-MP como SetPlayerSkin y esta fuera removida en la versiуn 0.3x, entonces hay si fuera incompatible.

Como dijo el seсor vago, este problema debe estar generandose en su DB y no en el GameMode.

Un saludo.

EDIT: Si usted desea comprobar que lo que he dicho es cierto puede descargar el source del plugin MySQL.
Reply
#17

Lo e resuelto e rehecho el gamemodo y la base de datos y a funcionado Gracias por los consejos

PD: Pueden cerrar el tema.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)