SA-MP Forums Archive
[Ajuda] IsPlayerInRangeOfPoint - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] IsPlayerInRangeOfPoint (/showthread.php?tid=616550)



IsPlayerInRangeOfPoint - TheBob - 06.09.2016

opa eai galerinha do forum samp tudo bem com vocкs?
to quebrando a cabeзa com isso aqui
qnd o player entra em um local e esse local tem 7.0 de raio, ai eu quero que apareзa um textdraw pra ele, qnd ele ficar nessa area, e tambйm ativar uma booleana para true, e se ele sair a booleana volta para false. n sei como fazer isso, no onplayerupdate pode floodar serб que no ongamemodeinit da certo?


Re: IsPlayerInRangeOfPoint - LockedLucas - 06.09.2016

pra nгo floodar й sу criar outra variбvel '-'


Re: IsPlayerInRangeOfPoint - F1N4L - 06.09.2016

IsPlayerInRangeOfPoint + SetTimer = Soluзгo

@LockedLucas

HAHAHAHAHA


Re: IsPlayerInRangeOfPoint - TheBob - 06.09.2016

hmm nгo tinha pensado nisso boa


Re: IsPlayerInRangeOfPoint - LockedLucas - 06.09.2016

Quote:
Originally Posted by TheBob
Посмотреть сообщение
hmm nгo tinha pensado nisso boa
na minha soluзгo ou na do F1N4L ?


Re: IsPlayerInRangeOfPoint - F1N4L - 06.09.2016

Quote:
Originally Posted by LockedLucas
Посмотреть сообщение
na minha soluзгo ou na do F1N4L ?
Ele jб estб criando uma variбvel booleana para realizar a verificaзгo, certo? Entгo nгo hб necessidade de haver outra variбvel pra checar ou seja lб qual foi sua lуgica, enfim...

Ao meu ver nem haveria necessidade de usar uma variбvel, pois se verificar se estб ou nгo na бrea jб й o suficiente.

@topic

OnPlayerUpdate deve ser sempre a ultima opзгo para ser utilizado, por isso segue um cуdigo exemplo de como seria com timer e sem variбvel:

Код:
main()
{
	SetTimer("MostraTD", 1000, true);
}

forward MostraTD();
public MostraTD()
{
	for(new i; i < MAX_PLAYERS; ++ i)
	{
		if(IsPlayerInRangeOfPoint(i, 7.0, 0.0, 0.0, 0.0))
		{
			//Mostra o TD
		}
		else
		{
			//Oculta TD
		}
	}

	return true;
}



Re: IsPlayerInRangeOfPoint - TheBob - 07.09.2016

Cara realmente vlw, +rep
pensava que o main() sу fosse usado para isso:
Код:
main()
{
	print("\n---------------------------------------");
	print("Running New.pwn - by the SA-MP team\n");
	print("---------------------------------------\n");
}
Thank for your comments xD


Re: IsPlayerInRangeOfPoint - Bruno13 - 07.09.2016

O que F1NAL apresentou й um dos mйtodos, mas acho que hб maneiras melhores de nгo se utilizar tanto processamento...
PHP код:
static 
    
bool:spawned[MAX_PLAYERS],
    
bool:playerInPlace[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
spawned[playerid] = false;
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    if(!
spawned[playerid])
    {
        
spawned[playerid] = true;
        
playerInPlace[playerid] = false;
        
SetTimerEx("CheckPlayerInPlace"2000false"i"playerid);
    }
    return 
1;
}
forward CheckPlayerInPlace(playerid);
public 
CheckPlayerInPlace(playerid)
{
    if(
IsPlayerInRangeOfPoint(playerid7.00.00.00.0))
    {
        if(!
playerInPlace[playerid])
        {
            
playerInPlace[playerid] = true;
            
//Mostra o TD
        
}
    }
    else if(
playerInPlace[playerid])
    {
        
playerInPlace[playerid] = false;
        
//Oculta TD
    
}

Na lуgica acima, verificarб de 2 em 2 segundos se o jogador estб no local indicado, logo, caso esteja, a TextDraw serб mostrada apenas uma vez, e quando sair, a TextDraw serб ocultada tambйm uma ъnica vez.

Altere o intervalo do timer a seu gosto, mas creio que 2 segundos seja suficiente.


Re: IsPlayerInRangeOfPoint - RiqueP - 07.09.2016

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
O que F1NAL apresentou й um dos mйtodos, mas acho que hб maneiras melhores de nгo se utilizar tanto processamento...
PHP код:
static 
    
bool:spawned[MAX_PLAYERS],
    
bool:playerInPlace[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
spawned[playerid] = false;
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    if(!
spawned[playerid])
    {
        
spawned[playerid] = true;
        
playerInPlace[playerid] = false;
        
SetTimerEx("CheckPlayerInPlace"2000false"i"playerid);
    }
    return 
1;
}
forward CheckPlayerInPlace(playerid);
public 
CheckPlayerInPlace(playerid)
{
    if(
IsPlayerInRangeOfPoint(playerid7.00.00.00.0))
    {
        if(!
playerInPlace[playerid])
        {
            
playerInPlace[playerid] = true;
            
//Mostra o TD
        
}
    }
    else if(
playerInPlace[playerid])
    {
        
playerInPlace[playerid] = false;
        
//Oculta TD
    
}

Na lуgica acima, verificarб de 2 em 2 segundos se o jogador estб no local indicado, logo, caso esteja, a TextDraw serб mostrada apenas uma vez, e quando sair, a TextDraw serб ocultada tambйm uma ъnica vez.

Altere o intervalo do timer a seu gosto, mas creio que 2 segundos seja suficiente.
Na verdade, no exemplo do F1NAL criaria apenas um time para ver se estб ou nгo na бrea. No seu caso, criaria mais de um.


Re: IsPlayerInRangeOfPoint - TheBob - 07.09.2016

Й um bom Exemplo tambйm, Agradece.