From Stealth Client

Jump to: navigation, search

PathFinding

CalcDir

function CalcDir(Xfrom, Yfrom, Xto, Yto:Integer):Byte

Returns the direction for the step from point(Xfrom, Yfrom) to the point(Xto, Yto). If Xfrom = Xto and Yfrom = Yto function will return 100.

Example 1:

Step(CalcDir(GetX(Self), GetY(Self), GetX(Self) +1, GetY(Self)), True);


ClearBadLocationList

procedure ClearBadLocationList

Clears the list of impassable points generated:

  • As a result of the function SetBadLocation
  • If three attempts to step on one and the same point - unsuccessful.


ClearBadObjectList

procedure ClearBadObjectList

Clears the list of impassable objects created by:

  • As a result of the function SetBadObject
  • If three attempts to step on one and the same point - unsuccessful.


Dist

function Dist(X1, Y1, X2, Y2:Word):Word

Returns the distance between points(X1, Y1), and(X2, Y2).

Example 1:

if (Dist(GetX(Self), GetY(Self), GetX(creatureID), GetY(creatureID)) > 3 then
  AddToSystemJournal(GetName(creatureID) + 'too far');
end;

GetPathArray

function GetPathArray(DestX:Word; DestY:Word; Optimized:Boolean; Accuracy:integer; var PathArray:TPathArray):Integer;

This function calculates the route to a point and DestX DestY and fills in a special array TPathArray coordinates of the points through which you can reach the goal.

  • DestX - X coordinate of the goal of
  • DestY - Y coordinate of the goal of
  • Optimized - if True will be more complex ways of rendering, so it is recommended to include only a distance of up to 200 tiles.Optimizd option left for backward compatibility, see Doc:Api/MoveHeuristicMult
  • Accuracy - Accuracy of approximation:0 - straight to the point, 1 - close to the radius of one tile, etc. The length is limited to 1000 tiles.
  • PathArray - an array of type TPathArray.
  • Returns the number of steps to the goal.

mPathArr:TPathArray; an array of type TPathArray that is filled with elements that have two properties X and Y.

Example:

function easyMoveXY(X, Y:integer; Optimized:boolean; Accuracy:Integer; Running:boolean):boolean; 
var 
   StepCnt, i:Integer; 
   mPathArr:TPathArray;
 
Begin 
Result:= false; 
While true do 
   begin 
   '' AddToSystemJournal('pathfinding ...') 
   StepCnt:= GetPathArray(X, Y, Optimized, Accuracy, mPathArr); 
   If StepCnt<0 then Exit; 
   If StepCnt = 0 then 
      begin 
      Result:= true; 
      Exit; 
      end; 
   For i:= 0 to StepCnt do 
      begin 
      If Not IsWorldCellPassable(getX(self), getY(self), mPathArr [i].X, mPathArr [i].Y, WorldNum, getZ(self)) then Break; 
      If Not MoveToPoint(mPathArr [i].X, mPathArr [i].Y, Running) then Break; 
      If Dist(X,Y)<=Accuracy then 
         begin 
    AddToSystemJournal('Location reached!'); 
    Result:= true; 
    Exit; 
    end; 
      end; 
    end; 
End;

GetPathArray3D

function GetPathArray3D(StartX, StartY:Word; StartZ:Shortint; FinishX, FinishY:Word; FinishZ:Shortint; WorldNum:Byte; AccuracyXY, AccuracyZ:Integer; Run:Boolean; var PathArray :TPathArray):Integer

This function calculates the route to a point FinishX, FinishY and FinishZ and fills in a special array TPathArray coordinates of the points through which you can reach the goal.

  • StartX, StartY, StartZ - the coordinates of where the route will begin.
  • FinishX, FinishY, FinishZ - coordinate of the final destination.
  • WorldNum - the number for which the world will compute the route.
  • AccuracyXY, AccuracyZ - precision approach to end point:0 - straight to the point, 1 - close to the radius of one tile, etc. Possible values: AccuracyXY - 0..20, AccuracyZ - 0..255
  • Run - whether the character is running on this route or walk(you need to optimize the turns when driving).
  • PathArray - an array of type TPathArray.
  • Returns the number of steps to the goal.

GetRunMountTimer

function GetRunMountTimer : Word

Timer to slow\speed up walking\running with Move* functions

GetRunUnMountTimer

function GetRunUnMountTimer : Word

Timer to slow\speed up walking\running with Move* functions

GetWalkMountTimer

function GetWalkMountTimer : Word

Timer to slow\speed up walking\running with Move* functions

GetWalkUnmountTimer

function GetWalkUnmountTimer : Word

Timer to slow\speed up walking\running with Move* functions

MoveBetweenTwoCorners

MoveBetweenTwoCorners : Boolean;

Переменная. Можно ли проходить через 2 угловых препятствия.

Beetwen.gif

Используется во всех функция перемещения.

Значение умолчанию False.

MoveCheckStamina

MoveCheckStamina : Word;

Переменная. Минимальное значение стамины при котором можно ходить.

Проверка от перегруза. Определяет минимальное значение стамины, при котором чар ещё может ходить.

Используется в функциях Doc:Api/Step, Doc:Api/StepQ, Doc:Api/MoveXY и Doc:Api/NewMoveXY. Если чар мертвый, то проверка не производится.

Значение умолчанию 1.

MoveHeuristicMult

MoveHeuristicMult : Integer;

Переменная. Эвристический коэффициент.

Коэффициент эвристической оценки при поиске пути.

При значении 0 - будет найден кратчайший маршрут до цели, но это займет больше времени. При значениях >100 - маршрут будет найден быстрее, но он может существенно отличатся от кратчайшего. Значения больше 500 как правило уже не оказывают влияния на маршрут, но бывают и исключения.

Используется при поиске пути в Doc:Api/NewMoveXY, Doc:Api/MoveXY и Doc:Api/GetPathArray вместо параметра Optimized.

Значение по умолчанию 93.

MoveOpenDoor

MoveOpenDoor : Boolean;

Переменная. Открывать двери при движении.

Если True - чар пытается открыть дверь, возникшую у него на пути. Если при трёх попытках дверь не открлась, она считается залоченной. При значении True чар не будет срезать углы.

Используется только в Doc:Api/StepQ и Doc:Api/NewMoveXY. Функции Doc:Api/MoveXY, Doc:Api/Step и Doc:Api/Raw_Move игнорируют значение этой переменной и двери не открывают.

Значение по умолчанию False.

MoveThroughCorner

MoveThroughCorner : Boolean;

Переменная. Можно ли пройти через угловое препятствие.

Beetwen2.gif

Используется во всех функция перемещения.

Значение умолчанию False.

MoveThroughNPC

MoveThroughNPC : Word;

Переменная. Минимальное значение стамины при котором можно проходить через чара/NPC.

Если задан ноль, пытается пройти сквозь чара при любом значении стамины.

Используется во всех функциях перемещения.

Значение по умолчанию 1000.

MoveTurnCost

MoveTurnCost : Integer;

Переменная. Штраф на поворот во время движения.

Учитывается при построении маршрута движения функцией Doc:Api/GetPathArray. Значение отлично от нуля, немного замедлит поиск, но найденный маршрут будет содержать меньшее количество поворотов, что ускорит перемещение. Отрицательные значение наоборот позволят делать больше поворотов в маршруте.

Значение по умолчанию 14.

MoveXY

function MoveXY(Xdst, Ydst:Word; Optimized:Boolean; Accuracy:Integer; Running:Boolean):Boolean

The function calculates the path to a point and moves to her.

Xdst, Ydst - the coordinates of the point to which you want to come.

Optimized - in True will be more complex ways of rendering, so it is recommended to include only a distance of up to 200 tiles.Optimizd option left for backward compatibility, see Doc:Api/MoveHeuristicMult

Accuracy - the accuracy of the approximation:0 - straight to the point, 1 - close to the radius of one tile, etc. The length is limited to 1000 tiles.

Running - run/walk to a point.

If the path has been successfully passed, the function returns a True, another False.

This function is not suitable for shards, where to exit the ship is required to pass on the ladder. In this case, you need to become a ladder and use the Doc:Api/Step on the open ramp

This function is obsolete, a new analog Doc:Api/NewMoveXY


MoveXYZ

function MoveXYZ(Xdst, Ydst:Word; Zdst:ShortInt; AccuracyXY, AccuracyZ:Integer; Running:Boolean):Boolean

The function calculates the path to a point and moves to her.

Xdst, Ydst, Zdst - the coordinates of the point to which you want to come.

AccuracyXY, AccuracyZ - the accuracy of the approximation:0 - straight to the point, 1 - close to the radius of one tile, etc. The length is limited to 1000 tiles.

Running - run/walk to a point.

If the path has been successfully passed, the function returns a True, another False.

This function is not suitable for shards, where to exit the ship is required to pass on the ladder. In this case, you need to become a ladder and use the Doc:Api/Step on the open ramp

NewMoveXY

function NewMoveXY(Xdst, Ydst : Word; Optimized : Boolean; Accuracy : Integer; Running : Boolean) : Boolean

This function calculates the path to a point and moves to it.

Advantages over Doc:Api/MoveXY:

1) A huge reduction of time for calculating long way due to the fact that the route is recalculated not at every step, but one time and due to the obstacles.

2) The new system of steps gives some performance boost due to optimizing.

3) Auto-door opening (if the option is enabled) Doc:Api/OpenDoor

4) Support for options (add a link here!)

//Xdst, Ydst// - coordinates of the points you want to go to.

//Optimized// - with //True// it will make the path rendering more complex, so it is recommended to include it only at a distance of up to 200 tiles. Optimized option left for compatibility, see Doc:Api/MoveHeuristicMult

//Accuracy// - accuracy of the approximation: 0 - straight to the point, one - close within one tile, etc. Length is limited to 1000 tiles.

//Running// - run/walk to a poing.

If the path has been successfully passed, the function will return // True //, or else // False //.

This function is not suitable for the shards, where to exit the ship is required to pass on the ladder. In this case, you need to be in front of a ladder and use the Doc:Api/Step on the open ramp.

Example:

  NewMoveXY(100,100,True,0,True);


OpenDoor

Works as a team similar to the client.

Example:

OpenDoor;

PredictedDirection

function PredictedDirection : Byte;

Предсказанное направление чара.

Uo-directions.png

PredictedX

function PredictedX : Word;

Предсказанная координата X чара.

PredictedY

function PredictedY : Word;

Предсказанная координата Y чара.

PredictedZ

function PredictedZ : ShortInt;

Предсказанная координата Z чара.

Raw_Move

function Raw_Move(Direction : Byte; Running : Boolean) : Boolean

Function do same action as Doc:Api/Step , only result differ - If step finish sucessfully - return True, otherwise - False.


SetBadLocation

procedure SetBadLocation(X,Y: Word)

Помечает точку с координатами X, Y как непроходимую.

Таймаут 15 минут, после - флаг непроходимости снимается.

Пример:

if FindType($0190,Ground) > 0 then
  SetBadLocation(GetX(FindItem),GetY(FindItem));


SetBadObject

procedure SetBadObject(ObjType : Word;Color : Word;Radius : Byte);

Помечает объект как "плохой". Functions хождения это учитывают при построении маршрута.

Таймаут 15 минут, после - флаг непроходимости снимается.

Пример:

if FindType($0190,Ground) > 0 then
  SetBadLocation(GetX(FindItem),GetY(FindItem));

SetGoodLocation

procedure SetGoodLocation(X, Y : Word);

Помечает точку (X, Y) как проходимую.

SetRunMountTimer

procedure SetRunMountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetRunUnmountTimer

procedure SetRunUnmountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetWalkMountTimer

procedure SetWalkMountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

SetWalkUnmountTimer

procedure SetWalkUnmountTimer(Value: Word)

Timer to slow\speed up walking\running with Move* functions

Step

function Step(Direction : Byte; Running : Boolean) : Byte

Если направление чара и Direction совпадает делает шаг в данном направлении, иначе разворачивает чара в этом направлении. Running определяет бежит чар (True) или идет (False).

Возвращает следующие значения:

  • 0 - Неизвестная ошибка
  • 1 - Отправлен запрос на ресинк, запрос не обработан.
  • 2 - Буфер шагов заполнен, запрос не обработан.
  • 3 - Стелс считает шаг в данном направлении невозможным, запрос не отсылается.
  • 4 - Таймаут ожидания ответа от сервера.
  • 5 - Сервер запретил перемещение в этом направлении.
  • 6 - Запрос принят, ожидание ответа сервера.
  • 7 - Сервер разрешил перемещение в этом направлении.

Если функция вернула, что-то отличное от 7, можно считать что шаг сделать не удалось.

Направление шагов

Uo-directions.png

StepQ

function StepQ(Direction : Byte; Running : Boolean) : Integer

По параметрам аналогична функциям Doc:Api/Step и Doc:Api/Raw_Move, но в отличии от них сразу же возвращает управление не дожидаясь ответа от сервера.

Возвращает следующие значения:

  • 0-255 - Запрос на шаг отправлен
  • 256 - Была предпринята попытка открыть дверь, и чар развернулся в нужном направлении.
  • -1 - Очередь шагов полна, запрос проигнорирован
  • -2 - Стелс считает шаг в данном направлении невозможным

Поскольку функция не дожидается ответа от сервера, координаты чара возвращаемые функциями Doc:Api/GetX, Doc:Api/GetY, Doc:Api/GetZ и Doc:Api/GetDirection изменяются не сразу. Что бы получить координаты с учетом сделанных шагов надо воспользоваться функциями Doc:Api/PredictedX, Doc:Api/PredictedY, Doc:Api/PredictedZ и Doc:Api/PredictedDirection

Uo-directions.png

Пример 1:

if StepQ(0, True) < 0 then
  AddToSystemJournal('Не удалось шагнуть');
end;