Skip to content

JA UO Topic character

Codex edited this page Oct 12, 2026 · 5 revisions

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

キャラクター

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

キャラクターの状態、特性、耐性、装備。特定のエンティティに対して、コマンド カード内にある場合は、serial でオーバーロードを使用します。

セクション

トピック コマンドと説明
Identity UO.Self · UO.GetSerial · UO.GetName · UO.GetTitle · UO.GetSex · UO.GetRace
Stats UO.HP · UO.MaxHP · UO.Mana · UO.MaxMana · UO.Stamina · UO.MaxStamina · UO.Str · UO.Dex · UO.Int · UO.Weight · UO.MaxWeight · UO.Luck · UO.GetStatLockState · UO.SetStatLockState
Status UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Frozen · UO.Paralyzed · UO.Flying · UO.WarMode · UO.IsYellowHits
Resists UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist
キャラクターレイヤー UO.ObjAtLayer · UO.ObjAtLayerEx ​​· UO.GetLayer · UO.GetEquipment
Equipment UO.GetEquipment · UO.EquipItems · UO.UnequipItems · UO.WearItem
Dress / Undress UO.SetDress · UO.Dress · UO.Undress · UO.DressSavedSet
Arm / Disarm UO.SetArm · UO.Arm · UO.Disarm
Mount / Dismount UO.Mount · UO.Dismount
Paperdoll UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

すべてのテーマコマンド

身元

UO.Self · UO.CharacterTitle · UO.CharName · UO.CharTitle · UO.GetRace · UO.GetSex · UO.Race · UO.Sex · UO.IsFemale · UO.GetTitle

統計

UO.Armor · UO.GetArmor · UO.HP · UO.GetHP · UO.Life · UO.GetLife · UO.MaxHP · UO.GetMaxHP · UO.MaxLife · UO.GetMaxLife · UO.Mana · UO.GetMana · UO.MaxMana · UO.GetMaxMana · UO.Stam · UO.GetStam · UO.Stamina · UO.GetStamina · UO.MaxStam · UO.GetMaxStam · UO.MaxStamina · UO.GetMaxStamina · UO.Str · UO.GetStr · UO.Strength · UO.GetStrength · UO.Dex · UO.GetDex · UO.Dexterity · UO.GetDexterity · UO.Int · UO.GetInt · UO.Intelligence · UO.GetIntelligence · UO.Weight · UO.GetWeight · UO.MaxWeight · UO.GetMaxWeight · UO.Luck · UO.GetLuck · UO.Gold · UO.GetGold · UO.GetStatLockState · UO.SetStatLockState · UO.SetStatState · UO.RequestStats · UO.GetStatus · UO.GetPlayerStatusText · UO.LastStatus · UO.LastStatusX · UO.LastStatusY · UO.GetARStatus · UO.SetARStatus · UO.SetARExtParams

状態

UO.Alive · UO.GetAlive · UO.IsAlive · UO.Dead · UO.GetDead · UO.IsDead · UO.Hidden · UO.GetHidden · UO.IsHidden · UO.Poison · UO.Poisoned · UO.GetPoisoned · UO.IsPoisoned · UO.Frozen · UO.GetFrozen · UO.IsFrozen · UO.Paralyzed · UO.GetParalisa · UO.GetParalysed · UO.GetParalyzed · UO.IsParalysed · UO.IsParalyzed · UO.Flying · UO.GetFlying · UO.IsFlying · UO.ToggleFly · UO.GetYellowBar · UO.IsYellowHits · UO.TicksDead

抵抗する

UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist

装置

UO.GetEquipment · UO.ObjAtLayer · UO.ObjAtLayerEx · UO.Equip · UO.EquipT · UO.EquipItems · UO.Unequip · UO.UnequipItems · UO.WearItem · UO.EquipLastWeapon · UO.RemoveEarrings · UO.RemoveHat · UO.RemoveNeckless · UO.RemoveRing

Dress / Undress

UO.Dress · UO.Undress · UO.SetDress · UO.UnsetDress · UO.DressSavedSet · UO.EquipDressSet · UO.DressSpeed · UO.SetDressSpeed

Arm / Disarm

UO.Arm · UO.Disarm · UO.SetArm · UO.UnsetArm

Mount / Dismount

UO.Mount · UO.Dismount

ペーパードール

UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

キャラクターレイヤー

全レイヤー: 目的、意味、例。装備アイテムのレイヤー番号serialとそのgraphicは異なる値になります。

このトピックに関する例

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

UO.HP

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

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

UO.ObjAtLayer

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

object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty or unavailable");
}

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

リファレンスの各部

1 · 2 · 3 · 4 · 5

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


UO.Alive

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

C# のシグネチャ

int UO.Alive();
int UO.Alive(object? value);

死の兆候のないオブジェクトの存在を確認します。

引数

  • value — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - 陽性の serial が存在しますが、死亡とマークされていません。有名なアイテムには 1 もあります。これは mobile フィルターではありません。死亡/紛失したオブジェクトは 0 を与えます。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.Alive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Alive(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Alive();
        await Delay(500);
        var after = UO.Alive();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

コマンドの実装

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

UO.Alive() — UO.Alive()

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

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

() => getter(bridge.Self)

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

UO.Alive(value) — UO.Alive(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

value => getter(GetObject(value))

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


UO.Arm

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

C# のシグネチャ

void UO.Arm(object? name);

以前に保存した名前付きの武器と盾のセットを復元します。

引数

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

戻り値

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

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 現在と保存されたものとの完全一致 ID 繰り返し使用/育成することなくスキップされました。不足している商品を類似商品と交換することはできません type。 1 つの操作が失敗しても、成功した操作がキャンセルされることはなく、他の操作の試みが妨げられることもありません。自動ロールバックはありません。接続とロードされたものが必要です。取り外すと本物のバックパックになります。
  • UO.Set("equipfordress", 0) はアイテムの使用要求を選択します (初期モード)。ゼロ以外の値 - ピックアップ/装備。目的のウェアラブル レイヤーは両方のモードでチェックされます。すでに着用しているアイテムを繰り返し使用しても切り替えることはできません。 DressSpeed はリクエストが受け入れられた後に有効となり、撤回はさらに DropDelay を考慮します。
  • Dress と Arm は失敗しても void を返します。リクエストが受け入れられたというメッセージは、サーバーによる確認を意味するものではありません。継続が着用に依存する場合は、限定的な期待を持って実際のレイヤーを確認してください。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 必要なセットは、同じ実行時状態で以前に保存する必要があります。各復元の直前に SetDress/SetArm を呼び出さないでください。これにより、ターゲットが現在の項目で上書きされます。
UO.Arm("battle");

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

引数と実行の流れ:

  • ゼロ以外の equipfordress はピックアップ/装備を選択します。 350 — ミリ秒 DressSpeed。これらの設定は、例の後も実行時に残ります。脱着と着用はサーバーによって決定されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Arm("battle");
    return null;
}

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

引数と実行の流れ:

  • lasttarget — ID 以前に保存されたセットに含める必要があるもの。コントロール層 3 は靴、1 は右手を意味します。 AwaitSlot は、100 ミリ秒の一時停止で20 までのチェックを行い、コマンドを繰り返しません。これにより、セット全体ではなく、選択した項目のみが確認されます。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Arm("battle");
        return AwaitSlot(1, expected);
        return null;
    }

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.Arm(name) — UO.Arm(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void Arm(string name)

            => Equip(name, armSets, weaponLayers, "Weapon set requests processed.", "No weapons set with setarm.");

UO.Armor

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

C# のシグネチャ

int UO.Armor();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.Armor();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.Armor() — UO.Armor()

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

結果: int / Integer.

呼び出し時:

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

case "armor": return new InjectionValue(bridge.Armor);

UO.CharName

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

C# のシグネチャ

dynamic UO.CharName();

キャラクターの名前を読み上げます。

引数

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

戻り値

string はクライアントに知られている名前です。空の文字列は、空/不明な値、またはオブジェクトがないことを意味します。これは、serial またはプロファイル パスではありません。ゲーム名/タイトルは言語 IDE によって翻訳されません。

動作

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

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

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

簡単な例

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

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

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

1。ログイン後にテキストを表示 - 直接スクリプト

引数と実行の流れ:

  • パラメータはありません。self が読み取られます。
  • 空の文字列は明示的に処理されます。これは「0」というテキストではありません。
var text = UO.CharName();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2。ログメッセージにテキストを追加 - スクリプト関数

引数と実行の流れ:

  • 文字が読み取られ、値が行として保存されます。
    • 演算子は文字列を結合します。この結果には Convert.ToString は必要ありません。
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharName();
    UO.Print("Player имя: " + text);
    return null;
}

3。 2 つのスナップショットを比較する - シナリオ クラス

引数と実行の流れ:

  • どちらの呼び出しも self を参照します。 UO.Wait は一時停止1000 ミリ秒を設定します。
  • その違いは、データの更新や世界からの離脱を意味する可能性があります。この例では、名前やタイトルは変更されません。
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 previous = UO.CharName();
        await Delay(1000);
        var current = UO.CharName();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

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

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

結果: dynamic / Any.

呼び出し時:

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

case "getname":

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

UO.CharTitle

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

C# のシグネチャ

dynamic UO.CharTitle();

キャラクターのタイトルを読み上げます。

引数

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

戻り値

string はクライアントに知られているタイトルです。空の文字列は、空/不明な値、またはオブジェクトがないことを意味します。これは、serial またはプロファイル パスではありません。ゲーム名/タイトルは言語 IDE によって翻訳されません。

動作

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

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

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

簡単な例

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

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

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

1。ログイン後にテキストを表示 - 直接スクリプト

引数と実行の流れ:

  • パラメータはありません。self が読み取られます。
  • 空の文字列は明示的に処理されます。これは「0」というテキストではありません。
var text = UO.CharTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2。ログメッセージにテキストを追加 - スクリプト関数

引数と実行の流れ:

  • 文字が読み取られ、値が行として保存されます。
    • 演算子は文字列を結合します。この結果には Convert.ToString は必要ありません。
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3。 2 つのスナップショットを比較する - シナリオ クラス

引数と実行の流れ:

  • どちらの呼び出しも self を参照します。 UO.Wait は一時停止1000 ミリ秒を設定します。
  • その違いは、データの更新や世界からの離脱を意味する可能性があります。この例では、名前やタイトルは変更されません。
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 previous = UO.CharTitle();
        await Delay(1000);
        var current = UO.CharTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

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

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

結果: dynamic / Any.

呼び出し時:

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

case "chartitle": return new InjectionValue(bridge.CharacterTitle);

UO.CharacterTitle

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

C# のシグネチャ

string UO.CharacterTitle();

キャラクターのタイトルを読み上げます。

引数

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

戻り値

string はクライアントに知られているタイトルです。空の文字列は、空/不明な値、またはオブジェクトがないことを意味します。これは、serial またはプロファイル パスではありません。ゲーム名/タイトルは言語 IDE によって翻訳されません。

動作

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

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

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

簡単な例

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

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

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

1。ログイン後にテキストを表示 - 直接スクリプト

引数と実行の流れ:

  • パラメータはありません。self が読み取られます。
  • 空の文字列は明示的に処理されます。これは「0」というテキストではありません。
var text = UO.CharacterTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2。ログメッセージにテキストを追加 - スクリプト関数

引数と実行の流れ:

  • 文字が読み取られ、値が行として保存されます。
    • 演算子は文字列を結合します。この結果には Convert.ToString は必要ありません。
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharacterTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3。 2 つのスナップショットを比較する - シナリオ クラス

引数と実行の流れ:

  • どちらの呼び出しも self を参照します。 UO.Wait は一時停止1000 ミリ秒を設定します。
  • その違いは、データの更新や世界からの離脱を意味する可能性があります。この例では、名前やタイトルは変更されません。
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 previous = UO.CharacterTitle();
        await Delay(1000);
        var current = UO.CharacterTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

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

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

結果: string / String.

呼び出し時:

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

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

() => bridge.CharacterTitle

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


UO.ColdResist

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

C# のシグネチャ

int UO.ColdResist();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.ColdResist();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.ColdResist() — UO.ColdResist()

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

結果: int / Integer.

呼び出し時:

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

case "coldresist": return new InjectionValue(bridge.ColdResistance);

UO.Dead

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

C# のシグネチャ

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

キャラクターの死亡を確認します。

引数

  • id — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsDead があり、0 には符号がないか、mobile がありません。 HP=0 自体は死を意味しません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.Dead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Dead(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Dead();
        await Delay(500);
        var after = UO.Dead();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

コマンドの実装

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

UO.Dead() — UO.Dead()

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

結果: int / Integer.

呼び出し時:

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

public int Dead() => bridge.Dead();

UO.Dead(id) — UO.Dead(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

public int Dead(InjectionValue id)

        {

            int serial = GetObject(id);

            if (serial == bridge.Self)

                return Dead();

            return serial > 0 ? bridge.IsDead(serial) : 0;

        }

UO.Dex

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

C# のシグネチャ

int UO.Dex();

キャラクターの現在の敏捷性(Dexterity、DEX)を読み取ります。

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.Dex();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.Dex() — UO.Dex()

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

結果: int / Integer.

呼び出し時:

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

case "dex": return new InjectionValue(bridge.Dexterity);

UO.Dexterity

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

C# のシグネチャ

int UO.Dexterity();

キャラクターの現在の敏捷性(Dexterity、DEX)を読み取ります。

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.Dexterity();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.Dexterity() — UO.Dexterity()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Dexterity

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


UO.Disarm

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

C# のシグネチャ

int UO.Disarm();

手から武器と盾を削除します: レイヤー1 と 2。衣服には影響しません。

引数

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

戻り値

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

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 1 - チェックは予期した状態を確認しました。 0 - 失敗または待機期限が切れました。これはヘルパーの結果であり、新しい組み込みコマンドではありません。オペレーション自体の呼び出しにも時間がかかる場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return ChangeAndConfirm();
        return null;
    }

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

        dynamic[] layers = new dynamic[checked((int)(1) + 1)];
        layers[0] = 1;
        layers[1] = 2;
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            dynamic empty = true;
            for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
            {
                if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
                {
                    empty = false;
                }
            }

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

            UO.Wait(100);
        }

        return 0;
    }

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

コマンドの実装

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

UO.Disarm() — UO.Disarm()

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

結果: int / Integer.

呼び出し時:

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

public int Disarm()

            => Unequip(weaponLayers, "Weapons disarmed.");

UO.Dismount

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

C# のシグネチャ

void UO.Dismount();

キャラクターが現在マウントされている場合、マウントの解除を要求します。

引数

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

戻り値

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

動作

  • このコマンドは、マウス エミュレーションを行わずに、プロトコル オブジェクト UO (0x06) を使用するリクエストを送信します。これは、インターフェイスの一般的な double クリック ハンドラーをバイパスします。戦争モードでは、リクエストは攻撃に置き換えられません。
  • マウントの状態はレイヤー25から読み取られます。これはサーバーデータの後に変更されます。コマンドから戻っても、着陸/降車の完了は確認されません。
  • 繰り返されるマウント/マウント解除リクエストは一時的にマージされます。レイヤー変更、キャラクター変更、または 5 秒が経過するまで、新しいリクエストは送信されません。これにより、スクリプト間の重複が防止されます。
  • キャラクターが不在、ゲーム外、または死亡したキャラクターの場合、リクエストは送信されません。所有権、空き状況、座席に関する最終ルールはサーバーによって決定されます。
  • レイヤー 25 が空の場合、プロンプトは表示されず、paperdoll は開きません。 graphic 0x3E96 が付いたサービスボートアイテムは、そのチームの通常の乗馬としてカウントされません。
  • UO.Exec("dismount") は同じハンドラーを呼び出し、同じリプレイ保護を使用します。 dismount 行にパラメータを渡すことはできません。追加の引数を指定するとエラーが発生し、リクエストは送信されません。

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

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

簡単な例

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

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

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

1。マウント解除の要求 - 直接スクリプト

引数と実行の流れ:

  • パラメータはありません。戻り値もありません。
UO.Dismount();

2。リクエスト前にマウントされたアイテムの存在を確認する - スクリプト関数

引数と実行の流れ:

  • Ridden — レイヤー項目の ID であり、Mount を再度呼び出すターゲットではありません。 Dismount は引数を取りません。
return  RunScenario();
 object? RunScenario()
{
    var ridden = UO.ObjAtLayer(25);
    if (Truth(ridden == 0))
    {
        UO.Print("No loaded mount layer");
        return null;
    }

    UO.Print("Mounted item ID: " + Convert.ToString(ridden));
    UO.Dismount();
    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。完全な空レイヤー待機関数 - スクリプト クラス

引数と実行の流れ:

  • レイヤーがすでに空であるか、想定内で空になった場合、ヘルパーは true を返します。送信されるリクエストは 1 つだけです。
  • これは、UO.Dismount の戻り値ではなく、サーバー応答後のクライアントの状態のチェックです。
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 dismounted = await TryDismount();
        UO.Print("Mount layer empty: " + Convert.ToString(dismounted));
        return null;
    }

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

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

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

        return false;
    }

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

コマンドの実装

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

UO.Dismount() — UO.Dismount()

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

結果: void / Unit.

呼び出し時:

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

case "dismount": bridge.Dismount(); break;

UO.Dress

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

C# のシグネチャ

void UO.Dress(object? name);

以前に保存した名前付き衣類セットを復元します。

引数

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

戻り値

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

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 現在と保存されたものとの完全一致 ID 繰り返し使用/育成することなくスキップされました。不足している商品を類似商品と交換することはできません type。 1 つの操作が失敗しても、成功した操作がキャンセルされることはなく、他の操作の試みが妨げられることもありません。自動ロールバックはありません。接続とロードされたものが必要です。取り外すと本物のバックパックになります。
  • UO.Set("equipfordress", 0) はアイテムの使用要求を選択します (初期モード)。ゼロ以外の値 - ピックアップ/装備。目的のウェアラブル レイヤーは両方のモードでチェックされます。すでに着用しているアイテムを繰り返し使用しても切り替えることはできません。 DressSpeed はリクエストが受け入れられた後に有効となり、撤回はさらに DropDelay を考慮します。
  • Dress と Arm は失敗しても void を返します。リクエストが受け入れられたというメッセージは、サーバーによる確認を意味するものではありません。継続が着用に依存する場合は、限定的な期待を持って実際のレイヤーを確認してください。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

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

簡単な例

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

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

UO.Print("Calling UO.Dress");
UO.Dress("travel");

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

引数と実行の流れ:

  • 必要なセットは、同じ実行時状態で以前に保存する必要があります。各復元の直前に SetDress/SetArm を呼び出さないでください。これにより、ターゲットが現在の項目で上書きされます。
UO.Dress("travel");

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

引数と実行の流れ:

  • ゼロ以外の equipfordress はピックアップ/装備を選択します。 350 — ミリ秒 DressSpeed。これらの設定は、例の後も実行時に残ります。脱着と着用はサーバーによって決定されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Dress("travel");
    return null;
}

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

引数と実行の流れ:

  • lasttarget — ID 以前に保存されたセットに含める必要があるもの。コントロール層 3 は靴、1 は右手を意味します。 AwaitSlot は、100 ミリ秒の一時停止で20 までのチェックを行い、コマンドを繰り返しません。これにより、セット全体ではなく、選択した項目のみが確認されます。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Dress("travel");
        return AwaitSlot(3, expected);
        return null;
    }

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.Dress(name) — UO.Dress(String)

引数: name (String)

結果: void / Unit.

呼び出し時:

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

public void Dress(string name)

            => Equip(name, dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.");

UO.DressSavedSet

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

C# のシグネチャ

dynamic UO.DressSavedSet();

名前なしで UO.SetDress() を呼び出して保存した服のセットを復元します。

引数

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

戻り値

実際、数値フラグ int: 1 (条件が満たされた) - 必要なリクエストがすべてローカルで受け入れられるか、必要なレイヤーがすでに一致しています。 0 (条件が満たされていない) - ダイヤルなし、接続なし、または少なくとも 1 つの要求が拒否されました。登録object?これは int を許可します。 ID、着用アイテム数、サーバー確認ではありません。

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

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 現在と保存されたものとの完全一致 ID 繰り返し使用/育成することなくスキップされました。不足している商品を類似商品と交換することはできません type。 1 つの操作が失敗しても、成功した操作がキャンセルされることはなく、他の操作の試みが妨げられることもありません。自動ロールバックはありません。接続とロードされたものが必要です。取り外すと本物のバックパックになります。
  • UO.Set("equipfordress", 0) はアイテムの使用要求を選択します (初期モード)。ゼロ以外の値 - ピックアップ/装備。目的のウェアラブル レイヤーは両方のモードでチェックされます。すでに着用しているアイテムを繰り返し使用しても切り替えることはできません。 DressSpeed はリクエストが受け入れられた後に有効となり、撤回はさらに DropDelay を考慮します。
  • Dress と Arm は失敗しても null を返します。リクエストが受け入れられたというメッセージは、サーバーによる確認を意味するものではありません。継続が着用に依存する場合は、限定的な期待を持って実際のレイヤーを確認してください。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 必要なセットは、同じ実行時状態で以前に保存する必要があります。各復元の直前に SetDress/SetArm を呼び出さないでください。これにより、ターゲットが現在の項目で上書きされます。
return UO.DressSavedSet();

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

引数と実行の流れ:

  • ゼロ以外の equipfordress はピックアップ/装備を選択します。 350 — ミリ秒 DressSpeed。これらの設定は、例の後も実行時に残ります。脱着と着用はサーバーによって決定されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.DressSavedSet();
    return null;
}

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

引数と実行の流れ:

  • lasttarget — ID 以前に保存されたセットに含める必要があるもの。コントロール層 3 は靴、1 は右手を意味します。 AwaitSlot は、100 ミリ秒の一時停止で20 までのチェックを行い、コマンドを繰り返しません。これにより、セット全体ではなく、選択した項目のみが確認されます。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

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

        return AwaitSlot(3, expected);
        return null;
    }

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.DressSavedSet() — UO.DressSavedSet()

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

結果: dynamic / Any.

呼び出し時:

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

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.DressSpeed

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

C# のシグネチャ

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

現在のランタイムでの着脱操作間の一時停止を読み取るか設定します。一連のアクションの送信がサーバー ルールに対して速すぎることを回避できます。

引数

  • value - オプションのミリ秒。引数なし - 読み取り;引数を指定すると、値は 10..10000 に制限されます。遅延がまだ設定されていない場合、ランタイムの初期値は 0 になります。このコマンドを使用して 0 を書き込むことはできません。

戻り値

引数なし: int、現在のミリ秒。引数付き: null、戻り値なし。その後、UO.DressSpeed() を個別に読んでください。ここはboolではありません。

動作

  • EquipItems/UnequipItems は、受け入れられた操作の後、次の要素の前に DressSpeed を適用します。 Disarm/Undress - 各占有レイヤー後。キャリーが受け入れられた場合、引き出しはさらに DropDelay を尊重します。他のランタイムの同じ設定は変更されません。高速化はサーバーの制限をオーバーライドしません。
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 現在の一時停止を読み取り、次のセットの最小値を選択します。 0 は、まだ設定されていない遅延を意味します。
var delay = UO.DressSpeed();
if (Truth(delay < 350))
{
    UO.DressSpeed(350);
}
return UO.DressSpeed();

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

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

引数と実行の流れ:

  • 350 ms を設定し、保存された値を別途確認してください。セッターの結果を変数に代入することはできません。セッターは Unit を返します。
return  RunScenario();
 object? RunScenario()
{
    UO.DressSpeed(350);
    return UO.DressSpeed();
    return null;
}

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

引数と実行の流れ:

  • ConfigureDressDelay はスクリプト設定を受け入れます。 15000 は 10000 ミリ秒に制限されます。アシスタントは、実際に保存されたミリ秒を返します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return ConfigureDressDelay(15000);
        return null;
    }

    dynamic ConfigureDressDelay(dynamic requested)
    {
        UO.DressSpeed(requested);
        return UO.DressSpeed();
    }
}

コマンドの実装

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

UO.DressSpeed() — UO.DressSpeed()

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

結果: dynamic / Any.

呼び出し時:

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

case "dressspeed":

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

                    return new InjectionValue(state.DressSpeed);

UO.DressSpeed(value) — UO.DressSpeed(Any)

引数: value (Any)

結果: dynamic / Any.

呼び出し時:

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

case "dressspeed":

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

                    return new InjectionValue(state.DressSpeed);

UO.EnergyResist

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

C# のシグネチャ

int UO.EnergyResist();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.EnergyResist();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.EnergyResist() — UO.EnergyResist()

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

結果: int / Integer.

呼び出し時:

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

case "energyresist": return new InjectionValue(bridge.EnergyResistance);

UO.Equip

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

C# のシグネチャ

int UO.Equip(object? layer, object? id);

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

引数

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

戻り値

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

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

動作

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

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

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

簡単な例

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

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

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

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

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

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

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

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 1 - チェックは予期した状態を確認しました。 0 - 失敗または待機期限が切れました。これはヘルパーの結果であり、新しい組み込みコマンドではありません。オペレーション自体の呼び出しにも時間がかかる場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

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

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

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

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.Equip(layer, id) — UO.Equip(Any,Any)

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

結果: int / Any.

呼び出し時:

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

case "equip":

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

UO.Equip(layer, id) — UO.Equip(String,Integer)

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

結果: int / Integer.

呼び出し時:

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

public int Equip(string layer, int id) => bridge.Equip(ConvertLayer(layer), id);

UO.Equip(layer, id) — UO.Equip(String,String)

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

結果: int / Integer.

呼び出し時:

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

public int Equip(string layer, string id) => Equip(layer, GetObject(id));

UO.EquipDressSet

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

C# のシグネチャ

dynamic UO.EquipDressSet();

代替名 DressSavedSet: 同じ名前のない服のセットを復元します。

引数

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

戻り値

実際、数値フラグ int: 1 (条件が満たされた) - 必要なリクエストがすべてローカルで受け入れられるか、必要なレイヤーがすでに一致しています。 0 (条件が満たされていない) - ダイヤルなし、接続なし、または少なくとも 1 つの要求が拒否されました。登録object?これは int を許可します。 ID、着用アイテム数、サーバー確認ではありません。

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

動作

  • 服装: レイヤー3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24。武器: 1 と 2 のみ。髪、ひげ、バックパック、動物、銀行はこれらのセットには含まれません。
  • すでにロードされている特定のserial は独自のレイヤーに記録されます。同じ名前を再度保存すると、エントリが置き換えられます。空のレイヤーも意味があります。復元すると、対応する占有レイヤーが独自のバックパックに解放されます。したがって、完全に空のセットを保存すると、そのレイヤーからオブジェクトが削除されます。
  • セットは実行時の状態で保存されます。呼び出し自体はファイルを作成せず、セットが別のプロファイルまたは新しいランタイムに転送されることを保証しません。まず、目的のセットを使用済みの状態で保存します。クライアントの一般的な状態のロード/保存は別のメカニズムです。
  • 現在と保存されたものとの完全一致 ID 繰り返し使用/育成することなくスキップされました。不足している商品を類似商品と交換することはできません type。 1 つの操作が失敗しても、成功した操作がキャンセルされることはなく、他の操作の試みが妨げられることもありません。自動ロールバックはありません。接続とロードされたものが必要です。取り外すと本物のバックパックになります。
  • UO.Set("equipfordress", 0) はアイテムの使用要求を選択します (初期モード)。ゼロ以外の値 - ピックアップ/装備。目的のウェアラブル レイヤーは両方のモードでチェックされます。すでに着用しているアイテムを繰り返し使用しても切り替えることはできません。 DressSpeed はリクエストが受け入れられた後に有効となり、撤回はさらに DropDelay を考慮します。
  • Dress と Arm は失敗しても null を返します。リクエストが受け入れられたというメッセージは、サーバーによる確認を意味するものではありません。継続が着用に依存する場合は、限定的な期待を持って実際のレイヤーを確認してください。
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 必要なセットは、同じ実行時状態で以前に保存する必要があります。各復元の直前に SetDress/SetArm を呼び出さないでください。これにより、ターゲットが現在の項目で上書きされます。
return UO.EquipDressSet();

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

引数と実行の流れ:

  • ゼロ以外の equipfordress はピックアップ/装備を選択します。 350 — ミリ秒 DressSpeed。これらの設定は、例の後も実行時に残ります。脱着と着用はサーバーによって決定されます。
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.EquipDressSet();
    return null;
}

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

引数と実行の流れ:

  • lasttarget — ID 以前に保存されたセットに含める必要があるもの。コントロール層 3 は靴、1 は右手を意味します。 AwaitSlot は、100 ミリ秒の一時停止で20 までのチェックを行い、コマンドを繰り返しません。これにより、セット全体ではなく、選択した項目のみが確認されます。
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

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

        return AwaitSlot(3, expected);
        return null;
    }

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.EquipDressSet() — UO.EquipDressSet()

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

結果: dynamic / Any.

呼び出し時:

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

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.EquipItems

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

C# のシグネチャ

dynamic UO.EquipItems(object? items);

1 つのアイテムまたは一連のアイテムを装備します。各アイテムのレイヤーはウェアラブルデータによって決定されるため、アイテムはバックパックの上から着用できます。

引数

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

戻り値

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

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

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

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    dynamic[] items = new dynamic[checked((int)(1) + 1)];
    items[0] = first;
    items[1] = second;
    return UO.EquipItems(items);
    return null;
}

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

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

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

引数と実行の流れ:

  • ChangeAndConfirm はコマンドを 1 回実行します。次に、100 ミリ秒の一時停止を挟んで、実際の状態を最大 20 回チェックします。 1 - チェックは予期した状態を確認しました。 0 - 失敗または待機期限が切れました。これはヘルパーの結果であり、新しい組み込みコマンドではありません。オペレーション自体の呼び出しにも時間がかかる場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

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

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

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

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

            UO.Wait(100);
        }

        return 0;
    }

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

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

コマンドの実装

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

UO.EquipItems(items) — UO.EquipItems(Any)

引数: items (Any)

結果: dynamic / Any.

呼び出し時:

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

case "equipitems":

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

UO.EquipLastWeapon

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

C# のシグネチャ

void UO.EquipLastWeapon();

最後に保存した右手と左手のアイテムの再装備を要求します。

引数

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

戻り値

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

動作

  • Bridge には _lastRightHand と _lastLeftHand が格納されます。ゼロ以外の右 serial は Equip(OneHanded) に送信され、ゼロ以外の左 Equip(TwoHanded) ​​が送信されます。空のエントリはスキップされます。これらは 2 つの可能なリクエストであり、サーバーによるアトミックな確認されたリカバリではありません。

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

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

簡単な例

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

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

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

1。武器を復元 - 直接スクリプト

引数と実行の流れ:

  • 保存されたブリッジ serial ハンドのみが使用されます。
UO.EquipLastWeapon();

2。接続がある場合 - スクリプト関数

引数と実行の流れ:

  • 接続テストは、リクエストが送信される前に実行されます。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.EquipLastWeapon();
    }

    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 セット回復されます。
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()
    {
        RestoreWeapons();
        return null;
    }

    void RestoreWeapons()
    {
        UO.EquipLastWeapon();
    }
}

コマンドの実装

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

UO.EquipLastWeapon() — UO.EquipLastWeapon()

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

結果: void / Unit.

呼び出し時:

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

case "equiplastweapon": bridge.EquipLastWeapon(); return InjectionValue.Unit;

UO.EquipT

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

C# のシグネチャ

void UO.EquipT(object? layer, object? @type);

引数

  • layer — 機器レイヤー。線「Rhand」は右手 (1)、「Lhand」は左手 (2) です。数値も使用できます。認識されたすべての名前がレイヤー テーブルにリストされます。文字列「1」は数値 1 を置き換えません。不明な文字列名はエラーの原因となります。物自体の実際のレイヤーを選択します。コマンドはその有効なスロットを変更しません。
  • type - 1 つの graphic アイテム (例: 0x0F51 - 短剣)。それは特定の物のserial ではなく、また身体mobileのgraphicでもありません。数値または 16 進数値文字列。色は指定されていません: 任意の hue が検索されます。検索には、ナップサックのロードされたサブコンテナが再帰的に含まれます。 -1/0xFFFF は、ここでのワイルドカード検索として、武器の選択には実質的に役に立ちません。レイヤーに一致しない可能性のある最初のものが選択されます。

戻り値

void: この C# フォームは値を返しません。その呼び出しを変数に割り当てたり、if で使用したりしないでください。 2 つの整数引数を含むリクエストの受け入れをテストするには、UO.Equipt を使用します。どちらの場合もObjAtLayer、GetTypeを介してサーバーが応答した後、実機を確認してください。

動作

  • 両方の引数が必要です。まず、FindType がバックパック内のアイテムを探し、次に Equip がその適合性を確認します。検索により、全体的な結果 FindItem/FindCount/GetFoundItems が更新されます。複数の一致がある場合は、検索に適した最初の項目が選択されます。品質、hue、または名前を個別に選択することはできません。
  • クライアントは、ウェアラブル フラグ、アイテムの実際のレイヤー (1..29)、およびそれを持ち上げる機能をチェックします。アイテムをロードする必要があります。サーバーはさらに、着用を許可するかどうかを決定します。受け入れられたローカル要求は成功とは証明されません。
  • 項目が見つからない場合、void フォームには「項目が見つかりませんでした」というメッセージが表示されます。数値形式は 0 を返します。カラー/serialで特定のアイテムを選択する必要がある場合は、FindTypeとEquipを別々にご使用ください。 UO.Equipは、見つかったアイテムのIDを受け取ります。
  • 応答を待っている間は、同時に別のアイテムの転送を開始しないでください。アクションを延々と繰り返すのではなく、レイヤーの変化を確認してください。

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

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

簡単な例

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

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

UO.Print("Calling UO.EquipT");
UO.EquipT("Rhand", 0x0F51);

1。文字列レイヤー名でダガーを装備 - 直接スクリプト

引数と実行の流れ:

  • Rhand ラインは右側のレイヤーを選択します。短剣は荷物を積んだバックパックの中でアクセスできる必要があります。任意の色。引数の数は常に 2 です。
if (Truth(UO.Connected()))
{
    UO.EquipT("Rhand", 0x0F51);
}

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

2。ハンドル番号フォームの失敗 - スクリプト関数

引数と実行の流れ:

  • 1 - レイヤー、0x0F51 - type。 EquipT からの文字列 C# は void を返します。リクエストの受け入れはその結果によって確認できません。 300 ms - たとえば、短い待機時間。その後何も表示されないことは、決定的なサーバー障害を証明するものではありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.EquipT("Rhand", 0x0F51);
    await Delay(300);
    var worn = UO.ObjAtLayer(1);
    if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
    {
        UO.AddObject("equipped_dagger", worn);
    }

    return null;
}

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

3。フル機能: 装着して希望のtype - シナリオクラスを待ちます

引数と実行の流れ:

  • timeoutMs=2000 は、最大待機時間をミリ秒単位で指定します。 50 ミリ秒ごとにチェックしても、再装備は送信されません。このカスタム関数の true は、クライアントがレイヤー上で目的の type をすでに認識していることを意味します。これは、返される Equipt リクエストの承認よりも強力なチェックです。
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()
    {
        if (Truth(UO.Connected()) && !(Truth(await EnsureDagger(2000))))
        {
            UO.Print("Dagger was not confirmed within the timeout");
        }

        return null;
    }

    async Task<dynamic> EnsureDagger(dynamic timeoutMs)
    {
        var worn = UO.ObjAtLayer(1);
        if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
        {
            return true;
        }

        UO.EquipT("Rhand", 0x0F51);
        var started = Now();
        while (Truth(Now() - started < timeoutMs))
        {
            await Delay(50);
            worn = UO.ObjAtLayer(1);
            if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
            {
                return true;
            }
        }

        return false;
    }

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

コマンドの実装

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

UO.EquipT(layer, type) — UO.EquipT(Any,Any)

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

結果: void / Unit.

呼び出し時:

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

public void EquipT(InjectionValue layer, InjectionValue type)

        {

            var obj = bridge.FindType(ResolveType(type), -1, bridge.Backpack, -1, true);

            if (obj == 0)

            {

                SystemMessage("No item found.");

                return;

            }



            if (layer.Kind == InjectionValueKind.String)

                Equip(layer.String, obj);

            else

                bridge.Equip(NumberConversions.ToInt(layer), obj);

        }

UO.Equipt

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

C# のシグネチャ

int UO.Equipt(object? layer, object? @type);

引数

  • layer / 層 - 機器層の整数。右手 - 1、左手 - 2。実際のアイテムスロットを選択してください。
  • type / type - アイテムの graphic 全体、たとえばダガーの場合は 0x0F51 です。ここはserialではありません。バックパックとネストされたコンテナのロードされた内容で、任意の hue を検索します。

戻り値

この C# フォームは int を返します: クライアントが衣装リクエストを受け入れた場合は 1、そうでない場合は 0 を返します。 2 つの整数 (レイヤー番号と graphic) を渡します。文字列値は別のランタイム コントラクトを選択するため、この形式には適していません。呼び出しはサーバーの確認を待ちません。文字列レイヤー名には UO.EquipT を使用します。これは void を返します。

動作

  • 両方の引数が必要です。まず、FindType がバックパック内のアイテムを探し、次に Equip がその適合性を確認します。検索により、全体的な結果 FindItem/FindCount/GetFoundItems が更新されます。複数の一致がある場合は、検索に適した最初の項目が選択されます。品質、hue、または名前を個別に選択することはできません。
  • クライアントは、ウェアラブル フラグ、アイテムの実際のレイヤー (1..29)、およびそれを持ち上げる機能をチェックします。アイテムをロードする必要があります。サーバーはさらに、着用を許可するかどうかを決定します。受け入れられたローカル要求は成功とは証明されません。
  • 項目が見つからない場合、null フォームには「項目が見つかりませんでした」というメッセージが表示されます。数値形式は 0 を返します。カラー/serialで特定のアイテムを選択する必要がある場合は、FindTypeとEquipを別々にご使用ください。 UO.Equipは、見つかったアイテムのIDを受け取ります。
  • 応答を待っている間は、同時に別のアイテムの転送を開始しないでください。アクションを延々と繰り返すのではなく、レイヤーの変化を確認してください。

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

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

簡単な例

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

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

var result = UO.Equipt(1, 0x0F51);
UO.Print("Equipt: " + Convert.ToString(result));

1。 graphic によるダガー装備のリクエスト - 直接スクリプト

引数と実行の流れ:

  • 両方の引数は整数です: ダガーの​​レイヤー1 と graphic。値 1 は、リクエストがサーバーではなくクライアントによって受け入れられたことを確認します。
int accepted = UO.Equipt(1, 0x0F51);
UO.Print(accepted != 0 ? "Equip request accepted locally" : "Equip request not accepted");

2。リクエスト後のスロットのチェック - スクリプト関数

引数と実行の流れ:

  • 待機はチェックの代替ではありません。レイヤー上の実際のものが読み取られます。スクリプトは転送を際限なく繰り返すことはありません。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    int accepted = UO.Equipt(1, 0x0F51);
    if (accepted == 0)
        return false;
    await WaitAsync(300);
    int worn = UO.ObjAtLayer(1);
    return worn != 0 && UO.GetType(worn) == 0x0F51;
    return null;
}

3。必要なアイテムが入手できない場合にのみ着用 - シナリオクラス

引数と実行の流れ:

  • まず、現在の機器をチェックします。 1 回のリクエストの後、検証の試行は 20 回に制限されます。
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()
    {
        return await EnsureDagger();
        return null;
    }

    async Task<bool> EnsureDagger()
    {
        int current = UO.ObjAtLayer(1);
        if (current != 0 && UO.GetType(current) == 0x0F51)
            return true;
        if (UO.Equipt(1, 0x0F51) == 0)
            return false;
        for (int attempt = 0; attempt < 20; attempt++)
        {
            await WaitAsync(100);
            current = UO.ObjAtLayer(1);
            if (current != 0 && UO.GetType(current) == 0x0F51)
                return true;
        }

        return false;
    }
}

コマンドの実装

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

UO.Equipt(layer, type) — UO.Equipt(Integer,Integer)

引数: layer (Integer), type (Integer)

結果: int / Integer.

呼び出し時:

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

public int Equipt(int layer, int type)

        {

            int item = bridge.FindType(type, -1, bridge.Backpack, -1, true);

            return item == 0 ? 0 : bridge.Equip(layer, item);

        }

UO.FireResist

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

C# のシグネチャ

int UO.FireResist();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.FireResist();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.FireResist() — UO.FireResist()

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

結果: int / Integer.

呼び出し時:

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

case "fireresist": return new InjectionValue(bridge.FireResistance);

UO.Flying

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

C# のシグネチャ

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

キャラクターが現在飛行しているかどうかを確認します。これは通常、Gargoyle で必要です。たとえば、ルートを開始する前、またはフライトの有効化をリクエストする前です。 「私のキャラクターは今飛んでいますか?」という質問に答えます。議論なしで。このコマンドは状態を読み取るだけであり、キャラクターの飛行、着陸、移動を可能にするものではありません。

引数

  • id - オプションの serial 文字: 数値、16 進文字列、self、lasttarget、または UO.AddObject によって保存された名前。引数がなければ、あなたのキャラクターが使用されます。これは特定の mobile の ID であり、graphic/type ではなく、Z の座標でもありません。不明な名前、欠落/削除された mobile、またはアイテムが 0 を示します。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsFlying があり、0 にはフラグがないか、mobile がありません。高度Z 自体は飛行を意味しません。

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

動作

  • メインのゲーム アプリケーションはガーゴイルの飛行です。ただし、ゲッターは競合をチェックしません。このクライアントでは、プロトコル バージョン 7.0.0.0 以降の mobile から 0x04 ビットを読み取ります。古いプロトコルでは、0 が返されます。屋根の上に立ったり、高いZ、翼のアニメーション、またはガーゴイルレース自体は飛行可能であることの証明にはなりません。
  • 状態を変更するための別の UO.ToggleFly() があります。これは、「オン」コマンドではなくスイッチ要求を送信します。すでに飛行している場合は、着陸を要求する再度の呼び出しが行われます。サーバーに障害が発生する可能性があります。プロンプトが表示されたら、少し待ってから Flying をもう一度読んでください。 falseはキャラクター/データが無くても可能ですので、アクションをプレイする前にConnectedを確認してください。
  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

1。次のスクリプトステップの前にモードをチェック - 直接スクリプト

引数と実行の流れ:

  • 空の括弧はselfを示します。 true は 1 に等しく、false は 0 に等しい。 UO.Flying() { ... } が許容される場合。この例では何も切り替えません。
var active = UO.Flying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data unavailable");
}

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

2。以前に選択した文字を確認する - スクリプト機能

引数と実行の流れ:

  • ReadState(obj) は serial/alias を受け取り、状態を返します。完全な定義は以下のとおりです。オブジェクトの不在は読み取り前に処理されます。他の人のキャラクターも、クライアントがすでに受信したデータと照合してチェックされます。
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.Flying(obj);
}

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

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

3。一度フライトをリクエストして結果を待つ - シナリオクラス

引数と実行の流れ:

  • この例は、飛行をサポートするサーバー上の Gargoyle の場合です。 EnsureFlight(timeoutMs) ​​は、飛行が観察された場合は 1/true を返し、そうでない場合は 0/false を返します。 2000 — ミリ秒単位の待機制限。 50 ミリ秒ごとにチェックします。すでに飛行している場合、ToggleFly は呼び出されません。最大 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()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.Flying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.Flying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.Flying();
    }

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

コマンドの実装

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

UO.Flying() — UO.Flying()

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

結果: int / Integer.

呼び出し時:

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

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

UO.Flying(id) — UO.Flying(Any)

引数: id (Any)

結果: int / Integer.

呼び出し時:

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

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

UO.Frozen

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

C# のシグネチャ

int UO.Frozen();
int UO.Frozen(object? value);

クライアントが認識しているキャラクターの麻痺フラグを確認します。

引数

  • value - オプションの serial/ID mobile: 数値、16 進文字列、self、lasttarget、またはその他の標準オブジェクト名または AddObject 名。これはgraphic/typeではありません。引数なしでは、self が使用されます。不明な名前は 0 で解決されています。ターゲットが開かない。

戻り値

数値フラグ int: 1 (条件が満たされた) - ロードされた mobile にはフラグ IsParalyzed があります。 0 (条件が満たされていない) - フラグなし、mobile 不明、削除済み、またはオブジェクトがアイテムです。これは麻痺の時間ではなく、0 の結果として動ける能力を保証するものではありません。

動作

  • Paralyzed を使用して麻痺フラグを確認します。バリアント Is/Get、GetParalisa、Frozen、および GetLocked は同じフラグを読み取ります。
  • このコマンドはローカル データのみを読み取ります。麻痺を適用または解除したり、麻痺が終了するのを待ったり、サーバーに更新リクエストを送信したりすることはありません。
  • このコマンドの結果はタイプ int です: if (value != 0) または if (value == 0) を使用します。 true/false および C# の if (値) との直接比較は許可されません。値は数量や ID ではなく、フラグの意味を保持します。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 空の括弧は self を選択します。状態にはフラグの 1 つのスナップショットが保存されます。 true — 数値定数 1。
  • false という結果は、壁、スタミナ不足、またはその他の停止理由を排除するものではありません。
var state = UO.Frozen();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

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

引数と実行の流れ:

  • target には、最後のターゲットの 16 進文字列 serial が格納されます。 IsNpc は、プレーヤーを含むロードされた mobile であることを確認します。
  • 引数を指定したコマンドはターゲットを読み取ります。彼女は新しいキャラクターを選択したり、lasttarget を変更したりしません。
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.Frozen(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3。麻痺が解除されるまでの待ち時間を制限 - シナリオクラス

引数と実行の流れ:

  • 10 の一時停止時間は 100 ミリ秒以内です。引数のない各呼び出しは、self を再度読み取ります。
  • ループの後、self の存在が個別にチェックされます。これはコマンドの実行に加えて約 1 秒間の観察であり、麻痺の解除を保証するものではありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.Frozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.Frozen()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

コマンドの実装

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

UO.Frozen() — UO.Frozen()

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

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

() => getter(bridge.Self)

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

UO.Frozen(value) — UO.Frozen(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => bridge.GetLocked(serial)

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

value => getter(GetObject(value))

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


UO.GetARStatus

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

C# のシグネチャ

dynamic UO.GetARStatus();

現在のマネージャー セッションまたはグローバル クライアントの自動再接続のフラグを読み取ります。

引数

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

戻り値

int 1 — 自動再接続が有効になります。 0 — 無効。

動作

  • SessionControl.AutoReconnect が優先されます。 SessionControl がない場合は、設定.GlobalSettings.再接続が使用されます。これは設定であり、現在の接続の状態や試行回数ではありません。

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

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

簡単な例

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

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

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

1。設定読み取り - 直接スクリプト

引数と実行の流れ:

  • 読み取りが接続されません。
var enabled = UO.GetARStatus();
UO.Print(Convert.ToString(enabled));

2。接続へのマップ - スクリプト関数

引数と実行の流れ:

  • AR 設定と実際の接続は 2 つの別個の値です。
return  RunScenario();
 object? RunScenario()
{
    var enabled = UO.GetARStatus();
    var online = UO.Connected();
    UO.Print(Convert.ToString(enabled) + " " + Convert.ToString(online));
    return null;
}

3。 AR がオフの場合の手動接続 - シナリオクラス

引数と実行の流れ:

  • 自動再接続が無効になっている場合、Connect は手動で許可されます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.GetARStatus() == 0) && !(Truth(UO.Connected())))
        {
            UO.Connect();
        }

        return null;
    }

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

コマンドの実装

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

UO.GetARStatus() — UO.GetARStatus()

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

結果: dynamic / Any.

呼び出し時:

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

case "getarstatus": return new InjectionValue(bridge.GetAutoReconnect());

UO.GetAlive

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

C# のシグネチャ

int UO.GetAlive();
int UO.GetAlive(object? value);

死の兆候のないオブジェクトの存在を確認します。

引数

  • value — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - 陽性の serial が存在しますが、死亡とマークされていません。有名なアイテムには 1 もあります。これは mobile フィルターではありません。死亡/紛失したオブジェクトは 0 を与えます。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.GetAlive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetAlive(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetAlive();
        await Delay(500);
        var after = UO.GetAlive();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

コマンドの実装

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

UO.GetAlive() — UO.GetAlive()

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

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

() => getter(bridge.Self)

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

UO.GetAlive(value) — UO.GetAlive(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

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

value => getter(GetObject(value))

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


UO.GetArmor

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

C# のシグネチャ

int UO.GetArmor();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetArmor();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.GetArmor() — UO.GetArmor()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Armor

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


UO.GetColdResist

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

C# のシグネチャ

int UO.GetColdResist();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetColdResist();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.GetColdResist() — UO.GetColdResist()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.ColdResistance

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


UO.GetDead

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

C# のシグネチャ

int UO.GetDead();
int UO.GetDead(object? value);

キャラクターの死亡を確認します。

引数

  • value — 次の形式のオプションのオブジェクト: 数値/16 進文字列による serial、self、lasttarget、または登録名 AddObject。これはtypeではありません。引数なしでselfをお読みください。フォームによっては不明なテキストがあると変換エラーが発生します。電話をかける前に名前を確認してください。

戻り値

数値フラグ int: 1 (条件が満たされた)、0 (条件が満たされていない)。これは数値フラグです: C# チェック結果 != 0 または結果 == 0 。 int と true/false の直接比較、および if (結果) は許可されません。 1 - mobile には IsDead があり、0 には符号がないか、mobile がありません。 HP=0 自体は死を意味しません。

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

動作

  • ローカル モデルを読み取ります。ターゲットを開いたり、ステータスを要求したり、フラグを変更したり、パケットを送信したりしません。破壊されたオブジェクトは、エントリが辞書から削除される前であっても、紛失したものとみなされます。
  • 結果は別の読み物になります。 Exists と次の挑戦の間に世界は変わるかもしれません。複数のクエリはアトミック スナップショットを形成しません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 空の括弧は self となります。 active は結果を 1 回保存します。 true と false は 2 つのブランチを定義します。 Print はメッセージの例のみを表示します。
var active = UO.GetDead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2。選択されたオブジェクトと全機能 ReadState - スクリプト機能

引数と実行の流れ:

  • lasttarget - 以前に選択したオブジェクト。 Exists は、その存在をチェックします。 obj は唯一のパラメータ ReadState です。この関数はコマンドの結果を変更せずに返します。その定義はコピーされたコードに含まれています。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetDead(obj);
}

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

3。 0.5 秒後の変化に注目してください - スクリプト クラス

引数と実行の流れ:

  • 引数なしの 2 つの呼び出しは、self を読み取り、UO.Wait(500) は 500 ミリ秒を設定します。 2 つの画像を比較します。中間の遷移はスキップされる場合があります。終わりのない待ち時間はありません。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetDead();
        await Delay(500);
        var after = UO.GetDead();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

コマンドの実装

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

UO.GetDead() — UO.GetDead()

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

結果: int / Integer.

呼び出し時:

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

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

IsDeadState

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

() => getter(bridge.Self)

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

UO.GetDead(value) — UO.GetDead(Any)

引数: value (Any)

結果: int / Integer.

呼び出し時:

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

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

IsDeadState

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

value => getter(GetObject(value))

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


UO.GetDex

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

C# のシグネチャ

int UO.GetDex();
int UO.GetDex(object? objID);

キャラクターの現在の敏捷性(Dexterity、DEX)を読み取ります。

引数

  • objID — 引数が 1 つ指定された、示されている形式のみの ObjID: serial 文字番号、10 進数/0x 16 進数文字列、「self」、「lasttarget」、または名前 AddObject。 graphic/type 以外のオブジェクトを選択します。引数を指定しないと、現在の文字が読み取られます。

戻り値

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

動作

  • サポートされているのは、self の () と明示的なオブジェクトの (ObjID) です。その他のオプションの引数はありません。
  • Player が存在し、破壊されていない場合は Player.Dexterity を読み取ります。それ以外の場合は、0。死んだキャラクターが存在しても、削除されたオブジェクトではありません。ステータスはHP、マナ、スタミナから計算されません。
  • GetStr/GetInt/GetDex は ObjID を受け入れます。 PlayerMobile データは self でのみ利用可能です。別の serial - 0、ロードされた mobile であっても。他人の特性を置き換えたり推測したりすることはありません。
  • スクリプトによって待機をキャンセルする機能を備えたゲーム ストリームの読み取りを呼び出します。ステータスを問い合わせたり、ターゲットをオープンしたり、パケットを送信したり、特性を変更したり、遅延を追加したりしません。
  • 呼び出しごとに、ローカル データが新たに読み取られます。変数にはスナップショットが保存されます。個々の読み取りは異なるサーバー更新を受信する場合があります。ゼロ以外の結果は接続をテストしません。ゼロには値を指定することも、データを指定しないこともできます。
  • C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。 UO.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().
  • ExecuteClientApiCompatibility.Arg は、まずオブジェクト名を解決し、次に数値を変換します。不明な非数値文字列は、ターゲットではなく変換エラーを引き起こします。 double は int に削減され、Array/void は 0 に削減されます。文字を選択するには、そのような変換ではなく、正しい serial を使用してください。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetDex();
        return value >= minimum;
    }

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

4。 serial とオブジェクト名で文字を選択 - 直接スクリプト

引数と実行の流れ:

  • id は UO.Self() の結果であり、type ではありません。 AddObjectは、第2引数が指定されているため、IDをスコープなしでstatSubjectとして格納します。どちらの呼び出しも同じ文字を選択しますが、読み取りはアトミックではありません。
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetDex(id);
    var byName = UO.GetDex("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Dexterity

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

UO.GetDex(objID) — UO.GetDex(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "getdex": return new InjectionValue(arguments.Length > 0 ? bridge.GetDexterity(Arg(0)) : bridge.Dexterity);

UO.GetDexterity

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

C# のシグネチャ

int UO.GetDexterity();

キャラクターの現在の敏捷性(Dexterity、DEX)を読み取ります。

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

3。完全な要件検証機能 - スクリプト クラス

引数と実行の流れ:

  • minimum=80 は要件の一例であり、クライアントの制限ではありません。 AttributeAtLeast(最小) は欠落文字を拒否し、特性を 1 回読み取って bool: true または false (>= 最小の場合) を返します。論理的な意味は、特性自体ではなく、比較によって与えられます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetDexterity();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.GetDexterity() — UO.GetDexterity()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.Dexterity

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


UO.GetEnergyResist

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

C# のシグネチャ

int UO.GetEnergyResist();

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

引数

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

戻り値

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

動作

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

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

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

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

引数と実行の流れ:

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

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

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

引数と実行の流れ:

  • minimum=50 は要件の一例であり、クライアントの制限ではありません。 ResistanceAtLeast は、見つからないプレーヤーを拒否し、値を 1 つ読み取り、値 >= 最小値の場合は bool: true または false を返します。抵抗自体はboolではありません。関数は以下で完全に宣言されています。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

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

        var value = UO.GetEnergyResist();
        return value >= minimum;
    }

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

コマンドの実装

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

UO.GetEnergyResist() — UO.GetEnergyResist()

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

結果: int / Integer.

呼び出し時:

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

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

() => bridge.EnergyResistance

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

Clone this wiki locally