JA UO Topic world geometry Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

世界と幾何学 — 2

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

リファレンスの各部

1 · 2

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


UO.GetZ

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

C# のシグネチャ

int UO.GetZ();
int UO.GetZ(object? id);

ロードされたオブジェクトまたは現在のキャラクターの Z フィールドを読み取ります。

引数

  • id はオブジェクトのシリアル/ID であり、graphic/type ではありません。数値、16 進文字列、標準名 self/backpack/lasttarget/lastobject/lastcontainer/laststatus/finditem/lastcorpse または名前 AddObject。エイリアスを設定する必要があります。 Existsで存在を確認します。引数なしで登録されたフォームは self を使用します。

戻り値

int は Z の高さです。未知のオブジェクトの場合は、0 が返されます。ゼロも有効な座標です。高さは負の値にすることもできます。これは機器レイヤーや静的インデックスではありません。

動作

  • クライアントがすでに知っている最新のデータが読み取られます。更新リクエストはサーバーに送信されません。
  • 不明なオブジェクトおよびまだ取得されていないプロパティは、null/空の値を持つ可能性があります。 Exists と特定のアクションの条件を確認してください。
  • 地面上のキャラクターまたはオブジェクトの場合、これはワールド座標です。コンテナ内のアイテムはガンプ内で X/Y 位置を持ちます。このコマンドは、それらをオーナーのワールド座標に変換しません。
  • オブジェクトの現在の座標が読み取られます。保留中のステップは、このコマンドではルート計算に変換されません。

例 .csx

int z = UO.GetZ();
UO.Print($"Z = {z}");

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

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

簡単な例

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

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

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

1。座標を読み取る - 直接スクリプト

引数と実行の流れ:

  • 引数のない形式では、現在の文字である self が選択されます。
  • 位置には、serial ではなく、Z の高さが含まれます。
var position = UO.GetZ();
UO.Print("Z: " + Convert.ToString(position));

2。選択した文字と比較 - スクリプト関数

引数と実行の流れ:

  • lasttarget は、地面にロードされたキャラクターまたはアイテムを指す必要があります。
  • デルタ — 1 つの軸に沿った差。ルートの長さではありません。値は負の値になる可能性があります。
return  RunScenario();
 object? RunScenario()
{
    var other = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(other)))
    {
        var delta = UO.GetZ(other) - UO.GetZ();
        UO.Print("Difference: " + Convert.ToString(delta));
    }

    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。ポイントを覚えて後で比較する - スクリプト クラス

引数と実行の流れ:

  • id="self" は文字選択の明示的な形式です。 UO.Wait=500 ミリ秒。
  • 比較では、Z 軸の変化のみが表示されます。他の軸または回転の変更はここでは考慮されません。
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 before = UO.GetZ("self");
        await Delay(500);
        var after = UO.GetZ("self");
        if (Truth(before != after))
        {
            UO.Print("Coordinate changed");
        }

        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.GetZ() — UO.GetZ()

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

結果: int / Integer.

呼び出し時:

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

public int GetZ() => GetZ("self");

UO.GetZ(id) — UO.GetZ(Any)

引数: id (Any/Integer/String)

結果: int / Any.

呼び出し時:

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

case "getz": return new InjectionValue(bridge.GetZ(Arg(0, bridge.Self)));

UO.GetZ(id) — UO.GetZ(Integer)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

public int GetZ(int id) => bridge.GetZ(id);

UO.GetZ(id) — UO.GetZ(String)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

public int GetZ(string id) => GetZ(GetObject(id));

UO.IsMineTile

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

C# のシグネチャ

int UO.IsMineTile(object? x, object? y);

セルの特性をローカル マップ データと照合してチェックします。

引数

  • x — 現在のカードの int X セル。画面ピクセルではなく世界座標。
  • y — 現在のカードの int Y セル。画面ピクセルではなく世界座標。

戻り値

数値フラグ int: 1 — 条件に一致するオブジェクトが見つかりました。 0 - そのようなオブジェクトが存在しないか、セル/カードにアクセスできません。

動作

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsMineTile: StaticFilters.IsRock または洞窟、山、岩を含む名前を含む静的/マルチ (大文字と小文字は区別されません)。
  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。

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

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

簡単な例

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

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

var result = UO.IsMineTile(UO.GetX(), UO.GetY());
UO.Print("IsMineTile: " + Convert.ToString(result));

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

引数と実行の流れ:

  • セルの特性をローカル マップ データと照合してチェックします。
UO.Print(UO.IsMineTile(UO.GetX(), UO.GetY()));

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

引数と実行の流れ:

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsMineTile: StaticFilters.IsRock または洞窟、山、岩を含む名前を含む静的/マルチ (大文字と小文字は区別されません)。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsMineTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsMineTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsMineTile(x, y));
        return null;
    }
}

コマンドの実装

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

UO.IsMineTile(x, y) — UO.IsMineTile(Any,Any)

引数: x (Any), y (Any)

結果: int / Integer.

呼び出し時:

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

public int IsMineTile(InjectionValue x, InjectionValue y) => bridge.IsMineTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsTreeTile

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

C# のシグネチャ

int UO.IsTreeTile(object? x, object? y);

セルの特性をローカル マップ データと照合してチェックします。

引数

  • x — 現在のカードの int X セル。画面ピクセルではなく世界座標。
  • y — 現在のカードの int Y セル。画面ピクセルではなく世界座標。

戻り値

数値フラグ int: 1 — 条件に一致するオブジェクトが見つかりました。 0 - そのようなオブジェクトが存在しないか、セル/カードにアクセスできません。

動作

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsTreeTile: StaticFilters.IsTree によってスタティック/マルチが認識されます。
  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。

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

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

簡単な例

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

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

var result = UO.IsTreeTile(UO.GetX(), UO.GetY());
UO.Print("IsTreeTile: " + Convert.ToString(result));

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

引数と実行の流れ:

  • セルの特性をローカル マップ データと照合してチェックします。
UO.Print(UO.IsTreeTile(UO.GetX(), UO.GetY()));

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

引数と実行の流れ:

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsTreeTile: StaticFilters.IsTree によってスタティック/マルチが認識されます。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsTreeTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsTreeTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsTreeTile(x, y));
        return null;
    }
}

コマンドの実装

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

UO.IsTreeTile(x, y) — UO.IsTreeTile(Any,Any)

引数: x (Any), y (Any)

結果: int / Integer.

呼び出し時:

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

public int IsTreeTile(InjectionValue x, InjectionValue y) => bridge.IsTreeTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsWaterTile

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

C# のシグネチャ

int UO.IsWaterTile(object? x, object? y);

セルの特性をローカル マップ データと照合してチェックします。

引数

  • x — 現在のカードの int X セル。画面ピクセルではなく世界座標。
  • y — 現在のカードの int Y セル。画面ピクセルではなく世界座標。

戻り値

数値フラグ int: 1 — 条件に一致するオブジェクトが見つかりました。 0 - そのようなオブジェクトが存在しないか、セル/カードにアクセスできません。

動作

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsWaterTile: TileData.IsWet または有効な静的 graphic とフラグ IsWet を持つオブジェクトで着陸します。
  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。

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

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

簡単な例

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

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

var result = UO.IsWaterTile(UO.GetX(), UO.GetY());
UO.Print("IsWaterTile: " + Convert.ToString(result));

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

引数と実行の流れ:

  • セルの特性をローカル マップ データと照合してチェックします。
UO.Print(UO.IsWaterTile(UO.GetX(), UO.GetY()));

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

引数と実行の流れ:

  • AnyTileAt はロードされたセルの TNext チェーンをバイパスします。条件 IsWaterTile: TileData.IsWet または有効な静的 graphic とフラグ IsWet を持つオブジェクトで着陸します。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX() + 1;
    var y = UO.GetY();
    if (Truth(UO.IsWaterTile(x, y)))
    {
        UO.Print("Local tile predicate matched");
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • このチェックでは、ローカルのタイルデータ/フィルターについて説明します。マイニングされたリソースの可用性、国を越えた能力、範囲、またはマイニングのためのサーバー許可を約束するものではありません。
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 x = UO.GetX();
        var y = UO.GetY();
        var before = UO.IsWaterTile(x, y);
        UO.Wait(500);
        UO.Print(before = UO.IsWaterTile(x, y));
        return null;
    }
}

コマンドの実装

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

UO.IsWaterTile(x, y) — UO.IsWaterTile(Any,Any)

引数: x (Any), y (Any)

結果: int / Integer.

呼び出し時:

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

public int IsWaterTile(InjectionValue x, InjectionValue y) => bridge.IsWaterTile(NumberConversions.ToInt(x), NumberConversions.ToInt(y));

UO.IsWorldCellPassable

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

C# のシグネチャ

dynamic UO.IsWorldCellPassable(object? currX, object? currY, object? currZ, object? destX, object? destY, object? destZ, object? worldNum);

隣接するワールド セルへの 1 つの遷移をチェックし、高さとともに通過可能フラグを返します。

引数

  • currX — ソースセルの必須のワールド X 座標。ロードされたマップ内の整数 0..65535。これはガンプコーディネートではありません。
  • currY — ソースセルの必須のワールド Y 座標。ロードされたマップ内の整数 0..65535。これはガンプコーディネートではありません。
  • currZ — 必須の初期高さ −128..127。これは階数ではなく、世界の高さです。無効な高さは拒否され、トリミングされません。
  • destX — ターゲット セルの必須のワールド X 座標。ロードされたマップ内の整数 0..65535。これはガンプコーディネートではありません。
  • destY — ターゲット セルの必須のワールド Y 座標。ロードされたマップ内の整数 0..65535。これはガンプコーディネートではありません。
  • destZ - 必須の入力スペア Z、通常は CurrZ。これは var ではありません。変数は変更されず、必要な下限も設定されません。結果から計算された高さを読み取ります[1]。この橋は常にその高さを返します。引数は Pascal 形式との互換性のために必要です。
  • worldNum — 必須のカード番号: UO.WorldNum()。既知の寸法を持つ現在のマップのみがチェックされます。他のマップは読み込まれません。

戻り値

2 つの int の配列: [0] - 通過可能性、1 (条件が満たされた)、0 (条件が満たされていない)。 [1] - Z を計算しました。最初の要素のみが論理的です。アレイ自体を true と比較することはできません。身長 0/マイナスも許容されます。 [0]=0 の場合、高さは到達可能性を証明しません。引数を拒否すると、[0, CurrZ] が返されます。

動作

  • 動きはなく、ドアが開き、十字線もネットワークパケットもありません。既存のローカル ジオメトリが読み取られます。サーバーは後でステップを拒否する可能性があります。 2 つのリクエストには異なる状態が表示される場合があります。
  • 隣接するセルは受け入れられます (X/Y の差は 1 以下です)。より遠くのターゲット、マップを超えている場合、キャラクター/カードがない場合、および IsDestroyed は計算前に拒否します。完全なルートを表示するには、GetPathArray または NewMoveXY を使用します。
  • 同じ有効な X/Y は、衝突チェックなしで [1, CurrZ] を与えます。ステップは必要ありません。これは檻から脱出する能力を試すものではありません。キャラクターの状態と現在のパスファインダー ルールは、隣接するステップに影響します。ロードされたジオメトリがないと拒否される可能性があります。

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

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

簡単な例

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

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

object? result = UO.IsWorldCellPassable(UO.GetX(), UO.GetY(), UO.GetZ(), UO.GetX() + 1, UO.GetY(), UO.GetZ(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。東のセルをチェック - 直接スクリプト

引数と実行の流れ:

  • x/y/z は開始位置、x+1/y は隣接するセル、6 番目のパラメーター z は予備の Z、最後のパラメーターは現在のカードです。 result[0]はresult[1]を使用する前にチェックされます。
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
var result = UO.IsWorldCellPassable(x,y,z,x+1,y,z,UO.WorldNum());
if (Truth(Truth(result[0]) == true))
{
    UO.Print("Passable, Z=" + Convert.ToString(result[1]));
}
else
{
    UO.Print("Blocked");
}

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

2。入力引数を変更せずに Z を読み取る - スクリプト関数

引数と実行の流れ:

  • 呼び出し後、proposedZ は 0 のままです。 targetZ は引数からではなく、結果 [1] から取得されます。失敗した場合、この例では高さについての推論は行われません。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var z = UO.GetZ();
    var proposedZ = 0;
    var result = UO.IsWorldCellPassable(x, y, z, x, y + 1, proposedZ, UO.WorldNum());
    if (Truth(result[0] == 1))
    {
        var targetZ = result[1];
        UO.Print("Input=" + Convert.ToString(proposedZ) + "; result=" + Convert.ToString(targetZ));
    }

    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。フル機能 IsCellOpen - スクリプトクラス

引数と実行の流れ:

  • Main の下の完全なヘルパーは、ソース X/Y/Z、ターゲット X/Y、およびマップを受け入れます。必要な 6 番目の引数を追加し、配列ではなく int 1/0 のみを返します。したがって、IsCellOpen の結果は true と比較できます。コードはキャラクターを動かしません。
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 x = UO.GetX();
        var y = UO.GetY();
        var openCell = IsCellOpen(x, y, UO.GetZ(), x + 1, y + 1, UO.WorldNum());
        if (Truth(Truth(openCell) == true))
        {
            UO.Print("Diagonal cell is locally passable");
        }

        return null;
    }

    dynamic IsCellOpen(dynamic x, dynamic y, dynamic z, dynamic toX, dynamic toY, dynamic map)
    {
        var cellResult = UO.IsWorldCellPassable(x, y, z, toX, toY, z, map);
        if (Truth(ArrayLength(cellResult) != 2))
        {
            return 0;
        }

        return cellResult[0];
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    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.IsWorldCellPassable(currX, currY, currZ, destX, destY, destZ, worldNum) — UO.IsWorldCellPassable(Any,Any,Any,Any,Any,Any,Any)

引数: currX (Any), currY (Any), currZ (Any), destX (Any), destY (Any), destZ (Any), worldNum (Any)

結果: dynamic / Array.

呼び出し時:

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

case "isworldcellpassable":

                {

                    int destinationZFallback = Arg(5);

                    int[] step = bridge.CheckWorldStep(Arg(0), Arg(1), Arg(2), Arg(3), Arg(4), Arg(6));

                    int passable = step.Length > 0 ? step[0] : 0;

                    int destinationZ = step.Length > 1 ? step[1] : destinationZFallback;

                    return new InjectionValue(new[] { new InjectionValue(passable), new InjectionValue(destinationZ) });

                }

UO.LOSOptions

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

C# のシグネチャ

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

ローカルパラメータマスクLOSランタイムを読み取るか保存します。

引数

  • value - オプションのint;引数なしは読み取り専用です。このスレッドでは、範囲と個々のビットはチェックされません。マイナー byte (値 & 0xFF) はアルゴリズム 1..4 を選択します。 CheckLosCell のマイナー byte の他の値には、3 アルゴリズムが使用されます。アルゴリズム1/2は壁と通行不能をブロックし、3はさらにNoShootをブロックし、4は0x200でのみNoShootを有効にし、0x400でのみ窓の障害物を許可します。ビット 0x100 は、選択されたアルゴリズムの各対角ビーム ステップの両側のセルをさらにチェックします。 value=0 は追加の CheckLosCell/対角チェックを無効にしますが、BadLocations と CheckWorldStep は残ります。たとえば、4+0x100+0x200+0x400 は 3 つのフラグでカスタムを選択します。 setter は、正規化されたアルゴリズムではなく、元の int を保持します。

戻り値

int - 可能な記録後の状態。LosOptions。これはパラメーター コード/マスクであり、bool ではなく、可視性チェックの結果でもありません。

動作

  • ExecuteClientApiCompatibility は状態を割り当てます。 LosOptions には引数が与えられ、同じフィールドが返されます。この呼び出しは CheckLOS を実行せず、壁をチェックしません。
  • 設定はランタイムに属します。これはサーバーの可視性を保証するものではなく、障害物を通り抜ける方法でもありません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。
  • マイナー byte (値 & 0xFF) はアルゴリズム 1..4 を選択します。 CheckLosCell のマイナー byte の他の値には、3 アルゴリズムが使用されます。アルゴリズム1/2は壁と通行不能をブロックし、3はさらにNoShootをブロックし、4は0x200でのみNoShootを有効にし、0x400でのみ窓の障害物を許可します。ビット 0x100 は、選択されたアルゴリズムの各対角ビーム ステップの両側のセルをさらにチェックします。 value=0 は追加の CheckLosCell/対角チェックを無効にしますが、BadLocations と CheckWorldStep は残ります。たとえば、4+0x100+0x200+0x400 は 3 つのフラグを持つカスタムを選択します。 setter は、正規化されたアルゴリズムではなく、元の int を保持します。
  • ゼロ以外の長さのビームは、現在ロードされている _world.Map/World.Map のみを読み取ります。 CheckWorldStep を介して、WorldNum == _world.MapIndex とライブ Player.Pathfinder が必要です。別のファセットはロードまたは要求されていません。マップ/キャラクター/パスファインダーがないか、ステップが利用できません - 0。同一の X/Y を除外すると、セルのサイクル全体がスキップされます。X/Y が 0..65535、WorldNum が 0..255 で、abs(Zfrom-Zto)<=20 は、ロードされているカードがなくても、または異なるカード番号があっても、1 を返します。これは、ジオメトリや到達可能性を証明するものではありません。結果はローカルであり、LOS サーバー ソリューションではありません。
  • CheckLosCell は、1 つのセルのロードされた Land/Static/Multi/Item をバイパスします。 ABS(rayZ-land.Z)<=20 の通行不能な土地ブロック。 Static/Multi/Item フラグは、tile.Z-2 .. tile.Z+max(1,Height)+2; の範囲でのみ有効です。許可されたカスタム ウィンドウは、Wall/Impassable/NoShoot がチェックされるまでスキップされます。 X/Y ビームはブレゼンハムを使用し、最大 4096 ステップ。 Z はサーフェス CheckWorldStep から取得され、Zto に補間されません。最終的な高さの許容差は 20 です。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • ローカルパラメータマスクLOSランタイムを読み取るか保存します。
UO.Print(UO.LOSOptions());

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

引数と実行の流れ:

  • ExecuteClientApiCompatibility は状態を割り当てます。 LosOptions には引数が与えられ、同じフィールドが返されます。この呼び出しは CheckLOS を実行せず、壁をチェックしません。
return  RunScenario();
 object? RunScenario()
{
    var before = UO.LOSOptions();
    UO.Print(UO.LOSOptions(0));
    UO.LOSOptions(before);
    return null;
}

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

引数と実行の流れ:

  • 設定はランタイムに属します。これはサーバーの可視性を保証するものではなく、障害物を通り抜ける方法でもありません。
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 original = UO.LOSOptions();
        UO.LOSOptions(original);
        UO.Print(Convert.ToString(UO.LOSOptions() == original));
        return null;
    }
}

コマンドの実装

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

UO.LOSOptions() — UO.LOSOptions()

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

結果: dynamic / Any.

呼び出し時:

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

case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);

UO.LOSOptions(value) — UO.LOSOptions(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

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

case "losoptions": if (arguments.Length > 0) state.LosOptions = Arg(0); return new InjectionValue(state.LosOptions);

UO.PrivateGetTile

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

C# のシグネチャ

string UO.PrivateGetTile(object? x, object? y, object? unknown, object? minTile, object? maxTile);

ローカル セル内の指定された範囲で最初の graphic を検索します。

引数

  • x — 現在のマップの int ワールド座標。
  • y — 現在のマップの int ワールド座標。
  • unknown — 従来のパラメーター int は構文内に保持されますが、ブリッジはそれを使用しません。
  • minTile - int 包含境界 graphic。順序は自動的に変更されません。 minTile>maxTile が一致しません。
  • maxTile - int 包含境界 graphic。順序は自動的に変更されません。 minTile>maxTile が一致しません。

戻り値

string 最初に一致したgraphicの「0xXXXX」; 「0x0000」 - 一致しないか、マップがロードされていません。実際のgraphic=0 もこの表現を持ちます。

動作

  • PrivateGetTile は、すべてのセル オブジェクトの TNext チェーンをマップ順に走査し、graphic>=minTile && graphic<=maxTile を比較します。静的のみフィルタリングされず、hue/高さは考慮されません。
  • パスファインダー/サーバー要求はありません。正確に構造化されたジオメトリを作成するには、GetWorldCell/ReadStaticsXY を使用します。不足しているカードのガードは、以前の不一致のセンチネルを返します。

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

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

簡単な例

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

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

var result = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
UO.Print("PrivateGetTile: " + Convert.ToString(result));

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

引数と実行の流れ:

  • ローカル セル内の指定された範囲で最初の graphic を検索します。
UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535));

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

引数と実行の流れ:

  • PrivateGetTile は、すべてのセル オブジェクトの TNext チェーンをマップ順に走査し、graphic>=minTile && graphic<=maxTile を比較します。静的のみフィルタリングされず、hue/高さは考慮されません。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0x0E21, 0x0E21));
    return null;
}

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

引数と実行の流れ:

  • パスファインダー/サーバー要求はありません。正確に構造化されたジオメトリを作成するには、GetWorldCell/ReadStaticsXY を使用します。不足しているカードのガードは、以前の不一致のセンチネルを返します。
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 tile = UO.PrivateGetTile(UO.GetX(), UO.GetY(), 0, 0, 65535);
        if (Truth(tile != "0x0000"))
        {
            UO.Print(tile);
        }

        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.PrivateGetTile(x, y, unknown, minTile, maxTile) — UO.PrivateGetTile(Integer,Integer,Integer,Integer,Integer)

引数: x (Integer), y (Integer), unknown (Integer), minTile (Integer), maxTile (Integer)

結果: string / String.

呼び出し時:

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

public string PrivateGetTile(int x, int y, int unknown, int minTile, int maxTile)

            => bridge.PrivateGetTile(x, y, unknown, minTile, maxTile);

UO.ReadStaticsXY

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

C# のシグネチャ

dynamic UO.ReadStaticsXY(object? x, object? y, object? worldNum);

セル内の現在のカードのフラット静的レコードを読み取ります。

引数

  • x — セルの int ワールド座標。
  • y — セルの int ワールド座標。
  • worldNum — int 現在のカード番号。別のマップはロードされず、空の配列が返されます。

戻り値

配列 int、トリプル [graphic, Z, hue, graphic, Z, hue, ...]。マップなし/不一致 WorldNum は空の配列です。

動作

  • Bridge.GetStaticTiles には、セルの TNext チェーンからの Static、Multi、Item が含まれます。土地は除きます。これは、Pascal レコードや、ネストされた 3 要素レコードの配列ではありません。
  • レコード数 = ArrayLength(結果)/3。ダウンロードされたデータのみが読み取られます。サーバーに対する未知のジオメトリのリクエストはありません。

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

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

簡単な例

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

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

object? result = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

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

引数と実行の流れ:

  • セル内の現在のカードのフラット静的レコードを読み取ります。
var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
UO.Print(UO.GetArrayLength(records) / 3);

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

引数と実行の流れ:

  • Bridge.GetStaticTiles には、セルの TNext チェーンからの Static、Multi、Item が含まれます。土地は除きます。これは、Pascal レコードや、ネストされた 3 要素レコードの配列ではありません。
return  RunScenario();
 object? RunScenario()
{
    var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), UO.WorldNum());
    if (Truth(UO.GetArrayLength(records) >= 3))
    {
        UO.Print(records[0]);
        UO.Print(records[1]);
        UO.Print(records[2]);
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • レコード数 = ArrayLength(結果)/3。ダウンロードされたデータのみが読み取られます。サーバーに対する未知のジオメトリのリクエストはありません。
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 map = UO.WorldNum();
        var records = UO.ReadStaticsXY(UO.GetX(), UO.GetY(), map);
        var i = 0;
        while (Truth(i + 2 < UO.GetArrayLength(records)))
        {
            UO.Print(Convert.ToString(records[i]) + " " + Convert.ToString(records[i + 1]) + " " + Convert.ToString(records[i + 2]));
            i = i + 3;
        }

        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.ReadStaticsXY(x, y, worldNum) — UO.ReadStaticsXY(Any,Any,Any)

引数: x (Any), y (Any), worldNum (Any)

結果: dynamic / Any.

呼び出し時:

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

case "readstaticsxy":

                    return new InjectionValue(bridge.GetStaticTiles(Arg(0), Arg(1), Arg(2)).Select(value => new InjectionValue(value)).ToArray());

UO.RemoveUserStatic

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

C# のシグネチャ

dynamic UO.RemoveUserStatic(object? id);

カスタム静的エントリを削除します。 ID.

引数

  • id - int ID、返された AddUserStatic; graphic/type ではありません。

戻り値

数値フラグ int: 1 - レコードが削除されました、0 - ID が見つかりませんでした。

動作

  • 最初の状態。UserStatics。削除します。削除が成功した場合のみ、bridge.RemoveUserStatic(id) が呼び出されます。削除は標準の静的マップ ファイルには適用されません。
  • ローカルのカスタム ジオメトリが現在の状態から削除されます。サーバー項目およびその他の ID 項目は変更されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • カスタム静的エントリを削除します。 ID.
UO.Print(UO.RemoveUserStatic(1));

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

引数と実行の流れ:

  • 最初の状態。UserStatics。削除します。削除が成功した場合のみ、bridge.RemoveUserStatic(id) が呼び出されます。削除は標準の静的マップ ファイルには適用されません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.UserStaticExists(1)))
    {
        UO.Print(UO.RemoveUserStatic(1));
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • ローカルのカスタム ジオメトリが現在の状態から削除されます。サーバー項目およびその他の ID 項目は変更されません。
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 records = UO.GetUserStatics();
        if (Truth(UO.GetArrayLength(records) > 0))
        {
            var id = records[0][0];
            UO.Print(UO.RemoveUserStatic(id));
            UO.Print(UO.UserStaticExists(id));
        }

        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.RemoveUserStatic(id) — UO.RemoveUserStatic(Any)

引数: id (Any)

結果: dynamic / Any.

呼び出し時:

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

case "removeuserstatic":

                {

                    int id = Arg(0);

                    bool removed = state.UserStatics.Remove(id);

                    if (removed) bridge.RemoveUserStatic(id);

                    return new InjectionValue(removed ? 1 : 0);

                }

UO.UserStaticExists

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

C# のシグネチャ

int UO.UserStaticExists(object? id);

ユーザーの静的レコードに ID が存在するかどうかを確認します。

引数

  • id — int ID AddUserStatic; graphic/type ではなく、serial ではありません。

戻り値

数値フラグ int: 1 - キーは状態にあります。 UserStatics、0 - 不在。

動作

  • 実行時辞書では ContainsKey のみがチェックされます。マップ上のオブジェクトの可視性、ブリッジ オブジェクトの正常な作成、およびサーバー ワールドはチェックされません。
  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • ユーザーの静的レコードに ID が存在するかどうかを確認します。
UO.Print(UO.UserStaticExists(1));

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

引数と実行の流れ:

  • 実行時辞書では ContainsKey のみがチェックされます。マップ上のオブジェクトの可視性、ブリッジ オブジェクトの正常な作成、およびサーバー ワールドはチェックされません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.UserStaticExists(1)))
    {
        UO.Print(UO.GetUserStatic(1));
    }

    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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
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 records = UO.GetUserStatics();
        if (Truth(UO.GetArrayLength(records) > 0))
        {
            UO.Print(UO.UserStaticExists(records[0][0]));
        }

        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.UserStaticExists(id) — UO.UserStaticExists(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

public int UserStaticExists(InjectionValue id)

            => state.UserStatics.ContainsKey(NumberConversions.ToInt(id)) ? 1 : 0;

UO.WorldNum

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

C# のシグネチャ

dynamic UO.WorldNum();

クライアントモデルから現在のカード番号を読み取ります。

引数

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

戻り値

int — クライアントの現在のカードのインデックス。通常は、0=フェルッカ、1=トランメル、2=イルシェナー、3=マラス、4=トクノ、5=テル・ムールです。ユーザー サーバーは異なるカード セットを使用する場合があります。 0 は本格的なマップであり、エラーの兆候ではありません。

動作

  • 受信済みのローカルデータを読み込みます。このリクエストはステータスをオープンせず、サーバーに更新の送信を強制しません。死亡、マップの遷移、またはオブジェクトの削除後、2 つの呼び出しの間で値が変化する可能性があります。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。キャラクターの現在の値を表示 - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは、self を参照します。 valueには現在のカード番号が格納されます。
  • Convert.ToString は出力する数値を変換するもので、結果の意味は変わりません。
var value = UO.WorldNum();
UO.Print("WorldNum: " + Convert.ToString(value));

2。アプリケーション検証での値の使用 - スクリプト関数

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。現在のカード番号は、表示される計算または条件に使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.WorldNum();
    var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), value);
    UO.Print("Land record length: " + Convert.ToString(ArrayLength(land)));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

3。変化を 1 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 UO.Wait(1000) はショット間にミリ秒単位の一時停止を与えます。
  • 比較される変化は現在のカードの番号です。例は世界を変えることはなく、無限に待つこともありません。この 1 秒以内のイベントは見逃される可能性があります。
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 before = UO.WorldNum();
        await Delay(1000);
        var after = UO.WorldNum();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + 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;
}

コマンドの実装

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

UO.WorldNum() — UO.WorldNum()

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

結果: dynamic / Any.

呼び出し時:

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

case "worldnum": return new InjectionValue(bridge.WorldNumber);

UO.X

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

C# のシグネチャ

int UO.X();

クライアント モデルから X 座標を読み取ります。

引数

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

戻り値

int はロードされたオブジェクトの X 座標です。キャラクター/ワールド アイテムの場合、これはワールド セルです。バッグ内のアイテムの場合、これはコンテナ内の座標です。未知のオブジェクトは 0 を与えますが、X=0 も有効です。

動作

  • 受信済みのローカルデータを読み込みます。このリクエストはステータスをオープンせず、サーバーに更新の送信を強制しません。死亡、マップの遷移、またはオブジェクトの削除後、2 つの呼び出しの間で値が変化する可能性があります。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。キャラクターの現在の値を表示 - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは、self を参照します。 valueにはx座標が格納されます。
  • Convert.ToString は出力する数値を変換するもので、結果の意味は変わりません。
var value = UO.X();
UO.Print("X: " + Convert.ToString(value));

2。アプリケーション検証での値の使用 - スクリプト関数

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。 x 座標は、示されている計算または条件で使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.X();
    UO.Print("Two tiles east would be X=" + Convert.ToString(value + 2));
    return null;
}

3。変化を 1 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 UO.Wait(1000) はショット間にミリ秒単位の一時停止を与えます。
  • 変更は X 座標で比較されます。この例では何も変更せず、無期限に待機することもありません。この 1 秒以内のイベントは見逃される可能性があります。
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 before = UO.X();
        await Delay(1000);
        var after = UO.X();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + 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;
}

コマンドの実装

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

UO.X() — UO.X()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetX(bridge.Self)

API の作成: これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。


UO.Y

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

C# のシグネチャ

int UO.Y();

クライアント モデルから Y 座標を読み取ります。

引数

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

戻り値

int — ロードされたオブジェクトの Y 座標。キャラクター/ワールド アイテムの場合、これはワールド セルであり、バッグ内のアイテムの場合、これはコンテナ内の位置です。未知のオブジェクトは 0 を与えます。

動作

  • 受信済みのローカルデータを読み込みます。このリクエストはステータスをオープンせず、サーバーに更新の送信を強制しません。死亡、マップの遷移、またはオブジェクトの削除後、2 つの呼び出しの間で値が変化する可能性があります。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。キャラクターの現在の値を表示 - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは、self を参照します。 valueにはy座標が格納されます。
  • Convert.ToString は出力する数値を変換するもので、結果の意味は変わりません。
var value = UO.Y();
UO.Print("Y: " + Convert.ToString(value));

2。アプリケーション検証での値の使用 - スクリプト関数

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。 y 座標は、示されている計算または条件で使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Y();
    UO.Print("Two tiles south would be Y=" + Convert.ToString(value + 2));
    return null;
}

3。変化を 1 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 UO.Wait(1000) はショット間にミリ秒単位の一時停止を与えます。
  • 変更は Y 座標で比較されます。この例では何も変更せず、無期限に待機することもありません。この 1 秒以内のイベントは見逃される可能性があります。
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 before = UO.Y();
        await Delay(1000);
        var after = UO.Y();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + 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;
}

コマンドの実装

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

UO.Y() — UO.Y()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetY(bridge.Self)

API の作成: これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。


UO.Z

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

C# のシグネチャ

int UO.Z();

クライアント モデルから Z 高さを読み取ります。

引数

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

戻り値

int はワールド単位で表したオブジェクトの高さで、通常は -128..127 です。これはフロア番号や機器の階層ではありません。 0 は、実際の高さ、または物体の不在の結果である可能性があります。

動作

  • 受信済みのローカルデータを読み込みます。このリクエストはステータスをオープンせず、サーバーに更新の送信を強制しません。死亡、マップの遷移、またはオブジェクトの削除後、2 つの呼び出しの間で値が変化する可能性があります。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。キャラクターの現在の値を表示 - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは、self を参照します。 Z高さはvalueに格納されます。
  • Convert.ToString は出力する数値を変換するもので、結果の意味は変わりません。
var value = UO.Z();
UO.Print("Z: " + Convert.ToString(value));

2。アプリケーション検証での値の使用 - スクリプト関数

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。 Z 高さは、示されている計算または条件で使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Z();
    var land = UO.GetLandscapeTile(UO.GetX(), UO.GetY(), UO.WorldNum());
    if (Truth(ArrayLength(land) >= 3))
    {
        UO.Print("Height above land: " + Convert.ToString(value - land[1]));
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。変化を 1 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 UO.Wait(1000) はショット間にミリ秒単位の一時停止を与えます。
  • 比較される変化は高さ Z です。この例ではワールド内で何も変更せず、無期限に待機することもありません。この 1 秒以内のイベントは見逃される可能性があります。
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 before = UO.Z();
        await Delay(1000);
        var after = UO.Z();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + 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;
}

コマンドの実装

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

UO.Z() — UO.Z()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetZ(bridge.Self)

API の作成: これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。

⚠️ **GitHub.com Fallback** ⚠️