Skip to content

JA UO Topic items

Codex edited this page Oct 12, 2026 · 4 revisions

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

アイテム

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

オブジェクトのプロパティ、使用、譲渡。シリアルは特定のアイテムを選択します。 type/graphic はビューを選択します。スタックユニットの転送と転送されるアイテムの数には異なるパラメータがあります。

セクション

トピック コマンドと説明
Item Properties UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.GetName · UO.GetTooltip · UO.ContainerOf · UO.GetParent · UO.GetLayer · UO.IsMovable · UO.GetX · UO.GetY · UO.GetZ
アイテムを探す UO.FindType · UO.FindTypeEx · UO.FindTypesArrayEx · UO.FindItem · UO.FindAnyType · UO.FindAtCoord · UO.FindList · UO.FindDistance · UO.FindVertical
アイテムの使用 UO.UseObject · UO.UseType ​​· UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile
Moving アイテム UO.Grab · UO.Drag · UO.Drop · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer
Ground アイテム UO.GetWorldItems · UO.FindType ​​· UO.CountGround · UO.MoveItem
コンテナアイテム UO.GetContent · UO.FindTypeEx ​​· UO.OpenContainer
偽/クライアントアイテム UO.MakeFakeItem · UO.DeleteObject ​​
Dye UO.Dye

すべてのテーマコマンド

アイテムのプロパティ

UO.Exists · UO.IsObjectExists · UO.GetSerial · UO.GetType · UO.GetGraphic · UO.GetColor · UO.GetQuantity · UO.Name · UO.GetName · UO.GetAltName · UO.GetTooltip · UO.GetTooltipRec · UO.GetLayer · UO.GetLocked · UO.IsMovable · UO.GetFlags · UO.ReceiveObjectName · UO.UpdateObject

アイテムの使用

UO.UseObject · UO.UseType · UO.UseFromGround · UO.UseWorldObject · UO.UseItemOnMobile · UO.ClickOnObject · UO.TicksUse

Moving アイテム

UO.Grab · UO.Drag · UO.DragItem · UO.Drop · UO.DropHere · UO.DropItem · UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer · UO.DropDelay · UO.DropCheckCoord · UO.Picking

偽/クライアントアイテム

UO.MakeFakeItem · UO.DeleteObject

Dye

UO.Dye

保存されたオブジェクト

UO.AddObject · UO.AddType · UO.EasyObject · UO.UserObject · UO.LastObject · UO.Forget

このトピックに関する例

各コマンド カードには、直接コード、関数、クラスなどのいくつかの独立したシナリオがあります。以下は厳選された短いシナリオです。制限と完全な分析がカードに含まれています。

UO.MoveItem

パラメータ、結果、およびすべてのシナリオ

var ok = UO.MoveItem("loot");
UO.Print("Move request: " + Convert.ToString(ok));

UO.MassMove

パラメータ、結果、およびすべてのシナリオ

UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");

リファレンスの各部

1 · 2

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


UO.AddObject

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

C# のシグネチャ

void UO.AddObject(object? name);
void UO.AddObject(object? name, object? objectRawId);

後でスクリプトで使用できるように、名前付きの serial オブジェクトを保存します。 2 つの引数の形式では、オブジェクトがすぐに指定されます。 1 つの引数は、カーソルによるオブジェクトの選択をトリガーします。

引数

  • name は、実行時にオブジェクトを使用できる空ではない名前です。
  • objectRawId - serial またはすでに保存されているオブジェクト名。 1 引数のオーバーロードはこのパラメーターを受け入れませんが、代わりにオブジェクトの選択を要求します。

戻り値

void。オブジェクトを名前で読み取ることにより、保存されたバインディングを確認します。呼び出しは serial に戻りません。

動作

  • 2 つの引数を指定すると、ランタイムは objectRawId を解決し、serial を name に保存します。 1 つの引数を使用して、クライアントはオブジェクトの選択を要求します。項目または mobile は選択されますが、カード セルは選択されません。選択する前に、同じ名前を持つ以前のバインディングが削除されます。カーソルをキャンセルまたは削除しても、カーソルは復元されません。

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

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

簡単な例

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

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

UO.Print("Calling UO.AddObject");
UO.AddObject("target");

1。既知の項目の serial をわかりやすい名前で保存します。 - 直接スクリプト

引数と実行の流れ:

  • 既知の項目の serial をわかりやすい名前で保存します。
UO.AddObject("supplyBox", "0x40012345");

2。カーソルを使用して項目または mobile の選択を要求し、それに target という名前を付けます。 - スクリプト機能

引数と実行の流れ:

  • カーソルを使用して項目または mobile の選択を要求し、それに target という名前を付けます。
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("target");
    return null;
}

3。名前を再度保存すると、バインディングが新しい serial に置き換えられます。 - スクリプトクラス

引数と実行の流れ:

  • 名前を再度保存すると、バインディングが新しい 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 selectedSerial = "0x40012345";
        UO.AddObject("supplyBox", selectedSerial);
        return null;
    }
}

コマンドの実装

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

UO.AddObject(name) — UO.AddObject(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void AddObject(string name)

        {

            SystemMessage($"What is {name}");

            bridge.AddObject(name);

        }

UO.AddObject(name, objectRawId) — UO.AddObject(Any,Any)

引数: name (Any), objectRawId (Any)

結果: void / Unit.

呼び出し時:

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

public void AddObject(InjectionValue name, InjectionValue objectRawId) 

            => ObjectChecked(objectRawId, id => AddObject((string)name, id));

UO.AddType

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

C# のシグネチャ

void UO.AddType(object? name);
void UO.AddType(object? name, object? @type);

アイテムまたは本体グラフィック タイプ mobile のフレンドリ名を保存します。たとえば、UO.AddType("bandage", 0x0E21) の後には、各行で数値 type を繰り返さなくても、「bandage」という名前で包帯を検索または使用できます。これは、名前 → グラフィック マッピングを設定することであり、項目を作成したり、特定の ID を記憶したりするものではありません。

引数

  • name - 引用符で囲まれた必須の文字列 - タイプ名。エッジ スペースは削除されます。大文字と小文字は重要ではありません。「包帯」と「包帯」は 1 つのエントリです。空の文字列、数値名、任意の単語、文字 |および制御文字は禁止されています。これはパラメータ値であり、新しい変数や UO コマンドではありません。後続の呼び出しにも引用符が必要です。
  • type - オプションの int 0..65535: 0x0E21 や 3617 などのグラフィック/type。 10 進数/16 進数の文字列、またはすでに保存されている型の名前を使用できます。後者は現在の番号をコピーしますが、名前間の接続は作成されません。 0x40001001 形式の ID、負の数、分数、不明な名前は受け入れられません。引数がない場合は、選択カーソルが表示されます。コンテナ内を含むロードされた項目をクリックするか、mobile をクリックします。選択したオブジェクトのグラフィックが保存されます。地面や静止タイルには適しません。

戻り値

void - 戻り値はありません。 var result = を指定せず、true/1 との比較もせずに、別の行に記述します。このコマンドは、選択された type、serial、または成功フラグを返しません。マウスでキャンセルすると、古いエントリが保持されます。以前に名前がなかった場合は、未定義のままになります。スクリプトの次の行は通常のキャンセルの後に実行されるため、ユーザーが確実に新しい項目を選択したと仮定してアクションを自動的にトリガーしないでください。

動作

  • AddType(name, type) の形式は、カーソルやネットワーク アクションを使用せずに、番号を即座に保存します。同じ名前の繰り返しにより、そのタイプが置き換えられます。値が間違っていても、前のエントリは破壊されません。フォーム AddType(名前) は選択を待っています。 Esc キー、カーソルを別のアクションに置き換えるキー、または不適切なターゲットを使用すると、エントリは変更されないままになります。スクリプトを強制的に停止すると、待機が中断され、それに属するカーソルのみが解放されます。
  • 型名は AddObject とは別に保持されます。同じ単語が FindType では type を、UseObject では serial を表す可能性があります。 AddType("供給", 0x0E21) は、それ自体では UseObject("供給") を有効にしません。特定の項目については、AddObject/GetSerial を使用します。アイテムファミリー - AddType とパラメータ type の場合。
  • 名前はパラメータ type FindType (すべての形式)、FindTypeEx、FindTypesArrayEx、FindList、FindNotoriety、GetWorldItems、UseType、UseFromGround、Count、 CountGround、CountEx、EquipT、WaitTargetType、WaitTargetGround、WaitTargetObjectType。 GetMobiles/FindAnyType/WaitTarget タイプのマスクでは、 | を使用して名前を組み合わせることができます。または配列。悪名に関するルールは別のままです。 human/near という単語とその他の FindMobile フィルターは上書きされません。
  • グラフィックのみが保存され、色、数量、コンテナ、アイテム名、レイヤー、プロパティは保存されません。同じ種類の異なる色の 2 つのアイテムを検索するには、別の色が必要です。このエントリは、アイテムが現在存在すること、利用可能であること、またはサーバーがアクションを許可することを確認するものではありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.AddType");
UO.AddType("my_tool");

1。見つかった金の山を 1 つ増やす - 直接スクリプト

引数と実行の流れ:

  • gold_stack - 名前; 0x0EED – Graphic gold. FindType: -1 - 任意の色、ground - 地球、2 - 検索範囲。文字列 serial または空の文字列が返されます。
  • MoveItem は、見つかった serial、スタック全体の 0、および宛先として backpack を受け取ります。これは 1 つのスタックであり、半径内のすべてのスタックではありません。転送の可用性と実際の結果はサーバーによって異なります。型定義自体は何も持ちません。
UO.AddType("gold_stack", 0x0EED);
var item = UO.FindType("gold_stack", -1, "ground", 2);
if (Truth(item == ""))
{
    UO.Print("No loaded gold stack within 2 tiles");
    return null;
}
var moved = UO.MoveItem(item, 0, "backpack");
if (Truth(moved == 0))
{
    UO.Print("Move request failed");
}

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

2。健康状態が低い場合にのみ包帯を使用する - スクリプト機能

引数と実行の流れ:

  • 文字列番号 0x0E21 は int グラフィックとして保存されます。 Life/MaxHP HP 文字を比較します。 FindType はナップザック内の任意の色を再帰的に検索します。距離の -1 は標準の検索動作を使用します。
  • selfは適用目的、FindTypeの後の包帯はserialの変数です。ターゲットのキューはアイテムを使用する前に準備されます。スクリプトは使用状況を送信しますが、処理がすでに完了していることを表明しません。処理タイマー/ルールはサーバーによって異なります。
return  RunScenario();
 object? RunScenario()
{
    UO.AddType("bandage", "0x0E21");
    if (Truth(UO.Life() >= UO.MaxHP()))
    {
        return null;
    }

    var bandage = UO.FindType("bandage", -1, "backpack", -1, true);
    if (Truth(bandage == ""))
    {
        UO.Print("No loaded bandages in backpack");
        return null;
    }

    UO.WaitTargetObject("self");
    UO.UseObject(bandage);
    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 には名前のみが含まれるため、カーソルが開きます。 ID や色ではなく、ツールのタイプが保存されます。 UseSavedTool は通常のスタンドアロン プロシージャ C# であり、組み込みコマンドではありません。
  • UseType はバックパック内の任意の色の保存済みタイプのインスタンスを検索し、それを使用します。欠落している場合は、int serial または 0 を返します。名前が定義されていない場合、それは 0 の結果ではなく、引数エラーです。割り当て解除後、Main は UseSavedTool を呼び出しません。
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.AddType("my_tool");
        return null;
    }

    void UseSavedTool()
    {
        var used = UO.UseType("my_tool", -1, "backpack");
        if (Truth(used == 0))
        {
            UO.Print("No matching loaded tool in backpack");
        }
    }

    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.AddType(name) — UO.AddType(Any)

引数: name (Any)

結果: void / Unit.

呼び出し時:

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

case "addtype":

                    AddType(arguments);

                    break;

UO.AddType(name, type) — UO.AddType(Any,Any)

引数: name (Any), type (Any)

結果: void / Unit.

呼び出し時:

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

case "addtype":

                    AddType(arguments);

                    break;

UO.ClickOnObject

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

C# のシグネチャ

void UO.ClickOnObject(object? objID);

GameActions.SingleClick 経由でオブジェクトのシングルクリックを送信します。

引数

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

戻り値

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

動作

  • Click は、ObjectChecked を介してリンクを解決します。 ClickOnObject はまず serial に Arg を使用し、Click(int) を呼び出します。これはアイテムの署名/情報のリクエストであり、DoubleClick またはアイテムの使用ではありません。サーバーの応答は非同期で届きます。

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

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

簡単な例

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

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

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

1。キャラクターをクリック - 直接スクリプト

引数と実行の流れ:

  • シングルクリックがselfに送信されます。
UO.ClickOnObject("self");

2。最後のターゲットをクリック - スクリプト関数

引数と実行の流れ:

  • 送信する前に、ターゲットがローカルに存在するかどうかがチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.LastTarget();
    if (Truth(UO.Exists(target)))
    {
        UO.ClickOnObject(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。バックパック - スクリプト クラスをクリックします。

引数と実行の流れ:

  • バックパックをシングルクリックしても、ダブルクリックのように開きません。
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.Backpack();
        if (Truth(bag != 0))
        {
            UO.ClickOnObject(bag);
        }

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

引数: objID (Any)

結果: void / Unit.

呼び出し時:

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

case "clickonobject": Click(Arg(0)); return InjectionValue.Unit;

UO.DeleteObject

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

C# のシグネチャ

void UO.DeleteObject(object? name);

保存されているオブジェクト名をランタイム テーブルから削除します。

引数

  • name - string オブジェクトテーブル内の名前。このエントリのみが削除されます。

戻り値

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

動作

  • 名前が見つかった場合は、エントリを削除し、確認を出力します。名前がない場合は、「見つからない」というメッセージが表示されます。サーバー オブジェクトとそのコンテンツは削除されません。

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

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

簡単な例

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

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

UO.Print("Calling UO.DeleteObject");
UO.DeleteObject("temporary");

1。作成した名前の削除 - 直接スクリプト

引数と実行の流れ:

  • キャラクターのserialとの一時的な接続のみが削除されます。
UO.AddObject("temporary",UO.Self());
UO.DeleteObject("temporary");

2。名前がありません - スクリプト関数

引数と実行の流れ:

  • 名前が欠落していると診断メッセージが表示されます。
return  RunScenario();
 object? RunScenario()
{
    UO.DeleteObject("missing-example-name");
    return null;
}

3。変数に名前を保存 - スクリプトクラス

引数と実行の流れ:

  • string 変数は、削除する正確なエントリを指定します。
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 name = "temporary";
        UO.AddObject(name, UO.Self());
        UO.DeleteObject(name);
        return null;
    }
}

コマンドの実装

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

UO.DeleteObject(name) — UO.DeleteObject(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void DeleteObject(string name)

        {

            if (objects.TryGet(name, out int value))

            {

                objects.Remove(name);

                SystemMessage($"Object {name} has been deleted");

            }

            else

                SystemMessage($"Object {name} not found");

        }

UO.Drag

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

C# のシグネチャ

int UO.Drag(object? id);
int UO.Drag(object? id, object? amount);
int UO.Drag(object? id, object? amount, object? timeout);
void UO.Drag(object? fromX, object? fromY, object? toX, object? toY);

特定の項目をカーソルに移動します。別の 4 つの引数フォームを使用して、Windows ウィンドウ内でマウスをドラッグします。

引数

  • id — 特定のアイテム/文字のシリアル: 数値、16 進数/10 進数の文字列、self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus または保存された名前 AddObject。これはtypeではありません。オブジェクトはロードされている必要があります。行動の前にExistsを確認してください。
  • amount — 1 つのスタック内のユニットの数。 0 または負の値はスタック全体を意味します。ポジティブは利用可能な数量によって制限されます。 MassMove を制限するのはスタックの数ではありません。存在しない場合は、0 に相当します。
  • timeout - オプションの 3 番目の引数: 指定されたミリ秒数まで監視可能な Picking を待ちます。デフォルトは 0 です。負の値は 0 に相当します。
  • fromX — 4 つの int 形式のみ: クライアント ウィンドウのピクセル単位のマウスの最初の X。
  • fromY — クライアント ウィンドウ ピクセルの初期マウス Y。
  • toX — マウスの末尾の X をピクセル単位で表します。
  • toY — マウスの末尾の Y をピクセル単位で表します。

戻り値

1..3 int 引数の場合: 1 — リフト要求はクライアントによって受け入れられました (タイムアウト > 0 では、ビジー カーソルも観察されました)。 0 — リフトが拒否されたか、タイムアウトが経過しました。 4 つの引数が null の場合、戻り値はありません。これはID のアイテムではありません。

動作

  • ゲーム転送の場合、推奨される形式は id[,amount[,timeout]] の後に DropItem または 1 つの MoveItem が続く形式です。
  • fromX/fromY/toX/toY フォームは、Windows のマウス イベント (移動、押し、移動、解放) を使用します。サーバーの確認はなく、ウィンドウの実際のコンテンツ/フォーカスに依存します。
  • カーソルがビジー状態であっても、宛先への転送が成功したことにはなりません。キャプチャとリリースは別のアクションです。

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

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

簡単な例

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

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

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

1。スタック全体を取り出してバックパックに入れます - 直接スクリプト

引数と実行の流れ:

  • 戦利品 - serial から AddObject。 amount=0 はスタック全体を意味します。 -1/-1 はガンプ内の自動配置を設定します。
  • DropItem は同じランタイムのキャプチャを終了します。 1 つは、サーバーの確認ではなく、リクエストが送信されたことを意味します。
if (Truth(UO.Drag("loot", 0)))
{
    var dropped = UO.DropItem("backpack", -1, -1, 0);
    UO.Print("Drop request: " + Convert.ToString(dropped));
}

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

2。待機を制限してスタックの一部を取得 - スクリプト関数

引数と実行の流れ:

  • amount=10 — 1 つのスタックで最大 10 ユニットまで。タイムアウト=500ミリ秒。
  • 44/55 - 地図ではなく、バックパック内の座標。アイテムを取得できない場合、DropItem は呼び出されません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Drag("loot", 10, 500)))
    {
        var dropped = UO.DropItem("backpack", 44, 55, 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。握る前に忙しい手をチェックする - スクリプトクラス

引数と実行の流れ:

  • 1 つの引数 Drag はスタック全体とタイムアウト = 0 を意味します。
  • Picking はクライアントの共有カーソルをチェックします。 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.Picking() == 0))
        {
            if (Truth(UO.Drag("loot")))
            {
                var dropped = UO.DropItem("backpack", -1, -1, 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;
}

4。 4 つのマウス座標 - 直接スクリプト

引数と実行の流れ:

  • これらはウィンドウ ピクセルです: 開始 (100,120)、終了 (260,180)。 serial、量、タイムアウトはありません。
  • 必要な要素がこれらの場所にある場合にのみ使用してください。オブジェクトの場合は、serial によるアドレス指定の方が信頼性が高くなります。
UO.Drag(100, 120, 260, 180);

コマンドの実装

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

UO.Drag(id) — UO.Drag(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

public int Drag(InjectionValue id) => Drag(id, InjectionValue.Zero, InjectionValue.Zero);

UO.Drag(id, amount) — UO.Drag(Any,Any)

引数: id (Any), amount (Any)

結果: int / Integer.

呼び出し時:

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

public int Drag(InjectionValue id, InjectionValue amount) => Drag(id, amount, InjectionValue.Zero);

UO.Drag(id, amount, timeout) — UO.Drag(Any,Any,Any)

引数: id (Any), amount (Any), timeout (Any)

結果: int / Integer.

呼び出し時:

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

public int Drag(InjectionValue id, InjectionValue amount, InjectionValue timeout)

        {

            int serial = GetObject(id);

            if (serial == 0)

                return 0;

            int requestedAmount = NumberConversions.ToInt(amount);

            int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));

            int result = bridge.DragItem(serial, requestedAmount);

            if (result == 0 || timeoutMs <= 0)

                return result;



            DateTime deadline = DateTime.UtcNow.AddMilliseconds(timeoutMs);

            do

            {

                if (bridge.Picking() != 0)

                    return 1;

                if (DateTime.UtcNow >= deadline)

                    break;

                bridge.Wait(10);

            }

            while (true);



            SystemMessage($"UO.Drag: item pickup was not observable within {timeoutMs} ms.");

            return 0;

        }

UO.Drag(fromX, fromY, toX, toY) — UO.Drag(Integer,Integer,Integer,Integer)

引数: fromX (Integer), fromY (Integer), toX (Integer), toY (Integer)

結果: void / Unit.

呼び出し時:

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

public void Drag(int fromX, int fromY, int toX, int toY) => bridge.Drag(fromX, fromY, toX, toY);

UO.DragItem

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

C# のシグネチャ

dynamic UO.DragItem(object? objID, object? count);

特定のアイテムを選択し、それをこのランタイム DropItem のために記憶します。

引数

  • objID — 特定のアイテム/文字のシリアル: 数値、16 進数/10 進数の文字列、self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus または保存された名前 AddObject。これはtypeではありません。オブジェクトはロードされている必要があります。行動の前にExistsを確認してください。
  • count — 1 つのスタック内のユニットの数。 0 または負の値はスタック全体を意味します。ポジティブは利用可能な数量によって制限されます。 MassMove を制限するのはスタックの数ではありません。

戻り値

int 1 — クライアントは上昇を受け入れました。 0 - アイテムが見つからないか、PickUp が拒否されました。互換性メタデータ object?任意の結果タイプを意味するものではありません。ここはserialではありません。

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

動作

  • 両方の引数が必要です。確認を待つ組み込み機能はありません。形式 Drag(id,amount,timeout) は、ローカル Picking の待機を追加します。
  • キャプチャが成功したら、アクション DropItem を完了します。マウスで手動で選択した項目は、このランタイムの DragItem メモリを設定しません。

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

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

簡単な例

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

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

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

1。スタック全体を引き上げる - 直接スクリプト

引数と実行の流れ:

  • ObjID=loot via AddObject、Count=0 はスタック全体です。
  • 2番目のチームは同じ拾ったアイテムをドロップします。
if (Truth(UO.DragItem("loot", 0)))
{
    var ok = UO.DropItem("backpack", -1, -1, 0);
}

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

2。 5つのユニットを上げる - スクリプト機能

引数と実行の流れ:

  • ObjID を serial に置き換えます。 Count=5 は、同じスタックのユニットを指します。
  • 場所44/55はバックパックガンプ内にあります。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.DragItem(0x40001234, 5)))
    {
        var ok = UO.DropItem("backpack", 44, 55, 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。失敗したキャプチャを表示 - スクリプト クラス

引数と実行の流れ:

  • picked — int 1/0.
  • キャプチャが失敗した後は DropItem を呼び出さないでください。カーソルは別のアクティビティに属している可能性があります。
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 picked = UO.DragItem("loot", 0);
        if (Truth(picked == 0))
        {
            UO.Print("Item was not picked up");
        }
        else
        {
            var ok = UO.DropItem("backpack", -1, -1, 0);
        }

        return null;
    }

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

コマンドの実装

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

UO.DragItem(objID, count) — UO.DragItem(Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

case "dragitem": return new InjectionValue(bridge.DragItem(Arg(0), Arg(1)));

UO.Drop

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

C# のシグネチャ

int UO.Drop(object? @object);
int UO.Drop(object? @object, object? count);
int UO.Drop(object? @object, object? count, object? destination);
dynamic UO.Drop(object? objID, object? count, object? x, object? y, object? z);

指定されたアイテムの完全な転送を実行します。デフォルトでは、キャラクターの下の地面に転送されます。

引数

  • object — 特定のアイテム/文字のシリアル: 数値、16 進数/10 進数の文字列、self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus または保存された名前 AddObject。これはtypeではありません。オブジェクトはロードされている必要があります。行動の前にExistsを確認してください。
  • objID — 特定のアイテム/文字のシリアル: 数値、16 進数/10 進数の文字列、self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus または保存された名前 AddObject。これはtypeではありません。オブジェクトはロードされている必要があります。行動の前にExistsを確認してください。
  • count — 1 つのスタック内のユニットの数。 0 または負の値はスタック全体を意味します。ポジティブは利用可能な数量によって制限されます。 MassMove を制限するのはスタックの数ではありません。カウントのない短い形式では、0 となります。
  • destination - 3 つの引数を持つ形式のみ: コンテナのシリアル番号またはセット名 AddObject; backpack/self/myはバックパック、receiving/catchbag - SetCatchBag、それなしの場合はバックパックを選択します。 lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus は、正しいコンテナーに解決された場合に有効です。 ground または 0 は土地を明示的に選択します。 -1—同じバックパックセレクター。不明な名前または指定されていない名前を指定すると、アイテムがキャプチャされる前にエラーが発生します。宛先引数を指定しないと、バックパックが使用されます。
  • x - 5 引数形式のみ: 地球上の世界 X の目的地。
  • y — 5 引数形式のワールド Y。
  • z — 5 引数形式のワールド高さ。

戻り値

int 1 — クライアントによって受け入れられた完全な転送リクエスト。 0 - 失敗しました。 5 引数の互換形式には object? というメタデータがありますが、実際には int 1/0 も返します。これは以前に取得した DragItem のリセットではありません。それには DropItem を使用します。

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

動作

  • 1、2、3、5 引数を持つフォームが登録されます。引数が 4 つある形式はありません。
  • Drop(item) はスタック全体をその下の地面に転送します。 Drop(item,count) は単位を指定します。 Drop(item,count,destination) はコンテナを許可します。
  • Drop(item,count,X,Y,Z) は常に土地を意味します。ガンプ座標を含むコンテナの場合は、MoveItem を使用します。
  • リフティング、DropCheckCoord、サーバーチェック制限が適用されます。チームは納品の個別の確認を待ちません。

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

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

簡単な例

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

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

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

1。スタック全体が足元にあります - 直接スクリプト

引数と実行の流れ:

  • デフォルトでは、object=loot via AddObject、count=0。
  • 目的地 - 地面上のキャラクターの現在のポイント。
var ok = UO.Drop("loot");

2。バックパックに 5 つのユニット - スクリプト機能

引数と実行の流れ:

  • count=5 1 つのスタックの単位。目的地=backpack。
  • ここの 3 番目の引数は X ではなくコンテナです。
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.Drop("loot", 5, "backpack");
    return null;
}

3。地上の明示的なポイント - シナリオ クラス

引数と実行の流れ:

  • ObjID を serial に置き換えます。 Count=0 スタック全体。 X/Y/Z=1445/1690/0。
  • このフォームの場合、3 番目の値は X です。予備のDragは必要ありません。
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 ok = UO.Drop(0x40001234, 0, 1445, 1690, 0);
        return null;
    }
}

コマンドの実装

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

UO.Drop(object) — UO.Drop(Any)

引数: object (Any)

結果: int / Integer.

呼び出し時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(object, count) — UO.Drop(Any,Any)

引数: object (Any), count (Any)

結果: int / Integer.

呼び出し時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(object, count, destination) — UO.Drop(Any,Any,Any)

引数: object (Any), count (Any), destination (Any)

結果: int / Integer.

呼び出し時:

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

case "drop":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, arguments.Length > 2 ? arguments[2] : new InjectionValue("ground")));

                    return InjectionValue.False;

UO.Drop(objID, count, x, y, z) — UO.Drop(Any,Any,Any,Any,Any)

引数: objID (Any), count (Any), x (Any), y (Any), z (Any)

結果: dynamic / Any.

呼び出し時:

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

case "drop": return new InjectionValue(MoveItemChecked(Arg(0), Arg(1), 0, Arg(2), Arg(3), Arg(4)) ? 1 : 0);

UO.DropCheckCoord

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

C# のシグネチャ

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

地面にアイテムをドロップするときの座標範囲チェックを読み取りまたは変更します。

引数

  • value — オプションの値: 0 は無効になり、ゼロ以外の int は有効になります。引数がない場合、状態は読み取られるだけです。

戻り値

int 0/1 — 可能な記録後の現在の状態。どちらの形式も数値を返します。

動作

  • MoveItemChecked が地面に割り当てられ、フラグがオンになると、キャラクターから2 セルを超えるチェビシェフ X/Y 距離が拒否されます。このチェックでは座標は変更されず、サーバーの転送許可もチェックされません。コンテナの割り当てはこのフラグに限定されません。

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

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

簡単な例

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

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

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

1。フラグの読み取り - 直接スクリプト

引数と実行の流れ:

  • 読み取りは、現在の正規化された設定を返します。
var enabled = UO.DropCheckCoord();
UO.Print(Convert.ToString(enabled));

2。範囲保護を有効にする - スクリプト機能

引数と実行の流れ:

  • MoveItemChecked を介した地上移動は 2 マスに制限されます。
return  RunScenario();
 object? RunScenario()
{
    var enabled = UO.DropCheckCoord(1);
    UO.Print(Convert.ToString(enabled));
    return null;
}

3。設定の復元 - スクリプトクラス

引数と実行の流れ:

  • 元の値が保存され、明示的に復元されます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var old = UO.DropCheckCoord();
        var temporary = UO.DropCheckCoord(0);
        var restored = UO.DropCheckCoord(old);
        return null;
    }
}

コマンドの実装

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

UO.DropCheckCoord() — UO.DropCheckCoord()

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

結果: dynamic / Any.

呼び出し時:

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

case "dropcheckcoord":

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

                    return new InjectionValue(state.DropCheckCoord);

UO.DropCheckCoord(value) — UO.DropCheckCoord(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

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

case "dropcheckcoord":

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

                    return new InjectionValue(state.DropCheckCoord);

UO.DropDelay

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

C# のシグネチャ

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

アイテム転送で使用されるGrabDelay 実行時遅延を読み取りまたは変更します。

引数

  • value — ミリ秒単位のオプションの遅延。ブリッジ制限は 50..10000 です。

戻り値

現在の GrabDelay で int 引数なし。両方のフォームのメタデータに object? が含まれている場合でも、入力フォームは null を返します。

動作

  • SetDropDelay と GetDropDelay は状態を使用します。 GrabDelay。この設定では、サーバーによる転送の完了の確認ではなく、クライアントによる転送の遅延を指定します。

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

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

簡単な例

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

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

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

1。読み取り遅延 - 直接スクリプト

引数と実行の流れ:

  • 読み取りはミリ秒を返します。
var ms = UO.DropDelay();
UO.Print(Convert.ToString(ms));

2。遅延の設定 - スクリプト関数

引数と実行の流れ:

  • このエントリは 250 ミリ秒を設定します。
return  RunScenario();
 object? RunScenario()
{
    UO.DropDelay(250);
    return null;
}

3。ボーダーボトム - スクリプトクラス

引数と実行の流れ:

  • ゼロは 50 ミリ秒に制限され、その後は前の値に戻ります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.DropDelay();
        UO.DropDelay(0);
        UO.Print(Convert.ToString(UO.DropDelay()));
        UO.DropDelay(previous);
        return null;
    }
}

コマンドの実装

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

UO.DropDelay() — UO.DropDelay()

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

結果: dynamic / Any.

呼び出し時:

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

case "dropdelay":

                    if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetDropDelay());

UO.DropDelay(value) — UO.DropDelay(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

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

case "dropdelay":

                    if (arguments.Length > 0) { bridge.SetDropDelay(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetDropDelay());

UO.DropHere

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

C# のシグネチャ

int UO.DropHere(object? @object);

指定されたアイテム/スタック全体をキャラクターの現在のポイントの地面に転送します。

引数

  • object — 特定のアイテム/文字のシリアル: 数値、16 進数/10 進数の文字列、self/backpack/lasttarget/lastobject/lastcontainer/lastcorpse/finditem/laststatus または保存された名前 AddObject。これはtypeではありません。オブジェクトはロードされている必要があります。行動の前にExistsを確認してください。

戻り値

int 1 — 転送リクエストはクライアントによって受け入れられました。 0 - 未完了です。これはserial やサーバーの確認ではありません。

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

動作

  • フォームは 1 つの引数だけで登録されています。スタックの一部には、Drop(item,count) または MoveItem を使用します。
  • X/Y/Z は通話中にキャラクターから取得されます。事前の DragItem は必要ありません。

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

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

簡単な例

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

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

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

1。既知のアイテムを投げる - 直接スクリプト

引数と実行の流れ:

  • object - serial、実際のものに置き換えます。
  • スタック全体がキャラクターに転送されます。
var ok = UO.DropHere(0x40001234);

2。保存した名前を使用 - スクリプト機能

引数と実行の流れ:

  • 戦利品はAddObject経由で指定されます。
  • Exists は、サーバーの移行許可ではなく、可用性をチェックします。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("loot")))
    {
        var ok = UO.DropHere("loot");
    }

    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。クライアント障害の処理 - スクリプト クラス

引数と実行の流れ:

  • ok — int 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 ok = UO.DropHere("loot");
        if (Truth(ok == 0))
        {
            UO.Print("Drop request was not accepted");
        }

        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.DropHere(object) — UO.DropHere(Any)

引数: object (Any)

結果: int / Integer.

呼び出し時:

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

case "drophere":

                    if (arguments.Length > 0)

                        return new InjectionValue(MoveItem(arguments[0], arguments.Length > 1 ? arguments[1] : InjectionValue.Zero, new InjectionValue("ground"), new InjectionValue(GetX()), new InjectionValue(GetY()), new InjectionValue(GetZ())));

                    return InjectionValue.False;

UO.DropItem

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

C# のシグネチャ

dynamic UO.DropItem(object? moveIntoID, object? x, object? y, object? z);

同じランタイムで Drag/DragItem によって以前に正常に選択されたアイテムをリセットします。

引数

  • moveIntoID — シリアル宛先、backpack またはセット名 AddObject。 0 という数字は地球を意味します。 self ではなく backpack を使用します: この低レベルの引数は、self をキャラクターの serial に解決します。
  • x — コンテナの場合 — ガンプ内に置きます (-1/65535 自動的に)。地球のために - 世界X。
  • y — コンテナの場合 — ガンプ内に置きます (-1/65535 自動的に)。地球のために - 世界Y。
  • z — 高さをリセットします。コンテナ内では通常 0、地上では実際の Z 点です。

戻り値

int 1 - リセットが送信され、カーソルはドロップ済みとマークされます。 0 - 成功した DragItem がありません。カーソルが変更されているかアクセスできないか、割り当てが無効です。メタデータ object?互換性によってこの結果は変わりません。量やserialではありません。

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

動作

  • 4 つの引数はすべて必須です。このオプションはアイテムを再取得しません。 Drop と MoveItem は完全なキャリーオーバー serial を実行します。
  • 保持しているのがこのランタイムに記憶されている項目であることが確認されます。他人が持って行った物や手で持った物は、誤って落としてはいけません。
  • 送信後、キャプチャメモリはクリアされます。 GrabDelay を設定すると、スクリプト フローに一時停止が追加されます。復帰後にサーバー障害が発生する可能性があります。

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

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

簡単な例

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

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

object? result = UO.DropItem("backpack", -1, -1, 0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。自動バックパックスペース - 直接スクリプト

引数と実行の流れ:

  • MoveIntoID=backpack, X/Y=-1, Z=0.
  • キャプチャが成功したことはリリース前に検証されます。
if (Truth(UO.DragItem("loot", 0)))
{
    var ok = UO.DropItem("backpack", -1, -1, 0);
}

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

2。胸部内部の空間 - スクリプト機能

引数と実行の流れ:

  • チェストは AddObject 経由で指定されます。 X=60/Y=70 — ガンプの座標。
  • amount=10 は Drag を参照し、DropItem には独自の数量がありません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Drag("loot", 10)))
    {
        var ok = UO.DropItem("chest", 60, 70, 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。キャラクターの下の地面に配置 - シナリオクラス

引数と実行の流れ:

  • MoveIntoID=0 は明らかに土地を選択します。
  • X/Y/Z はワールド ポイントであり、コンテナの座標ではありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var x = UO.GetX();
        var y = UO.GetY();
        var z = UO.GetZ();
        if (Truth(UO.DragItem("loot", 0)))
        {
            var ok = UO.DropItem(0, x, y, z);
        }

        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.DropItem(moveIntoID, x, y, z) — UO.DropItem(Any,Any,Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

case "dropitem": return new InjectionValue(bridge.DropDraggedItem(Arg(0), Arg(1), Arg(2), Arg(3)));

UO.Dye

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

C# のシグネチャ

void UO.Dye(object? dyeObject);
void UO.Dye(object? dyeObject, object? target);

転写されたカラーリングアイテムを使用します。 2 番目の引数は、オブジェクト UO.Wait-target を事前に設定します。

引数

  • dyeObject — オブジェクトのシリアル番号、または self/backpack/lasttarget/saved オブジェクトのサポートされている名前。数値文字列と 0x 文字列は実行時に解決されます。
  • target - オプションのオブジェクト/serial 次のターゲット。 2 番目の引数がないと、新しい目標は設定されません。

戻り値

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

動作

  • 2 つの引数の形式は、最初に WaitTargetObject(ターゲット) を呼び出し、次に UseObject(dyeObject) を呼び出します。引数が 1 つの形式では、主語のみが使用されます。これはアクションを送信しています。色、着色権、合計はサーバーによって決定されます。

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

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

簡単な例

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

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

UO.Print("Calling UO.Dye");
UO.Dye(UO.LastObject());

1。染料アイテムの使用 - ダイレクトスクリプト

引数と実行の流れ:

  • 引数が 1 つの呼び出しでは、ターゲットは指定されません。
var dye = UO.LastObject();
if (Truth(UO.Exists(dye)))
{
    UO.Dye(dye);
}

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

2。カラー選択ターゲット - スクリプト関数

引数と実行の流れ:

  • Target は染料をダブルクリックする前に配置されます。
return  RunScenario();
 object? RunScenario()
{
    var dye = UO.LastObject();
    var target = UO.LastTarget();
    if (Truth(UO.Exists(dye)) && Truth(UO.Exists(target)))
    {
        UO.Dye(dye, 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。保存された名前 - スクリプト クラス

引数と実行の流れ:

  • この例では、以前に保存した名前「dye」と「cloth」を使用します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("dye")) && Truth(UO.Exists("cloth")))
        {
            UO.Dye("dye", "cloth");
        }

        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.Dye(dyeObject) — UO.Dye(Any)

引数: dyeObject (Any)

結果: void / Unit.

呼び出し時:

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

case "dye":

                    if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));

                    bridge.UseObject(Arg(0, bridge.GetLastObject()));

                    break;

UO.Dye(dyeObject, target) — UO.Dye(Any,Any)

引数: dyeObject (Any), target (Any)

結果: void / Unit.

呼び出し時:

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

case "dye":

                    if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));

                    bridge.UseObject(Arg(0, bridge.GetLastObject()));

                    break;

UO.EasyObject

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

C# のシグネチャ

void UO.EasyObject(object? name);
void UO.EasyObject(object? name, object? @object);

インタラクティブなターゲット クエリを使用せずにオブジェクト名を保存します。

引数

  • name — ランタイム オブジェクト エントリの名前。string に解決されます。
  • object - オプションのserial/リンク。それがなければ、GetLastObject は保存されます。

戻り値

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

動作

  • State.Objects.Set は名前エントリを置き換えます。引数が 1 つの形式では、LastTarget ではなく、最後に使用されたオブジェクトが使用されます。ワールド内のオブジェクトの存在は、このブランチによって個別にチェックされません。

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

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

簡単な例

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

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

UO.Print("Calling UO.EasyObject");
UO.EasyObject("last-used");

1。最後のオブジェクトを保存 - 直接スクリプト

引数と実行の流れ:

  • 現在のLastObjectには名前が付けられています。
UO.EasyObject("last-used");

2。自分自身を保存 - スクリプト機能

引数と実行の流れ:

  • 2 引数形式では、渡された serial が保持されます。
return  RunScenario();
 object? RunScenario()
{
    UO.EasyObject("me", UO.Self());
    return null;
}

3。一時エントリの削除 - スクリプト クラス

引数と実行の流れ:

  • Forget は、保存された名前の関連付けのみを削除します。
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.EasyObject("temporary", UO.Self());
        UO.Forget("temporary");
        return null;
    }
}

コマンドの実装

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

UO.EasyObject(name) — UO.EasyObject(Any)

引数: name (Any)

結果: void / Unit.

呼び出し時:

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

case "easyobject":

                    if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));

                    else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());

                    break;

UO.EasyObject(name, object) — UO.EasyObject(Any,Any)

引数: name (Any), object (Any)

結果: void / Unit.

呼び出し時:

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

case "easyobject":

                    if (arguments.Length > 1) state.Objects.Set(Text(0), Arg(1));

                    else if (arguments.Length > 0) state.Objects.Set(Text(0), bridge.GetLastObject());

                    break;

UO.EmptyContainer

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

C# のシグネチャ

int UO.EmptyContainer(object? delay);
int UO.EmptyContainer(object? delay, object? source);
int UO.EmptyContainer(object? delay, object? source, object? destination);

チェスト、バッグ、死体の直接の中身をすべて指定されたコンテナに移します。最初のパラメータは常にミリ秒単位の遅延です。ソースが指定されていない場合は、ローカル スコープが表示されます。ソース コンテナを選択します。デフォルトの宛先は現在のキャラクターのバックパックです。

引数

  • delay — 最初に必要なパラメータ: 転送間の遅延 (ミリ秒単位)。たとえば、350 - 0,35 秒です。整数値が使用されます。マイナスのものは 0 に減ります。 GrabDelay はこの遅延に個別に追加されません。最後の一時停止は、次の行が最後のリクエストを追い越さないように保存されます。
  • source — 2 番目のオプションのパラメータ: ソースコンテナの serial、数値/16 進文字列、または保存されたオブジェクト名。 lastobject、lastcontainer、lasttarget、lastcorpse、backpack/myがサポートされています。パラメータが欠落しているか、0 に等しい場合は、十字線が表示されます。コンテナアイテムまたは死体を選択します。 Esc はアクションをキャンセルします。
  • destination - 3 番目のオプションのパラメーターは、serial、または宛先コンテナーの保存された名前です。 backpack/self/my キャラクターのバックパックを選択します。 receiving/catchbag インストールされている SetCatchBag コンテナ (インストールされていない場合はバックパック) を選択します。 lastcontainer/lastobject/lasttarget/lastcorpse/finditem/laststatus は、アクセス可能なコンテナーに解決される場合に有効です。不明なエイリアスまたは未設定のエイリアスではエラーが発生します。パラメータが指定されていない場合は、バックパックが使用されます。 receiving コンテナ設定によってこの選択は変更されません。宛先は存在し、送信元とは異なる必要があります。 Ground/0 は、ここでは有効な宛先コンテナではありません。

戻り値

int: ソースが空ではなく、選択された各直接アイテムに対して転送リクエストを送信できる場合は、1。 0 ソースが空、スコープがキャンセルされた、宛先が正しくない、ダウンロード タイムアウト、または部分的/完全な送信失敗の場合。これはクライアントのリクエストの結果であり、サーバーによって空になることが確認されたことを保証するものではありません。

動作

  • 正確な形式: EmptyContainer(遅延)、EmptyContainer(遅延、ソース)、EmptyContainer(遅延、ソース、宛先)。ゲームチャットでは、標準の接頭辞: ,emptycontainer 350; を使用してチャットします。スクリプトより: UO.EmptyContainer(350)。
  • 照準を合わせる場合、コマンドは選択、キャンセル、または緊急停止を待ちます。クライアントはイメージとネットワークを更新し続けます。 Esc はキャリーを送信せず、古いオブジェクトを使用せず、0 を返します。この選択を別のサイトに置き換えた場合も、アクションはキャンセルされます。
  • コンテンツがまだダウンロードされていない場合、クライアントはソースを開き、サーバーが応答するまで 3000 ミリ秒まで待機します。クライアントから隠蔽されたコンテンツは、サーバー データを取得しない限り転送できません。チェストにアクセスできない/遠すぎる場合、またはサーバーが禁止されている場合は、別のコンテナを選択するのではなく失敗します。
  • データを受信後、直接項目のリストが作成されます。各スタックは、一度に 1 つのキャプチャとリセットのリクエストで全体が移行されます。密閉されたバッグを丸ごと持ち運べます。その内容は個別に検索されません。後で追加された新しい項目は現在のリストには含まれていません。
  • 各リクエストの前に、アイテムが元のコンテナ内にまだあるかどうかが再チェックされます。コンテナをそれ自体またはその子の中にネストすることはできません。カーソルが別の項目で占有されている場合、コマンドはユーザーに代わってカーソルをリセットしません。
  • 宛先コンテナがなくなってもバックパックでは置き換えられません。 1 という結果は、サーバーがすべてのアクションを受け入れたことを意味するものではありません。必要に応じて、サーバーを更新した後に内容を確認してください。緊急停止により待機が中断されます。すでに送信されたアクションはロールバックされません。
  • 不明な保存名または無効な引数形式により、0 が返されるのではなく、API エラーが発生します。これを有効な serial 欠落オブジェクトと区別してください。この場合、操作は 0 を返します。

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

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

簡単な例

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

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

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

1。照準器付きのチェストまたは死体を選択してバックパックに転送 - 直接スクリプト

引数と実行の流れ:

  • 唯一のパラメータ late=350 は、間隔 350 ミリ秒を指定します。ソースが欠落しているため、十字線が表示されます。
  • 宛先も欠落しています。中身はキャラクターのバックパックに移動します。その中にある 1 つのアイテムだけでなく、コンテナ/死体自体を選択してください。
  • 送信すると、1 または 0 が受信されます。 0 の意味は、キャンセル、空虚、失敗を組み合わせたものです。詳細は誌面もご覧ください。
UO.Print("Select a chest or corpse");
var sent = UO.EmptyContainer(350);
if (Truth(sent == 0))
{
    UO.Print("Cancelled, empty, unavailable, or a transfer failed");
}

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

2。有名なチェストからスコープなしのバックパックまで - スクリプト機能

引数と実行の流れ:

  • 遅延=350;ソースはチェストの実際の serial です。おおよその ID をあなたのものに置き換えてください。光景は現れない。
  • 3 番目のパラメータは指定されていないため、destination=backpack になります。すべてのタイプの直接アイテムとフルスタックがキャリーオーバーに含まれます。
  • Print は、項目数やサーバーの確認ではなく、クライアントの送信結果を印刷します。
return  RunScenario();
 object? RunScenario()
{
    var source = "0x40001234";
    var sent = UO.EmptyContainer(350, source);
    UO.Print("Client request result: " + Convert.ToString(sent));
    return null;
}

3。選択した 2 つのコンテナ間 - スクリプト クラス

引数と実行の流れ:

  • AddObject にパラメータを 1 つ指定すると、オブジェクトを選択するよう求められ、その名前が保存されます。 2 つの選択は順番に行われます。
  • U EmptyContainer delay=350;ソース=ソース_バッグ;目的地=目的地_バッグ。 3 番目のパラメーターは、バックパックではなく特定のバッグを指定します。
  • 名前は異なるコンテナーを参照する必要があります。キャンセルされた AddObject は、その名前の以前の意味を削除するため、古いバッグが誤って使用されることはありません。
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.Print("Select source");
        UO.AddObject("source_bag");
        UO.Print("Select destination");
        UO.AddObject("destination_bag");
        var sent = UO.EmptyContainer(350, "source_bag", "destination_bag");
        UO.Print("Client request result: " + Convert.ToString(sent));
        return null;
    }
}

4。最後に開いたコンテナから特定のチェストまで - 直接スクリプト

引数と実行の流れ:

  • 遅延=500 — 0.5 秒間隔。 source=lastcontainer - このクライアントのサーバーによって開かれた最後のコンテナ。
  • 目的地 - 胸の明示的な ID;例を置き換えます。 lastcontainer と lastobject は異なる意味を持ち、最後に開かれたコンテナと最後に使用されたオブジェクトです。
  • 開始する前に、最後に開いたソースが必要なものであることを確認してください。キャリーは、ネストされたバッグを再帰的に開きません。
var destination = "0x40005678";
UO.EmptyContainer(500, "lastcontainer", destination);

5。ソースを視覚的に選択し、宛先を事前に指定 - スクリプト機能

引数と実行の流れ:

  • 遅延=350; source=0 は、3 番目のパラメーターを渡す機能を保持しながら、スコープを具体的に呼び出します。
  • destination=storage は、以前に保存されたチェストを指します。ソースを選択すると、コンテンツがそこに転送されます。
  • Esc は、ラップせずに send=0 を返します。ストレージが不明であるか、存在しない場合、別のコンテナは自動的に選択されません。
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("storage", "0x40005678");
    var sent = UO.EmptyContainer(350, 0, "storage");
    return null;
}

コマンドの実装

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

UO.EmptyContainer(delay) — UO.EmptyContainer(Any)

引数: delay (Any)

結果: int / Integer.

呼び出し時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.EmptyContainer(delay, source) — UO.EmptyContainer(Any,Any)

引数: delay (Any), source (Any)

結果: int / Integer.

呼び出し時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.EmptyContainer(delay, source, destination) — UO.EmptyContainer(Any,Any,Any)

引数: delay (Any), source (Any), destination (Any)

結果: int / Integer.

呼び出し時:

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

case "emptycontainer": return ExecuteEmptyContainer(arguments);

UO.Exists

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

C# のシグネチャ

int UO.Exists(object? id);

クライアントのローカル環境に削除されていないオブジェクトが存在するかどうかを確認します。

引数

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

戻り値

int 1 - serial はロードされたアイテムまたは mobile に解決されるようになりました。 int 0 - オブジェクトはクライアントにとって不明であるか、削除されているか、エイリアスが設定されていません。これはオブジェクトの存在に関するサーバー応答ではありません。表示領域外のアイテムがサーバー上に存在する可能性があり、ここで 0 が与えられます。

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

動作

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

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

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

簡単な例

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

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

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

1。バックパックが利用可能かどうかを確認する - 直接スクリプト

引数と実行の流れ:

  • 引数 backpack は、自分のキャラクターのバックパックのエイリアス serial です。
  • 1 は、バックパックの中身がすでに完全に受け取られたこと、またはバックパックが開封されたことを意味するものではありません。
var present = UO.Exists("backpack");
if (Truth(present))
{
    UO.Print("Backpack is loaded");
}
else
{
    UO.Print("Backpack is unavailable");
}

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

2。再チェック保存 serial - スクリプト関数

引数と実行の流れ:

  • target は特定の serial を保存します。新しい値 lasttarget はこれを置き換えません。
  • 一時停止 500 ミリ秒後、オブジェクトが見えなくなった可能性があるため、チェックが再度実行されます。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.GetSerial("lasttarget");
    await Delay(500);
    if (Truth(UO.Exists(target)))
    {
        UO.Print(UO.GetName(target));
    }
    else
    {
        UO.Print("Saved target is no longer loaded");
    }

    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。 ID フォーマットとオブジェクトの存在を区別する - スクリプト クラス

引数と実行の流れ:

  • GetSerial は、オブジェクトがない場合でも、数値 1073746484 を 0x40001234 としてフォーマットします。
  • 次のチェックのみが、現在のローカル ワールドにおけるこの 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 serial = UO.GetSerial("1073746484");
        UO.Print("Serial: " + serial);
        var present = UO.Exists(serial);
        UO.Print("Present 1/0: " + Convert.ToString(present));
        return null;
    }
}

コマンドの実装

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

UO.Exists(id) — UO.Exists(Integer)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.Exists(id) — UO.Exists(String)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.Forget

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

C# のシグネチャ

void UO.Forget(object? name);

メッセージなしで、保存された名前を実行時オブジェクトから削除します。

引数

  • name — string に変換されるエントリ名。

戻り値

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

動作

  • ブランチは state.Objects.Remove を呼び出します。 DeleteObject とは異なり、このフォームは確認を印刷したり、名前の欠落を報告したりしません。ゲーム ワールド オブジェクトは削除されません。

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

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

簡単な例

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

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

UO.Print("Calling UO.Forget");
UO.Forget("temporary");

1。一時的な名前の削除 - 直接スクリプト

引数と実行の流れ:

  • 名前と serial との関連付けのみが削除されます。
UO.EasyObject("temporary",UO.Self());
UO.Forget("temporary");

2。名前がありません - スクリプト関数

引数と実行の流れ:

  • 名前の欠落はメッセージなしで許可されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Forget("missing-example-name");
    return null;
}

3。変数からの名前 - スクリプトクラス

引数と実行の流れ:

  • 削除は正確な名前文字列を参照します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var name = "temporary";
        UO.EasyObject(name, UO.Self());
        UO.Forget(name);
        return null;
    }
}

コマンドの実装

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

UO.Forget(name) — UO.Forget(Any)

引数: name (Any)

結果: void / Unit.

呼び出し時:

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

case "forget": if (arguments.Length > 0) state.Objects.Remove(Text(0)); break;

UO.GetAltName

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

C# のシグネチャ

dynamic UO.GetAltName(object? objID);

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

    return null;
}

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

3。読み取る前に名前の入力を求める - スクリプト クラス

引数と実行の流れ:

  • 350 — シングルクリック後のミリ秒単位の一時停止の例。これはゲッター パラメーターではありません。
  • サーバーが後で応答するか、タイトルを転送しない可能性があります。空の文字列の処理を保持します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.ClickOnObject(id);
            UO.Wait(350);
            UO.Print(UO.GetAltName(id));
        }

        return null;
    }

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

コマンドの実装

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

UO.GetAltName(objID) — UO.GetAltName(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "getaltname": return new InjectionValue(bridge.GetAltName(Arg(0)));

UO.GetColor

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

C# のシグネチャ

string UO.GetColor();
string UO.GetColor(object? id);

hue オブジェクトを読み取り、16 進文字列としてフォーマットします。

引数

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

戻り値

形式「0x0481」のstring - コードhue/色、0x の後の 4 つの 16 進数。オブジェクトが見つからない場合は、「0x0000」が返されます。未塗装のアイテムでも同じコードが発生します。色は graphic/type または独自の serial ではありません。

動作

  • クライアントがすでに知っている最新のデータが読み取られます。更新リクエストはサーバーに送信されません。
  • 不明なオブジェクトおよびまだ取得されていないプロパティは、null/空の値を持つ可能性があります。 Exists と特定のアクションの条件を確認してください。

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

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

簡単な例

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

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

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

1。最後の項目の色を調べる - 直接スクリプト

引数と実行の流れ:

  • id=lastobject - 最後に使用されたオブジェクト。
  • 結果はすでに 16 進文字列になっているため、Int2Hex は必要ありません。
var hue = UO.GetColor("lastobject");
UO.Print(hue);

2。同じ色のオブジェクトを検索 - スクリプト関数

引数と実行の流れ:

  • type と hue はサンプルの異なる特性です。 FindType は両方の 16 進表現を受け入れます。
  • 一致 - serial または空の文字列が見つかりました。色はtypeを置き換えません。
return  RunScenario();
 object? RunScenario()
{
    var sample = UO.GetSerial("lastobject");
    if (Truth(UO.Exists(sample)))
    {
        var type = UO.GetGraphic(sample);
        var hue = UO.GetColor(sample);
        var match = UO.FindType(type, hue, "backpack");
        UO.Print(match);
    }

    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。 hue を比較のために整数に変換する - スクリプト クラス

引数と実行の流れ:

  • GetColor は self を読み取ります。 Hex2Int は 16 進テキストを int に変換します。
  • null hue は、それ自体では、キャラクターがワールドに存在するかどうかを示しません。
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 hue = UO.Hex2Int(UO.GetColor("self"));
        if (Truth(hue == 0))
        {
            UO.Print("Hue is zero");
        }

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

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

結果: string / String.

呼び出し時:

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

public string GetColor() => GetColor(new InjectionValue(bridge.Self));

UO.GetColor(id) — UO.GetColor(Any)

引数: id (Any)

結果: string / String.

呼び出し時:

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

public string GetColor(InjectionValue id) => NumberConversions.ToHex((short)bridge.GetColor(GetObject(id)));

UO.GetFlags

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

C# のシグネチャ

int UO.GetFlags(object? id);

ローカルの既知のオブジェクトから Entity.Flags ビットマスクを読み取ります。

引数

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

戻り値

int - オリジナルの Entity.Flags。不明または欠落しているエンティティは 0 を返します。これはマスクであり、論理的な結果ではありません。

動作

  • GetObject がリンクを解決し、bridge.World.Get がゲーム ストリーム上の Entity.Flags を読み取ります。 null 値は、フラグまたはモデルのないオブジェクトを意味する可能性があります。 Exists はこれらのケースを分離します。このコマンドはステータスの更新を要求しません。

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

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

簡単な例

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

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

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

1。自分にフラグを立てる - 直接スクリプト

引数と実行の流れ:

  • 現在のキャラクターのマスクが表示されます。
var flags = UO.GetFlags("self");
UO.Print(Convert.ToString(flags));

2。既知のターゲット フラグ - スクリプト機能

引数と実行の流れ:

  • Exists チェックは、欠落しているモデルを識別します。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    if (Truth(UO.Exists(id)))
    {
        var flags = UO.GetFlags(id);
        UO.Print(Convert.ToString(flags));
    }

    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。 serial - スクリプト クラスが見つかりません

引数と実行の流れ:

  • null serial は通常、エンティティと一致せず、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 flags = UO.GetFlags(0);
        UO.Print(Convert.ToString(flags));
        return null;
    }
}

コマンドの実装

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

UO.GetFlags(id) — UO.GetFlags(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

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

UO.GetGraphic

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

C# のシグネチャ

string UO.GetGraphic();
string UO.GetGraphic(object? id);

項目の graphic または文字の body を読み取り、16 進数のテキストで返します。

引数

  • id — 特定のオブジェクトのシリアルまたは解決可能なエイリアス (例: "self"、"backpack"、"lasttarget"、または AddObject によって保存された名前)。グラフィック/type はここには転送されません。引数のない形式では self を使用します。

戻り値

「0x0EED」形式のstring - グラフィカルなtype/body オブジェクト。これは固有の ID/serial ではありません。不明なオブジェクトの場合、ブリッジは「0x0000」という形式の graphic 0 を返します。コマンドは true/false を返しません。

動作

  • このコマンドはクライアントのローカル データを読み取ります。ターゲットは送信されず、サーバー上のオブジェクトも変更されません。
  • 数値 0 は有効なデータ値である可能性があります。オブジェクトの存在をプロパティの値だけでなく、Exists(serial) によってチェックします。

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

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

簡単な例

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

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

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

1。見つかったアイテムのtypeを確認する - 直接スクリプト

引数と実行の流れ:

  • FindType は type ゴールドを受け取り、serial を返します。
  • GetGraphic(serial) ​​はテキスト「0x0EED」を返します。変数 item と graphic は異なる意味を持ちます。
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
    var graphic = UO.GetGraphic(item);
    UO.Print("Graphic: " + graphic);
}

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

2。キャラクターのbodyを読む - スクリプト機能

引数と実行の流れ:

  • 引数のない形式では self を使用します。
  • body はキャラクターの外観のコードであり、serial ではありません。
return  RunScenario();
 object? RunScenario()
{
    var body = UO.GetGraphic();
    UO.Print("Body graphic: " + body);
    return null;
}

3。読み取り graphic を新しい検索 - スクリプト クラスに渡します

引数と実行の流れ:

  • lastobject—サンプル; graphic は、FindType が type として受け入れる 16 進文字列です。
  • -1 は任意の色を許可し、backpack は検索領域を指定します。 sameType は再び 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 graphic = UO.GetGraphic("lastobject");
        var sameType = UO.FindType(graphic, -1, "backpack");
        if (Truth(sameType != ""))
        {
            UO.Print("Matching serial: " + sameType);
        }

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

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

結果: string / String.

呼び出し時:

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

public string GetGraphics() => GetGraphics(bridge.Self);

UO.GetGraphic(id) — UO.GetGraphic(Integer)

引数: id (Integer/String)

結果: string / String.

呼び出し時:

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

public string GetGraphics(int id) => $"0x{bridge.GetGraphics(id):X4}";

UO.GetGraphic(id) — UO.GetGraphic(String)

引数: id (Integer/String)

結果: string / String.

呼び出し時:

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

public string GetGraphics(string id) => GetGraphics(GetObject(id));

UO.GetLayer

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

C# のシグネチャ

string UO.GetLayer();
string UO.GetLayer(object? id);

引数

  • id — 特定のオブジェクトのシリアルまたは解決可能なエイリアス (例: "self"、"backpack"、"lasttarget"、または AddObject によって保存された名前)。グラフィック/type はここには転送されません。引数のない形式では self を使用します。

戻り値

string は、「Rhand」、「Lhand」、「Hat」、「Bpack」、「Mount」などのレイヤーの名前です。レイヤー番号の最初の正規名が返されるため、ヘルメットは「Hat」、Backpack は「Bpack」として出力されます。レイヤー 0、不明なアイテム、または self は「無効」を与えます。未知のゼロ以外の数値は「0xNN」としてフォーマットされます。 serial でも、graphic でも、高さZ でもありません。

動作

  • このコマンドはクライアントのローカル データを読み取ります。ターゲットは送信されず、サーバー上のオブジェクトも変更されません。
  • 数値 0 は有効なデータ値である可能性があります。オブジェクトの存在をプロパティの値だけでなく、Exists(serial) によってチェックします。

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

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

簡単な例

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

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

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

1。右手のオブジェクトのレイヤーを決定する - 直接スクリプト

引数と実行の流れ:

  • ObjAtLayer("Rhand") は右側の項目を選択します。 0 は空のスロットを意味します。
  • GetLayer は、見つかったアイテムの serial を受け取り、文字列「Rhand」を返します。
object? item = UO.ObjAtLayer("Rhand");
if (item is string serial)
{
    var layer = UO.GetLayer(serial);
    UO.Print(layer);
}

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

2。バックパックレイヤー名の確認 - スクリプト関数

引数と実行の流れ:

  • id="backpack" — 現在のキャラクターのバックパックの serial。
  • 別名 Backpack ではなく、正規名 Bpack がチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var layer = UO.GetLayer("backpack");
    if (Truth(layer == "Bpack"))
    {
        UO.Print("Player backpack layer");
    }
    else
    {
        UO.Print("Layer: " + layer);
    }

    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。装備の不足に対処する - スクリプト クラス

引数と実行の流れ:

  • lastobject は項目の実際のエイリアスである必要があります。
  • 無効とはレイヤー 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 layer = UO.GetLayer("lastobject");
        if (Truth(layer == "Invalid"))
        {
            UO.Print("No equipment layer");
        }
        else
        {
            UO.Print("Equipment layer: " + layer);
        }

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

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

結果: string / String.

呼び出し時:

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

public string GetLayer() => GetLayer(new InjectionValue(bridge.Self));

UO.GetLayer(id) — UO.GetLayer(Any)

引数: id (Any)

結果: string / String.

呼び出し時:

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

public string GetLayer(InjectionValue id) => ConvertLayer(bridge.GetLayer(GetObject(id)));

UO.GetLocked

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

C# のシグネチャ

int UO.GetLocked(object? id);

mobile 麻痺をチェックします。

引数

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

戻り値

int 1 - ロードされた mobile には属性 IsParalyzed があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。 「ロック」という名前にもかかわらず、これはチェストのロックでも、アイテムが固定されているわけでも、動けない理由でもありません。同じフラグは Paralyzed と読み取られます。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • 「ロック」という名前にもかかわらず、これはチェストのロックでも、アイテムが固定されているわけでも、動けない理由でもありません。同じフラグは「Paralyzed」として読み取られます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • 「ロック」という名前にもかかわらず、これはチェストのロックでも、アイテムが固定されているわけでも、動けない理由でもありません。同じフラグは「Paralyzed」として読み取られます。
var state = UO.GetLocked("self");
var paralyzed = UO.Paralyzed();
UO.Print("GetLocked: " + Convert.ToString(state));
UO.Print("Paralyzed: " + Convert.ToString(paralyzed));

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

引数と実行の流れ:

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

    return null;
}

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

3。一時停止前後の状態の比較 - スクリプト クラス

引数と実行の流れ:

  • UO.Wait(500) — ミリ秒単位で一時停止します。その後、mobile がまだ存在するかどうかが別途確認されます。
  • 2 つの画像を比較します。中間の変更は見逃される可能性があり、これはサーバー イベントへの継続的なサブスクリプションではありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var target = UO.GetSerial("lasttarget");
        if (Truth(UO.IsNPC(target)))
        {
            var before = UO.GetLocked(target);
            await Delay(500);
            if (Truth(UO.IsNPC(target)))
            {
                var after = UO.GetLocked(target);
                if (Truth(before != after))
                {
                    UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
                }
            }
            else
            {
                UO.Print("Mobile left the local world");
            }
        }

        return null;
    }

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

コマンドの実装

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

UO.GetLocked(id) — UO.GetLocked(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

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

UO.GetName

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

C# のシグネチャ

string UO.GetName();
string UO.GetName(object? id);

クライアントが知っているアイテムまたはキャラクターの名前を読み取ります。

引数

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

戻り値

string — オブジェクト名。不明なオブジェクトまたはまだ取得されていない名前の場合は、空の文字列 "" が返されます。これは、serial、type、またはツールチップのプロパティの完全なリストではありません。

動作

  • クライアントがすでに知っている最新のデータが読み取られます。更新リクエストはサーバーに送信されません。
  • 不明なオブジェクトおよびまだ取得されていないプロパティは、null/空の値を持つ可能性があります。 Exists と特定のアクションの条件を確認してください。

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

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

簡単な例

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

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

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

1。キャラクター名を印刷 - 直接スクリプト

引数と実行の流れ:

  • 引数がない場合は、self が使用されます。
  • 結果は名前のテキストであり、直接表示できます。
var name = UO.GetName();
UO.Print(name);

2。不明なターゲット名のプロセス - スクリプト関数

引数と実行の流れ:

  • lasttarget — オブジェクトのエイリアス。 GetName は新しいターゲットを開きません。
  • 空の名前はオブジェクトが存在しないことを証明するものではありません。名前のない serial に関する情報が最初に来る可能性があります。
return  RunScenario();
 object? RunScenario()
{
    var name = UO.GetName("lasttarget");
    if (Truth(name == ""))
    {
        UO.Print("Name is not available");
    }
    else
    {
        UO.Print("Target: " + name);
    }

    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。大文字と小文字を区別しない名前の比較 - スクリプト クラス

引数と実行の流れ:

  • ToLowerInvariant は比較のために文字列を小文字に変換します。
  • 名前はサーバーによって設定され、ローカライズできます。グラフィック タイプでフィルターするには、FindType/GetGraphic を使用します。
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 name = UO.GetName("lastobject");
        if (Truth(Convert.ToString(name) == "gold"))
        {
            UO.Print("Known name matches");
        }

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

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

結果: string / String.

呼び出し時:

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

public string GetName() => GetName("self");

UO.GetName(id) — UO.GetName(Any)

引数: id (Any/Integer/String)

結果: string / Any.

呼び出し時:

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

case "getname":

                case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));

UO.GetName(id) — UO.GetName(Integer)

引数: id (Any/Integer/String)

結果: string / String.

呼び出し時:

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

public string GetName(int id) => bridge.GetName(id);

UO.GetName(id) — UO.GetName(String)

引数: id (Any/Integer/String)

結果: string / String.

呼び出し時:

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

public string GetName(string id) => GetName(GetObject(id));

UO.GetQuantity

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

C# のシグネチャ

int UO.GetQuantity(object? id);

1 つのアイテムスタック内のユニット数を読み取ります。

引数

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

戻り値

int — 特定の品目の金額フィールド。 1000 ユニットのスタックは通常、1000 を返します。単品 - 1。不明な serial とキャラクターの場合、0 が返されます。これはチェストの子アイテムの数ではなく、MassMove コマンドのアイテム制限でもありません。

動作

  • クライアントがすでに知っている最新のデータが読み取られます。更新リクエストはサーバーに送信されません。
  • 不明なオブジェクトおよびまだ取得されていないプロパティは、null/空の値を持つ可能性があります。 Exists と特定のアクションの条件を確認してください。

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

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

簡単な例

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

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

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

1。見つかったスタックのサイズを表示する - 直接スクリプト

引数と実行の流れ:

  • FindType は、バックパック内の任意の色の type ゴールドを探しています。
  • ゴールドには serial が 1 つ含まれているため、量は見つかった 1 つのスタックにのみ適用されます。
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
    var amount = UO.GetQuantity(gold);
    UO.Print("Units in this stack: " + Convert.ToString(amount));
}

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

2。最小数量の確認 - スクリプト機能

引数と実行の流れ:

  • id=sample - 最後に使用されたアイテム。
  • 50 は、指定されたスタックにあるものを意味します。 50 個々のアイテムはここではカウントされません。
return  RunScenario();
 object? RunScenario()
{
    var sample = UO.GetSerial("lastobject");
    if (Truth(UO.Exists(sample)))
    {
        if (Truth(UO.GetQuantity(sample) >= 50))
        {
            UO.Print("At least 50 units in this 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。スタックの数と 1 を区別する - シナリオ クラス

引数と実行の流れ:

  • FindCount は最後の検索の結果を指します。 GetQuantity - 1 つの serial。
  • 数値は大きく異なる場合があります。 MassMove の数量は、スタックを含むアイテム全体を制限します。
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.FindType(0x0EED, -1, "backpack");
        var stacks = UO.FindCount();
        if (Truth(item != ""))
        {
            var units = UO.GetQuantity(item);
            UO.Print("Matching items: " + Convert.ToString(stacks));
            UO.Print("Units in selected item: " + Convert.ToString(units));
        }

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

引数: id (Any/Integer/String)

結果: int / Any.

呼び出し時:

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

case "getquantity": return new InjectionValue(bridge.GetQuantity(Arg(0)));

UO.GetQuantity(id) — UO.GetQuantity(Integer)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.GetQuantity(id) — UO.GetQuantity(String)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.GetSerial

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

C# のシグネチャ

string UO.GetSerial();
string UO.GetSerial(object? id);

オブジェクト名をその serial に解決し、serial を 16 進文字列としてフォーマットします。

引数

  • id - オプションの文字列: 標準エイリアス、名前 AddObject または数値テキスト (10 進数/16 進数)。引数がない場合、現在のキャラクターの serial が使用されます。

戻り値

"0x40001234" 形式の string は、0x の後に 8 桁の 16 進数が付いた一意の serial/ID オブジェクトです。未解決の名前は「0x00000000」になります。これはtypeではありません。数値テキストは、そのようなオブジェクトがロードされていない場合でも書式設定されます。 GetSerial 自体は Exists をチェックしません。

動作

  • エイリアス名は、現在のスクリプト/クライアントの状態から読み取られます。保存された文字列 serial は、エイリアスがその後別のオブジェクトを指した場合でも、自動的には変更されません。

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

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

簡単な例

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

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

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

1。あなたのキャラクターのIDを取得 - 直接スクリプト

引数と実行の流れ:

  • パラメータはなく、self が選択されています。
  • serial — 16 進文字列。値 0x00000000 は、serial 文字がないことを意味します。
var serial = UO.GetSerial();
UO.Print(serial);

2。選択された姓を安全に使用する - スクリプト機能

引数と実行の流れ:

  • id="lasttarget" は最後のターゲット serial に解決されます。
  • Exists はオブジェクトの存在を確認し、GetName はクライアントが知っているその名前を読み取ります。
return  RunScenario();
 object? RunScenario()
{
    var serial = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(serial)))
    {
        UO.Print(UO.GetName(serial));
    }
    else
    {
        UO.Print("Target is not loaded");
    }

    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 は 10 進数の serial 1073746484 の文字列です。
  • 結果 0x40001234 はフォーマットを示しています。これは数値の一例であり、オブジェクトを作成するものではなく、その存在を保証するものではありません。
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 serial = UO.GetSerial("1073746484");
        UO.Print(serial);
        return null;
    }
}

コマンドの実装

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

UO.GetSerial() — UO.GetSerial()

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

結果: string / String.

呼び出し時:

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

public string GetSerial() => NumberConversions.ToHex(bridge.Self);

UO.GetSerial(id) — UO.GetSerial(String)

引数: id (String)

結果: string / String.

呼び出し時:

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

public string GetSerial(string id) => NumberConversions.ToHex(GetObject(id));

UO.GetTooltip

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

C# のシグネチャ

dynamic UO.GetTooltip(object? objID);

完成したオブジェクトのプロパティ テキストを OPL から読み取ります。 GetTooltip と GetCliloc は同義語です。

引数

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

戻り値

string — 改行で区切られたプロパティの名前とテキスト、または空ではない部分のみ。 ObjID=0 の場合、またはプロパティが受信されない場合は空の文字列。これは既製のテキストです。数値 ID cliloc とパラメータは GetTooltipRec によって返されます。

動作

  • エントリがすでに OPL に存在する場合、そのテキストがすぐに返されます。エントリがない場合は、プロパティ要求が送信され、最大 200 ミリ秒以内に応答が返され、10 ミリ秒ごとにチェックされます。一時停止しても応答は保証されません。
  • アクセス可能なオブジェクトと、サーバーによるプロパティのサポートが必要です。空の結果は、オブジェクトが存在しないことを証明するものではありません。Exists を個別に使用してください。
  • テキストにはサーバー マークアップが含まれる場合があります。行位置によって数値プロパティを解析しないでください。これには GetTooltipRec を使用します。

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

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

簡単な例

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

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

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

1。バックパック内のアイテムのプロパティ - 直接スクリプト

引数と実行の流れ:

  • FindType: ゴールド 0x0EED、任意の hue=-1、直接コンテンツ backpack。 ObjID=item - serial が見つかりました。
  • ゲッターの結果はテキストであり、ゴールドの量ではありません。数量には FindCount(品目) を使用します。
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
    UO.Print(UO.GetTooltip(item));
}

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

2。応答なしの処理 - スクリプト関数

引数と実行の流れ:

  • ObjID=lasttarget は目的のオブジェクトを指している必要があります。
  • 空の文字列は個別に処理されます。リクエストを無限ループで自動的に繰り返す必要はありません。
return  RunScenario();
 object? RunScenario()
{
    var text = UO.GetTooltip("lasttarget");
    if (Truth(text == ""))
    {
        UO.Print("No properties received");
    }
    else
    {
        UO.Print(text);
    }

    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 と Saved は別個の変数です。オブジェクトの一意の ID とそのテキストのスナップショットです。
  • 保存された内容は、後でサーバー上のプロパティが変更されても自動的に変更されません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        var saved = UO.GetTooltip(id);
        UO.Print("Object: 0x" + Hex(id));
        UO.Print(saved);
        return null;
    }

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

コマンドの実装

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

UO.GetTooltip(objID) — UO.GetTooltip(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "getcliloc":

                case "gettooltip":

                    return new InjectionValue(bridge.GetTooltip(Arg(0)));

UO.GetTooltipRec

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

C# のシグネチャ

dynamic UO.GetTooltipRec(object? objID);

構造化プロパティ: cliloc ID および各エントリのパラメータ OPL を読み取ります。

引数

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

戻り値

Array は、プロパティ行の単一のスナップショットです。各行は [clilocID:int,parameters:Array] と等しくなります。 rows[i][0] はローカライズされたメッセージの番号、rows[i][1] はパラメータの配列です。 ArrayLength(行) — プロパティの数。 ArrayLength(パラメータ) — 1 つのプロパティのパラメータの数。 ObjID=0、またはレコードを受信しない場合は空の配列。これは、ID 項目のリストや完成したテキストではありません。

動作

  • キャッシュ エントリはすぐに返されます。 OPL が欠落している場合、プロパティは最大 120 ミリ秒待機してクエリされます。手順をキャンセルすると待機が中断されます。既知の空の OPL は期待を引き起こしません。
  • 初期サービス タブは、ClilocLoader のようにスキップされます。空の内部パラメータは位置を保存します。 #番号は、後のローカライズのために文字列として保存されます。不明なパラメータは空の配列を生成します。
  • 返された配列を変更しても、クライアントのキャッシュは変更されません。テキストには GetTooltip/GetCliloc を使用します。 1 行を翻訳するには - GetClilocByID(clilocID, パラメータ)。

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

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

簡単な例

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

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

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

1。すべてのプロパティ番号を表示 - 直接スクリプト

引数と実行の流れ:

  • ObjID=lasttarget — オブジェクト。 rows にはプロパティが含まれます。i は 0 のインデックスです。 row[0] は cliloc であり、serial ではありません。
  • 空の配列ではループが失敗します。各レコードは 1 回処理されます。
var rows = UO.GetTooltipRec("lasttarget");
var i = 0;
while (Truth(i < ArrayLength(rows)))
{
    var row = rows[i];
    UO.Print("Cliloc: " + Convert.ToString(row[0]));
    i = i + 1;
}

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。各レコードをパラメータとともに翻訳する - スクリプト関数

引数と実行の流れ:

  • GetClilocByID は、clilocID=row[0] および置換配列=row[1] を受け取ります。
  • パラメータは順番に保持されます。パラメータの配列ではなく行全体を渡さないでください。
return  RunScenario();
 object? RunScenario()
{
    var rows = UO.GetTooltipRec("lasttarget");
    var i = 0;
    while (Truth(i < ArrayLength(rows)))
    {
        var row = rows[i];
        var text = UO.GetClilocByID(row[0], row[1]);
        UO.Print(text);
        i = 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。既知のプロパティの数値パラメータを取得する - スクリプト クラス

引数と実行の流れ:

  • 募集 - ID プロパティの例;目的の cliloc に置き換えます。 args[0] は最初のパラメータで、最初は string です。
  • Val の前に、パラメータの数と数値形式がチェックされます。パラメータにはテキストまたは #cliloc リンクを指定できます。
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 rows = UO.GetTooltipRec("lasttarget");
        var wanted = 1060401;
        var i = 0;
        while (Truth(i < ArrayLength(rows)))
        {
            var row = rows[i];
            var args = row[1];
            if (Truth(row[0] == wanted) && Truth(ArrayLength(args) > 0))
            {
                if (Truth(IsNumeric(args[0])))
                {
                    UO.Print("Value: " + Convert.ToString(Val(args[0])));
                }
            }

            i = i + 1;
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool IsNumeric(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out _);
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    double Val(object? value) => double.TryParse(Convert.ToString(value), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var number) ? number : 0;
}

コマンドの実装

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

UO.GetTooltipRec(objID) — UO.GetTooltipRec(Any)

引数: objID (Any)

結果: dynamic / Array.

呼び出し時:

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

case "gettooltiprec":

                    return new InjectionValue(bridge.GetTooltipRecords(Arg(0)).Select(entry =>

                        new InjectionValue(new[]

                        {

                            new InjectionValue(entry.ClilocID),

                            new InjectionValue(entry.Parameters.Select(value => new InjectionValue(value)).ToArray())

                        })).ToArray());

UO.GetType

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

C# のシグネチャ

dynamic UO.GetType(object? objID);

項目の数値 graphic または文字の body を読み取ります。

引数

戻り値

int - アイテムの graphic/type またはキャラクターの body (例: ゴールドの場合は 0x0EED (3821))。オブジェクトが見つからない場合は、値 0 が返されます。 GetType は serial またはテキスト「0x...」を返しません。文字列形式は GetGraphic で与えられます。

動作

  • このコマンドはクライアントのローカル データを読み取ります。ターゲットは送信されず、サーバー上のオブジェクトも変更されません。
  • 数値 0 は有効なデータ値である可能性があります。オブジェクトの存在をプロパティの値だけでなく、Exists(serial) によってチェックします。

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

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

簡単な例

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

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

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

1。数値 type を定数と比較 - 直接スクリプト

引数と実行の流れ:

  • ObjID="lastobject" - 特定のオブジェクトのエイリアス。
  • 0x0EED は graphic の番号です。比較では、そのような serial を持つオブジェクトは検索されません。
var graphic = UO.GetType("lastobject");
if (Truth(graphic == 0x0EED))
{
    UO.Print("Gold graphic");
}

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

2。 type 自身のバックパックを取得 - スクリプト機能

引数と実行の流れ:

  • ObjID="backpack" - 現在のバックパック。
  • Convert.ToString は、返された数値を出力用にフォーマットします。
return  RunScenario();
 object? RunScenario()
{
    var graphic = UO.GetType("backpack");
    UO.Print("Backpack type: " + Convert.ToString(graphic));
    return null;
}

3。 type - スクリプトクラスを読み取る前にオブジェクトの存在を確認します

引数と実行の流れ:

  • 空の文字列 FindType は、Exists の前にチェックされます。
  • Exists はブール値 1/0 を返します。 GetType は数値 graphic を返します。
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.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            if (Truth(UO.Exists(item)))
            {
                UO.Print("Type: " + Convert.ToString(UO.GetType(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;
}

コマンドの実装

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

UO.GetType(objID) — UO.GetType(Any)

引数: objID (Any)

結果: dynamic / Any.

呼び出し時:

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

case "gettype": return new InjectionValue(bridge.GetGraphics(Arg(0)));

UO.Grab

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

C# のシグネチャ

int UO.Grab();
int UO.Grab(object? id);
int UO.Grab(object? amount, object? id);
int UO.Grab(object? amount, object? item, object? container);
int UO.Grab(object? amount, object? item, object? container, object? timeout);

アイテムを指定/受信コンテナに転送するか、アイテム選択を開きます。

引数

  • id — アイテムのシリアル/エイリアス。引数がない場合、対話型の選択が始まります。 1 つの引数を使用すると、正確に 1 この項目の単位が取得されます。
  • item — アイテムのシリアル/エイリアス。引数がない場合、対話型の選択が始まります。 1 つの引数を使用すると、正確に 1 この項目の単位が取得されます。
  • id / item — アイテムのシリアル/エイリアス。引数がない場合、対話型の選択が始まります。 1 つの引数を使用すると、正確に 1 この項目の単位が取得されます。
  • amount - フォーム内 2..4 - 最初の引数として数量、次に品目。 0 は、ルール MoveItem に従ったスタック全体を意味します。 Grab(item) フォームで順序を変更しないでください。
  • container - フォーム 3/4 のみ: 明示的な割り当て。それがない場合 - 状態。ReceivingContainer、>0、それ以外の場合はbackpack。目的地の行 self/my/backpack はバックパックを意味します。 ground - 地面。
  • timeout - 4 form only, milliseconds. CompactMoveItem に送信され、確認を待っています。座標 ground は self、コンテナ - 0xFFFF/0xFFFF/0 から取得されます。

戻り値

数値フラグ int: 1 — インタラクティブな選択が受け入れられたか、選択されたフォームに従って転送が受け入れ/確認されました。 0 - 失敗/適切なアイテムがありません。引数のない結果は、項目がすでに転送されたことを意味するものではありません。

動作

  • CompactGrab は、歴史的な形式 Grab(アイテム)=1 ユニットを保持します。タイムアウトのないフォームは、確認待機を強制せずに CompactMoveItem を使用します。タイムアウトのあるフォームでは、UO.Wait=true が指定されます。
  • シリアル 0 はすぐに 0 を与えます。未解決/不適切なオブジェクトは、MoveItem によってさらにチェックされます。サーバー ルール、スタック量、および現在のコンテナーが結果に影響します。 3 つまたは 4 つの引数はドロップ座標ではありません。
  • amount<=0 はスタック全体を要求します。タイムアウトのあるフォームでは、負の一時停止は 0 になりますが、少なくとも 1 つのローカル チェックが実行されます。チェック UO.Wait(10) の間。部分的な転送は初期数量の減少によって確認され、完全な転送は割り当ておよびground X/Y/Z によって確認されます。これは世界の状況を観察したものであり、ID リクエストからの新しいプロトコル応答ではありません。すでに適切な状態であれば、すぐに 1 を与えることができます。リクエストがすでに送信されている場合でも、タイムアウトにより 0 が返されます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • アイテムを指定/受信コンテナに転送するか、アイテム選択を開きます。
var accepted = UO.Grab();
UO.Print(accepted);

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

引数と実行の流れ:

  • CompactGrab は、歴史的な形式 Grab(アイテム)=1 ユニットを保持します。タイムアウトのないフォームは、確認待機を強制せずに CompactMoveItem を使用します。タイムアウトのあるフォームでは、UO.Wait=true が指定されます。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lastobject")))
    {
        UO.Print(UO.Grab("lastobject"));
    }

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

引数と実行の流れ:

  • シリアル 0 はすぐに 0 を与えます。未解決/不適切なオブジェクトは、MoveItem によってさらにチェックされます。サーバー ルール、スタック量、および現在のコンテナーが結果に影響します。 3 つまたは 4 つの引数はドロップ座標ではありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lastobject")))
        {
            UO.Print(UO.Grab(0, "lastobject", "backpack", 2000));
        }

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

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

結果: int / Integer.

呼び出し時:

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

public int Grab() => bridge.RequestInteractiveGrabTarget();

UO.Grab(id) — UO.Grab(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

public int Grab(InjectionValue id) => CompactGrab(new[] { id });

UO.Grab(amount, id) — UO.Grab(Any,Any)

引数: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Any.

呼び出し時:

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

case "grab": return new InjectionValue(CompactGrab(arguments));

UO.Grab(amount, id) — UO.Grab(Integer,Integer)

引数: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

public int Grab(int amount, int id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, id) — UO.Grab(Integer,String)

引数: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

public int Grab(int amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, id) — UO.Grab(String,String)

引数: amount (Any/Integer/String), id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

public int Grab(string amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });

UO.Grab(amount, item, container) — UO.Grab(Any,Any,Any)

引数: amount (Any), item (Any), container (Any)

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactGrab(values))

UO.Grab(amount, item, container, timeout) — UO.Grab(Any,Any,Any,Any)

引数: amount (Any), item (Any), container (Any), timeout (Any)

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactGrab(values))

UO.IsMovable

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

C# のシグネチャ

int UO.IsMovable(object? objID);

クラシック UO 選択ルールを使用して、既知のアイテムの移植性のローカルな兆候をチェックします。

引数

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

戻り値

int 1 - アイテムは削除されず、マルチでも、地面上のアイテムのローカル重量/移動可能ルールによってブロックされません。 int 0 - mobile、複数の不明/削除されたオブジェクト、または地上にブロックされたオブジェクト。 1 は、Drag/MoveItem の成功を保証しません。範囲、アクセス、カーソル状態、および最終的なサーバーの決定は個別にチェックされます。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • 地上では、タイルデータ エントリの重みが 90 より大きく、Movable サーバー フラグが欠落している場合、アイテムはロックされているとみなされます。 90 以下の重量にはこのフラグは必要ありません。
  • コンテナ内では、地面にあるアイテムをブロックするというルールは適用されません。ここでのタイルデータの重みはサービス属性であり、GetQuantity やキャラクターの現在の重みではありません。
  • 他の顧客向けドキュメントには、異なる重量の説明が記載されている場合があります。これは、このクライアントの実際のルール GameActions.PickUp を説明します。

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

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

簡単な例

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

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

var result = UO.IsMovable(UO.GetSerial("lastobject"));
UO.Print("IsMovable: " + Convert.ToString(result));

1。移動せずに最後の項目を確認する - 直接スクリプト

引数と実行の流れ:

  • item — 最後に使用したアイテムの serial。可動の数はその量ではない。
  • この例では何も取得せず、サーバーに何も送信しません。
var item = UO.GetSerial("lastobject");
var movable = UO.IsMovable(item);
UO.Print("Locally movable 1/0: " + Convert.ToString(movable));

2。符号と距離を個別に推定 - スクリプト関数

引数と実行の流れ:

  • 地上のアイテムの場合、GetDistance はクライアントの既知の範囲を示します。
  • 可動=1でもアイテムが遠すぎる可能性があります。肯定的な結果は、サーバーからの転送の許可を示しているわけではありません。
return  RunScenario();
 object? RunScenario()
{
    var item = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(item)))
    {
        var movable = UO.IsMovable(item);
        var distance = UO.GetDistance(item);
        UO.Print("Movable: " + Convert.ToString(movable));
        UO.Print("Distance: " + Convert.ToString(distance));
    }

    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。見つかったスタック全体を確認する - スクリプト クラス

引数と実行の流れ:

  • FindType は、バックパック内の任意の色の serial ゴールドを 1 つ選択します。
  • IsMovable はアイテム全体をチェックします。 GetQuantity はユニット数を個別に読み取ります。結果 IsMovable はこのカウンターを置き換えません。
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.FindType(0x0EED, -1, "backpack");
        if (Truth(item != ""))
        {
            if (Truth(UO.IsMovable(item)))
            {
                var units = UO.GetQuantity(item);
                UO.Print("Selected stack units: " + Convert.ToString(units));
            }
        }

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

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "ismovable": return new InjectionValue(bridge.IsMovable(Arg(0)));

UO.IsObjectExists

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

C# のシグネチャ

int UO.IsObjectExists(object? objID);

クライアントのローカル環境に削除されていないオブジェクトが存在するかどうかを確認します。

引数

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

戻り値

int 1 - serial はロードされたアイテムまたは mobile に解決されるようになりました。 int 0 - オブジェクトはクライアントにとって不明であるか、削除されているか、エイリアスが設定されていません。これはオブジェクトの存在に関するサーバー応答ではありません。表示領域外のアイテムがサーバー上に存在する可能性があり、ここで 0 が与えられます。

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

動作

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

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

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

簡単な例

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

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

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

1。バックパックが利用可能かどうかを確認する - 直接スクリプト

引数と実行の流れ:

  • 引数 backpack は、自分のキャラクターのバックパックのエイリアス serial です。
  • 1 は、バックパックの中身がすでに完全に受け取られたこと、またはバックパックが開封されたことを意味するものではありません。
var present = UO.IsObjectExists("backpack");
if (Truth(present))
{
    UO.Print("Backpack is loaded");
}
else
{
    UO.Print("Backpack is unavailable");
}

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

2。再チェック保存 serial - スクリプト関数

引数と実行の流れ:

  • target は特定の serial を保存します。新しい値 lasttarget はこれを置き換えません。
  • 一時停止 500 ミリ秒後、オブジェクトが見えなくなった可能性があるため、チェックが再度実行されます。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var target = UO.GetSerial("lasttarget");
    await Delay(500);
    if (Truth(UO.IsObjectExists(target)))
    {
        UO.Print(UO.GetName(target));
    }
    else
    {
        UO.Print("Saved target is no longer loaded");
    }

    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。 ID フォーマットとオブジェクトの存在を区別する - スクリプト クラス

引数と実行の流れ:

  • GetSerial は、オブジェクトがない場合でも、数値 1073746484 を 0x40001234 としてフォーマットします。
  • 次のチェックのみが、現在のローカル ワールドにおけるこの 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 serial = UO.GetSerial("1073746484");
        UO.Print("Serial: " + serial);
        var present = UO.IsObjectExists(serial);
        UO.Print("Present 1/0: " + Convert.ToString(present));
        return null;
    }
}

コマンドの実装

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

UO.IsObjectExists(objID) — UO.IsObjectExists(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "isobjectexists": return new InjectionValue(bridge.Exists(Arg(0)));

UO.LastObject

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

C# のシグネチャ

dynamic UO.LastObject();

最後に使用されたオブジェクトのserialを読み取ります。

引数

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

戻り値

int — 保存済み serial; 0 は、serial がインストールされていないことを意味します。 bool ではなく、graphic/type でもありません。ゼロ以外の ID はもう世界に存在しない可能性があります。

動作

  • フィールドソース: _world.LastObject。このコマンドはオブジェクトを選択、使用、または攻撃しません。
  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 最後に使用されたオブジェクトのserialを読み取ります。
var id = UO.LastObject();
UO.Print(Hex(id));

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

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

引数と実行の流れ:

  • フィールドソース: _world.LastObject。このコマンドはオブジェクトを選択、使用、または攻撃しません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastObject();
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print(UO.GetName(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。完全なヘルパー関数 - スクリプト クラス

引数と実行の流れ:

  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
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.LastObject();
        UO.Wait(500);
        var after = UO.LastObject();
        UO.Print(before = after);
        return null;
    }
}

コマンドの実装

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

UO.LastObject() — UO.LastObject()

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

結果: dynamic / Any.

呼び出し時:

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

case "lastobject": return new InjectionValue(bridge.GetLastObject());

UO.MakeFakeItem

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

C# のシグネチャ

void UO.MakeFakeItem(object? @type);
void UO.MakeFakeItem(object? @type, object? serial);
void UO.MakeFakeItem(object? @type, object? serial, object? count);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x);
void UO.MakeFakeItem(object? @type, object? serial, object? count, object? color, object? x, object? y);

ローカル クライアント アイテムのみを作成または変更します。

引数

  • type - 必須 graphic 1..65535; unnamed type から ResolveType: このレガシー ブランチは Arg/int を使用します。
  • serial - オプションのserial アイテム。 0 (デフォルト) は、0x7FFEFFFF の周りのローカル範囲から空き ID を割り当てます。明示的な項目 serial は、すでにロードされている項目と一致し、そのローカル モデルを変更できます。
  • count - オプションの数量、デフォルトは 1。非陽性は 1 になります。最大65535。
  • color - オプションの hue、デフォルトの 0; 0..65535 に限定されます。
  • x - オプションの世界座標。デフォルトは self です。否定的なものは self を使用し、それから自分自身を 0..65535 に制限します。 Z は常に現在の Player.Z です。
  • y - オプションの世界座標。デフォルトは self です。否定的なものは self を使用し、それから自分自身を 0..65535 に制限します。 Z は常に現在の Player.Z です。

戻り値

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

動作

  • CreateFakeItem にはプレーヤーと有効な graphic/アイテム serial が必要です。 GetOrCreateItem はローカル モデルを返します。コンテナ内にある場合は、接続を削除します。 ground コンテナ 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false および IsMulti=false。
  • Legacy コマンドは、返された serial を破棄します。 0 にエラーメッセージが表示される場合。サーバーはアイテムを作成しません。アクションは実際のアイテム、戦利品、譲渡の権利を提供しません。たとえば、serial=0 のままにします。

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

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

簡単な例

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

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

UO.Print("Calling UO.MakeFakeItem");
UO.MakeFakeItem(0x0E21);

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

引数と実行の流れ:

  • ローカル クライアント アイテムのみを作成または変更します。
UO.MakeFakeItem(0x0E21);

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

引数と実行の流れ:

  • CreateFakeItem にはプレーヤーと有効な graphic/アイテム serial が必要です。 GetOrCreateItem はローカル モデルを返します。コンテナ内にある場合は、接続を削除します。 ground コンテナ 0xFFFFFFFF, graphic/amount/hue/X/Y/Z, Layer.Invalid, AllowedToDraw=true, IsDamageable=false および IsMulti=false。
return  RunScenario();
 object? RunScenario()
{
    UO.MakeFakeItem(0x0E21, 0, 5, 0);
    return null;
}

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

引数と実行の流れ:

  • Legacy コマンドは、返された serial を破棄します。 0 にエラーメッセージが表示される場合。サーバーはアイテムを作成しません。アクションは実際のアイテム、戦利品、譲渡の権利を提供しません。たとえば、serial=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()
    {
        UO.MakeFakeItem(0x0E21, 0, 1, 0, UO.GetX(), UO.GetY());
        return null;
    }
}

コマンドの実装

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

UO.MakeFakeItem(type) — UO.MakeFakeItem(Any)

引数: type (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial) — UO.MakeFakeItem(Any,Any)

引数: type (Any), serial (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count) — UO.MakeFakeItem(Any,Any,Any)

引数: type (Any), serial (Any), count (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color) — UO.MakeFakeItem(Any,Any,Any,Any)

引数: type (Any), serial (Any), count (Any), color (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color, x) — UO.MakeFakeItem(Any,Any,Any,Any,Any)

引数: type (Any), serial (Any), count (Any), color (Any), x (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MakeFakeItem(type, serial, count, color, x, y) — UO.MakeFakeItem(Any,Any,Any,Any,Any,Any)

引数: type (Any), serial (Any), count (Any), color (Any), x (Any), y (Any)

結果: void / Unit.

呼び出し時:

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

case "makefakeitem":

                {

                    int graphic = Arg(0);

                    int serial = Arg(1, 0);

                    int amount = Arg(2, 1);

                    int hue = Arg(3, 0);

                    int x = Arg(4, bridge.GetX(bridge.Self));

                    int y = Arg(5, bridge.GetY(bridge.Self));

                    int createdSerial = bridge.CreateFakeItem(graphic, serial, amount, hue, x, y);

                    if (createdSerial == 0)

                        SystemMessage("MakeFakeItem: invalid graphic/serial or no active player.");

                    break;

                }

UO.MassMove

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

C# のシグネチャ

void UO.MassMove();
void UO.MassMove(object? delay);
void UO.MassMove(object? delay, object? quantity);
void UO.MassMove(object? delay, object? quantity, object? @type);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination);
void UO.MassMove(object? delay, object? quantity, object? @type, object? destination, object? x, object? y, object? z);

選択したタイプのアイテムの 1 回限りの一括転送を有効にします。 MassMove をアクティブ化した後、マウスで適切な項目を 1 つドラッグします。そこからソース コンテナが決定されます。同じソースからのこのタイプの他の項目が自動的に続きます。 3 番目のパラメータは、アイテムの ID ではなく、TYPE/Graphic です。すべてのフォームには、最初の手動転送の待機が含まれます。明示的な宛先は、送信先を指定します。

引数

  • delay — 最初のパラメータは、転送リクエスト間の遅延 (ミリ秒単位) で、0 から 2147483647 までの整数です。 350 は 0,35 秒を意味します。 0 では、ゲーム フレームごとに次のキャリーが 1 つだけ送信されます。 GrabDelay には遅延は追加されません。負の値を指定するとモードが無効になり、キューがクリアされます。スイッチをオフにする場合は、明確な UO.MassMove() 表記が推奨されます。
  • quantity - 2 番目のパラメーターは、最初の手動転送を含む、個々の項目 (アイテム) の合計制限です。中の数量に関係なく、1 スタック/スタックで 1 つのアイテムとみなされます。 50 は、最大 50 スタック全体、または 50 単一アイテムを意味します。スタックはこの制限では分割されません。 0 またはパラメータなし - すべての適切な項目。負の値は許可されません。
  • type - 3 番目のパラメーターは、アイテム タイプ コード (グラフィック/タイプ)、整数 0..65535、たとえば 0x0EED またはゴールドの場合は文字列 "0x0EED" です。これはserial/ID ではなく、AddObject という名前でもありません。 0の有無は最初の手動転送でタイプを決定します。明示的なタイプの場合、別のタイプをドラッグしてもキューはアクティブになりません。このモードは適切なアイテムを待ち続けます。
  • destination — 4 番目のパラメーターは目的です。チェストのシリアル (番号/16 進文字列) または保存された名前 AddObject によってコンテナが選択されます。 X/Y はその窓の内側の場所です。 backpack、self、my は、現在のキャラクターのバックパックを選択し、バックパック内の座標も選択します。 ground または 0 は土地を選択します: X/Y/Z - 地図上の絶対位置。3 つのパラメーターすべてが必要です。 lastcontainer — 最後に開いたコンテナ。 lastobject、lasttarget、lastcorpse、finditem、laststatus は、使用可能なコンテナーを指している場合に有効です。 receiving と catchbag は、インストールされている SetCatchBag コンテナを選択し、インストールされていない場合はバックパックを選択します。ここでのself/myはバックパックを意味しますが、GetX(self)はキャラクターの位置を読み取ります。名前は大文字と小文字を区別せずに比較されます。名前が不明であるか、まだ設定されていない場合は、アイテムを地面に落とすのではなく、エラーが発生します。目的地を指定しないと、最初の手動リセットから場所が記憶されます。サンプルをコンテナ内または地面に置くことができます。地球にとっては、最初のリセットの世界X/Y/Zが記憶されます。
  • x — 5 番目のパラメーター。コンテナの場合は、コンテナ内の座標。 -1 または 65535 は自動配置を意味します。土地の場合は、0 から 65535 までの絶対地図座標。 X/Y/Z のないフォームの場合、明示的なコンテナーで -1 が使用されます。
  • y — 6 番目のパラメーター。コンテナの場合 - コンテナ内の座標、自動配置の場合は -1/65535。地面の場合 - 絶対マップ座標 0..65535。明示的なコンテナ内に座標のないフォームの場合は、-1 を使用します。
  • z — 7 番目のパラメータは出力先の高さ、整数 -128..127 です。コンテナには通常、0 が含まれています。地上では実際の高さを示します。短い形式では、高さと X/Y は手動転送から取得されます。

戻り値

void: 値がありません。 MassMove を有効にすると、手動転送待機が有効になります。合計行には、最初のものも含め、リクエストが送信された個々のアイテムの数が報告されます。スタックは 1 つのアイテムとみなされます。結果は、サーバーによる各リクエストの受け入れを確認するものではありません。

動作

  • 0、1、2、3、4、7 引数を持つフォームが登録されます。 X/Y/Zは同時に指定する必要があります。 5、6、または 8 引数を含むフォームはサポートされていません。順序: 遅延、数量、type、目的地、x、y、z。
  • BEFORE マウス キャプチャ モードをアクティブにします。最初の手動転送は 1 つのアイテムとみなされます。1000 からのスタックは完全に転送され、制限 50 から 1 つのスペースのみを消費します。有効なモードでは、分割ダイアログなしでフルスタックが使用されます。スタックの一部が取り込まれる前に取得された場合、転送は拒否されます。その部分を元に戻して、再度開始します。
  • 1 回のアクティベーションは 1 回の手動転送を指します。サンプルを選択すると、選択モードがオフになります。残りのキューは自動的に処理されます。別のスクリプトからの MoveItem への通常の呼び出しは、手動サンプル選択としてカウントされません。
  • グラフィックタイプを比較します。このコマンドでは色はフィルタリングされません。ソースコンテナの直接の内容のみが処理されます。同封されている袋は開きません。キューの作成後に表示される新しい項目はキューに追加されません。サンプルが地面に置かれている場合、キャプチャ半径内の同じタイプのロードされたオブジェクトが考慮されます。
  • 数量はリクエストの上限です。このコマンドは、サーバーによって拒否された転送を自動的に再試行しません。サーバーに障害が発生した場合、目的地が利用できない場合、キャラクターが死亡した場合、または次のアイテムを取得できない場合、操作は終了します。カーソルがビジー状態の場合、キューは空になるまで最大 5 秒待機します。
  • UO.MassMove() はモードをオフにし、残りのキューをキャンセルします。 UO.TerminateAll()とキャラクターから離れるとキャンセルされます。すでに送信されたリクエストは、キャンセルによってロールバックされません。キューは、コマンドが返された後にクライアントによって実行されます。スクリプトの次の行は、サーバーがすでに転送を完了していることを意味するものではありません。
  • さまざまな種類のコンテンツを完全に移行するには、EmptyContainer を使用します。特定のアイテムを 1 つ運ぶ - MoveItem。 8 つの引数ソース、type、カラー、デスティネーション、x、y、z、遅延は、MassMove ではなく、MoveItems を参照します。
  • モードがまだ最初のマウスドラッグを待機している間に、同じコマンドを繰り返し正しく呼び出すと、待機がオフになります: Deactivate MassMove/MassPriceMove がゲームウィンドウに直接表示されます。次の呼び出しでは、モードが再びオンになります。最初の転送後、引数なしの形式を使用して残りのキューを停止します。すでに送信されたリクエストはロールバックされません。

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

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

簡単な例

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

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

UO.Print("Calling UO.MassMove");
UO.MassMove(350, 0);

1。数を制限せずにマウス転送を有効にする - 直接スクリプト

引数と実行の流れ:

  • 遅延=350: 次のリクエストは少なくとも 350 ミリ秒間隔で行われます。数量=0: ユーザーの上限はありません。
  • type、宛先、X/Y/Zは送信されません。 MassMove をアクティブ化した後、サンプルをバッグからチェストにドラッグします。タイプとソースはそこから取得され、宛先はドロップ場所から取得されます。
  • サンプルが金の場合、同じ元のコンテナにロードされた金スタックが移動されます。他の種類のアイテムは残ります。 Print では、後続の手動アクションのみを説明します。
UO.MassMove(350, 0);
UO.Print("Drag one sample item to the destination container");

2。 50 スタック全体を 100 から転送 - スクリプト関数

引数と実行の流れ:

  • 遅延は 350 ミリ秒を設定します。合計は 2 番目の数量パラメーターに渡され、操作全体 50 を個々の項目に制限します。
  • ソースに同じタイプの 100 スタックが含まれている場合、50 スタック全体 (最初の手動スタックともう 1 つ 49) が転送されます。各スタックには異なる量が含まれる場合があります。カウンターには影響しません。単品の場合は50単品が転送されます。
  • 他のオプションはありません。最初のキャプチャと割り当ては、呼び出し後にマウスで選択されます。
return  RunScenario();
 object? RunScenario()
{
    var delay = 350;
    var total = 50;
    UO.MassMove(delay, total);
    return null;
}

3。ゴールドの種類を選択し、チェストを事前に設定する – シナリオクラス

引数と実行の流れ:

  • goldType - TYPE ゴールド、ID は別個のスタックです。 AddObjectはチェストのserialをチェストに保存します。 0x40005678 を ID に置き換えてください。
  • 遅延=350ミリ秒、数量=50個別アイテム、type=0x0EED、目的地=チェスト。制限には最初の山が含まれ、49 までです。全部。
  • x=-1 および y=-1 は胸部への自動配置を設定します (z=0)。これらはすべて 7 つのパラメータです。
  • ゴールドを手動でドラッグするとキューが開始されます。彼のオリジナルバッグがソースとなります。マウスのリセット位置が明示的なチェストに置き換えられます。別のタイプの項目はキューを開始しません。
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 goldType = "0x0EED";
        UO.AddObject("chest", "0x40005678");
        UO.MassMove(350, 50, goldType, "chest", -1, -1, 0);
        UO.Print("Now drag one gold stack from the source bag");
        return null;
    }
}

4。マウスでサンプルを選択しますが、事前に地面を設定します - 直接スクリプト

引数と実行の流れ:

  • 遅延=350 ミリ秒、数量=0 — すべての適切なアイテム。 type=0 は、将来の手動転送からタイプを取得します。
  • destination=0 は土地を意味するため、完全なトリプル x、y、z が与えられます。ここでの GetX/GetY/GetZ は、キャラクターの現在位置を返します。
  • 呼び出し後、マウスでサンプルを拾い上げてドロップします。このコマンドは、マウスがコンテナー上にあった場合でも、コンテナーとその他の一致するアイテムを指定された座標に送信します。サーバーは土地の空き状況を確認します。
var x = UO.GetX();
var y = UO.GetY();
var z = UO.GetZ();
UO.MassMove(350, 0, 0, 0, x, y, z);

5。既知のタイプの最大 10 個のアイテムをバックパックに移動 - スクリプト機能

引数と実行の流れ:

  • 遅延=500 — 0.5秒;数量=10 - 操作全体で 10 個の個別アイテム/スタック。
  • type=0x0F7A — アイテムのグラフィックタイプ。あなたのタイプを教えてください。ここでは、0x40001234 形式のシリアル番号は使用できません。
  • destination=backpack — キャラクターのバックパック。座標は送信されないので、内部ではx=-1、y=-1、z=0が使用されます。
  • ソースは、最初に適切なアイテムを手動で転送することによって選択されます。ソースがすでにバックパックである場合は、持ち運びに便利な別のソース バッグを選択してください。
return  RunScenario();
 object? RunScenario()
{
    UO.MassMove(500, 10, "0x0F7A", "backpack");
    UO.Print("Drag one matching item from the source chest");
    return null;
}

6。すでに横になっているアイテムに基づいてチェスト内の場所を選択する - シナリオ クラス

引数と実行の流れ:

  • まず、アイテムをチェスト内の目的の場所に手動で配置します。最初の AddObject はチェスト自体を選択し、それをチェスト ID に保存します。 2 つ目は、その中の項目を選択し、ID をposition_sample に保存します。
  • コンテナ内のアイテムの GetX/GetY は、そのコンテナ内のアイテムの座標を返します。これらは、胸部ウィンドウが画面上のどこに配置されているかには依存しません。
  • 遅延=350ミリ秒、数量=50整数アイテム、type=0はソースからの将来の手動転送によって決定され、宛先=チェスト。
  • x と y は胸部内の選択された位置、最後の z=0 を定義します。 Position_sample オブジェクトは座標を読み取るためにのみ機能します。移行されるソースとタイプは、その後の手動移行によって決定されます。
  • バックパックの場合は、チェストをbackpackまたはselfに交換してください。土地の場合は、ground を使用し、キャラクターの現在位置の引数なしで、UO.GetX()、UO.GetY()、UO.GetZ() などのマップ座標を使用します。
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.Print("Select the destination chest");
        UO.AddObject("chest");
        UO.Print("Select an item already at the desired position inside that chest");
        UO.AddObject("position_sample");
        var x = UO.GetX("position_sample");
        var y = UO.GetY("position_sample");
        UO.MassMove(350, 50, 0, "chest", x, y, 0);
        UO.Print("Drag one source item to start the transfer");
        return null;
    }
}

7。胸から地面まで:マウスで場所を選択 - ダイレクトスクリプト

引数と実行の流れ:

  • 遅延=350 — 後続のリクエスト間の間隔は少なくとも 350 ミリ秒です。数量=50 - 最大 50 の個々のアイテム/スタック全体 (サンプルを含む)。これらは同じスタックの 50 ユニットではありません。
  • MassMoveをアクティブ化した後、開いたチェストからアイテムを拾い、マウスで地面に置きます。そのタイプと元のチェストはパターンによって決まります。ワールド X/Y/Z の目的地は、このリセットの場所に記憶されます。
  • このチェストからロードされた同じ種類の残りのアイテムは、地上の同じポイントに送られます。ネストバッグやその他のタイプの内容には影響しません。一致するすべての項目について、50 を 0 に置き換えます。
  • MassMove には戻り値がありません。モードが有効になった後、手順は終了し、キューはクライアントで動作し続けます。最後のメッセージでは、サーバーの確認ではなく、送信されたリクエストがカウントされます。残りのキューをキャンセルするには、UO.MassMove() に電話してください。
UO.MassMove(350, 50);
UO.Print("Drag one item from the chest onto the ground");

コマンドの実装

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

UO.MassMove() — UO.MassMove()

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

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay) — UO.MassMove(Any)

引数: delay (Any)

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity) — UO.MassMove(Any,Any)

引数: delay (Any), quantity (Any)

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type) — UO.MassMove(Any,Any,Any)

引数: delay (Any), quantity (Any), type (Any)

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type, destination) — UO.MassMove(Any,Any,Any,Any)

引数: delay (Any), quantity (Any), type (Any), destination (Any)

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

UO.MassMove(delay, quantity, type, destination, x, y, z) — UO.MassMove(Any,Any,Any,Any,Any,Any,Any)

引数: delay (Any), quantity (Any), type (Any), destination (Any), x (Any), y (Any), z (Any)

結果: void / Unit.

呼び出し時:

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

case "massmove":

                    if (arguments.Length == 0) bridge.MassMove(-1, 0, 0, -1, -1, -1, 0);

                    else bridge.MassMove(NumberConversions.ToInt(arguments[0]),

                        arguments.Length > 1 ? NumberConversions.ToInt(arguments[1]) : 0,

                        arguments.Length > 2 ? ResolveType(arguments[2]) : 0,

                        arguments.Length > 3 ? ResolveTransferDestination(arguments[3], true) : -1,

                        arguments.Length > 4 ? NumberConversions.ToInt(arguments[4]) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : 0);

                    break;

Clone this wiki locally