Skip to content

ZH TW 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。0 表示不限制距離;負數會引發錯誤並保留原值。

距離計算為 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 節點上限。工作分批執行並可停止。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