// function of movement on the specified route
// path - array view [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 // first we check that the given route is set correctly
start:= 0; // set the index of the nearest point by default - 0
for i:= 0 to Length(path) do begin // go over the array of coordinates
if (i mod 3 <> 0) then continue; // work only with every third index (we are looking for X coordinates)
// if the distance to the current point being checked is < distance to the point we marked as the starting point in the route, then
// remember the current point as a new starting point
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; // if the coordinate array is incorrect, then immediately exit
for i:= start to Length(path)-1 do begin // now we are going over the route from the point closest to us and to the end
if (i mod 3 <> 0) then continue; // work only with every third index (we are looking for X coordinates)
if (User.Dead) then exit; // if we are dead, stop the function
result:= Engine.MoveTo(path[i], path[i+1], path[i+2]); // move to the coordinates of the next point of the route
end;
end;
var
path_from_GK_to_NPC: array of integer = [108869, -173711, -579, 108592, -173446, -579, 108211, -173558, -579];
begin
// in the script, call the function either by explicitly supplying an array of coordinates as an argument:
PathMoveTo([108869, -173711, -579, 108592, -173446, -579, 108211, -173558, -579, 107717, -173864, -488, 107704, -174198, -430, 108325, -174110, -436]);
// or using a previously declared variable:
PathMoveTo(path_from_GK_to_NPC);
end.