JA UO Topic character Part 3 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

キャラクター — 3

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

リファレンスの各部

1 · 2 · 3 · 4 · 5

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


UO.GetSex

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

C# のシグネチャ

int UO.GetSex();

クライアントモデルから性別と人種のコードを読み取ります。

引数

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

戻り値

int - 互換性のあるコード: 0=人間男性、1=人間女性、2=エルフ男性、3=エルフ女性、4=ガーゴイル男性、5=ガーゴイル女性。キャラクターなしの0もありますので、Exists(self)で在庫状況をご確認ください。これは単純なbool女性ではありません。

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。性別と人種コードは、表示される計算または条件に使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetSex();
    if (Truth(value == 4) || Truth(value == 5))
    {
        UO.Print("Gargoyle sex/race code");
    }

    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 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 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.GetSex();
        await Delay(1000);
        var after = UO.GetSex();
        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.GetSex() — UO.GetSex()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Sex

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


UO.GetStam

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

C# のシグネチャ

int UO.GetStam();
dynamic UO.GetStam(object? objID);

ローカルモデルから現在のスタミナを読み取ります。

引数

  • objID — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

int は、パーセンテージや bool ではなく、Stamina フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく、相対的なサーバー スケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.GetStam();
UO.Print("GetStam: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetStam();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

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

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は存在をチェックします。 obj は ReadValue の唯一のパラメータです。この関数は、コマンド番号を変更せずにそのまま返します。
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(UO.Exists("lasttarget")))
        {
            var value = ReadValue("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadValue(dynamic obj)
    {
        return UO.GetStam(obj);
    }

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Stamina

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

UO.GetStam(objID) — UO.GetStam(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "getstam": return new InjectionValue(arguments.Length > 0 ? bridge.GetStamina(Arg(0)) : bridge.Stamina);

UO.GetStamina

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

C# のシグネチャ

int UO.GetStamina();

ローカルモデルから現在のスタミナを読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、Stamina フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく、相対的なサーバー スケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.GetStamina();
UO.Print("GetStamina: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.GetStamina();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.GetStamina();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.GetStamina() — UO.GetStamina()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Stamina

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


UO.GetStatLockState

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

C# のシグネチャ

int UO.GetStatLockState(object? statNum);

ローカル特性変更モードを読み出します。

引数

  • statNum - 必須の特性番号: 0 - ToString、1 - DEX、2 - INT を変換します。これは現在の値ではなく、文字列の名前でもありません。

戻り値

int: 0 — 増加、1 — 減少、2 — ブロック。これはモード コードであり、true/false ではありません。 0..2 以外の数値の場合、-1 が返されます。文字が欠落している場合は、デフォルトで有効な数値 0 が返されます。これはサーバーの状態を確認するものではありません。

動作

  • 読み取りは、すでに受信したデータに基づいてゲーム スレッドの Invoke を介して実行されます。ネットワークパケットは送信されません。スキルは使用または訓練されていません。 2 つのリクエスト - 2 つの別々のスナップショット。
  • 必須の特性番号: 0 - ToString、1 - DEX、2 - INT。これは現在の値ではなく、文字列の名前でもありません。
  • ExecuteClientApiCompatibility はコマンドブランチを選択します。 Text はスキル セレクターを読み取り、Arg は数値とモードを読み取ります。変換できない引数は、変換エラーで呼び出しに失敗する可能性があります。

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

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

簡単な例

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

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

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

1。読み取りと出力 - 直接スクリプト

引数と実行の流れ:

  • この例では、セレクターと、録音時のモードが明示的に指定されています。最初の行では、スキルを名前で選択するか、特性を番号で選択します。 Print は結果のみを印刷します。
var selector = 0;
var mode = UO.GetStatLockState(selector);
UO.Print(Convert.ToString(mode));

2。条件または比較で適用 - スクリプト関数

引数と実行の流れ:

  • しきい値 95.1 とモード 0/1/2 は例として示されています。 −1はモードを変更する前にチェックされます。書き込み後は、ローカル コピーのみが読み取られます。サーバーの応答を待っているわけではありません。
return  RunScenario();
 object? RunScenario()
{
    var mode = UO.GetStatLockState(0);
    if (Truth(mode == 2))
    {
        UO.Print("Locked");
    }
    else
    {
        if (Truth(mode == -1))
        {
            UO.Print("Unknown selector");
        }
        else
        {
            UO.Print("Mode: " + Convert.ToString(mode));
        }
    }

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

引数と実行の流れ:

  • すべてのヘルパー コードは Main の下に示されています。セレクターはスキル/特性を選択し、モードは記録モードを設定します。 ReadValue/ReadMode 元の番号を返します。 ApplyMode は引数をチェックし、アクションを実行しますが、値を返しません。読み取り例のUO.Wait(1000) は 2 つの画像を分離します。
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 = ReadMode(0);
        await Delay(1000);
        var after = ReadMode(0);
        UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
        return null;
    }

    dynamic ReadMode(dynamic selector)
    {
        return UO.GetStatLockState(selector);
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.GetStatLockState(statNum) — UO.GetStatLockState(Any)

引数: statNum (Any)

結果: int / Integer.

呼び出し時:

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

case "getstatlockstate": return new InjectionValue(bridge.GetStatLockState(Arg(0)));

UO.GetStatus

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

C# のシグネチャ

void UO.GetStatus(object? id);

指定されたmobileのステータスに関するサーバーリクエストを送信します。

引数

  • id — オブジェクトのシリアル番号、または self/backpack/lasttarget/saved オブジェクトのサポートされている名前。数値文字列と 0x 文字列は実行時に解決されます。

戻り値

void - 戻り値はありません。

動作

  • string-フォームは、GetObject を介して名前を解決します。 int 形式は serial を直接レンダリングします。ブリッジは GameActions.RequestMobileStatus(world,serial,true) を呼び出します。このコマンドはデータを返さず、応答を待ちません。ワールド更新後、GetHP/GetMaxHP とその他のゲッターを個別に読み取ります。

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

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

簡単な例

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

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

UO.Print("Calling UO.GetStatus");
UO.GetStatus("self");

1。自己ステータスの要求 - 直接スクリプト

引数と実行の流れ:

  • ステータス要求は、応答を待たずに送信されます。
UO.GetStatus("self");

2。 serialによるクエリ - スクリプト関数

引数と実行の流れ:

  • int-フォームは同じリクエストを送信します。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.Self();
    UO.GetStatus(id);
    return null;
}

3。一時停止後の読書 - スクリプトクラス

引数と実行の流れ:

  • 一時停止しても、新しい答えが得られるとは限りません。ゲッターは現在のローカル モデルを返します。
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()
    {
        UO.GetStatus("self");
        await Delay(500);
        UO.Print(Convert.ToString(UO.GetHP()) + "/" + Convert.ToString(UO.GetMaxHP()));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.GetStatus(id) — UO.GetStatus(Integer)

引数: id (Integer/String)

結果: void / Unit.

呼び出し時:

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

public void GetStatus(int id) => bridge.GetStatus(id);

UO.GetStatus(id) — UO.GetStatus(String)

引数: id (Integer/String)

結果: void / Unit.

呼び出し時:

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

public void GetStatus(string id) => GetStatus(GetObject(id));

UO.GetStr

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

C# のシグネチャ

int UO.GetStr();
int UO.GetStr(object? objID);

キャラクターの現在のパワー(Strength、Str)を読み取ります。

引数

  • objID — 引数が 1 つ指定された、示されている形式のみの ObjID: serial 文字番号、10 進数/0x 16 進数文字列、「self」、「lasttarget」、または名前 AddObject。 graphic/type 以外のオブジェクトを選択します。引数を指定しないと、現在の文字が読み取られます。

戻り値

int — 現在のステータス ポイント、クライアント モデルの 0..65535。パーセンテージ、ID、スキル、ロックモード、bool ではありません。 0 は、欠落/削除された文字、またはアクセスできないオブジェクトも意味します。 == true ではなく、数値要件と比較してください。これはステータスの上限や修飾子のない保証された基本値ではありません。

動作

  • サポートされているのは、self の () と明示的なオブジェクトの (ObjID) です。その他のオプションの引数はありません。
  • Player が存在し、破壊されていない場合は Player.Strength を読み取ります。それ以外の場合は、0。死んだキャラクターが存在しても、削除されたオブジェクトではありません。ステータスはHP、マナ、スタミナから計算されません。
  • GetStr/GetInt/GetDex は ObjID を受け入れます。 PlayerMobile データは self でのみ利用可能です。別の serial - 0、ロードされた mobile であっても。他人の特性を置き換えたり推測したりすることはありません。
  • スクリプトによって待機をキャンセルする機能を備えたゲーム ストリームの読み取りを呼び出します。ステータスを問い合わせたり、ターゲットをオープンしたり、パケットを送信したり、特性を変更したり、遅延を追加したりしません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。 UO.Str(), UO.Strength(), UO.GetStr(), UO.GetStrength().
  • ExecuteClientApiCompatibility.Arg は、まずオブジェクト名を解決し、次に数値を変換します。不明な非数値文字列は、ターゲットではなく変換エラーを引き起こします。 double は int に削減され、Array/void は 0 に削減されます。文字を選択するには、そのような変換ではなく、正しい serial を使用してください。

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

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

簡単な例

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

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

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

1。ポイントの読み取りと表示 - 直接スクリプト

引数と実行の流れ:

  • value には数値結果が格納されます。 Convert.ToStringは雑誌用にフォーマットするだけです。引数やキャラクターのアクションはありません。
var value = UO.GetStr();
UO.Print("Strength: " + Convert.ToString(value));

2。 2 つの画像を比較 - スクリプト関数

引数と実行の流れ:

  • 前後に別々の 1000 ミリ秒。 UO.Wait を例に追加しました。 change=after-before には、正、ゼロ、または負の値を指定できます。それ自体では、すべての中間更新とワールドからの終了を区別しません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetStr();
    await Delay(1000);
    var after = UO.GetStr();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
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(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetStr();
        return value >= minimum;
    }

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

4。 serial とオブジェクト名で文字を選択 - 直接スクリプト

引数と実行の流れ:

  • id は UO.Self() の結果であり、type ではありません。 AddObjectは、第2引数が指定されているため、IDをスコープなしでstatSubjectとして格納します。どちらの呼び出しも同じ文字を選択しますが、読み取りはアトミックではありません。
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetStr(id);
    var byName = UO.GetStr("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Strength

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

UO.GetStr(objID) — UO.GetStr(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "getstr": return new InjectionValue(arguments.Length > 0 ? bridge.GetStrength(Arg(0)) : bridge.Strength);

UO.GetStrength

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

C# のシグネチャ

int UO.GetStrength();

キャラクターの現在のパワー(Strength、Str)を読み取ります。

引数

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

戻り値

int — 現在のステータス ポイント、クライアント モデルの 0..65535。パーセンテージ、ID、スキル、ロックモード、bool ではありません。 0 は、欠落/削除された文字、またはアクセスできないオブジェクトも意味します。 == true ではなく、数値要件と比較してください。これはステータスの上限や修飾子のない保証された基本値ではありません。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • Player が存在し、破壊されていない場合は Player.Strength を読み取ります。それ以外の場合は、0。死んだキャラクターが存在しても、削除されたオブジェクトではありません。ステータスはHP、マナ、スタミナから計算されません。
  • GetStr/GetInt/GetDex は ObjID を受け入れます。 PlayerMobile データは self でのみ利用可能です。別の serial - 0、ロードされた mobile であっても。他人の特性を置き換えたり推測したりすることはありません。
  • スクリプトによって待機をキャンセルする機能を備えたゲーム ストリームの読み取りを呼び出します。ステータスを問い合わせたり、ターゲットをオープンしたり、パケットを送信したり、特性を変更したり、遅延を追加したりしません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。 UO.Str(), UO.Strength(), UO.GetStr(), UO.GetStrength().

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

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

簡単な例

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

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

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

1。ポイントの読み取りと表示 - 直接スクリプト

引数と実行の流れ:

  • value には数値結果が格納されます。 Convert.ToStringは雑誌用にフォーマットするだけです。引数やキャラクターのアクションはありません。
var value = UO.GetStrength();
UO.Print("Strength: " + Convert.ToString(value));

2。 2 つの画像を比較 - スクリプト関数

引数と実行の流れ:

  • 前後に別々の 1000 ミリ秒。 UO.Wait を例に追加しました。 change=after-before には、正、ゼロ、または負の値を指定できます。それ自体では、すべての中間更新とワールドからの終了を区別しません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetStrength();
    await Delay(1000);
    var after = UO.GetStrength();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
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(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetStrength();
        return value >= minimum;
    }

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Strength

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


UO.GetTitle

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

C# のシグネチャ

dynamic UO.GetTitle(object? objID);

クライアントが知っているキャラクターのタイトルを読み取ります。たとえば、名前の後の職業や署名などです。

引数

  • objID — type や cliloc ではなく、serial/ID オブジェクトが必須です。 int、10 進数/16 進数の文字列、self、backpack、lasttarget、finditem、または名前 AddObject を受け入れます。 0 はオブジェクトがないことを意味します。

戻り値

string — モバイルのタイトルフィールドのテキスト。タイトルが不明な場合、オブジェクトが文字ではない場合、または ID が欠落している場合は空の文字列。これは、serial、フルネーム、またはプロパティの配列ではありません。 GetAltName は GetTitle と同じフィールドを使用します。

動作

  • 呼び出し自体はローカル データを読み取り、サーバーを待機せず、シングル クリックも送信しません。名前/タイトルをリクエストするには、ClickOnObject を単独で使用します。応答は非同期で返されます。
  • 既存の文字には空の文字列も使用できます。 Exists チェックは、オブジェクトがロードされているかどうかという別の質問に答えます。
  • この実装では、代替名がキャラクターの Title フィールドにマップされます。

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

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

簡単な例

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

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

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

1。あなたのキャラクターのタイトル - 直接のスクリプト

引数と実行の流れ:

  • ObjID=self — 現在のクライアントの文字。
  • タイトルにはタイトルのみが含まれます。フィールドが空であっても、スクリプト エラーを意味するものではありません。
var title = UO.GetTitle("self");
UO.Print(title);

2。選択文字の確認 - スクリプト機能

引数と実行の流れ:

  • ObjID=id — 最後のターゲットの serial。 GetNameとタイトルは分けて読みます。
  • 項目ターゲットには Title フィールドがないため、空の文字列が返されます。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(id)))
    {
        var title = UO.GetTitle(id);
        if (Truth(title != ""))
        {
            UO.Print(UO.GetName(id) + " " + title);
        }
    }

    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。読み取る前に名前の入力を求める - スクリプト クラス

引数と実行の流れ:

  • 350 — シングルクリック後のミリ秒単位の一時停止の例。これはゲッター パラメーターではありません。
  • サーバーが後で応答するか、タイトルを転送しない可能性があります。空の文字列の処理を保持します。
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 id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.ClickOnObject(id);
            UO.Wait(350);
            UO.Print(UO.GetTitle(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.GetTitle(objID) — UO.GetTitle(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "gettitle": return new InjectionValue(bridge.GetTitle(Arg(0, bridge.Self)));

UO.GetWeight

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

C# のシグネチャ

int UO.GetWeight();

キャラクターのステータスカウンター、つまり現在の石の重量を読み取ります。

引数

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

戻り値

int — 現在の石の重量、クライアント モデルの 0..65535。 0 は、実際の値である場合もあれば、データがない場合もあれば、紛失または破壊されたプレーヤーである場合もあります。これは数量であり、bool、ID、type ではありません。1 は 1 単位を意味し、成功ではありません。このコマンドはオブジェクトを反復処理せず、配列を返しません。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Weight がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • Weight は、サーバーによって報告された石単位の総重量を読み取ります。身体、装備品、同封されているバッグの重量が金額に含まれるかどうかは、シャードのルールによって決まります。チームはコンテナ内を調べたり、アイテムの重量を合計したり、閉じたバッグを更新したりすることはありません。これは、個々のアイテムの Weight プロパティでも、アイテムの数でもありません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。 Display saved counter - direct script

引数と実行の流れ:

  • value には、それ自体の文字に対する引数なしの呼び出しが 1 つ格納されます。 Convert.ToString は、意味を変えずにログの番号をフォーマットします。
var value = UO.GetWeight();
UO.Print("Weight: " + Convert.ToString(value));

2。変化の観察 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(500) は前後を 500 ミリ秒で区切ります。差は正、ゼロ、負のいずれかになります。暫定的な更新やキャラクターの変更はスキップされる場合があります。一時停止はその一例です。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetWeight();
    await Delay(500);
    var after = UO.GetWeight();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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

引数と実行の流れ:

  • CanCarry(追加) 石の重量が追加されます。 10 は一例であり、スタック数ではありません。マイナスのエクストラ、プレーヤーなし、または最大値 <= 0 を拒否し、現在の重量と制限を読み取り、エクストラ <= 最大値 - 現在の値で bool: true または false を返します。減算により、電流と余分なオーバーフローが回避されます。オーバーロードすると、extra=0であっても結果はfalseになります。これはローカルの評価であり、サーバーの解決策ではありません。読み取りはアトミックではないため、ゼロの重みが不明である可能性があります。
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(CanCarry(10)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic CanCarry(dynamic extra)
    {
        if (Truth(extra < 0) || Truth(UO.Self() == 0))
        {
            return false;
        }

        var current = UO.GetWeight();
        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

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

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

結果: int / Integer.

呼び出し時:

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

public int Weight() => bridge.Weight;

UO.GetYellowBar

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

C# のシグネチャ

int UO.GetYellowBar(object? id);

黄色のヘルスバーフラグ mobile を確認します。

引数

  • id — 特定のオブジェクトの必須 serial/ID: int、16 進文字列またはエイリアス self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse または name AddObject。これはgraphic/typeではありません。指定されていない名前は 0 に解決されます。このコマンドは新しいターゲットを開きません。引数は必須です。あなた自身のために、self を渡してください。

戻り値

int 1 - ロードされた mobile には属性 IsYellowHits があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。
var state = UO.GetYellowBar("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • IsNpc は被写体と未知のオブジェクトを除外します。 target は、変化する lasttarget へのライブ参照ではなく、単一の serial を保存します。
  • 結果はフィールド IsYellowHits を参照します。データは、クライアントが適切な状態を受け取った後にのみ更新されます。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.GetYellowBar(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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(500) — ミリ秒単位で一時停止します。その後、mobile がまだ存在するかどうかが別途確認されます。
  • 2 つの画像を比較します。中間の変更は見逃される可能性があり、これはサーバー イベントへの継続的なサブスクリプションではありません。
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 target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.GetYellowBar(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.GetYellowBar(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

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

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

public int GetYellowBar(InjectionValue id) => bridge.GetYellowBar(GetObject(id));

UO.Gold

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

C# のシグネチャ

dynamic UO.Gold();

現在のキャラクターのステータスからゴールドの量を読み取ります。

引数

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

戻り値

int/double は、負でない合計 0..4294967295 です。 double (Double) を超える 2147483647 int が返され、32 ビットの符号なし整数を正確に表します。 0 は、現在削除されていないプレーヤーまたは受け取った金額が存在しないことも意味します。 bool、ID、スタック数、バックパック/バンクバイパスではありません。

動作

  • パラメータはありません。 Player.Gold キャッシュを CharacterStatus (0x11) ​​から読み取ります。サーバーはカウンターにどのゴールドが含まれるかを決定します。チームは荷物を調べたり、銀行残高を尋ねたりしません。プレイヤーなし/破壊 - 0;存在するゴーストはステータス量を維持できます。
  • ReadGoldValue は、bridge.Gold を 1 回読み取ります。古い C# ブリッジは Int32 署名を保持し、UInt32 ビットを送信します。チェックされていない変換は、符号なしの合計を復元します。少量の場合は int に、多量の場合は double に変わります。最上位ビットによって残高がマイナスにならなくなりました。変換はローカルで行われ、パッケージはありません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。受け取った金額を引き出す - 直接スクリプト

引数と実行の流れ:

  • amount には 1 つの結果が格納されます。 Convert.ToString は雑誌用にフォーマットします。金は求めたり、持ち運んだり、消費したりするものではありません。
var amount = UO.Gold();
UO.Print("Status gold: " + Convert.ToString(amount));

2。フル機能CanAfford、高額価格 - スクリプト機能

引数と実行の流れ:

  • Price=3000000000.0 は価格の一例であり、上限ではありません。 CanAfford(価格) はマイナスの価格またはプレイヤーを拒否し、金額を 1 回読み取り、金額 >= 価格の場合は bool: true または false を返します。金額自体はboolではありません。この関数は以下で完全に定義されています。
return  RunScenario();
 object? RunScenario()
{
    var price = 3000000000.0;
    if (Truth(Truth(CanAfford(price)) == true))
    {
        UO.Print("Local balance is sufficient");
    }
    else
    {
        UO.Print("Local check failed");
    }

    return null;
}

dynamic CanAfford(dynamic price)
{
    if (Truth(price < 0) || Truth(UO.Self() == 0))
    {
        return false;
    }

    var amount = UO.Gold();
    return amount >= price;
}

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(500) ミリ秒を区切ります。残高が減少すると、Difference=after-before がマイナスになることがあります。これは、固定の符号なしカウンター オーバーフローではありません。暫定的なアップデートやキャラクターの変更が見逃される可能性があります。
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.Gold();
        await Delay(500);
        var after = UO.Gold();
        var difference = after - before;
        UO.Print("Balance change: " + Convert.ToString(difference));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.Gold() — UO.Gold()

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

結果: dynamic / Any.

呼び出し時:

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

case "gold": return ReadGoldValue();

UO.HP

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

C# のシグネチャ

int UO.HP();

ローカル モデルから現在の健全性を読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、Hits フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobileの場合は意味が分からない可能性があります。 HP/HitsMax には、正確なポイントではなく、相対的なサーバー スケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.HP();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.HP();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.HP() — UO.HP()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetHP(bridge.Self)

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


UO.Hidden

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

C# のシグネチャ

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

キャラクターのステルス性をテストします。

引数

  • id — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsHidden があり、0 にはフラグがないか、mobile がありません。これはサーバーのフラグであり、壁の後ろの可視性ではありません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.Hidden();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Hidden(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
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.Hidden();
        await Delay(500);
        var after = UO.Hidden();
        if (Truth(before != after))
        {
            UO.Print("State 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;
}

コマンドの実装

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

UO.Hidden() — UO.Hidden()

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

結果: int / Integer.

呼び出し時:

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

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

UO.Hidden(id) — UO.Hidden(Integer)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.Hidden(id) — UO.Hidden(String)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

public int Hidden(string idText) => Hidden(GetObject(idText));

UO.Int

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

C# のシグネチャ

int UO.Int();

キャラクターの現在の知能 (Intelligence、INT) を読み取ります。

引数

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

戻り値

int — 現在のステータス ポイント、クライアント モデルの 0..65535。パーセンテージ、ID、スキル、ロックモード、bool ではありません。 0 は、欠落/削除された文字、またはアクセスできないオブジェクトも意味します。 == true ではなく、数値要件と比較してください。これはステータスの上限や修飾子のない保証された基本値ではありません。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • Player が存在し、破壊されていない場合は Player.Intelligence を読み取ります。それ以外の場合は、0。死んだキャラクターが存在しても、削除されたオブジェクトではありません。ステータスはHP、マナ、スタミナから計算されません。
  • GetStr/GetInt/GetDex は ObjID を受け入れます。 PlayerMobile データは self でのみ利用可能です。別の serial - 0、ロードされた mobile であっても。他人の特性を置き換えたり推測したりすることはありません。
  • スクリプトによって待機をキャンセルする機能を備えたゲーム ストリームの読み取りを呼び出します。ステータスを問い合わせたり、ターゲットをオープンしたり、パケットを送信したり、特性を変更したり、遅延を追加したりしません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。 UO.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

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

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

簡単な例

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

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

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

1。ポイントの読み取りと表示 - 直接スクリプト

引数と実行の流れ:

  • value には数値結果が格納されます。 Convert.ToStringは雑誌用にフォーマットするだけです。引数やキャラクターのアクションはありません。
var value = UO.Int();
UO.Print("Intelligence: " + Convert.ToString(value));

2。 2 つの画像を比較 - スクリプト関数

引数と実行の流れ:

  • 前後に別々の 1000 ミリ秒。 UO.Wait を例に追加しました。 change=after-before には、正、ゼロ、または負の値を指定できます。それ自体では、すべての中間更新とワールドからの終了を区別しません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Int();
    await Delay(1000);
    var after = UO.Int();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
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(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Int();
        return value >= minimum;
    }

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

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

結果: int / Integer.

呼び出し時:

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

case "int": return new InjectionValue(bridge.Intelligence);

UO.Intelligence

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

C# のシグネチャ

int UO.Intelligence();

キャラクターの現在の知能 (Intelligence、INT) を読み取ります。

引数

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

戻り値

int — 現在のステータス ポイント、クライアント モデルの 0..65535。パーセンテージ、ID、スキル、ロックモード、bool ではありません。 0 は、欠落/削除された文字、またはアクセスできないオブジェクトも意味します。 == true ではなく、数値要件と比較してください。これはステータスの上限や修飾子のない保証された基本値ではありません。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • Player が存在し、破壊されていない場合は Player.Intelligence を読み取ります。それ以外の場合は、0。死んだキャラクターが存在しても、削除されたオブジェクトではありません。ステータスはHP、マナ、スタミナから計算されません。
  • GetStr/GetInt/GetDex は ObjID を受け入れます。 PlayerMobile データは self でのみ利用可能です。別の serial - 0、ロードされた mobile であっても。他人の特性を置き換えたり推測したりすることはありません。
  • スクリプトによって待機をキャンセルする機能を備えたゲーム ストリームの読み取りを呼び出します。ステータスを問い合わせたり、ターゲットをオープンしたり、パケットを送信したり、特性を変更したり、遅延を追加したりしません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。 UO.Int(), UO.Intelligence(), UO.GetInt(), UO.GetIntelligence().

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

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

簡単な例

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

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

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

1。ポイントの読み取りと表示 - 直接スクリプト

引数と実行の流れ:

  • value には数値結果が格納されます。 Convert.ToStringは雑誌用にフォーマットするだけです。引数やキャラクターのアクションはありません。
var value = UO.Intelligence();
UO.Print("Intelligence: " + Convert.ToString(value));

2。 2 つの画像を比較 - スクリプト関数

引数と実行の流れ:

  • 前後に別々の 1000 ミリ秒。 UO.Wait を例に追加しました。 change=after-before には、正、ゼロ、または負の値を指定できます。それ自体では、すべての中間更新とワールドからの終了を区別しません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Intelligence();
    await Delay(1000);
    var after = UO.Intelligence();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
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(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Intelligence();
        return value >= minimum;
    }

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Intelligence

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


UO.IsAlive

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

C# のシグネチャ

int UO.IsAlive();
int UO.IsAlive(object? value);

死の兆候のないオブジェクトの存在を確認します。

引数

  • value — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - 陽性の serial が存在しますが、死亡とマークされていません。有名なアイテムには 1 もあります。これは mobile フィルターではありません。死亡/紛失したオブジェクトは 0 を与えます。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.IsAlive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsAlive(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
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.IsAlive();
        await Delay(500);
        var after = UO.IsAlive();
        if (Truth(before != after))
        {
            UO.Print("State 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;
}

コマンドの実装

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

UO.IsAlive() — UO.IsAlive()

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

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

() => getter(bridge.Self)

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

UO.IsAlive(value) — UO.IsAlive(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

value => getter(GetObject(value))

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


UO.IsDead

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

C# のシグネチャ

int UO.IsDead();
dynamic UO.IsDead(object? objID);

キャラクターの死亡を確認します。

引数

  • objID — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsDead があり、0 には符号がないか、mobile がありません。 HP=0 自体は死を意味しません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.IsDead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsDead(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
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.IsDead();
        await Delay(500);
        var after = UO.IsDead();
        if (Truth(before != after))
        {
            UO.Print("State 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;
}

コマンドの実装

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

UO.IsDead() — UO.IsDead()

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

結果: int / Integer.

呼び出し時:

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

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

IsDeadState

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

() => getter(bridge.Self)

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

UO.IsDead(objID) — UO.IsDead(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "isdead": return new InjectionValue(arguments.Length > 0 ? bridge.IsDead(Arg(0)) : bridge.Dead());

UO.IsFemale

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

C# のシグネチャ

int UO.IsFemale(object? objID);

女性の性別属性 mobile を確認します。

引数

  • objID — 特定のオブジェクトの必須 serial/ID: int、16 進文字列またはエイリアス self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse または name AddObject。これはgraphic/typeではありません。指定されていない名前は 0 に解決されます。このコマンドは新しいターゲットを開きません。引数は必須です。あなた自身のために、self を渡してください。

戻り値

int 1 - ロードされた mobile には属性 IsFemale があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。オブジェクトの所有者の人種、名前、年齢、タイプは特定されません。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • オブジェクトの所有者の人種、名前、年齢、タイプは特定されません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • オブジェクトの所有者の人種、名前、年齢、タイプは特定されません。
var state = UO.IsFemale("self");
if (Truth(state))
{
    UO.Print("Female flag is set");
}
else
{
    UO.Print("Female flag is not set");
}

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

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • IsNpc は被写体と未知のオブジェクトを除外します。 target は、変化する lasttarget へのライブ参照ではなく、単一の serial を保存します。
  • 結果はフィールド IsFemale を参照します。データは、クライアントが適切な状態を受け取った後にのみ更新されます。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsFemale(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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(500) — ミリ秒単位で一時停止します。その後、mobile がまだ存在するかどうかが別途確認されます。
  • 2 つの画像を比較します。中間の変更は見逃される可能性があり、これはサーバー イベントへの継続的なサブスクリプションではありません。
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 target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.IsFemale(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.IsFemale(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.IsFemale(objID) — UO.IsFemale(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "isfemale": return new InjectionValue(bridge.IsFemale(Arg(0, bridge.Self)));

UO.IsFlying

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

C# のシグネチャ

int UO.IsFlying();
int UO.IsFlying(object? value);

キャラクターが現在飛行しているかどうかを確認します。これは通常、Gargoyle で必要です。たとえば、ルートを開始する前、またはフライトの有効化をリクエストする前です。 「私のキャラクターは今飛んでいますか?」という質問に答えます。議論なしで。このコマンドは状態を読み取るだけであり、キャラクターの飛行、着陸、移動を可能にするものではありません。

引数

  • value - オプションの serial 文字: 数値、16 進文字列、self、lasttarget、または UO.AddObject によって保存された名前。引数がなければ、あなたのキャラクターが使用されます。これは特定の mobile の ID であり、graphic/type ではなく、Z の座標でもありません。不明な名前、欠落/削除された mobile、またはアイテムが 0 を示します。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsFlying があり、0 にはフラグがないか、mobile がありません。高度Z 自体は飛行を意味しません。

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

動作

  • メインのゲーム アプリケーションはガーゴイルの飛行です。ただし、ゲッターは競合をチェックしません。このクライアントでは、プロトコル バージョン 7.0.0.0 以降の mobile から 0x04 ビットを読み取ります。古いプロトコルでは、0 が返されます。屋根の上に立ったり、高いZ、翼のアニメーション、またはガーゴイルレース自体は飛行可能であることの証明にはなりません。
  • 状態を変更するための別の UO.ToggleFly() があります。これは、「オン」コマンドではなくスイッチ要求を送信します。すでに飛行している場合は、着陸を要求する再度の呼び出しが行われます。サーバーに障害が発生する可能性があります。プロンプトが表示されたら、少し待ってから Flying をもう一度読んでください。 falseはキャラクター/データが無くても可能ですので、アクションをプレイする前にConnectedを確認してください。
  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。次のスクリプトステップの前にモードをチェック - 直接スクリプト

引数と実行の流れ:

  • 空の括弧はselfを示します。 true は 1 に等しく、false は 0 に等しい。 UO.Flying() { ... } が許容される場合。この例では何も切り替えません。
var active = UO.IsFlying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data unavailable");
}

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

2。以前に選択した文字を確認する - スクリプト機能

引数と実行の流れ:

  • ReadState(obj) は serial/alias を受け取り、状態を返します。完全な定義は以下のとおりです。オブジェクトの不在は読み取り前に処理されます。他の人のキャラクターも、クライアントがすでに受信したデータと照合してチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.IsFlying(obj);
}

int Asc(object? value, int fallback = 0)
{
    string text = Convert.ToString(value) ?? "";
    if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
        return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
    return int.TryParse(text, out int number) ? number : fallback;
}

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

3。一度フライトをリクエストして結果を待つ - シナリオクラス

引数と実行の流れ:

  • この例は、飛行をサポートするサーバー上の Gargoyle の場合です。 EnsureFlight(timeoutMs) ​​は、飛行が観察された場合は 1/true を返し、そうでない場合は 0/false を返します。 2000 — ミリ秒単位の待機制限。 50 ミリ秒ごとにチェックします。すでに飛行している場合、ToggleFly は呼び出されません。最大 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()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.IsFlying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.IsFlying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.IsFlying();
    }

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

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.Flying(serial)

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

() => getter(bridge.Self)

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

UO.IsFlying(value) — UO.IsFlying(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.Flying(serial)

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

value => getter(GetObject(value))

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


UO.IsFrozen

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

C# のシグネチャ

int UO.IsFrozen();
int UO.IsFrozen(object? value);

クライアントが認識しているキャラクターの麻痺フラグを確認します。

引数

  • value - オプションの serial/ID mobile: 数値、16 進文字列、self、lasttarget、またはその他の標準オブジェクト名または AddObject 名。これはgraphic/typeではありません。引数なしでは、self が使用されます。不明な名前は 0 で解決されています。ターゲットが開かない。

戻り値

数値フラグ int: 1 (条件が満たされた) - ロードされた mobile にはフラグ IsParalyzed があります。 0 (条件が満たされていない) - フラグなし、mobile 不明、削除済み、またはオブジェクトがアイテムです。これは麻痺の時間ではなく、0 の結果として動ける能力を保証するものではありません。

動作

  • Paralyzed を使用して麻痺フラグを確認します。バリアント Is/Get、GetParalisa、Frozen、および GetLocked は同じフラグを読み取ります。
  • このコマンドはローカル データのみを読み取ります。麻痺を適用または解除したり、麻痺が終了するのを待ったり、サーバーに更新リクエストを送信したりすることはありません。
  • このコマンドの結果はタイプ int です: if (value != 0) または if (value == 0) を使用します。 true/false および C# の if (値) との直接比較は許可されません。値は数量や ID ではなく、フラグの意味を保持します。

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

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

簡単な例

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

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

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

1。 true - 直接スクリプトで自分自身をテストしてください

引数と実行の流れ:

  • 空の括弧は self を選択します。状態にはフラグの 1 つのスナップショットが保存されます。 true — 数値定数 1。
  • false という結果は、壁、スタミナ不足、またはその他の停止理由を排除するものではありません。
var state = UO.IsFrozen();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • target には、最後のターゲットの 16 進文字列 serial が格納されます。 IsNpc は、プレーヤーを含むロードされた mobile であることを確認します。
  • 引数を指定したコマンドはターゲットを読み取ります。彼女は新しいキャラクターを選択したり、lasttarget を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsFrozen(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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。麻痺が解除されるまでの待ち時間を制限 - シナリオクラス

引数と実行の流れ:

  • 10 の一時停止時間は 100 ミリ秒以内です。引数のない各呼び出しは、self を再度読み取ります。
  • ループの後、self の存在が個別にチェックされます。これはコマンドの実行に加えて約 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 attempts = 0;
        while (Truth(Truth(UO.IsFrozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsFrozen()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.IsFrozen(value) — UO.IsFrozen(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

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


UO.IsHidden

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

C# のシグネチャ

int UO.IsHidden();
dynamic UO.IsHidden(object? objID);

キャラクターのステルス性をテストします。

引数

  • objID — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsHidden があり、0 にはフラグがないか、mobile がありません。これはサーバーのフラグであり、壁の後ろの可視性ではありません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.IsHidden();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsHidden(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
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.IsHidden();
        await Delay(500);
        var after = UO.IsHidden();
        if (Truth(before != after))
        {
            UO.Print("State 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;
}

コマンドの実装

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

UO.IsHidden() — UO.IsHidden()

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.Hidden(serial)

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

() => getter(bridge.Self)

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

UO.IsHidden(objID) — UO.IsHidden(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "ishidden": return new InjectionValue(bridge.Hidden(Arg(0, bridge.Self)));

UO.IsParalysed

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

C# のシグネチャ

int UO.IsParalysed();
int UO.IsParalysed(object? value);

クライアントが認識しているキャラクターの麻痺フラグを確認します。

引数

  • value - オプションの serial/ID mobile: 数値、16 進文字列、self、lasttarget、またはその他の標準オブジェクト名または AddObject 名。これはgraphic/typeではありません。引数なしでは、self が使用されます。不明な名前は 0 で解決されています。ターゲットが開かない。

戻り値

数値フラグ int: 1 (条件が満たされた) - ロードされた mobile にはフラグ IsParalyzed があります。 0 (条件が満たされていない) - フラグなし、mobile 不明、削除済み、またはオブジェクトがアイテムです。これは麻痺の時間ではなく、0 の結果として動ける能力を保証するものではありません。

動作

  • Paralyzed を使用して麻痺フラグを確認します。バリアント Is/Get、GetParalisa、Frozen、および GetLocked は同じフラグを読み取ります。
  • このコマンドはローカル データのみを読み取ります。麻痺を適用または解除したり、麻痺が終了するのを待ったり、サーバーに更新リクエストを送信したりすることはありません。
  • このコマンドの結果はタイプ int です: if (value != 0) または if (value == 0) を使用します。 true/false および C# の if (値) との直接比較は許可されません。値は数量や ID ではなく、フラグの意味を保持します。

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

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

簡単な例

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

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

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

1。 true - 直接スクリプトで自分自身をテストしてください

引数と実行の流れ:

  • 空の括弧は self を選択します。状態にはフラグの 1 つのスナップショットが保存されます。 true — 数値定数 1。
  • false という結果は、壁、スタミナ不足、またはその他の停止理由を排除するものではありません。
var state = UO.IsParalysed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • target には、最後のターゲットの 16 進文字列 serial が格納されます。 IsNpc は、プレーヤーを含むロードされた mobile であることを確認します。
  • 引数を指定したコマンドはターゲットを読み取ります。彼女は新しいキャラクターを選択したり、lasttarget を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsParalysed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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。麻痺が解除されるまでの待ち時間を制限 - シナリオクラス

引数と実行の流れ:

  • 10 の一時停止時間は 100 ミリ秒以内です。引数のない各呼び出しは、self を再度読み取ります。
  • ループの後、self の存在が個別にチェックされます。これはコマンドの実行に加えて約 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 attempts = 0;
        while (Truth(Truth(UO.IsParalysed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsParalysed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.IsParalysed(value) — UO.IsParalysed(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

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


UO.IsParalyzed

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

C# のシグネチャ

int UO.IsParalyzed();
int UO.IsParalyzed(object? objID);

クライアントが認識しているキャラクターの麻痺フラグを確認します。

引数

  • objID - オプションの serial/ID mobile: 数値、16 進文字列、self、lasttarget、またはその他の標準オブジェクト名または AddObject 名。これはgraphic/typeではありません。引数なしでは、self が使用されます。不明な名前は 0 で解決されています。ターゲットが開かない。

戻り値

数値フラグ int: 1 (条件が満たされた) - ロードされた mobile にはフラグ IsParalyzed があります。 0 (条件が満たされていない) - フラグなし、mobile 不明、削除済み、またはオブジェクトがアイテムです。これは麻痺の時間ではなく、0 の結果として動ける能力を保証するものではありません。

動作

  • Paralyzed を使用して麻痺フラグを確認します。バリアント Is/Get、GetParalisa、Frozen、および GetLocked は同じフラグを読み取ります。
  • このコマンドはローカル データのみを読み取ります。麻痺を適用または解除したり、麻痺が終了するのを待ったり、サーバーに更新リクエストを送信したりすることはありません。
  • このコマンドの結果はタイプ int です: if (value != 0) または if (value == 0) を使用します。 true/false および C# の if (値) との直接比較は許可されません。値は数量や ID ではなく、フラグの意味を保持します。

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

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

簡単な例

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

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

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

1。 true - 直接スクリプトで自分自身をテストしてください

引数と実行の流れ:

  • 空の括弧は self を選択します。状態にはフラグの 1 つのスナップショットが保存されます。 true — 数値定数 1。
  • false という結果は、壁、スタミナ不足、またはその他の停止理由を排除するものではありません。
var state = UO.IsParalyzed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • target には、最後のターゲットの 16 進文字列 serial が格納されます。 IsNpc は、プレーヤーを含むロードされた mobile であることを確認します。
  • 引数を指定したコマンドはターゲットを読み取ります。彼女は新しいキャラクターを選択したり、lasttarget を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsParalyzed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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。麻痺が解除されるまでの待ち時間を制限 - シナリオクラス

引数と実行の流れ:

  • 10 の一時停止時間は 100 ミリ秒以内です。引数のない各呼び出しは、self を再度読み取ります。
  • ループの後、self の存在が個別にチェックされます。これはコマンドの実行に加えて約 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 attempts = 0;
        while (Truth(Truth(UO.IsParalyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.IsParalyzed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

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

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.IsParalyzed(objID) — UO.IsParalyzed(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "isparalyzed": return new InjectionValue(bridge.GetLocked(Arg(0, bridge.Self)));

UO.IsPoisoned

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

C# のシグネチャ

int UO.IsPoisoned();
dynamic UO.IsPoisoned(object? objID);

キャラクターの毒状態をチェックします。

引数

  • objID — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsPoisoned があり、0 にはフラグがないか、mobile がありません。毒度や残り時間は返されません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • Poisoned/Flying では、プロトコルのバージョンが考慮されます。7.0.0.0 までは、0x04 ビットはポイズンを意味します。 7.0.0.0で始まるのは飛行を意味し、毒は別に保管されます。フライトはZから計算されません。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.IsPoisoned();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.IsPoisoned(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
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.IsPoisoned();
        await Delay(500);
        var after = UO.IsPoisoned();
        if (Truth(before != after))
        {
            UO.Print("State 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;
}

コマンドの実装

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

UO.IsPoisoned() — UO.IsPoisoned()

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.Poisoned(serial)

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

() => getter(bridge.Self)

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

UO.IsPoisoned(objID) — UO.IsPoisoned(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "ispoisoned": return new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self)));

UO.IsYellowHits

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

C# のシグネチャ

int UO.IsYellowHits(object? objID);

黄色のヘルスバーフラグ mobile を確認します。

引数

  • objID — 特定のオブジェクトの必須 serial/ID: int、16 進文字列またはエイリアス self、backpack、lasttarget、lastobject、lastcontainer、laststatus、finditem、lastcorpse または name AddObject。これはgraphic/typeではありません。指定されていない名前は 0 に解決されます。このコマンドは新しいターゲットを開きません。引数は必須です。あなた自身のために、self を渡してください。

戻り値

int 1 - ロードされた mobile には属性 IsYellowHits があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。

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

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

簡単な例

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

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

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

1。自分の状態を確認する - 直接スクリプト

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • これはサーバー/互換性フラグであり、テーマカラー IDE や数量 HP ではありません。フラグがないことは脆弱性を証明するものではありません。サーバーは保護を異なる方法で示す可能性があります。
var state = UO.IsYellowHits("self");
var hp = UO.GetHP("self");
UO.Print("Yellow flag: " + Convert.ToString(state));
UO.Print("Known HP: " + Convert.ToString(hp));

2。選択されたチェックmobile - スクリプト関数

引数と実行の流れ:

  • IsNpc は被写体と未知のオブジェクトを除外します。 target は、変化する lasttarget へのライブ参照ではなく、単一の serial を保存します。
  • 結果はフィールド IsYellowHits を参照します。データは、クライアントが適切な状態を受け取った後にのみ更新されます。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.IsYellowHits(target);
        UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    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(500) — ミリ秒単位で一時停止します。その後、mobile がまだ存在するかどうかが別途確認されます。
  • 2 つの画像を比較します。中間の変更は見逃される可能性があり、これはサーバー イベントへの継続的なサブスクリプションではありません。
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 target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.IsYellowHits(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.IsYellowHits(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        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.IsYellowHits(objID) — UO.IsYellowHits(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "isyellowhits": return new InjectionValue(bridge.GetYellowBar(Arg(0, bridge.Self)));

UO.LastStatus

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

C# のシグネチャ

int UO.LastStatus();

クライアントがステータスを受け入れた最後のオブジェクトの serial を返します。

引数

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

戻り値

int は type ではなく、32 ビット serial であり、論理結果ではありません。 0: まだステータスが承認されていないか、ワールドがクリアされています。最上位ビットは保持されます。負の数も serial を表すことができます。 > 0 や == true ではなく、!= 0 を確認してください。

動作

  • パラメータはありません。読み取りでは、パケットの送信、ウィンドウのオープン、応答の待機は行われません。 UO.GetStatus(id)、RequestStats、UpdateObject はデータのみを要求します。送信してもLastStatus は変わりません。
  • 受信したパッケージ 0x11 は、すべてのスクリプトの serial とクライアント既知の X/Y を一緒に World に保存します。不明または破棄されたオブジェクトと不完全な基本パッケージは、エントリを置き換えません。他のオブジェクトの後続のパッケージで置き換えられる可能性があります。
  • X/Y は、現在の位置ではなく、受信時のエンティティのスナップショットです。 mobile の場合、これらはワールド セルです。コンテナ内のアイテムの場合、これはコンテンツの座標になる可能性があります。ステータスパッケージ自体はX/Yを送信しません。受信後にオブジェクトを移動/削除しても画像は変わりません。 World.Clear でリセットされます。既存のフィーチャの現在の座標については、GetX/GetY を使用します。
  • 個々の呼び出しはアトミックなスナップショットを形成しません。サーバーはそれらの間のレコードを更新できます。等式 serial は、特にクエリに対する新しい答えを証明するものではありません。括弧のない laststatus は、スクリプトが変数でオーバーライドしていない場合、ライブの組み込み値です。 UO.LastStatus() は登録された機能です。

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

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

簡単な例

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

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

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

1。最後の値を読み取る - 直接スクリプト

引数と実行の流れ:

  • 値は 1 回読み取られます。 serial の場合、HEX は便利な 16 進表記を維持します。座標の Convert.ToString は数値を出力します。この呼び出しではオブジェクトは選択されません。
var value = UO.LastStatus();
UO.Print("Saved value: " + Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2。ステータスのクエリと既知のデータの読み取り - スクリプト関数

引数と実行の流れ:

  • 件名 — serial self。 500 はミリ秒単位の一時停止であり、例としてのみ選択されています。答えを保証するものではありません。現在のレコードが表示されますが、古いままであるか、別のオブジェクトに属している可能性があります。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatus();
        UO.Print("Known value: " + Hex(value));
    }

    return null;
}

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

3。フルヘルパー ReadSavedStatus - スクリプトクラス

引数と実行の流れ:

  • expectedId - serial、メインに保存されます。ヘルパーは以下で完全に定義されています。 -1 は、選択したエントリがもう存在せず、コマンド自体の結果ではないことを意味します。前後チェックによりオブジェクトが混在するリスクは軽減されますが、同じ serial を更新する際のアトミック性は保証されません。
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatus();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

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

結果: int / Integer.

呼び出し時:

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

case "laststatus": return new InjectionValue(bridge.LastStatus);

UO.LastStatusX

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

C# のシグネチャ

int UO.LastStatusX();

最後に受け入れられたステータス オブジェクトの保存された X 座標を返します。

引数

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

戻り値

int は、X の保存された座標であり、ステータス ウィンドウのピクセルや bool ではありません。最初のステータスになる前またはワールドをクリアした後 - 0;座標0自体も許容されます。 UO.LastStatus() をチェックして、欠落しているエントリを区別します。

動作

  • パラメータはありません。読み取りでは、パケットの送信、ウィンドウのオープン、応答の待機は行われません。 UO.GetStatus(id)、RequestStats、UpdateObject はデータのみを要求します。送信してもLastStatus は変わりません。
  • 受信したパッケージ 0x11 は、すべてのスクリプトの serial とクライアント既知の X/Y を一緒に World に保存します。不明または破棄されたオブジェクトと不完全な基本パッケージは、エントリを置き換えません。他のオブジェクトの後続のパッケージで置き換えられる可能性があります。
  • X/Y は、現在の位置ではなく、受信時のエンティティのスナップショットです。 mobile の場合、これらはワールド セルです。コンテナ内のアイテムの場合、これはコンテンツの座標になる可能性があります。ステータスパッケージ自体はX/Yを送信しません。受信後にオブジェクトを移動/削除しても画像は変わりません。 World.Clear でリセットされます。既存のフィーチャの現在の座標については、GetX/GetY を使用します。
  • 個々の呼び出しはアトミックなスナップショットを形成しません。サーバーはそれらの間のレコードを更新できます。等式 serial は、特にクエリに対する新しい答えを証明するものではありません。括弧のない laststatus は、スクリプトが変数でオーバーライドしていない場合、ライブの組み込み値です。 UO.LastStatus() は登録された機能です。

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

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

簡単な例

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

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

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

1。最後の値を読み取る - 直接スクリプト

引数と実行の流れ:

  • 値は 1 回読み取られます。 serial の場合、HEX は便利な 16 進表記を維持します。座標の Convert.ToString は数値を出力します。この呼び出しではオブジェクトは選択されません。
var value = UO.LastStatusX();
UO.Print("Saved value: " + Convert.ToString(value));

2。ステータスのクエリと既知のデータの読み取り - スクリプト関数

引数と実行の流れ:

  • 件名 — serial self。 500 はミリ秒単位の一時停止であり、例としてのみ選択されています。答えを保証するものではありません。現在のレコードが表示されますが、古いままであるか、別のオブジェクトに属している可能性があります。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatusX();
        UO.Print("Known value: " + Convert.ToString(value));
    }

    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。フルヘルパー ReadSavedStatus - スクリプトクラス

引数と実行の流れ:

  • expectedId - serial、メインに保存されます。ヘルパーは以下で完全に定義されています。 -1 は、選択したエントリがもう存在せず、コマンド自体の結果ではないことを意味します。前後チェックによりオブジェクトが混在するリスクは軽減されますが、同じ serial を更新する際のアトミック性は保証されません。
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatusX();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

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

結果: int / Integer.

呼び出し時:

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

public int LastStatusX() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusX : bridge.GetX(bridge.LastStatus);

UO.LastStatusY

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

C# のシグネチャ

int UO.LastStatusY();

最後に受け入れられたステータス オブジェクトの保存された Y 座標を返します。

引数

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

戻り値

int は、Y の保存された座標であり、ステータス ウィンドウのピクセルや bool ではありません。最初のステータスになる前またはワールドをクリアした後 - 0;座標0自体も許容されます。 UO.LastStatus() をチェックして、欠落しているエントリを区別します。

動作

  • パラメータはありません。読み取りでは、パケットの送信、ウィンドウのオープン、応答の待機は行われません。 UO.GetStatus(id)、RequestStats、UpdateObject はデータのみを要求します。送信してもLastStatus は変わりません。
  • 受信したパッケージ 0x11 は、すべてのスクリプトの serial とクライアント既知の X/Y を一緒に World に保存します。不明または破棄されたオブジェクトと不完全な基本パッケージは、エントリを置き換えません。他のオブジェクトの後続のパッケージで置き換えられる可能性があります。
  • X/Y は、現在の位置ではなく、受信時のエンティティのスナップショットです。 mobile の場合、これらはワールド セルです。コンテナ内のアイテムの場合、これはコンテンツの座標になる可能性があります。ステータスパッケージ自体はX/Yを送信しません。受信後にオブジェクトを移動/削除しても画像は変わりません。 World.Clear でリセットされます。既存のフィーチャの現在の座標については、GetX/GetY を使用します。
  • 個々の呼び出しはアトミックなスナップショットを形成しません。サーバーはそれらの間のレコードを更新できます。等式 serial は、特にクエリに対する新しい答えを証明するものではありません。括弧のない laststatus は、スクリプトが変数でオーバーライドしていない場合、ライブの組み込み値です。 UO.LastStatus() は登録された機能です。

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

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

簡単な例

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

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

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

1。最後の値を読み取る - 直接スクリプト

引数と実行の流れ:

  • 値は 1 回読み取られます。 serial の場合、HEX は便利な 16 進表記を維持します。座標の Convert.ToString は数値を出力します。この呼び出しではオブジェクトは選択されません。
var value = UO.LastStatusY();
UO.Print("Saved value: " + Convert.ToString(value));

2。ステータスのクエリと既知のデータの読み取り - スクリプト関数

引数と実行の流れ:

  • 件名 — serial self。 500 はミリ秒単位の一時停止であり、例としてのみ選択されています。答えを保証するものではありません。現在のレコードが表示されますが、古いままであるか、別のオブジェクトに属している可能性があります。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var subject = UO.Self();
    if (Truth(subject != 0))
    {
        UO.GetStatus(subject);
        await Delay(500);
        var value = UO.LastStatusY();
        UO.Print("Known value: " + Convert.ToString(value));
    }

    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。フルヘルパー ReadSavedStatus - スクリプトクラス

引数と実行の流れ:

  • expectedId - serial、メインに保存されます。ヘルパーは以下で完全に定義されています。 -1 は、選択したエントリがもう存在せず、コマンド自体の結果ではないことを意味します。前後チェックによりオブジェクトが混在するリスクは軽減されますが、同じ serial を更新する際のアトミック性は保証されません。
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 expectedId = UO.LastStatus();
        if (Truth(expectedId != 0))
        {
            var value = ReadSavedStatus(expectedId);
            UO.Print("Checked value: " + Convert.ToString(value));
        }

        return null;
    }

    dynamic ReadSavedStatus(dynamic expectedId)
    {
        if (Truth(expectedId == 0) || Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        var value = UO.LastStatusY();
        if (Truth(UO.LastStatus() != expectedId))
        {
            return -1;
        }

        return value;
    }

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

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

結果: int / Integer.

呼び出し時:

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

public int LastStatusY() => bridge is IStatusSnapshotBridge snapshot ? snapshot.LastStatusY : bridge.GetY(bridge.LastStatus);

UO.Life

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

C# のシグネチャ

dynamic UO.Life();

ローカル モデルから現在の健全性を読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、Hits フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobileの場合は意味が分からない可能性があります。 HP/HitsMax には、正確なポイントではなく、相対的なサーバー スケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.Life();
UO.Print("Life: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Life();
    var maximum = UO.GetMaxHP();
    if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
    {
        UO.Print("Health below half of the known maximum");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Life();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.Life() — UO.Life()

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

結果: dynamic / Any.

呼び出し時:

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

case "life": return new InjectionValue(bridge.GetHP(bridge.Self));

UO.Luck

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

C# のシグネチャ

int UO.Luck();

キャラクターのステータスカウンター、つまり幸運ポイントを読み取ります。

引数

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

戻り値

int — クライアントモデルの幸運ポイント、0..65535。 0 は、実際の値である場合もあれば、データがない場合もあれば、紛失または破壊されたプレーヤーである場合もあります。これは数量であり、bool、ID、type ではありません。1 は 1 単位を意味し、成功ではありません。このコマンドはオブジェクトを反復処理せず、配列を返しません。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Luck がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • Luck は、ステータス type >= 4 から UInt16 として保存されているサーバーの幸運ポイントを読み取ります。これは割合、乱数、または戦利品の品質を保証するものではありません。読み取り時にクライアントはドロップ率を計算せず、装備ボーナスを追加しません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。 Display saved counter - direct script

引数と実行の流れ:

  • value には、それ自体の文字に対する引数なしの呼び出しが 1 つ格納されます。 Convert.ToString は、意味を変えずにログの番号をフォーマットします。
var value = UO.Luck();
UO.Print("Luck: " + Convert.ToString(value));

2。変化の観察 - スクリプト関数

引数と実行の流れ:

  • UO.Wait(500) は前後を 500 ミリ秒で区切ります。差は正、ゼロ、負のいずれかになります。暫定的な更新やキャラクターの変更はスキップされる場合があります。一時停止はその一例です。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Luck();
    await Delay(500);
    var after = UO.Luck();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

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

引数と実行の流れ:

  • LuckAtLeast(最小) は数値要件を受け取ります。 1000 は一例であり、制限や割合ではありません。プレイヤーの不在を拒否し、運を一度読み取り、最小値以上の値で bool: true または false を返します。運自体はboolではありません。キャッシュされたポイントは比較され、戦利品のドロップは予測されません。
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(LuckAtLeast(1000)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic LuckAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Luck();
        return value >= minimum;
    }

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

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

結果: int / Integer.

呼び出し時:

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

case "luck": return new InjectionValue(bridge.Luck);

UO.Mana

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

C# のシグネチャ

dynamic UO.Mana();

ローカルモデルから現在のマナを読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、Mana フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく、相対的なサーバー スケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.Mana();
UO.Print("Mana: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Mana();
    if (Truth(value >= 10))
    {
        UO.Print("At least ten mana points are known");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Mana();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.Mana() — UO.Mana()

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

結果: dynamic / Any.

呼び出し時:

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

case "mana": return new InjectionValue(bridge.Mana);

UO.MaxHP

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

C# のシグネチャ

int UO.MaxHP();

ローカル モデルから最大健全性を読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、HitsMax フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく相対的なサーバースケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.MaxHP();
UO.Print("MaxHP: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxHP();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxHP();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.MaxHP() — UO.MaxHP()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetMaxHP(bridge.Self)

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


UO.MaxLife

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

C# のシグネチャ

dynamic UO.MaxLife();

ローカル モデルから最大健全性を読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、HitsMax フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく相対的なサーバースケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.MaxLife();
UO.Print("MaxLife: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxLife();
    if (Truth(value > 0))
    {
        UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
    }
    else
    {
        UO.Print("HP maximum unavailable");
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxLife();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.MaxLife() — UO.MaxLife()

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

結果: dynamic / Any.

呼び出し時:

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

case "maxlife": return new InjectionValue(bridge.GetMaxHP(bridge.Self));

UO.MaxMana

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

C# のシグネチャ

dynamic UO.MaxMana();

ローカルモデルから最大マナを読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、ManaMax フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく相対的なサーバースケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.MaxMana();
UO.Print("MaxMana: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxMana();
    if (Truth(value > 0))
    {
        UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxMana();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.MaxMana() — UO.MaxMana()

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

結果: dynamic / Any.

呼び出し時:

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

case "maxmana": return new InjectionValue(bridge.MaxMana);

UO.MaxStam

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

C# のシグネチャ

dynamic UO.MaxStam();

ローカル モデルから最大耐久性を読み取ります。

引数

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

戻り値

int は、パーセンテージや bool ではなく、StaminaMax フィールドの値です。 0 は、実際の値または欠損データを示す可能性があります。ゼロ最大値を除数として使用することはできません。他人のmobile の場合、意味がわからない可能性があります。 HP/HitsMax には、正確なポイントではなく相対的なサーバースケールが含まれる場合があります。 HP=0 は死亡を証明するものではありません。これには Dead/IsDead があります。

動作

  • このコマンドはステータスをオープンせず、サーバーの更新も要求しません。クライアントは、すでにロードされているデータのみを読み取ります。特性を変更せず、パケットを送信しません。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。
  • オブジェクトを読み取るとき、World.Get は欠落しているものまたは IsDestroyed を拒否し、結果は 0 になります。 HP/HitsMax は、これらのフィールドを持つ項目を含めてエンティティから読み取られます。 Mana/Stamina - モバイル専用。引数なしでselfをお読みください。パラメーターのない同じ名前のバリアントには、必ずしも ID を持つバリアントがあるとは限りません: シグネチャを参照してください。
  • 引数なしで読み取ると、プレーヤーが見つからないか破壊された場合にも 0 が返されます。これは、World.Get 経由のフォームだけでなく、直接の Mana/Stamina とその最大値にも適用されます。死んだキャラクターが存在しても値を保持できます。

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

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

簡単な例

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

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

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

1。キャラクターの値を出力します - 直接スクリプト

引数と実行の流れ:

  • 引数なしの呼び出しは self となります。 value には 1 つの数値が格納されます。Convert.ToString はメッセージのみに変換されます。
var value = UO.MaxStam();
UO.Print("MaxStam: " + Convert.ToString(value));

2。チェックまたは計算に値を適用 - スクリプト関数

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxStam();
    if (Truth(value > 0))
    {
        UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
    }

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

引数と実行の流れ:

  • この名前には ID という形式はありません。パラメータなしの ReadValue は self を読み取ります。 2 つの呼び出しは UO.Wait(1000) によって区切られます。 2 つのスナップショットを比較すると、中間の変更が失われる可能性があります。
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 = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxStam();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

コマンドの実装

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

UO.MaxStam() — UO.MaxStam()

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

結果: dynamic / Any.

呼び出し時:

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

case "maxstam": return new InjectionValue(bridge.MaxStamina);
⚠️ **GitHub.com Fallback** ⚠️