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(0, px, py, pz);
/*
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 Float: pos[3];
GetPlayerPos(playerid, pos[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: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);
GetPlayerPos(playerid, PlayerInfo[playerid][pRoadblockX], PlayerInfo[playerid][pRoadblockY], PlayerInfo[playerid][pRoadblockZ]);
if(IsPlayerInRangeOfPoint(playerid, 7.0, PlayerInfo[playerid][pRoadblockX], PlayerInfo[playerid][pRoadblockY], PlayerInfo[playerid][pRoadblockZ]))
{
RemoveRoadblock(playerid);
SendClientMessage(playerid, COLOR_GREEN, " * Barreira retirada.");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_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.