[Duvida] GMX
#1

Bom pessoal o Ricop disse nesse topico:

https://sampforum.blast.hk/showthread.php?tid=323127

que dava para salvar os dados com o gmx.. mais aqui num dб certo.. tipo atй salva, tbm ja procurei em outros topicos e encontrei o mesmo problema porem sem muitas soluзхes..

mais quando acontece o gmx, ele torna a salvar os dados porem salva as cordenadas entre outros dados com 0. isso acontece com dados float..

segue como to usando:

Код:
// no onplayerdisconect
public OnPlayerDisconnect(playerid, reason)
{
    switch(reason)
    {
        case 0, 1, 2: SalvarPlayer(playerid);
    }
    return true;
}
na public que salva as cordenadas
Код:
public SalvarPlayer(playerid)
{
    	if(IsPlayerConnected(playerid) && playerlogado[playerid] == 1)
		{
		    new arquivo[50],nome[50],msg[100];
		    GetPlayerName(playerid, nome, sizeof(nome));
		    format(arquivo, sizeof(arquivo),"Usuarios/%s.ini",nome);

			GetPlayerPos(playerid,PlayerInfo[playerid][x],PlayerInfo[playerid][y],PlayerInfo[playerid][z]);
			GetPlayerFacingAngle(playerid, PlayerInfo[playerid][Angle]);

			PlayerInfo[playerid][pInterior] = GetPlayerInterior(playerid);

		    if(!fexist(arquivo)) return print("arquivo nгo existe");
			INI_Open(arquivo);
			INI_WriteFloat("CorX",PlayerInfo[playerid][x]);
			INI_WriteFloat("CorY",PlayerInfo[playerid][y]);
			INI_WriteFloat("CorZ",PlayerInfo[playerid][z]);
			INI_WriteFloat("Anglo",PlayerInfo[playerid][Angle]);
			INI_WriteInt("pCash",GetPlayerMoney(playerid));
			INI_WriteInt("Admin",PlayerInfo[playerid][pAdmin]);
		    INI_WriteInt("VIP",PlayerInfo[playerid][pVIP]);
			INI_WriteInt("Sex",PlayerInfo[playerid][pSex]);
		    INI_WriteInt("Level",PlayerInfo[playerid][pLevel]);
			INI_WriteInt("Skin",PlayerInfo[playerid][pSkin]);
		    INI_WriteInt("Leader",PlayerInfo[playerid][pLeader]);
			INI_WriteInt("Team",PlayerInfo[playerid][pTeam]);
		    INI_WriteInt("Cargo",PlayerInfo[playerid][pCargo]);
			INI_WriteInt("Job",PlayerInfo[playerid][pJob]);
		    INI_WriteInt("Score",GetPlayerScore(playerid));
		    INI_WriteInt("Interior", PlayerInfo[playerid][pInterior]);
		    INI_WriteInt("Tutorial", tutorial[playerid]);
		    INI_WriteInt("pPreso",PlayerInfo[playerid][pPreso]);
		    INI_Save();
			INI_Close();
		}

		return 1;
}
comando gmx:
Код:
if(!strcmp(cmdtext, "/gmx", true))
	{
	GameModeExitEx();
	}
Код:
forward GameModeExitEx();
public GameModeExitEx() {
     for(new i = 0; i < MAX_PLAYERS; ++i) {
            SalvarPlayer(i);
     }
	 GameModeExit();
}
help?? ^^
quando eu do /gmx ele salva la blzinha as cordenadas e os dados etc.. mais quando acontece o gmx, ou seja os players sгo desconectados, ele chama a funcao salvar de novo e salva os dados como zero.. principalmente os em float.

tentei colocar assim tbm no onplayerdisconect

Код:
switch(reason)
    {
        case 0:format(msg, sizeof(msg), "%s Saiu Do Servidor. (Poblema na Conexгo)", nome);
		case 1:format(msg, sizeof(msg), "%s Saiu Do Servidor. (Saiu por conta prуpria)", nome); 
		case 2:SalvarPlayer(playerid);
    }
mais aqui, o comando gmx salva.. legal. so q se o cara sair, dando "/q", ou "Esc > sair do jogo" ele nгo salva pois cairia na reason 1.. a mesma do gmx. ¬¬ como o SalvarPlayer so estб na reason 2 ele so salva se o jogador levar kick.

no caso pra ele salvar quando ele saice o SalvarPlayer precisaria estar na reason 1.. mais ai acontece o q eu falei de salvar duas vezes, e na segunda salvar com poziзхes zeradas por exemplo.

espero ter explicado certinho.. aguardo ajuda de vcs. desde jб obrigado.

@edit, desculpe a identaзгo do forum й horrivel. no gm fica bunitin ^^
Reply
#2

na public OnGameModeExit vc ta pondo um loop pra salvar todos os jogadores?
Reply
#3

pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    SalvarPlayer(playerid);
    return true;
}
Nгo sei mudaria alguma coisa mas nгo й necessaria usar o reason para salvar a conta do player!
Reply
#4

Quote:
Originally Posted by Lucas_Alemao
Посмотреть сообщение
na public OnGameModeExit vc ta pondo um loop pra salvar todos os jogadores?
nгo.. sу chamo a public salvarplayer no OnPlayerDisconnect, e no /gmx.

Quote:
Originally Posted by paulor
Посмотреть сообщение
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    SalvarPlayer(playerid);
    return true;
}
Nгo sei mudaria alguma coisa mas nгo й necessaria usar o reason para salvar a conta do player!
Ja tentei assim tbm paulo, mais acontece o msm problema. se eu deixar so dessa forma e dar gmx normal ele salva assim as cordenadas:

Код:
dados: 200,0.000000,0.000000,0.000000,0.000000,reg:1
sendo que ele tinha que salvar assim:
Код:
dados: 200,173.418136,-67.863677,1.426282,280.600677,reg:1
sу exemplo do que ta acontecendo, dei print em alguns poucos dados como posisгo, skin, e registro. como pode ver ele sу salva a skin, e o registro.

e se eu coloco igual o ricop falou, ele salva normal os dados pelo comando /gmx pq chama a funзгo e os salva la etc.
mais ai a public OnPlayerDisconnect chama novamente o salvarplayer, que salva as cordenadas zeradas novamente. salva duas vezes. e se eu tirar o salvarplayer do OnPlayerDisconnect.. ele nao salva se o player sair por conta propria. complicado.. hehe.. mais ja agradeзo de vcs responderem obrigado. ^^
Reply
#5

jб tentou usar um sistema de salvamento diferente ?
Reply
#6

Quote:
Originally Posted by paulor
Посмотреть сообщение
jб tentou usar um sistema de salvamento diferente ?
Sim, Fini, dini, Y-ini, atualmente B-ini mais dini num dб fica muito lento.

Quote:
Originally Posted by Biel.
Посмотреть сообщение
IF(EuComoVc("/DaaBunda",TRUE) == 0)
{
EleMeComeu();
RETURN 1;
}
O que isso tem a ver com o topico mano? alem de ser um comando inutil nem funcionaria. e outra sugiro vocк nгo ficar postando essas merdas ai "EuComoVc("/DaaBunda" й meio imoral, e ninguem aqui й obrigado a ler o q vc ecreve. isso pode levar vc a ser ban do forum.

no mais, obrigado.
Reply
#7

Quote:

nгo.. sу chamo a public salvarplayer no OnPlayerDisconnect, e no /gmx.

entгo faзa assim:

pawn Код:
public OnGameModeExit()
{
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          SalvarPlayer(i);
     }
     return 1;
}
e veja no q da
Reply
#8

Quote:
Originally Posted by Lucas_Alemao
Посмотреть сообщение
entгo faзa assim:

pawn Код:
public OnGameModeExit()
{
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          SalvarPlayer(i);
     }
     return 1;
}
e veja no q da
Testei assim tbm, acontece o mesmo. quando da exit no gamemod, ele zera as cordenadas do player e salva la..

Quote:
Originally Posted by paulor
Посмотреть сообщение
Ban na certa... O cara nгo consegue e ta pedindo ajuda! agora vc alem de se axar o maiorzao nгo sabe fazer um simples funзгo de cadastro e registro, Nbzao...

@Topic

Hum.. Nunca usei Y_ini mas por ser feito pelo ******, й certeza o problema nгo seja no sistema de salvamento.. Dini nem pensar muito lenta, Fini Bugadona, Bini ouзo falarem muito bem dela eu uso DOF2 e nгo aprensou problemas para mim. O problema seu й somente com esses floats ai ou com todos os floats do GM ?
Sim, somente com os floats quando acontece um gmx, e ou gamemodeexit. que daria no mesmo de um gmx. ao que parece ele nгo consegue pegar a cordenada do player quando da gmx..

se eu colocar o salvarplayer(playerid) no OnPlayerDisconnect e nгo der gmx, ele funciona normal.

vc tem a include DOF2 ai pra testar? maioria dos topicos que entro dela, inclusive de tut estгo off.

obrigado ^^.


Quote:
Originally Posted by Ghost_
Посмотреть сообщение
Ele ta pedindo ajuda porque os dados nao estao sendo salvos quando й dado o Gamemode Exit(GMX), o unico inutil aqui й tu mesmo que vive criando topicos de ajuda e se acha foda.

Ah, e pra terminar, ao menos ele sabe usar INI, enquanto tu cria um tutorial inutil que mal й um codigo util cheio de coisas desnecessarias, com um codigo feio e desajeitado.

sem mais

TOPICO:

Cria uma funзгo nova, exemplo:

pawn Код:
forward ExitGamemode();
public ExitGamemode()
{
    //funзхes
    GameModeExit();
    return 1;
}
Lucas, seu codigo iria percorrer o valor do MAX_PLAYERS, que por padrгo й 500.Se for padrгo iria salvar as contas 500 vezes, provocando um lag foda.

Este seria correto:
pawn Код:
for(new i = 0; i < MAX_PLAYERS; i++)
{
    if(IsPlayerConnected(i))
    {
        SalvarPlayer(i);
        return 1;
    }
}
testei aqui com outra funзгo mais tbm dб no mesmo ghost. o estranho que ele sу nгo savlva os dados corretamente num gmx.

se eu criar uma public com esse loop ai, e colocar em um timer, para salvar as contas tbm funciona normal.
so que ai eu tenho q ficar salvando a todo tempo. isso futuramente poderia causar um certo lag no server certo?

desde -ja Obrigado a todos que ja responderam e tentaram ajudar aqui..
Reply
#9

http://www.mediafire.com/?haiobhxab6ix2x1 Segue ae...
Reply
#10

Quote:
Originally Posted by paulor
Посмотреть сообщение
Й mano tб osso.. refiz todo o system.. em dof2 usando a include que me passou mais nгo funcionou.

acontece a mesma coisa. o gmx й bugado aqui num pega msm, atй tirei os demais codigos que utilizavam outra include para testar. mais continua dando msmo erro.

sу encontrei duas maneiras atй agora de fazer funcionar.
a primeira nгo muito viavel, salvar as contas a todo instante usando um timer.
e a segunda, usando /gmx, ele cria um loop, que kicka todos os jogadores antes do gmx.

dessas duas formas fica bunitin ^^.. pena q nгo deu certo da forma que vocКs falaram.

mesmo assim, muito obrigado por tentarem ajudar.

@edit, dei Rep pra vcs ai que tentaram ajudar. vlw pessoal.. se alguem ainda conseguir ajudar a sanar esse problema, posta aqui, ou me manda msg q agente testa vlw ^^

por hora vo usar a segunda opзгo de dar kick no povo msm. hehe
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)