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

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

キャラクター — 5

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

リファレンスの各部

1 · 2 · 3 · 4 · 5

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


UO.Undress

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

C# のシグネチャ

int UO.Undress();

レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24から衣服と鎧を削除します。手、髪の毛、ひげ、バックパック、マウント、銀行には影響しません。

引数

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

戻り値

数値フラグ int: 1 (条件が満たされた) - ローカル操作が受け入れられ、0 (条件が満たされていない) - 拒否。これはサーバーの確認、ID、数量ではありません。後でサーバーに障害が発生する可能性があります。回答後、実機を確認してください。

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

動作

  • アイテムをロードし、フリーハンドでドラッグする必要があります。取り外す場合は、実際のバックパック self が必要です。スペアの GrabBag は使用されません。不明なもの、壊れたもの、不適切なものは拒否されます。他の人のアイテムは、UnequipItems から削除することはできません。セットはアトミックなトランザクションではありません。
  • EquipItems/UnequipItems は、受け入れられた操作の後、次の要素の前に DressSpeed を適用します。 Disarm/Undress - 各占有レイヤー後。キャリーが受け入れられた場合、引き出しはさらに DropDelay を尊重します。他のランタイムの同じ設定は変更されません。高速化はサーバーの制限をオーバーライドしません。
  • 不正な呼び出し形式、不明なレイヤー名、または数値に変換できない値により、0 ではなくスクリプト エラーが発生する可能性があります。機器のスナップショットには、すでにロードされているデータのみが含まれます。アシスタントでは、ChangeAndConfirm レイヤー=1 が右手です。別のこととして、実際のレイヤーを渡します。
  • 配列の場合、1 は、リストされたすべての操作が受け入れられることを意味します。拒否された場合は、0 が返されます。残りの要素は引き続き処理され、ロールバックは行われません。空の配列では、アクションなしで 1 が生成されます。 Disarm/Undress は、必要なレイヤーがすでに空の場合にも 1 を与えます。部分的な失敗は0を与えます。
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

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

簡単な例

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

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

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

1。 Undress - 選択された 1 つのアイテムまたはレイヤー - 直接スクリプト

引数と実行の流れ:

  • まず、ゲーム内で適切なアイテムを選択します: lasttarget - その ID。 Equip/WearItem の例では、1 レイヤーにはオフハンド武器が必要です。 Unequip(1) は右手を削除します。 Disarm/Undress は独自の固定レイヤーで動作します。拒否後の自動再実行はありません。
return UO.Undress();

2。 Undress - 2 つの項目と保存済み ID - スクリプト関数

引数と実行の流れ:

  • 装備方法は、0x0F5Eは剣の例、0x1B76は盾の例です。 FindType はバックパックに積まれているアイテムの中からそれらを探し、ASC は返されたヘックスをID に変換します。削除の場合、自身の現在のレイヤーが読み取られます。必要な項目が利用できない場合、スクリプトは終了します。アレイには 2 つの ID が格納されます。各項目は完全に転送されます。
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(5, UO.Self());
    var second = UO.ObjAtLayerEx(4, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    return UO.Undress();
    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。 Undress - 待ち時間を制限した全機能 - スクリプト クラス

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 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()
    {
        return ChangeAndConfirm();
        return null;
    }

    dynamic ChangeAndConfirm()
    {
        if (!(Truth(UO.Undress())))
        {
            return 0;
        }

        dynamic[] layers = new dynamic[checked((int)(16) + 1)];
        layers[0] = 3;
        layers[1] = 4;
        layers[2] = 5;
        layers[3] = 6;
        layers[4] = 7;
        layers[5] = 8;
        layers[6] = 10;
        layers[7] = 12;
        layers[8] = 13;
        layers[9] = 14;
        layers[10] = 17;
        layers[11] = 18;
        layers[12] = 19;
        layers[13] = 20;
        layers[14] = 22;
        layers[15] = 23;
        layers[16] = 24;
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            dynamic empty = true;
            for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
            {
                if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
                {
                    empty = false;
                }
            }

            if (Truth(empty))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

コマンドの実装

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

UO.Undress() — UO.Undress()

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

結果: int / Integer.

呼び出し時:

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

public int Undress()

            => Unequip(dressLayers, "Clothing removed.");

UO.Unequip

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

C# のシグネチャ

int UO.Unequip(object? layer);

指定されたレイヤーから自分のアイテムを自分のバックパックに削除します。

引数

  • layer - レイヤー番号。たとえば、1 - 右手、2 - 左手。 Equip と Unequip は、「Rhand」などのレイヤー名も受け入れます。 WearItem はナンバーレイヤーを使用します。レイヤーはアイテムのウェアラブルレイヤーと一致する必要があります。 graphic でも ID でもありません。

戻り値

数値フラグ int: 1 (条件が満たされた) - ローカル操作が受け入れられ、0 (条件が満たされていない) - 拒否。これはサーバーの確認、ID、数量ではありません。後でサーバーに障害が発生する可能性があります。回答後、実機を確認してください。

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

動作

  • アイテムをロードし、フリーハンドでドラッグする必要があります。取り外す場合は、実際のバックパック self が必要です。スペアの GrabBag は使用されません。不明なもの、壊れたもの、不適切なものは拒否されます。他の人のアイテムは、UnequipItems から削除することはできません。セットはアトミックなトランザクションではありません。
  • EquipItems/UnequipItems は、受け入れられた操作の後、次の要素の前に DressSpeed を適用します。 Disarm/Undress - 各占有レイヤー後。キャリーが受け入れられた場合、引き出しはさらに DropDelay を尊重します。他のランタイムの同じ設定は変更されません。高速化はサーバーの制限をオーバーライドしません。
  • 不正な呼び出し形式、不明なレイヤー名、または数値に変換できない値により、0 ではなくスクリプト エラーが発生する可能性があります。機器のスナップショットには、すでにロードされているデータのみが含まれます。アシスタントでは、ChangeAndConfirm レイヤー=1 が右手です。別のこととして、実際のレイヤーを渡します。
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

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

簡単な例

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

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

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

1。 Unequip - 選択された 1 つのアイテムまたはレイヤー - 直接スクリプト

引数と実行の流れ:

  • まず、ゲーム内で適切なアイテムを選択します: lasttarget - その ID。 Equip/WearItem の例では、1 レイヤーにはオフハンド武器が必要です。 Unequip(1) は右手を削除します。 Disarm/Undress は独自の固定レイヤーで動作します。拒否後の自動再実行はありません。
return UO.Unequip(1);

2。 Unequip - 2 つの項目と保存済み ID - スクリプト関数

引数と実行の流れ:

  • 装備方法は、0x0F5Eは剣の例、0x1B76は盾の例です。 FindType はバックパックに積まれているアイテムの中からそれらを探し、ASC は返されたヘックスをID に変換します。削除の場合、自身の現在のレイヤーが読み取られます。必要な項目が利用できない場合、スクリプトは終了します。アレイには 2 つの ID が格納されます。各項目は完全に転送されます。
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(1, UO.Self());
    var second = UO.ObjAtLayerEx(2, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    var firstOk = UO.Unequip(1);
    var secondOk = UO.Unequip(2);
    return firstOk != 0 && secondOk != 0;
    return null;
}

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

3。 Unequip - 待ち時間を制限した全機能 - スクリプト クラス

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 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 item = UO.ObjAtLayerEx(1, UO.Self());
        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
        {
            return 0;
        }

        if (!(Truth(UO.Unequip(layer))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 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.Unequip(layer) — UO.Unequip(Any)

引数: layer (Any/String)

結果: int / Any.

呼び出し時:

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

case "unequip":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String ? Unequip(Text(0)) : bridge.Unequip(Arg(0)));

UO.Unequip(layer) — UO.Unequip(String)

引数: layer (Any/String)

結果: int / Integer.

呼び出し時:

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

public int Unequip(string layer) => bridge.Unequip(ConvertLayer(layer));

UO.UnequipItems

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

C# のシグネチャ

dynamic UO.UnequipItems(object? items);

リストされた私物をバックパックに入れます。他の人のアイテムの ID は、同じレイヤーからあなたのアイテムを削除しません。

引数

  • items - 必須の ID または項目の配列 ID。配列要素は数値または 16 進数値文字列です。単一の引数には、「lasttarget」/name AddObject も受け入れられます。配列の場合、インデックス 0 と 1 の 2 つの要素に対して変数宣言 items[1] を使用します。レイヤー番号やtypeではなく、物事が送信されます。

戻り値

数値フラグ int: 1 (条件が満たされた) - ローカル操作が受け入れられ、0 (条件が満たされていない) - 拒否。これはサーバーの確認、ID、数量ではありません。後でサーバーに障害が発生する可能性があります。回答後、実機を確認してください。

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

動作

  • アイテムをロードし、フリーハンドでドラッグする必要があります。取り外す場合は、実際のバックパック self が必要です。スペアの GrabBag は使用されません。不明なもの、壊れたもの、不適切なものは拒否されます。他の人のアイテムは、UnequipItems から削除することはできません。セットはアトミックなトランザクションではありません。
  • EquipItems/UnequipItems は、受け入れられた操作の後、次の要素の前に DressSpeed を適用します。 Disarm/Undress - 各占有レイヤー後。キャリーが受け入れられた場合、引き出しはさらに DropDelay を尊重します。他のランタイムの同じ設定は変更されません。高速化はサーバーの制限をオーバーライドしません。
  • 不正な呼び出し形式、不明なレイヤー名、または数値に変換できない値により、0 ではなくスクリプト エラーが発生する可能性があります。機器のスナップショットには、すでにロードされているデータのみが含まれます。アシスタントでは、ChangeAndConfirm レイヤー=1 が右手です。別のこととして、実際のレイヤーを渡します。
  • 配列の場合、1 は、リストされたすべての操作が受け入れられることを意味します。拒否された場合は、0 が返されます。残りの要素は引き続き処理され、ロールバックは行われません。空の配列では、アクションなしで 1 が生成されます。 Disarm/Undress は、必要なレイヤーがすでに空の場合にも 1 を与えます。部分的な失敗は0を与えます。
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

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

簡単な例

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

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

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

1。 UnequipItems - 選択された 1 つのアイテムまたはレイヤー - 直接スクリプト

引数と実行の流れ:

  • まず、ゲーム内で適切なアイテムを選択します: lasttarget - その ID。 Equip/WearItem の例では、1 レイヤーにはオフハンド武器が必要です。 Unequip(1) は右手を削除します。 Disarm/Undress は独自の固定レイヤーで動作します。拒否後の自動再実行はありません。
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.UnequipItems(item);

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

2。 UnequipItems - 2 つの項目と保存済み ID - スクリプト関数

引数と実行の流れ:

  • 装備方法は、0x0F5Eは剣の例、0x1B76は盾の例です。 FindType はバックパックに積まれているアイテムの中からそれらを探し、ASC は返されたヘックスをID に変換します。削除の場合、自身の現在のレイヤーが読み取られます。必要な項目が利用できない場合、スクリプトは終了します。アレイには 2 つの ID が格納されます。各項目は完全に転送されます。
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(1, UO.Self());
    var second = UO.ObjAtLayerEx(2, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    dynamic[] items = new dynamic[checked((int)(1) + 1)];
    items[0] = first;
    items[1] = second;
    return UO.UnequipItems(items);
    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。 UnequipItems - 待ち時間を制限した全機能 - スクリプト クラス

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 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 item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) != item))
        {
            return 0;
        }

        if (!(Truth(UO.UnequipItems(item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == 0))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.UnequipItems(items) — UO.UnequipItems(Any)

引数: items (Any)

結果: dynamic / Any.

呼び出し時:

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

case "unequipitems":

                    return new InjectionValue(ChangeEquipmentItems(ArrayArg(0), false));

UO.UnsetArm

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

C# のシグネチャ

void UO.UnsetArm(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 は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 削除は、選択した名前の入力にのみ影響します。アイテムはキャラクター上に残り、他の名前や他のタイプのセットには影響しません。欠落しているエントリを再削除することは許容されます。 UnsetDress と UnsetArm には名前が必要です。
  • 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.UnsetArm");
UO.UnsetArm("battle");

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

引数と実行の流れ:

  • 指定したエントリのみが削除されます。衣服や武器は取り外しできません。
UO.UnsetArm("battle");

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

引数と実行の流れ:

  • 旅行と戦闘の名前は別々に削除されます。異なるタイプのセットの同じ名前は保持されます。
return  RunScenario();
 object? RunScenario()
{
    UO.UnsetArm("travel");
    UO.UnsetArm("battle");
    return null;
}

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

引数と実行の流れ:

  • CleanupSets は、2 つの固有名をクリーンアップするための完全に宣言されたプロシージャです。 prefix はファイル パスではなくエントリ名を生成します。
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()
    {
        CleanupSets("mine_");
        return null;
    }

    void CleanupSets(dynamic prefix)
    {
        UO.UnsetArm(prefix + "travel");
        UO.UnsetArm(prefix + "battle");
    }
}

コマンドの実装

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

UO.UnsetArm(name) — UO.UnsetArm(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void UnsetArm(string name)

        {

            armSets.Remove(name);

            SystemMessage("Arm set removed.");

        }

UO.UnsetDress

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

C# のシグネチャ

void UO.UnsetDress(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 は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 削除は、選択した名前の入力にのみ影響します。アイテムはキャラクター上に残り、他の名前や他のタイプのセットには影響しません。欠落しているエントリを再削除することは許容されます。 UnsetDress と UnsetArm には名前が必要です。
  • 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.UnsetDress");
UO.UnsetDress("travel");

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

引数と実行の流れ:

  • 指定したエントリのみが削除されます。衣服や武器は取り外しできません。
UO.UnsetDress("travel");

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

引数と実行の流れ:

  • 旅行と戦闘の名前は別々に削除されます。異なるタイプのセットの同じ名前は保持されます。
return  RunScenario();
 object? RunScenario()
{
    UO.UnsetDress("travel");
    UO.UnsetDress("battle");
    return null;
}

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

引数と実行の流れ:

  • CleanupSets は、2 つの固有名をクリーンアップするための完全に宣言されたプロシージャです。 prefix はファイル パスではなくエントリ名を生成します。
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()
    {
        CleanupSets("mine_");
        return null;
    }

    void CleanupSets(dynamic prefix)
    {
        UO.UnsetDress(prefix + "travel");
        UO.UnsetDress(prefix + "battle");
    }
}

コマンドの実装

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

UO.UnsetDress(name) — UO.UnsetDress(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void UnsetDress(string name)

        {

            dressSets.Remove(name);

            SystemMessage("Dress set removed.");

        }

UO.UseOtherPaperdollScroll

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

C# のシグネチャ

void UO.UseOtherPaperdollScroll(object? objID);

ブリッジUseObject を介して指定された serial を使用し、通常はキャラクターのペーパードールを開きます。

引数

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

戻り値

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

動作

  • ObjID は、ID スクロール ボタンではなく、キャラクターを指します。この呼び出しはペーパードール構造を読み取らず、それが開くのを待ちません。
  • Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • ブリッジUseObject を介して指定された serial を使用し、通常はキャラクターのペーパードールを開きます。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.UseOtherPaperdollScroll(id);
}

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

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

引数と実行の流れ:

  • ObjID は、ID スクロール ボタンではなく、キャラクターを指します。この呼び出しはペーパードール構造を読み取らず、それが開くのを待ちません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.UseOtherPaperdollScroll(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.UseOtherPaperdollScroll(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.UseOtherPaperdollScroll(objID) — UO.UseOtherPaperdollScroll(Any)

引数: objID (Any)

結果: void / Unit.

呼び出し時:

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

case "useotherpaperdollscroll": bridge.UseObject(Arg(0)); return InjectionValue.Unit;

UO.UseSelfPaperdollScroll

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

C# のシグネチャ

void UO.UseSelfPaperdollScroll();

現在のキャラクターを使用し、通常はペーパードールを開きます。

引数

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

戻り値

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

動作

  • ExecuteClientApiCompatibility は、bridge.UseObject(bridge.Self) を呼び出します。 Paperdoll 要素を個別に読み取ったりクリックしたりする必要はありません。これは、self に対する通常のリクエスト UseObject です。
  • 例では、UO.Wait はスクリプトの一時停止のみを指定します。一時停止が終了しても、サーバーがリクエストを完了したことは証明されません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 現在のキャラクターを使用し、通常はペーパードールを開きます。
UO.UseSelfPaperdollScroll();

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

引数と実行の流れ:

  • ExecuteClientApiCompatibility は、bridge.UseObject(bridge.Self) を呼び出します。 Paperdoll 要素を個別に読み取ったりクリックしたりする必要はありません。これは、self に対する通常のリクエスト UseObject です。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Self() != 0))
    {
        UO.UseSelfPaperdollScroll();
    }

    return null;
}

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

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

引数と実行の流れ:

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

     public object? RunScenario()
    {
        UO.UseSelfPaperdollScroll();
        UO.Wait(500);
        UO.Print(UO.Name());
        return null;
    }
}

コマンドの実装

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

UO.UseSelfPaperdollScroll() — UO.UseSelfPaperdollScroll()

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

結果: void / Unit.

呼び出し時:

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

case "useselfpaperdollscroll": bridge.UseObject(bridge.Self); return InjectionValue.Unit;

UO.WearItem

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

C# のシグネチャ

dynamic UO.WearItem(object? layer, object? objID);

選択したアイテムをキャラクターのナンバーレイヤーに装備します。

引数

  • layer - レイヤー番号。たとえば、1 - 右手、2 - 左手。 Equip と Unequip は、「Rhand」などのレイヤー名も受け入れます。 WearItem はナンバーレイヤーを使用します。レイヤーはアイテムのウェアラブルレイヤーと一致する必要があります。 graphic でも ID でもありません。
  • ロードされた特定のものの id - ID: 整数、16 進文字列、「lasttarget」または名前 AddObject。これはtypeではありません。 0x0F5Eが最初にgraphicの剣を探し、IDがそれを入手する例。
  • ロードされた特定のものの ObjID - ID: 整数、16 進文字列、「lasttarget」または名前 AddObject。これはtypeではありません。 0x0F5Eが最初にgraphicの剣を探し、IDがそれを入手する例。

戻り値

数値フラグ int: 1 (条件が満たされた) - ローカル操作が受け入れられ、0 (条件が満たされていない) - 拒否。これはサーバーの確認、ID、数量ではありません。後でサーバーに障害が発生する可能性があります。回答後、実機を確認してください。

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

動作

  • アイテムをロードし、フリーハンドでドラッグする必要があります。取り外す場合は、実際のバックパック self が必要です。スペアの GrabBag は使用されません。不明なもの、壊れたもの、不適切なものは拒否されます。他の人のアイテムは、UnequipItems から削除することはできません。セットはアトミックなトランザクションではありません。
  • EquipItems/UnequipItems は、受け入れられた操作の後、次の要素の前に DressSpeed を適用します。 Disarm/Undress - 各占有レイヤー後。キャリーが受け入れられた場合、引き出しはさらに DropDelay を尊重します。他のランタイムの同じ設定は変更されません。高速化はサーバーの制限をオーバーライドしません。
  • 不正な呼び出し形式、不明なレイヤー名、または数値に変換できない値により、0 ではなくスクリプト エラーが発生する可能性があります。機器のスナップショットには、すでにロードされているデータのみが含まれます。アシスタントでは、ChangeAndConfirm レイヤー=1 が右手です。別のこととして、実際のレイヤーを渡します。
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

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

簡単な例

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

int item = UO.LastTarget();
if (item != 0)
    UO.Print("Accepted flag: " + Convert.ToString(UO.WearItem(1, item)));

1。 WearItem - 選択された 1 つのアイテムまたはレイヤー - 直接スクリプト

引数と実行の流れ:

  • まず、ゲーム内で適切なアイテムを選択します: lasttarget - その ID。 Equip/WearItem の例では、1 レイヤーにはオフハンド武器が必要です。 Unequip(1) は右手を削除します。 Disarm/Undress は独自の固定レイヤーで動作します。拒否後の自動再実行はありません。
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.WearItem(1, item);

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

2。 WearItem - 2 つの項目と保存済み ID - スクリプト関数

引数と実行の流れ:

  • 装備方法は、0x0F5Eは剣の例、0x1B76は盾の例です。 FindType はバックパックに積まれているアイテムの中からそれらを探し、ASC は返されたヘックスをID に変換します。削除の場合、自身の現在のレイヤーが読み取られます。必要な項目が利用できない場合、スクリプトは終了します。アレイには 2 つの ID が格納されます。各項目は完全に転送されます。
return  RunScenario();
 object? RunScenario()
{
    var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
    var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    var firstOk = UO.WearItem(1, first);
    var secondOk = UO.WearItem(2, second);
    return firstOk != 0 && secondOk != 0;
    return null;
}

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

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

3。 WearItem - 待ち時間を制限した全機能 - スクリプト クラス

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 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 item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (!(Truth(UO.WearItem(layer, item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.WearItem(layer, objID) — UO.WearItem(Any,Any)

引数: layer (Any), objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "wearitem": return new InjectionValue(bridge.Equip(Arg(0), Arg(1)));

UO.Weight

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

C# のシグネチャ

int UO.Weight();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

1。 Display saved counter - direct script

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

結果: int / Integer.

呼び出し時:

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

case "weight": return new InjectionValue(bridge.Weight);
⚠️ **GitHub.com Fallback** ⚠️