From Stealth Client

Jump to: navigation, search

Передвижение

CalcDir

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

Возвращает направление для шага из точки (Xfrom, Yfrom) в точку (Xto, Yto). Если Xfrom=Xto и Yfrom=Yto функция вернет 100.

Пример 1:

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

Пример 2:

Повернутся к объекту.

a := CalcDir(GetX(Self), GetY(Self), GetX(Object), GetY(Object));
if a <> GetDirection(Self) then
Step(a,false);


ClearBadLocationList

procedure ClearBadLocationList

Очищает список непроходимых точек, сформированный:

 - в результате работы функции SetBadLocation 
 - если 3 попытки шагнуть на одну и ту же точку - неудачны.


ClearBadObjectList

procedure ClearBadObjectList

Очищает список непроходимых объектов, сформированный:

 - в результате работы функции SetBadObject 
 - если 3 попытки шагнуть на одну и ту же точку - неудачны.


Dist

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

Возвращает расстояние между точками (X1, Y1) и (X2, Y2).

Пример 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;

Эта функция просчитывает маршрут до точки с координатами DestX и DestY и заполняет специальный массив TPathArray координатами точек через которые можно добраться до цели.

  • DestX - координата цели по X
  • DestY - координата цели по Y
  • Optimized - при True будет производиться более сложный просчет пути, поэтому рекомендуется включать только на дистанции до 200 тайлов. Параметр Optimizd оставлен для совместимости, см. Doc:RU/Api/MoveHeuristicMult
  • Accuracy - точность приближения: 0 - прямо на точку, 1 - рядом в радиусе одного тайла и т.д. Длина ограничена 1000 тайлами.
  • PathArray - массив типа TPathArray.
  • функция возвращает количество шагов до цели.

mPathArr : TPathArray; массив типа TPathArray отличается тем, что заполняется элементами у которых есть два свойства X и Y.

Пример:

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

Эта функция просчитывает маршрут до точки с координатами FinishX, FinishY и FinishZ и заполняет специальный массив TPathArray координатами точек через которые можно добраться до цели.

  • StartX, StartY, StartZ - координаты откуда будет начинаться маршрут.
  • FinishX, FinishY, FinishZ - координата конечной точки маршрута.
  • WorldNum - номер мира для которого будет просчитываться маршрут.
  • AccuracyXY, AccuracyZ - точность подхода к конечной точке: 0 - прямо на точку, 1 - рядом в радиусе одного тайла и т.д. Возможные значения: AccuracyXY - 0..20, AccuracyZ - 0..255
  • Run - будет ли персонаж бежать по этому маршруту или идти пешком (нужно для оптимизации поворотов при движении).
  • PathArray - массив типа TPathArray.
  • функция возвращает количество шагов до цели.

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:RU/Api/Step, Doc:RU/Api/StepQ, Doc:RU/Api/MoveXY и Doc:RU/Api/NewMoveXY. Если чар мертвый, то проверка не производится.

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

MoveHeuristicMult

MoveHeuristicMult : Integer;

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

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

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

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

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

MoveOpenDoor

MoveOpenDoor : Boolean;

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

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

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

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

MoveThroughCorner

MoveThroughCorner : Boolean;

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

Beetwen2.gif

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

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

MoveThroughNPC

MoveThroughNPC : Word;

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

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

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

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

MoveTurnCost

MoveTurnCost : Integer;

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

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

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

MoveXY

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

Функция просчитывает путь в точку и движется к ней.

Xdst, Ydst - координаты точки, к которой нужно прийти.

Optimized - при True будет производиться более сложный просчет пути, поэтому рекомендуется включать только на дистанции до 200 тайлов. Параметр Optimizd оставлен для совместимости, см. Doc:RU/Api/MoveHeuristicMult

Accuracy - точность приближения: 0 - прямо на точку, 1 - рядом в радиусе одного тайла и т.д. Длина ограничена 1000 тайлами.

Running - бежать/идти в точку.

Если путь был успешно пройден, то функция вернет True, иначе False.

Данная функция не подходит для шардов, где для выхода с корабля требуется пройти на трап. В этом случае нужно стать перед трапом и использовать Doc:RU/Api/Step в направлении открытого трапа

Функция является устаревшей, более новый аналог Doc:RU/Api/NewMoveXY


MoveXYZ

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

Функция просчитывает путь в точку и движется к ней.

Xdst, Ydst, Zdst - координаты точки, к которой нужно прийти.

AccuracyXY, AccuracyZ - точность приближения: 0 - прямо на точку, 1 - рядом в радиусе одного тайла и т.д. Длина ограничена 1000 тайлами.

Running - бежать/идти в точку.

Если путь был успешно пройден, то функция вернет True, иначе False.

Данная функция не подходит для шардов, где для выхода с корабля требуется пройти на трап. В этом случае нужно стать перед трапом и использовать Doc:RU/Api/Step в направлении открытого трапа

NewMoveXY

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

Функция просчитывает путь в точку и движется к ней.

Преимущества по сравнению с Doc:RU/Api/MoveXY:

1) Огромное уменьшение времени на просчет длинного пути за счет того, что маршрут пересчитывается не на каждом шаге, а один раз и до препятствия.

2) Новая система шагов, дает некоторый прирост скорости за счет оптимизации.

3) Авто-открывание дверей (при включенной опции) (добавить ссылки!)

4) Поддержка опций (добавить ссылки!)

//Xdst, Ydst// - координаты точки, к которой нужно прийти.

//Optimized// - при //True// будет производиться более сложный просчет пути, поэтому рекомендуется включать только на дистанции до 200 тайлов. Параметр Optimizd оставлен для совместимости, см. Doc:RU/Api/MoveHeuristicMult

//Accuracy// - точность приближения: 0 - прямо на точку, 1 - рядом в радиусе одного тайла и т.д. Длина ограничена 1000 тайлами.

//Running// - бежать/идти в точку.

Если путь был успешно пройден, то функция вернет //True//, иначе //False//.

Данная функция не подходит для шардов, где для выхода с корабля требуется пройти на трап. В этом случае нужно стать перед трапом и использовать Doc:RU/Api/Step в направлении открытого трапа

Пример:

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


OpenDoor

Работает как аналогичная команда в клиенте.

Пример:

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

Функция во всем аналогична Doc:RU/Api/Step кроме возвращаемого результата. В случае если шаг успешно сделан, возвращает True, иначе 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:RU/Api/Step и Doc:RU/Api/Raw_Move, но в отличии от них сразу же возвращает управление не дожидаясь ответа от сервера.

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

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

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

Uo-directions.png

Пример 1:

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