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

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

検索 — 2

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

リファレンスの各部

1 · 2

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


UO.FindMan

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

C# のシグネチャ

void UO.FindMan();
dynamic UO.FindMan(object? notoriety);
dynamic UO.FindMan(object? notoriety, object? distance);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color, object? includeSelf);

知名度、距離、身長、体格、および hue から 1 つの serial を見つけます。自動攻撃を行わずにターゲットを事前に選択するために使用されます。

引数

  • notoriety — サーバーから受け取ったキャラクターとの関係ステータス: 0 — 不明、1 — 無実、2 — 味方、3 — 灰色、4 — 犯罪者、5 — 敵、6 — 殺人者、 7 - 無敵。数字は 1 つのステータスを意味します。 "5|6" または数値の配列 - 上記のいずれか。服の色やクラスではありません。負の数 (通常は -1)、0xFFFF、「任意」、空の文字列または空の配列は、このフィルターを個別に無効にします。有効な数値のない無効な文字列は誰も見つかりません。ステータスの順序によって優先度が設定されるわけではありません。 5 フィルターは、NPC/モンスターを自動的に選択するのではなく、敵を選択します。実際の値はサーバーによって異なります。
  • distance — セル内の水平半径: 5 では、距離 0..5 が許可されます。距離は max(abs(dx),abs(dy)) なので、隣接する対角線も 1 です。デフォルトまたは数値が負の場合、無制限の検索ではなく UO.FindDistance() が使用されます。 0 は同じ X/Y セルを残します。ルートの長さではありません。障害物と床はこのパラメータではチェックされません。
  • デフォルトでは、nearest - true/1 - 最も近く、等距離であればserial が小さくなります。 false/0 - クライアントのリストの一番遠いものではなく、最初のものです。
  • maxZ — 最大腹筋 (Z ターゲット - キャラクターの Z) を含み、Z ワールドの単位。これはフロアやセル X/Y の数ではありません。 maxZ=4 と Z プレーヤー 10 により、Z が 6..14 をターゲットにすることができます。 0 にはまったく同じ高さが必要です。デフォルトでは、負の数値の場合、UO.FindVertical() が使用されます。階段では、Z に相当するターゲットを排除できます。たとえわずかな違い Z であっても、床へのアクセスのしやすさを証明するものではありません。
  • body - 特定のキャラクターのID や着用している鎧のtype ではなく、キャラクターの身体/NPC のグラフィック。数値、16 進文字列、文字列 "0x0190|0x0191"、または数値の配列。 0x0190 (400) - 人間の男性。 0x0191 (401) - 人間の女性。マスクは両方の体を結合します。リストには、他の種族、ゴースト、または変身は自動的には含まれません。標準グラフィックボディタイプの表。負の数 (デフォルトでは -1)、0xFFFF、「任意」、空の文字列または空の配列単独 - 任意の本体。有効な番号のない不明なテキストは空の結果を生成します。
  • color — mobile 自体の色相: int または数値/16 進文字列。負の数 (デフォルトでは -1) および 0xFFFF - 任意の hue; 0 は正確に hue 0 であり、値ではありません。悪評の帯の色や衣服の色合いではありません。このパラメータは、着用されているアイテムの色をチェックしません。
  • includeSelf - true/1 は、他のフィルターの対象となる self を許可します。 false/0 はデフォルトで除外されます。 Ignoreはselfにも適用されます。

戻り値

int serial、または 0 結果なし。 ID を確認してください != 0;それはboolではなく、量でもありません。 FindItem/FindCount/GetFoundItems は変化せず、攻撃も開始しません。

動作

  • ローカル検索: ダウンロード済みのモバイルのみ。 Ignore が考慮されます。 self は、それをサポートするコマンド内の明示的な includeSelf=true を除き、除外されます。コンテナやアイテムはモバイルではありません。
  • 条件は同時に適用されます (AND)。 body/悪評内の有効な代替案は、OR を通じて結合されます。 FindItem、FindCount、GetFoundItems の検索は変わりません。
  • body/notoriety では、有効な番号を持つマスクはこれらを使用します: "any|5" は依然として 5 に制限します。有効な数値の隣にある空白/無効な要素は無視されます。制限がない場合は、-1 を個別に渡します。このルールを classMask に適用しないでください。不明なクラス名はリスト全体を拒否します。
  • チームは世界のエリアを開拓したり、ゴールまで走ったり、ルートの通行可能性を確認したりしません。選択とサーバーの処理の間に、世界の状態が変化する可能性があります。
  • true および 1 を渡すことは、フラグ、false および 0 と同様に同等です。他のゼロ以外の数値も true に変換されますが、8/9 は別個のモードではありません。明確な true/false を使用します。
  • 正確な順序: 知名度、距離、最も近い、maxZ、body、色、includeSelf。 AttackNearestやGetMobilesとは異なります。
  • パラメータ classMask、aliveOnly、visibleOnly はありません。必要に応じて、見つかった ID を個別に確認してください。すべての生きている/表示されているものの中から選択するには、GetMobiles を使用して、最も近い死んだものが他のものを隠さないようにします。

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

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

簡単な例

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

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

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

1。最も近い味方を見つけて保存 - 直接スクリプト

引数と実行の流れ:

  • 2 - 味方、12 - 半径。残り: 最も近い=true、maxZ=FindVertical()、任意のbody/hue、selfは除外されます。チームはターゲットを救うだけで、攻撃はしません。
var ally = UO.FindMan(2, 12);
if (Truth(ally == 0))
{
    return null;
}
UO.AddObject("ally_nearby", ally);

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

2。さらにアクションを起こす前に各条件を指定する - スクリプト関数

引数と実行の流れ:

  • IsDead チェックは個別に実行されました。 body はボディを指定します。 bodyHue=-1 は、hue に限定されません。このチームは服装で分類していません。
return  RunScenario();
 object? RunScenario()
{
    var status = 5;
    var radius = 8;
    dynamic nearest = true;
    var height = 4;
    var bodies = "0x0190|0x0191";
    var bodyHue = -1;
    dynamic includeMe = false;
    var enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe);
    if (Truth(enemy != 0))
    {
        if (Truth(UO.IsDead(enemy) == 0))
        {
            UO.Attack(enemy);
        }
    }

    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 で最初の mobile を検索します - スクリプト クラス

引数と実行の流れ:

  • 最初の -1 は悪名を無効にし、2 番目の -1 は body を無効にします。 3 番目の位置の false は並べ替えをオフにします。最後の false には self が含まれません。衣装の色合いはチェックしておりません。
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 chosenHue = 0x0455;
        var mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false);
        if (Truth(mobile == 0))
        {
            return null;
        }

        UO.AddObject("body_hue_match", mobile);
        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.FindMan() — UO.FindMan()

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

結果: void / Unit.

呼び出し時:

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

case "findman":

                {

                    int mobile = bridge.GetMobiles().FirstOrDefault();

                    if (mobile != 0) state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile);

                    break;

                }

UO.FindMan(notoriety) — UO.FindMan(Any)

引数: notoriety (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance) — UO.FindMan(Any,Any)

引数: notoriety (Any), distance (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest) — UO.FindMan(Any,Any,Any)

引数: notoriety (Any), distance (Any), nearest (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ) — UO.FindMan(Any,Any,Any,Any)

引数: notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body) — UO.FindMan(Any,Any,Any,Any,Any)

引数: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color) — UO.FindMan(Any,Any,Any,Any,Any,Any)

引数: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color, includeSelf) — UO.FindMan(Any,Any,Any,Any,Any,Any,Any)

引数: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any), includeSelf (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindMan(values))

UO.FindMobile

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

C# のシグネチャ

int UO.FindMobile();
int UO.FindMobile(object? stateFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionOrKind);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionFilter, object? kindFilter);

ジョイント文字列フィルターを使用して、ロードされた最も近い 1 つのキャラクター/クリーチャーを検索します。プレイヤー本人は対象外となります。

引数

  • stateFilter - 通常はすべて / 生きている / 死んでいます。オプション。実装内のすべての引数はフィルター文字列であるため、1 つの引数で複数の単語を組み合わせることができます。
  • rangeFilter - 通常、すべて / 近い (0..4) / 中 (5..9) / 遠い (10 から合計半径まで)。この位置では数値半径は受け入れられません。全体の制限は UO.FindDistance(value) を通じて変化します。
  • verticalFilter - すべて / 上 / 下。上:candidate.Z > self.Z、下:candidate.Z < self.Z。これはフロアまたは Z の数値許容差ではありません。
  • directionOrKind — 4 つの引数を持つフォームの 4 番目の位置: all、北/南/東/西、または人間/NPC/Mob。複合文字列も可能です。
  • directionFilter — 5 つの引数を持つフォームの 4 番目の位置: all または比較 X/Y 北/南/東/西。これはself を基準とした相対的な位置であり、視点の方向ではありません。
  • kindFilter - 5 番目の位置: すべて / 人間 / NPC / Mob。人間には男性と女性のボディが含まれます: 0x0190 - 男性の人間、0x0191 - 女性の人間、および標準的なエルフ/ガーゴイルとゴーストのボディ。完全なリスト: 人間。 NPC - IsNpc と人間。暴徒 - IsNpc で人間ではありません。モンスターや女性という言葉は受け入れられません。

戻り値

int: 1 つの mobile の serial、または一致しない場合は 0。それは数量でも、配列でも、type や bool でもありません。チェックが見つかりました != 0 は結果が存在することを意味します。比較が見つかりました == true は C# では無効です: int は bool と比較できません。

動作

  • UO.FindMobile: 0 ~ 5 引数に適用されます。欠落している末尾の引数はすべてです。各引数には、スペース、タブ、カンマ、セミコロン、| で区切られた 1 つの単語または複数の単語を含めることができます。または+。すべての条件は AND を通じて結合されます。記号 |ここではORという意味ではありません。
  • 検索はダウンロードされたモバイルのみを参照し、self を除外し、距離を最大 (1、UO.FindDistance()) に制限します。距離は、ルール max(abs(dx), abs(dy)) に従って測定されます。対角線上の正方形は 1 つとしてカウントされます。移動するオブジェクトの場合、距離にはステップのキューが考慮され、X/Y/Z の比較により現在の座標が読み取られます。
  • 適切なものの中から最も近いものが選択されます。等距離 - 小さい serial。 true/false、カウントまたは配列ではなく、int serial または 0 を返します。
  • UO.FindMobile は FindItem/FindCount/GetFoundItems を変更せず、Ignore および UO.FindVertical を適用せず、視認性、通行可能性、視線をチェックしません。リモート オブジェクトを移動したり、ターゲットにしたり、ロードしたりすることはありません。
  • 数値の半径/Z/方向、モンスター、北東、北西、南東、南西という単語はフィルターではありません。未知の単語があると、候補をチェックするときにエラーが発生します。候補者がいない場合、このセクションは実行されない可能性があります。斜めのエリアの場合は北東などを組み合わせます。数値検証の場合は、見つかったオブジェクトのプロパティまたは UO.GetMobiles() を使用します。

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

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

簡単な例

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

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

var result = UO.FindMobile("all", "all", "above");
UO.Print("FindMobile: " + Convert.ToString(result));

1。検索と結果の確認 - 直接スクリプト

引数と実行の流れ:

  • すべて合格、すべて合格: オブジェクトの高さは厳密にキャラクターの Z よりも大きいです。等しい Z は適切ではありません。
  • 0 はプロパティが読み取られる前に処理されます。 Print は ID、名前と身長を示します。ゲームアクションはトリガーされません。
var found = UO.FindMobile("all", "all", "above");
if (Truth(found == 0))
{
    UO.Print("No matching mobile");
    return null;
}
UO.Print("ID: " + Convert.ToString(found) + " | Name: " + UO.GetName(found));
UO.Print("Z: " + Convert.ToString(UO.GetZ(found)) + " | Self Z: " + Convert.ToString(UO.GetZ("self")));

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

2。条件と時間半径の組み合わせ - スクリプト関数

引数と実行の流れ:

  • 18 - 外部制限。生きている、近い、すべて、すべて、モブは協力条件を設定します。近い場合は 4 までの範囲、中程度 - 5..9、遠い場合 - 10 までです。
  • 最後に、正常に完了するかエラーが処理された場合に、前の半径を返します。このスクリプトはワールドの読み込みを拡張しません。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindDistance();
    try
    {
        UO.FindDistance(18);
        var found = UO.FindMobile("alive", "near", "all", "all", "mob");
        if (Truth(found != 0))
        {
            UO.Print("Match: " + Convert.ToString(found));
            UO.Print("Distance: " + Convert.ToString(UO.GetDistance(found)));
        }
        else
        {
            UO.Print("No match in the loaded area");
        }
    }
    finally
    {
        UO.FindDistance(previous);
    }

    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。複合フィルタの完全な関数 - スクリプト クラス

引数と実行の流れ:

  • 文字列「north east」がヘルパーに渡されます。これらは 1 つのリクエストの複数の条件であり、異なる目標を順番に検索するものではありません。
  • FindAndDescribe は完全に宣言されます。ターゲットやキャラクターを変更せずにID/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 id = FindAndDescribe("north east");
        UO.Print("Returned ID: " + Convert.ToString(id));
        return null;
    }

    dynamic FindAndDescribe(dynamic filters)
    {
        var id = UO.FindMobile(filters);
        if (Truth(id == 0))
        {
            UO.Print("Nothing matched: " + filters);
            return 0;
        }

        UO.Print(UO.GetName(id) + " | " + Convert.ToString(id));
        return id;
    }

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

4。生き物を見つけて正確な距離を個別に確認する - 直接スクリプト

引数と実行の流れ:

  • alive/all/all/all/mob - サポートされている 5 つのポジション。距離 2 は、最も近い結果が得られた後にチェックされます。
  • このようなスクリプトは、クリーチャーへのパスをチェックせず、移動を開始しません。
var found = UO.FindMobile("alive", "all", "all", "all", "mob");
if (Truth(found == 0))
{
    UO.Print("No loaded creature");
    return null;
}
if (Truth(UO.GetDistance(found) <= 2))
{
    UO.Print("Creature within two tiles: " + Convert.ToString(found));
}
else
{
    UO.Print("Nearest creature is farther away");
}

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

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

結果: int / Integer.

呼び出し時:

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

public int FindMobile() => FindMobile(new InjectionValue("all"), new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter) — UO.FindMobile(Any)

引数: stateFilter (Any)

結果: int / Integer.

呼び出し時:

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

public int FindMobile(InjectionValue stateFilter) => FindMobile(stateFilter, new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter) — UO.FindMobile(Any,Any)

引数: stateFilter (Any), rangeFilter (Any)

結果: int / Integer.

呼び出し時:

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

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter) => FindMobile(stateFilter,

            rangeFilter, new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter) — UO.FindMobile(Any,Any,Any)

引数: stateFilter (Any), rangeFilter (Any), verticalFilter (Any)

結果: int / Integer.

呼び出し時:

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

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter, InjectionValue verticalFilter) =>

            FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionOrKind) — UO.FindMobile(Any,Any,Any,Any)

引数: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionOrKind (Any)

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(

                    FindMobile(values[0], values[1], values[2], values[3]))

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionFilter, kindFilter) — UO.FindMobile(Any,Any,Any,Any,Any)

引数: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionFilter (Any), kindFilter (Any)

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(

                    FindMobile(values[0], values[1], values[2], values[3], values[4]))

UO.FindNotoriety

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

C# のシグネチャ

dynamic UO.FindNotoriety(object? @type, object? notoriety);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color, object? container);

別の mobile を 1 つずつ body/type と許可された悪名を探します。正しい態度を備えた特定の種類のキャラクターが必要な場合に適しています。高度な形状を使用すると、半径、高さ、hue を制限できます。これは単なるオブジェクトの選択であり、攻撃ではありません。

引数

  • type — 1 つの本文数値 graphic または 16 進文字列。着用アイテムのserial、type、およびアレイではありません。 0x0190 (400) - 人間の男性、0x0191 (401) - 人間の女性。これらは異なる精度のフィルターです。 2 つの body には個別の呼び出し、またはマスクを使用した GetMobiles が必要です。 -1 または 0xFFFF - 任意のボディ。
  • notoriety — サーバーから受け取ったキャラクターとの関係ステータス: 0 — 不明、1 — 無実、2 — 味方、3 — 灰色、4 — 犯罪者、5 — 敵、6 — 殺人者、 7 - 無敵。数字は 1 つのステータスを意味します。 "5|6" または数値の配列 - 上記のいずれか。服の色やクラスではありません。負の数 (通常は -1)、0xFFFF、「任意」、空の文字列または空の配列は、このフィルターを個別に無効にします。有効な数値のない無効な文字列は誰も見つかりません。ステータスの順序によって優先度が設定されるわけではありません。 5 フィルターは、NPC/モンスターを自動的に選択するのではなく、敵を選択します。実際の値はサーバーによって異なります。複数の値は、OR: 数値 5、文字列 "5|6"、または数値/数値文字列のフラット配列として結合されます。フラット配列と個々の引数を混在させることができます。値の順序に優先順位はありません。数値以外のトークンは除外されます。完全に間違ったマスクでは何も検出されません。ネストされた配列は数値ではないため、無効な要素として無視されます。多次元マスクはサポートされていません。 2 引数の数値形式の特徴: 負のコードのみがフィルターを無効にし、数値 0xFFFF はリテラル コードとみなされ、通常は誰も見つかりません。
  • distance — セル内の水平半径: 5 では、距離 0..5 が許可されます。距離は max(abs(dx),abs(dy)) なので、隣接する対角線も 1 です。デフォルトまたは数値が負の場合、無制限の検索ではなく UO.FindDistance() が使用されます。 0 は同じ X/Y セルを残します。ルートの長さではありません。障害物と床はこのパラメータではチェックされません。
  • nearest - false/0 デフォルト: ワールド列挙順で最初に一致します。最も近いまたは小さい ID が保証されません。 true/1: 等しい場合、より小さいserial に最も近い。
  • maxZ — 最大腹筋 (Z ターゲット - キャラクターの Z) を含み、Z ワールドの単位。これはフロアやセル X/Y の数ではありません。 maxZ=4 と Z プレーヤー 10 により、Z が 6..14 をターゲットにすることができます。 0 にはまったく同じ高さが必要です。デフォルトでは、負の数値の場合、UO.FindVertical() が使用されます。階段では、Z に相当するターゲットを排除できます。たとえわずかな違い Z であっても、床へのアクセスのしやすさを証明するものではありません。
  • color — mobile 自体の色相: int または数値/16 進文字列。負の数 (デフォルトでは -1) および 0xFFFF - 任意の hue; 0 は正確に hue 0 であり、値ではありません。悪評の帯の色や衣服の色合いではありません。このパラメータは、着用されているアイテムの色をチェックしません。
  • container - デフォルトでは存在しません: 世界。指定した場合、ground/"ground"/UO.Ground()、数値 0/1、および -1/"my" は、この特定のコマンドで互換性のあるワールド指定として受け入れられます。明示的な serial コンテナまたは "backpack" は 0 を返します。コンテナ内にモバイルはありません。物事の検索を追加しません。

戻り値

選択した mobile の int ~ serial、または適切なものがない場合は 0。これは graphic/type ではなく、ID、見つかったオブジェクトの数、または true/false: if (found != 0) { ... }、not found == true を使用します。見つかった ID は、UO.AddObject、UO.Attack、または UO.Follow に渡すことができますが、各ゲーム アクションは個別に呼び出されます。

動作

  • 検索では、クライアントによって既にダウンロードされているモバイルのみが読み取られます。破壊されたレコードとIgnoreは除外されます。呼び出し自体はターゲットを開いたり、攻撃したり、ターゲットに到達したり、サーバーにリモート オブジェクトを要求したりすることはありません。
  • 距離は幾何学的な max(abs(dx),abs(dy)) であり、ルートの長さではありません。近接しているからといって、壁がないことや、別のフロアにアクセスできることは保証されません。返品時に状態が変わる場合がございます。
  • ライフ、ステルス、視線は自動的にチェックされません。重要な場合は、GetMobiles と aliveOnly/visibleOnly または独自の小切手を使用します。サーバーが敵ステータスであっても、NPC は対象になりません。
  • 2 から 7 までの引数。 maxZ を送信するには、以前の距離と最も近い距離を指定する必要があります。このコマンドで複数の悪名を得るには、2 番目の引数で単一マスク「5|6」またはフラット配列を使用します。 3 番目の引数は距離であり、2 番目のステータスではありません。
  • 形式上の重要な違い: NUMERIC の悪名を伴う 2 つの引数がブリッジを呼び出します。FindNotoriety、古い FindItem/FindCount/GetFoundItems が破棄され、すべての一致が記録されます。 2 つの STRING/ARARY 引数、および 3..7 引数を持つフォームは、同じ Find* フィールドを保持して、ID のみを返します。拡張クエリの結果として FindCount を読み取らないでください。
  • すべての形式で self と Ignore が除外され、制限 Z が使用されます。ライブ/可視フィルターがあり、視線がありません。一致しない場合は 0 が返されます。 type/距離/maxZ/color が読み取れない場合、変換エラーが発生します。

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

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

簡単な例

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

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

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

1。敵の評判を持つ男女を数える - 直接スクリプト

引数と実行の流れ:

  • 0x0190 (400) は男性の人体、0x0191 (401) は女性の人体です。 5 - 敵。各呼び出しは 1 つの body を受け取ります。文字列 0x0190|0x0191 は、この位置ではサポートされていません。現在のFindDistance/FindVerticalが使用されます。
  • 2 回目の呼び出し以降、FindItem/FindCount/GetFoundItems は女性の身体のみを指します。最初の数量は menCount に保存されます。返される男性/女性は番号ではなく、最初の serial または 0 です。このようなボディを持つ NPC も結果に含めることができます。この 2 つのbody にはゴーストやその他の種族は含まれません。
var man = UO.FindNotoriety(0x0190, 5);
var menCount = UO.FindCount();
var woman = UO.FindNotoriety(0x0191, 5);
var womenCount = UO.FindCount();
UO.Print("Male humans: " + Convert.ToString(menCount));
UO.Print("Female humans: " + Convert.ToString(womenCount));
UO.Print("Total humans: " + Convert.ToString(menCount + womenCount));

2。 2 つの高さ制限ステータスのうち最も近いもの - スクリプト関数

引数と実行の流れ:

  • 最初のパラメータの -1 — 任意の本文。 -1 6番目 - 任意のhue。 ground - 平和。 FindCount はこのフォーム以降更新されていません。使用が見つかりました。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindNotoriety(-1, "5|6", 12, true, 4, -1, "ground");
    if (Truth(found != 0))
    {
        UO.AddObject("near_enemy", found);
    }

    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。 2 番目のパラメータのステータスの配列 - シナリオ クラス

引数と実行の流れ:

  • 配列には 2 つのコードが含まれています。末尾の引数が欠落している場合は、現在の半径/Z、最も近い=false、および任意の hue を意味します。これはエントリ UO.FindNotoriety(type,5,6) ではありません。そこには 6 が半径になります。
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()
    {
        dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
        allowed[0] = 5;
        allowed[1] = 6;
        var found = UO.FindNotoriety(0x0191, allowed);
        if (Truth(found != 0))
        {
            UO.AddObject("allowed_mobile", found);
            UO.Print("Selected ID: " + Convert.ToString(found));
        }

        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.FindNotoriety(type, notoriety) — UO.FindNotoriety(Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance) — UO.FindNotoriety(Any,Any,Any)

引数: type (Any), notoriety (Any), distance (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest) — UO.FindNotoriety(Any,Any,Any,Any)

引数: type (Any), notoriety (Any), distance (Any), nearest (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ) — UO.FindNotoriety(Any,Any,Any,Any,Any)

引数: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any)

引数: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color, container) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any), container (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindQuantity

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

C# のシグネチャ

dynamic UO.FindQuantity();

最初の検索結果の現在の数量を読み取ります。

引数

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

戻り値

int - アイテムの現在の金額。serial FindItem、既存のキャラクターの場合は 1、紛失/削除されたオブジェクトの場合は 0 です。他の見つかったスタックは累積されません。 FindFullQuantity とは異なり、呼び出されたときに現在のオブジェクトから数量が読み取られます。

動作

  • データは、このスクリプトの最後の通常検索に属します。 FindType と 1–5 引数、FindTypeEx、Count/CountEx/CountGround は結果を置き換えます。このスナップショットを変更するために、高度なフィルター処理された文字コマンドは必要ありません。
  • 一致しない新しい検索では、FindItem、FindCount、FindFullQuantity がクリアされ、GetFoundItems がクリアされます。結果を単独で読み取るだけでは、新しい検索はトリガーされません。

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

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

簡単な例

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

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

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

1。ゴールド検索結果の測定 - 直接スクリプト

引数と実行の流れ:

  • type=0x0EED – ゴールド; color=-1 — 任意の hue; backpack - この形式のバックパックの直接の内容のみ FindType。
  • int - アイテムの現在の金額。serial FindItem、既存のキャラクターの場合は 1、紛失/削除されたオブジェクトの場合は 0 です。他の見つかったスタックは累積されません。 FindFullQuantity とは異なり、呼び出されたときに現在のオブジェクトから数量が読み取られます。
var found = UO.FindType(0x0EED, -1, "backpack");
var value = UO.FindQuantity();
UO.Print(Convert.ToString(value));

2。項目と単位の比較 - スクリプト機能

引数と実行の流れ:

  • 間に別の検索が呼び出されるまで、4 つの読み取りすべてが 1 つの検索に属します。
  • たとえば、50 の 2 つのスタック: アイテム=2、最初のスタック=50、すべてのユニット=100;最初の ID には、1 つのスタックの一意の ID が含まれます。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    UO.Print("Items: " + Convert.ToString(UO.FindCount()));
    UO.Print("First stack: " + Convert.ToString(UO.FindQuantity()));
    UO.Print("All units: " + Convert.ToString(UO.FindFullQuantity()));
    UO.Print("First ID: 0x" + Hex(UO.FindItem()));
    return null;
}

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

3。次の検索まで結果を保存 - スクリプト クラス

引数と実行の流れ:

  • 最初の type は金で、2 番目の 0x0F7A は別のタイプの試薬です。新しいチームは全体的なショットを変更します。
  • 保存された番号は最初の検索の番号のままです。 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()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var saved = UO.FindQuantity();
        found = UO.FindType(0x0F7A, -1, "backpack");
        UO.Print("Saved: " + Convert.ToString(saved));
        UO.Print("Current: " + Convert.ToString(UO.FindQuantity()));
        return null;
    }
}

コマンドの実装

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

UO.FindQuantity() — UO.FindQuantity()

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

結果: dynamic / Any.

呼び出し時:

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

case "findquantity": return new InjectionValue(bridge.FindQuantity());

UO.FindType

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

C# のシグネチャ

string UO.FindType(object? @type);
string UO.FindType(object? @type, object? color);
string UO.FindType(object? @type, object? color, object? container);
string UO.FindType(object? @type, object? color, object? container, object? range);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? recursive);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly, object? nameMask);

クライアントが既にダウンロードしたアイテムやキャラクターの中から検索します。タイプ、色、コンテナ、距離、および追加のフィルターによって検索できます。結果は、選択したオブジェクトの 16 進文字列 serial です。空の文字列は一致しないことを意味します。このコマンド自体はコンテナを開けたり、アイテムを拾ったり、見つけたターゲットを攻撃したりしません。

引数

  • type - 1 つの graphic 項目または body 文字: 整数または数値文字列。 0x0EED - ゴールド; 0x0190 (400) - 人間の男性。 0x0191 (401) - 人間の女性。 type 0x0190 には 0x0191 は含まれません。両方の性別のキャラクターをリストするには、body="0x0190|0x0191" とともに GetMobiles を使用します。マスクはこの 1 つの引数 FindType には渡されません。負の値または 0xFFFF を指定すると、タイプ フィルタがクリアされます。
  • color - 色相/色: 整数または数値文字列。 -1 または 0xFFFF は任意の色を意味します。 0 - 具体的には hue 0。 2 引数形式の特徴: 2 番目の行「ground」、「backpack」、「my」は、色の代わりに検索領域を選択します。 「my」は、ロードされたサブコンテナのバイパスを有効にします。
  • container - 検索エリア: 「ground」 - 世界、「backpack」 - バックパックの最上位レベル、「my」 - 短い形式でロードされたサブコンテナを含むバックパック。コンテナの serial または保存されたオブジェクトの名前を渡すこともできます。コンテナは自動的には開きません。引数の拡張形式 7–14 は、指定されたコンテナーの直接の内容を反復処理し、再帰フラグを持ちません。
  • range — 4 つの引数形式の 4 番目の引数: セル内の距離。負の値には一般設定 FindDistance が使用されます。 0 は、同じセル上の一致のみを残します。コンテナ内のアイテムの場合、ワールド内でのコンテナの位置が考慮されます。
  • distance — 5 つの引数の形式での位置 4 のセル内の距離。 -1 は FindDistance を使用します。 0 以上の数値は、明示的な制限を設定します。これはルートの長さではなく、検索半径です。
  • recursive - 5 つの引数の形式の 5 番目の引数のみ: 1/true - ロードされたサブコンテナも検索します。 0/false - 最上位のみ。これは悪名ではありません。 6 引数形式に変更すると、位置 5 の意味が変わります。
  • notoriety — 引数形式 6 ~ 14 内の 5 の位置。キャラクターの評判: 0 不明、1 無実、2 味方、3 攻撃可能、4 犯罪者、5 敵、6 殺人者、7 無敵。数値、文字列「3|6」、または値の配列を渡すことができます。 -1、0xFFFF、または「any」はフィルターを無効にします。フィルターがアクティブな場合、アイテムは除外されます。それらには悪名がありません。
  • nearest - 位置 6: 1/true - 最も近い適切な文字を選択し、拡張形式では 7–14 - 許可されたタイプの最も近い候補。距離が等しい場合は、serial が使用されます。 0/false は検索順序を保持します。 6 引数形式では、項目の検索を進めるときに通常の項目検索順序が使用されます。
  • maxZ - 位置 7: 自身のキャラクターとの最大絶対 Z 高さの差。 0 - 同じ高さ。 -1 は FindVertical を奪います。コンテナ内のアイテムについては、コンテナの高さがチェックされます。階数ではありません。
  • mobileOnly — 位置 8: 1/true — キャラクターとモブのみを残します。 0/false - アイテムも許可します。引数がない場合は、false。
  • itemOnly — 位置 9: 1/true — オブジェクトのみを残します。 0/false - 文字も許可されます。不足している場合は、false。 mobileOnly=true と itemOnly=true を同時に実行すると、空の結果が得られます。
  • includeIgnored — 位置 10: 1/true — IgnoreList からのオブジェクトを許可します。 0/false - それらを除外します。デフォルトはfalseです。 IgnoreList コマンド自体は変わりません。
  • includeSelf — ポジション 11: 1/true — 候補 mobile の中で独自のキャラクターを許可します。 0/false - 除外します。デフォルトはfalseです。アイテムには影響しません。
  • aliveOnly - 位置 12: 1/true - 死亡したキャラクターを除外します。 0/false - 両方の状態を許可します。デフォルトはfalseです。このフィルターはアイテムの健全性をチェックしません。
  • visibleOnly - ポジション 13: 1/true - ポジティブチェック IsVisible が必要です。 0/false - 使用しないでください。デフォルトはfalseです。このコマンドは依然として、クライアントに既知のオブジェクトに対してのみ機能します。
  • nameMask — 位置 14: 名前のテキスト部分、大文字と小文字は区別されません。文字列「orc|troll」では、2 つの一致のいずれかが許可されます。区切り文字にはカンマやセミコロンも使用できます。空の文字列、「any」または「-1」はフィルターを削除します。これは部分文字列検索であり、正規表現や * を使用したマスクではありません。引数が欠落している場合、フィルターは無効になります。

戻り値

string: たとえば、「0x40001234」。何も見つからない場合は - ""。結果を空の文字列と比較して確認します。見つかったオブジェクトの数やオブジェクトまでのステップ数と混同しないでください。

動作

  • 1–14 引数を持つフォームがありますが、これはパラメータが任意に省略された 1 つの長い署名ではありません。正確な構文行を選択します。引数は位置的に渡されます。
  • フォーム 1–5 は通常の検索を使用し、結果のリスト FindItem/FindCount/ を更新します。フォーム 6–14 の場合は、返された文字列を直接使用します。文字フィルタリングは別の方法で行われ、これらの共有値の更新は保証されません。
  • 短い形式の場合、デフォルトでは、再帰なしで、ワールド、任意の色、距離 FindDistance が検索されます。文字列「my」は、サブコンテナを備えたバックパックを表す特別な短縮形です。
  • 引数が 6 つの形式では、まず一致する文字を探します。悪名フィルターと適切なキャラクターが存在しない場合でも、オブジェクトの検索は可能です。フォーム 7–14 は、解決された候補を結合し、追加のフィルターを適用します。
  • 引数の数が 5 つから 6 つになったことは特に重要です。再帰的引数は悪評に置き換えられ、最も近い引数が 6 番目の引数になります。位置 5 の値 1 は、再帰的走査ではなく、無害であることを意味します。

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

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

簡単な例

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

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

var result = UO.FindType(0x0EED, -1, "backpack");
UO.Print("FindType: " + Convert.ToString(result));

1。バックパックのトップレベルでゴールドを見つけ、結果の不足を処理します - 直接スクリプト

引数と実行の流れ:

  • 1: type=0x0EED - ゴールドを探しています。
  • 2: color=-1 — 任意の hue。
  • 3:container="backpack" - バックパックの直接の内容のみ。
  • gold は文字列 serial を受け取ります。 gold="" チェックは、見つからない項目と見つかった項目を区別します。 Info (金色) は情報を表示します。金は動かない。
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold == ""))
{
    UO.Print("Gold was not found in the loaded backpack");
}
else
{
    UO.Print("Gold serial: " + gold);
    UO.Info(gold);
}

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

2。ロードされたバックパックバッグ内のアイテムを再帰的に検索 - スクリプト機能

引数と実行の流れ:

  • 1: wantedType には graphic 0x0EED が含まれます。
  • 2: -1 はカラーフィルターを削除します。
  • 3: 「backpack」はルートコンテナを選択します。
  • 4: -1 は現在の FindDistance を使用します。
  • 5: recursive=1 はサブコンテナの走査を有効にします。これは 5 つの引数の形式です。サーバーがまだ送信していない閉じたバッグの内容は、この方法ではロードされません。
  • AddObject は、結果を確認した後のみ、見つかった serial を found_gold という名前で保存します。
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var recursive = 1;
    var found = UO.FindType(wantedType, -1, "backpack", -1, recursive);
    if (Truth(found != ""))
    {
        UO.AddObject("found_gold", found);
        UO.Print("Saved object: " + found);
    }
    else
    {
        UO.Print("No matching item in loaded containers");
    }

    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。 2 つの評判のいずれかに最も近いキャラクターを見つける - シナリオ クラス

引数と実行の流れ:

  • 1: body=-1 は、任意の body を許可します。
  • 2: color=-1 は任意の色を許可します。
  • 3: 「ground」はロードされたワールド オブジェクトを意味します。
  • 4: radius=10 は、距離を 10 セルに制限します。
  • 5: 評判="3|6" - 攻撃可能または殺人者。それは悪評であって、再帰的なものではありません。
  • 6: 最も近い=1 は、最も近いものを選択するように求めます。レピュテーション フィルターでは項目が除外されます。この例は情報を表示するだけであり、ターゲットを攻撃しません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var body = -1;
        var radius = 10;
        var reputation = "3|6";
        var nearest = 1;
        var found = UO.FindType(body, -1, "ground", radius, reputation, nearest);
        if (Truth(found != ""))
        {
            UO.Print("Matching mobile: " + found);
            UO.Info(found);
        }
        else
        {
            UO.Print("No matching mobile within the radius");
        }

        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。 14 個のパラメータすべて: 適切な名前を持つライブ表示Mob - 直接スクリプト

引数と実行の流れ:

  • 1 body=-1 と 2 hue=-1 は種類や色を限定しません。
  • 3scope="ground" - 世界中を検索します。 4 半径=5 - 5 セル以内。
  • 5 評判=-1 はあらゆる悪名を許可します。 6 最も近い=1 は最も近いものを選択します。
  • 7 maxZ=16 では、最大 16 単位の絶対高低差が許容されます。
  • 8 mobileOnly=1 にはアイテムが含まれません。 9 itemOnly=0 はMob を禁止しません。
  • 10 includeIgnored=0 は、IgnoreList の効果を保持します。
  • 11 includeSelf=0 はあなたのキャラクターを除外します。
  • 12 aliveOnly=1 および 13 visibleOnly=1 は、表示されている候補を生かしたままにします。
  • 14 names="orc|troll" には、クライアントがすでに知っている名前の部分文字列 orc または troll が必要です。すべてのフィルターは同時に実行する必要があります。
var body = -1;
var hue = -1;
var scope = "ground";
var radius = 5;
var reputation = -1;
var nearest = 1;
var maxZ = 16;
var mobileOnly = 1;
var itemOnly = 0;
var includeIgnored = 0;
var includeSelf = 0;
var aliveOnly = 1;
var visibleOnly = 1;
var names = "orc|troll";
var found = UO.FindType(body, hue, scope, radius, reputation, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, names);
if (Truth(found == ""))
{
    UO.Print("No loaded mobile satisfies every filter");
}
else
{
    UO.Print("Selected serial: " + found);
}

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

5。バックパック検索の短縮形 - スクリプト機能

引数と実行の流れ:

  • 1 wantedType=0x0EED はゴールドです。
  • 2 "my" は 2 つの引数形式の特別な文字列です。バックパックを選択し、再帰と任意の色を含みます。 Here the second argument is not hue.
  • 最上位の場合は、「my」の代わりに「backpack」を渡します。世界のために - 「ground」。逆に2番目の番号はカラーフィルターになります。
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var found = UO.FindType(wantedType, "my");
    if (Truth(found != ""))
    {
        UO.Print("Found in backpack or a loaded subcontainer: " + found);
    }
    else
    {
        UO.Print("Nothing found");
    }

    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.FindType(type) — UO.FindType(Any)

引数: type (Any)

結果: string / String.

呼び出し時:

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

public string FindType(InjectionValue type)

            => FindType(ResolveType(type));

UO.FindType(type, color) — UO.FindType(Any,Any)

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

結果: string / String.

呼び出し時:

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

public string FindType(InjectionValue type, InjectionValue color)

        {

            if (color.Kind == InjectionValueKind.String

                && (color.String.Equals("ground", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("backpack", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("my", StringComparison.OrdinalIgnoreCase)))

            {

                return FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase));

            }



            return FindType(ResolveType(type), NumberConversions.ToInt(color), -1, -1, false);

        }

UO.FindType(type, color, container) — UO.FindType(Any,Any,Any)

引数: type (Any), color (Any), container (Any)

結果: string / String.

呼び出し時:

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

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container)

            => FindType(type, color, container, new InjectionValue(-1));

UO.FindType(type, color, container, range) — UO.FindType(Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), range (Any)

結果: string / String.

呼び出し時:

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

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)

        {

            if (container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase))

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true);

            else

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), false);

        }

UO.FindType(type, color, container, distance, recursive) — UO.FindType(Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), recursive (Any)

結果: string / String.

呼び出し時:

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

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

values =>

                new InjectionValue(FindType(values[0], values[1], values[2], values[3], values[4]))

UO.FindType(type, color, container, distance, notoriety, nearest) — UO.FindType(Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any)

結果: string / String.

呼び出し時:

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

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

values =>

                CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5])

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ) — UO.FindType(Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, nameMask) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any), nameMask (Any)

結果: string / String.

呼び出し時:

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

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

values => CompactFindTypeExtended(values)

UO.FindTypeEx

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

C# のシグネチャ

int UO.FindTypeEx(object? objType, object? color, object? container, object? inSub);

コンテナまたは地面で 1 つのグラフィックと色を検索し、見つかった 1 つ ID を返します。

引数

  • objType - グラフィック/body、serial アイテムではありません。 0..65534 - 特定のグラフィックス。 -1 または 0xFFFF - 任意。このクライアントの他のネガティブな int もフィルターを削除します。
  • color — アイテムの数ではなく色相。 0 - 塗装されていないオブジェクト。 -1 または 0xFFFF - 任意の hue。他のネガintもカラーフィルターを取り外します。
  • container - グランド: UO.Ground()、0、-1、0xFFFFFFFF または文字列 ground。バックパック: 紐 backpack またはその serial。 10 進数/16 進数 serial および名前 AddObject が受け入れられます。 my は、装備や付属のバッグを含むキャラクターのインベントリ全体を選択します。不明な名前を使用するとスクリプト エラーが発生します。結果の serial を確認します。明示的な 0 はグランドを選択します。 ground/backpack という名前は、コマンド ファミリによって異なる数値指定よりも明確です。
  • inSub - 必須 true/false (1/0)。 false - 特定のコンテナの直接の内容。 true – ネストされたバッグもロードされました。地球にとって、再帰は何も変わりません。 my はすでにすべてのキャラクターのインベントリを選択しています。

戻り値

int: serial ローカル走査順序で最初に一致します。一致するものがない場合は、0。 graphic、カウント、配列、またはbool ではありません。結果 == true または結果 == 1 ではなく、結果 != 0 を確認してください。スタックは 1 つのオブジェクトとみなされます。モバイル - 1 つのオブジェクトと 1 つのユニット。順序は近さを意味するものではなく、検索間で保証されません。

動作

  • 4 つの位置引数がすべて必要です。オプションの引数はありません。
  • Earth はこのスクリプトの FindDistance と FindVertical を使用し、self を除外し、適切なアイテムとモバイルを含めます。特定のコンテナ内の検索には、これらの距離/高さの制限は適用されません。どちらの場合も、Ignore と破壊されたオブジェクトは除外されます。
  • バイパスの前に、FindItem、FindCount、FindFullQuantity、GetFoundItems はクリアされます。次に、それらはこの検索に関連付けられます。空の検索では、ゼロと空の配列が残ります。 FindFullQuantityは、モバイルの場合、アイテムの最大(1、金額)を1までにまとめます。 FindQuantity は現在の数量 FindItem を読み取ります。別の検索後も前のリストが必要な場合は、GetFoundItems を保存します。
  • Bridge はロードされたアイテムを 1 回通過し、陸地が選択されている場合は Mobile を通過します。タイプ、色、および少なくとも 1 つのコンテナが一致する必要があります。複数の条件を満たしている場合でも、1 つのオブジェクトは 1 回としてカウントされます。組み合わせごとに世界を完全に横断することを繰り返すことはありません。
  • クライアントが受信したデータのみが読み取られます。コンテナが開かず、マップセルがロードされず、転送も行われません。結果が空であっても、サーバー上のチェストが空であることは証明されません。アクティブなリンクが必要な場合は、Connected を確認してください。検索自体がローカル状態を読み取ります。
  • 最初のローカル一致はここに保存されます。不明な名前では検索がバックパックに切り替わりません。 Ground は 0 も受け入れます。あなたのFindDistanceデフォルト18、最大255。以上がこのお客様の特徴です。

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

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

簡単な例

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

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

var result = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print("FindTypeEx: " + Convert.ToString(result));

1。直接のバックパックの内容 - 直接のスクリプト

引数と実行の流れ:

  • 0x0EED - ゴールド、-1 - 任意の hue; backpack/false にはネストされたバッグは含まれません。 3 行は、0x を除いた 16 進数の最初の ID、オブジェクトの数、および 1 の合計を出力します。 20 と 50 の 2 つのスタック: オブジェクト 2、ユニット 70。
var item = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print(Hex(item));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

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

2。常時地上捜索機能 - スクリプト機能

引数と実行の流れ:

  • 半径=5 と高さ=10 はFindGoldNearSelf 内で動作します。最終的には、リターンまたはエラーの場合でも両方の制限を復元します。この関数は serial gold または 0 を返します。出力前に != 0 を主にチェックします。
return  RunScenario();
 object? RunScenario()
{
    var item = FindGoldNearSelf(5, 10);
    if (Truth(item != 0))
    {
        UO.Print(Hex(item));
    }
    else
    {
        UO.Print("Empty");
    }

    return null;
}

dynamic FindGoldNearSelf(dynamic radius, dynamic height)
{
    var oldDistance = UO.FindDistance();
    var oldVertical = UO.FindVertical();
    try
    {
        UO.FindDistance(radius);
        UO.FindVertical(height);
        return UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
    }
    finally
    {
        UO.FindDistance(oldDistance);
        UO.FindVertical(oldVertical);
    }
}

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

3。コンテナ名とネストされたバッグ - スクリプト クラス

引数と実行の流れ:

  • GetSerial は backpack を許可します。ゼロをチェックすると、ランダムなグラウンド選択が防止されます。 AddObject は ID を search_bag として保存します。 trueには入れ子バッグが含まれます。 GetFoundItems は別の配列を保存します。 IsObjectExists は 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 bag = UO.GetSerial("backpack");
        if (Truth(bag != "0x00000000"))
        {
            UO.AddObject("search_bag", bag);
            UO.FindTypeEx(0x0EED, -1, "search_bag", true);
            var items = UO.GetFoundItems();
            foreach (var item in items)
            {
                if (Truth(UO.IsObjectExists(item)))
                {
                    UO.Print(Hex(item));
                }
            }
        }

        return null;
    }

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

コマンドの実装

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

UO.FindTypeEx(objType, color, container, inSub) — UO.FindTypeEx(Any,Any,Any,Any)

引数: objType (Any), color (Any), container (Any), inSub (Any)

結果: int / Integer.

呼び出し時:

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

case "findtypeex": return new InjectionValue(bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0));

UO.FindTypesArrayEx

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

C# のシグネチャ

int UO.FindTypesArrayEx(object? objTypes, object? colors, object? containers, object? inSub);

1 回の走査で、さまざまなグラフィック、色、コンテナを検索し、見つかったもの ID を返します。完全なリストは GetFoundItems を介して読み取られます。

引数

  • objTypes - グラフィック/body、serial アイテムではありません。 0..65534 - 特定のグラフィックス。 -1 または 0xFFFF - 任意。このクライアントの他のネガティブな int もフィルターを削除します。
  • colors — アイテムの数ではなく色相。 0 - 塗装されていないオブジェクト。 -1 または 0xFFFF - 任意の hue。他のネガintもカラーフィルターを取り外します。
  • containers - グランド: UO.Ground()、0、-1、0xFFFFFFFF または文字列 ground。バックパック: 紐 backpack またはその serial。 10 進数/16 進数 serial および名前 AddObject が受け入れられます。 my は、装備や付属のバッグを含むキャラクターのインベントリ全体を選択します。不明な名前を使用するとスクリプト エラーが発生します。結果の serial を確認します。明示的な 0 はグランドを選択します。 ground/backpack という名前は、コマンド ファミリによって異なる数値指定よりも明確です。
  • inSub - 必須 true/false (1/0)。 false - 特定のコンテナの直接の内容。 true – ネストされたバッグもロードされました。地球にとって、再帰は何も変わりません。 my はすでにすべてのキャラクターのインベントリを選択しています。

戻り値

int: serial ローカル走査順序で最初に一致します。一致するものがない場合は、0。 graphic、カウント、配列、またはbool ではありません。結果 == true または結果 == 1 ではなく、結果 != 0 を確認してください。スタックは 1 つのオブジェクトとみなされます。モバイル - 1 つのオブジェクトと 1 つのユニット。順序は近さを意味するものではなく、検索間で保証されません。

動作

  • 配列が渡されます。単一の値も 1 つの要素の配列として扱われます。変数値[1]を宣言すると、インデックス0と1が作成され、それぞれを埋めます。タイプと色は独立したオプションであり、インデックスによるペアではありません。任意の位置の「任意の」マスク、またはタイプ/色の空の配列は、このフィルタを削除します。コンテナの空の配列がキャラクターのインベントリを選択します。コンテナの繰り返しや交差は ID と重複しません。
  • 4 つの位置引数がすべて必要です。オプションの引数はありません。
  • Earth はこのスクリプトの FindDistance と FindVertical を使用し、self を除外し、適切なアイテムとモバイルを含めます。特定のコンテナ内の検索には、これらの距離/高さの制限は適用されません。どちらの場合も、Ignore と破壊されたオブジェクトは除外されます。
  • バイパスの前に、FindItem、FindCount、FindFullQuantity、GetFoundItems はクリアされます。次に、それらはこの検索に関連付けられます。空の検索では、ゼロと空の配列が残ります。 FindFullQuantityは、モバイルの場合、アイテムの最大(1、金額)を1までにまとめます。 FindQuantity は現在の数量 FindItem を読み取ります。別の検索後も前のリストが必要な場合は、GetFoundItems を保存します。
  • Bridge はロードされたアイテムを 1 回通過し、陸地が選択されている場合は Mobile を通過します。タイプ、色、および少なくとも 1 つのコンテナが一致する必要があります。複数の条件を満たしている場合でも、1 つのオブジェクトは 1 回としてカウントされます。組み合わせごとに世界を完全に横断することを繰り返すことはありません。
  • クライアントが受信したデータのみが読み取られます。コンテナが開かず、マップセルがロードされず、転送も行われません。結果が空であっても、サーバー上のチェストが空であることは証明されません。アクティブなリンクが必要な場合は、Connected を確認してください。検索自体がローカル状態を読み取ります。
  • 最初のローカル一致はここに保存されます。不明な名前では検索がバックパックに切り替わりません。 Ground は 0 も受け入れます。あなたのFindDistanceデフォルト18、最大255。以上がこのお客様の特徴です。

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

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

簡単な例

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

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

var result = UO.FindTypesArrayEx(new[] { 0x0EED }, new[] { -1 }, new[] { "backpack" }, false);
UO.Print("FindTypesArrayEx: " + Convert.ToString(result));

1。地上の 2 つのグラフ - 直接スクリプト

引数と実行の流れ:

  • タイプにはゴールド0x0EEDとブラックパール0x0F7Aが含まれます。 1 つの色=-1 - 任意の hue、1 つの Ground - 地球。 falseは地球上では何も変わりません。現在の検索制限が適用されます。 ID、オブジェクトの数とユニットの合計が出力されます。
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = 0x0EED;
types[1] = 0x0F7A;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
var first = UO.FindTypesArrayEx(types, colors, containers, false);
UO.Print(Hex(first));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

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

2。バックパックと地面の金 - スクリプト機能

引数と実行の流れ:

  • タイプ - ゴールドのみ。色 - 任意の hue。コンテナ - backpack と陸地。 true にはネストされたバッグが含まれます。両方の領域のオブジェクト/スタックとユニットが出力され、各オブジェクトは 1 回カウントされます。
return  RunScenario();
 object? RunScenario()
{
    dynamic[] types = new dynamic[checked((int)(0) + 1)];
    types[0] = 0x0EED;
    dynamic[] colors = new dynamic[checked((int)(0) + 1)];
    colors[0] = -1;
    dynamic[] containers = new dynamic[checked((int)(1) + 1)];
    containers[0] = "backpack";
    containers[1] = UO.Ground();
    UO.FindTypesArrayEx(types, colors, containers, true);
    UO.Print(Convert.ToString(UO.FindCount()));
    UO.Print(Convert.ToString(UO.FindFullQuantity()));
    return null;
}

3。結果リストを含む完全な関数 - スクリプト クラス

引数と実行の流れ:

  • SearchTypesIn(container,firstType,secondType) は Array を返しますが、組み込みコマンドは単一の int ID を返します。上記の完全な関数は配列を埋め、再帰的に検索し、すぐに GetFoundItems をコピーします。 Mainは格納されている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 items = SearchTypesIn("backpack", 0x0EED, 0x0F7A);
        foreach (var item in items)
        {
            if (Truth(UO.IsObjectExists(item)))
            {
                UO.Print(Hex(item));
            }
        }

        return null;
    }

    dynamic SearchTypesIn(dynamic container, dynamic firstType, dynamic secondType)
    {
        dynamic[] types = new dynamic[checked((int)(1) + 1)];
        types[0] = firstType;
        types[1] = secondType;
        dynamic[] colors = new dynamic[checked((int)(0) + 1)];
        colors[0] = -1;
        dynamic[] containers = new dynamic[checked((int)(0) + 1)];
        containers[0] = container;
        UO.FindTypesArrayEx(types, colors, containers, true);
        return UO.GetFoundItems();
    }

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

コマンドの実装

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

UO.FindTypesArrayEx(objTypes, colors, containers, inSub) — UO.FindTypesArrayEx(Any,Any,Any,Any)

引数: objTypes (Any), colors (Any), containers (Any), inSub (Any)

結果: int / Integer.

呼び出し時:

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

case "findtypesarrayex":

                    InjectionValue[] searchContainers = arguments[2].Kind == InjectionValueKind.Array

                        ? arguments[2].Array : new[] { arguments[2] };

                    return new InjectionValue(bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array

                        ? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1),

                        searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0));

UO.FindVertical

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

C# のシグネチャ

int UO.FindVertical();
void UO.FindVertical(object? value);

デフォルトの検索で許可される高低差を読み取るか変更します。

引数

  • value - オプションのint。引数なし - 読み取り;値 — 設定。値は 0..120 の範囲に制限されます。マイナスはノーリミットではなく0になります。新しいランタイム: 2;復元された状態には異なる値が含まれる場合があります。小数はゼロに切り捨てられます。数値文字列 double/0x も使用できます。暗黙的な変換を回避するには、int を使用します。

戻り値

引数なし: int - 現在の制限 (ワールド単位の差 Z)、ID、オブジェクトの数、または bool が見つかりません。 0 は失敗ではなくゼロ限界を意味します。値あり: void - 値なし。これはtrue/false や古い設定ではありません。インストールしたら、FindVertical() を読み取って、保存されている値を確認します。

動作

  • 高さ: abs(object.Z - player.Z)、両方向、境界線を含む。 0 には、同じ Z のみが適しています。これは階数や水平マスの数ではありません。
  • 設定は現在のスクリプトのランタイムに保存されます。そのプロシージャでは単一の値が使用されます。独立したランタイムには個別の設定があります。読み取りと書き込みでは、検索、FindItem/FindCount/GetFoundItems のクリア、パケットの送信、キャラクターの移動、または遠くのオブジェクトのロードはトリガーされません。
  • FindTypeEx と FindTypesArrayEx は、地上で探索するときにこれらの制限を使用しますが、コンテナ内では使用しません。残りのフィルターは、type、hue、Ignore、およびロードされたオブジェクトの存在です。 FindAtCoord は両方の制限を無視します。拡張コマンドでは、明示的な距離/maxZ で設定をオーバーライドできます。このようなパラメータの -1 は、設定自体を -1 に設定するのではなく、設定を取得することを意味します。 FindList はコンテナを検索するときに Z もフィルタリングします。指定されたコンテナ例外は適用されません。
  • 一時的に検索する前に、値を保存して、Finally に戻します。インストールは自動的にはキャンセルされません。最後に、正常に完了し、スクリプト エラーが捕捉された場合に動作します。非常停止をクリーニング機構として使用することはできません。

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

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

簡単な例

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

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

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

1。読み取り、設定、および範囲制限 - 直接スクリプト

引数と実行の流れ:

  • 前回は実際の設定を保存します。 value:=10 は通常の制限を設定します。 1000は120までのリミットを示します。 Print は、引数なしの別の呼び出しとして結果を読み取ります。ようやく以前に戻ります。
var previous = UO.FindVertical();
try
{
    UO.FindVertical(10);
    UO.Print(Convert.ToString(UO.FindVertical()));
    UO.FindVertical(1000);
    UO.Print(Convert.ToString(UO.FindVertical()));
}
finally
{
    UO.FindVertical(previous);
}

2。 Temporary Ground Search - Script Function

引数と実行の流れ:

  • 前に呼び出しコードの設定を保存します。 10 は FindVertical のみを変更します。 2 番目の制限は変わりません。 0x0EED - ゴールドグラフィック、-1 - 任意の hue、Container=-1 - ワールド、false - コンテナ再帰なし。 ID - 1 serial; != 0 は空き状況を確認します。 FindCount はオブジェクト/スタック全体をカウントします。最後に、結果のリストではなく、設定を復元します。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindVertical();
    try
    {
        UO.FindVertical(10);
        var id = UO.FindTypeEx(0x0EED, -1, -1, false);
        if (Truth(id != 0))
        {
            UO.Print(Hex(id) + ":" + Convert.ToString(UO.FindCount()));
        }
        else
        {
            UO.Print("0");
        }
    }
    finally
    {
        UO.FindVertical(previous);
    }

    return null;
}

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

3。フル機能 CountGroundInRange - スクリプトクラス

引数と実行の流れ:

  • CountGroundInRange(graphic, 半径, 高さ) は両方の制限を保存し、半径=5 と高さ=10 を設定し、graphic=0x0EED を探して、FindCount() を返します。スタックは 1 つのオブジェクトとみなされます。完全な関数は Main の後に与えられます。最終的には、リターンで終了する場合でも両方の制限を復元します。検索結果は引き続き利用可能です。
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 count = CountGroundInRange(0x0EED, 5, 10);
        UO.Print(Convert.ToString(count));
        return null;
    }

    dynamic CountGroundInRange(dynamic graphic, dynamic radius, dynamic height)
    {
        var oldDistance = UO.FindDistance();
        var oldVertical = UO.FindVertical();
        try
        {
            UO.FindDistance(radius);
            UO.FindVertical(height);
            UO.FindTypeEx(graphic, -1, -1, false);
            return UO.FindCount();
        }
        finally
        {
            UO.FindDistance(oldDistance);
            UO.FindVertical(oldVertical);
        }
    }
}

コマンドの実装

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

UO.FindVertical() — UO.FindVertical()

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

結果: int / Integer.

呼び出し時:

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

case "findvertical":

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

                    return new InjectionValue(bridge.GetFindVertical());

UO.FindVertical(value) — UO.FindVertical(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

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

case "findvertical":

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

                    return new InjectionValue(bridge.GetFindVertical());

UO.GetFindedList

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

C# のシグネチャ

dynamic UO.GetFindedList(object? userList);

最後の通常検索のリスト ID のコピーを作成します。

引数

  • userList — 必須の互換性引数。現在の実装では、このリストは設定も変更もされません。リストはコマンドの結果として返されます。 0を通過できます。引数のないフォームの場合は、GetFoundItems を使用します。

戻り値

配列は、最後の検索順序での別の配列serial/IDです。一致するものがなかった場合は空の配列。 graphic、hue、または金額は含まれません。返された配列を変更しても、保存された検索リストは編集されません。

動作

  • クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
  • 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
  • データは、このスクリプトの最後の通常検索に属します。 FindType と 1–5 引数、FindTypeEx、Count/CountEx/CountGround は結果を置き換えます。このスナップショットを変更するために、高度なフィルター処理された文字コマンドは必要ありません。
  • 一致しない新しい検索では、FindItem、FindCount、FindFullQuantity がクリアされ、GetFoundItems がクリアされます。結果を単独で読み取るだけでは、新しい検索はトリガーされません。

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

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

簡単な例

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

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

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

1。リスト サイズの取得 - 直接スクリプト

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。 UserList=0 は出力パラメータではありません。
  • 長さ - レコード数/ID。これはスタック内の Amount の量ではありません。空のリストは 0 を与えます。
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
UO.Print(Convert.ToString(ArrayLength(items)));

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

2。見つかったすべてのIDをトラバース - スクリプト関数

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。 UserList=0 は出力パラメータではありません。
  • items[i] — 数値 serial。 16 進数は出力のみに使用されます。ループは最後のインデックスにはアクセスしません。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFindedList(0);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3。読み取る前に最初のレコードを確認する - スクリプト クラス

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。 UserList=0 は出力パラメータではありません。
  • スナップショット内のレコードと現在のオブジェクトの存在という 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()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFindedList(0);
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        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;
}

コマンドの実装

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

UO.GetFindedList(userList) — UO.GetFindedList(Any)

引数: userList (Any)

結果: dynamic / Any.

呼び出し時:

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

case "getfindedlist":

                    return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetFoundItems

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

C# のシグネチャ

dynamic UO.GetFoundItems();

最後の通常検索のリスト ID のコピーを作成します。

引数

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

戻り値

配列は、最後の検索順序での別の配列serial/IDです。一致するものがなかった場合は空の配列。 graphic、hue、または金額は含まれません。返された配列を変更しても、保存された検索リストは編集されません。

動作

  • クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
  • 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
  • データは、このスクリプトの最後の通常検索に属します。 FindType と 1–5 引数、FindTypeEx、Count/CountEx/CountGround は結果を置き換えます。このスナップショットを変更するために、高度なフィルター処理された文字コマンドは必要ありません。
  • 一致しない新しい検索では、FindItem、FindCount、FindFullQuantity がクリアされ、GetFoundItems がクリアされます。結果を単独で読み取るだけでは、新しい検索はトリガーされません。

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

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

簡単な例

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

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

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

1。リスト サイズの取得 - 直接スクリプト

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。パラメータはありません。
  • 長さ - レコード数/ID。これはスタック内の Amount の量ではありません。空のリストは 0 を与えます。
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
UO.Print(Convert.ToString(ArrayLength(items)));

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

2。見つかったすべてのIDをトラバース - スクリプト関数

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。パラメータはありません。
  • items[i] — 数値 serial。 16 進数は出力のみに使用されます。ループは最後のインデックスにはアクセスしません。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFoundItems();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3。読み取る前に最初のレコードを確認する - スクリプト クラス

引数と実行の流れ:

  • バックパックのゴールド用の通常のFindTypeは事前に作成されています。パラメータはありません。
  • スナップショット内のレコードと現在のオブジェクトの存在という 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()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFoundItems();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        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;
}

コマンドの実装

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

UO.GetFoundItems() — UO.GetFoundItems()

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

結果: dynamic / Any.

呼び出し時:

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

case "getfounditems":

                    return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetIgnoreList

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

C# のシグネチャ

dynamic UO.GetIgnoreList();

Ignore を介して serial フィルターに追加された特定の ID を表示します。どのアイテムがすでに処理され、再検索から除外されているかを確認するのに役立ちます。 AddIgnoreList の名前付きルール type/hue は、この配列には含まれません。

引数

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

戻り値

Ignore リストの配列 - serial を数値 ID の昇順で並べます。リストが空の場合は空の配列。 ID はもうこの世に存在しないかもしれません。これらは検索ルールであり、表示される項目のリストではありません。

動作

  • クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
  • 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
  • クライアントでは、このセットはプロファイル スクリプトの一般的な状態に属します。配列はコピーです。IgnoreOff(serial) は 1 つの例外をクリアし、IgnoreReset はすべての serial をクリアします。選択したルール type/hue は無効になりません。 SelectIgnoreList、DeleteIgnoreList、または ClearIgnoreList が必要です。引数のない GetContent/GetEquipment および GetWorldItems は、このフィルター自体を適用しません。

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

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

簡単な例

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

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

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

1。リスト サイズの取得 - 直接スクリプト

引数と実行の流れ:

  • パラメータはありません。明らかな serial 例外のスナップショットが読み取られます。空の配列は、名前付きルール type/hue が欠落していることを意味するものではありません。
  • 長さ - レコード数/ID。これはスタック内の Amount の量ではありません。空のリストは 0 を与えます。
var items = UO.GetIgnoreList();
UO.Print(Convert.ToString(ArrayLength(items)));

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

2。見つかったすべてのIDをトラバース - スクリプト関数

引数と実行の流れ:

  • パラメータはありません。明らかな serial 例外のスナップショットが読み取られます。空の配列は、名前付きルール type/hue が欠落していることを意味するものではありません。
  • items[i] — 数値 serial。 16 進数は出力のみに使用されます。ループは最後のインデックスにはアクセスしません。
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetIgnoreList();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

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

3。読み取る前に最初のレコードを確認する - スクリプト クラス

引数と実行の流れ:

  • パラメータはありません。明らかな serial 例外のスナップショットが読み取られます。空の配列は、名前付きルール type/hue が欠落していることを意味するものではありません。
  • スナップショット内のレコードと現在のオブジェクトの存在という 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()
    {
        var items = UO.GetIgnoreList();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        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;
}

コマンドの実装

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

UO.GetIgnoreList() — UO.GetIgnoreList()

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

結果: dynamic / Any.

呼び出し時:

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

case "getignorelist":

                    return new InjectionValue(bridge.GetIgnoreList().Select(value => new InjectionValue(value)).ToArray());

UO.GetWorldItems

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

C# のシグネチャ

dynamic UO.GetWorldItems();
dynamic UO.GetWorldItems(object? @type);
dynamic UO.GetWorldItems(object? @type, object? color);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest, object? maxZ);

ワールド アイテムまたは選択したコンテナの配列 ID を返します。

引数

  • type - フィルタリングされた形式の最初の引数: graphic/type、-1 または 0xFFFF - 任意。ここはserialではありません。すべての引数を指定しない場合は、フィルタリングのない別のフォームが使用されます。
  • color - 色相;デフォルト - 1、任意の色。 0xFFFF は、任意の hue も受け入れます。
  • distance — X/Y に沿ったセルの半径。負の値または不在の場合は FindDistance を使用します。 0 は同じセルを意味します。コンテナの場合、内部の X/Y ではなく、コンテナまでの距離がチェックされます。
  • container - デフォルトはグランドです。 ground、数値0/1 とその弦はグラウンドされています。 backpack、my、および数値 -1 はバックパックの直接の内容です。コンテナのシリアル/16 進文字列/エイリアス - その直接の内容。 self は、親が文字である項目を選択します。未知の名前と行方不明のバックパックは、土地ではなく空の配列を与えます。
  • nearest — デフォルトの false。 true は距離で並べ替え、次に数値で並べ替えます serial。 1 つのコンテナーの場合、すべての結果の距離は同じです。
  • maxZ — self に対する許容高さの差。負の値または不在の場合は FindVertical を使用します。 0 には同じ高さが必要です。コンテナでは、コンテナ自体の高さが考慮されます。

戻り値

配列 - type、座標、または量ではなく、serial/ID 項目。一致するものがない空の配列。 GetWorldItems() は、Ignore/range/height を指定せずに、コンテナの外にロードされたすべてのアイテムを返します。 GetWorldItems(type,...) は、リストされたフィルターと Ignore を使用します。 NPC/選手はどのフォームにも含まれません。

動作

  • クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
  • 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
  • 写真FindItem/FindCount/GetFoundItemsは変わりません。チームは容器を開けたり、封入された袋を調べたりすることはありません。
  • 制限を無効にするには、-1 だけでは十分ではありません。これは現在の設定の選択であり、無限の半径ではありません。希望する非負の距離/maxZ を指定するか、読み込まれたすべての土地アイテムに対して引数なしのフォームを使用します。

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

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

簡単な例

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

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

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

1。ロードされたすべての土地アイテムを数える - 直接スクリプト

引数と実行の流れ:

  • パラメーターなし: フィルターのない特別なフォーム。
  • 結果は、すべてのマップまたはサーバー アイテムを意味するわけではありません。 Ignore はここでは適用されません。
var items = UO.GetWorldItems();
UO.Print(Convert.ToString(ArrayLength(items)));

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

2。目的のタイプと色の最も近いスタックを見つける - スクリプト関数

引数と実行の流れ:

  • type=0x0EED — ゴールド、カラー=-1 — 任意;距離=5、コンテナ=ground、最も近い=true、maxZ=3。
  • 最初のエントリは、最もよく一致する無視できない項目です。距離によって壁が確認されたり、アクセシビリティが確保されたりすることはありません。
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetWorldItems(0x0EED, -1, 5, "ground", true, 3);
    if (Truth(ArrayLength(items) > 0))
    {
        var item = items[0];
        if (Truth(UO.Exists(item)))
        {
            UO.Print("Nearest ID: 0x" + Hex(item));
        }
    }

    return null;
}

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

3。バックパックの直接の内容をカウントする - スクリプトクラス

引数と実行の流れ:

  • 任意の type/色; my はバックパックを選択します。距離 20 と差 Z 255 はコンテナを指します。 false は元の順序を保持します。
  • スタック内のユニットやネストされたバッグの内容ではなく、直接のアイテムがカウントされます。バックパックがない場合は、空の配列が返されます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetWorldItems(-1, -1, 20, "my", false, 255);
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

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

コマンドの実装

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

UO.GetWorldItems() — UO.GetWorldItems()

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

結果: dynamic / Any.

呼び出し時:

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

case "getworlditems":

                    return new InjectionValue(bridge.GetWorldItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetWorldItems(type) — UO.GetWorldItems(Any)

引数: type (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color) — UO.GetWorldItems(Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance) — UO.GetWorldItems(Any,Any,Any)

引数: type (Any), color (Any), distance (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container) — UO.GetWorldItems(Any,Any,Any,Any)

引数: type (Any), color (Any), distance (Any), container (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest) — UO.GetWorldItems(Any,Any,Any,Any,Any)

引数: type (Any), color (Any), distance (Any), container (Any), nearest (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest, maxZ) — UO.GetWorldItems(Any,Any,Any,Any,Any,Any)

引数: type (Any), color (Any), distance (Any), container (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetWorldItems(values)

UO.Ignore

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

C# のシグネチャ

void UO.Ignore(object? objID);
void UO.Ignore(object? id, object? stateValue);

通常の検索無視リストに serial を追加または削除します。

引数

  • id — シリアル/ID オブジェクト: int、数値/16 進文字列、または確立されたエイリアス (例: "lasttarget")。これはgraphic/typeではありません。アクションを実行する前に、ロードされたオブジェクトを確認してください。
  • objID — シリアル/ID オブジェクト: int、数値/16 進文字列、または確立されたエイリアス (例: "lasttarget")。これはgraphic/typeではありません。アクションを実行する前に、ロードされたオブジェクトを確認してください。
  • stateValue — オプションのモード。数字 0 がオフになり、ゼロ以外の場合はオンになります。 「off」、「false」(大文字と小文字を区別しない)、および正確に「0」の行はオフになります。他の行には以下が含まれます。モード引数なし - 追加します。

戻り値

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

動作

  • Ignore(id) は、bridge.Ignore(serial) を呼び出し、serial を State.IgnoredSerials に追加します。 Ignore(id,stateValue) ​​は、Ignore または無視を選択します。空でない文字列は true とみなされません。リストされたエスケープ ワードは個別に処理されます。
  • これは検索フィルターであり、オブジェクトを非表示にしたり削除したりするものではありません。タイプ AddIgnoreList の名前付きフィルターは個別に保存されます。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.Ignore");
UO.Ignore("lasttarget");

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

引数と実行の流れ:

  • 通常の検索無視リストに serial を追加または削除します。
UO.Ignore("lasttarget");

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

引数と実行の流れ:

  • Ignore(id) は、bridge.Ignore(serial) を呼び出し、serial を State.IgnoredSerials に追加します。 Ignore(id,stateValue) ​​は、Ignore または無視を選択します。空でない文字列は true とみなされません。リストされたエスケープ ワードは個別に処理されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Ignore("lasttarget", "off");
    return null;
}

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

引数と実行の流れ:

  • これは検索フィルターであり、オブジェクトを非表示にしたり削除したりするものではありません。タイプ AddIgnoreList の名前付きフィルターは個別に保存されます。
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.Ignore(id, 1);
            UO.Print(UO.GetIgnoreList());
            UO.Ignore(id, 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.Ignore(objID) — UO.Ignore(Any)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

case "ignore": bridge.Ignore(Arg(0)); return InjectionValue.Unit;

UO.Ignore(objID) — UO.Ignore(Integer)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

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

UO.Ignore(objID) — UO.Ignore(String)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

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

UO.Ignore(id, stateValue) — UO.Ignore(Any,Any)

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

結果: void / Unit.

呼び出し時:

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

public void Ignore(InjectionValue id, InjectionValue stateValue)

        {

            int serial = GetObject(id);

            bool enabled = stateValue.Kind != InjectionValueKind.String

                ? NumberConversions.ToInt(stateValue) != 0

                : !stateValue.String.Equals("off", StringComparison.OrdinalIgnoreCase)

                    && !stateValue.String.Equals("false", StringComparison.OrdinalIgnoreCase)

                    && stateValue.String != "0";



            if (enabled)

                bridge.Ignore(serial);

            else

                bridge.Unignore(serial);

        }

UO.IgnoreOff

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

C# のシグネチャ

void UO.IgnoreOff(object? objID);

通常の無視リストから 1 つの serial を削除します。

引数

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

戻り値

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

動作

  • Bridge.Unignore は、State.IgnoredSerials から ID を削除します。他の serial および名前付きの AddIgnoreList フィルターはクリアされません。アイテムは世界から削除されません。
  • 検索フィルターのローカル変更。パケットは送信されません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 通常の無視リストから 1 つの serial を削除します。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.IgnoreOff(id);
}

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

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

引数と実行の流れ:

  • Bridge.Unignore は、State.IgnoredSerials から ID を削除します。他の serial および名前付きの AddIgnoreList フィルターはクリアされません。アイテムは世界から削除されません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.IgnoreOff(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()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

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

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

コマンドの実装

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

UO.IgnoreOff(objID) — UO.IgnoreOff(Any)

引数: objID (Any)

結果: void / Unit.

呼び出し時:

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

case "ignoreoff": bridge.Unignore(Arg(0)); return InjectionValue.Unit;

UO.IgnoreReset

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

C# のシグネチャ

void UO.IgnoreReset();

無視されたserialの通常リストをクリアします。

引数

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

戻り値

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

動作

  • Bridge.IgnoreReset は State.IgnoredSerials.Clear を呼び出します。ブリッジ セッション全体の別の検索によって追加されたものも含め、このフィルターからすべての serial を削除します。
  • AddIgnoreList という名前のクリア、オブジェクトの削除、または FindType の結果のリセットは行いません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 無視されたserialの通常リストをクリアします。
UO.IgnoreReset();

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

引数と実行の流れ:

  • Bridge.IgnoreReset は State.IgnoredSerials.Clear を呼び出します。ブリッジ セッション全体の別の検索によって追加されたものも含め、このフィルターからすべての serial を削除します。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GetIgnoreList());
    UO.IgnoreReset();
    return null;
}

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

引数と実行の流れ:

  • AddIgnoreList という名前のクリア、オブジェクトの削除、または FindType の結果のリセットは行いません。
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.Ignore("lasttarget");
        UO.IgnoreReset();
        UO.Print(UO.GetIgnoreList());
        return null;
    }
}

コマンドの実装

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

UO.IgnoreReset() — UO.IgnoreReset()

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

結果: void / Unit.

呼び出し時:

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

public void IgnoreReset() => bridge.IgnoreReset();

UO.InfoFindList

C# シグネチャ

string UO.InfoFindList();

動作と戻り値

呼び出し元によって表示が変わります。ゲーム内チャットのコマンドは、項目、値、Ctrl+C、スクロールを備えた表を開きます。通常の C# スクリプトは、ゲーム画面が開いていても、ウィンドウやターゲットなしで文字列を受け取ります。取得できるのはクライアントが知る情報です。

引数なしの Info と InfoTile は、画面内チャットではターゲットを開始します。スクリプトの Info() は最後の物件ターゲットまたは自分を、InfoTile() は足元の地形を読みます。serial、type、座標で対象を指定できます。InfoTile(x,y,map) の第3引数はマップ番号です。

引数

引数はありません。

プレフィックスは C# Scripts IDE で設定し、# は例です。引数は空白区切りで、引用符内の文字列は一つの引数です。id は serial、type は graphic です。xy x y [z] は位置にある最初の読み込み済み対象、type のみは最初の一致対象です。InfoTile(x,y,map) の第3引数は Z ではなくマップです。

チャットコマンド

#infofindlist

完全な C# の例

各コードブロックは独立した完全な .csx です。例の serial、type、座標を置き換えてください。引数順序と C# の名前付き引数はシグネチャに従います。

1

UO.Print(UO.InfoFindList());

2

string ReadDefinitions() => UO.InfoFindList();
UO.Print(ReadDefinitions());

3

string report = UO.InfoFindList();
foreach (string line in report.Split('\n'))
    UO.Print(line);

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoFindList());
    }
}

内部呼び出し

CSharpGameApi.InfoFindList
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoFindList
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.MFGI

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

C# のシグネチャ

void UO.MFGI();

現在の検索結果のリストを印刷します。

引数

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

戻り値

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

動作

  • ExecuteLegacyManualAlias は GetFoundItems を読み取り、各 serial を 0xXXXXXXXX としてフォーマットし、行を「|」で連結します。デリミタ。新しい検索は実行されません。空のリストは空の文字列を返します。
  • 指定されたローカル データのみを変更または表示します。このコマンドにはサーバーの確認はありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 現在の検索結果のリストを印刷します。
UO.MFGI();

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は GetFoundItems を読み取り、各 serial を 0xXXXXXXXX としてフォーマットし、行を「|」で連結します。デリミタ。新しい検索は実行されません。空のリストは空の文字列を返します。
return  RunScenario();
 object? RunScenario()
{
    UO.FindType("0x0E21");
    UO.MFGI();
    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()
    {
        UO.MFGI();
        UO.Print(UO.GetArrayLength(UO.GetFoundItems()));
        return null;
    }
}

コマンドの実装

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

UO.MFGI() — UO.MFGI()

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

結果: void / Unit.

呼び出し時:

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

case "mfgi":

                    SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}")));

                    break;

UO.SelectIgnoreList

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

C# のシグネチャ

void UO.SelectIgnoreList(object? list);

アクティブな名前付き検索フィルターを切り替えます。保存されたルールを削除せずに、マイニング、ソート、ターゲティングの間で例外セットを変更すると便利です。このコマンドは検索自体を実行しません。

引数

  • list — 空ではない任意の名前、たとえば「loot_skip」。名前では大文字と小文字は区別されません。これはアイテムの名前ではなく、serial コンテナの名前でも、FindList の名前でもありません。ここでは空の文字列 "" も使用できます: 名前付きルールを無効にします。

戻り値

void - 値なし。 var result = およびチェック =true を使用せずに、別の行で使用します。このコマンドはローカル フィルターを変更します。アイテムの数を返さず、サーバーに何も送信しません。

動作

  • 存在しない名前を指定すると、空のフィルターが選択されます。この名前の故 AddIgnoreList が次の探索で行動を開始します。通常のIgnore(serial)は、選択に関係なく動作し続けます。
  • 名前付きリストにはルール graphic/type + hue が含まれ、通常の Ignore には特定の serial が含まれます。これらは異なるフィルタです。検索でサポートされている場合は結合されます。オブジェクトは引き続き表示され、UseObject/MoveItem から直接アクセスできます。これはHide や行為の禁止ではありません。
  • リスト名では大文字と小文字が区別されません。エッジスペースが削除されます。 1 つの名前付きリストがアクティブで、初期状態はデフォルトです。 AddIgnoreList は自動的に選択しません。 SelectIgnoreList("") は、指定されたフィルターのみを無効にします。
  • このルールは、追加後にアップロードされたアイテムを含む、新しい検索に適用されます。すでに受信した配列と前の結果 FindCount は、新たな検索が行われるまで再計算されません。すべてを除外する場合を除き、ルール -1、-1 を含むリストを選択しないでください。
  • フィルターでは、FindType/FindTypeEx/FindTypesArrayEx、FindList、FindAtCoord、FindNotoriety、Count/CountEx、および拡張選択GetMobiles、GetWorldItems、UseType、 WaitTarget、Attack/AttackNearest/FindMan。 includeIgnored=true を指定すると、serial と type/hue の両方がバイパスされます。引数のない完全な列挙型 GetContent/GetEquipment、GetWorldItems()、および口頭の FindMobile(human,near,...) は、これらのルールを使用しません。
  • GetIgnoreList は、明示的に追加された serial のみを返します。名前付きリストの行はこの配列には含まれません。 IgnoreReset は serial フィルター全体をクリアし、IgnoreOff(serial) は 1 つの serial 例外を削除します。名前付きルールは保持されます。引数なしの ClearIgnoreList() は両方のビューをクリアします。
  • この状態は、クライアント プロファイル スクリプトの一般的な状態に属します。この変更は、この状態の他のスクリプトに影響します。設定は保存されたスナップショットに含まれます。ルールを変更した後、別のスクリプトは以前に取得したスナップショットを使用して検索を実行できます。次の検索では更新が表示されます。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.SelectIgnoreList");
UO.SelectIgnoreList("SORT");

1。並べ替えモードの切り替え - 直接スクリプト

引数と実行の流れ:

  • SORT と sort は 1 つのリストです。検索では、最初に許可されたバックパック オブジェクトが選択されます。名前を保存しても、名前は転送されません。
UO.AddIgnoreList("sort", 0x0EED);
UO.SelectIgnoreList("SORT");
var item = UO.FindType(-1, -1, "backpack");
if (Truth(item != ""))
{
    UO.AddObject("sort_candidate", item);
}

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

2。ルール type をオフにし、セット自体を保存します - スクリプト関数

引数と実行の流れ:

  • 空の行は、指定されたフィルターのみを無効にします。後で復元するには、セット名を再度渡します。
return  RunScenario();
 object? RunScenario()
{
    UO.SelectIgnoreList("");
    var gold = UO.FindType(0x0EED, -1, "backpack");
    if (Truth(gold != ""))
    {
        UO.AddObject("gold_candidate", gold);
    }

    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()
    {
        UO.SelectIgnoreList("later");
        UO.AddIgnoreList("later", 0x0EED);
        var item = UO.FindType(0x0EED, -1, "ground");
        if (Truth(item == ""))
        {
            UO.Print("Gold is excluded by the selected rule");
        }

        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.SelectIgnoreList(list) — UO.SelectIgnoreList(Any)

引数: list (Any)

結果: void / Unit.

呼び出し時:

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

case "selectignorelist": state.SelectedIgnoreList = Text(0).Trim(); break;

UO.SetBadLocation

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

C# のシグネチャ

void UO.SetBadLocation(object? x, object? y);

次のルート MoveXY、NewMoveXY、MoveXYZ、PMove の禁止セルのリストに X/Y を追加し、GetPathArray/GetPathArray3D を要求します。

引数

  • x — 除外されたセルのワールド X。
  • y — 除外されたセルのワールド Y。

戻り値

void - 戻り値はありません。別の回線で電話してください。 true/false や歩数ではありません。

動作

  • キーは X/Y、マップなし、Z で構成されます。座標は 0..65535 内の整数である必要があります。範囲外になるとスクリプト エラーが発生します。
  • 禁止事項は、呼び出し側スクリプトのランタイムに適用されます。新しいルートまたはリクエストは、そのスナップショットを受け取ります。すでに実行中のルートは、内部の再計算を含むスナップショットを保存します。リストを変更したら、新しいルートを開始します。
  • これはマップの変更ではありません。通常の手動移動やその他の実行時ルートはこの禁止を受けません。禁止マークが付いている場合でも、元の広場から離れることができます。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetBadLocation");
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());

1。隣接するセルを計算から除外 - 直接スクリプト

引数と実行の流れ:

  • X/Y - 文字の東のセル。
  • トラバースが可能な場合は、別のフルパスが返されます。キャラクターは動きません。
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());
var path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), true, 0);
UO.Print(Convert.ToString(ArrayLength(path)));

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

2。 2 つのセルを追加 - スクリプト関数

引数と実行の流れ:

  • 呼び出しごとに 1 つの X/Y ペアが追加されます。
  • ペアを繰り返しても、2 番目の個別の禁止は作成されません。 Z はパラメータではありません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetBadLocation(1445, 1690);
    UO.SetBadLocation(1445, 1691);
    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()
    {
        int x = UO.GetX() + 1;
        int y = UO.GetY();
        UO.SetBadLocation(x, y);
        UO.Print($"Marked known blocked location: {x},{y}");
        return null;
    }
}

コマンドの実装

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

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

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

結果: void / Unit.

呼び出し時:

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

case "setbadlocation":

                {

                    int x = Arg(0), y = Arg(1);

                    if (x < 0 || x > ushort.MaxValue || y < 0 || y > ushort.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadLocation requires world X/Y in 0..65535.");

                    state.BadLocations.Add(x + "," + y);

                    return InjectionValue.Unit;

                }

UO.SetBadObject

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

C# のシグネチャ

void UO.SetBadObject(object? objType, object? color, object? radius);

次のルートから除外し、graphic と hue で選択されたロードされたワールド オブジェクトの周囲のセルのパスをクエリします。

引数

  • objType - アイテムのグラフィック/type、0..65535。 0xFFFF または -1 は任意のタイプを許可します。これは serial 固有のインスタンスではありません。
  • color — アイテムの色合い、0..65535。 0xFFFF または -1 では任意の色を使用できます。 0 は正確に hue 0 を意味します。
  • radius — セル内の半径、0..255 を含みます。 0 は項目セルを除外します。 R は、対角のセルを含め、周囲の正方形 max(abs(dx),abs(dy)) <= R を除外します。

戻り値

void - 戻り値はありません。別の回線で電話してください。 true/false や歩数ではありません。

動作

  • パラメータは必須です。範囲が不適切な場合、サイレント数値切り捨てではなく、スクリプト エラーが発生します。
  • ルールは現在のランタイムに蓄積されます。一致ルールが結合されます。最大の半径が 1 つの項目に適用されます。 ClearBadObjectList はこれらのルールをすべて削除します。
  • Container=0 でロードされた動的アイテムは、クライアントがアクセスできるドアを含めて考慮されます。コンテナ内のアイテム、NPC、およびマップの静的情報は、このフィルターでは選択されません。文字には avoidMobiles を使用し、個々のセルには SetBadLocation を使用します。
  • MoveXY/NewMoveXY/MoveXYZ/PMove または GetPathArray/GetPathArray3D を開始すると、アイテムのルールと位置のスナップショットが作成されます。ワールドとリストをさらに変更しても、このスナップショットは変更されません。新たに起動すると、新しいデータが受信されます。
  • フィルターはサーバーに何も送信せず、閉じたコンテナーにコンテンツを強制的にロードしたり、手動の動作を変更したりしません。 X/Y ルールには個別の Z 制限はありません。
  • 通常のクライアント ホストでは、この状態データは GetPersistentState マネージャーから取得され、同じワールド/プロファイルのスクリプト/チャット/マクロに共通であり、1 つのスクリプトに属しません。別のプロセス、または明らかに別個の InjectionRuntimeState の状態は異なります。プロファイルをロード/クリアすると、プロファイルを置き換えることができます。保存された serial はロードされたワールドに対して引き続きチェックされます。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetBadObject");
UO.SetBadObject(0x398C, 0xFFFF, 1);

1。特定のタイプのオブジェクトをバイパスする - 直接スクリプト

引数と実行の流れ:

  • ObjType=0x398C - 例 graphic: サーバー上の障害物のタイプに置き換えます。 Color=0xFFFF は任意の色を選択します。半径=1 は、一致する各アイテムの周囲の3×3 の正方形を削除します。
  • NewMoveXY は、コールバックなし、タイムアウト = 5000 ミリ秒で、正確な X/Y で 5 セル東に徒歩で移動します。 ok=1 は目標を達成することを意味します。 0 はバイパスを確認しません。
UO.SetBadObject(0x398C, 0xFFFF, 1);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, 0, 5000);
UO.Print(Convert.ToString(ok));

2。動きのない正確な色でパスを確認 - スクリプト機能

引数と実行の流れ:

  • Color=0x0044 は hue のみを選択し、Radius=0 は項目が占有しているセルのみを除外します。 ClearBadObjectList は、以前のタイプと色のルールを削除します。
  • GetPathArray は、原点を含むエントリ [x,y,z] を返します。空の配列は、現在の制約を考慮すると完全なパスが存在しないことを意味します。キャラクターはそのまま残ります。
return  RunScenario();
 object? RunScenario()
{
    UO.ClearBadObjectList();
    UO.SetBadObject(0x398C, 0x0044, 0);
    var path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), true, 0);
    UO.Print("Path records: " + Convert.ToString(ArrayLength(path)));
    return null;
}

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

3。世界中のオブジェクトのセルを一時的に除外します - スクリプト クラス

引数と実行の流れ:

  • ObjType=-1 と Color=-1 は両方ともワイルドカードです。 Radius=0 は、読み込まれたすべてのワールド アイテムのセルを除外しますが、NPC やバッグの中身は除外しません。
  • クリーンアップは今後のリクエストに適用されます。すでに受信したパスは保存されます。これは座標の配列であり、アクティブなルートではありません。
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.SetBadObject(-1, -1, 0);
        var path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), true, 0);
        UO.ClearBadObjectList();
        UO.Print(Convert.ToString(ArrayLength(path)));
        return null;
    }

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

コマンドの実装

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

UO.SetBadObject(objType, color, radius) — UO.SetBadObject(Any,Any,Any)

引数: objType (Any), color (Any), radius (Any)

結果: void / Unit.

呼び出し時:

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

case "setbadobject":

                {

                    int type = ResolveType(arguments[0]), hue = Arg(1), radius = Arg(2);

                    if (type < -1 || type > ushort.MaxValue || hue < -1 || hue > ushort.MaxValue || radius < 0 || radius > byte.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadObject requires type/color 0..65535 (or -1) and radius 0..255.");

                    state.BadObjects.Add(type + "," + hue + "," + radius);

                    return InjectionValue.Unit;

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