Home API Manuals About Forum
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

MoveXYZ

Moves the character to the specified XYZ coordinates using 3D pathfinding (GetPathArray3D).

Xdst, Ydst, Zdst — destination coordinates.

AccuracyXY — horizontal accuracy in tiles. Clamped to 0–20.

AccuracyZ — vertical accuracy. Clamped to 0–255.

Running — if True, the character runs; if False, walks.

DWScript additionally supports an optional StepCallback parameter — a callback function invoked at each movement step. If the callback returns False, movement stops immediately.

TMoverStepCallBack = function(X, Y: Word; Z: ShortInt): Boolean;

The callback receives the last server-confirmed position, not the predicted one the method itself moves by. Up to 4 steps can sit in the queue unconfirmed, so these coordinates may lag the character’s real progress by up to 4 tiles. Two practical consequences: the callback is never invoked for the destination tile — the last call comes before the final step, and arrival is checked against predicted coordinates — and any comparison against a GetPathArray3D route or against the destination is off by that same lag. GetX / GetY return the same confirmed position, so comparing against those is consistent.

The callback fires once per movement iteration rather than strictly once per step: an iteration that ends in a path recomputation calls it without stepping.

This method is similar to MoveXY but uses the 3D pathfinder, which takes Z level into account. Useful for multi-level areas (dungeons, houses, boats).

The following movement variables affect this method’s behavior: moveOpenDoor, moveThroughNPC, moveThroughCorner, moveBetweenTwoCorners, moveCheckStamina, moveHeuristicMult, moveTurnCost, moveExitOnDisconnect.

Returns True if the destination was reached within the specified accuracy, False otherwise.

Перемещает персонажа к указанным координатам XYZ с использованием 3D-поиска пути (GetPathArray3D).

Xdst, Ydst, Zdst — координаты назначения.

AccuracyXY — горизонтальная точность в тайлах. Ограничивается 0–20.

AccuracyZ — вертикальная точность. Ограничивается 0–255.

RunningTrue — бег, False — ходьба.

В DWScript дополнительно поддерживается необязательный параметр StepCallback — функция обратного вызова на каждом шаге. Если callback возвращает False, движение немедленно прекращается.

TMoverStepCallBack = function(X, Y: Word; Z: ShortInt): Boolean;

Callback получает последнюю подтверждённую сервером позицию, а не расчётную, по которой движется сам метод. В очереди может находиться до 4 неподтверждённых шагов, поэтому эти координаты отстают от реального продвижения персонажа до 4 тайлов. Два практических следствия: для точки назначения callback не вызывается никогда — последний вызов происходит перед финальным шагом, а приход проверяется по расчётным координатам — и любое сравнение с маршрутом из GetPathArray3D или с целью промахивается на ту же величину. GetX / GetY возвращают ту же подтверждённую позицию, поэтому сверка с ними согласована.

Callback вызывается раз на итерацию движения, а не строго на каждый шаг: итерация, закончившаяся пересчётом пути, вызовет его без шага.

Метод аналогичен MoveXY, но использует 3D-поиск пути, учитывающий уровень Z. Полезен для многоуровневых зон (данжи, дома, корабли).

На поведение метода влияют следующие переменные движения: moveOpenDoor, moveThroughNPC, moveThroughCorner, moveBetweenTwoCorners, moveCheckStamina, moveHeuristicMult, moveTurnCost, moveExitOnDisconnect.

Возвращает True, если цель достигнута в пределах указанной точности, False — в противном случае.

DWS

function MoveXYZ(Xdst: Word; Ydst: Word; Zdst: ShortInt;
  AccuracyXY: Integer; AccuracyZ: Integer; Running: Boolean;
  StepCallback: TMoverStepCallBack = nil): Boolean;

Pascal Script

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

Python

def MoveXYZ(Xdst: int, Ydst: int, Zdst: int,
            AccuracyXY: int, AccuracyZ: int, Running: bool) -> bool: ...

Pascal Example

Simple movement:

begin
  if MoveXYZ(1500, 1200, 25, 1, 5, True) then
    AddToSystemJournal('Arrived at 3D destination')
  else
    AddToSystemJournal('Could not reach destination');
end.

With StepCallback (DWS):

function StepCallBack(X, Y: Word; Z: ShortInt): Boolean;
begin
  Result := True;
  if Life < MaxLife div 3 then
    Exit(False);
end;

begin
  MoveXYZ(1500, 1200, 25, 1, 5, True, @StepCallBack);
end.

Python Example

if MoveXYZ(1500, 1200, 25, 1, 5, True):
    AddToSystemJournal('Arrived at 3D destination')
else:
    AddToSystemJournal('Could not reach destination')

See Also

MoveXY, newMoveXY, GetPathArray3D, MoverStop, moveOpenDoor, moveThroughNPC, moveThroughCorner, moveBetweenTwoCorners, moveCheckStamina, moveHeuristicMult, moveTurnCost, moveExitOnDisconnect