Se duplica informacion de archivo .ini
#1

No se porque ocurre esto, un bug que aun no le encuentro solucion, la informacion del jugador recopilada en un archivo .ini se duplica cada cierta vez que el jugador se desconecta.


Informacion general del jugador, guardada en archivo .ini
Код:
[Datos]
Contraseсa = 12345
Nivel = 1
Admin = 0
Faccion = 0
Helper = 0
ConnectedTime = 0
Registered = 1
Sexo = 1
Aсo = 31
Originen = 2
Walk = 2
Respeto = 0
Moneda = 3000
Banco = 0
Cheques = 0
Kills = 0
Muertes = 0
Arrestado = 0
Informacion duplicada del jugador, guardada en archivo .ini
Код:
[Datos]
Contraseсa = 12345
Nivel = 1
Admin = 0
Faccion = 0
Helper = 0
ConnectedTime = 0
Registered = 1
Sexo = 1
Aсo = 31
Originen = 2
Walk = 2
Respeto = 0
Moneda = 3000
Banco = 0
Cheques = 0
Kills = 0
Muertes = 0
Arrestado = 0
[Datos]
Contraseсa = 12345
Nivel = 1
Admin = 0
Faccion = 0
Helper = 0
ConnectedTime = 0
Registered = 1
Sexo = 1
Aсo = 31
Originen = 2
Walk = 2
Respeto = 0
Moneda = 3000
Banco = 0
Cheques = 0
Kills = 0
Muertes = 0
Arrestado = 0



їAlguien que sepa la razon o solucion?, se lo agradeceria mucho!



.
Reply
#2

Sin el cуdigo no podemos buscarle la soluciуn a tu problema.
Reply
#3

Todo ocurre al desconectarse, asi que me imagino el problema debe venir de OnPlayerDisconnect.

OnPlayerDisconnect
Код:
public OnPlayerDisconnect(playerid, reason)
{
    lastcommand[playerid] = 0;
    TextDrawDestroy(Veloz4[playerid]);
    TextDrawDestroy(TutorialUno[playerid]);
    TextDrawDestroy(TutorialDos[playerid]);
    if(Logueado[playerid])
    {

	if(EnPaintBall[playerid] == 1)
	{
		new string[72];
		EnPB--;
		format(string, sizeof(string), "%s abandono el estadio.", Jugador(playerid));
		SendPaintballArenaMessage(COLOR_YELLOW, string);
	}
	if(Aceptollamada[playerid] == 1)
	{
		Llamando[playerid] = 0;
		Llamando[Llamaalusuario[playerid]] = 0;
		Aceptollamada[Llamaalusuario[playerid]] = false;
		SendClientMessage(Llamaalusuario[playerid],COLOR_GRAD2,"Te colgaron la llamada.");
		Llamaalusuario[playerid] = 0;
		Aceptollamada[playerid] = false;
	}
	if(Rescate[playerid] >= 0 && PidioRescate[playerid] == 1)
	{
		SendClientMessage(Rescate[playerid],COLOR_WHITE,"El que solicito el rescate se desconecto.");
		RemovePlayerMapIcon(Rescate[playerid], 99);
		Rescate[Rescate[playerid]] = -1;
	}
	if(Rescate[playerid] >= 0 && PidioRescate[playerid] == 0)
	{
		SendClientMessage(Rescate[playerid],COLOR_WHITE,"El doctor que venia a por ti se desconecto.");
		Rescate[Rescate[playerid]] = -1;
	}
	if(Informacion[playerid][LlaveUnoAuto] != NOEXISTE)
	{
		GuardarAutosYa(Informacion[playerid][LlaveUnoAuto]);
	}
	if(Informacion[playerid][LlaveDosAuto] != NOEXISTE)
	{
		GuardarAutosYa(Informacion[playerid][LlaveDosAuto]);
	}

	GuardarInfo(playerid); //////////////Este
	Logueado[playerid] = false;
	}
	return 1;
}
GuardarInfo(playerid); es el encargado de guardar la informacion de la cuenta del usuario

Код:
GuardarInfo(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		if(Logueado[playerid])
		{

			new playername[MAX_PLAYER_NAME];
			GetPlayerName(playerid, playername, sizeof(playername));
   			if(INI_Exist(playername))
   			{
				new PlayerFile[ 13 + MAX_PLAYER_NAME + 1];
				format( PlayerFile , sizeof PlayerFile, ARCHIVO_L, playername);
				new INI:File = INI_Open(PlayerFile);

				new Float:X,Float:Y,Float:Z;
				GetPlayerPos(playerid, X, Y, Z);

				new Float:health;
				GetPlayerHealth(playerid,health);
		
				new Float:chaleco;
				GetPlayerArmour(playerid,chaleco);

				new Float:angulo;
				GetPlayerFacingAngle(playerid, angulo);

				INI_SetTag(File,"datos");
		 		INI_WriteString(File,"Contraseсa",Informacion[playerid][pKey]);
		        	INI_WriteString(File,"Nivel",Informacion[playerid][pNivel]);
  				INI_WriteString(File,"Admin",Informacion[playerid][pAdmin]);
   				INI_WriteString(File,"Faccion",Informacion[playerid][pFaccion]);
    		 		INI_WriteString(File,"Helper",Informacion[playerid][pHelper]);
    				INI_WriteString(File,"ConnectedTime",Informacion[playerid][pConnectedTime);
    		  		INI_WriteString(File,"Registered",Informacion[playerid][pRegistered]);
        	  		INI_WriteString(File,"Sexo",Informacion[playerid][pSexo]);
        	  		INI_WriteString(File,"Aсo",Informacion[playerid][pAсo]);
        	  		INI_WriteString(File,"Originen",Informacion[playerid][pOriginen]);
        	  		INI_WriteString(File,"Walk",Informacion[playerid][pWalk]);
        	  		INI_WriteString(File,"Respeto",Informacion[playerid][pRespeto]);
        	  		INI_WriteString(File,"Moneda",Informacion[playerid][pMoneda]);
        	  		INI_WriteString(File,"Banco",Informacion[playerid][pBanco]);
        	  		INI_WriteString(File,"Cheques",Informacion[playerid][pCheques]);
        	  		INI_WriteString(File,"Kills",Informacion[playerid][pKills]);
        	  		INI_WriteString(File,"Muertes",Informacion[playerid][pMuertes]);
        	  		INI_WriteString(File,"Arrestado",Informacion[playerid][pArrestado]);
	
		  		for( new m = 0; m < 13; m++ )
		  		{
 			  		new mStr[24];
			  		format(mStr,sizeof(mStr), "Arma%d", m);
			  		INI_WriteInt(File,mStr, Informacion[playerid][pArmas][m]);
		  		}

		  		for( new m = 0; m < 13; m++ )
		  		{
 			  		new mStr[24];
			  		format(mStr,sizeof(mStr), "ArmaPB%d", m);
			  		INI_WriteInt(File,mStr, Informacion[playerid][pArmasPB][m]);
		  		}
                        	INI_WriteFloat(File,"Vida",health);
   		  		INI_WriteFloat(File,"Chaleco",chaleco);
                          	INI_WriteFloat(File,"Pos_x",X);
                        	INI_WriteFloat(File,"Pos_y",Y);
                        	INI_WriteFloat(File,"Pos_z",Z);
                        	INI_WriteFloat(File,"SPos_r",angulo);
                                INI_Close(File);
   			}
   		}
	}	
	return 1;
}
Reply
#4

Una pregunta, antes de clonarse habнan ciertas variables a guardar y luego cuando se clonу fue que aсadiste mбs anteriormente?
Reply
#5

No, luego de clonarse no agregue mas cosas por miedo a que el bug fuera peor
Reply
#6

No estoy seguro, pero puede que esto sea lo que estй causando que se duplique el archivo:

1) Estбs verificando si existe el archivo incorrecto
pawn Код:
//...
if(Logueado[playerid])
{
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, sizeof(playername));
    // Estбs verificando si existe el archivo con el nombre del jugador, sin extensiуn
    // y en scriptfiles.
    if(INI_Exist(playername))
    {
        new PlayerFile[ 13 + MAX_PLAYER_NAME + 1];
        format( PlayerFile , sizeof PlayerFile, ARCHIVO_L, playername);
        new INI:File = INI_Open(PlayerFile);
        // Estбs abriendo el archivo con el nombre del jugador y la extensiуn .ini
        // en un diferente directorio, suponiendo que asн tienes definido ARCHIVO_L:
        #define ARCHIVO_L "directorio/cuentas/%s.ini"
pawn Код:
//...
if(Logueado[playerid])
{
    new playername[MAX_PLAYER_NAME], PlayerFile[ 13 + MAX_PLAYER_NAME + 1];
    GetPlayerName(playerid, playername, sizeof(playername));
    format( PlayerFile , sizeof PlayerFile, ARCHIVO_L, playername);

    if(INI_Exist(PlayerFile))
    {
        new INI:File = INI_Open(PlayerFile);
        //...
2) Estбs usando el tag incorrecto en algъn lugar, suponiendo que INI_SetTag es sensible a mayъsculas (case-sensitive)

Код:
[Datos]
Contraseсa = 12345
Nivel = 1
Admin = 0
Faccion = 0
Helper = 0
pawn Код:
//INI_SetTag(File,"datos");
INI_SetTag(File, "Datos");
3) Podrнas estar cargando mal el archivo del jugador, ya sea usando el tag incorrecto y suponiendo que tambiйn es case-sensitive, o usando un directorio diferente.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)