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;
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;
Метод аналогичен 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