SA-MP Forums Archive
[Ajuda] Setar variбvel no 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] Setar variбvel no IsPlayerInRangeOfPoint (/showthread.php?tid=629197)



Setar variбvel no IsPlayerInRangeOfPoint - SirUndead - 22.02.2017

Seguinte, quero implementar no meu sistema de /barreira /cone e /prego que o cara sу pode removк-los (/rbr /rcon /rpr) se estiver perto de onde eles foram criados para ficar mais realista.

Segue cуdigo que salva a posiзгo de onde foi criado em uma variбvel no caso sу da barreira:
pawn Код:
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
PlayerInfo[playerid][pRoadblock] = CreateDynamicObject(981, X, Y, Z, 0.0, 0.0, A+180);
PlayerInfo[playerid][pRoadblockp] = GetPlayerPos(playerid, X, Y, Z);  // CRIEI ISSO PRA SALVAR SУ O X, Y, Z
Eu pensei em usar isto pra verificar se o cara estб perto do objeto criado pra poder removк-lo:
pawn Код:
new posicao = PlayerInfo[playerid][pRoadblockp];
if(IsPlayerInRangeOfPoint(playerid, 7.0, posicao))
{
   cуdigo que remove
}
Acontece que o "IsPlayerInRangeOfPoint" nгo reconhece a variбvel "posicao" e da este erro:
"warning 202: number of arguments does not match definition"

Criei o "[pRoadblockp]" pra pegar sу a X, Y, Z, uma vez que o "[pRoadblock]" pega mais informaзгo e eu nгo sei puxar sу o X, Y, Z dele depois pra setar no "IsPlayerInRangeOfPoint".

Sabe algum mйtodo pra resolver isto? Muito obrigado por sua atenзгo


Re: Setar variбvel no IsPlayerInRangeOfPoint - MultiKill - 22.02.2017

A funзгo GetPlayerPos retorna true(1) ou false(1) e nгo uma array contendo x, y e z.

Vocк deve passar 3 variбveis na funзгo fora o id do jogador, para pegar as coordenadas:

PHP код:
GetPlayerPos(0pxpypz);
/*
A variбvel px vai receber a coordenada x do jogador id 0
A variбvel py vai receber a coordenada y do jogador id 0
A variбvel pz vai receber a coordenada z do jogador id 0
*/ 
A funзгo IsPlayerInRangeOfPoint precisa passar 5 parвmetros: id do jogador, o range, posiзгo x, posiзгo y e posiзгo z e nгo apenas 3 parвmetros como vocк esta fazendo.


Para usar uma array para pegar as coordenadas:
PHP код:
new Floatpos[3];
GetPlayerPos(playeridpos[0], pos[1], pos[2]);
/*
pos[0] - contem coordenada x
pos[1] - contem coordenada y
pos[2] - contem coordenada z
*/ 



Re: Setar variбvel no IsPlayerInRangeOfPoint - Cheleber_Pausini - 22.02.2017

Acho que assim funcionara...

PHP код:
new Float:XFloat:YFloat:ZFloat:A;
GetPlayerPos(playeridXYZ);
GetPlayerFacingAngle(playeridA);
PlayerInfo[playerid][pRoadblock] = CreateDynamicObject(981XYZ0.00.0A+180);
GetPlayerPos(playeridPlayerInfo[playerid][pRoadblockX], PlayerInfo[playerid][pRoadblockY], PlayerInfo[playerid][pRoadblockZ]); 
if(
IsPlayerInRangeOfPoint(playerid7.0,  PlayerInfo[playerid][pRoadblockX], PlayerInfo[playerid][pRoadblockY], PlayerInfo[playerid][pRoadblockZ]))
{
   
RemoveRoadblock(playerid);
   
SendClientMessage(playeridCOLOR_GREEN"  * Barreira retirada.");
   return 
1;
}
else
{
   
SendClientMessage(playeridCOLOR_GREEN"  * Vocк nгo estб prуximo a sua barreira.");

No seu enum adicione:

PHP код:
enum pInfo
{
    
Float:pRoadblockX,
    
Float:pRoadblockY,
    
Float:pRoadblockZ,
}
new 
PlayerInfo[MAX_PLAYERS][pInfo]; 



Re: Setar variбvel no IsPlayerInRangeOfPoint - SirUndead - 22.02.2017

Multikill, obrigado por sua resposta.

Entгo no /barreria setei isso:
Код:
		new Float: pos[3];
		GetPlayerPos(playerid, pos[0], pos[1], pos[2]); 
		PlayerInfo[playerid][pRoadblockp] = pos;
E no /retirarbarreira:
Код:
		new posicao = PlayerInfo[playerid][pRoadblockp];
		if(IsPlayerInRangeOfPoint(playerid, 7.0, posicao))
		{
			RemoveRoadblock(playerid);
			SendClientMessage(playerid, COLOR_GREEN, "  * Barreira retirada.");
			return 1;
		}
		else
		{
			SendClientMessage(playerid, COLOR_GREEN, "  * Vocк nгo estб prуximo a sua barreira.");
		}
Porque eu preciso que a posiзгo do jogador seja salva no "[pRoadblockp]" para que ela possa ser puxada e verificado no /retirarbarreira, contudo, me retornou estes erros:
".pwn(40645) : error 006: must be assigned to an array < - LINHA QUE SETEI "PlayerInfo[playerid][pRoadblockp] = pos;"
.pwn(4068 : warning 202: number of arguments does not match definition < -LINHA DO "IsPlayerInRangeOfPoint"
.pwn(4068 : warning 202: number of arguments does not match definition"


Re: Setar variбvel no IsPlayerInRangeOfPoint - Cheleber_Pausini - 22.02.2017

Use o meu cуdigo que provavelmente estб a funcionar, nгo testei, mas como disse o MultiKill "A funзгo GetPlayerPos retorna true(1) ou false(1) e nгo uma array contendo x, y e z.", por isso tens que getar cada array X , Y e Z


Re: Setar variбvel no IsPlayerInRangeOfPoint - SirUndead - 22.02.2017

Cheleber_Pausini
Eu jб tinha pensado no que o Multikill disse antes mesmo de criar o tуpico, mas pedi ajuda pois nгo me pareceu ser certo setar Z Y X separado como vocк mostrou.
Acabo de testar do seu modo e funcionou perfeitamente.
Digo novamente, muito obrigado pela atenзгo de todos, REP + а vocкs.


Re: Setar variбvel no IsPlayerInRangeOfPoint - JeffSantos2 - 22.02.2017

Faz assim у...

Код:
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
PlayerInfo[playerid][pRoadblock] = CreateDynamicObject(981, X, Y, Z, 0.0, 0.0, A+180);
E o /retirarbarreira faz assim...

Код:
new Float:X, Float:Y, Float:Z;
GetDynamicObjectPos(PlayerInfo[playerid][pRoadblock], X, Y, Z);
if(!IsPlayerInRangeOfPoint(playerid, 7.0, X, Y, Z)) return SendClientMessage(playerid, 0xFF0000AA, "Vocк esta muito distante da barreira.");
//cуdigу para remover a barreira
Note que no /retirarbarreira, apenas peguei a posiзгo que o objeto esta no jogo, e chequei se ele esta no raio de 7 metros, sem utilizar o "PlayerInfo[playerid][pRoadblockp] = pos;", logo ficando mais simples.


Re: Setar variбvel no IsPlayerInRangeOfPoint - SirUndead - 22.02.2017

Quote:
Originally Posted by JeffSantos2
Посмотреть сообщение
Faz assim у...

Код:
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
PlayerInfo[playerid][pRoadblock] = CreateDynamicObject(981, X, Y, Z, 0.0, 0.0, A+180);
E o /retirarbarreira faz assim...

Код:
new Float:X, Float:Y, Float:Z;
GetDynamicObjectPos(PlayerInfo[playerid][pRoadblock], X, Y, Z);
if(!IsPlayerInRangeOfPoint(playerid, 7.0, X, Y, Z)) return SendClientMessage(playerid, 0xFF0000AA, "Vocк esta muito distante da barreira.");
//cуdigу para remover a barreira
Note que no /retirarbarreira, apenas peguei a posiзгo que o objeto esta no jogo, e chequei se ele esta no raio de 7 metros, sem utilizar o "PlayerInfo[playerid][pRoadblockp] = pos;", logo ficando mais simples.

Caramba, 300x mais simples. Nгo sabia da existкncia desse comando "GetDynamicObjectPos" ainda mais de como usб-lo. Muito obrigado por sua ajuda.