Loop - virtuS_ - 24/05/2021
Fiz um loop através de três posições, para verificar qual destas estão na range de 1000.0 do jogador, mas, está pegando somente a primeira coordenada(LV), e quando perto das outras, exibe a frase que não estou no alcance. Alguém consegue verificar?
Código: new Float:x, Float:y, Float:z;
for(new i = 0; i < sizeof(ACourierDepots); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1000.0, ACourierDepots[i][DepotX], ACourierDepots[i][DepotY], ACourierDepots[i][DepotZ]))
{
x = ACourierDepots[i][DepotX];
y = ACourierDepots[i][DepotY];
z = ACourierDepots[i][DepotZ];
break;
}
else { return SendClientMessage(playerid, -1, "* Fora do alcance de depósitos."); }
}
Código: enum TCourierDepots
{
Float:DepotX,
Float:DepotY,
Float:DepotZ
}
new ACourierDepots[][TCourierDepots] =
{
{1060.5903, 1915.3047, 10.8203}, // LV
{-1862.2478, -143.3715, 11.9051}, // SF
{797.6805, -617.8581, 16.3359} // LS
};
RE: Loop - ProKillerPa - 24/05/2021
Boa tarde.
Sim, seu codigo possui uns errinhos, veja só: Em loops quando voce quer imprimir uma mensagem como a sua que o jogador nao está proximo de um deposito por exemplo, voce precisa usar a criatividade. Eu geralmente uso uma variavel e atribuo um valor a ela, e depois verifico se é igual a 0 ou igual a 1. O Problema do seu script é o seguinte: Voce identifica no loop que começa em 0, que é a coordenada de LV, até aí OK. Porém voce usa um else logo abaixo, fazendo com que o script encerre o loop através do return caso o jogador não esteja na coordenada encontrada pelo primeiro giro do loop ( lv ).
Para sanar seu problema, voce fará o seguinte:
Código PHP: new Float:x, Float:y, Float:z, pqp = 0; for(new i = 0; i < sizeof(ACourierDepots); i++) { if(IsPlayerInRangeOfPoint(playerid, 1000.0, ACourierDepots[i][DepotX], ACourierDepots[i][DepotY], ACourierDepots[i][DepotZ])) { x = ACourierDepots[i][DepotX]; y = ACourierDepots[i][DepotY]; z = ACourierDepots[i][DepotZ];
pqp++;
SendClientMessage(playerid, -1, "Voce esta no Range 1000.0 de um dos 3 depositos."); break; } }
if(pqp == 0) SendClientMessage(playerid, -1, "* Fora do alcance de depósitos.");
RE: Loop - virtuS_ - 25/05/2021
(24/05/2021 17:44)ProKillerPa Escreveu: Boa tarde.
Sim, seu codigo possui uns errinhos, veja só: Em loops quando voce quer imprimir uma mensagem como a sua que o jogador nao está proximo de um deposito por exemplo, voce precisa usar a criatividade. Eu geralmente uso uma variavel e atribuo um valor a ela, e depois verifico se é igual a 0 ou igual a 1. O Problema do seu script é o seguinte: Voce identifica no loop que começa em 0, que é a coordenada de LV, até aí OK. Porém voce usa um else logo abaixo, fazendo com que o script encerre o loop através do return caso o jogador não esteja na coordenada encontrada pelo primeiro giro do loop ( lv ).
Para sanar seu problema, voce fará o seguinte:
Código PHP: new Float:x, Float:y, Float:z, pqp = 0; for(new i = 0; i < sizeof(ACourierDepots); i++) { if(IsPlayerInRangeOfPoint(playerid, 1000.0, ACourierDepots[i][DepotX], ACourierDepots[i][DepotY], ACourierDepots[i][DepotZ])) { x = ACourierDepots[i][DepotX]; y = ACourierDepots[i][DepotY]; z = ACourierDepots[i][DepotZ];
pqp++;
SendClientMessage(playerid, -1, "Voce esta no Range 1000.0 de um dos 3 depositos."); break; } }
if(pqp == 0) SendClientMessage(playerid, -1, "* Fora do alcance de depósitos.");
Foram erros bobos, muito obrigado! +rep
|