Skip to content

JA UO Topic character Part 4

Codex edited this page Oct 12, 2026 · 4 revisions

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

キャラクター — 4

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

リファレンスの各部

1 · 2 · 3 · 4 · 5

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


UO.MaxStamina

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

C# のシグネチャ

int UO.MaxStamina();

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

引数

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

戻り値

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 に変換されません。配列の場合は要素数を表示します。

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxStamina();
    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.MaxStamina();
    }

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

コマンドの実装

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

UO.MaxStamina() — UO.MaxStamina()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.MaxStamina

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


UO.MaxWeight

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

C# のシグネチャ

int UO.MaxWeight();

キャラクターのステータスカウンター(石の最大重量)を読み取ります。

引数

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

戻り値

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

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.WeightMax がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • MaxWeight は WeightMax キャッシュを読み取ります。ネイティブ ステータス type >= 5 は、0 に等しい場合でも、サーバー制限を UInt16 に設定します。古い拡張ステータスは、受信時に一度計算します: プロトコル UO >= 5.0.0a - 7 * Floor(Strength / 2) + 40;古いものは Strength * 4 + 25 です。結果は UInt16 として保存されます。極値はモジュロ 65536 でラップされます。 Strength=101 は、それぞれ 390 または 429 を与えます。 Strengthを個別に変更する場合、ゲッター自体は制限を再計算しません。
  • 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.MaxWeight();
UO.Print("MaxWeight: " + Convert.ToString(result));

1。 Display saved counter - direct script

引数と実行の流れ:

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

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

引数と実行の流れ:

  • UO.Wait(500) は前後を 500 ミリ秒で区切ります。差は正、ゼロ、負のいずれかになります。暫定的な更新やキャラクターの変更はスキップされる場合があります。一時停止はその一例です。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.MaxWeight();
    await Delay(500);
    var after = UO.MaxWeight();
    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.Weight();
        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.MaxWeight() — UO.MaxWeight()

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

結果: int / Integer.

呼び出し時:

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

public int MaxWeight() => bridge.MaxWeight;

UO.Mount

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

C# のシグネチャ

void UO.Mount();
void UO.Mount(object? mount);

選択したマウント/アイテムのマウントを要求します。

引数

  • mount - オプションのserial ターゲット。引数がなければ、LastTarget が採用されます。これはgraphic/typeではなく、IDです。生きている mobile をロードし、1 セル以上離れてはいけません。アイテムはキャラクターのインベントリ内にある必要があります (例: エーテルマウント)。インベントリ内の任意のアイテムがマウント可能になることはありません。サーバーが決定します。

戻り値

void - 戻り値はありません。別の回線として呼び出し、結果を 1/true と比較しないでください。サーバーが応答したら、25 レイヤーを確認します。

動作

  • このコマンドは、マウス エミュレーションを行わずに、プロトコル オブジェクト UO (0x06) を使用するリクエストを送信します。これは、インターフェイスの一般的な double クリック ハンドラーをバイパスします。戦争モードでは、リクエストは攻撃に置き換えられません。
  • マウントの状態はレイヤー25から読み取られます。これはサーバーデータの後に変更されます。コマンドから戻っても、着陸/降車の完了は確認されません。
  • 繰り返されるマウント/マウント解除リクエストは一時的にマージされます。レイヤー変更、キャラクター変更、または 5 秒が経過するまで、新しいリクエストは送信されません。これにより、スクリプト間の重複が防止されます。
  • キャラクターが不在、ゲーム外、または死亡したキャラクターの場合、リクエストは送信されません。所有権、空き状況、座席に関する最終ルールはサーバーによって決定されます。
  • キャラクターがすでにマウントされている場合、ターゲットが 0/self である場合、破壊されている場合、死亡している場合、または指定された条件下で利用できない場合、リクエストは送信されません。地面にあるオブジェクトは拒否されます。

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

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

簡単な例

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

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

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

1。パラメータなしで lasttarget に到達 - 直接スクリプト

引数と実行の流れ:

  • 引数なし: LastTarget が使用されます。 Print はサーバーの同意を確認しません。
if (Truth(UO.GetSerial("lasttarget") == "0x00000000"))
{
    UO.Print("Mount target not selected");
    return null;
}
UO.Mount();
UO.Print("Mount request processed locally");

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

2。明示的な ID を渡してレイヤーをチェックする - スクリプト関数

引数と実行の流れ:

  • mount=target, 番号 25 はカスタム キャラクター レイヤーを指します。すでにご乗車されている場合は、新たなお申込みは不要です。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(target == "0x00000000"))
    {
        return null;
    }

    if (Truth(UO.ObjAtLayer(25) == 0))
    {
        UO.Mount(target);
    }

    return null;
}

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

3。制限付き待機を伴う完全な関数 - スクリプト クラス

引数と実行の流れ:

  • ターゲット — ID ターゲット。 1 つのリクエストで、20 までは 50 ミリ秒待機します。 true/false はヘルパーを返し、UO.Mount 自体は Unit を返します。
  • false は、レイヤーがこの期間内に表示されなかったことを意味します。サーバーの応答が遅れる可能性は依然としてあります。
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 mounted = await TryMount("lasttarget");
        UO.Print("Mounted within one second: " + Convert.ToString(mounted));
        return null;
    }

    async Task<dynamic> TryMount(dynamic target)
    {
        if (Truth(UO.ObjAtLayer(25) != 0))
        {
            return true;
        }

        if (Truth(target == "0x00000000"))
        {
            return false;
        }

        UO.Mount(target);
        var attempts = 0;
        while (Truth(attempts < 20))
        {
            if (Truth(UO.ObjAtLayer(25) != 0))
            {
                return true;
            }

            await Delay(50);
            attempts = attempts + 1;
        }

        return false;
    }

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

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

結果: void / Unit.

呼び出し時:

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

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.Mount(mount) — UO.Mount(Any)

引数: mount (Any)

結果: void / Unit.

呼び出し時:

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

case "mount": bridge.Mount(Arg(0, bridge.LastTarget)); break;

UO.ObjAtLayer

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

C# のシグネチャ

dynamic UO.ObjAtLayer(object? layer);

自分のキャラクターの装備の指定されたレイヤーにあるアイテムを検索します。

引数

  • layer — 1 つの必須引数: レイヤー番号 1..29 または以下のリストの文字列名。番号 0 と名前 Invalid により 0 が与えられます。名前の大文字と小文字と末尾のスペースは無視されます。不明な文字列名はスクリプト エラーの原因となります。数値文字列「1」は数値1を置き換えません。

戻り値

数値形式は、アイテムの場合は int - serial、空/無効なレイヤーの場合は 0 を返します。文字列形式は、項目が見つかった場合は "0x40001001" 形式の string を返し、それ以外の場合は int 0 を返します。これはアイテムの ID であり、レイヤー番号、graphic/type、または数量ではありません。メタデータ object?文字列形式は 2 つの可能な結果タイプを反映しています。

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • 機器データselfを確認します。チームはバッグを開けたり、アイテムを装着したり、検査リクエストを送ったりすることはありません。
  • 1..29 の外側の数値は、モジュロ変換なしで 0 256 を与えます。たとえば、257 は右手を選択できません。
  • サポートされているすべての数値レイヤーと文字列名:
  • 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
  • 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
  • 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.

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

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

簡単な例

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

object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");

1。レイヤー名ごとに右側の項目 - 直接スクリプト

引数と実行の流れ:

  • Rhand はレイヤー 1 を選択します。成功した場合、hand は 16 進文字列になります。存在しない場合は、番号 0。
  • Convert.ToString を使用すると、可能な両方のタイプを出力できます。その結果を武器のgraphicとして受け取ることはできません。
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty 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。番号レイヤーとアイテムのプロパティ - スクリプト関数

引数と実行の流れ:

  • 番号 2 は TwoHanded を選択します。このフォームは常に int を返します。
  • Exists は、アイテムがそのプロパティを読み取ることができるかどうかを確認します。 GetGraphic は別の type を返します。
return  RunScenario();
 object? RunScenario()
{
    var item = UO.ObjAtLayer(2);
    if (Truth(UO.Exists(item)))
    {
        UO.Print("Two-handed layer serial: " + Convert.ToString(item));
        UO.Print("Graphic: " + UO.GetGraphic(item));
    }

    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。バックパックを取得し、無効なレイヤーを確認します - スクリプト クラス

引数と実行の流れ:

  • 21 - レイヤー Backpack;結果0は機器をロードする前に可能です。
  • 257 はリストの外にあり、常に 0 を与えます。これは、1 層の代替指定ではありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var bag = UO.ObjAtLayer(21);
        var invalid = UO.ObjAtLayer(257);
        UO.Print("Backpack serial: " + Convert.ToString(bag));
        UO.Print("Invalid layer: " + Convert.ToString(invalid));
        return null;
    }
}

コマンドの実装

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

UO.ObjAtLayer(layer) — UO.ObjAtLayer(Any)

引数: layer (Any/String)

結果: dynamic / Integer.

呼び出し時:

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

case "objatlayer":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String

                        ? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));

UO.ObjAtLayer(layer) — UO.ObjAtLayer(String)

引数: layer (Any/String)

結果: dynamic / Any.

呼び出し時:

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

public InjectionValue ObjAtLayer(string layer)

        {

            var id = bridge.ObjAtLayer(ConvertLayer(layer));

            if (id == 0)

                return InjectionValue.Zero;



            return new InjectionValue("0x" + id.ToString("X8"));

        }

UO.ObjAtLayerEx

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

C# のシグネチャ

int UO.ObjAtLayerEx(object? layerType, object? playerID);

指定されたロードされたキャラクターの指定されたレイヤー内のアイテム/コンテナを読み取ります。

引数

  • layerType — レイヤー1..29 の数値。整数または数値文字列 (26 や "0x1A" など) を受け入れます。文字列名 Rhand/ShopBuyRestock と裸のレイヤー定数は、ここでは数値に変換されません。番号を使用します。
  • playerID — 文字シリアル/mobile、数値、16 進文字列、または解決可能なオブジェクト名 (「self」/「lasttarget」など)。アイテムのグラフィック/type またはコンテナ自体のID は適切ではありません。

戻り値

int: レイヤー上のアイテム/コンテナの serial、またはレイヤーが空/不明、番号が無効、またはモバイルがロードされていない場合は 0。これはbool やレイヤー番号ではありません。

動作

  • 読み取りはローカルで、ターゲット、購入、コンテナーのオープン、およびネットワーク要求はありません。
  • 範囲 1..29 がチェックされます。不適切な文字列パラメータを変換すると、エラーが発生する可能性があります。任意のレイヤー名を数値の代わりに渡さないでください。
  • 文字列レイヤー名を持つカスタム キャラクターには、別の UO.ObjAtLayer が使用できます。レイヤーを、静的インデックスまたはガンプ座標である world Z と混同しないでください。

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

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

簡単な例

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

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

var result = UO.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));

1。ストアコンテナを受け取り、製品をリストする - 直接スクリプト

引数と実行の流れ:

  • LayerType=26; PlayerID=ベンダー;ショップ — serial コンテナ。 GetContent の場合、レイヤー番号ではなくショップが渡されます。
  • 配列には、0 から1 を引いた長さまでインデックスが付けられます。各要素は serial です。空の配列は、ロードされた即時要素がないことを意味します。購入は履行されません。
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
    UO.Print("Vendor not selected");
    return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
    UO.Print("ShopBuyRestock container is not loaded");
    return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
    var item = items[i];
    UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
    UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
    i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));

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

2。希望のgraphicの商品を選択し、個数をカウントします - スクリプト機能

引数と実行の流れ:

  • wantedTypeはgraphic、アイテムは個別アイテムのIDです。 stacks はレコード/スタックをカウントします。単位はそれらの数値を加算します。
  • これはすでに受け取った数量の読み取り値であり、将来の購入によって保証される残高ではありません。ここでは価格の指定はありません。
return  RunScenario();
 object? RunScenario()
{
    var vendor = UO.GetSerial("lasttarget");
    if (Truth(vendor == "0x00000000"))
    {
        UO.Print("Vendor not selected");
        return null;
    }

    var shop = UO.ObjAtLayerEx(26, vendor);
    if (Truth(shop == 0))
    {
        UO.Print("Shop layer is not loaded");
        return null;
    }

    var wantedType = 0x1766;
    var stacks = 0;
    var units = 0;
    var items = UO.GetContent(shop);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        var item = items[i];
        if (Truth(UO.GetType(item) == wantedType))
        {
            stacks = stacks + 1;
            units = units + UO.GetQuantity(item);
        }

        i = i + 1;
    }

    UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
    return null;
}

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

3。完全な手順を通じて 3 つの店舗レイヤーを比較 - スクリプト クラス

引数と実行の流れ:

  • ShowVendorLayer は完全に宣言されます。ベンダー - ID NPC、layerNumber - 26/27/28、キャプション - 署名のみ。
  • コンテナはクライアントにとって未知である可能性があります。 0 は GetContent の前にチェックされます。明示的な GetContent(0) は、地上にあるアイテムを要求することを意味しますが、ここでは必要ありません。
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 vendor = UO.GetSerial("lasttarget");
        if (Truth(vendor == "0x00000000"))
        {
            UO.Print("Vendor not selected");
            return null;
        }

        ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
        ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
        ShowVendorLayer(vendor, 28, "ShopSell / Sell");
        return null;
    }

    void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
    {
        var container = UO.ObjAtLayerEx(layerNumber, vendor);
        if (Truth(container == 0))
        {
            UO.Print(caption + ": not loaded");
            return;
        }

        var items = UO.GetContent(container);
        UO.Print(caption + " | Container ID: " + Convert.ToString(container));
        UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
    }

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

コマンドの実装

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

UO.ObjAtLayerEx(layerType, playerID) — UO.ObjAtLayerEx(Any,Any)

引数: layerType (Any), playerID (Any)

結果: int / Integer.

呼び出し時:

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

case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));

UO.Paralyzed

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

C# のシグネチャ

int UO.Paralyzed();
int UO.Paralyzed(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.Paralyzed();
UO.Print("Paralyzed: " + Convert.ToString(result));

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

引数と実行の流れ:

  • 空の括弧は self を選択します。状態にはフラグの 1 つのスナップショットが保存されます。 true — 数値定数 1。
  • false という結果は、壁、スタミナ不足、またはその他の停止理由を排除するものではありません。
var state = UO.Paralyzed();
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.Paralyzed(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.Paralyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.Paralyzed()) == 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.Paralyzed() — UO.Paralyzed()

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

結果: int / Integer.

呼び出し時:

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

case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));

UO.Paralyzed(value) — UO.Paralyzed(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

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


UO.PhysicalResist

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

C# のシグネチャ

int UO.PhysicalResist();

現在のキャラクターの抵抗フィールド (物理的な鎧/抵抗) を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.PhysicalResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PhysicalResistance - サーバー アーマー/ステータス フィールド: クラシック サーバーはアーマー レーティングを送信でき、耐性のあるルールは物理耐性を送信できます。 API は一方から他方への変換を行わず、ダメージ軽減のパーセンテージを計算しません。 Armor と物理エイリアスは同じフィールドを読み取ります。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.PhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PhysicalResist();
    await Delay(500);
    var after = UO.PhysicalResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.PhysicalResist();
        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.PhysicalResist() — UO.PhysicalResist()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Armor

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


UO.Poison

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

C# のシグネチャ

void UO.Poison();
void UO.Poison(object? target);

必要に応じて、特定のターゲットに毒スキルを使用します。

引数

  • target - オプションの serial/ターゲットエイリアス。引数はありません - UseSkill(「中毒」) のみ。引数付き - UseSkillAtTarget(「中毒」、ターゲット)。

戻り値

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

動作

  • 登録されているレガシーコマンドは、毒耐性や毒ステータスのゲッターではありません。ブランチはスキルを召喚し、1/0を破棄します。
  • ターゲットのあるフォームでは、UseSkillAtTarget はポジティブな serial をチェックし、スキルを要求する前にターゲットを準備します。スキルが受け入れられなかった場合、ターゲットはキャンセルされます。サーバーによるターゲットの汚染は保証されません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 必要に応じて、特定のターゲットに毒スキルを使用します。
UO.Poison();

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

引数と実行の流れ:

  • 登録されているレガシーコマンドは、毒耐性や毒ステータスのゲッターではありません。ブランチはスキルを召喚し、1/0を破棄します。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.Poison("lasttarget");
    }

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

引数と実行の流れ:

  • ターゲットのあるフォームでは、UseSkillAtTarget はポジティブな 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 id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Poison(id);
            UO.Print(UO.Waiting());
        }

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

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

結果: void / Unit.

呼び出し時:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.Poison(target) — UO.Poison(Any)

引数: target (Any)

結果: void / Unit.

呼び出し時:

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

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.PoisonResist

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

C# のシグネチャ

int UO.PoisonResist();

現在のキャラクターの抵抗フィールド「毒」を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.PoisonResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • 要素フィールドは拡張 CharacterStatus (0x11)、type >= 4 になります。コマンド自体はサーバー エポックをチェックしません。これらのフィールドのないコンパクト/古いステータスは、以前のキャッシュを残します。新しいプレーヤーは最初は 0 です。毒耐性は Poisoned フラグではありません。また、これは Resisting Spells スキルでもありません。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.PoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PoisonResist();
    await Delay(500);
    var after = UO.PoisonResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.PoisonResist();
        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.PoisonResist() — UO.PoisonResist()

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

結果: int / Integer.

呼び出し時:

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

case "poisonresist": return new InjectionValue(bridge.PoisonResistance);

UO.Poisoned

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

C# のシグネチャ

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

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

引数

  • id — 次の形式のオプションのオブジェクト: 数値/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.Poisoned();
UO.Print("Poisoned: " + Convert.ToString(result));

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

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.Poisoned();
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.Poisoned(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.Poisoned();
        await Delay(500);
        var after = UO.Poisoned();
        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.Poisoned() — UO.Poisoned()

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

結果: int / Integer.

呼び出し時:

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

public int Poisoned() => bridge.Poisoned(bridge.Self);

UO.Poisoned(id) — UO.Poisoned(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

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

UO.Race

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

C# のシグネチャ

dynamic UO.Race();

クライアントモデルからキャラクターの種族を読み取ります。

引数

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

戻り値

int — クライアントモデルに応じて、1=人間、2=エルフ、3=ガーゴイル。 0 はキャラクターがロードされていないことを意味します。 body/graphic ではなく、serial でもありません。

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。表示される計算や条件にはキャラクターの種族が使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Race();
    if (Truth(value == 3))
    {
        UO.Print("Player race is gargoyle");
    }

    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.Race();
        await Delay(1000);
        var after = UO.Race();
        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.Race() — UO.Race()

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

結果: dynamic / Any.

呼び出し時:

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

case "race": return new InjectionValue(bridge.Race);

UO.RemoveEarrings

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

C# のシグネチャ

void UO.RemoveEarrings();

Ear レイヤーからのアイテムの削除を要求します。

引数

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

戻り値

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

動作

  • ExecuteLegacyManualAlias は Unequip(「Ear」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • Ear レイヤーからのアイテムの削除を要求します。
UO.RemoveEarrings();

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は Unequip(「Ear」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ear"));
    UO.RemoveEarrings();
    return null;
}

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

引数と実行の流れ:

  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveEarrings();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ear"));
        return null;
    }
}

コマンドの実装

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

UO.RemoveEarrings() — UO.RemoveEarrings()

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

結果: void / Unit.

呼び出し時:

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

case "removeearrings": Unequip("Ear"); break;

UO.RemoveHat

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

C# のシグネチャ

void UO.RemoveHat();

Hat レイヤーからの項目の削除を要求します。

引数

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

戻り値

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

動作

  • ExecuteLegacyManualAlias は Unequip(「ハット」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • Hat レイヤーからの項目の削除を要求します。
UO.RemoveHat();

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は Unequip(「ハット」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Hat"));
    UO.RemoveHat();
    return null;
}

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

引数と実行の流れ:

  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveHat();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Hat"));
        return null;
    }
}

コマンドの実装

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

UO.RemoveHat() — UO.RemoveHat()

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

結果: void / Unit.

呼び出し時:

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

case "removehat": Unequip("Hat"); break;

UO.RemoveNeckless

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

C# のシグネチャ

void UO.RemoveNeckless();

ネックレイヤーからアイテムを削除するようリクエストします。

引数

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

戻り値

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

動作

  • ExecuteLegacyManualAlias は Unequip(「ネック」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • ネックレイヤーからアイテムを削除するようリクエストします。
UO.RemoveNeckless();

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は Unequip(「ネック」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Neck"));
    UO.RemoveNeckless();
    return null;
}

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

引数と実行の流れ:

  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveNeckless();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Neck"));
        return null;
    }
}

コマンドの実装

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

UO.RemoveNeckless() — UO.RemoveNeckless()

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

結果: void / Unit.

呼び出し時:

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

case "removeneckless": Unequip("Neck"); break;

UO.RemoveRing

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

C# のシグネチャ

void UO.RemoveRing();

リングレイヤーからの項目の削除を要求します。

引数

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

戻り値

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

動作

  • ExecuteLegacyManualAlias は Unequip(「呼び出し音」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • リングレイヤーからの項目の削除を要求します。
UO.RemoveRing();

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は Unequip(「呼び出し音」) を呼び出します。 ConvertLayer は数値レイヤー、ブリッジを選択します。 Unequip はバックパックへの転送を要求します。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ring"));
    UO.RemoveRing();
    return null;
}

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

引数と実行の流れ:

  • 従来のコマンドの内部 Unequip (1/0) の結果は破棄されます。別の回線で電話してください。アイテム/バックパックがない場合、リクエストは実行されない場合があります。呼び出し後のObjAtLayer チェックでは、ローカル状態のみが読み取られます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveRing();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ring"));
        return null;
    }
}

コマンドの実装

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

UO.RemoveRing() — UO.RemoveRing()

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

結果: void / Unit.

呼び出し時:

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

case "removering": Unequip("Ring"); break;

UO.RequestStats

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

C# のシグネチャ

void UO.RequestStats(object? objID);

serialでキャラクターのステータスをリクエストします。

引数

  • objID — シリアル/ID オブジェクト: int、数値/16 進文字列、または確立されたエイリアス (例: "lasttarget")。これはgraphic/typeではありません。アクションを実行する前に、ロードされたオブジェクトを確認してください。

戻り値

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

動作

  • RequestStats は RequestMobileStatus(_world、serial、true) を呼び出します。この呼び出しは特性の配列を返さず、応答を待ちません。 GetHP/GetStr の後にローカル モデルを読み取ります。
  • Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));

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

引数と実行の流れ:

  • serialでキャラクターのステータスをリクエストします。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestStats(id);
}

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

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

引数と実行の流れ:

  • RequestStats は RequestMobileStatus(_world、serial、true) を呼び出します。この呼び出しは特性の配列を返さず、応答を待ちません。 GetHP/GetStr の後にローカル モデルを読み取ります。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestStats(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;

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

引数と実行の流れ:

  • Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。
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()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestStats(id);
        }
    }

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

引数: objID (Any)

結果: void / Unit.

呼び出し時:

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

case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;

UO.ResistCold

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

C# のシグネチャ

int UO.ResistCold();

現在のキャラクターの抵抗フィールド「冷気」を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.ColdResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • 要素フィールドは拡張 CharacterStatus (0x11)、type >= 4 になります。コマンド自体はサーバー エポックをチェックしません。これらのフィールドのないコンパクト/古いステータスは、以前のキャッシュを残します。新しいプレーヤーは最初は 0 です。毒耐性は Poisoned フラグではありません。また、これは Resisting Spells スキルでもありません。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.ResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistCold();
    await Delay(500);
    var after = UO.ResistCold();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ResistCold();
        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.ResistCold() — UO.ResistCold()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.ColdResistance

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


UO.ResistEnergy

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

C# のシグネチャ

int UO.ResistEnergy();

現在のキャラクターの抵抗フィールド、つまりエネルギーを読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.EnergyResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • 要素フィールドは拡張 CharacterStatus (0x11)、type >= 4 になります。コマンド自体はサーバー エポックをチェックしません。これらのフィールドのないコンパクト/古いステータスは、以前のキャッシュを残します。新しいプレーヤーは最初は 0 です。毒耐性は Poisoned フラグではありません。また、これは Resisting Spells スキルでもありません。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.ResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistEnergy();
    await Delay(500);
    var after = UO.ResistEnergy();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ResistEnergy();
        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.ResistEnergy() — UO.ResistEnergy()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.EnergyResistance

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


UO.ResistFire

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

C# のシグネチャ

int UO.ResistFire();

現在のキャラクターの抵抗フィールド (火) を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.FireResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • 要素フィールドは拡張 CharacterStatus (0x11)、type >= 4 になります。コマンド自体はサーバー エポックをチェックしません。これらのフィールドのないコンパクト/古いステータスは、以前のキャッシュを残します。新しいプレーヤーは最初は 0 です。毒耐性は Poisoned フラグではありません。また、これは Resisting Spells スキルでもありません。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.ResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistFire();
    await Delay(500);
    var after = UO.ResistFire();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ResistFire();
        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.ResistFire() — UO.ResistFire()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.FireResistance

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


UO.ResistPhysical

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

C# のシグネチャ

int UO.ResistPhysical();

現在のキャラクターの抵抗フィールド (物理的な鎧/抵抗) を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.PhysicalResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PhysicalResistance - サーバー アーマー/ステータス フィールド: クラシック サーバーはアーマー レーティングを送信でき、耐性のあるルールは物理耐性を送信できます。 API は一方から他方への変換を行わず、ダメージ軽減のパーセンテージを計算しません。 Armor と物理エイリアスは同じフィールドを読み取ります。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.ResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPhysical();
    await Delay(500);
    var after = UO.ResistPhysical();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ResistPhysical();
        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.ResistPhysical() — UO.ResistPhysical()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Armor

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


UO.ResistPoison

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

C# のシグネチャ

int UO.ResistPoison();

現在のキャラクターの抵抗フィールド「毒」を読み取ります。

引数

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

戻り値

int は、クライアント モデルの署名付きステータス値 -32768..32767 です。負の値は保持されます。 0 は、実際のレジスタンス、データの欠如、プレーヤーの紛失/破壊である可能性があります。 GetResist は、不明なセレクターに対して 0 も与えます。 bool、ID、スキルや耐性の制限ではありません。 1 は成功ではなく、1 ポイントを意味します。

動作

  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.PoisonResistance がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • 要素フィールドは拡張 CharacterStatus (0x11)、type >= 4 になります。コマンド自体はサーバー エポックをチェックしません。これらのフィールドのないコンパクト/古いステータスは、以前のキャッシュを残します。新しいプレーヤーは最初は 0 です。毒耐性は Poisoned フラグではありません。また、これは Resisting Spells スキルでもありません。
  • CharacterStatus は、名前、健康状態、自身の特性を変更する前に必要な本体をチェックし、各抵抗ワードを符号付き Int16 に変換します。トリミングされた必須ボディは以前のデータを変更しません。オプションの末尾 type 6 も同じルールを保持します。抵抗コマンドはそこから最大制限を読み取りません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

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

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

簡単な例

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

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

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

1。保存された値を印刷 - 直接スクリプト

引数と実行の流れ:

  • value には 1 回の呼び出しの結果が格納されます。 Convert.ToString はログの数値をフォーマットします。議論はありません。自分の文字を読み取ることができます。
var value = UO.ResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));

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

引数と実行の流れ:

  • 前後の間には UO.Wait(500) ミリ秒があります。差がマイナスになることもあります。中間更新が失われる可能性があります。一時停止は例を指しており、遅延 API ではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPoison();
    await Delay(500);
    var after = UO.ResistPoison();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

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

3。完全な最小抵抗テスト関数 - スクリプト クラス

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は 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(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ResistPoison();
        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.ResistPoison() — UO.ResistPoison()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.PoisonResistance

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


UO.Self

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

C# のシグネチャ

int UO.Self();

現在の文字のIDを返します。

引数

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

戻り値

int - serial/ID、graphic/type、レイヤー、アイテム数、bool ではありません。 0 - 現在のオブジェクトはありません。すべての 32 ビット serial が保存されます。 == true や > 0 ではなく、!= 0 を確認してください。保存された結果自体は更新されません。 World.Player.Serial を読み取ります。行方不明または破壊されたプレイヤーは0を与えます。死は除去とは異なります。存在するゴーストはキャラクターの ID を保持します。

動作

  • パラメータはありません。ゲーム ストリームの Invoke を介してローカル データを読み取ります。スクリプトをキャンセルすると、そのスレッドの待機が中断されます。パッケージを送信せず、コンテナ/ターゲットを開けず、アイテムを転送しません。
  • 括弧のない組み込みの self/backpack は、スクリプト変数によってオーバーライドされない限り、再度読み取られます。文字列名は受信コマンドによって処理されます。持ち運び先の「self」はバックパックを意味し、UO.Self()はキャラクターのserialを返します。 ID コンテナーの場合は、明示的に UO.Backpack() を使用します。
  • World.Clear はプレーヤーを削除します。その後の読み取り値は 0 となります。ワールドに入るか、装備しているバッグを変更すると、IDが変化します。個々の読み取りはアトミックではありません。ゼロ以外の ID は、接続、サーバーの解像度、コンテンツの読み込みを証明しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • id には 1 回の呼び出しの結果が格納されます。 HEX はログ用に serial をフォーマットします。この例では何も選択または使用していません。
var id = UO.Self();
UO.Print("ID: " + Hex(id));

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

2。変更の検出 ID - スクリプト関数

引数と実行の流れ:

  • before/afterは250ms間隔で読み込まれます。 UO.Wait は例としてのみ追加されました。等しいとは、最終的な ID が同一であることを意味します。中間の変更が見逃される可能性があります。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Self();
    await Delay(250);
    var after = UO.Self();
    if (Truth(before != after))
    {
        UO.Print("ID changed: " + Hex(after));
    }

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

引数と実行の流れ:

  • 候補者 - ID LastTarget が保存されました。 IsOwnSerial(候補)は 1 つの serial を受け取り、bool: true を現在の非ゼロの自身の ID に対して、それ以外の場合は 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()
    {
        var candidate = UO.LastTarget();
        if (Truth(Truth(IsOwnSerial(candidate)) == true))
        {
            UO.Print("Own object selected");
        }
        else
        {
            UO.Print("Different object or no own object");
        }

        return null;
    }

    dynamic IsOwnSerial(dynamic candidate)
    {
        var current = UO.Self();
        return Truth(current != 0) && Truth(current == candidate);
    }

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

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

結果: int / Integer.

呼び出し時:

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

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

UO.SetARExtParams

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

C# のシグネチャ

void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);

シャードのリストからサーバーを指定し、以降のログイン用の文字を指定します。同じアカウントの特定のキャラクターによってスクリプトを再接続する必要がある場合に便利です。

引数

  • shardName — IP やポートではなく、ログイン リストからのサーバーのオプションの表示名。空の値または欠損値は、現在の ShardName によって取得されます。端の周りの空白が削除されます。
  • charName - 既存のアカウントキャラクターのオプションの名前。空の値または欠損値は、既知の場合は self という名前になります。これは名前であり、スロット番号や serial ではありません。空でない名前はプロファイル スロットより優先されます。
  • useAtEveryConnect - オプションのフラグ: デフォルトでは false/0 - 1 回限りの選択。 true/1 またはその他のゼロ以外の整数 - このセッションでの将来のログインのために選択内容を保存します。

戻り値

void - 値がありません。これは次の入力を設定するものであり、キャラクターの接続や存在を確認するものではありません。

動作

  • マネージャーでは、失敗したネットワーク試行全体で nonce が保存され、ワー​​ルドに入った後にのみ消費されます。次回の接続ではプロファイル設定に戻ります。永続的な選択は、新しい設定またはセッション所有者が終了するまで持続します。マネージャープロファイルファイルは上書きされません。ログイン中の新しい設定は次回のログインに適用され、現在の設定が完了しても失われません。
  • 別のグラフィカル クライアントでは、サーバーは LastServerName として保存され、キャラクターは LastCharacterManager として保存されます。ログインに成功すると、そのキャラクターは最後に使用されたキャラクターにもなります。使い捨てとは、自動的に前のキャラクターに戻ることを意味するものではありません。永続的なオーバーライドは現在のプロセス内に存在します。
  • コマンド自体は自動再接続を有効にせず、接続を切断しません。これを行うには、SetARStatus、Connect、Disconnect を個別に使用します。名前はサーバーリストに存在する必要があります。比較では大文字と小文字は区別されません。マネージャーで自動文字入力が無効になっている場合は、手動選択が残ります。 self という名前はオフラインでは認識されない可能性があります。名前を明示的に指定してください。このコマンドは、アカウント、パスワード、IP、ポート、および暗号化を変更しません。現在の名前が使用できない空の値は、以前に設定された選択をクリアしません。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetARExtParams");
UO.SetARExtParams("", "", true);

1。 SetARExtParams - 1 - 直接スクリプト

引数と実行の流れ:

  • 最初の例はオンラインでのみ機能します。 2 つの空の行には現在の名前が入ります。 true は繰り返しログインできるように保存し、SetARStatus(true) は自動再接続ポリシーを有効にします。すぐに再接続されることはありません。
if (!(Truth(UO.Connected())))
{
    return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);

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

2。 SetARExtParams — 2 — スクリプト関数

引数と実行の流れ:

  • 2 番目の例では、この名前が実際の GetCharsListForShard にある場合にのみサンプル文字を選択します。配列には 0 というインデックスが付けられます。 ToLowerInvariant は、大文字と小文字を区別しない方法で名前を比較します。 false は入力が 1 回成功したことを意味し、設定後、自動再接続が有効になり、Disconnect が呼び出されます。名前をあなたの名前に置き換えます。名前がない場合、接続は維持されます。自動一時停止により、接続が復元されるまで復帰が遅れる場合があります。
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        return null;
    }

    var wanted = "Example Character";
    var names = UO.GetCharsListForShard();
    var i = 0;
    while (Truth(i < ArrayLength(names)))
    {
        if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
        {
            UO.SetARExtParams("", names[i], false);
            UO.SetARStatus(true);
            UO.Disconnect();
            return null;
        }

        i += 1;
    }

    return null;
}

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

3。 SetARExtParams - 3 - シナリオクラス

引数と実行の流れ:

  • 3 番目の例は、実行中のオフライン スクリプトから起動されます。サンプル シャードとサンプル キャラクターは明示的に指定されています。それらを実際の名前に置き換えます。 SetARStatus の true は選択を保持し、false は自動再試行を無効にし、Connect は 1 つの入力を要求します。保存されたアカウントの詳細が必要です。 Connect は世界の準備が整うのを待ちません。自動的に一時停止されたスクリプトは、再開しないとこれらの行に到達しません。
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.Connected()))
        {
            return null;
        }

        UO.SetARExtParams("Example Shard", "Example Character", true);
        UO.SetARStatus(false);
        UO.Connect();
        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.SetARExtParams() — UO.SetARExtParams()

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

結果: void / Unit.

呼び出し時:

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

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName) — UO.SetARExtParams(Any)

引数: shardName (Any)

結果: void / Unit.

呼び出し時:

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

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName) — UO.SetARExtParams(Any,Any)

引数: shardName (Any), charName (Any)

結果: void / Unit.

呼び出し時:

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

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName, useAtEveryConnect) — UO.SetARExtParams(Any,Any,Any)

引数: shardName (Any), charName (Any), useAtEveryConnect (Any)

結果: void / Unit.

呼び出し時:

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

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARStatus

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

C# のシグネチャ

void UO.SetARStatus(object? value);

自動再接続を有効または無効にします。

引数

  • value - 0 がオフになります。ゼロ以外の整数にはすべてが含まれます。

戻り値

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

動作

  • Bridge.SetAutoReconnect は自動再接続設定を変更します。値は有効であると解釈されます != 0;サーバーへの即時のログイン/ログアウトはありません。
  • クライアントの設定を変更します。この値は接続テストの結果ではなく、サーバーによる処理を確認するものではありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetARStatus");
UO.SetARStatus(1);

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

引数と実行の流れ:

  • 自動再接続を有効または無効にします。
UO.SetARStatus(1);

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

引数と実行の流れ:

  • Bridge.SetAutoReconnect は自動再接続設定を変更します。値は有効であると解釈されます != 0;サーバーへの即時のログイン/ログアウトはありません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetARStatus(0);
    return null;
}

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

引数と実行の流れ:

  • クライアントの設定を変更します。この値は接続テストの結果ではなく、サーバーによる処理を確認するものではありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(1);
        return null;
    }

    void ApplyMode(dynamic mode)
    {
        UO.SetARStatus(mode);
    }
}

コマンドの実装

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

UO.SetARStatus(value) — UO.SetARStatus(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

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

case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;

UO.SetArm

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

C# のシグネチャ

void UO.SetArm(object? name);

名前付きセット内の現在の武器と盾を記憶します。

引数

  • name — 「travel」や「battle」などのセットの文字列名。名前では大文字と小文字が区別されません。衣服と武器のセットは別々に保存されます。両方に同じ名前を使用できます。これは ID のものやファイル名ではありません。 SetDress のみが名前の不在を許可します。その場合、DressSavedSet/EquipDressSet に対して別のセットが記録されます。

戻り値

void - 値なし。別の回線で電話してください。結果を割り当てたり、true と比較したりしないでください。保存および削除すると、機器ではなくエントリが変更されます。

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetArm");
UO.SetArm("battle");

1。直接使用 - 直接スクリプト

引数と実行の流れ:

  • 写真は必要なものをすでに装着した状態で撮影したものです。このチャレンジではバックパックからアイテムを装備することはできません。
UO.SetArm("battle");

2。名前とクエリモード - スクリプト関数

引数と実行の流れ:

  • 異なるリポジトリで同じ名前が使用されます。 SetDress() は、名前のないセットも個別に保存します。これは、以前に記録された名前を選択したものではありません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    return null;
}

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

引数と実行の流れ:

  • SaveIfReady はコントロール層をチェックします: 3 - 服の場合は靴、1 - 武器の場合は右手。空の場合、スナップショットは上書きされません。返された 1/0 は、SetDress/SetArm ではなく、ヘルパーに属します。
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()
    {
        return SaveIfReady("battle");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetArm(name);
        return 1;
    }

    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.SetArm(name) — UO.SetArm(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void SetArm(string name)

            => SetEquip(name, armSets, weaponLayers, "Arm set.");

UO.SetDress

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

C# のシグネチャ

void UO.SetDress();
void UO.SetDress(object? name);

現在着用している衣服や鎧を後で修復するために記憶します。

引数

  • name — 「travel」や「battle」などのセットの文字列名。名前では大文字と小文字が区別されません。衣服と武器のセットは別々に保存されます。両方に同じ名前を使用できます。これは ID のものやファイル名ではありません。 SetDress のみが名前の不在を許可します。その場合、DressSavedSet/EquipDressSet に対して別のセットが記録されます。

戻り値

void - 値なし。別の回線で電話してください。結果を割り当てたり、true と比較したりしないでください。保存および削除すると、機器ではなくエントリが変更されます。

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

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

1。直接使用 - 直接スクリプト

引数と実行の流れ:

  • 写真は必要なものをすでに装着した状態で撮影したものです。このチャレンジではバックパックからアイテムを装備することはできません。
UO.SetDress("travel");

2。名前とクエリモード - スクリプト関数

引数と実行の流れ:

  • 異なるリポジトリで同じ名前が使用されます。 SetDress() は、名前のないセットも個別に保存します。これは、以前に記録された名前を選択したものではありません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    UO.SetDress();
    return null;
}

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

引数と実行の流れ:

  • SaveIfReady はコントロール層をチェックします: 3 - 服の場合は靴、1 - 武器の場合は右手。空の場合、スナップショットは上書きされません。返された 1/0 は、SetDress/SetArm ではなく、ヘルパーに属します。
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()
    {
        return SaveIfReady("travel");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetDress(name);
        return 1;
    }

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

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

結果: void / Unit.

呼び出し時:

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

case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;

UO.SetDress(name) — UO.SetDress(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void SetDress(string name)

            => SetEquip(name, dressSets, dressLayers, "Clothing set.");

UO.SetDressSpeed

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

C# のシグネチャ

void UO.SetDressSpeed(object? delayms);

着替えのリクエストの間に一時停止を設定します。

引数

  • delayms — int、ミリ秒。値は 10..10000 に制限されます。

戻り値

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

動作

  • SetDressSpeed は状態を保存します。DressSpeed = max(10, min(10000, latems))。保存セットの操作はこれを利用します。サーバーによって許可されるアクションの速度は変わりません。
  • 10 より小さい値は 10 になり、10000 より大きい値は 10000 になります。チームはアイテムの着脱を行いません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetDressSpeed");
UO.SetDressSpeed(250);

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

引数と実行の流れ:

  • 着替えのリクエストの間に一時停止を設定します。
UO.SetDressSpeed(250);

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

引数と実行の流れ:

  • SetDressSpeed は状態を保存します。DressSpeed = max(10, min(10000, latems))。保存セットの操作はこれを利用します。サーバーによって許可されるアクションの速度は変わりません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetDressSpeed(0);
    UO.Print(UO.DressSpeed());
    return null;
}

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

引数と実行の流れ:

  • 10 より小さい値は 10 になり、10000 より大きい値は 10000 になります。チームはアイテムの着脱を行いません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SetDressSpeed(20000);
        UO.Print(UO.DressSpeed());
        return null;
    }
}

コマンドの実装

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

UO.SetDressSpeed(delayms) — UO.SetDressSpeed(Integer)

引数: delayms (Integer)

結果: void / Unit.

呼び出し時:

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

public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));

UO.SetStatLockState

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

C# のシグネチャ

void UO.SetStatLockState(object? statNum, object? statState);

特性モードへの変更を要求します。

引数

  • statNum - 必須の特性番号: 0 - ToString、1 - DEX、2 - INT を変換します。これは現在の値ではなく、文字列の名前でもありません。
  • statState — 必須モード: 0 — 増加、1 — 減少、2 — ブロック。これらは 3 つのコードであり、bool ではありません。 true/false は、すべてのモードの名前を置き換えるわけではありません。

戻り値

void - 戻り値はありません。結果を成功/エラーとして使用したり、true と比較したりすることはできません。その後の読み取りでは、サーバーの確認ではなく、ローカル モデルが表示されます。

動作

  • 有効なリクエストは 1 つのパケットを GameActions 経由で送信し、すぐにローカル モードを変更します。サーバーは独自の制限を適用できます。スキルやステータスの上昇は保証されません。不明なスキル、無効なインデックス/モード、欠落文字はパッケージなしでは無視されます。
  • 必須の特性番号: 0 - ToString、1 - DEX、2 - INT。これは現在の値ではなく、文字列の名前でもありません。
  • ExecuteClientApiCompatibility はコマンドブランチを選択します。 Text はスキル セレクターを読み取り、Arg は数値とモードを読み取ります。変換できない引数は、変換エラーで呼び出しに失敗する可能性があります。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetStatLockState");
UO.SetStatLockState(0, 2);

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

    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  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()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatLockState(selector, mode);
    }

    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.SetStatLockState(statNum, statState) — UO.SetStatLockState(Any,Any)

引数: statNum (Any), statState (Any)

結果: void / Unit.

呼び出し時:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.SetStatState

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

C# のシグネチャ

void UO.SetStatState(object? statNum, object? statState);

特性モードへの変更を要求します。

引数

  • statNum - 必須の特性番号: 0 - ToString、1 - DEX、2 - INT を変換します。これは現在の値ではなく、文字列の名前でもありません。
  • statState — 必須モード: 0 — 増加、1 — 減少、2 — ブロック。これらは 3 つのコードであり、bool ではありません。 true/false は、すべてのモードの名前を置き換えるわけではありません。

戻り値

void - 戻り値はありません。結果を成功/エラーとして使用したり、true と比較したりすることはできません。その後の読み取りでは、サーバーの確認ではなく、ローカル モデルが表示されます。

動作

  • 有効なリクエストは 1 つのパケットを GameActions 経由で送信し、すぐにローカル モードを変更します。サーバーは独自の制限を適用できます。スキルやステータスの上昇は保証されません。不明なスキル、無効なインデックス/モード、欠落文字はパッケージなしでは無視されます。
  • 必須の特性番号: 0 - ToString、1 - DEX、2 - INT。これは現在の値ではなく、文字列の名前でもありません。
  • ExecuteClientApiCompatibility はコマンドブランチを選択します。 Text はスキル セレクターを読み取り、Arg は数値とモードを読み取ります。変換できない引数は、変換エラーで呼び出しに失敗する可能性があります。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetStatState");
UO.SetStatState(0, 2);

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

    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  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()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatState(selector, mode);
    }

    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.SetStatState(statNum, statState) — UO.SetStatState(Any,Any)

引数: statNum (Any), statState (Any)

結果: void / Unit.

呼び出し時:

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

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.Sex

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

C# のシグネチャ

dynamic UO.Sex();

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

引数

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

戻り値

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 に変換されません。配列の場合は要素数を表示します。

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • 値は引数なしで 1 回読み取られます。性別と人種コードは、表示される計算または条件に使用されます。
  • 数値しきい値はスクリプト条件の例であり、新しいクライアントの制限ではありません。このフィールドには、上記のサーバー単位と制限が格納されます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Sex();
    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.Sex();
        await Delay(1000);
        var after = UO.Sex();
        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.Sex() — UO.Sex()

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

結果: dynamic / Any.

呼び出し時:

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

case "sex": return new InjectionValue(bridge.Sex);

UO.Stam

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

C# のシグネチャ

dynamic UO.Stam();

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

引数

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

戻り値

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 に変換されません。配列の場合は要素数を表示します。

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stam();
    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.Stam();
    }

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

コマンドの実装

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

UO.Stam() — UO.Stam()

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

結果: dynamic / Any.

呼び出し時:

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

case "stam": return new InjectionValue(bridge.Stamina);

UO.Stamina

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

C# のシグネチャ

int UO.Stamina();

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

引数

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

戻り値

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.Stamina();
UO.Print("Stamina: " + Convert.ToString(result));

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • このフィールドに適用されたしきい値または計算が表示されます。条件内の数値は設定例であり、サーバーの制限ではありません。最大値で割る前に、その正性がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stamina();
    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.Stamina();
    }

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

コマンドの実装

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

UO.Stamina() — UO.Stamina()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Stamina

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


UO.Str

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

C# のシグネチャ

int UO.Str();

キャラクターの現在の筋力(Strength)を取得します。

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

結果: int / Integer.

呼び出し時:

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

case "str": return new InjectionValue(bridge.Strength);

UO.Strength

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

C# のシグネチャ

int UO.Strength();

キャラクターの現在のパワー(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.Strength();
UO.Print("Strength: " + Convert.ToString(result));

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Strength

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


UO.TicksDead

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

C# のシグネチャ

int UO.TicksDead();

初めて気づいた死亡を読み取るか、マークを付けます。

引数

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

戻り値

int — ランタイムの開始から 10 分の 1 秒単位の UO.Timer、最初は 0。死亡者数や死亡期間ではありません。

動作

  • 各呼び出しで、bridge.Dead()!=0 および ticksDead==0 の場合、Timer() が保存されます。それ以外の場合は、前の ticksDead を返します。復活後、この方法ではフィールドはリセットされません。
  • これは、観察された死亡時の最初の呼び出し TicksDead のマークであり、サーバー イベントの正確な時刻ではありません。最初の 10 分の 1 秒で、0 の値をリセットできます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 初めて気づいた死亡を読み取るか、マークを付けます。
UO.Print(UO.TicksDead());

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

引数と実行の流れ:

  • 各呼び出しで、bridge.Dead()!=0 および ticksDead==0 の場合、Timer() が保存されます。それ以外の場合は、前の ticksDead を返します。復活後、この方法ではフィールドはリセットされません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsDead()))
    {
        var stamp = UO.TicksDead();
        UO.Print(UO.Timer() - stamp);
    }

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

引数と実行の流れ:

  • これは、観察された死亡時の最初の呼び出し TicksDead のマークであり、サーバー イベントの正確な時刻ではありません。最初の 10 分の 1 秒で、0 の値をリセットできます。
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 before = UO.TicksDead();
        UO.Wait(500);
        UO.Print(before = UO.TicksDead());
        return null;
    }
}

コマンドの実装

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

UO.TicksDead() — UO.TicksDead()

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

結果: int / Integer.

呼び出し時:

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

public int TicksDead()

        {

            if (bridge.Dead() != 0 && ticksDead == 0)

                ticksDead = Timer();

            return ticksDead;

        }

UO.ToggleFly

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

C# のシグネチャ

void UO.ToggleFly();

自分のガーゴイルの飛行を地上から飛行、飛行から地上に切り替えるよう要求します。これはアクションであり、UO.Flying() はステータスを確認するだけです。このコマンドは、特定のモードを必要とするルートの前に役立ちます。

引数

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

戻り値

void - 値なし。これはtrue/false やサーバーの確認ではありません。サーバー応答を処理した後、UO.Flying() を通じて実際の結果を確認してください。

動作

  • 唯一の形式は ID、座標およびパラメータ true/false を含まない UO.ToggleFly() です。あなたのキャラクターに関連します。別のmobileのフライトは変更できません。
  • サブコマンド 0x0032 を使用してリクエスト 0xBF を送信します。呼び出し自体は、競合、プロトコル バージョン、サーバーのアクセス許可、または現在のモードをチェックしません。フライト対応サーバー上の独自のガーゴイル用にそれを選択してください。
  • サーバーに障害が発生する可能性があり、ステータスの更新は後で行われます。待機ループ内で ToggleFly を呼び出さないでください。再度呼び出すと、前の切り替えがキャンセルされる可能性があります。リクエストを 1 つ送信し、タイムアウトになるまで Flying を読み取ります。
  • 高度Zと飛行標識は別データです。 UO.Flying() は、int 1/true または 0/false を返します。キャラ無しや旧プロトコルの場合はfalseも可能です。

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

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

簡単な例

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

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

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

1。必要に応じてフライトを有効にし、結果を確認します - 直接スクリプト

引数と実行の流れ:

  • この例は、飛行をサポートするサーバー上の Gargoyle の場合です。 EnsureFlight(timeoutMs) ​​は、飛行が観察された場合は 1/true を返し、そうでない場合は 0/false を返します。 2000 — ミリ秒単位の待機制限。 50 ミリ秒ごとにチェックします。すでに飛行している場合、ToggleFly は呼び出されません。最大 1 つのリクエストが送信され、その後、応答ステータスがチェックされます。スクリプトの一時停止/スケジューラの遅延により、リアルタイム時間が増加する可能性があります。
if (Truth(await EnsureFlight(2000)))
{
    UO.Print("Flight confirmed; ready for the next stage");
}
else
{
    UO.Print("Flight not confirmed; route was not started");
}

async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
    if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
    {
        return false;
    }
    if (Truth(UO.Flying()))
    {
        return true;
    }
    UO.ToggleFly();
    var waited = 0;
    while (Truth(waited < timeoutMs))
    {
        if (!(Truth(UO.Connected())))
        {
            return false;
        }
        if (Truth(UO.Flying()))
        {
            return true;
        }
        await Delay(50);
        waited += 50;
    }
    return UO.Flying();
}

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;

2。飛行中のみ搭乗リクエスト - スクリプト機能

引数と実行の流れ:

  • 40 は 50 ミリ秒間待機しますが、リクエストは 1 つだけです。 Connected チェックにより、切断が正常な着陸として受け入れられなくなります。スクリプトを一時停止すると、実際の時間が長くなる可能性があります。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()) && Truth(UO.Flying()))
    {
        UO.ToggleFly();
        var checks = 0;
        while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
        {
            await Delay(50);
            checks += 1;
        }

        if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
        {
            UO.Print("Landing state observed");
        }
        else
        {
            UO.Print("Landing not confirmed");
        }
    }

    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。ホットキーの手動切り替えコマンド - スクリプト クラス

引数と実行の流れ:

  • 1 つの切り替え要求に対して Main をキーに割り当てます。これは EnsureFlight ではありません: 飛行中にもう一度押すと着陸が要求されます。キーの繰り返しまたは 2 つの並列スクリプトで複数のリクエストを送信できます。ここにはリミッターは設置されていません。
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.Connected()) && !(Truth(UO.Dead())))
        {
            UO.ToggleFly();
        }

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

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

結果: void / Unit.

呼び出し時:

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

case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;

Clone this wiki locally