Skip to content

JA UO Topic magic

Codex edited this page Oct 12, 2026 · 4 revisions

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

魔法

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

魔法による呪文、能力、移動。対象を絞ったアクションについては、事前に対象を設定し、適用条件を確認してください。

呪文: すべての名前と数字

完全なカタログとサンプルを開く

セクション

トピック コマンドと説明
Cast UO.Cast
CastToObject UO.CastToObject
CastAbility UO.CastAbility
Active Spell Ability UO.IsActiveSpellAbility
Spell Timers UO.TicksSpell

すべてのテーマコマンド

鋳造

UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell

旅行

UO.AddRecall · UO.AddGate

このトピックに関する例

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

UO.Cast

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

UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

UO.CastToObject

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

var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

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


UO.AddGate

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

C# のシグネチャ

void UO.AddGate(object? bookSerial);

引数

  • bookSerial は、互換性のあるスクリプトがレガシー リスト エントリとして保存する識別子の値です。現在の実行時、値は文字列にシリアル化されます。このコマンドは、ワールド内のオブジェクトの存在をチェックしません。

戻り値

void。チームは、この本の入手可能性やゲーム ポータルの作成については確認していません。

動作

  • 値は、現在の実行時状態のリスト AddGate に追加されます。 ClassicUO では、この互換性リストはゲーム アクションをトリガーせず、読み取るための文書化されたパブリック ゲッターもありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.AddGate");
UO.AddGate("0x40012345");

1。ゲートを開かずにIDをレガシーデータとして保存します。 - 直接スクリプト

引数と実行の流れ:

  • ゲートを開かずにIDをレガシーデータとして保存します。
UO.AddGate("0x40012345");

2。互換性のあるスクリプトに渡された文字列の値を使用します。 - スクリプト機能

引数と実行の流れ:

  • 互換性のあるスクリプトに渡された文字列の値を使用します。
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddGate(bookSerial);
    return null;
}

3。値をランタイムリスト AddGate に書き込みます。 - スクリプトクラス

引数と実行の流れ:

  • 値をランタイムリスト AddGate に書き込みます。
  • この呼び出しでは互換性データが保存されます。彼は世界中でその本を使いません。
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()
    {
        RememberGateBook("0x40012345");
        return null;
    }

    void RememberGateBook(dynamic bookSerial)
    {
        UO.AddGate(bookSerial);
    }
}

コマンドの実装

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

UO.AddGate(bookSerial) — UO.AddGate(Any)

引数: bookSerial (Any)

結果: void / Unit.

呼び出し時:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.AddRecall

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

C# のシグネチャ

void UO.AddRecall(object? bookSerial);

引数

  • bookSerial は、互換性のあるスクリプトがレガシー リスト エントリとして保存する識別子の値です。ランタイムは渡された値を文字列にシリアル化します。

戻り値

void。この呼び出しは結果を返さず、本の存在を確認しません。

動作

  • 値は、現在の実行時状態のリスト AddRecall に追加されます。 ClassicUO では、この互換性リスト自体はゲーム コマンドを送信せず、読み取るための文書化されたパブリック ゲッターもありません。

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

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

簡単な例

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

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

UO.Print("Calling UO.AddRecall");
UO.AddRecall("0x40012345");

1。値を互換性データとして保存し、Recall を実行しないでください。 - 直接スクリプト

引数と実行の流れ:

  • 値を互換性データとして保存し、Recall を実行しないでください。
UO.AddRecall("0x40012345");

2。文字列変数を介して識別子を渡します。 - スクリプト機能

引数と実行の流れ:

  • 文字列変数を介して識別子を渡します。
return  RunScenario();
 object? RunScenario()
{
    var bookSerial = "0x40012345";
    UO.AddRecall(bookSerial);
    return null;
}

3。呼び出しごとに、現在のランタイムの AddRecall に個別のエントリが追加されます。 - スクリプトクラス

引数と実行の流れ:

  • 呼び出しごとに、現在のランタイムの AddRecall に個別のエントリが追加されます。
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.AddRecall("0x40012345");
        UO.AddRecall("0x40012346");
        return null;
    }
}

コマンドの実装

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

UO.AddRecall(bookSerial) — UO.AddRecall(Any)

引数: bookSerial (Any)

結果: void / Unit.

呼び出し時:

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

case "adddir":

                case "addfindlist":

                case "addgate":

                case "addrecall":

                case "addstep":

                    LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));

                    break;

UO.Cast

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

C# のシグネチャ

int UO.Cast(object? spellName);

名前で呪文の使用を要求します。パラメーターは 1 つだけです: spellName (例: UO.Cast("Heal"))。ターゲットは個別に選択されます。マウスで表示された十字線を使用するか、Cast の前に WaitTargetObject を使用します。リクエストを受け入れても、効果が成功したことは確認されません。

引数

  • spellName - 必須行 - 引用符で囲んだ呪文の英語名:「Heal」、「Cure」、「Greater Heal」。名前はインターフェイスとともに翻訳されません。この辞書は、組み込みのエイリアスや綴りの単語も認識します。数値 IDという行を含む29「ターゲット、距離、知名度、 maxZ と wait はパラメータではありません Cast. 全員の名前と学校.

戻り値

int: 1/true - クライアントはリクエストを受け入れました。 0/false - 名前が認識されないか、リクエストがローカルで拒否されました。 if UO.Cast("Heal") { ... } と書くか、1/true と比較することができます。これらはID の呪文や治癒/ダメージの証拠ではありません。引数が欠落しているか、余分な引数があるとエラーが発生します。このコマンドは、呪文を狙って完了することを期待していません。

動作

  • 単一形式: UO.Cast(spellName)。 2 番目以降の引数はありません。ターゲットの検索、応答の準備、待機、クリアは別のコマンドで実行されます。
  • 手動で選択するには、前のキュー CancelWaitTarget をクリアし、Cast を呼び出して、十字線で目的のオブジェクトをクリックします。 Cast 自体はキューをクリアしません。スクリプトが事前にキューを準備していた可能性があります。
  • 自動ターゲットの場合は、最初に WaitTargetObject(serial/alias) を呼び出し、次に Cast(name) を呼び出します。この順序により、サーバーの素早い狙いに対応することができます。範囲のない呪文については、答えを用意しないでください。
  • サーバーは、呪文の利用可能性、リソース、有効なターゲット、範囲、効果を決定します。肯定的な結果は、ローカルでのリクエストの受け入れを確認するだけです。
  • サーバーに障害が発生した場合、準備されたキューは無人のままになる可能性があります。制限された待機またはローカル障害の後に、CancelWaitTarget を削除します。他のスクリプトをターゲットと並行して実行しないでください。
  • 受け入れられたリクエストは TicksSpell を更新します。 Cast は、HP がアニメーション化、回復、または変更されるのを待ちません。カタログ ID では内部プロトコルについて説明していますが、引数内の名前は置き換えられません。

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

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

簡単な例

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

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

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

1。治療法: マウスでターゲットを選択 - 直接スクリプト

引数と実行の流れ:

  • Cast に対する唯一の議論は Cure です。起動後、ゲームサイトを使用してキャラクターを選択します。サーバー障害とゲーム内の結果を確認してください。
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
    UO.Print("Choose the character with the spell cursor");
}
else
{
    UO.Print("Cure request rejected");
}

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

2。ヒール: 自分用の個別のターゲット - スクリプト機能

引数と実行の流れ:

  • self — 引数 WaitTargetObject; Cast に対する唯一の引数は Heal です。 3000 - この例では目標時間は 3 秒ですが、治癒の完了を保証するものではありません。最後に、失敗した場合は残りの応答を削除します。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.CancelWaitTarget();
    try
    {
        UO.WaitTargetObject("self");
        if (Truth(UO.Cast("Heal")))
        {
            await Delay(3000);
        }
    }
    finally
    {
        UO.CancelWaitTarget();
    }

    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。選択した味方のフル機能 - シナリオクラス

引数と実行の流れ:

  • spellName、ターゲット、cleanupDelayMs - 関数 CastAtObject のパラメータ、オーバーロード UO.Cast ではありません。内部的には、Cast は spellName のみを受け入れます。 ASC は文字列 ID を数値に変換します。 4000 — キュークリアの遅延。 true は、処理の成功ではなく、リクエストの受け入れを意味します。

呪文 / 呪文

呪文/呪文

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 = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(await CastAtObject("Greater Heal", target, 4000)))
        {
            UO.Print("Request sent; verify healing in the game");
        }

        return null;
    }

    async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
        {
            return false;
        }

        dynamic accepted = false;
        UO.CancelWaitTarget();
        try
        {
            UO.WaitTargetObject(target);
            accepted = UO.Cast(spellName);
            if (Truth(accepted))
            {
                await Delay(cleanupDelayMs);
            }
        }
        finally
        {
            UO.CancelWaitTarget();
        }

        return accepted;
    }

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

    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.Cast(spellName) — UO.Cast(String)

引数: spellName (String)

結果: int / Integer.

呼び出し時:

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

public int Cast(string spellName)

        {

            if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))

            {

                SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");

                return 0;

            }

            return CastCore(spellName) ? 1 : 0;

        }

UO.CastAbility

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

C# のシグネチャ

int UO.CastAbility(object? abilityId);

UseAbility を介して、現在の武器の現在選択されている能力を切り替えます。すでに選択されている能力を再度呼び出すと、その選択が解除されます。

引数

  • abilityId — ResolveClassicUOAbilityId によって解決される能力名または番号文字列。未知の値は 0 を与えます。

戻り値

int 1 — クライアントは現在のプライマリ/セカンダリ能力を呼び出しました。 0 - キャラクターなし、不明 ID、または能力が現在の武器と一致しません。

動作

  • 1 は、サーバーによるリソースのヒットまたはライトオフの成功ではなく、クライアント要求の受け入れを記述します。現在のプライマリ/セカンダリ能力ではないIDは、ディレクトリ内にある場合でも0を返します。
  • GameActions.UsePrimaryAbility/UseSecondaryAbility 0x80 ビットを確認します。ビットがオフの場合、他のオプションの選択を解除し、選択した能力を送信します。すでに有効になっている場合は、ID 0 を送信して無効にします。次にビットが切り替わります。 1 を返すと、シャットダウンを含む、このクライアント ブランチへの呼び出しが確認されます。

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

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

簡単な例

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

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

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

1。アビリティ名の解決 - 直接スクリプト

引数と実行の流れ:

  • カタログ内の入手可能性は、武器のマッチングとは別のものです。
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
    var accepted = UO.CastAbility(id);
    UO.Print(Convert.ToString(accepted));
}

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

2。名前で呼び出す - スクリプト関数

引数と実行の流れ:

  • 名前は ID に解決され、現在の武器と照合されます。
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastAbility("Armor Ignore");
    UO.Print(Convert.ToString(accepted));
    return null;
}

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

引数と実行の流れ:

  • ゼロはディレクトリの外にあり、アクティブ化せずに 0 を返します。

呪文 / 呪文

呪文/呪文

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

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

コマンドの実装

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

UO.CastAbility(abilityId) — UO.CastAbility(Integer)

引数: abilityId (Integer/String)

結果: int / Integer.

呼び出し時:

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

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

UO.CastAbility(abilityId) — UO.CastAbility(String)

引数: abilityId (Integer/String)

結果: int / Integer.

呼び出し時:

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

public int UseAbility(string abilityName)

        {

            int abilityId = bridge.ResolveAbility(abilityName);

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

        }

UO.CastToObject

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

C# のシグネチャ

dynamic UO.CastToObject(object? spellName, object? objID);

待機オブジェクトのターゲットを配置し、名前または数値 ID で呪文を送信します。

引数

  • spellName - string は、スペースの代わりにアンダースコアを含む呪文の名前、またはブリッジの場合は数値 ID です。Cast。
  • objID — オブジェクトのシリアル番号、または self/backpack/lasttarget/saved オブジェクトのサポートされている名前。数値文字列と 0x 文字列は実行時に解決されます。

戻り値

int/論理結果 1 - クライアントはリクエスト Cast を受け入れました。 0 - リクエストは拒否されました。呪文の成功はサーバーによって確認されません。

動作

  • 文字列形式は CastAtTarget を通過します。数値形式では、WaitTargetObject を入力し、次にブリッジCast を入力します。 Cast が失敗すると、保留中のターゲットはキャンセルされます。承認されると、ticksSpell が更新されます。
  • ブリッジは、非正の spellId、接続なし、および無効な文字を拒否します。タイマーはキャストの終了ではなく、送信をマークします。オブジェクトへの影響の結果はサーバーによって異なります。

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

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

簡単な例

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

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

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

1。自分へのご褒美 - 直接脚本

引数と実行の流れ:

  • Heal は、self を次のサーバー カーソルのターゲットにします。
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));

2。数値 ID - スクリプト関数

引数と実行の流れ:

  • 数値形式は ID 4 をクライアントに渡します。 1 はリクエストの送信を意味します。
return  RunScenario();
 object? RunScenario()
{
    var accepted = UO.CastToObject(4, UO.Self());
    UO.Print(Convert.ToString(accepted));
    return null;
}

3。 Check Selected Object - Script Class

引数と実行の流れ:

  • ローカルの存在チェックは、欠落している lasttarget の使用を回避するのに役立ちます。

呪文 / 呪文

呪文/呪文

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

     public object? RunScenario()
    {
        var target = UO.LastTarget();
        if (Truth(UO.Exists(target)))
        {
            var accepted = UO.CastToObject("Greater Heal", target);
            UO.Print(Convert.ToString(accepted));
        }

        return null;
    }

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

コマンドの実装

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

UO.CastToObject(spellName, objID) — UO.CastToObject(Any,Any)

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

結果: dynamic / Any.

呼び出し時:

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

case "casttoobject":

                    if (arguments[0].Kind == InjectionValueKind.String)

                        return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;



                    WaitTargetObject(Arg(1));

                    int castAccepted = bridge.Cast(Arg(0));

                    if (castAccepted != 0)

                    {

                        ticksSpell = Timer();

                        return InjectionValue.True;

                    }



                    bridge.CancelTarget();

                    return InjectionValue.False;

UO.IsActiveSpellAbility

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

C# のシグネチャ

dynamic UO.IsActiveSpellAbility(object? spellName);

サーバーが選択した能力/呪文のアクティブ状態を報告したかどうかを確認します。チャネリングされたアビリティを再アクティブ化する前に役立ちます。何もオンにせず、ターゲットをキャストしたり選択したりしません。

引数

  • spellName - 唯一の必須パラメータ: スペルカタログの英語名、または ID 全体。たとえば、「Confidence」と 402 は同じ武士道の呪文を表します。大文字と小文字は重要ではありません。名前内のアンダースコアはスペースに置き換えられます。数直線も認識されます。 ID キャラクター、type アイテム、またはスキル番号を渡さないでください。

戻り値

int: 1 - サーバーはこの ID のアクティブ状態を報告しました。 0 - 現在、そのようなアクティブな状態はありません。 C# で数値結果を確認します: if (UO.IsActiveSpellAbility(402) != 0) { ... }。これは論理的な符号であり、最後のキャストの数、時間、結果ではありません。不明な名前、ID が 1…65535 の外側にあり、結果の状態が 0 を与えることもありません。

動作

  • リストはサーバー パッケージ 0xBF/0x25 を更新します。有効にすると ID が追加され、無効にすると削除されます。グラフィックス ウィンドウや画面上のスペル ボタンがなくても動作します。ウィンドウを閉じると状態が保存されます。接続を切断すると接続がクリアされます。 0 と答えることは、キャラクターが呪文を唱えることができないことを証明するものではありません。サーバーはこのステータスを送信する必要があります。これはすべてのバフに共通のチェックではありません。インスタント ヒール/リコールの場合、このような例ではキャストの成功が確認されません。呪文の持続時間、残りのマナ、利用可能性、および成功は、このコマンドによって決まりません。

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

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

簡単な例

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

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

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

1。 ID - ダイレクトスクリプトを使用してステータスを確認する

引数と実行の流れ:

  • 402 - ID 自信。アクティブな変数には、1 または 0 のいずれかが含まれます。ここでの true は 1 と同等です。メッセージは、キャスト試行の結果ではなく、受信ステータスを説明します。
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
    UO.Print("Confidence is active");
}
else
{
    UO.Print("No active Confidence state received");
}

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

2。アクティブアビリティを繰り返さない - スクリプト機能

引数と実行の流れ:

  • 「自信」 - 同じID 402。 Cast は名前のみを受け入れます。アクティブなステータスがない場合、リクエストは 1 回送信されます。サーバー上での成功は保証されません。このスニペットを高速ループで実行しないでください。サーバーの応答が遅れる可能性があります。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
    {
        UO.Cast("Confidence");
    }

    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; Expected - 有効にする場合は true、無効にする場合は false。 timeoutMs — ミリ秒単位の待機制限。 Main は 500 ミリ秒まで待機し、25 ミリ秒ごとにチェックし、何もキャストしません。この関数は、一致する場合は 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(WaitAbilityState("Confidence", true, 500)))
        {
            UO.Print("Active state received");
        }
        else
        {
            UO.Print("No active state before timeout");
        }

        return null;
    }

    dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
    {
        var elapsed = 0;
        while (Truth(elapsed < timeoutMs))
        {
            if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
            {
                return true;
            }

            UO.Wait(25);
            elapsed = elapsed + 25;
        }

        return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
    }

    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.IsActiveSpellAbility(spellName) — UO.IsActiveSpellAbility(Any)

引数: spellName (Any)

結果: dynamic / Any.

呼び出し時:

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

case "isactivespellability":

                {

                    int? spellId = arguments[0].Kind == InjectionValueKind.String

                        ? ConvertSpellName(Text(0).Replace('_', ' '))

                        : (int?)Arg(0);

                    return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);

                }

UO.TicksSpell

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

C# のシグネチャ

int UO.TicksSpell();

保存されたマークTicksSpellを読み取ります。

引数

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

戻り値

int — ランタイムの開始から 10 分の 1 秒で UO.Timer をマークします。 0 - マークがまだ設定されていない、またはイベントが最初の 10 分の 1 秒以内に発生しました。ミリ秒やカレンダー時間ではありません。

動作

  • フィールド ticksSpell を返します。正常に受け入れられた Cast/CastAtTarget によって更新されます。すべての手動/サーバーアクティビティを自動的に監視するわけではありません。コマンド自体はマークを変更しません。
  • UO.Timer() - マークは年齢を 10 分の 1 秒単位で計算します。異なるランタイム間ではマークは比較されません。

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

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

簡単な例

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

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

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

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

引数と実行の流れ:

  • 保存されたマークTicksSpellを読み取ります。
var stamp = UO.TicksSpell();
UO.Print(stamp);

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

引数と実行の流れ:

  • フィールド ticksSpell を返します。正常に受け入れられた Cast/CastAtTarget によって更新されます。すべての手動/サーバーアクティビティを自動的に監視するわけではありません。コマンド自体はマークを変更しません。
return  RunScenario();
 object? RunScenario()
{
    var stamp = UO.TicksSpell();
    var ageTenths = UO.Timer() - stamp;
    UO.Print(ageTenths);
    return null;
}

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

引数と実行の流れ:

  • UO.Timer() - マークは年齢を 10 分の 1 秒単位で計算します。異なるランタイム間ではマークは比較されません。

呪文 / 呪文

呪文/呪文

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

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

コマンドの実装

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

UO.TicksSpell() — UO.TicksSpell()

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

結果: int / Integer.

呼び出し時:

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

public int TicksSpell() => ticksSpell;

Clone this wiki locally