JA UO Topic mobiles - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

キャラクターと生物

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

クライアントがすでに知っているキャラクター、NPC、モンスター、ペット。シリアルは特定のクリーチャー、body/type そのグラフィックを定義します。これらは異なる意味です。

セクション

トピック コマンドと説明
Players UO.GetMobiles · UO.FindMobile
NPC UO.IsNpc · UO.FindMobile
Monsters UO.FindType · UO.FindMobile
Pets UO.GetPetsCurrent · UO.GetPetsMax
Followers UO.GetFollowers · UO.GetFollowersMax
Name / Serial / Body UO.GetName · UO.GetSerial · UO.GetType
座標 UO.GetX · UO.GetY ​​· UO.GetZ
Distance UO.GetDistance
Notoriety UO.Notoriety
Status UO.GetStatus · UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Paralyzed
Rename UO.Rename

すべてのテーマコマンド

プレイヤー / NPC / モンスター

UO.GetMobile · UO.GetMobiles · UO.IsNpc

ペット / Followers

UO.Followers · UO.GetFollowers · UO.FollowersMax · UO.GetFollowersMax · UO.PetsCurrent · UO.GetPetsCurrent · UO.PetsMax · UO.GetPetsMax

Notoriety

UO.Notoriety · UO.GetNotoriety

Rename

UO.CanChangeName · UO.MobileCanBeRenamed · UO.Rename · UO.RenameMobile

このトピックに関する例

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

UO.GetMobiles

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

var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
    return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);

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;

UO.GetNotoriety

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

var value = UO.GetNotoriety();
UO.Print("GetNotoriety: " + Convert.ToString(value));

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


UO.CanChangeName

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

C# のシグネチャ

int UO.CanChangeName(object? id);

クライアントが mobile の名前を変更できるという既知の兆候を確認します。

引数

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

戻り値

int 1 - ロードされた mobile には属性 IsRenamable があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。
var state = UO.CanChangeName("self");
if (Truth(state))
{
    UO.Print("Rename permission flag is present");
}
else
{
    UO.Print("Rename permission flag is absent");
}

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

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

引数と実行の流れ:

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

    return null;
}

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

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

引数と実行の流れ:

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

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

        return null;
    }

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

コマンドの実装

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

UO.CanChangeName(id) — UO.CanChangeName(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

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

UO.Followers

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

C# のシグネチャ

int UO.Followers();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータス カウンター、つまり占有されているペット コントロール スロットを読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Followers がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsCurrent/Followers は、ステータス type >= 3 から占有されている制御スロットを報告します。 1 匹のペットが複数のスロットを占有することができます。召喚および飼い慣らされた生き物のルールはサーバーによって設定されます。これは、表示されている mobile の数でも、ID ペットのリストでも、近くにある動物の数でもありません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.Followers();
    var maximum = UO.FollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.Followers() — UO.Followers()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Followers

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


UO.FollowersMax

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

C# のシグネチャ

int UO.FollowersMax();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータスカウンター、つまりペット制御スロットの最大値を読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.FollowersMax がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsMax/FollowersMax は、空きスロットではなく、ステータス type >= 3 からサーバーによって許可される合計スロット制限を報告します。制限を超えるスロットが占有されている可能性があります。空き容量を最大電流とみなして、負の結果を 0 に置き換えます。チームは何も解放せず、何も飼いならさず、何も要求しません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.Followers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.Followers();
    var maximum = UO.FollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.FollowersMax() — UO.FollowersMax()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.FollowersMax

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


UO.GetFollowers

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

C# のシグネチャ

int UO.GetFollowers();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータス カウンター、つまり占有されているペット コントロール スロットを読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Followers がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsCurrent/Followers は、ステータス type >= 3 から占有されている制御スロットを報告します。 1 匹のペットが複数のスロットを占有することができます。召喚および飼い慣らされた生き物のルールはサーバーによって設定されます。これは、表示されている mobile の数でも、ID ペットのリストでも、近くにある動物の数でもありません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.GetFollowers();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.GetFollowers();
    var maximum = UO.FollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.GetFollowers() — UO.GetFollowers()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Followers

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


UO.GetFollowersMax

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

C# のシグネチャ

int UO.GetFollowersMax();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータスカウンター、つまりペット制御スロットの最大値を読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.FollowersMax がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsMax/FollowersMax は、空きスロットではなく、ステータス type >= 3 からサーバーによって許可される合計スロット制限を報告します。制限を超えるスロットが占有されている可能性があります。空き容量を最大電流とみなして、負の結果を 0 に置き換えます。チームは何も解放せず、何も飼いならさず、何も要求しません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.Followers();
var maximum = UO.GetFollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.Followers();
    var maximum = UO.GetFollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.GetFollowersMax() — UO.GetFollowersMax()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.FollowersMax

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


UO.GetMobile

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

C# のシグネチャ

dynamic UO.GetMobile(object? id);

物件の記録を1件ずつコンパクトにまとめたID。

引数

  • id — 特定のオブジェクトのシリアル/ID: int、10 進数/16 進数の文字列、またはセットエイリアス self、backpack、lasttarget、lastobject または名前 AddObject。これはgraphic/typeではありません。

戻り値

9 フィールドの配列: [0] int serial、[1] string 名前、[2] int X、[3] int Y、[4] int Z、[5] int HP、[6] int MaxHP、[7] int 悪名、[8] int 方向0..7。未知の ID の場合、配列には 9 フィールドもあります。渡された ID が保存され、名前は空で、使用できない数値プロパティは 0 です。これは TMobile の完全な Pascal レコードではありません。

動作

  • クライアントによって既にダウンロードされているデータが読み込まれます。このコマンドは、コンテナを開いたり、アイテムを移動したり、サーバー全体からオブジェクトをダウンロードしたりしません。
  • 配列 - 0 から始まるインデックスを持つ配列。 varに保存し、アクセスする前にArrayLengthを確認してください。スナップショットを作成した後、要素がワールドから消える可能性があります。アクションを実行する前に、Exists(serial) を確認してください。
  • フィールドが 9 つあるからといって、そのキャラクターの存在が確認されるわけではありません。 Exists を使用してください。コマンド自体は、ID が Mobile に属しているかどうかをチェックしません。アイテムの名前/座標およびゼロ文字プロパティが返される場合があります。
  • 他のキャラクターのHP/MaxHPはサーバーから送信されたスケールに依存します。 Z - 機器の層ではなく、高さです。

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

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

簡単な例

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

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

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

1。キャラクターの名前と健康状態を読み取る - 直接スクリプト

引数と実行の流れ:

  • ID=self。 [1] は名前、[5]/[6] は現在および最大の HP であり、Mana ではありません。
  • 配列には 9 つの固定フィールドがあります。ワールドに入る前に、空の名前と0/0が可能です。
var mobile = UO.GetMobile("self");
UO.Print(mobile[1] + ": " + Convert.ToString(mobile[5]) + "/" + Convert.ToString(mobile[6]));

2。選択した文字の座標を読み取る - スクリプト関数

引数と実行の流れ:

  • lasttarget は文字を指す必要があります。 [2]/[3]/[4] - 世界の X/Y/Z。
  • まず、オブジェクトの存在がチェックされます。ターゲットがバッグ内のアイテムの場合、座標はそのガンプを参照します。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(target)))
    {
        var mobile = UO.GetMobile(target);
        UO.Print(Convert.ToString(mobile[2]) + "," + Convert.ToString(mobile[3]) + "," + Convert.ToString(mobile[4]));
    }

    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。選択したモバイル - スクリプト クラスのステータスを確認します。

引数と実行の流れ:

  • [7] - 悪名を意味します。 [8] - 0..7 の方向。 type のフィールドはありません。
  • このコマンドは既知のデータを読み取りますが、キャラクターに指示を出したり、戦闘モードを切り替えたりするものではありません。
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 target = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(target)))
        {
            var mobile = UO.GetMobile(target);
            UO.Print("Notoriety: " + Convert.ToString(mobile[7]));
            UO.Print("Direction: " + Convert.ToString(mobile[8]));
        }

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

引数: id (Any)

結果: dynamic / Any.

呼び出し時:

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

case "getmobile":

                {

                    int id = Arg(0);

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(id), new InjectionValue(bridge.GetName(id)), new InjectionValue(bridge.GetX(id)),

                        new InjectionValue(bridge.GetY(id)), new InjectionValue(bridge.GetZ(id)), new InjectionValue(bridge.GetHP(id)),

                        new InjectionValue(bridge.GetMaxHP(id)), new InjectionValue(bridge.GetNotoriety(id)), new InjectionValue(bridge.GetDir(id))

                    });

                }

UO.GetMobiles

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

C# のシグネチャ

dynamic UO.GetMobiles();
dynamic UO.GetMobiles(object? distance);
dynamic UO.GetMobiles(object? distance, object? notoriety);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly);
dynamic UO.GetMobiles(object? distance, object? notoriety, object? body, object? maxZ, object? nearest, object? includeSelf, object? aliveOnly, object? visibleOnly);

一致するロードされた文字/NPC の配列 ID を取得します。これは、スクリプトが複数のターゲットをチェックする必要がある場合、独自のターゲットを選択する場合、環境を計算する場合、またはアクションの前に独自の条件を追加する必要がある場合に必要です。

引数

  • distance — セル内の水平半径: 5 では、距離 0..5 が許可されます。距離は max(abs(dx),abs(dy)) なので、隣接する対角線も 1 です。デフォルトまたは数値が負の場合、無制限の検索ではなく UO.FindDistance() が使用されます。 0 は同じ X/Y セルを残します。ルートの長さではありません。障害物と床はこのパラメータではチェックされません。
  • notoriety — サーバーから受け取ったキャラクターとの関係ステータス: 0 — 不明、1 — 無実、2 — 味方、3 — 灰色、4 — 犯罪者、5 — 敵、6 — 殺人者、 7 - 無敵。数字は 1 つのステータスを意味します。 "5|6" または数値の配列 - 上記のいずれか。服の色やクラスではありません。負の数 (通常は -1)、0xFFFF、「任意」、空の文字列または空の配列は、このフィルターを個別に無効にします。有効な数値のない無効な文字列は誰も見つかりません。ステータスの順序によって優先度が設定されるわけではありません。 5 フィルターは、NPC/モンスターを自動的に選択するのではなく、敵を選択します。実際の値はサーバーによって異なります。
  • body - 特定のキャラクターのID や着用している鎧のtype ではなく、キャラクターの身体/NPC のグラフィック。数値、16 進文字列、文字列 "0x0190|0x0191"、または数値の配列。 0x0190 (400) - 人間の男性。 0x0191 (401) - 人間の女性。マスクは両方の体を結合します。リストには、他の種族、ゴースト、または変身は自動的には含まれません。標準グラフィックボディタイプの表。負の数 (デフォルトでは -1)、0xFFFF、「任意」、空の文字列または空の配列単独 - 任意の本体。有効な番号のない不明なテキストは空の結果を生成します。
  • maxZ — 最大腹筋 (Z ターゲット - キャラクターの Z) を含み、Z ワールドの単位。これはフロアやセル X/Y の数ではありません。 maxZ=4 と Z プレーヤー 10 により、Z が 6..14 をターゲットにすることができます。 0 にはまったく同じ高さが必要です。デフォルトでは、負の数値の場合、UO.FindVertical() が使用されます。階段では、Z に相当するターゲットを排除できます。たとえわずかな違い Z であっても、床へのアクセスのしやすさを証明するものではありません。
  • nearest - true/1 は配列を近いものから遠いものに並べ替え、等しい場合は serial で並べ替えます。 false/0 は、デフォルトでクライアントの順序を保持します。これは追加の半径や 1 つのオブジェクトの選択ではありません。
  • includeSelf - true/1 では、他のすべてのフィルターと Ignore が許可している場合に self を有効にすることができます。 false/0 はデフォルトで self を除外します。含めても、結果に self が存在することは保証されません。
  • aliveOnly - true/1 は、IsDead != 0 のモバイルを除外します。 false/0 は、デフォルトではこの条件を追加しません。 HP をゼロと比較せず、死体アイテムを検索せず、ターゲットが召喚後に生き続けることを保証しません。
  • visibleOnly - true/1 には、ClassicUO の現在の状態に従って IsVisible=1 が必要です。 false/0 は、デフォルトでは条件を追加しません。これはロードされたオブジェクトのクライアントに対する可視性であり、壁/視線のチェックではありません。幾何学的チェックのために、座標を含む別の UO.CheckLOS があります。サーバーは依然としてアクションを拒否する可能性があります。

戻り値

アレイ - serial モバイル。空の配列は、一致するものが存在しないことを意味します。ターゲット[0]の前にArrayLengthをチェックしてください。 body/type、合計HP、1/0ではありません。引数のない形式は、FindDistance/FindVertical/Ignore に引き続き適用され、self は除外されます。

動作

  • ローカル検索: ダウンロード済みのモバイルのみ。 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 を使用します。
  • 0..8 位置引数がサポートされています。 classMask と色はこのコマンドには存在しません。ここでは引数 AttackNearest の順序を引き継がないでください。
  • 配列 - スナップショット ID。ターゲットは後で消える可能性があります。検索とアクションの間に待機があった場合は、Exists を再確認してください。単独で攻撃するものはありません。

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

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

簡単な例

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

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

object? result = UO.GetMobiles(5, 2, -1, 8, true, false, true, true);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。最も近い同盟国を選択し、以下を有効にします - 直接スクリプト

引数と実行の流れ:

  • nearestFirst=true は同盟国[0]を最も近い同盟国にします。 Follow によりバックグラウンド ウォーキングが可能になります。 UO.Follow(0) が停止します。味方の名前/クラスはこのコマンドによって決定されません。
var radius = 12;
var allyStatus = 2;
var anyBody = -1;
var maxHeight = 8;
dynamic nearestFirst = true;
dynamic includeMe = false;
dynamic livingOnly = true;
dynamic visibleOnly = true;
var allies = UO.GetMobiles(radius, allyStatus, anyBody, maxHeight, nearestFirst, includeMe, livingOnly, visibleOnly);
if (Truth(ArrayLength(allies) == 0))
{
    return null;
}
UO.AddObject("leader", allies[0]);
UO.Follow(allies[0], 2, false);

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

2。危険なターゲットをカウントし、その数に基づいてアクションを選択する - スクリプト機能

引数と実行の流れ:

  • ここでは最も近い = false が適切です。カウンターは重要です。 ArrayLength は、スタック内のアイテムの数ではなく、モバイルの数です。 Alarm はログに通知を出力します。
return  RunScenario();
 object? RunScenario()
{
    var enemies = UO.GetMobiles(5, "5|6", -1, 4, false, false, true, true);
    var count = ArrayLength(enemies);
    if (Truth(count == 1))
    {
        UO.Attack(enemies[0]);
    }
    else if (Truth(count > 1))
    {
        UO.Alarm();
    }

    return null;
}

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

3。同じセル上のリストとそれ自体を含む高さ - スクリプトクラス

引数と実行の流れ:

  • 距離=0 - 同一のX/Y、maxZ=0 - 同一のZ。 body は 2 つの graphic に制限されます。 includeSelf=true では self が許可されますが、body および aliveOnly と一致する必要があります。この例では、同じ正方形上の他の文字を報告します。
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 sameCell = UO.GetMobiles(0, -1, "0x0190|0x0191", 0, false, true, true, false);
        var i = 0;
        var others = 0;
        while (Truth(i < ArrayLength(sameCell)))
        {
            if (Truth(sameCell[i] != UO.GetSerial("self")))
            {
                others += 1;
            }

            i += 1;
        }

        if (Truth(others > 0))
        {
            UO.Alarm();
        }

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

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetMobiles(distance) — UO.GetMobiles(Any)

引数: distance (Any)

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

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

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetMobiles(distance, notoriety, body) — UO.GetMobiles(Any,Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetMobiles(distance, notoriety, body, maxZ) — UO.GetMobiles(Any,Any,Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

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

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

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

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetMobiles(distance, notoriety, body, maxZ, nearest, includeSelf, aliveOnly, visibleOnly) — UO.GetMobiles(Any,Any,Any,Any,Any,Any,Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

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

values => CompactGetMobiles(values)

UO.GetNotoriety

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

C# のシグネチャ

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

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

引数

  • id — 指定された単一パラメータ形式の場合のみのオプションのオブジェクト: serial 数値/16 進文字列、「self」、「lasttarget」、または名前 AddObject。これはgraphic/typeではありません。議論がなければ、自分の文字が読み取られます。別のオブジェクトを読み取る前に、UO.Exists を確認してください。不明な名前ではスコープが開きません。

戻り値

int — 0=不明、1=無実、2=味方、3=灰色、4=犯罪者、5=敵、6=殺人者、 7=無敵。これはステータスコードであり、hue、カルマ、名声ではありません。不明な mobile は 0 を与えます。

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

    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。選択したオブジェクトのプロパティの読み取り - スクリプト クラス

引数と実行の流れ:

  • 単一の引数はオブジェクト lasttarget を選択します。その serial はクライアントに知られている必要があります。グラフィック/type はここには転送されません。
  • 別のオブジェクトのデータは、Exists が肯定的であっても不明な場合があります。バッグ内のアイテムの座標はワールドポイントではなくコンテナの位置を取得します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Exists("lasttarget")))
        {
            var targetValue = UO.GetNotoriety("lasttarget");
            UO.Print("Selected value: " + Convert.ToString(targetValue));
        }
        else
        {
            UO.Print("Target is not loaded");
        }

        return null;
    }

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

コマンドの実装

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

UO.GetNotoriety() — UO.GetNotoriety()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetNotoriety(bridge.Self)

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

UO.GetNotoriety(id) — UO.GetNotoriety(Any)

引数: id (Any/Integer/String)

結果: int / Any.

呼び出し時:

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

case "getnotoriety": return new InjectionValue(bridge.GetNotoriety(Arg(0)));

UO.GetNotoriety(id) — UO.GetNotoriety(Integer)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.GetNotoriety(id) — UO.GetNotoriety(String)

引数: id (Any/Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.GetPetsCurrent

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

C# のシグネチャ

int UO.GetPetsCurrent();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータス カウンター、つまり占有されているペット コントロール スロットを読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Followers がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsCurrent/Followers は、ステータス type >= 3 から占有されている制御スロットを報告します。 1 匹のペットが複数のスロットを占有することができます。召喚および飼い慣らされた生き物のルールはサーバーによって設定されます。これは、表示されている mobile の数でも、ID ペットのリストでも、近くにある動物の数でもありません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.GetPetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.GetPetsCurrent();
    var maximum = UO.FollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.GetPetsCurrent() — UO.GetPetsCurrent()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Followers

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


UO.GetPetsMax

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

C# のシグネチャ

int UO.GetPetsMax();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータスカウンター、つまりペット制御スロットの最大値を読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.FollowersMax がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsMax/FollowersMax は、空きスロットではなく、ステータス type >= 3 からサーバーによって許可される合計スロット制限を報告します。制限を超えるスロットが占有されている可能性があります。空き容量を最大電流とみなして、負の結果を 0 に置き換えます。チームは何も解放せず、何も飼いならさず、何も要求しません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.Followers();
var maximum = UO.GetPetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.Followers();
    var maximum = UO.GetPetsMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.GetPetsMax() — UO.GetPetsMax()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.FollowersMax

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


UO.IsNPC

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

C# のシグネチャ

int UO.IsNPC(object? objID);

ロードされた mobile を明示的に渡された serial と照合します。

引数

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

戻り値

int 1 - ロードされていますが、削除されていません mobile。 int 0 - 不明なオブジェクト serial またはリモートオブジェクト。 IsNPC という名前は「ノンプレイヤーキャラクターのみ」という意味ではなく、自分のキャラクターや他のプレイヤーも1 となります。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • ゲーム マネージャーは、IsNpc と IsNPC を同じ名前のバリアントとして扱います。 C# ソース コードでは、公開形式の正確なスペルを使用してください。この結果では、プレイヤーと NPC を確実に区別することはできません。この区別のルールはサーバーによって異なります。

C# では、名前の文字の大文字と小文字が区別されます。 UO.IsNPC には引数が必要です。引数なしの形式 UO.IsNpc() では、self が選択されます。どちらの名前も、NPC 専用ではなく、プレイヤーを含む mobile をチェックします。

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

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

簡単な例

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

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

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

1。自分のキャラクターのserialを確認 - 直接スクリプト

引数と実行の流れ:

  • この C# 形式には引数が必要です。自分のキャラクターも 1 を与えます。これは mobile のテストであり、NPC に限定されるものではありません。
int mobile = UO.IsNPC(UO.Self());
UO.Print($"Self is a loaded mobile: {mobile != 0}");

2。座標を読み取る前にロードされたターゲットを選択 - スクリプト関数

引数と実行の流れ:

  • シリアルはlasttargetから取得されます。座標は、クライアントに既知の mobile が存在する場合にのみ読み取られます。
return  RunScenario();
 object? RunScenario()
{
    string target = UO.GetSerial("lasttarget");
    if (UO.IsNPC(target) == 0)
        return false;
    UO.Print($"Mobile coordinates: {UO.GetX(target)}, {UO.GetY(target)}, {UO.GetZ(target)}");
    return true;
    return null;
}

3。キャラクターとバックパックの比較 - シナリオクラス

引数と実行の流れ:

  • ワールドに入るキャラクターはmobileで、バックパックがアイテムです。結果はローカル読み取りの瞬間を指します。
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 character = UO.IsNPC(UO.Self());
        int bag = UO.IsNPC(UO.Backpack());
        UO.Print($"Character mobile flag: {character}; backpack mobile flag: {bag}");
        return null;
    }
}

コマンドの実装

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

UO.IsNPC(objID) — UO.IsNPC(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "isnpc": return new InjectionValue(bridge.IsNpc(Arg(0)));

UO.IsNpc

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

C# のシグネチャ

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

引数

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

戻り値

int 1 - ロードされていますが、削除されていません mobile。 int 0 - 不明なオブジェクト serial またはリモートオブジェクト。 IsNPC という名前は「ノンプレイヤーキャラクターのみ」という意味ではなく、自分のキャラクターや他のプレイヤーも1 となります。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • ゲーム マネージャーは、IsNpc と IsNPC を同じ名前のバリアントとして扱います。 C# ソース コードでは、公開形式の正確なスペルを使用してください。この結果では、プレイヤーと NPC を確実に区別することはできません。この区別のルールはサーバーによって異なります。

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

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

簡単な例

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

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

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

1。自分のキャラクターをテストする - 直接スクリプト

引数と実行の流れ:

  • 引数のない形式では、self が選択されます。結果 1/0 は serial ではなく、NPC とプレイヤーを区別しません。
int mobile = UO.IsNpc();
if (mobile != 0) UO.Print("Self is a loaded mobile");

2。 mobile、オブジェクトと未知のターゲットの区別はスクリプトの機能です

引数と実行の流れ:

  • lasttarget を事前選択します。まず、オブジェクトのロードがチェックされます。 mobile という分類は彼の敵意を定義するものではありません。
return  RunScenario();
 object? RunScenario()
{
    string target = UO.GetSerial("lasttarget");
    if (UO.Exists(target) == 0)
        UO.Print("Target is not loaded");
    else
        UO.Print(UO.IsNpc(target) != 0 ? "Mobile: NPC or player" : "Loaded item");
    return null;
}

3。 mobile - スクリプト クラスからのみクライアントに知られているヒットの読み取り

引数と実行の流れ:

  • 他の人のヒットはサーバーによって正規化できます。このチェックでは完全なステータスは要求されません。
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()
    {
        string target = UO.GetSerial("lasttarget");
        if (UO.IsNpc(target) != 0)
            UO.Print($"Known hits: {UO.GetHP(target)}/{UO.GetMaxHP(target)}");
        return null;
    }
}

コマンドの実装

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

UO.IsNpc() — UO.IsNpc()

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

結果: int / Integer.

呼び出し時:

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

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

UO.IsNpc(id) — UO.IsNpc(Integer)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.IsNpc(id) — UO.IsNpc(String)

引数: id (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.MobileCanBeRenamed

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

C# のシグネチャ

int UO.MobileCanBeRenamed(object? mobID);

クライアントが mobile の名前を変更できるという既知の兆候を確認します。

引数

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

戻り値

int 1 - ロードされた mobile には属性 IsRenamable があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • これは、たとえばペットに対する最後のサーバー許可です。このコマンドはオブジェクトの名前を変更せず、後続のリクエストがサーバーによって受け入れられることを保証しません。
var state = UO.MobileCanBeRenamed("self");
if (Truth(state))
{
    UO.Print("Rename permission flag is present");
}
else
{
    UO.Print("Rename permission flag is absent");
}

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

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

引数と実行の流れ:

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

    return null;
}

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

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

引数と実行の流れ:

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

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

        return null;
    }

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

コマンドの実装

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

UO.MobileCanBeRenamed(mobID) — UO.MobileCanBeRenamed(Any)

引数: mobID (Any)

結果: int / Integer.

呼び出し時:

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

case "mobilecanberenamed": return new InjectionValue(bridge.CanChangeName(Arg(0)));

UO.Notoriety

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

C# のシグネチャ

int UO.Notoriety();

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

引数

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

戻り値

int — 0=不明、1=無実、2=味方、3=灰色、4=犯罪者、5=敵、6=殺人者、 7=無敵。これはステータスコードであり、hue、カルマ、名声ではありません。不明な mobile は 0 を与えます。

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

    return null;
}

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

3。変化を 1 秒で監視する - スクリプト クラス

引数と実行の流れ:

  • 引数なしの両方の呼び出しは、現在の値を読み取ります。 UO.Wait(1000) はショット間にミリ秒単位の一時停止を与えます。
  • 比較される変化はキャラクターの評判です。例は世界を変えることはなく、無限に待つこともありません。この 1 秒以内のイベントは見逃される可能性があります。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Notoriety();
        await Delay(1000);
        var after = UO.Notoriety();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

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

コマンドの実装

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

UO.Notoriety() — UO.Notoriety()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.GetNotoriety(bridge.Self)

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


UO.PetsCurrent

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

C# のシグネチャ

int UO.PetsCurrent();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータス カウンター、つまり占有されているペット コントロール スロットを読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.Followers がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsCurrent/Followers は、ステータス type >= 3 から占有されている制御スロットを報告します。 1 匹のペットが複数のスロットを占有することができます。召喚および飼い慣らされた生き物のルールはサーバーによって設定されます。これは、表示されている mobile の数でも、ID ペットのリストでも、近くにある動物の数でもありません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.PetsCurrent();
var maximum = UO.FollowersMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.PetsCurrent();
    var maximum = UO.FollowersMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.PetsCurrent() — UO.PetsCurrent()

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

結果: int / Integer.

呼び出し時:

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

case "petscurrent": return new InjectionValue(bridge.Followers);

UO.PetsMax

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

C# のシグネチャ

int UO.PetsMax();

キャラクターに次の飼い慣らされたクリーチャーまたは召喚されたクリーチャーのための十分なスペースがあるかどうかを事前に判断するのに役立ちます。 Followers は占有されている制御スロットを示し、FollowersMax はその合計制限を示します。これは近くにいる動物の数や移動コマンドFollowではありません。 キャラクターのステータスカウンター、つまりペット制御スロットの最大値を読み取ります。

引数

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

戻り値

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

動作

  • たとえば、5 の 3 は占有されていますが、スロット 2 は空いています。値4は、1つのスロットに4体のクリーチャー、4体に1体、またはその他の組み合わせを意味します。 2 のクリーチャーの場合、「ビジー < 最大」チェック スロットでは十分ではありません。最大 - 現在 >= 2 が必要です。特定のクリーチャーのコストと制限はサーバーによって決定されます。 FollowersMax を定数 5 に置き換えないでください。
  • 0 は、ペットの紛失、死亡、または解放を証明するものではありません。ペットが空であるか、ステータスがまだ更新されていない可能性があります。カウンタの増加は、制御が変更されたことを示す追加の兆候にすぎません。どのクリーチャーが飼い慣らされるかは決まりません。サーバーやペット自体からのメッセージも確認してください。これらのスロットは厩舎内の場所と同じではありません。
  • このコマンドには引数はかかりません。上記の正確な署名を使用してください。
  • 現在の Player が存在し、破棄されていない場合、ゲーム スレッドの読み取りには Player.FollowersMax がかかります。それ以外の場合は、0。装備はソートされず、ボーナスは再計算されず、ステータスは要求されず、更新を待つこともありません。現在のゴーストは破壊されたプレイヤーと同等ではありません。
  • PetsMax/FollowersMax は、空きスロットではなく、ステータス type >= 3 からサーバーによって許可される合計スロット制限を報告します。制限を超えるスロットが占有されている可能性があります。空き容量を最大電流とみなして、負の結果を 0 に置き換えます。チームは何も解放せず、何も飼いならさず、何も要求しません。
  • CharacterStatus は更新前に必要な本体をチェックします。 Weight は独自の拡張ステータス、スロット - type 3、Luck - type 4、サーバー WeightMax - type 5 で利用可能です。オプションのカウンターのないコンパクト/古いパッケージは、以前のキャッシュを残します。新しいプレーヤーは最初から始まります。この呼び出しは、新しいステータスの受信を証明するものではありません。
  • これらの関数は API を登録します。コマンドを呼ぶたびに実行されるものではありません。 C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。

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

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

簡単な例

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

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

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

1。終了する前に利用可能なスロットを計算する - 直接スクリプト

引数と実行の流れ:

  • 現在 - ビジー、最大 - 制限、freeSlots - 差。制限値が不明またはゼロである場合、またはデータに一貫性がない場合、この例はスペースが空いていることを表明せずに終了します。このコマンドは最新のステータスを読み取るだけであり、新しい更新は要求しません。
var current = UO.Followers();
var maximum = UO.PetsMax();
if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(current > maximum))
{
    UO.Print("Follower status is unavailable or inconsistent");
    return null;
}
var freeSlots = maximum - current;
UO.Print("Control slots: " + Convert.ToString(current) + "/" + Convert.ToString(maximum));
UO.Print("Free slots: " + Convert.ToString(freeSlots));

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

2。動物を飼いならす前に容量を確認 - スクリプト機能

引数と実行の流れ:

  • まず、ID が lasttarget に入るように、目的の動物を選択します。 requiredSlots=2 - 設定例。サーバー上のこのクリーチャーの実際のコストに置き換えてください。十分なスペースがない場合、ターゲットは設定されず、スキルは呼び出されません。それ以外の場合、ターゲットのキューは単一の引数 UseSkill("Animal Taming") の前に準備されます。試みを開始しても成功が保証されるわけではありません。スキル、範囲、飼いならしやすさ、サーバーの応答が重要です。
return  RunScenario();
 object? RunScenario()
{
    var requiredSlots = 2;
    var current = UO.Followers();
    var maximum = UO.PetsMax();
    if (Truth(UO.Self() == 0) || Truth(maximum <= 0) || Truth(maximum - current < requiredSlots))
    {
        UO.Print("Not enough known control slots");
        return null;
    }

    var animal = UO.LastTarget();
    if (Truth(animal == 0))
    {
        UO.Print("Select the animal first");
        return null;
    }

    UO.WaitTargetObject(animal);
    UO.UseSkill("Animal Taming");
    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。異なるコストのクリーチャーの再利用チェック - シナリオ クラス

引数と実行の流れ:

  • CanAddFollower は、新しい UO コマンドではなく、完全に宣言されたユーザー ヘルパーです。十分なキャッシュ制限がある場合は 1/true を返し、そうでない場合は 0/false を返します。 extraSlots パラメータは追加されるクリーチャーのコストであり、type/ID ではありません。 2 - 例;この機能は飼いならしたり召喚したりするものではありません。アクションの直前にチェックを繰り返す必要があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(CanAddFollower(2)))
        {
            UO.Print("Capacity check passed; verify the creature cost before acting");
        }
        else
        {
            UO.Print("Insufficient capacity or unavailable status");
        }

        return null;
    }

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

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

        return extraSlots <= maximum - current;
    }

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

コマンドの実装

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

UO.PetsMax() — UO.PetsMax()

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

結果: int / Integer.

呼び出し時:

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

case "petsmax": return new InjectionValue(bridge.FollowersMax);

UO.Rename

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

C# のシグネチャ

void UO.Rename(object? mobile, object? newName);

キャラクター/ペットの名前の変更をリクエストします。

引数

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

戻り値

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

動作

  • serial、新しい名前の順です。ブリッジRenameMobile は、GameActions.Rename(serial、名前) を呼び出します。 API は、CanChangeName をチェックしたり、ローカルの Name 自体を変更したりしません。
  • サーバーは名前を変更する権限をチェックします。ペットの場合は、まず MobileCanBeRenamed をチェックしてください。リクエストは名前が受け入れられることを保証するものではありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.Rename");
UO.Rename(UO.GetSerial("lasttarget"), "Companion");

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

引数と実行の流れ:

  • キャラクター/ペットの名前の変更をリクエストします。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
    UO.Rename(id, "Companion");
}

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

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

引数と実行の流れ:

  • serial、新しい名前の順です。ブリッジRenameMobile は、GameActions.Rename(serial、名前) を呼び出します。 API は、CanChangeName をチェックしたり、ローカルの Name 自体を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
    {
        UO.Rename(id, "Guardian");
    }

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

引数と実行の流れ:

  • サーバーは名前を変更する権限をチェックします。ペットの場合は、まず MobileCanBeRenamed をチェックしてください。リクエストは名前が受け入れられることを保証するものではありません。
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()
    {
        RenamePet(UO.GetSerial("lasttarget"), "Companion");
        return null;
    }

    void RenamePet(dynamic id, dynamic name)
    {
        if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
        {
            UO.Rename(id, name);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.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.Rename(mobile, newName) — UO.Rename(Any,Any)

引数: mobile (Any), newName (Any)

結果: void / Unit.

呼び出し時:

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

case "rename": bridge.RenameMobile(Arg(0, bridge.LastTarget), Text(1)); break;

UO.RenameMobile

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

C# のシグネチャ

void UO.RenameMobile(object? mobID, object? newName);

キャラクター/ペットの名前の変更をリクエストします。

引数

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

戻り値

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

動作

  • serial、新しい名前の順です。ブリッジRenameMobile は、GameActions.Rename(serial、名前) を呼び出します。 API は、CanChangeName をチェックしたり、ローカルの Name 自体を変更したりしません。
  • サーバーは名前を変更する権限をチェックします。ペットの場合は、まず MobileCanBeRenamed をチェックしてください。リクエストは名前が受け入れられることを保証するものではありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.RenameMobile");
UO.RenameMobile(UO.GetSerial("lasttarget"), "Companion");

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

引数と実行の流れ:

  • キャラクター/ペットの名前の変更をリクエストします。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.MobileCanBeRenamed(id)))
{
    UO.RenameMobile(id, "Companion");
}

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

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

引数と実行の流れ:

  • serial、新しい名前の順です。ブリッジRenameMobile は、GameActions.Rename(serial、名前) を呼び出します。 API は、CanChangeName をチェックしたり、ローカルの Name 自体を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(id)) && Truth(UO.MobileCanBeRenamed(id)))
    {
        UO.RenameMobile(id, "Guardian");
    }

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

引数と実行の流れ:

  • サーバーは名前を変更する権限をチェックします。ペットの場合は、まず MobileCanBeRenamed をチェックしてください。リクエストは名前が受け入れられることを保証するものではありません。
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()
    {
        RenamePet(UO.GetSerial("lasttarget"), "Companion");
        return null;
    }

    void RenamePet(dynamic id, dynamic name)
    {
        if (Truth(UO.MobileCanBeRenamed(id)) && Truth(Len(name) > 0))
        {
            UO.RenameMobile(id, name);
        }
    }

    int Len(object? value) => Convert.ToString(value)?.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.RenameMobile(mobID, newName) — UO.RenameMobile(Any,Any)

引数: mobID (Any), newName (Any)

結果: void / Unit.

呼び出し時:

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

case "renamemobile": bridge.RenameMobile(Arg(0), Text(1)); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️