SA-MP Forums Archive
FNPC(NPC) Есть ли преграда ? - 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: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: FNPC(NPC) Есть ли преграда ? (/showthread.php?tid=659696)



FNPC(NPC) Есть ли преграда ? - jakebat - 13.10.2018

Привет)
Есть ли не костыльный способ сделать проверку, если бот движется с точки 'А' в точку 'Б' и у него есть ВПЕРЕДИ преграда (машина ,либо игрок, либо игрок в машине)?
(КолАндрес не действует на игроков)
Может есть какой-то рейкаст?))


Re: FNPC(NPC) Есть ли преграда ? - Mutha_X - 13.10.2018

Почему бы просто самому не написать проверку на пересечение с ограничивающим цилиндром / хитбоксом персонажа?


Re: FNPC(NPC) Есть ли преграда ? - jakebat - 13.10.2018

Можно все это сделать через с++, а через павно нельзя ведь?


Re: FNPC(NPC) Есть ли преграда ? - eakwarp - 13.10.2018

Quote:
Originally Posted by jakebat
View Post
Можно все это сделать через с++, а через павно нельзя ведь?
Почему нельзя? Вы, блдж, серьезно? У меня к примеру есть вот такая, совершенно элементарная штука, останавливающая неписей перед машинами.

forward check_collision();
public check_collision()
{

new Float:mx, Float:my, Float:mz;
new Float:dist;
new pid;

foreach(FCNPC,i)
{
if(!FCNPC_IsStreamedForAnyone(i))
continue;

dist = 3.5;
FCNPC_GetPosition(i, mx, my, mz);
pid = FCNPC_GetClosestPlayer(mx, my, mz, dist);
if (pid == -1)
{
continue;
}
if(GetPlayerState(pid)==PLAYER_STATE_DRIVER)
{
if(WNPCStopped[i]==0)
{
FCNPC_Stop(i);
WNPCStopped[i]=1;
SetTimerEx("WNPCWalk", 10000, 0, "d", i);
}
}

}
return 1;
}


Re: FNPC(NPC) Есть ли преграда ? - ZiGGi - 13.10.2018

В FCNPC 2.0 есть такая функция https://github.com/ziggi/FCNPC/blob/...tions.cpp#L439
Она находит сущность между двумя позициями. За одну позицию берётся позиция бота, за вторую - координаты перед ним. Её можно перевести на Pawn и использовать.


Re: FNPC(NPC) Есть ли преграда ? - jakebat - 14.10.2018

А если взять проще цикл, и проверять есть ли либо игрок либо машина перед игроком? Например радиусом или дичь?


Re: FNPC(NPC) Есть ли преграда ? - jakebat - 14.10.2018

Quote:
Originally Posted by eakwarp
View Post
Почему нельзя? Вы, блдж, серьезно? У меня к примеру есть вот такая, совершенно элементарная штука, останавливающая неписей перед машинами.

forward check_collision();
public check_collision()
{

new Float:mx, Float:my, Float:mz;
new Float:dist;
new pid;

foreach(FCNPC,i)
{
if(!FCNPC_IsStreamedForAnyone(i))
continue;

dist = 3.5;
FCNPC_GetPosition(i, mx, my, mz);
pid = FCNPC_GetClosestPlayer(mx, my, mz, dist);
if (pid == -1)
{
continue;
}
if(GetPlayerState(pid)==PLAYER_STATE_DRIVER)
{
if(WNPCStopped[i]==0)
{
FCNPC_Stop(i);
WNPCStopped[i]=1;
SetTimerEx("WNPCWalk", 10000, 0, "d", i);
}
}

}
return 1;
}
Это в принципе понятно, но будет ли оно работать точно? Если например у меня бот водитель и справа встать, будет ли он дальше стопаться или поедет?


Re: FNPC(NPC) Есть ли преграда ? - jakebat - 14.10.2018

Quote:
Originally Posted by ZiGGi
View Post
В FCNPC 2.0 есть такая функция https://github.com/ziggi/FCNPC/blob/...tions.cpp#L439
Она находит сущность между двумя позициями. За одну позицию берётся позиция бота, за вторую - координаты перед ним. Её можно перевести на Pawn и использовать.
Спасибо, переведу и буду использовать)