Skip to content

JA UO Topic movement Part 2

Codex edited this page Oct 12, 2026 · 3 revisions

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

動き — 2

家 · C# · IDE · UO API · A–Z · 例 · Languages

リファレンスの各部

1 · 2

コマンドの完全なリファレンス


UO.NewMoveXY

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

C# のシグネチャ

int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors);
int UO.NewMoveXY(object? xdst, object? ydst, object? optimized, object? accuracy, object? running, object? stepCallback, object? timeout, object? maxSteps, object? maxDistance, object? accuracyZ, object? avoidMobiles, object? openDoors, object? stopOnStuck);

キャラクターを X/Y に移動し、終了を待って目標の達成を確認します。追加の制限とコールバックをサポートします。

引数

  • xdst — 目的地の世界座標 X、0..65535。ここはserial やガンプ内の位置ではありません。
  • ydst — 目的地のワールド Y 座標、0..65535。
  • optimized - true - 前方のパスを検索および確認する通常モード。 false - ヒューリスティックと最近接ステップのチェックを削減します。 false は障害物回避を無効にしません。
  • accuracy — セル内の X と Y の許容値: 両方の偏差がその範囲内に収まる必要があります。値は 0..20 の範囲に制限されます。 0 には正確な X/Y が必要です。
  • running - true/1 - リクエストの実行、false/0 - ステップ。サーバー動作の遅延は継続します。速度倍率ではありません。
  • timeout — ミリ秒単位のオプションの待機制限。引数 0 が欠落しており、負の値は、この追加制限がないことを示します。
  • maxSteps — ネットワークパケットではなく、観測された位置変化のオプションの制限。 0/陰性/不在 - この制限なし。ポーリング間にいくつかのステップが存在する可能性があるため、これは正確なセルカウンターではありません。
  • maxDistance — ターゲットまでの初期距離 max(abs(dx),abs(dy)) のオプション制限。 0/不在はそれを無効にします。これは、トラバース中に許容される偏差ではなく、見つかったパスの長さでもありません。
  • accuracyZ — 高さの許容差: abs(実際の Z - 必要な Z)、0..255 によって制限されます。ゼロには正確な高度が必要です。 255 は基本的に Z リミットを無効にします。 NewMoveXY の場合、ターゲット Z は召喚時のキャラクターの Z と等しくなります。デフォルトの許容誤差は 255 です。
  • avoidMobiles — オプションのフラグ: true は、考慮される文字を通過することを禁止します。 false はその試みを許可します。引数なしでは、moveThroughNPC が使用されます。サーバーは依然としてアクセスを拒否する可能性があります。
  • openDoors — 途中でドアを開けるためのオプションのフラグ。引数なしでは、moveOpenDoor が使用されます。 true では、ロックされたドアにはアクセスできません。
  • stopOnStuck - true は、約 1000 ms の計画の後、X/Y/Z が変化していない場合、0 で移動を完了します。アクティブな検索と再計算部分はこのタイマーをリセットします。個別のタイムアウトは引き続き動作します。デフォルトはfalseです。

戻り値

int 1 - チェックの最後に、キャラクターは、チャレンジ前にすでにそこにいたときを含め、指定された許容範囲 X/Y/Z 内にあります。 int 0 - 無効な座標、発射失敗、未到達点、またはトリガーされた停止条件。歩数やserialではありません。緊急キャンセルの場合は、通常0に戻らず、手続きが中止されます。

コマンドの結果は数値フラグです。1 は条件が満たされたことを意味し、0 は条件が満たされていないことを意味します。 var result = command(...) の後、(result != 0) または (result == 0) を確認します。 1 回の呼び出しの結果を保存します。呼び出しを繰り返すと、アクションを再度実行したり、すでに変更された状態を読み取ることができます。

動作

  • 完全な A* ルートは、最初のステップの前に、クライアント更新間の短い部分で構築されます。 Optimized=true の場合、パスの次の 4 セルがチェックされます。 false が最も近いステップの場合。これはすでに計算された経路のチェックであり、ルート全体の距離やマウスを動かしたときの迂回スライダーではありません。
  • サーバー障害 DenyWalk または新しい障害物により、ステップのキューを完了した後、現在の位置からの再計算が要求されます。繰り返しの数と再計算の頻度は制限されています。どのパスも 0 で移動を終了することはできません。
  • ルートは、それを開始したプロシージャに属します。その緊急停止により、残りの自動パスがキャンセルされます。別の実行またはユーザーがすでにルートを置き換えている場合、前の所有者をキャンセルしても新しいルートには影響しません。すでに送信されたステップは呼び出されません。
  • SetBadLocation と SetBadObject は、ルートの開始時に現在のランタイムの禁止事項のスナップショットとして使用されます。これらは内部の再計算中に保存されます。リストを変更またはクリアすると、すでに進行中のルートが上書きされるのではなく、次のルートに影響します。
  • リクエストを受け入れた後、呼び出しはスクリプト スレッドで待機します。初期検索と再計算はゲーム ストリーム上でチャンク単位で実行されます。最大 32 ノード拡張とチャンクあたり約 1 ミリ秒のソフト バジェットです。 1 回の複雑な細胞チェックやカード読み取りでは、この予算を超える場合があります。部分の間では、クライアントは更新を続けます。合計検索制限は 10000 ノードのままです。
  • タイムアウトはリクエストが受け入れられた後にカウントされ、その後の検索と再計算の部分が含まれます。 stopOnStuck は、実行中の検索を文字のスタックとはみなしません。計画が完了すると、位置の変更は再度考慮されません。最後の 1/0 は、パスの準備状況だけでなく、実際の座標をチェックします。
  • 結果にはクライアントのローカル位置が考慮されます。その後のサーバー修正はまだ可能です。異なるルーチンから競合する移動コマンドを実行すると、キャラクターの全体的なルートが変更されます。
  • 設定 moveCheckStamina、moveExitOnDisconnect、moveOpenDoor、moveThroughCorner、moveThroughNPC、moveHeuristicMult、moveTurnCost、moveBetweenTwoCorners はパフォーマンスに影響します。明示的な avoidMobiles/openDoors は、この呼び出しに対応する値をオーバーライドします。
  • 結果 0 は正確な原因を示していません。座標、接続、スタミナ、ログを確認します。 UO.Wait と試行回数制限なしで動きを際限なく繰り返さないでください。
  • メイン ブリッジは、リクエスト番号、プレーヤー/パスファインダー/マップ インスタンス、およびマップ インデックスを記録します。新しいリクエスト、コンテキストの変更、または最終的な拒否では、0 が与えられます。座標と最後のコールバックを読み取った後、チェックが繰り返されます。タイムアウト、maxSteps、およびコールバック=0 は、保存されたリクエストを停止するだけであり、新しい外部ルートは停止しません。一時的にブロックされても、回復がまだアクティブである間は所有権を失うことはなく、待機は継続されます。 IApiMovementOwnershipBridge のない外部レガシー ブリッジの場合、以前の互換性のあるメカニズムが保持されます。
  • 一般的なパスファインダーは、対応するアクティブなリクエストの移動が拒否された場合に限り、2000 ミリ秒間の方向遷移 X/Y/Z の一時的な禁止を最大 8 まで保存します。ローテーション、未知のシーケンス、再同期、および古い/外部リクエストでは、そのような禁止は発生しません。新しい外部リクエストとマップ/プレイヤー コンテキストの損失により、それらはクリアされます。ロードされたジオメトリ検索は遷移をバイパスしようとします。サーバーの障害をすべて知っているわけではありません。プレーヤーの X/Y/Z を変更せずに、少なくとも 40 ミリ秒の一時停止を伴って、最大 8 の内部再計算が許可されます。完全なパスが存在しないか、この予算が使い果たされているため、ルートは終了します。調整タスクは、送信されたステップを処理した後に完了します。 mobile-Follow は遅延に基づいて再試行する場合があります。

C# のステップ コールバックは、RegisterStepCallback(name, Func<int,int,int,bool>) または Func<int,int,int,int> を介して明示的に登録されます。 x/y/z 座標は int として送信されます。 false/0 はルートを停止し、true/ゼロ以外の番号は継続します。登録は現在の実行では有効であり、それとともに解放されます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.NewMoveXY((UO.GetX() + 3), UO.GetY(), true, 0, false);
UO.Print("NewMoveXY: " + Convert.ToString(result));

1。次のポイントに到達し、結果を確認します - 直接スクリプト

引数と実行の流れ:

  • x/y — 世界ターゲット。 Optimized=true、Accuracy=0 は正確な X/Y を必要とし、Running=false は歩行を指定します。
  • ok - int 1 または 0、通過したセルの数ではありません。ターゲットは現在のマップ上で利用可能である必要があります。
var x = UO.GetX() + 3;
var y = UO.GetY();
var ok = UO.NewMoveXY(x, y, true, 0, false);
if (Truth(ok))
{
    UO.Print("Destination reached");
}
else
{
    UO.Print("Destination not reached");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。時間と距離を制限して走る - スクリプト機能

引数と実行の流れ:

  • 1445/1690 - 目標の例;精度=1 では、近くに駐車できます。走行中=true。 StepCallback=0 はコールバックを無効にします。
  • タイムアウト=5000ミリ秒; maxSteps=100 観察された動き。 maxDistance=30を原点からチェックします。
  • AccuracyZ=255 には床は必要ありません。 avoidMobiles=true、openDoors=true、stopOnStuck=true には、これらの条件が含まれます。
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NewMoveXY(1445, 1690, true, 1, true, 0, 5000, 100, 30, 255, true, true, true);
    UO.Print("Move result: " + Convert.ToString(ok));
    return null;
}

3。コールバックでの耐久性のテスト - スクリプト クラス

引数と実行の流れ:

  • StepCallback="AfterStep" は 3 つの座標を受け取ります。 RegisterStepCallback 登録により、名前が bool デリゲートに関連付けられます。 Stamina <= 10 の場合、false に戻り、動きを停止します。 true がルートを続行します。
  • timeout=5000ms は待機時間を制限します。コールバックは変更が通知された後に呼び出されますが、すべてのネットワーク ステップで保証されるわけではありません。長時間の待ち時間や新しいルートを設定しないでください。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var stepRegistration = RegisterStepCallback("AfterStep", AfterStep);
        var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, "AfterStep", 5000);
        UO.Print("Move result: " + Convert.ToString(ok));
        return null;
    }

    bool AfterStep(int x, int y, int z)
    {
        UO.Print("Position: " + Convert.ToString(x) + "," + Convert.ToString(y) + "," + Convert.ToString(z));
        return UO.Stamina() > 10;
    }

    private IDisposable RegisterStepCallback(string name, Func<int, int, int, bool> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
    private IDisposable RegisterStepCallback(string name, Func<int, int, int, int> handler) => global::ClassicUO.CSharp.CSharpScriptContext.Current.RegisterStepCallback(name, handler);
}

4。 GoToPoint: 完全なヘルパー関数コードと Main - 直接スクリプト

引数と実行の流れ:

  • GoToPoint は、この例専用のヘルパー関数です。その 4 つのパラメータ x/y/accuracy/running は関数宣言の上に記述されています。関数の完全な本体は、コピーされた同じブロック内にあります。
  • Main はターゲットを評価し、GoToPoint を呼び出します。これは、optimized=true、callback=0、timeout=8000、および maxSteps=100 を追加し、NewMoveXY を 1 回呼び出して、返された int を Main に返します。
  • NewMoveXY は組み込みのクライアント コマンドです。その A* 検索、パテンシー チェック、およびサーバー ステップの処理は、このスクリプトの追加の隠しプロシージャではなく、クライアントに実装されます。
  • この例では、コールバックが無効になっています。別の例でコールバック名を指定するか、追加のスクリプト関数を呼び出す場合は、その定義も完全に指定する必要があります。
  • C# で (到達!= 0) かどうかを確認します。数値結果 0 は失敗を示します。 int と bool を直接比較することは認められません。緊急キャンセルは実行を中断するため、false を返す必要はありません。
var x = UO.GetX() + 3;
var y = UO.GetY();
var reached = GoToPoint(x, y, 0, true);
if (Truth(Truth(reached) == true))
{
    UO.Print("Destination reached");
}
else
{
    UO.Print("Destination not reached");
}

dynamic GoToPoint(dynamic x, dynamic y, dynamic accuracy, dynamic running)
{
    dynamic optimized = true;
    var callback = 0;
    var timeout = 8000;
    var maxSteps = 100;
    var reached = UO.NewMoveXY(x, y, optimized, accuracy, running, callback, timeout, maxSteps);
    return reached;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running) — UO.NewMoveXY(Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.NewMoveXY(xdst, ydst, optimized, accuracy, running, stepCallback, timeout, maxSteps, maxDistance, accuracyZ, avoidMobiles, openDoors, stopOnStuck) — UO.NewMoveXY(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: xdst (Any), ydst (Any), optimized (Any), accuracy (Any), running (Any), stepCallback (Any), timeout (Any), maxSteps (Any), maxDistance (Any), accuracyZ (Any), avoidMobiles (Any), openDoors (Any), stopOnStuck (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactNewMoveXY(values))

UO.OpenDoor

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

C# のシグネチャ

void UO.OpenDoor();

キャラクターにドアを開けるよう要求します。

引数

パラメータはありません。

戻り値

void - 値がありません。別の回線で電話してください。完了してもサーバーのアクションは確認されません。

動作

  • OpenDoor は Invoke 経由で GameActions.OpenDoor を呼び出します。シリアルドアは受け入れられません。検索ルールと検出ルールは GameActions/server に属します。
  • 例では、UO.Wait はスクリプトの一時停止のみを指定します。一時停止が終了しても、サーバーがリクエストを完了したことは証明されません。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.OpenDoor");
UO.OpenDoor();

1。直接呼び出し - 直接スクリプト

引数と実行の流れ:

  • キャラクターにドアを開けるよう要求します。
UO.OpenDoor();

2。明示的なオプション - スクリプト関数

引数と実行の流れ:

  • OpenDoor は Invoke 経由で GameActions.OpenDoor を呼び出します。シリアルドアは受け入れられません。検索ルールと検出ルールは GameActions/server に属します。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.OpenDoor();
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • 例では、UO.Wait はスクリプトの一時停止のみを指定します。一時停止が終了しても、サーバーがリクエストを完了したことは証明されません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.OpenDoor();
        UO.Wait(250);
        UO.Print("Door request sent");
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.OpenDoor() — UO.OpenDoor()

引数: 引数はありません。

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "opendoor": bridge.OpenDoor(); break;

UO.PMove

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

C# のシグネチャ

void UO.PMove(object? targetX, object? targetY);
void UO.PMove(object? x, object? y, object? z);

30 秒の制限付きで、個別のキーステップを介した X/Y への互換性のある移動コマンド。

引数

  • targetX — ターゲットワールド X。
  • x — ターゲットワールド X。
  • targetY — ターゲットワールド Y。
  • y — ターゲットワールド Y。
  • z — 互換性のある 3 番目の引数は受け入れられますが、無視されます。高さを制御するには、MoveXYZ を使用します。

戻り値

void - 戻り値はありません。別の回線で電話してください。 true/false や歩数ではありません。

動作

  • これは、迂回路を完全に探索することなく、試行間に 75 ミリ秒の一時停止を挟んでターゲットに向かう単純な動きです。障害物のある新しいシナリオの場合は、NewMoveXY を使用します。
  • 30 秒以内に正確な X/Y に到達しない場合、メッセージが表示されます。結果 void からは成功を得ることができません。座標を比較します。
  • MoveOff はこのコマンドの主要なステップを無効にし、MoveOn は再び有効にします。 PMove はモーションをオフにしても、制限まで待つことができます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.PMove");
UO.PMove((UO.GetX() + 1), UO.GetY());

1。次のセルを渡す - 直接スクリプト

引数と実行の流れ:

  • x/y は宛先を指定します。 MoveOn は主要なステップを有効にします。
  • PMove は数値を返しません。位置は個別に読み取られます。
var x = UO.GetX() + 1;
var y = UO.GetY();
UO.MoveOn();
UO.PMove(x, y);
UO.Print("X=" + Convert.ToString(UO.GetX()));

2。座標による結果の確認 - スクリプト関数

引数と実行の流れ:

  • 1445/1690 をアクセス可能なポイントに置き換えます。
  • チェックでは両方の座標が比較されます。ユニットはUO.PMove(...)の場合には適していません。
return  RunScenario();
 object? RunScenario()
{
    var x = 1445;
    var y = 1690;
    UO.PMove(x, y);
    if (Truth(UO.GetX() == x) && Truth(UO.GetY() == y))
    {
        UO.Print("Exact XY reached");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。第三引数と互換性のある形式はスクリプトクラスです

引数と実行の流れ:

  • X/Y は現在のものと一致するため、移動する必要はありません。
  • z=20 は無視され、最上階には上がりません。このためには、実際の階段ポイントを備えた MoveXYZ が必要です。

標準走行速度

最小ステップ間隔: ウォーキング - ウォーキング 400 ミリ秒、ランニング 200 ミリ秒。乗車 - ウォーキング 200 ミリ秒、ランニング 100 ミリ秒。

これらは標準的なクライアント制限であり、シャードに対して自動的に定義される設定ではありません。サーバーの速度とフライト モードは個別にカウントされます。スクリプト タイマーは動作を遅くする可能性がありますが、これらの制限は軽減されません。

ステップ、ルート、Follow、マウス/キー コントロール、マップはキャラクターの共有キューを使用します。サーバーによるルートの置き換え、方向転換、または位置の調整では、ステップ要求後の残りの一時停止はキャンセルされません。遅延の後は、ドロップされたフレームを補うための高速バーストはありません。確認を待っていたり、障害物があったり、コミュニケーションが不十分だったりすると、動きが遅くなる可能性があります。

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.PMove(UO.GetX(), UO.GetY(), 20);
        UO.Print("Actual Z=" + Convert.ToString(UO.GetZ()));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.PMove(targetX, targetY) — UO.PMove(Integer,Integer)

引数: targetX (Integer), targetY (Integer)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void PMove(int targetX, int targetY)

        {

            var currentX = GetX();

            var currentY = GetY();

            var timeout = timeSource.Now.AddSeconds(30);



            while ((targetX != currentX || targetY != currentY) && timeSource.Now < timeout)

            {

                var direction = GetDirection(currentX, currentY, targetX, targetY);

                var key = GetKey(direction);



                bridge.MakeStepByKey(key);

                bridge.Wait(75);



                currentX = GetX();

                currentY = GetY();

            }



            if (targetX != currentX || targetY != currentY)

                SystemMessage("PMove stopped: destination was not reached in 30 seconds.");

        }

UO.PMove(x, y, z) — UO.PMove(Integer,Integer,Integer)

引数: x (Integer), y (Integer), z (Integer)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void PMove(int x, int y, int z) => PMove(x, y);

UO.PredictedDirection

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

C# のシグネチャ

int UO.PredictedDirection();

キャラクターがすでにキューに入れられたステップの後に、予測された方向側を読み取ります。

引数

パラメータはありません。

戻り値

int 方向 0..7、ランビットなし。 0 - 北またはキャラクターの不在。

動作

  • 構文に示されている関数のみ、引数なしの UO です。ターゲット、serial、type、ターゲット、距離、タイムアウトのパラメータはありません。 bool、ID、またはタイル表記: 1 ではない数字は、目標を達成することを意味しません。
  • GetEndPosition は、最後に追加された Mobile.Step の X/Y/Z/方向を読み取ります。キューが空の場合、キャラクターの現在の位置/方向を読み取ります。これは O(1) ​​読み取りです。ステップは取得されず、モーションとパケットは送信されず、ルートは計算されず、コマンドは達成を待機しません。
  • 世界の方向: 0 北、1 北東、2 東、3 南東、4 南、5 南西、6 西、7 北西。画面はアイソメトリックです。 Direction.Mask は実行中のフラグを削除します。スピードが戻らない。
  • これは現地の予報であり、到着が確認されたものではありません。新規/完了したステップ、サーバー障害、キューのクリア、またはテレポートによって変更される可能性があります。個々のコンポーネントの呼び出しはアトミックではありません。 X の一致は、Y/Z の一致やサーバーの確認を証明するものではありません。
  • Invoke はゲーム スレッドで読み取りを実行します。ワーカー スレッドは、マネージャーがリクエストを処理するのを待っています。スクリプトをキャンセルすると待機が中断されます。一時停止や追加のネットワーク リクエストは追加されません。
  • IPredictedMovementBridge を使用しない IApiBridge の外部実装は、現在の座標/方向のフォールバック読み取り値を保持します。クラシック UO はキュー対応インターフェイスを実装しています。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.PredictedDirection();
UO.Print("PredictedDirection: " + Convert.ToString(result));

1。 1 つのコンポーネントを読み取る - 直接スクリプト

引数と実行の流れ:

  • 予測により、引数なしで 1 回の呼び出しが節約されます。 Convert.ToString はログの数値をフォーマットします。
var predicted = UO.PredictedDirection();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。予測変化の監視 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(100) は、例を 100 ミリ秒間一時停止します。中間の動きでも前後が一致することがあります。これらの測定値は動きを開始するものではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedDirection();
    await Delay(100);
    var after = UO.PredictedDirection();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完全比較関数 - スクリプトクラス

引数と実行の流れ:

  • 期待される - 座標/高さ/方向の例であり、ネイティブ コマンドへの引数ではありません。 PredictionEquals は UO.Self() をチェックし、値を 1 回読み取り、等しい場合は 1 (条件が満たされた) を返し、そうでない場合は 0 (条件が満たされていない) を返します。関数コード全体を Main の下に示します。 1 つの要素の偶然の一致は、到着を意味しません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(4)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedDirection();
        return Truth(predicted == expected);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.PredictedDirection() — UO.PredictedDirection()

引数: 引数はありません。

結果: int / Integer.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "predicteddirection": return new InjectionValue(ReadPredictedCoordinate(3));

UO.PredictedX

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

C# のシグネチャ

int UO.PredictedX();

キャラクターがすでにキューに入れられたステップの後に、予測された X 座標を読み取ります。

引数

パラメータはありません。

戻り値

マップセル内の int X。 0 - 有効な座標または文字がありません。

動作

  • 構文に示されている関数のみ、引数なしの UO です。ターゲット、serial、type、ターゲット、距離、タイムアウトのパラメータはありません。 bool、ID、またはタイル表記: 1 ではない数字は、目標を達成することを意味しません。
  • GetEndPosition は、最後に追加された Mobile.Step の X/Y/Z/方向を読み取ります。キューが空の場合、キャラクターの現在の位置/方向を読み取ります。これは O(1) ​​読み取りです。ステップは取得されず、モーションとパケットは送信されず、ルートは計算されず、コマンドは達成を待機しません。
  • X と Y はワールド/マップ座標であり、コンテナ ガンプ ピクセルではありません。 Z - 階数ではなく、高さです。配列やルート全体の最終目的地ではなく、単一のコンポーネントが返されます。
  • これは現地の予報であり、到着が確認されたものではありません。新規/完了したステップ、サーバー障害、キューのクリア、またはテレポートによって変更される可能性があります。個々のコンポーネントの呼び出しはアトミックではありません。 X の一致は、Y/Z の一致やサーバーの確認を証明するものではありません。
  • Invoke はゲーム スレッドで読み取りを実行します。ワーカー スレッドは、マネージャーがリクエストを処理するのを待っています。スクリプトをキャンセルすると待機が中断されます。一時停止や追加のネットワーク リクエストは追加されません。
  • IPredictedMovementBridge を使用しない IApiBridge の外部実装は、現在の座標/方向のフォールバック読み取り値を保持します。クラシック UO はキュー対応インターフェイスを実装しています。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.PredictedX();
UO.Print("PredictedX: " + Convert.ToString(result));

1。 1 つのコンポーネントを読み取る - 直接スクリプト

引数と実行の流れ:

  • 予測により、引数なしで 1 回の呼び出しが節約されます。 Convert.ToString はログの数値をフォーマットします。
var predicted = UO.PredictedX();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。予測変化の監視 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(100) は、例を 100 ミリ秒間一時停止します。中間の動きでも前後が一致することがあります。これらの測定値は動きを開始するものではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedX();
    await Delay(100);
    var after = UO.PredictedX();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完全比較関数 - スクリプトクラス

引数と実行の流れ:

  • 期待される - 座標/高さ/方向の例であり、ネイティブ コマンドへの引数ではありません。 PredictionEquals は UO.Self() をチェックし、値を 1 回読み取り、等しい場合は 1 (条件が満たされた) を返し、そうでない場合は 0 (条件が満たされていない) を返します。関数コード全体を Main の下に示します。 1 つの要素の偶然の一致は、到着を意味しません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(1445)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedX();
        return Truth(predicted == expected);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.PredictedX() — UO.PredictedX()

引数: 引数はありません。

結果: int / Integer.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "predictedx": return new InjectionValue(ReadPredictedCoordinate(0));

UO.PredictedY

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

C# のシグネチャ

int UO.PredictedY();

キャラクターがすでにキューに入れられたステップの後に、予測された Y 座標を読み取ります。

引数

パラメータはありません。

戻り値

マップセル内の int Y。 0 - 有効な座標または文字がありません。

動作

  • 構文に示されている関数のみ、引数なしの UO です。ターゲット、serial、type、ターゲット、距離、タイムアウトのパラメータはありません。 bool、ID、またはタイル表記: 1 ではない数字は、目標を達成することを意味しません。
  • GetEndPosition は、最後に追加された Mobile.Step の X/Y/Z/方向を読み取ります。キューが空の場合、キャラクターの現在の位置/方向を読み取ります。これは O(1) ​​読み取りです。ステップは取得されず、モーションとパケットは送信されず、ルートは計算されず、コマンドは達成を待機しません。
  • X と Y はワールド/マップ座標であり、コンテナ ガンプ ピクセルではありません。 Z - 階数ではなく、高さです。配列やルート全体の最終目的地ではなく、単一のコンポーネントが返されます。
  • これは現地の予報であり、到着が確認されたものではありません。新規/完了したステップ、サーバー障害、キューのクリア、またはテレポートによって変更される可能性があります。個々のコンポーネントの呼び出しはアトミックではありません。 X の一致は、Y/Z の一致やサーバーの確認を証明するものではありません。
  • Invoke はゲーム スレッドで読み取りを実行します。ワーカー スレッドは、マネージャーがリクエストを処理するのを待っています。スクリプトをキャンセルすると待機が中断されます。一時停止や追加のネットワーク リクエストは追加されません。
  • IPredictedMovementBridge を使用しない IApiBridge の外部実装は、現在の座標/方向のフォールバック読み取り値を保持します。クラシック UO はキュー対応インターフェイスを実装しています。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.PredictedY();
UO.Print("PredictedY: " + Convert.ToString(result));

1。 1 つのコンポーネントを読み取る - 直接スクリプト

引数と実行の流れ:

  • 予測により、引数なしで 1 回の呼び出しが節約されます。 Convert.ToString はログの数値をフォーマットします。
var predicted = UO.PredictedY();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。予測変化の監視 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(100) は、例を 100 ミリ秒間一時停止します。中間の動きでも前後が一致することがあります。これらの測定値は動きを開始するものではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedY();
    await Delay(100);
    var after = UO.PredictedY();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完全比較関数 - スクリプトクラス

引数と実行の流れ:

  • 期待される - 座標/高さ/方向の例であり、ネイティブ コマンドへの引数ではありません。 PredictionEquals は UO.Self() をチェックし、値を 1 回読み取り、等しい場合は 1 (条件が満たされた) を返し、そうでない場合は 0 (条件が満たされていない) を返します。関数コード全体を Main の下に示します。 1 つの要素の偶然の一致は、到着を意味しません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(1690)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedY();
        return Truth(predicted == expected);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.PredictedY() — UO.PredictedY()

引数: 引数はありません。

結果: int / Integer.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "predictedy": return new InjectionValue(ReadPredictedCoordinate(1));

UO.PredictedZ

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

C# のシグネチャ

int UO.PredictedZ();

キャラクターがすでにキューに入れられたステップの後に、予測される Z 高さを読み取ります。

引数

パラメータはありません。

戻り値

int Z、符号付き高さ -128..127;負の値は保持されます。 0 - キャラクターの許容可能な高さまたは不在。

動作

  • 構文に示されている関数のみ、引数なしの UO です。ターゲット、serial、type、ターゲット、距離、タイムアウトのパラメータはありません。 bool、ID、またはタイル表記: 1 ではない数字は、目標を達成することを意味しません。
  • GetEndPosition は、最後に追加された Mobile.Step の X/Y/Z/方向を読み取ります。キューが空の場合、キャラクターの現在の位置/方向を読み取ります。これは O(1) ​​読み取りです。ステップは取得されず、モーションとパケットは送信されず、ルートは計算されず、コマンドは達成を待機しません。
  • X と Y はワールド/マップ座標であり、コンテナ ガンプ ピクセルではありません。 Z - 階数ではなく、高さです。配列やルート全体の最終目的地ではなく、単一のコンポーネントが返されます。
  • これは現地の予報であり、到着が確認されたものではありません。新規/完了したステップ、サーバー障害、キューのクリア、またはテレポートによって変更される可能性があります。個々のコンポーネントの呼び出しはアトミックではありません。 X の一致は、Y/Z の一致やサーバーの確認を証明するものではありません。
  • Invoke はゲーム スレッドで読み取りを実行します。ワーカー スレッドは、マネージャーがリクエストを処理するのを待っています。スクリプトをキャンセルすると待機が中断されます。一時停止や追加のネットワーク リクエストは追加されません。
  • IPredictedMovementBridge を使用しない IApiBridge の外部実装は、現在の座標/方向のフォールバック読み取り値を保持します。クラシック UO はキュー対応インターフェイスを実装しています。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.PredictedZ();
UO.Print("PredictedZ: " + Convert.ToString(result));

1。 1 つのコンポーネントを読み取る - 直接スクリプト

引数と実行の流れ:

  • 予測により、引数なしで 1 回の呼び出しが節約されます。 Convert.ToString はログの数値をフォーマットします。
var predicted = UO.PredictedZ();
UO.Print("Predicted: " + Convert.ToString(predicted));

2。予測変化の監視 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(100) は、例を 100 ミリ秒間一時停止します。中間の動きでも前後が一致することがあります。これらの測定値は動きを開始するものではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PredictedZ();
    await Delay(100);
    var after = UO.PredictedZ();
    if (Truth(before != after))
    {
        UO.Print("Prediction changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完全比較関数 - スクリプトクラス

引数と実行の流れ:

  • 期待される - 座標/高さ/方向の例であり、ネイティブ コマンドへの引数ではありません。 PredictionEquals は UO.Self() をチェックし、値を 1 回読み取り、等しい場合は 1 (条件が満たされた) を返し、そうでない場合は 0 (条件が満たされていない) を返します。関数コード全体を Main の下に示します。 1 つの要素の偶然の一致は、到着を意味しません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(PredictionEquals(-4)) == true))
        {
            UO.Print("Queued endpoint matches this component");
        }
        else
        {
            UO.Print("Different component or no player");
        }

        return null;
    }

    dynamic PredictionEquals(dynamic expected)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var predicted = UO.PredictedZ();
        return Truth(predicted == expected);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.PredictedZ() — UO.PredictedZ()

引数: 引数はありません。

結果: int / Integer.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "predictedz": return new InjectionValue(ReadPredictedCoordinate(2));

UO.SetRunMountTimer

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

C# のシグネチャ

void UO.SetRunMountTimer(object? value);

馬に乗って走るときのステップ間隔を設定します。意図的に速度を落としたり、標準速度に戻したりする場合に使用します。このコマンドでは、標準テンポを超えて動きを速くすることはできません。

引数

  • value — 必要な整数のミリ秒。範囲 100..2000; 0 や負の値を含む小さな値は 100 まで増加し、大きな値は 2000 まで減少します。

戻り値

void - 値がありません。別回線でお電話ください。適用された間隔を読み取るには、UO.GetRunMountTimer() を使用します。これはサーバーによるステップの確認ではありません。

動作

  • 設定はライディングモードに適用されます。標準および最小許容値は 100 ミリ秒です。上限は 2000 ミリ秒です。他の 3 つのモードには個別の設定があります。
  • これはキャラクターのローカル移動間隔であり、ping、FPS、経路探索タイムアウト、または測定されたサーバー ステップ継続時間ではありません。数値を大きくすると動きが遅くなります。標準間隔より短くしても、パケットの送信速度は向上しません。
  • チーム自体は移動を開始せず、マウントに乗り、歩行/走行モードを変更しません。モードは運転中に選択されます。サーバーによって指定された速度モードとフライトは、クライアントによっても考慮されます。
  • この設定は、このクライアントの移動に一般的なものです。手動制御、マップ ルート、その他のスクリプトで使用できます。一時的に変更し、前の値を保持し、操作後に復元します。複数の手順から 1 つのモードを同時に変更しないでください。
  • ターンや逸脱ステップは通常の動きとは異なります。サーバーの確認や通信の遅延、障害などにより実際の時間が長くなる可能性があります。クライアントは、欠落したフレームを補うために一連の高速化されたステップを送信しません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.SetRunMountTimer");
UO.SetRunMountTimer(100);

1。標準テンポに戻す - 直接スクリプト

引数と実行の流れ:

  • 値=100 — ミリ秒。この呼び出しはその後の移動を設定しますが、ルートは開始されません。
UO.SetRunMountTimer(100);

2。 1 つのモーション リクエストを一時的に遅くする - スクリプト機能

引数と実行の流れ:

  • 値=200 は、標準間隔に 100 ミリ秒を追加します。この変更は騎馬走行にのみ適用されます。たとえば、自由な方向を選択します。
  • UO.Step は Direction=2 および Running=true を取得します。コード 7 は方向転換のみを意味します。他のコードはtrue/falseではありません。 finally は、通常のシャットダウンまたはエラー処理時に以前の設定を復元します。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetRunMountTimer();
    try
    {
        UO.SetRunMountTimer(200);
        var stepResult = UO.Step(2, true);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetRunMountTimer(previous);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。値が低すぎる場合の保護をチェックする - スクリプト クラス

引数と実行の流れ:

  • 適用後の値=1は100と等しくなります。この例では文字は移動せず、元の間隔に戻します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.GetRunMountTimer();
        try
        {
            UO.SetRunMountTimer(1);
            var applied = UO.GetRunMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetRunMountTimer(previous);
        }

        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.SetRunMountTimer(value) — UO.SetRunMountTimer(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "setrunmounttimer":

                    state.RunMountTimer = ClampMoveTimer(Arg(0), 100);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetRunUnmountTimer

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

C# のシグネチャ

void UO.SetRunUnmountTimer(object? value);

歩く歩幅の間隔を設定します。意図的に速度を落としたり、標準速度に戻したりする場合に使用します。このコマンドでは、標準テンポを超えて動きを速くすることはできません。

引数

  • value — 必要な整数のミリ秒。範囲 200..2000; 0 や負の値を含む小さな値は 200 まで増加し、大きな値は 2000 まで減少します。

戻り値

void - 値がありません。別回線でお電話ください。適用された間隔を読み取るには、UO.GetRunUnmountTimer() を使用します。これはサーバーによるステップの確認ではありません。

動作

  • この設定は歩行モードに適用されます。標準および最小許容値は 200 ミリ秒です。上限は 2000 ミリ秒です。他の 3 つのモードには個別の設定があります。
  • これはキャラクターのローカル移動間隔であり、ping、FPS、経路探索タイムアウト、または測定されたサーバー ステップ継続時間ではありません。数値を大きくすると動きが遅くなります。標準間隔より短くしても、パケットの送信速度は向上しません。
  • チーム自体は移動を開始せず、マウントに乗り、歩行/走行モードを変更しません。モードは運転中に選択されます。サーバーによって指定された速度モードとフライトは、クライアントによっても考慮されます。
  • この設定は、このクライアントの移動に一般的なものです。手動制御、マップ ルート、その他のスクリプトで使用できます。一時的に変更し、前の値を保持し、操作後に復元します。複数の手順から 1 つのモードを同時に変更しないでください。
  • ターンや逸脱ステップは通常の動きとは異なります。サーバーの確認や通信の遅延、障害などにより実際の時間が長くなる可能性があります。クライアントは、欠落したフレームを補うために一連の高速化されたステップを送信しません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.SetRunUnmountTimer");
UO.SetRunUnmountTimer(200);

1。標準テンポに戻す - 直接スクリプト

引数と実行の流れ:

  • 値=200 — ミリ秒。この呼び出しはその後の移動を設定しますが、ルートは開始されません。
UO.SetRunUnmountTimer(200);

2。 1 つのモーション リクエストを一時的に遅くする - スクリプト機能

引数と実行の流れ:

  • 値=300 は、標準間隔に 100 ミリ秒を追加します。この変更は徒歩でのランニングにのみ適用されます。たとえば、自由な方向を選択します。
  • UO.Step は Direction=2 および Running=true を取得します。コード 7 は方向転換のみを意味します。他のコードはtrue/falseではありません。 finally は、通常のシャットダウンまたはエラー処理時に以前の設定を復元します。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetRunUnMountTimer();
    try
    {
        UO.SetRunUnmountTimer(300);
        var stepResult = UO.Step(2, true);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetRunUnmountTimer(previous);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。値が低すぎる場合の保護をチェックする - スクリプト クラス

引数と実行の流れ:

  • 適用後の値=1は200と等しくなります。この例では文字は移動せず、元の間隔に戻します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.GetRunUnMountTimer();
        try
        {
            UO.SetRunUnmountTimer(1);
            var applied = UO.GetRunUnMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetRunUnmountTimer(previous);
        }

        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.SetRunUnmountTimer(value) — UO.SetRunUnmountTimer(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "setrununmounttimer":

                    state.RunUnmountTimer = ClampMoveTimer(Arg(0), 200);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetWalkMountTimer

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

C# のシグネチャ

void UO.SetWalkMountTimer(object? value);

馬上で歩くときの歩幅を設定します。意図的に速度を落としたり、標準速度に戻したりする場合に使用します。このコマンドでは、標準テンポを超えて動きを速くすることはできません。

引数

  • value — 必要な整数のミリ秒。範囲 200..2000; 0 や負の値を含む小さな値は 200 まで増加し、大きな値は 2000 まで減少します。

戻り値

void - 値がありません。別回線でお電話ください。適用された間隔を読み取るには、UO.GetWalkMountTimer() を使用します。これはサーバーによるステップの確認ではありません。

動作

  • 設定はライディングモードに適用されます。標準および最小許容値は 200 ミリ秒です。上限は 2000 ミリ秒です。他の 3 つのモードには個別の設定があります。
  • これはキャラクターのローカル移動間隔であり、ping、FPS、経路探索タイムアウト、または測定されたサーバー ステップ継続時間ではありません。数値を大きくすると動きが遅くなります。標準間隔より短くしても、パケットの送信速度は向上しません。
  • チーム自体は移動を開始せず、マウントに乗り、歩行/走行モードを変更しません。モードは運転中に選択されます。サーバーによって指定された速度モードとフライトは、クライアントによっても考慮されます。
  • この設定は、このクライアントの移動に一般的なものです。手動制御、マップ ルート、その他のスクリプトで使用できます。一時的に変更し、前の値を保持し、操作後に復元します。複数の手順から 1 つのモードを同時に変更しないでください。
  • ターンや逸脱ステップは通常の動きとは異なります。サーバーの確認や通信の遅延、障害などにより実際の時間が長くなる可能性があります。クライアントは、欠落したフレームを補うために一連の高速化されたステップを送信しません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.SetWalkMountTimer");
UO.SetWalkMountTimer(200);

1。標準テンポに戻す - 直接スクリプト

引数と実行の流れ:

  • 値=200 — ミリ秒。この呼び出しはその後の移動を設定しますが、ルートは開始されません。
UO.SetWalkMountTimer(200);

2。 1 つのモーション リクエストを一時的に遅くする - スクリプト機能

引数と実行の流れ:

  • 値=300 は、標準間隔に 100 ミリ秒を追加します。この変更は乗馬にのみ適用されます。たとえば、自由な方向を選択します。
  • UO.Step は Direction=2 および Running=false を取得します。コード 7 は方向転換のみを意味します。他のコードはtrue/falseではありません。 finally は、通常のシャットダウンまたはエラー処理時に以前の設定を復元します。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetWalkMountTimer();
    try
    {
        UO.SetWalkMountTimer(300);
        var stepResult = UO.Step(2, false);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetWalkMountTimer(previous);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。値が低すぎる場合の保護をチェックする - スクリプト クラス

引数と実行の流れ:

  • 適用後の値=1は200と等しくなります。この例では文字は移動せず、元の間隔に戻します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.GetWalkMountTimer();
        try
        {
            UO.SetWalkMountTimer(1);
            var applied = UO.GetWalkMountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetWalkMountTimer(previous);
        }

        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.SetWalkMountTimer(value) — UO.SetWalkMountTimer(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "setwalkmounttimer":

                    state.WalkMountTimer = ClampMoveTimer(Arg(0), 200);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.SetWalkUnmountTimer

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

C# のシグネチャ

void UO.SetWalkUnmountTimer(object? value);

歩行ステップ間隔を設定します。意図的に速度を落としたり、標準速度に戻したりする場合に使用します。このコマンドでは、標準テンポを超えて動きを速くすることはできません。

引数

  • value — 必要な整数のミリ秒。範囲 400..2000; 0 や負の値を含む小さな値は 400 まで増加し、大きな値は 2000 まで減少します。

戻り値

void - 値がありません。別回線でお電話ください。適用された間隔を読み取るには、UO.GetWalkUnmountTimer() を使用します。これはサーバーによるステップの確認ではありません。

動作

  • この設定は歩行モードに適用されます。標準および最小許容値は 400 ミリ秒です。上限は 2000 ミリ秒です。他の 3 つのモードには個別の設定があります。
  • これはキャラクターのローカル移動間隔であり、ping、FPS、経路探索タイムアウト、または測定されたサーバー ステップ継続時間ではありません。数値を大きくすると動きが遅くなります。標準間隔より短くしても、パケットの送信速度は向上しません。
  • チーム自体は移動を開始せず、マウントに乗り、歩行/走行モードを変更しません。モードは運転中に選択されます。サーバーによって指定された速度モードとフライトは、クライアントによっても考慮されます。
  • この設定は、このクライアントの移動に一般的なものです。手動制御、マップ ルート、その他のスクリプトで使用できます。一時的に変更し、前の値を保持し、操作後に復元します。複数の手順から 1 つのモードを同時に変更しないでください。
  • ターンや逸脱ステップは通常の動きとは異なります。サーバーの確認や通信の遅延、障害などにより実際の時間が長くなる可能性があります。クライアントは、欠落したフレームを補うために一連の高速化されたステップを送信しません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.SetWalkUnmountTimer");
UO.SetWalkUnmountTimer(400);

1。標準テンポに戻す - 直接スクリプト

引数と実行の流れ:

  • 値=400 — ミリ秒。この呼び出しはその後の移動を設定しますが、ルートは開始されません。
UO.SetWalkUnmountTimer(400);

2。 1 つのモーション リクエストを一時的に遅くする - スクリプト機能

引数と実行の流れ:

  • 値=500 は、標準間隔に 100 ミリ秒を追加します。この変更は歩行にのみ適用されます。たとえば、自由な方向を選択します。
  • UO.Step は Direction=2 および Running=false を取得します。コード 7 は方向転換のみを意味します。他のコードはtrue/falseではありません。 finally は、通常のシャットダウンまたはエラー処理時に以前の設定を復元します。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.GetWalkUnmountTimer();
    try
    {
        UO.SetWalkUnmountTimer(500);
        var stepResult = UO.Step(2, false);
        if (Truth(stepResult != 7))
        {
            UO.Print("Step was not confirmed: " + Convert.ToString(stepResult));
        }
    }
    finally
    {
        UO.SetWalkUnmountTimer(previous);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。値が低すぎる場合の保護をチェックする - スクリプト クラス

引数と実行の流れ:

  • 適用後の値=1は400と等しくなります。この例では文字は移動せず、元の間隔に戻します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.GetWalkUnmountTimer();
        try
        {
            UO.SetWalkUnmountTimer(1);
            var applied = UO.GetWalkUnmountTimer();
            UO.Print("Applied delay, ms: " + Convert.ToString(applied));
        }
        finally
        {
            UO.SetWalkUnmountTimer(previous);
        }

        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.SetWalkUnmountTimer(value) — UO.SetWalkUnmountTimer(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "setwalkunmounttimer":

                    state.WalkUnmountTimer = ClampMoveTimer(Arg(0), 400);

                    bridge.SetMovementTimers(state.RunMountTimer, state.RunUnmountTimer, state.WalkMountTimer, state.WalkUnmountTimer);

                    return InjectionValue.Unit;

UO.Step

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

C# のシグネチャ

dynamic UO.Step(object? direction, object? running);

単一のステップ/ローテーションを要求し、ステップが送信された場合はサーバーの確認を待ちます。

引数

  • direction — 方向 0=N、1=NE、2=E、3=SE、4=S、5=SW、 6=W、7=NW。この実装では、ビット単位の &7; が適用されます。わかりやすくするために、0..7 を使用してください。
  • running - true/1 - リクエストの実行、false/0 - ステップ。サーバー動作の遅延は継続します。速度倍率ではありません。

戻り値

int: 7 — ステップが確認されるか、ターンのみが実行されます。 5 — サーバーがステップを拒否しました。 4 — 確認がタイムアウトしました (最大 10000 ミリ秒)。 3 — クライアントによってステップがブロックされました。 2 — キューがいっぱいです。 0 - 一般的な障害、シャットダウン、または耐久性が不十分です。 true/false ではありません。たとえば、ゼロ以外のコード 5 は失敗を意味します。

動作

  • 1 つのチームが最初にキャラクターをローテーションできます。これは必ずしも次のマスに移動することを意味するわけではありません。
  • moveCheckStamina、moveExitOnDisconnect、moveOpenDoor が考慮されます。サーバーの禁止とローカルの禁止は異なります。
  • 結果を分析せずにループでコマンドを繰り返さないでください。 UO.Wait: モーション キューとサーバーの速度には制限があります。
  • ゲーム ストリームの QueueStep は、プレーヤー、接続、方向、キュー、テンポ、ローカル トラフィックをチェックします。 Player.Walk の前に、各呼び出しはシーケンスと Walker の確認/拒否の世代を個別に記録します。次に、このスナップショットとともに Result を返します。 Step と保留中の StepControlled は、次のリクエストの共通フィールドではなく、この保存されたペアのみをチェックします。代わりのプレーヤー/ウォーカーは一般的な拒否で待機を終了します。別の通常のコマンドを確認しても、このステップは確認されません。移動を伴わない回転は別のケースのままです。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.Step(2, false);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。ステップイースト - ダイレクトスクリプト

引数と実行の流れ:

  • Direction=2 — E、実行中=false — ステップ。
  • 正確なコード 7 がチェックされます。動きを確認するには、前後のX/Yを比較してください。
var result = UO.Step(2, false);
if (Truth(result == 7))
{
    UO.Print("Step accepted or turn completed");
}
else
{
    UO.Print("Movement status: " + Convert.ToString(result));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。回転と平行移動の区別 - スクリプト関数

引数と実行の流れ:

  • Direction=0 — N。座標は呼び出しの前後に読み取られます。
  • 回転時や故障時に位置が変わらない可能性があるため、別途結果が必要となります。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var result = UO.Step(0, false);
    if (Truth(UO.GetX() == x) && Truth(UO.GetY() == y))
    {
        UO.Print("Position unchanged; status=" + Convert.ToString(result));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。実行時のサーバー障害の処理 - スクリプト クラス

引数と実行の流れ:

  • Direction=4 — S, Running=true.
  • コード 5 - サーバー障害。 UO.Wait=250 ms はスクリプトの一時停止を指定しますが、次の試行が成功することを保証するものではありません。

標準走行速度

最小ステップ間隔: ウォーキング - ウォーキング 400 ミリ秒、ランニング 200 ミリ秒。乗車 - ウォーキング 200 ミリ秒、ランニング 100 ミリ秒。

これらは標準的なクライアント制限であり、シャードに対して自動的に定義される設定ではありません。サーバーの速度とフライト モードは個別にカウントされます。スクリプト タイマーは動作を遅くする可能性がありますが、これらの制限は軽減されません。

ステップ、ルート、Follow、マウス/キー コントロール、マップはキャラクターの共有キューを使用します。サーバーによるルートの置き換え、方向転換、または位置の調整では、ステップ要求後の残りの一時停止はキャンセルされません。遅延の後は、ドロップされたフレームを補うための高速バーストはありません。確認を待っていたり、障害物があったり、コミュニケーションが不十分だったりすると、動きが遅くなる可能性があります。

return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var result = UO.Step(4, true);
        if (Truth(result == 5))
        {
            UO.Print("Server denied the step");
            await Delay(250);
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.Step(direction, running) — UO.Step(Any,Any)

引数: direction (Any), running (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "step":

                    if (state.MoveExitOnDisconnect != 0 && bridge.IsOnline() == 0)

                        return new InjectionValue(0);

                    if (state.MoveCheckStamina > 0 && bridge.Stamina < state.MoveCheckStamina)

                        return new InjectionValue(0);

                    if (state.MoveOpenDoor != 0)

                        bridge.OpenDoor();

                    return new InjectionValue(bridge.Step(Arg(0) & 7, Arg(1) != 0));

UO.StepQ

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

C# のシグネチャ

int UO.StepQ(object? direction, object? run);
int UO.StepQ(object? direction, object? run, object? timeout);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue);
int UO.StepQ(object? direction, object? run, object? timeout, object? queue, object? waitForAck);

リクエストはキューを 1 ステップ通過します。追加のフォームは、キューが空いて確認されるまで待機する場合があります。

引数

  • direction — 方向 0=N、1=NE、2=E、3=SE、4=S、5=SW、 6=W、7=NW。この実装では、ビット単位の &7; が適用されます。わかりやすくするために、0..7 を使用してください。
  • run - true/1 - リクエストの実行、false/0 - ステップ。サーバー動作の遅延は継続します。速度倍率ではありません。
  • timeout — オプションのキュー待機時間 (ミリ秒)。 0/negative はリリースを待ちません。 waitForAck=true およびタイムアウト=0 では、10000 ミリ秒前に確認が期待されます。値が正の場合、確認の待機は同じ期間の別の期間を受け取ります。
  • queue — オプションのフラグ、デフォルトは true。 false は、ステップを要求するときに forcePacket を送信します。サーバー制限をオーバーライドしたり、蓄積されたキューをクリアしたりしません。
  • waitForAck - false/absent - ステートメントの結果をすぐに返します。 true — 送信されたステップについて、確認/拒否を待ちます。

戻り値

waitForAck なしの int: 0..255 — 有効な 0 を含む、送信されたリクエストのシーケンス。 256 - ターンのみ。 -2 — クライアント上の障害。 -1 - 一般的な障害/キューがいっぱい/シャットダウン/耐久性。 waitForAck=trueの場合: 7 - 確認、5 - サーバー障害、4 - タイムアウト。 -1/-2/256 は以前の意味を保持します。待機なしのフォーム内の番号 7 は順序であり、確認ではありません。特定の数値コードを確認してください。 C# の int の (結果) が無効です。

動作

  • 1 つのチームが最初にキャラクターをローテーションできます。これは必ずしも次のマスに移動することを意味するわけではありません。
  • moveCheckStamina、moveExitOnDisconnect、moveOpenDoor が考慮されます。サーバーの禁止とローカルの禁止は異なります。
  • 結果を分析せずにループでコマンドを繰り返さないでください。 UO.Wait: モーション キューとサーバーの速度には制限があります。
  • 待機しないと、コマンドは位置の変更を確認しません。 LastStepQUsedDoor は、ステップの結果ではなく、ドアを開けようとしたことを示します。
  • ゲーム ストリームの QueueStep は、プレーヤー、接続、方向、キュー、テンポ、ローカル トラフィックをチェックします。 Player.Walk の前に、各呼び出しはシーケンスと Walker の確認/拒否の世代を個別に記録します。次に、このスナップショットとともに Result を返します。 Step と保留中の StepControlled は、次のリクエストの共通フィールドではなく、この保存されたペアのみをチェックします。代わりのプレーヤー/ウォーカーは一般的な拒否で待機を終了します。別の通常のコマンドを確認しても、このステップは確認されません。移動を伴わない回転は別のケースのままです。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

var result = UO.StepQ(2, false);
UO.Print("StepQ: " + Convert.ToString(result));

1。待たずにシーケンスを取得 - 直接スクリプト

引数と実行の流れ:

  • 方向=2 — E、実行=false。引数が 2 つある場合は、確認を待たずに通常の設定を行うことを意味します。
  • sequence=0 は有効なステージング成功です。 sequence=256 は回転を意味します。
var sequence = UO.StepQ(2, false);
if (Truth(sequence >= 0) && Truth(sequence <= 255))
{
    UO.Print("Queued sequence: " + Convert.ToString(sequence));
}
else
{
    UO.Print("Queue status: " + Convert.ToString(sequence));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。確認を待つ - スクリプト関数

引数と実行の流れ:

  • direction=4 — S, run=true, timeout=1500 MS。キュー=true waitForAck=true.
  • 席を待ってから応答するまでに、最大 2 1500 ミリ秒の間隔がかかる場合があります。 256 では回転について別途考慮する必要があります。
return  RunScenario();
 object? RunScenario()
{
    var status = UO.StepQ(4, true, 1500, true, true);
    if (Truth(status == 7))
    {
        UO.Print("Server confirmed");
    }
    else
    {
        UO.Print("Step status: " + Convert.ToString(status));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。ローカルウォールを別途処理 - スクリプトクラス

引数と実行の流れ:

  • 方向 = 6 — W、実行 = false; timeout=0 は列に並んで待機しません。 queue=false リクエスト forcePacket、waitForAck=false。
  • ForcePacket には壁を通過する権利は与えられません。 -2 の場合、同じセルに再度送信するのではなく、別のルートを計算します。

標準走行速度

最小ステップ間隔: ウォーキング - ウォーキング 400 ミリ秒、ランニング 200 ミリ秒。乗車 - ウォーキング 200 ミリ秒、ランニング 100 ミリ秒。

これらは標準的なクライアント制限であり、シャードに対して自動的に定義される設定ではありません。サーバーの速度とフライト モードは個別にカウントされます。スクリプト タイマーは動作を遅くする可能性がありますが、これらの制限は軽減されません。

ステップ、ルート、Follow、マウス/キー コントロール、マップはキャラクターの共有キューを使用します。サーバーによるルートの置き換え、方向転換、または位置の調整では、ステップ要求後の残りの一時停止はキャンセルされません。遅延の後は、ドロップされたフレームを補うための高速バーストはありません。確認を待っていたり、障害物があったり、コミュニケーションが不十分だったりすると、動きが遅くなる可能性があります。

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var status = UO.StepQ(6, false, 0, false, false);
        if (Truth(status == -2))
        {
            UO.Print("Local obstacle; calculate another route");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.StepQ(direction, run) — UO.StepQ(Any,Any)

引数: direction (Any), run (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout) — UO.StepQ(Any,Any,Any)

引数: direction (Any), run (Any), timeout (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout, queue) — UO.StepQ(Any,Any,Any,Any)

引数: direction (Any), run (Any), timeout (Any), queue (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactStepQ(values))

UO.StepQ(direction, run, timeout, queue, waitForAck) — UO.StepQ(Any,Any,Any,Any,Any)

引数: direction (Any), run (Any), timeout (Any), queue (Any), waitForAck (Any)

結果: int / Integer.

呼び出し時:

呼び出し時には保存済みのハンドラー delegate を実行します。登録メソッドは API の構築時にこの delegate を作成します。

内部実装のコードです。単独のスクリプトとして実行できません。

values => new InjectionValue(CompactStepQ(values))

UO.moveBetweenTwoCorners

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

C# のシグネチャ

dynamic UO.moveBetweenTwoCorners();
dynamic UO.moveBetweenTwoCorners(object? value);

2 辺の正方形がブロックされた対角解像度。

引数

  • value — オプションの新しい値。 0 は禁止し、非ゼロは 1 になります。サーバーは、クライアントの構成に関係なく、そのようなパスを拒否する場合があります。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveBetweenTwoCorners();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveBetweenTwoCorners();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=0。 0 は禁止し、非ゼロは 1 になります。サーバーは、クライアントの構成に関係なく、そのようなパスを拒否する場合があります。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveBetweenTwoCorners(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveBetweenTwoCorners();
        UO.moveBetweenTwoCorners(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveBetweenTwoCorners(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveBetweenTwoCorners() — UO.moveBetweenTwoCorners()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movebetweentwocorners":

                    if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;

                    return new InjectionValue(state.MoveBetweenTwoCorners);

UO.moveBetweenTwoCorners(value) — UO.moveBetweenTwoCorners(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movebetweentwocorners":

                    if (arguments.Length > 0) state.MoveBetweenTwoCorners = Arg(0) != 0 ? 1 : 0;

                    return new InjectionValue(state.MoveBetweenTwoCorners);

UO.moveCheckStamina

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

C# のシグネチャ

dynamic UO.moveCheckStamina();
dynamic UO.moveCheckStamina(object? value);

移動コマンドの最小スタミナ。

引数

  • value — オプションの新しい値。整数 >=0;マイナスは0になります。ゼロを指定すると、しきい値チェックがオフになります。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • デフォルトは1です。値 0 は、このローカル チェックを無効にします。正の値は最小耐久性を設定します。しきい値を下回ると、スタミナの回復を待たずに発射が拒否されるか、動きが停止されます。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveCheckStamina();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveCheckStamina();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=15。整数 >=0;マイナスは0になります。ゼロを指定すると、しきい値チェックがオフになります。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveCheckStamina(15);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveCheckStamina();
        UO.moveCheckStamina(15);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveCheckStamina(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveCheckStamina() — UO.moveCheckStamina()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);

UO.moveCheckStamina(value) — UO.moveCheckStamina(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movecheckstamina": if (arguments.Length > 0) state.MoveCheckStamina = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveCheckStamina);

UO.moveExitOnDisconnect

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

C# のシグネチャ

dynamic UO.moveExitOnDisconnect();
dynamic UO.moveExitOnDisconnect(object? value);

接続が切断されたときに動作を停止/拒否します。

引数

  • value — オプションの新しい値。 0 がオフになり、非ゼロは 1 になります。検証を無効にすると、接続せずにサーバー上を移動できなくなります。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveExitOnDisconnect();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveExitOnDisconnect();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=1。 0 がオフになり、非ゼロは 1 になります。検証を無効にすると、接続せずにサーバー上を移動できなくなります。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveExitOnDisconnect(1);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveExitOnDisconnect();
        UO.moveExitOnDisconnect(1);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveExitOnDisconnect(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveExitOnDisconnect() — UO.moveExitOnDisconnect()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);

UO.moveExitOnDisconnect(value) — UO.moveExitOnDisconnect(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveexitondisconnect": if (arguments.Length > 0) state.MoveExitOnDisconnect = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveExitOnDisconnect);

UO.moveHeuristicMult

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

C# のシグネチャ

dynamic UO.moveHeuristicMult();
dynamic UO.moveHeuristicMult(object? value);

パスファインダーのヒューリスティック乗数 (パーセンテージ)。

引数

  • value — オプションの新しい値。整数 >=0 は保持されます。 1 を確認してください。 100 値は通常の推定値に対応します。 >100 は、最低コスト保証なしでより高速な検索を好む場合があります。最適化=false または 1。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveHeuristicMult();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveHeuristicMult();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=100。整数 >=0 は保持されます。少なくとも 1 を検索する前に。 100 値は通常の推定値に対応します。 >100 は、最低コスト保証なしでより高速な検索を好む場合があります。 Optimized=false の場合、1 が使用されます。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveHeuristicMult(100);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveHeuristicMult();
        UO.moveHeuristicMult(100);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveHeuristicMult(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveHeuristicMult() — UO.moveHeuristicMult()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);

UO.moveHeuristicMult(value) — UO.moveHeuristicMult(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveheuristicmult": if (arguments.Length > 0) state.MoveHeuristicMultiplier = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveHeuristicMultiplier);

UO.moveOpenDoor

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

C# のシグネチャ

dynamic UO.moveOpenDoor();
dynamic UO.moveOpenDoor(object? value);

進行方向のドアを開けようとします。

引数

  • value — オプションの新しい値。 0 がオフになり、非ゼロは 1 になります。 NewMoveXY/MoveXYZ の明示的な openDoors は、呼び出し中にこのフラグを置き換えます。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • デフォルトは0です。 1 では、ドアセルは A* 中に通行可能とみなされます。ステップの前に、隣接する特定のドアを開けようとする試みが行われます。既知のドア オブジェクトがない場合は、OpenDoor クエリが使用されます。
  • このフラグはドア自体を閉めるわけではありません。キャラクターによって開かれたドアを閉じることは、別のクライアント設定です。ドアがロックされたり、サーバーが禁止されたりすると、ルートが中断される可能性があります。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveOpenDoor();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveOpenDoor();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=1。 0 がオフになり、非ゼロは 1 になります。 NewMoveXY/MoveXYZ の明示的な openDoors は、呼び出し中にこのフラグを置き換えます。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveOpenDoor(1);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveOpenDoor();
        UO.moveOpenDoor(1);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveOpenDoor(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveOpenDoor() — UO.moveOpenDoor()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);

UO.moveOpenDoor(value) — UO.moveOpenDoor(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveopendoor": if (arguments.Length > 0) state.MoveOpenDoor = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveOpenDoor);

UO.moveThroughCorner

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

C# のシグネチャ

dynamic UO.moveThroughCorner();
dynamic UO.moveThroughCorner(object? value);

片側のセルがブロックされた場合のセル間の対角線の解像度。

引数

  • value — オプションの新しい値。 0 は禁止し、非ゼロは 1 になります。両側のマスがブロックされた場合、moveBetweenTwoCornersが適用されます。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveThroughCorner();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveThroughCorner();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=0。 0 は禁止し、非ゼロは 1 になります。両側のマスがブロックされた場合、moveBetweenTwoCornersが適用されます。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveThroughCorner(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveThroughCorner();
        UO.moveThroughCorner(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveThroughCorner(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveThroughCorner() — UO.moveThroughCorner()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);

UO.moveThroughCorner(value) — UO.moveThroughCorner(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movethroughcorner": if (arguments.Length > 0) state.MoveThroughCorner = Arg(0) != 0 ? 1 : 0; return new InjectionValue(state.MoveThroughCorner);

UO.moveThroughNPC

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

C# のシグネチャ

dynamic UO.moveThroughNPC();
dynamic UO.moveThroughNPC(object? value);

文字を通過する試みを許可します。

引数

  • value — オプションの新しい値。整数 >=0、負の場合は 0;肯定的な場合はその試みが許可されます。明示的な avoidMobiles は、単一呼び出しの逆制約を指定します。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • デフォルトは1000です。値 0 は、ロードされたキャラクターを障害物として保存します。値 >0 は、それらを通過する試みを許可します。これは耐久性のしきい値ではありません。値 1 と 1000 には同じレジームが含まれます。サーバーへのアクセス禁止は引き続き有効です。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveThroughNPC();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveThroughNPC();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=0。整数 >=0、負の場合は 0;肯定的な場合はその試みが許可されます。明示的な avoidMobiles は、単一呼び出しの逆制約を指定します。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveThroughNPC(0);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveThroughNPC();
        UO.moveThroughNPC(0);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveThroughNPC(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveThroughNPC() — UO.moveThroughNPC()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);

UO.moveThroughNPC(value) — UO.moveThroughNPC(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "movethroughnpc": if (arguments.Length > 0) state.MoveThroughNpc = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveThroughNpc);

UO.moveTurnCost

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

C# のシグネチャ

dynamic UO.moveTurnCost();
dynamic UO.moveTurnCost(object? value);

パスを見つけるときに方向を変更すると追加コストがかかります。

引数

  • value — オプションの新しい値。整数 >=0、負の場合は 0 になります。これはミリ秒ではなくルートの重みです。直線のステップでは 10、斜めのステップでは 14 のコストがかかり、これはターンごとの追加です。

戻り値

int は現在格納されている値です。引数なしの場合は読み取りのみです。引数を指定すると、上記のルールを適用した後の値が返されます。これは設定であり、動きの結果ではありません。

動作

  • 設定は実行時の状態に保存され、起動時に対応するコマンドによって使用されます。この変更によって、すでに構築されているパスが自動的に上書きされることはありません。
  • 正常終了の場合は元の値を返す場合を示します。クラッシュ後、次の回復行は実行されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.moveTurnCost();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 引数がないので状態は変わりません。
  • value は、この設定の数値です。
var value = UO.moveTurnCost();
UO.Print(Convert.ToString(value));

2。明示的な値の設定 - スクリプト関数

引数と実行の流れ:

  • 値=14。整数 >=0、負の場合は 0 になります。これはミリ秒ではなくルートの重みです。直線のステップでは 10、斜めのステップでは 14 のコストがかかり、これはターンごとの追加です。
  • apply は、目標の成功の達成ではなく、保存された値を示します。
return  RunScenario();
 object? RunScenario()
{
    var applied = UO.moveTurnCost(14);
    UO.Print("Applied: " + Convert.ToString(applied));
    return null;
}

3。スクリプトの 1 つのセクション (スクリプト クラス) に適用します。

引数と実行の流れ:

  • 前には初期設定が保存されます。 NewMoveXY は 3000 ミリ秒に制限されます。
  • 最後のコマンドは通常動作復帰後の設定を復元します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.moveTurnCost();
        UO.moveTurnCost(14);
        var ok = UO.NewMoveXY(UO.GetX() + 2, UO.GetY(), true, 0, false, 0, 3000);
        UO.moveTurnCost(previous);
        UO.Print(Convert.ToString(ok));
        return null;
    }
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.moveTurnCost() — UO.moveTurnCost()

引数: 引数はありません。

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);

UO.moveTurnCost(value) — UO.moveTurnCost(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "moveturncost": if (arguments.Length > 0) state.MoveTurnCost = Math.Max(0, Arg(0)); return new InjectionValue(state.MoveTurnCost);

Clone this wiki locally