[Ajuda] Checkpoint
#1

Boa noite rapaziada, estou com um leve problema referente a checkpoint.

Apos o player passar por um determinado checkpoint em vez de mostrar o prуximo ele retorna para o primeiro

pawn Code:
public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
    if(checkpointid == BusCP[0])
    {
        BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
    GameTextForPlayer(playerid, "Aguarde passageiros...", 3000, 3);
        TogglePlayerControllable(playerid,0);
        SetTimerEx("Linhas",3000, false,"i",playerid);
        DestroyDynamicCP(BusCP[0]);
    }
    if(checkpointid == BusCP[1])
    {
        BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
        DestroyDynamicCP(BusCP[1]);
    }
    if(checkpointid == BusCP[2])
    {
        BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
        DestroyDynamicCP(BusCP[2]);
    }
     return 1;
}
Agradeзo a ajuda <3
Reply
#2

Tenta destruir o checkpoint antes de setar um novo.
E tambйm aprenda a usar a funзгo switch, ela й usada especificamente para situaзхes assim, onde vocК tem que fazer vбrias verificaзхes.

Mais uma coisa, para fazer mъltiplas verificaзхes com if, vocк deve fazer desse jeito:
Code:
if(//...){

}

else if(//...){

}

else if(//...){

}

else{

}

// Seu cуdigo

if(checkpointid == BusCP[0])
{
    BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
	GameTextForPlayer(playerid, "Aguarde passageiros...", 3000, 3);
    TogglePlayerControllable(playerid,0);
    SetTimerEx("Linhas",3000, false,"i",playerid);
    DestroyDynamicCP(BusCP[0]);
}
else if(checkpointid == BusCP[1])
{
    BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
    DestroyDynamicCP(BusCP[1]);
}
else if(checkpointid == BusCP[2])
{
    BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
    DestroyDynamicCP(BusCP[2]);
}
Reply
#3

Quote:
Originally Posted by Ermanhaut
View Post
Tenta destruir o checkpoint antes de setar um novo.
E tambйm aprenda a usar a funзгo switch, ela й usada especificamente para situaзхes assim, onde vocК tem que fazer vбrias verificaзхes.

Mais uma coisa, para fazer mъltiplas verificaзхes com if, vocк deve fazer desse jeito:
Code:
if(//...){

}

else if(//...){

}

else if(//...){

}

else{

}

// Seu cуdigo

if(checkpointid == BusCP[0])
{
    BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
	GameTextForPlayer(playerid, "Aguarde passageiros...", 3000, 3);
    TogglePlayerControllable(playerid,0);
    SetTimerEx("Linhas",3000, false,"i",playerid);
    DestroyDynamicCP(BusCP[0]);
}
else if(checkpointid == BusCP[1])
{
    BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
    DestroyDynamicCP(BusCP[1]);
}
else if(checkpointid == BusCP[2])
{
    BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
    DestroyDynamicCP(BusCP[2]);
}
ja tentei utilizar else if, porйm sem resultados continua retornando para o primeiro

E destruindo antes ele nem cria o prуximo
Reply
#4

Eu faria assim:
Code:
new playerJobCheckpoint[MAX_PLAYERS] = -1; //  Cria uma variбvel que tem valor padrгo de -1, ela й usada para checar qual o prуximo checkpoint sera setado

CMD:trabalhar(playerid){ //  Um exemplo de comando para setar o primeiro checkpoint para o player

	if(playerJob[playerid] == 0){ //  Se for motorista de фnibus

		playerJobCheckpoint[playerid] = 0; //  Usamos a variбvel
		SetPlayerCheckpoint(playerid, X, Y, Z, 3.0); //  Coordenadas do primeiro checkpoint
	}
}

public OnPlayerEnterCheckpoint(playerid){ //  Quando o player entra em um checkpoint

	switch(playerJobCheckpoint[playerid]){ // Vamos checar qual й o valor da variбvel que criamos

		case 0:{ //  Se for 0, mostra o primeiro checkpoint para o player

			playerJobCheckpoint[playerid] = 1; //  Ele entrou no primeiro checkpoint, entгo falamos que o prуximo й o 1
			SetPlayerCheckpoint(playerid, 1547.3561, -2284.1187, 13.4841, 3.0); //  Setamos o checkpoint
			GameTextForPlayer(playerid, "Aguarde passageiros...", 3000, 3);
		    TogglePlayerControllable(playerid, 0);
		    SetTimerEx("Linhas", 3000, false, "i", playerid);
		}

		case 1:{ // Quandpo ele entrar no prуximo checkpoint, vai ser chamado este case aqui, pois o valor da variavel й 1 agora

			playerJobCheckpoint[playerid] = 2;
			SetPlayerCheckpoint(playerid, 1400.5472, -2284.7380, 13.4667, 3.0);
		}

		case 2:{ // E assim por diante...

			playerJobCheckpoint[playerid] = 2;
			SetPlayerCheckpoint(playerid, 1368.4954, -2173.5496, 13.4840, 3.0);
			
		}
	}

	return DisablePlayerCheckpoint(playerid); //  Toda vez que o player entrar num checkpoint, ele serб desabilitado. Mas isso aqui й opicional
}
Reply
#5

Quote:
Originally Posted by Ermanhaut
View Post
Eu faria assim:
Code:
new playerJobCheckpoint[MAX_PLAYERS] = -1; //  Cria uma variбvel que tem valor padrгo de -1, ela й usada para checar qual o prуximo checkpoint sera setado

CMD:trabalhar(playerid){ //  Um exemplo de comando para setar o primeiro checkpoint para o player

	if(playerJob[playerid] == 0){ //  Se for motorista de фnibus

		playerJobCheckpoint[playerid] = 0; //  Usamos a variбvel
		SetPlayerCheckpoint(playerid, X, Y, Z, 3.0); //  Coordenadas do primeiro checkpoint
	}
}

public OnPlayerEnterCheckpoint(playerid){ //  Quando o player entra em um checkpoint

	switch(playerJobCheckpoint[playerid]){ // Vamos checar qual й o valor da variбvel que criamos

		case 0:{ //  Se for 0, mostra o primeiro checkpoint para o player

			playerJobCheckpoint[playerid] = 1; //  Ele entrou no primeiro checkpoint, entгo falamos que o prуximo й o 1
			SetPlayerCheckpoint(playerid, 1547.3561, -2284.1187, 13.4841, 3.0); //  Setamos o checkpoint
			GameTextForPlayer(playerid, "Aguarde passageiros...", 3000, 3);
		    TogglePlayerControllable(playerid, 0);
		    SetTimerEx("Linhas", 3000, false, "i", playerid);
		}

		case 1:{ // Quandpo ele entrar no prуximo checkpoint, vai ser chamado este case aqui, pois o valor da variavel й 1 agora

			playerJobCheckpoint[playerid] = 2;
			SetPlayerCheckpoint(playerid, 1400.5472, -2284.7380, 13.4667, 3.0);
		}

		case 2:{ // E assim por diante...

			playerJobCheckpoint[playerid] = 2;
			SetPlayerCheckpoint(playerid, 1368.4954, -2173.5496, 13.4840, 3.0);
			
		}
	}

	return DisablePlayerCheckpoint(playerid); //  Toda vez que o player entrar num checkpoint, ele serб desabilitado. Mas isso aqui й opicional
}
Tentei utilizando switch, porйm ele nгo cria outros checkpoints, somente o primeiro
Reply
#6

Tente desta maneira:
PHP Code:
public OnPlayerEnterDynamicCP(playeridcheckpointid)
{
    if(
checkpointid == BusCP[0])
    {
        
DestroyDynamicCP(BusCP[0]);
        
BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
        
GameTextForPlayer(playerid"Aguarde passageiros..."30003);
        
TogglePlayerControllable(playerid,0);
        
SetTimerEx("Linhas",3000false,"i",playerid);
    }
    else if(
checkpointid == BusCP[1])
    {
        
DestroyDynamicCP(BusCP[1]);
        
BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
    }
    else if(
checkpointid == BusCP[2])
    {
        
DestroyDynamicCP(BusCP[2]);
        
BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
    }
    else
        return 
0;
        
    return 
1;

Reply
#7

Quote:
Originally Posted by FerrariL
View Post
Tente desta maneira:
PHP Code:
public OnPlayerEnterDynamicCP(playeridcheckpointid)
{
    if(
checkpointid == BusCP[0])
    {
        
DestroyDynamicCP(BusCP[0]);
        
BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
        
GameTextForPlayer(playerid"Aguarde passageiros..."30003);
        
TogglePlayerControllable(playerid,0);
        
SetTimerEx("Linhas",3000false,"i",playerid);
    }
    else if(
checkpointid == BusCP[1])
    {
        
DestroyDynamicCP(BusCP[1]);
        
BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
    }
    else if(
checkpointid == BusCP[2])
    {
        
DestroyDynamicCP(BusCP[2]);
        
BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
    }
    else
        return 
0;
        
    return 
1;

Agora ele ta chamando as funзхes do primeiro checkpoint estando no 2
Reply
#8

O que estб contido nesta public
pawn Code:
Linhas
Reply
#9

Quote:
Originally Posted by FerrariL
View Post
O que estб contido nesta public
pawn Code:
Linhas
PHP Code:
public Linhas(playerid)
{
    
TogglePlayerControllable(playerid,1);
    
GameTextForPlayer(playerid"Prossiga sua viagem"30003);
    return 
1;

Reply
#10

if - Й usado para checar uma condiзгo
else if - Caso a condiзгo acima falhe, essa vai ser checada.
else - Caso Nenhum dos casos acima acontecer, essa entra em aзгo.

PHP Code:
public OnPlayerEnterDynamicCP(playeridcheckpointid)
{
    if(
checkpointid == BusCP[0])
    {
        
BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
        
GameTextForPlayer(playerid"Aguarde passageiros..."30003);
        
TogglePlayerControllable(playerid,0);
        
SetTimerEx("Linhas",3000false,"i",playerid);
        
DestroyDynamicCP(BusCP[0]);
    }
    else if(
checkpointid == BusCP[1])
    {
        
BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
        
DestroyDynamicCP(BusCP[1]);
    }
    else if(
checkpointid == BusCP[2])
    {
        
BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
        
DestroyDynamicCP(BusCP[2]);
    }
    else 
// Esse й um debug, o problema pode nгo ser os operadores lуgicos...
    
{
        
SendClientMessage(playerid, -1"1");
    }
     return 
1;

Reply
#11

Quote:
Originally Posted by Minerva
View Post
if - Й usado para checar uma condiзгo
else if - Caso a condiзгo acima falhe, essa vai ser checada.
else - Caso Nenhum dos casos acima acontecer, essa entra em aзгo.

PHP Code:
public OnPlayerEnterDynamicCP(playeridcheckpointid)
{
    if(
checkpointid == BusCP[0])
    {
        
BusCP[1] = CreateDynamicCP(1547.3561,-2284.1187,13.4841,3.0,-1,-1,playerid,1000);
        
GameTextForPlayer(playerid"Aguarde passageiros..."30003);
        
TogglePlayerControllable(playerid,0);
        
SetTimerEx("Linhas",3000false,"i",playerid);
        
DestroyDynamicCP(BusCP[0]);
    }
    else if(
checkpointid == BusCP[1])
    {
        
BusCP[2] = CreateDynamicCP(1400.5472,-2284.7380,13.4667,3.0,-1,-1,playerid,1000);
        
DestroyDynamicCP(BusCP[1]);
    }
    else if(
checkpointid == BusCP[2])
    {
        
BusCP[3] = CreateDynamicCP(1368.4954,-2173.5496,13.4840,3.0,-1,-1,playerid,1000);
        
DestroyDynamicCP(BusCP[2]);
    }
    else 
// Esse й um debug, o problema pode nгo ser os operadores lуgicos...
    
{
        
SendClientMessage(playerid, -1"1");
    }
     return 
1;

Ele nгo chama o debug, continua da mesma forma apуs o 2 checkpoint ele chama a public Linhas e retorna para o primeiro checkpoint
Reply
#12

Qual o comando pro jogador comeзar o trabalho?
Ele que mostra o primeiro checkpoint para o player?
Reply
#13

Quote:
Originally Posted by Ermanhaut
View Post
Qual o comando pro jogador comeзar o trabalho?
Ele que mostra o primeiro checkpoint para o player?
O comando mostra um dialog, ele seleciona uma linha e comeзa.

PHP Code:
if(listitem == 0)
                {
                    
BusCP[0] = CreateDynamicCP(1601.0640,-2250.5215,13.35643.0,-1,-1,playerid,1000);
                     
SendClientMessage(playerid, -1"[SERVER] Sua rota foi marcada em seu GPS.");
                } 
Reply
#14

Alguйm ? please
Reply
#15

Tente mudar sua variбvel BusCP[] para STREAMER_TAG_CP BusCP[]
Reply
#16

Quote:
Originally Posted by Ermanhaut
View Post
Tente mudar sua variбvel BusCP[] para STREAMER_TAG_CP BusCP[]
Nada ainda, ta foda.
Reply
#17

Alguma idйia do que seja guys ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)