Skip to content

JA 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