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.
Running — True — бег, 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 — в противном случае.
function MoveXYZ(Xdst: Word; Ydst: Word; Zdst: ShortInt;
AccuracyXY: Integer; AccuracyZ: Integer; Running: Boolean;
StepCallback: TMoverStepCallBack = nil): Boolean;
function MoveXYZ(Xdst: Word; Ydst: Word; Zdst: ShortInt;
AccuracyXY: Integer; AccuracyZ: Integer; Running: Boolean): Boolean;
def MoveXYZ(Xdst: int, Ydst: int, Zdst: int,
AccuracyXY: int, AccuracyZ: int, Running: bool) -> bool: ...
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.
if MoveXYZ(1500, 1200, 25, 1, 5, True):
AddToSystemJournal('Arrived at 3D destination')
else:
AddToSystemJournal('Could not reach destination')
MoveXY, newMoveXY, GetPathArray3D, MoverStop, moveOpenDoor, moveThroughNPC, moveThroughCorner, moveBetweenTwoCorners, moveCheckStamina, moveHeuristicMult, moveTurnCost, moveExitOnDisconnect