PDA

Просмотр полной версии : [Вопрос] Нужна функция проверки нахождения авто указанной модели в указанном радиусе



Igor_Stalker
16.06.2017, 01:09
есть ли функция которая проверяет если ли в радиусе машина с определённым ид?

Nexius_Tailer
16.06.2017, 01:16
Нет, но можно сделать цикл по машинам и проверять через IsPlayerInRangeOfPoint (если проверяется расстояние до игрока) или через VectorSize узнать до неё дистанцию, предварительно узнавая позицию машины и подставляя её в эти функции

$continue$
16.06.2017, 01:24
А под ID, что имеется ввиду? ID созданной машины или ID модели машины?

Igor_Stalker
16.06.2017, 01:26
А под ID, что имеется ввиду? ID созданной машины или ID модели машины?

ид модели машины

$continue$
16.06.2017, 01:40
Сначала хотел написать сам функцию, но потом вдруг вспомнил, что в теме vehicle foreach (http://pro-pawn.ru/showthread.php?13061-dc_foreach_veh) (итераторы автомобилей) выложена нужная Вам функция. Если, конечно не используете foreach, могу написать без него.

P.S: это не точная функция, которая Вам нужна. Она возвращает ид машины, которая находится в заданной дистанции, а вам надо конкретную.

Igor_Stalker
16.06.2017, 01:56
Сначала хотел написать сам функцию, но потом вдруг вспомнил, что в теме vehicle foreach (http://pro-pawn.ru/showthread.php?13061-dc_foreach_veh) (итераторы автомобилей) выложена нужная Вам функция. Если, конечно не используете foreach, могу написать без него.

P.S: это не точная функция, которая Вам нужна. Она возвращает ид машины, которая находится в заданной дистанции, а вам надо конкретную.

Пишите

Витёк
16.06.2017, 02:44
если под себя переделать то получиш что хочеш

CMD:getveh(playerid, params[])
{
extract params -> new Float:radius; else
return SendClientMessage(playerid, 0xFF4530FF, !"[Подсказка]: /getveh [Радиус]");

static const
str_y[] = "В радиусе %.0f м. обнаружено %i тс...",
str_n[] = "В радиусе %.0f м. транспортных средств не обнаружено";

new
Float:x,
Float:y,
Float:z,

rand = random(2),
numberofauto,

string[sizeof str_n];

if (radius > 1000.0)
return SendClientMessage(playerid, 0xFF4530FF, !"Максимальное расстояние 1000 метров");

if (!rand)
return SendClientMessage(playerid, 0xFF4530FF, !"Сбой в системе!");

for (new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
{
GetVehiclePos(i, x, y, z);
RemovePlayerMapIcon(playerid, i);

if (GetPlayerDistanceFromPoint(playerid, x, y, z) <= radius)
{
numberofauto ++;
SetPlayerMapIcon(playerid, i, x, y, z, 55, 0, MAPICON_LOCAL);
}
}

if (numberofauto)
{
SendClientMessage(playerid, 0x99dd32AA, !"[Данные получены]...");
format(string, sizeof(string), str_y, radius, numberofauto);
SendClientMessage(playerid, 0xc8d8e3AA, string);
SendClientMessage(playerid, 0x48aacbAA, !"[Радар]: Транспорт обозначен");
}
else
{
SendClientMessage(playerid, 0x99dd32AA, !"[Данные получены]...");
format(string, sizeof(string), str_n, radius);
SendClientMessage(playerid, 0xc8d8e3AA, string);
}

return 1;
}
Автор: m1n1vv

DeimoS
16.06.2017, 02:58
stock IsVehicleModelInRadius(vehiclemodel, Float:radius, Float:x, Float:y, Float:z)
{
if(!(400 <= vehiclemodel <= 611))
return 0;
for (new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
{
if(GetVehicleModel(i) != vehiclemodel)
continue;
if(floatcmp(radius, GetVehicleDistanceFromPoint(i, x, y, z) != -1)
return 1;
}
return 0;
}
Вернёт 1, если одно авто с указанным ID модели находится в указанном радиусе.
Работоспособность не проверял