FNPC(NPC) Есть ли преграда ?
#1

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

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

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

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;
}
Reply
#5

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

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

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;
}
Это в принципе понятно, но будет ли оно работать точно? Если например у меня бот водитель и справа встать, будет ли он дальше стопаться или поедет?
Reply
#8

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


Forum Jump:


Users browsing this thread: 1 Guest(s)