Skip to content

API UO LimitMove

Codex edited this page Oct 17, 2026 · 1 revision

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

UO.LimitMove

int UO.LimitMove();
int UO.LimitMove(object? distance);

UO.LimitMove() повертає максимальну відстань до цілі у клітинах; UO.LimitMove(distance) змінює її та повертає нове значення. Початкове значення — 2000. Нуль вимикає межу дальності; від’ємне значення викликає помилку і не змінює налаштування.

Відстань обчислюється як max(abs(targetX-startX), abs(targetY-startY)). Це відстань до вказаної цілі, а не довжина маршруту з обходом перешкод. Додаткові явно задані maxDistance, maxSteps та timeout залишаються чинними.

Межа застосовується до MoveXY, NewMoveXY, MoveXYZ, PMove, Follow та GetPathArray/GetPathArray3D, а також руху через карту Manager. Пошук використовує карту незалежно від графічного вікна; без активної ігрової сесії персонаж не рухається. Знята межа не дозволяє проходити крізь стіни чи переходити на іншу карту.

Налаштування спільне для скриптів поточного профілю та його карти й зберігається разом зі станом API. Новий профіль починає з 2000; запуск іншого скрипта не скидає явно встановлене значення. Для повернення стандарту виконайте UO.LimitMove(2000).

Приклади

int previousLimit = UO.LimitMove();
UO.LimitMove(2000);
UO.Print(UO.LimitMove().ToString());
UO.LimitMove(0);
int destinationX = 5000;
int destinationY = 1500;
int arrived = UO.NewMoveXY(destinationX, destinationY, true, 1, true);
UO.Print(arrived.ToString());
int previousLimit = UO.LimitMove();
try
{
    UO.LimitMove(6000);
    var route = UO.GetPathArray(5000, 1500, true, 1);
    UO.Print(route.Length.ToString());
}
finally
{
    UO.LimitMove(previousLimit);
}

Внутрішні підпрограми

InjectionRuntimeState.LimitMove → InjectionApiUO.MoveToCanonical / BuildPortablePath → ClassicUOInjectionApiBridge.MoveTo → Pathfinder.WalkTo. NativeFollowController / WorldMapController → Pathfinder.WalkTo.

Для дальності використовується UO.LimitMove: 2000 за промовчанням, 0 — без межі. Прихованих меж 4096 кроків/вузлів та 10000 вузлів немає. Робота розбита на порції з можливістю Stop. GetPathArray враховує числовий поріг moveThroughNPC і налаштування moveOpenDoor.

int savedLimit = UO.LimitMove();
try
{
    int applied = ApplyLimit(6000);
    UO.Print(applied.ToString());
}
finally { UO.LimitMove(savedLimit); }

int ApplyLimit(int distance)
{
    if (distance < 0) throw new ArgumentOutOfRangeException(nameof(distance));
    return UO.LimitMove(distance);
}
UO.Print(new MovementLimits(UO).Current().ToString());

class MovementLimits(ClassicUO.CSharp.CSharpGameApi api)
{
    public int Current() => api.LimitMove();
}

Clone this wiki locally