PDA

Просмотр полной версии : [Plugin] Инвестигатор



L0ndl3m
04.05.2014, 19:03
Инвестигатор 0.14v

Введение:

Данный плагин позволяет рассчитать маршрут из точки А в точку Б на карте Сан-Андреас (дороги, и не только).
Он использует встроенный MapAndreas (без режима буфера) и алгоритм (от Джастина Хейес-Джонса), с помощью этого алгоритма вы можете рассчитать маршруты везде (кроме воды).
Плагин также использует отдельный поток для расчёта маршрута.



Алгоритм:
http://ihost.pro-pawn.ru/image.php?di=2M9E

Установка


Закиньте файл "PathFinder.dll" (для windows) или "PathFinder.so" (для linux) в вашу папку с плагинами (plugins)
Закиньте файл "PathFinder.inc" в вашу папку с инклюдами ("pawno/includes")
Добавьте плагин "PathFinder" ко всем плагинам в файл "server.cfg"


Автовызываемые функции
Этот плагин использует только один колбэк...


OnPathCalculated(routeid, success, nodes[], nodes_size)

Параметры:

routeid <- ID рассчитанного маршрута
success <- Удачно ли расчан маршрут, вернёт 1, если успешно, 0 если нет
nodes[] <- ID узла на рассчитанном маршруте
nodes_size <- возвращает размер от "nodes[]"


Пример:


public OnPathCalculated(routeid, success, nodes[], nodes_size)
{
SendClientMessageToAll(-1, "Маршрут расчитан.");
if(success == 1)
{
new
i = nodes_size,
Float: path_x,
Float: path_y,
Float: path_z
;
do
{
--i;
PathFinder_GetNodePos(nodes[i], path_x, path_y, path_z);
printf("ID маршрута: %d, ID узла: %d. Координаты: X: %f, Y: %f, Z: %f", i, nodes[i], path_x, path_y, path_z);
}
while(i);
}
return 1;
}

Внимание! Когда расчёт рассчитан неудачно, массив nodes[] создаётся только с одним индексом со значением равным -1 (nodes_size = 1).

Нативные функции

PathFinder_Init

PathFinder_Init(Float: zdifference = 2.0, maxnodes = 10000);

Параметры:

zdifference <- максимальная разница по высоте (для расчёта)
maxnodes <- максимальное количество узлов для расчёта пути

Эта функция устанавливает плагин (рекомендуется).

PathFinder_FindWay

PathFinder_FindWay(routeid, Float: start_x, Float: start_y, Float: end_x, Float: end_y, step_limit = -1);

Параметры:

routeid <- ID маршрута
start_x <- Начала позиция на оси X
start_y <- Начала позиция на оси Y
end_x <- Конечная позиция на оси X
end_y <- Конечная позиция на оси Y
step_limit <- Количество шагов для расчёта ограничено. Если вы установите -1, плагин будет работать в нормальном режиме (без лимита). Если рассчитываемый маршрут достигнет лимита, рассчитывание прекратится и плагин вернёт маршрут (максимальное количество возможноых узло = step_limit - 1).

Эта функция расчитывает путь из точки А в точку Б.

PathFinder_GetNodePos

PathFinder_GetNodePos(nodeid, &Float: x, &Float: y, &Float: z);

Параметры:

nodeid <- ID узла
x <- Позиция узла на оси X
y <- Позиция узла на оси Y
z <- Позиция узла на оси Z

Эта функция возвращает позицию узла на осях: X, Y, Z

Внимание!

Возвращаемое значение Z с точностью до нескольких сантиметров от практического положения земной поверхности

Если вы хотите использовать это для телепортов, ботов, т.д, добавьте 1.0 вместо аргумента X

PathFinder_SetTickRate

PathFinder_SetTickRate(rate = 5);

Параметры:
rate

Эта функция устанавливает скорость тактов для потоков связи. Значение по умолчанию 5 мс. Плагин использует скорость для вывода рассчитанного пути (не для расчёта).

Видео
Пример использования...

http://www.youtube.com/watch?v=QwQQFVg_9qY

http://www.youtube.com/watch?v=UcldFGcaQO4

http://www.youtube.com/watch?v=lmsGNk7k2k8

Загрузка

Инклюд и Плагин (https://dl.dropbox.com/u/15340809/PathFinder0.14v.zip)
Исходный код (https://dl.dropbox.com/u/15340809/PathFinder0.14v-src.zip)


Автор: Pamdex
Перевод: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)
Оригинал: http://forum.sa-mp.com/showthread.php?t=427227 (http://forum.sa-mp.com/showthread.php?t=427227)

Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)

Копирование данной статьи без разрешения автора запрещено!

bredvix
04.05.2014, 23:38
Интересная вещица. :)

#Contini
05.05.2014, 15:25
Зачетная штука. Молодец.