// функция движения по указанному маршруту
// path - массив вида [x1,y1,z1, x2,y2,z2, ...]
function PathMoveTo(path: array of integer): boolean;
var i, start: integer;
begin
result:= false;
if (Length(path) >= 3) and (Length(path) mod 3 = 0) then begin // сначала проверяем, что заданный маршрут задан корректно
start:= 0; // задаем индекс ближайшей точки по умолчанию - 0
for i:= 0 to Length(path) do begin // пробегаемся по массивку координат
if (i mod 3 <> 0) then continue; // работаем только с каждым 3им индексом (ищем координаты X)
// если расстояние до текущей проверяемой точки < расстояния до точки, которую мы пометили как стартовую в маршруте, то
// запоминаем текущую точку как новую стартовую точку
if (User.DistTo(path[i], path[i+1], path[i+2]) < User.DistTo(path[start], path[start+1], path[start+2])) then start:= i;
end;
end else exit; // если массив координат некорректен, то сразу выходим
for i:= start to Length(path)-1 do begin // теперь пробегаемся по маршруту начиная с ближайшей к нам точки и до конца
if (i mod 3 <> 0) then continue; // работаем только с каждым 3им индексом (ищем координаты X)
if (User.Dead) then exit; // если мы мертвы - прекращаем выполнение функции
result:= Engine.MoveTo(path[i], path[i+1], path[i+2]); // двигаемся в координаты очередной точки маршрута
end;
end;
var
path_from_GK_to_NPC: array of integer = [108869, -173711, -579, 108592, -173446, -579, 108211, -173558, -579];
begin
// в скрипте вызываем функцию либо явно подавая массив координат как аргумент:
PathMoveTo([108869, -173711, -579, 108592, -173446, -579, 108211, -173558, -579, 107717, -173864, -488, 107704, -174198, -430, 108325, -174110, -436]);
// либо используя заранее объявленную переменную:
PathMoveTo(path_from_GK_to_NPC);
end.