[Ajuda] Setar variбvel no IsPlayerInRangeOfPoint
#1

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
Reply
#2

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
*/ 
Reply
#3

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]; 
Reply
#4

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"
Reply
#5

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
Reply
#6

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.
Reply
#7

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.
Reply
#8

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)