Skip to content

JA UO Topic combat

Codex edited this page Oct 12, 2026 · 4 revisions

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

戦闘

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

攻撃、戦闘モード、武器の能力、包帯の回復。クライアントのリクエストとサーバーが実行するアクションは異なります。

セクション

トピック コマンドと説明
Attack UO.Attack
AttackNearest UO.AttackNearest
LastAttack UO.LastAttack
WarMode UO.WarMode
WarTarget UO.WarTargetID
武器の能力 UO.GetWeaponAbilities · UO.GetAbilityID ​​· UO.GetAbilityName · UO.GetActiveAbility
Primary Ability UO.UsePrimaryAbility
Secondary Ability UO.UseSecondaryAbility
Special Moves UO.Specmove
BandageSelf UO.BandageSelf

すべてのテーマコマンド

Attack

UO.Attack · UO.AttackNearest · UO.LastAttack · UO.WarMode · UO.IsWarMode · UO.SetWarMode · UO.WarTargetID

武器の能力

UO.GetWeaponAbilities · UO.GetAbilityID · UO.GetAbilityName · UO.GetActiveAbility · UO.UseAbility · UO.UsePrimaryAbility · UO.UseSecondaryAbility · UO.Specmove

BandageSelf

UO.BandageSelf

カスタム機器クラス

UO.SetClassMask · UO.ClearClassMask · UO.AttackNearest

グループの名前と着用アイテムの種類はスクリプトによって指定されます。 | までの名前の順序で優先順位を指定します。

このトピックに関する例

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

UO.Attack

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

var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
    if (Truth(allowed[i] == selected))
    {
        UO.Attack(selected);
        return null;
    }
    i += 1;
}
UO.Print("Selected target does not pass the filters");

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

UO.GetWeaponAbilities

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

var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));

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


UO.Attack

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

C# のシグネチャ

void UO.Attack(object? objID);

攻撃リクエストを特定の serial に送信します。ターゲットがユーザーによってすでに選択されているか、別のチームによって見つかっている場合に適しています。ここでは、服装/距離による独立した検索はありません。

引数

  • objID — シリアル mobile: int、10 進数/16 進数の文字列、または解決可能なオブジェクト名 (たとえば、lasttarget または名前 AddObject)。 graphic/type やクラス名ではありません。必須の引数。 0 は戦いを止める命令ではありません。 ID を持たないターゲットを選択するには、検索またはゲーム ターゲットを使用します。

戻り値

void - 値がありません。 var result=UO.Attack(...) ではなく、UO.Attack(enemy) を別の行に記述します。通話を終了しても、ヒット、損傷、サーバーの受け入れは確認されません。

動作

  • チャレンジ自体は、死亡、遠隔、self、味方、空のserial、またはアイテムをノックバックしません。選択したターゲットを確認します。できればGetMobiles/FindManからmobileを濾過​​します。
  • 標準 GameActions.Attack が使用されます。EnabledCriminalActionQuery による犯罪攻撃の可能性があります。通常の進行では、LastAttack/NewTargetSystemSerial が更新され、攻撃要求パケットが送信されます。
  • このコマンドは WarMode を有効にせず、マウスのダブルクリック、経路の計算、繰り返し攻撃するループの開始も行いません。戦闘モードとその後の戦闘の処理はサーバーに依存します。
  • オブジェクト名が不明な文字列の場合、解決エラーが発生する可能性があります。 Exists のテストはオブジェクトの存在を証明しますが、それが mobile であることは証明しません。 GetMobilesは携帯電話から与えられます。

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

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

簡単な例

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

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

UO.Print("Calling UO.Attack");
UO.Attack(UO.LastTarget());

1。チェック後に最後に選択されたライブターゲットを攻撃します - 直接スクリプト

引数と実行の流れ:

  • lasttarget はアイテムまたはフレンドリーなキャラクターです。許可リストではこれらのケースは除外されます。 Attack は最大 1 回呼び出されます。
var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
    if (Truth(allowed[i] == selected))
    {
        UO.Attack(selected);
        return null;
    }
    i += 1;
}
UO.Print("Selected target does not pass the filters");

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

2。まず敵を見つけて、高度が利用可能になったら攻撃 - スクリプト機能

引数と実行の流れ:

  • FindMan は serial を返し、攻撃しません。 FindMan には aliveOnly がないため、IsDead チェックは別途追加されます。
return  RunScenario();
 object? RunScenario()
{
    var enemy = UO.FindMan(5, 6, true, 4, -1, -1, false);
    if (Truth(enemy == 0))
    {
        return null;
    }

    if (Truth(UO.IsDead(enemy) == 0))
    {
        UO.AddObject("enemy", enemy);
        UO.Attack(enemy);
    }

    return null;
}

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

3。個別のジオメトリ チェックを使用した最も近いターゲット - シナリオ クラス

引数と実行の流れ:

  • GetMobiles はすでに最も近い = true に順序付けされています。最初のターゲットの前に壁がある場合は、次のターゲットがチェックされます。 visibleOnly の存在自体が CheckLOS に代わるものではありません。サーバーの検証は異なる場合があります。
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 targets = UO.GetMobiles(8, 5, -1, 10, true, false, true, true);
        var i = 0;
        while (Truth(i < ArrayLength(targets)))
        {
            var enemy = targets[i];
            if (Truth(UO.CheckLOS(UO.GetX("self"), UO.GetY("self"), UO.GetZ("self"), UO.GetX(enemy), UO.GetY(enemy), UO.GetZ(enemy), UO.WorldNum())))
            {
                UO.Attack(enemy);
                return null;
            }

            i += 1;
        }

        return null;
    }

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

コマンドの実装

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

UO.Attack(objID) — UO.Attack(Any)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

case "attack": bridge.Attack(Arg(0)); return InjectionValue.Unit;

UO.Attack(objID) — UO.Attack(Integer)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

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

UO.Attack(objID) — UO.Attack(String)

引数: objID (Any/Integer/String)

結果: void / Unit.

呼び出し時:

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

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

UO.AttackNearest

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

C# のシグネチャ

int UO.AttackNearest(object? notoriety);
int UO.AttackNearest(object? notoriety, object? distance);
int UO.AttackNearest(object? notoriety, object? distance, object? body);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly, object? visibleOnly);

適切な戦闘ターゲットを 1 つ選択し、それを攻撃ハンドラーに渡します。フィルターは受け入れられる文字を制限します。カスタム classMask は、装備とクラスの優先順位、クラス内の最も近い選択肢を設定します。

引数

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

戻り値

int - serial が選択された mobile、または適切なターゲットがない場合、または classMask が無効な場合は 0。これは、1/0 フラグでも、body/type でもなく、距離や攻撃の確認でもありません。敵を確認 != 0;敵 == true は C# では無効です: int は bool と比較できません。 ID がゼロ以外の場合でも、ClassicUO ハンドラーは Innocent 攻撃の確認を示すことができます。サーバーがアクションを拒否する場合があります。

動作

  • ローカル検索: ダウンロード済みのモバイルのみ。 Ignore が考慮されます。 self は、それをサポートするコマンド内の明示的な includeSelf=true を除き、除外されます。コンテナやアイテムはモバイルではありません。
  • 条件は同時に適用されます (AND)。 body/悪評内の有効な代替案は、OR を通じて結合されます。 FindItem、FindCount、GetFoundItems の検索は変わりません。
  • body/notoriety では、有効な番号を持つマスクはこれらを使用します: "any|5" は依然として 5 に制限します。有効な数値の隣にある空白/無効な要素は無視されます。制限がない場合は、-1 を個別に渡します。このルールを classMask に適用しないでください。不明なクラス名はリスト全体を拒否します。
  • チームは世界のエリアを開拓したり、ゴールまで走ったり、ルートの通行可能性を確認したりしません。選択とサーバーの処理の間に、世界の状態が変化する可能性があります。
  • true および 1 を渡すことは、フラグ、false および 0 と同様に同等です。他のゼロ以外の数値も true に変換されますが、8/9 は別個のモードではありません。明確な true/false を使用します。
  • この名前はカスタム ラベルであり、サーバーの職業ではありません。ルールには、DTMH、my_group、またはその他の単語を付けることができます。エンジンはキャラクター名によってサーバー上のスキル/クラスを決定しません。
  • 必須では、1 つの type またはフラット アレイはリストの少なくとも 1 つを意味します。グループの配列は、各グループから少なくとも 1 つのものが必要であることを意味します。たとえば、[革、杖] には革と杖が必要です。これは代替案のセットであり、リストされているワードローブ全体を着用する必要があるわけではありません。
  • 禁止されたアイテムを着用した場合、たとえ必須条件が満たされていたとしても、そのキャラクターはこのルールから除外されます。レザーと禁止されているチェーンはレザーのルールを満たしません。他のルールも引き続きテストされます。
  • バックパック 21 を除く、レイヤー 1..24 に着用されている積載アイテムのみがカウントされます。バックパック/チェスト、マウント25、雑誌26..28、バンク29の中身は衣類とみなされません。 graphic/type を比較します。 serial、名前、およびhue はここでは使用されません。
  • 適切な機器がロードされていないと、リストは一致しません。サーバーが機器をまだ送信していない場合、ローカル データに禁止項目が存在しないことは、サーバー上に禁止項目が存在しないことを証明するものではありません。クライアントは隠されたデータを推測しません。
  • ルールは、その関数とインクルードを含む 1 つのランタイム スクリプトに属します。他の独立した起動には転送されず、プロファイルにも保存されません。再起動する場合は、一般的な設定手順などで再定義してください。 SetClassMask を繰り返すと、新しいデータが完全に検証された後にのみ、ルールが同じ名前で置き換えられます。
  • 配列は登録時にコピーされます。元の配列を変更しても、SetClassMask を繰り返すというルールは変わりません。複数の一致ルールは、classMask の名前の順序によって解決されます。標準的なサーバー服装テーブルはありません。
  • 1..9 位置引数がサポートされています。尾部は省略できます。 classMask を設定するには、最初の 6 つの引数を渡す必要があります。各位置の意味を確認するには、名前付き var を使用します。
  • ターゲットを 1 つ選択し、攻撃を 1 回送信します。これは自動戦闘サイクルではありません。 classMask がないと、装備フィルターとアイテムの読み取りは実行されません。
  • 最初に一般的なフィルター、次に左から右の優先順位、次に最も近いフィルターです。最も近い=false はクラスの優先順位を保持しますが、最初に一致したクラス内では、クライアントのリストの最初の mobile が選択されます。
  • 名前/タイトル内の部分文字列を検索するという古い試みは、機器ルールに置き換えられました。このようなスクリプトを明示的な SetClassMask に移動します。キャラクターの名前は、彼を特定のクラスとして識別しなくなりました。

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

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

簡単な例

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

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

var result = UO.AttackNearest(5, 5);
UO.Print("AttackNearest: " + Convert.ToString(result));

1。 5 つのセル内の最も近い敵: 短い形式 - 直接スクリプト

引数と実行の流れ:

  • body=-1、maxZ=FindVertical()、最も近い=true、color=-1、classMaskは無効、aliveOnly=false、visibleOnly=false。死亡者を確実に除外するには、以下の完全なフォームを使用してください。
var enemy = UO.AttackNearest(5, 5);
if (Truth(enemy == 0))
{
    return null;
}
UO.AddObject("combat_target", enemy);

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

2。指定されたボディと同じ高さのみ: クラスなしのすべてのフラグ - スクリプト関数

引数と実行の流れ:

  • maxZ=0 は厳密な高さの比較に役立ちますが、ステップでターゲットが切断される可能性があります。 visibleOnly は壁をチェックしません。 9 つの引数はすべて署名されています。 ID を返しますが、true ではありません。
return  RunScenario();
 object? RunScenario()
{
    var status = "5|6";
    var radius = 8;
    var bodies = "0x0190|0x0191";
    var heightTolerance = 0;
    dynamic chooseNearest = true;
    var bodyHue = -1;
    var equipmentClasses = -1;
    dynamic requireAlive = true;
    dynamic requireVisible = true;
    var enemy = UO.AttackNearest(status, radius, bodies, heightTolerance, chooseNearest, bodyHue, equipmentClasses, requireAlive, requireVisible);
    if (Truth(enemy != 0))
    {
        UO.AddObject("enemy_same_height", enemy);
    }

    return null;
}

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

3。自分の名前、自分の持ち物、攻撃順序 - シナリオクラス

引数と実行の流れ:

  • DTMH が最初に選択されます。適切なDTMH - ヘビー、次にハンターがない場合のみ。 10 細胞上の DTMH は、2 細胞に負荷がかかるよりも優先されます。順序を逆にするには、classMask の行を変更します。 2 つの DTMH のうち、最も近いものが選択されます。
  • Gear は完全に縮小されたユーザー機能 C# であり、別個のコマンド UO ではありません。 Gear(革、譜)の 2 つの配列は、2 つの必要なグループを形成します。革に型を加えることで選択肢が広がります。革製品を2つ着用する必要はありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var leather = Gear(0x13C4, 0x13C7);
        var staves = Gear(0x0DF0, 0x0E81);
        var chain = Gear(0x13BF, 0x13C0);
        var plate = Gear(0x1415, 0x1411);
        var bows = Gear(0x13B2, 0x0F50);
        UO.SetClassMask("DTMH", Gear(leather, staves), chain);
        UO.SetClassMask("охотник", bows);
        UO.SetClassMask("тяжёлый", plate);
        var notoriety = "5|6";
        var distance = 12;
        var body = -1;
        var maxZ = 8;
        dynamic nearest = true;
        var color = -1;
        var classMask = "DTMH|тяжёлый|охотник";
        dynamic aliveOnly = true;
        dynamic visibleOnly = true;
        var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
        if (Truth(enemy == 0))
        {
            UO.Print("No matching enemy; no attack sent");
            return null;
        }

        UO.AddObject("selected_enemy", enemy);
        return null;
    }

    dynamic Gear(params dynamic[] values)
    {
        return values;
    }

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

4。最も近い=false: 最も遠いものではなくリストの最初 - 直接スクリプト

引数と実行の流れ:

  • 10 は半径、4 は許容差 Z で、フラグ無効化色の後の1 とclassMask の両方です。ワールド更新間のクライアント リストの順序は保証されません。予測可能な近接性を得るには、true を使用します。
dynamic sortByDistance = false;
var target = UO.AttackNearest(5, 10, -1, 4, sortByDistance, -1, -1, true, true);
if (Truth(target == 0))
{
    return null;
}
UO.AddObject("current_enemy", target);

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

5。ユーザーグループの並べ替え - スクリプト機能

引数と実行の流れ:

  • 変更されるのはラベルの順序のみです。新しい衣類テーブルや名前をクライアントに追加する必要はありません。重いものでのフォールバックを防ぐには、それを優先順位から削除します。
return  RunScenario();
 object? RunScenario()
{
    var leather = Gear(0x13C4, 0x13C7);
    var staves = Gear(0x0DF0, 0x0E81);
    var chain = Gear(0x13BF, 0x13C0);
    var plate = Gear(0x1415, 0x1411);
    var bows = Gear(0x13B2, 0x0F50);
    UO.SetClassMask("DTMH", Gear(leather, staves), chain);
    UO.SetClassMask("охотник", bows);
    UO.SetClassMask("тяжёлый", plate);
    var priority = "охотник|DTMH|тяжёлый";
    var enemy = UO.AttackNearest(5, 12, -1, 8, true, -1, priority, true, true);
    if (Truth(enemy != 0))
    {
        UO.AddObject("priority_enemy", enemy);
    }

    return null;
}

dynamic Gear(params dynamic[] values)
{
    return values;
}

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.AttackNearest(notoriety) — UO.AttackNearest(Any)

引数: notoriety (Any)

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

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

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any)

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any,Any)

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

結果: int / Integer.

呼び出し時:

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

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

values => new InjectionValue(CompactAttackNearest(values))

UO.BandageSelf

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

C# のシグネチャ

void UO.BandageSelf();

キャラクターをUO.Wait-ターゲットとして配置し、バックパックから選択したタイプ0x0E21の包帯を使用します。操作はクライアントによって送信され、サーバーによって非同期に実行されます。

引数

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

戻り値

void。このメソッドは治療ステータスを返さず、包帯の巻き付けが完了するのを待ちません。

動作

  • ランタイムはターゲット Self を設定し、バックパックからタイプ 0x0E21 と任意の hue に最もよく一致するアイテムを検索し、それを使用します。包帯が見つからない場合、検索によってシステム ログに報告されます。検索結果は呼び出し元のスクリプトに返されません。治療の可能性と結果はキャラクターのサーバー状態に依存します。

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

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

簡単な例

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

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

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

1。バックパックに入っている包帯を自分自身に一度使用してください。 - 直接スクリプト

引数と実行の流れ:

  • バックパックに入っている包帯を自分自身に一度使用してください。
UO.BandageSelf();

2。まず接続を確認してから、アクションをディスパッチします。呼び出しは治療の終了を待ちません。 - スクリプト機能

引数と実行の流れ:

  • まず接続を確認してから、アクションをディスパッチします。呼び出しは治療の終了を待ちません。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.BandageSelf();
    }

    return null;
}

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

3。この手順では包帯の使用のみが報告されており、治療の成功については報告されていません。 - スクリプトクラス

引数と実行の流れ:

  • この手順では包帯の使用のみが報告されており、治療の成功については報告されていません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

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

    void ApplyBandage()
    {
        UO.BandageSelf();
    }
}

コマンドの実装

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

UO.BandageSelf() — UO.BandageSelf()

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

結果: void / Unit.

呼び出し時:

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

public void BandageSelf()

        {

            var foundBandages = FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my"));

            if (foundBandages != string.Empty)

            {

                WaitTargetSelf();

                UseObject(foundBandages);

            }

            else

                SystemMessage("No bandages found.");

        }

UO.ClearClassMask

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

C# のシグネチャ

int UO.ClearClassMask();
int UO.ClearClassMask(object? name);

現在のスクリプト ランタイムの 1 つのカスタム機器ルールまたはすべてのルールを削除します。セットを再構成する前、または一時的な優先順位を無効にする前に役立ちます。

引数

  • name — SetClassMask に渡されるオプションの名前。大文字と小文字は重要ではありません。引数を指定しないと、このランタイムのすべてのルールが削除されます。これは優先文字列ではありません。「mage|tank」はここでは許可されません。一度に 1 つずつ削除するか、引数なしで呼び出します。

戻り値

int — 削除されたルールの数。名前 1 は削除を意味し、0 - そのようなルールはありませんでした。引数がない場合、ブール型フラグではなく、0..N が返されます。したがって、全体的な結果を true ではなく > 0 と比較してください。

動作

  • すでに送信された攻撃はキャンセルされず、スクリプトも停止されません。キャラクターの装備は変更されません。
  • 削除されると、名前は次の AttackNearest には不明のままになります。 classMask からも削除するか、再度登録してください。不明な名前はすべての選択をブロックします。
  • 他の人のランタイムとルールは影響を受けません。クラスを使用しない通常の検索の場合は、空の必須服装セットではなく、classMask=-1 を使用します。

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

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

簡単な例

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

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

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

1。一時クラスを削除し、残りの 1 つである直接スクリプトを使用します。

引数と実行の流れ:

  • 除去しても武器が切り替わったり、戦闘が終了したりすることはありません。さらなる分類を変更するだけです。
UO.SetClassMask("временный", 0x13B2);
UO.SetClassMask("основной", 0x1415);
UO.ClearClassMask("временный");
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "основной", true, true);
if (Truth(enemy != 0))
{
    UO.AddObject("main_enemy", enemy);
}

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

2。別のタスクのすべてのルールを再作成する - スクリプト関数

引数と実行の流れ:

  • 削除されました — 削除されたルールの数。新しいセットは、クライアントを再起動せずに、同じランタイムで作成されます。
return  RunScenario();
 object? RunScenario()
{
    UO.SetClassMask("старый_набор", 0x13B2);
    var removed = UO.ClearClassMask();
    UO.SetClassMask("новый_набор", 0x0F50);
    var enemy = UO.AttackNearest(5, 8, -1, 4, true, -1, "новый_набор", true, true);
    if (Truth(enemy != 0))
    {
        UO.AddObject("new_enemy", enemy);
    }

    return null;
}

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

3。ルールをリセットし、通常の即時ターゲット - シナリオ クラスに移動します。

引数と実行の流れ:

  • リモート名を渡さないでください。結果は 0 になります。 -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()
    {
        UO.SetClassMask("по_одежде", 0x13C4);
        UO.ClearClassMask();
        var classes = -1;
        var enemy = UO.AttackNearest(5, 5, -1, 4, true, -1, classes, true, true);
        if (Truth(enemy != 0))
        {
            UO.AddObject("enemy_without_classes", enemy);
        }

        return null;
    }

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

コマンドの実装

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

UO.ClearClassMask() — UO.ClearClassMask()

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

結果: int / Integer.

呼び出し時:

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

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

args => new InjectionValue(ClearClassMask(null))

UO.ClearClassMask(name) — UO.ClearClassMask(Any)

引数: name (Any)

結果: int / Integer.

呼び出し時:

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

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

args => new InjectionValue(ClearClassMask(ReadClassName(args[0])))

UO.GetAbilityID

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

C# のシグネチャ

int UO.GetAbilityID(object? abilityName);

ID クライアントディレクトリ内の武器能力名または数値文字列を解決します。

引数

  • abilityName - string: 名前 AbilityData、列挙型の能力名、または 10 進数の ID。名前を比較する場合、スペース/句読点は削除され、大文字と小文字は区別されません。

戻り値

int 1..AbilityData.Abilities.Length - 既知の能力。 0 は、不明な名前、空の正規化された文字列、またはディレクトリ外の数値 ID です。

動作

  • ResolveClassicUOAbilityId は最初に 10 進数の int を解析し、次に正規化されたディレクトリ名と enum 名を比較します。このコマンドは、能力を有効にしたり、現在の武器との互換性を確認したりしません。

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

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

簡単な例

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

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

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

1。名前解決 - 直接スクリプト

引数と実行の流れ:

  • 数字はカタログのIDを表しており、能力の使用を表すものではありません。
var id = UO.GetAbilityID("Armor Ignore");
UO.Print(Convert.ToString(id));

2。数値文字列 - スクリプト関数

引数と実行の流れ:

  • ライン 1 は、リゾルバの数値パスを通過します。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetAbilityID("1");
    UO.Print(Convert.ToString(id));
    return null;
}

3。不明な名前 - スクリプト クラス

引数と実行の流れ:

  • 名前が欠落している場合は、0 が返されます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetAbilityID("unknown-example-ability");
        UO.Print(Convert.ToString(id));
        return null;
    }
}

コマンドの実装

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

UO.GetAbilityID(abilityName) — UO.GetAbilityID(String)

引数: abilityName (String)

結果: int / Integer.

呼び出し時:

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

public int GetAbilityID(string abilityName) => bridge.ResolveAbility(abilityName);

UO.GetAbilityName

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

C# のシグネチャ

string UO.GetAbilityName(object? abilityId);

ID ディレクトリから武器の能力の名前を返します。

引数

  • abilityId - int: ID は 1 で始まります。ブリッジには AbilityData.能力 [abilityId-1] が表示されます。

戻り値

string ディレクトリ名。 ID が 1 より小さいか、ディレクトリの長さより大きい場合は、空の文字列が返されます。

動作

  • 読み取りはローカルであり、能力はアクティブになりません。カタログのIDは、現在の武器にその能力が存在することを意味するものではありません。

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

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

簡単な例

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

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

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

1。名 - 直字

引数と実行の流れ:

  • ID 1 は、ディレクトリの最初の要素と一致します。
var name = UO.GetAbilityName(1);
UO.Print(name);

2。逆解像度 - スクリプト機能

引数と実行の流れ:

  • 名前は、リゾルバーによって検出された ID に基づいて返されます。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetAbilityID("Armor Ignore");
    if (Truth(id > 0))
    {
        UO.Print(UO.GetAbilityName(id));
    }

    return null;
}

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

3。無効な ID - スクリプト クラス

引数と実行の流れ:

  • ID 0 は、長さ 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 name = UO.GetAbilityName(0);
        UO.Print(Convert.ToString(Len(name)));
        return null;
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
}

コマンドの実装

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

UO.GetAbilityName(abilityId) — UO.GetAbilityName(Integer)

引数: abilityId (Integer)

結果: string / String.

呼び出し時:

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

public string GetAbilityName(int abilityId) => bridge.GetAbilityName(abilityId);

UO.GetActiveAbility

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

C# のシグネチャ

dynamic UO.GetActiveAbility();

キャラクターの有効化された戦闘能力の名前を読み取ります。

引数

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

戻り値

string は起動型能力の英語名です (例: Armor Ignore)。能力がアクティブ化されていない場合、またはキャラクターが欠落している場合は、文字列「0」。これは int 0 や ID の能力ではなく、ヒットの成功を確認するものでもありません。

動作

  • 現在のキャラクターのPrimaryAbility/SecondaryAbility フラグが読み取られます。両方がアクティブな場合は、主な能力が選択されます。アクティビティ フラグは、名前が検索される前に番号から削除されます。
  • データはローカルで読み取られます。ゲッター自体は能力を起動せず、マナを消費しません。攻撃後、サーバーはアクティベーションを削除できます。

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

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

簡単な例

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

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

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

1。アクティブな能力を表示 - 直接スクリプト

引数と実行の流れ:

  • 引数はありません。現在のクライアントの文字が読み取られます。
  • アクティベーションがない場合は、文字列 0 が出力されます。
var name = UO.GetActiveAbility();
UO.Print(name);

2。アクティブなアビリティがない場合にのみプライマリ アビリティをアクティブにする - スクリプト関数

引数と実行の流れ:

  • 比較は文字列 0 で行われます。 UsePrimaryAbilityは別途呼び出されます。
  • これはアクティベーションリクエストであり、ストライクの成功を証明するものではありません。利用可能かどうかは武器とサーバーのルールによって異なります。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetActiveAbility() == "0"))
    {
        UO.UsePrimaryAbility();
    }

    return null;
}

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

3。名前を ID 能力に変換 - スクリプト クラス

引数と実行の流れ:

  • GetAbilityID は、ゲッターによって返された名前を受け取ります。
  • ID の能力は、serial の武器やキャラクターではありません。まず、アクティブな能力の欠如は除外されます。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var name = UO.GetActiveAbility();
        if (Truth(name != "0"))
        {
            var id = UO.GetAbilityID(name);
            UO.Print("Ability ID: " + Convert.ToString(id));
        }

        return null;
    }

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

コマンドの実装

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

UO.GetActiveAbility() — UO.GetActiveAbility()

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

結果: dynamic / Any.

呼び出し時:

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

case "getactiveability": return new InjectionValue(bridge.GetActiveAbility());

UO.GetWeaponAbilities

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

C# のシグネチャ

dynamic UO.GetWeaponAbilities();

Bridge は Player.Abilities を読み取り、((byte)value & 0x7F) ​​を適用し、正の ID を元の順序で保存します。

引数

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

戻り値

現在の武器の正の int ID 能力の配列。ハイフラグ 0x80 は削除されます。ゼロ値は除外されます。プレーヤーなし - 空の配列。

動作

  • Bridge は Player.Abilities を読み取り、((byte)value & 0x7F) を適用し、正の ID を元の順序で保存します。アクティブなモードの事実や名前ではなく、利用可能な ID を返します。
  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • Bridge は Player.Abilities を読み取り、((byte)value & 0x7F) ​​を適用し、正の ID を元の順序で保存します。
var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));

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

引数と実行の流れ:

  • Bridge は Player.Abilities を読み取り、((byte)value & 0x7F) を適用し、正の ID を元の順序で保存します。アクティブなモードの事実や名前ではなく、利用可能な ID を返します。
return  RunScenario();
 object? RunScenario()
{
    var abilities = UO.GetWeaponAbilities();
    if (Truth(UO.GetArrayLength(abilities) > 0))
    {
        UO.Print(UO.GetAbilityName(abilities[0]));
    }

    return null;
}

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

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

引数と実行の流れ:

  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.GetWeaponAbilities();
        UO.Wait(500);
        var after = UO.GetWeaponAbilities();
        UO.Print(before);
        UO.Print(after);
        return null;
    }
}

コマンドの実装

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

UO.GetWeaponAbilities() — UO.GetWeaponAbilities()

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

結果: dynamic / Any.

呼び出し時:

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

public InjectionValue GetWeaponAbilities() => new InjectionValue(

            (bridge.GetWeaponAbilities() ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray());

UO.IsWarMode

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

C# のシグネチャ

int UO.IsWarMode(object? objID);

戦闘態勢mobileを確認します。

引数

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

戻り値

int 1 - ロードされた mobile には属性 InWarMode があります。 int 0 - 属性が欠落しています。オブジェクトは mobile ではないか、不明または削除されています。キャラクターが誰を攻撃しているのか、戦闘モードをオンにしているのかはわかりません。外部モードの読み取りは、サーバーから受信したデータに限定されます。

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

動作

  • ローカル クライアント モデルが読み取られます。サーバーへのリクエストはなく、待機や移動もありません。
  • 結果は読書の瞬間を指します。 UO.Wait またはその他のアクションの後、オブジェクトとそのフラグが変更される場合があります。
  • キャラクターが誰を攻撃しているのか、戦闘モードをオンにしているのかはわかりません。外部モードの読み取りは、サーバーから受信したデータに限定されます。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • self 引数はその文字を明示的に選択します。状態 - 1/0 のみ。
  • キャラクターが誰を攻撃しているのか、戦闘モードをオンにしているのかはわかりません。外部モードの読み取りは、サーバーから受信したデータに限定されます。
var state = UO.IsWarMode("self");
if (Truth(state))
{
    UO.Print("Combat stance is active");
}
else
{
    UO.Print("Combat stance is inactive");
}

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

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

引数と実行の流れ:

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

    return null;
}

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

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

引数と実行の流れ:

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

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

        return null;
    }

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

コマンドの実装

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

UO.IsWarMode(objID) — UO.IsWarMode(Any)

引数: objID (Any)

結果: int / Integer.

呼び出し時:

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

case "iswarmode": return new InjectionValue(arguments.Length > 0 ? bridge.IsWarMode(Arg(0)) : WarMode());

UO.LastAttack

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

C# のシグネチャ

dynamic UO.LastAttack();

最後の攻撃ターゲットのserialを読み取ります。

引数

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

戻り値

int — 保存済み serial; 0 は、serial がインストールされていないことを意味します。 bool ではなく、graphic/type でもありません。ゼロ以外の ID はもう世界に存在しない可能性があります。

動作

  • フィールドソース: Bridge.LastAttack。このコマンドはオブジェクトを選択、使用、または攻撃しません。
  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 最後の攻撃ターゲットのserialを読み取ります。
var id = UO.LastAttack();
UO.Print(Hex(id));

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

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

引数と実行の流れ:

  • フィールドソース: Bridge.LastAttack。このコマンドはオブジェクトを選択、使用、または攻撃しません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastAttack();
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print(UO.GetName(id));
    }

    return null;
}

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

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

引数と実行の流れ:

  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.LastAttack();
        UO.Wait(500);
        var after = UO.LastAttack();
        UO.Print(before = after);
        return null;
    }
}

コマンドの実装

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

UO.LastAttack() — UO.LastAttack()

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

結果: dynamic / Any.

呼び出し時:

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

case "lastattack":

                case "wartargetid": return new InjectionValue(bridge.LastAttack);

UO.SetClassMask

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

C# のシグネチャ

int UO.SetClassMask(object? name, object? required);
int UO.SetClassMask(object? name, object? required, object? forbidden);

classMask のカスタム機器クラスを作成するか、UO.AttackNearest に置き換えます。 You choose a name and graphic/type things;組み込みの役職は必要ありません。

引数

  • name — あなたの名前を含む空でない文字列 (例: "DTMH"、"my_group"、"archer_with_shield")。大文字と小文字は重要ではありません。端の周囲のスペースは削除されます。 | 、;禁止: これらは優先順位の区切り文字です。 any/all/-1 は、フィルターを無効にするために予約されています。
  • required — 1 つの type、代替グループのフラット配列または必須グループの配列。各グループは type またはフラット アレイです。各グループから少なくとも 1 つは必要です。空の必須グループは許可されません。各 type は、int/数値/16 進文字列 1..65534 です。グループの配列よりも深いネストは受け入れられません。これらは graphic のものであり、serial や body のキャラクターではありません。
  • forbidden — オプションの type または不正な型のフラット配列。デフォルトでは、禁止されている項目はありません。空の配列も許可されます。そのようなアイテムを着用している場合はルールに適合しません。同じ境界線 1..65534; -1/いずれもここでは受け入れられません。必須グループに代わるすべての選択肢を完全に禁止することは不可能です。

戻り値

int 1 - ルールがチェックされ、記録されました。無効なタイプ/名前/空の必須グループ/不一致によりスクリプト エラーが発生しますが、これは try/CATCH; によって捕捉できます。以前のルールが残ります。 serial や見つかった文字は返さず、攻撃も開始しません。

動作

  • この名前はカスタム ラベルであり、サーバーの職業ではありません。ルールには、DTMH、my_group、またはその他の単語を付けることができます。エンジンはキャラクター名によってサーバー上のスキル/クラスを決定しません。
  • 必須では、1 つの type またはフラット アレイはリストの少なくとも 1 つを意味します。グループの配列は、各グループから少なくとも 1 つのものが必要であることを意味します。たとえば、[革、杖] には革と杖が必要です。これは代替案のセットであり、リストされているワードローブ全体を着用する必要があるわけではありません。
  • 禁止されたアイテムを着用した場合、たとえ必須条件が満たされていたとしても、そのキャラクターはこのルールから除外されます。レザーと禁止されているチェーンはレザーのルールを満たしません。他のルールも引き続きテストされます。
  • バックパック 21 を除く、レイヤー 1..24 に着用されている積載アイテムのみがカウントされます。バックパック/チェスト、マウント25、雑誌26..28、バンク29の中身は衣類とみなされません。 graphic/type を比較します。 serial、名前、およびhue はここでは使用されません。
  • 適切な機器がロードされていないと、リストは一致しません。サーバーが機器をまだ送信していない場合、ローカル データに禁止項目が存在しないことは、サーバー上に禁止項目が存在しないことを証明するものではありません。クライアントは隠されたデータを推測しません。
  • ルールは、その関数とインクルードを含む 1 つのランタイム スクリプトに属します。他の独立した起動には転送されず、プロファイルにも保存されません。再起動する場合は、一般的な設定手順などで再定義してください。 SetClassMask を繰り返すと、新しいデータが完全に検証された後にのみ、ルールが同じ名前で置き換えられます。
  • 配列は登録時にコピーされます。元の配列を変更しても、SetClassMask を繰り返すというルールは変わりません。複数の一致ルールは、classMask の名前の順序によって解決されます。標準的なサーバー服装テーブルはありません。

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

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

簡単な例

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

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

var result = UO.SetClassMask("simple_sword", 0x0F5E);
UO.Print("SetClassMask: " + Convert.ToString(result));

1。 DTMH: チェーンなしの自分のスキン - 直接スクリプト

引数と実行の流れ:

  • DTMH - あなたの名前だけ。 myLeather/forbiddenChain の値は例です。サーバーの実際の graphic に置き換えるか補足してください。フラットリストとは、完全なセットではなく、OR を意味します。
var myLeather = Gear(0x13C4, 0x13C7);
var forbiddenChain = Gear(0x13BF, 0x13C0);
UO.SetClassMask("DTMH", myLeather, forbiddenChain);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "DTMH", true, true);
if (Truth(enemy != 0))
{
    UO.AddObject("leather_enemy", enemy);
}

dynamic Gear(params dynamic[] values)
{
    return values;
}

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

2。あなたの名前、持ち物、攻撃の順序 - スクリプトの機能

引数と実行の流れ:

  • DTMH が最初に選択されます。適切なDTMH - ヘビー、次にハンターがない場合のみ。 10 細胞上の DTMH は、2 細胞に負荷がかかるよりも優先されます。順序を逆にするには、classMask の行を変更します。 2 つの DTMH のうち、最も近いものが選択されます。
  • Gear は完全に縮小されたユーザー機能 C# であり、別個のコマンド UO ではありません。 Gear(革、譜)の 2 つの配列は、2 つの必要なグループを形成します。革に型を加えることで選択肢が広がります。革製品を2つ着用する必要はありません。
return  RunScenario();
 object? RunScenario()
{
    var leather = Gear(0x13C4, 0x13C7);
    var staves = Gear(0x0DF0, 0x0E81);
    var chain = Gear(0x13BF, 0x13C0);
    var plate = Gear(0x1415, 0x1411);
    var bows = Gear(0x13B2, 0x0F50);
    UO.SetClassMask("DTMH", Gear(leather, staves), chain);
    UO.SetClassMask("охотник", bows);
    UO.SetClassMask("тяжёлый", plate);
    var notoriety = "5|6";
    var distance = 12;
    var body = -1;
    var maxZ = 8;
    dynamic nearest = true;
    var color = -1;
    var classMask = "DTMH|тяжёлый|охотник";
    dynamic aliveOnly = true;
    dynamic visibleOnly = true;
    var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
    if (Truth(enemy == 0))
    {
        UO.Print("No matching enemy; no attack sent");
        return null;
    }

    UO.AddObject("selected_enemy", enemy);
    return null;
}

dynamic Gear(params dynamic[] values)
{
    return values;
}

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

3。変数宣言による必要な型の完全なセット - スクリプト クラス

引数と実行の流れ:

  • 変数 required[1] を宣言すると、インデックス 0 と 1 を持つ 2 つの要素が作成されます。 2 つのネストされたグループには胴体と武器が必要です。平ら [torsoType,weaponType] は胴体または武器を意味します。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        dynamic[] required = new dynamic[checked((int)(1) + 1)];
        dynamic[] torso = new dynamic[checked((int)(0) + 1)];
        dynamic[] weapon = new dynamic[checked((int)(0) + 1)];
        torso[0] = 0x13C4;
        weapon[0] = 0x0DF0;
        required[0] = torso;
        required[1] = weapon;
        UO.SetClassMask("мой_комплект", required);
        var enemy = UO.AttackNearest(5, 6, -1, 4, true, -1, "мой_комплект", true, true);
        if (Truth(enemy != 0))
        {
            UO.AddObject("outfit_enemy", enemy);
        }

        return null;
    }

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

4。次の攻撃の前にルールで服を着替える - 直接スクリプト

引数と実行の流れ:

  • 再登録すると、ルールのコピーが置き換えられます。古い名前がそのまま残るため、優先行を書き換える必要はありません。
dynamic[] allowed = new dynamic[checked((int)(0) + 1)];
allowed[0] = 0x13B2;
UO.SetClassMask("приоритетный", allowed);
allowed[0] = 0x0F50;
UO.SetClassMask("приоритетный", allowed);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "приоритетный", true, true);
if (Truth(enemy != 0))
{
    UO.AddObject("updated_outfit", enemy);
}

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.SetClassMask(name, required) — UO.SetClassMask(Any,Any)

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

結果: int / Integer.

呼び出し時:

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

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

args => new InjectionValue(SetClassMask(args))

UO.SetClassMask(name, required, forbidden) — UO.SetClassMask(Any,Any,Any)

引数: name (Any), required (Any), forbidden (Any)

結果: int / Integer.

呼び出し時:

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

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

args => new InjectionValue(SetClassMask(args))

UO.SetWarMode

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

C# のシグネチャ

void UO.SetWarMode(object? value);

キャラクターの戦闘モードまたは平和モードを要求します。

引数

  • value - 0 - 平和モード。ゼロ以外の整数は戦闘モードです。

戻り値

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

動作

  • WarMode はモードを GameActions に渡します。ToggleWarMode: 0 は無効になり、ゼロ以外の値は有効になります。 Player がなければアクションはありません。
  • Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.SetWarMode");
UO.SetWarMode(1);

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

引数と実行の流れ:

  • キャラクターの戦闘モードまたは平和モードを要求します。
UO.SetWarMode(1);

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

引数と実行の流れ:

  • WarMode はモードを GameActions に渡します。ToggleWarMode: 0 は無効になり、ゼロ以外の値は有効になります。 Player がなければアクションはありません。
return  RunScenario();
 object? RunScenario()
{
    UO.SetWarMode(0);
    return null;
}

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

引数と実行の流れ:

  • Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(1);
        return null;
    }

    void ApplyMode(dynamic mode)
    {
        UO.SetWarMode(mode);
    }
}

コマンドの実装

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

UO.SetWarMode(value) — UO.SetWarMode(Any)

引数: value (Any)

結果: void / Unit.

呼び出し時:

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

case "setwarmode": WarMode(Arg(0)); return InjectionValue.Unit;

UO.Specmove

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

C# のシグネチャ

void UO.Specmove(object? direction);
void UO.Specmove(object? direction, object? running);

1 つのステップ要求をブリッジに直接送信します。

引数

  • direction — int;方向と7 daët 0..7 N、NE、E、SE、S、SW、W、NW。
  • running - オプションの数値フラグ int: 0/なし - 歩行、非ゼロ - ランニング。

戻り値

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

動作

  • ExecuteLegacyManualAlias は、bridge.Step(方向 & 7、実行中!= 0) を呼び出し、すべての結果コード 0/2/3/4/5/7; を破棄します。 voidは外に戻ります。これは 1 つのステップ/ターンであり、ルートではありません。 Step ~ 10000 ミリ秒以内の待機は維持されますが、スクリプトは確認応答、失敗、またはタイムアウト コードを受け取りません。
  • ブランチは、UO.Step からの実行時条件 MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor を満たしていません。 Bridge/Player.Walk 自体とサーバーは引き続き動きをチェックします。
  • ゲーム ストリームの QueueStep は、プレーヤー、接続、方向、キュー、テンポ、ローカル トラフィックをチェックします。 Player.Walk の前に、各呼び出しはシーケンスと Walker の確認/拒否の世代を個別に記録します。次に、このスナップショットとともに Result を返します。 Step と保留中の StepControlled は、次のリクエストの共通フィールドではなく、この保存されたペアのみをチェックします。代わりのプレーヤー/ウォーカーは一般的な拒否で待機を終了します。別の通常のコマンドを確認しても、このステップは確認されません。移動を伴わない回転は別のケースのままです。

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

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

簡単な例

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

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

UO.Print("Calling UO.Specmove");
UO.Specmove(0);

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

引数と実行の流れ:

  • 1 つのステップ要求をブリッジに直接送信します。
UO.Specmove(0);

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

引数と実行の流れ:

  • ExecuteLegacyManualAlias は、bridge.Step(direction&7,running!=0) を呼び出し、返された 1/0 を破棄します。これは 1 つのステップであり、座標へのパスではありません。
return  RunScenario();
 object? RunScenario()
{
    UO.Specmove(2, 1);
    return null;
}

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

引数と実行の流れ:

  • ブランチは、UO.Step からの実行時条件 MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor を満たしていません。 Bridge/Player.Walk 自体とサーバーは引き続き動きをチェックします。

標準走行速度

最小ステップ間隔: ウォーキング - ウォーキング 400 ミリ秒、ランニング 200 ミリ秒。乗車 - ウォーキング 200 ミリ秒、ランニング 100 ミリ秒。

これらは標準的なクライアント制限であり、シャードに対して自動的に定義される設定ではありません。サーバーの速度とフライト モードは個別にカウントされます。スクリプト タイマーは動作を遅くする可能性がありますが、これらの制限は軽減されません。

ステップ、ルート、Follow、マウス/キー コントロール、マップはキャラクターの共有キューを使用します。サーバーによるルートの置き換え、方向転換、または位置の調整では、ステップ要求後の残りの一時停止はキャンセルされません。遅延の後は、ドロップされたフレームを補うための高速バーストはありません。確認を待っていたり、障害物があったり、コミュニケーションが不十分だったりすると、動きが遅くなる可能性があります。

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.GetX();
        UO.Specmove(2, 0);
        UO.Wait(500);
        UO.Print(UO.GetX() - before);
        return null;
    }
}

コマンドの実装

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

UO.Specmove(direction) — UO.Specmove(Any)

引数: direction (Any)

結果: void / Unit.

呼び出し時:

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

case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;

UO.Specmove(direction, running) — UO.Specmove(Any,Any)

引数: direction (Any), running (Any)

結果: void / Unit.

呼び出し時:

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

case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;

UO.UseAbility

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

C# のシグネチャ

int UO.UseAbility(object? abilityId);

現在の武器で利用可能な能力をリクエストします。

引数

  • abilityId — 能力名または int ID 1..AbilityData.Abilities.Length。名前は正規化されます。文字/数字のみが大文字で保存され、比較されます。数字テキストはIDを意味します。

戻り値

数値フラグ int: 1 - ID は現在のプレーヤーの主/副能力と一致し、対応する GameActions が呼び出されます。 0 - プレイヤーなし、不明 ID/名前または能力は現在の武器に属していません。

動作

  • 文字列形式では ResolveAbility が使用されます。数値を直ちにブリッジします。UseAbility。ブリッジは 2 つの現在の能力から 0x80 をマスクし、ID と一致させてから、UsePrimaryAbility または UseSecondaryAbility を呼び出します。
  • これはローカルリクエストの受け入れであり、サーバーによるヒット、マナ消費、またはアクティベーションの確認ではありません。使用可能な ID は GetWeaponAbilities と読み取られ、アクティブ名は GetActiveAbility です。
  • GameActions は、能力選択ビット 0x80 を切り替えます。すでに選択されている能力は ID 0 を送信し、選択を解除します。それ以外の場合、両方の選択ビットがクリアされ、選択された ID が送信され、そのビットがローカルに設定されます。したがって、再度呼び出すと機能がオフになる可能性があります。ローカルの変更は、成功したヒットやサーバーの確認を意味するものではありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 現在の武器で利用可能な能力をリクエストします。
UO.Print(UO.UseAbility("Armor Ignore"));

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

引数と実行の流れ:

  • 文字列形式では ResolveAbility が使用されます。数値を直ちにブリッジします。UseAbility。ブリッジは 2 つの現在の能力から 0x80 をマスクし、ID と一致させてから、UsePrimaryAbility または UseSecondaryAbility を呼び出します。
return  RunScenario();
 object? RunScenario()
{
    var abilities = UO.GetWeaponAbilities();
    if (Truth(UO.GetArrayLength(abilities) > 0))
    {
        UO.Print(UO.UseAbility(abilities[0]));
    }

    return null;
}

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

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

引数と実行の流れ:

  • これはローカルリクエストの受け入れであり、サーバーによるヒット、マナ消費、またはアクティベーションの確認ではありません。使用可能な ID は GetWeaponAbilities と読み取られ、アクティブ名は GetActiveAbility です。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetAbilityID("Armor Ignore");
        if (Truth(id > 0))
        {
            var accepted = UO.UseAbility(id);
            UO.Print(accepted);
            UO.Print(UO.GetActiveAbility());
        }

        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.UseAbility(abilityId) — UO.UseAbility(Integer)

引数: abilityId (Integer/String)

結果: int / Integer.

呼び出し時:

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

public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);

UO.UseAbility(abilityId) — UO.UseAbility(String)

引数: abilityId (Integer/String)

結果: int / Integer.

呼び出し時:

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

public int UseAbility(string abilityName)

        {

            int abilityId = bridge.ResolveAbility(abilityName);

            return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;

        }

UO.UsePrimaryAbility

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

C# のシグネチャ

void UO.UsePrimaryAbility();

武器の主な能力を召喚します。

引数

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

戻り値

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

動作

  • UsePrimaryAbility は Invoke 経由で GameActions.UsePrimaryAbility(_world) を送信します。受け入れサインは返されません。アクティブ能力は別途チェックされます。
  • 例では、UO.Wait はスクリプトの一時停止のみを指定します。一時停止が終了しても、サーバーがリクエストを完了したことは証明されません。
  • GameActions は、能力選択ビット 0x80 を切り替えます。すでに選択されている能力は ID 0 を送信し、選択を解除します。それ以外の場合、両方の選択ビットがクリアされ、選択された ID が送信され、そのビットがローカルに設定されます。したがって、再度呼び出すと機能がオフになる可能性があります。ローカルの変更は、成功したヒットやサーバーの確認を意味するものではありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 武器の主な能力を召喚します。
UO.UsePrimaryAbility();

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

引数と実行の流れ:

  • UsePrimaryAbility は Invoke 経由で GameActions.UsePrimaryAbility(_world) を送信します。受け入れサインは返されません。アクティブ能力は別途チェックされます。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GetWeaponAbilities());
    UO.UsePrimaryAbility();
    return null;
}

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

引数と実行の流れ:

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

     public object? RunScenario()
    {
        UO.UsePrimaryAbility();
        UO.Print(UO.GetActiveAbility());
        return null;
    }
}

コマンドの実装

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

UO.UsePrimaryAbility() — UO.UsePrimaryAbility()

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

結果: void / Unit.

呼び出し時:

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

case "useprimaryability": bridge.UsePrimaryAbility(); return InjectionValue.Unit;

UO.UseSecondaryAbility

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

C# のシグネチャ

void UO.UseSecondaryAbility();

追加の武器能力を召喚します。

引数

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

戻り値

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

動作

  • UseSecondaryAbility は Invoke 経由で GameActions.UseSecondaryAbility(_world) を送信します。受け入れサインは返されません。アクティブ能力は別途チェックされます。
  • 例では、UO.Wait はスクリプトの一時停止のみを指定します。一時停止が終了しても、サーバーがリクエストを完了したことは証明されません。
  • GameActions は、能力選択ビット 0x80 を切り替えます。すでに選択されている能力は ID 0 を送信し、選択を解除します。それ以外の場合、両方の選択ビットがクリアされ、選択された ID が送信され、そのビットがローカルに設定されます。したがって、再度呼び出すと機能がオフになる可能性があります。ローカルの変更は、成功したヒットやサーバーの確認を意味するものではありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 追加の武器能力を召喚します。
UO.UseSecondaryAbility();

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

引数と実行の流れ:

  • UseSecondaryAbility は Invoke 経由で GameActions.UseSecondaryAbility(_world) を送信します。受け入れサインは返されません。アクティブ能力は別途チェックされます。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GetWeaponAbilities());
    UO.UseSecondaryAbility();
    return null;
}

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

引数と実行の流れ:

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

     public object? RunScenario()
    {
        UO.UseSecondaryAbility();
        UO.Print(UO.GetActiveAbility());
        return null;
    }
}

コマンドの実装

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

UO.UseSecondaryAbility() — UO.UseSecondaryAbility()

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

結果: void / Unit.

呼び出し時:

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

case "usesecondaryability": bridge.UseSecondaryAbility(); return InjectionValue.Unit;

UO.WarMode

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

C# のシグネチャ

int UO.WarMode();
void UO.WarMode(object? mode);

キャラクターの戦闘モードを読み取るかクエリします。

引数

  • mode — オプションの int: 0 は無効になり、ゼロ以外の値は有効になります。引数のない形式は読み取りのみを行います。

戻り値

引数なし 数値フラグ int: 1 - 戦闘モードの現在のプレイヤー、0 - 平和モード/プレイヤーなし。モード - null では、結果はありません。

動作

  • WarMode() は Player.InWarMode をローカルで読み取ります。 WarMode(モード)は、選択したモードでGameActions.ToggleWarModeを呼び出します。 Player がないとリクエストは実行されません。
  • 引数を含むフォームの結果を変数に代入しないでください。即時再読はオンラインでの確認ではありません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • キャラクターの戦闘モードを読み取るかクエリします。
var active = UO.WarMode();
UO.Print(active);

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

引数と実行の流れ:

  • WarMode() は Player.InWarMode をローカルで読み取ります。 WarMode(モード)は、選択したモードでGameActions.ToggleWarModeを呼び出します。 Player がないとリクエストは実行されません。
return  RunScenario();
 object? RunScenario()
{
    UO.WarMode(1);
    UO.Wait(250);
    UO.Print(UO.WarMode());
    return null;
}

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

引数と実行の流れ:

  • 引数を含むフォームの結果を変数に代入しないでください。即時再読はオンラインでの確認ではありません。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.WarMode();
        UO.WarMode(0);
        UO.Print(before);
        return null;
    }
}

コマンドの実装

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

UO.WarMode() — UO.WarMode()

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

結果: int / Integer.

呼び出し時:

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

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

UO.WarMode(mode) — UO.WarMode(Integer)

引数: mode (Integer)

結果: void / Unit.

呼び出し時:

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

public void WarMode(int mode) => bridge.WarMode(mode);

UO.WarTargetID

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

C# のシグネチャ

dynamic UO.WarTargetID();

最後の攻撃ターゲットのserialを読み取ります。

引数

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

戻り値

int — 保存済み serial; 0 は、serial がインストールされていないことを意味します。 bool ではなく、graphic/type でもありません。ゼロ以外の ID はもう世界に存在しない可能性があります。

動作

  • フィールドソース: Bridge.LastAttack。このコマンドはオブジェクトを選択、使用、または攻撃しません。
  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 最後の攻撃ターゲットのserialを読み取ります。
var id = UO.WarTargetID();
UO.Print(Hex(id));

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

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

引数と実行の流れ:

  • フィールドソース: Bridge.LastAttack。このコマンドはオブジェクトを選択、使用、または攻撃しません。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.WarTargetID();
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print(UO.GetName(id));
    }

    return null;
}

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

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

引数と実行の流れ:

  • 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.WarTargetID();
        UO.Wait(500);
        var after = UO.WarTargetID();
        UO.Print(before = after);
        return null;
    }
}

コマンドの実装

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

UO.WarTargetID() — UO.WarTargetID()

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

結果: dynamic / Any.

呼び出し時:

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

case "lastattack":

                case "wartargetid": return new InjectionValue(bridge.LastAttack);

Clone this wiki locally