PDA

Просмотр полной версии : [Вопрос] Найти ближайшее



Skuba_Lo
24.03.2014, 21:39
Вот опять не могу понять, что не так делаю. В общем в моде по городу разбросаны 20 пунктов СТО(для починки транспорта). Как сделать так, чтобы в /gps Срабатывала функция "Найти ближайшее СТО". А то я делаю и у меня постоянно показывает на СТО #1. Кто знает как сделать киньте пример далее я сам как нибудь :scratch_one-s_head:

LutherFr0st
25.03.2014, 01:24
Погугли где то видел вроде на самп вики

(Wh)AnGeL
25.03.2014, 05:49
на это есть функция которая измерняет сколько игроку до какого либо объекта если найдешь можешь попробовать совместить

DeimoS
25.03.2014, 08:19
http://wiki.sa-mp.com/wiki/GetPlayerDistanceFromPoint
Циклом прогоняешь и определяешь самую ближайшую точку.

Skuba_Lo
25.03.2014, 10:58
Измерить то она измеряет, но почему на 1 показывает, ладно попробую сам, что-нибудь придумать

DeimoS
25.03.2014, 11:04
Измерить то она измеряет, но почему на 1 показывает, ладно попробую сам, что-нибудь придумать

Что она показывает? О_о
Она отображает расстояние от игрока до определённой точки. Каждую точку по очереди записывай в переменные и потом ищи меньшее значение. Это и будет нужное тебе место

A N D R E Y
25.03.2014, 11:08
http://wiki.sa-mp.com/wiki/NPC:GetDistanceFromMeToPoint - С этой функцией полюбому химичить надо...

DeimoS
25.03.2014, 11:10
http://wiki.sa-mp.com/wiki/NPC:GetDistanceFromMeToPoint - С этой функцией полюбому химичить надо...

Get the distance between the NPC and a point.

A N D R E Y
25.03.2014, 11:12
Get the distance between the NPC and a point.
аа блин, слепой...

DeimoS
25.03.2014, 11:29
Сейчас специально проверил. Функция полностью рабочая. Виной всему ваши руки, а не функция.

//Это в команду
format(varstring, sizeof(varstring), "%.0f",GetPlayerDistanceFromPoint(playerid, 0, 0, 0));
SendClientMessage(playerid, 0xFFFFFFFF, varstring);
if(GetPlayerDistanceFromPoint(playerid, 0, 0, 0) >= 10) return SendClientMessage(playerid, 0xFF000FF, "Дальше 10 метров");
else return SendClientMessage(playerid, 0xFF000FF, "Ближе 10 метров");

http://rghost.ru/53329950/image.png


http://rghost.ru/53329950/image.png

Skuba_Lo
25.03.2014, 12:15
Я не говорю, что функция не рабочая, я говорю как сделать так, чтобы вычислить минимальную дистанцию из 20 точек и указать именно на неё.

DeimoS
25.03.2014, 12:44
Я не говорю, что функция не рабочая, я говорю как сделать так, чтобы вычислить минимальную дистанцию из 20 точек и указать именно на неё.

Создаём массив с 20 ячейками и 20 раз делаем вызов функции, указывая координаты тех точек и записывая значение, которое вернула функция, в наш массив. Далее ищем среди записанных значений самое маленькое (математика, 1 класс) и радуемся жизни.

DeimoS
25.03.2014, 14:35
В общем, как-то так:

new Float:StationPos[][] =
{
{11.0, 22.0, 1.0},
{33.0, 44.0, 1.0},
{55.0, 66.0, 1.0},
{77.0, 88.0, 1.0}
};
enum StationPosInfo
{
Float:Position[2],
StationId
};
new StantionInfo[StationPosInfo];


stock FindTheNearestStation(playerid)
{
StantionInfo[Position][0] = GetPlayerDistanceFromPoint(playerid, StationPos[0][0], StationPos[0][1], StationPos[0][2]);
for(new i = 1; i < sizeof(StationPos); ++i)
{
if(StantionInfo[Position][0] <= (StantionInfo[Position][1] = GetPlayerDistanceFromPoint(playerid, StationPos[i][0], StationPos[i][1], StationPos[i][2]))) continue;
StantionInfo[Position][0] = StantionInfo[Position][1];
StantionInfo[StationId] = i;
}
SetPlayerCheckpoint(playerid, StationPos[StantionInfo[StationId]][0], StationPos[StantionInfo[StationId]][1], StationPos[StantionInfo[StationId]][2], 3.0);
return 1;
}

Skuba_Lo
26.03.2014, 17:40
Спасибо, это мне и надо было:i-m_so_happy: