Skip to content

API UO CallSub ja

Codex edited this page Oct 4, 2026 · 2 revisions

UO.CallSub

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

マネージャーに登録済みのプロシージャを独立したタスクとして起動します。監視などを制御スクリプトから開始する用途です。結果を待つ通常の Basic 呼び出しとは異なり、非同期です。

正確な構文

UO.CallSub(subrutineName:String) -> Unit

パラメーター

  • subrutineName — 必須の String subrutineName はカタログ内の Sub/Function 名です(例:WeightWatch)。パス、ファイル名、実行番号、ソース文字列、SetScriptName 後の表示名ではありません。大文字小文字は区別しませんが、空白は除去しません。プロシージャ引数は渡せません。

戻り値

Unit:戻り値、関数の結果、起動成功の確認はありません。未知の名前では何も起動しません。同期実行には通常の Basic の MyFunction(...) を使います。

動作

  • 同名の場合は選択中の Autoload を優先します。そのファイル内に複数の定義があれば曖昧として拒否します。別途読み込んだ補助手続きには一意の名前が必要です。ファイル順でバックアップを選びません。 CallSub は UO.Exec("exec Name") と同様に、起動前に選択中の Autoload をディスクから読みます。置換は次の呼び出しに反映されます。空または削除されたファイルはエラーを表示し、古いコードやバックアップを実行しません。別途読み込んだ一意の補助手続きには独立した起動経路があります。呼び出しは起動の可否が決まるまで待ちますが、子タスクの終了は待ちません。
  • CallSub は引数を渡しません。Private、構文エラー、必須引数、Basic 無効、同時実行禁止により起動が拒否される場合は IDE の状態・エラーを確認します。実行中の再呼び出しは複製も一時停止解除もしません。キャンセル後の起動は後処理を待つ場合があります。制御側はタスク完了を待ちません。
  • FunRunning は元のプロシージャ名とキーを使い、変更後の表示名は使いません。一時停止は実行を保持するため 1 のままです。キャンセルは後処理中でも 0 です。確認と次の呼び出しは一体の操作ではなく、その間に終了する場合があります。
  • Private や無効な定義でも SubExists は 1 になり得ます。タスク停止や編集タブを閉じても、カタログから必ず消えるわけではありません。変更ファイルの再読み込みで古い定義が削除されます。別 runtime だけに読み込んだ関数はマネージャーに未登録の場合があります。

内部関数:呼び出しから結果まで

以下は実際の実装段階です。C# 名は追加の UO 命令ではありません。実行可能な Basic 補助関数はすべて例に含まれます。

1. CallSub

必須の String subrutineName はカタログ内の Sub/Function 名です(例:WeightWatch)。パス、ファイル名、実行番号、ソース文字列、SetScriptName 後の表示名ではありません。大文字小文字は区別しませんが、空白は除去しません。プロシージャ引数は渡せません。

Unit:戻り値、関数の結果、起動成功の確認はありません。未知の名前では何も起動しません。同期実行には通常の Basic の MyFunction(...) を使います。

プロジェクトのソース: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 関数 CallSub.

2. RunNamedProcedure

同名の場合は選択中の Autoload を優先します。そのファイル内に複数の定義があれば曖昧として拒否します。別途読み込んだ補助手続きには一意の名前が必要です。ファイル順でバックアップを選びません。 CallSub は UO.Exec("exec Name") と同様に、起動前に選択中の Autoload をディスクから読みます。置換は次の呼び出しに反映されます。空または削除されたファイルはエラーを表示し、古いコードやバックアップを実行しません。別途読み込んだ一意の補助手続きには独立した起動経路があります。呼び出しは起動の可否が決まるまで待ちますが、子タスクの終了は待ちません。

Private や無効な定義でも SubExists は 1 になり得ます。タスク停止や編集タブを閉じても、カタログから必ず消えるわけではありません。変更ファイルの再読み込みで古い定義が削除されます。別 runtime だけに読み込んだ関数はマネージャーに未登録の場合があります。

プロジェクトのソース: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; 関数 RunNamedProcedure.

3. Exec

マネージャーに登録済みのプロシージャを独立したタスクとして起動します。監視などを制御スクリプトから開始する用途です。結果を待つ通常の Basic 呼び出しとは異なり、非同期です。

CallSub は引数を渡しません。Private、構文エラー、必須引数、Basic 無効、同時実行禁止により起動が拒否される場合は IDE の状態・エラーを確認します。実行中の再呼び出しは複製も一時停止解除もしません。キャンセル後の起動は後処理を待つ場合があります。制御側はタスク完了を待ちません。

プロジェクトのソース: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 関数 Exec.

以下は実際の実装段階です。C# 名は追加の UO 命令ではありません。実行可能な Basic 補助関数はすべて例に含まれます。

使用例

起動して Main を続行

# 起動して Main を続行
#
# マネージャーに登録済みのプロシージャを独立したタスクとして起動します。監視などを制御スクリプトから開始する用途です。結果を待つ通常の Basic 呼び出しとは異なり、非同期です。
#
# Unit:戻り値、関数の結果、起動成功の確認はありません。未知の名前では何も起動しません。同期実行には通常の Basic の MyFunction(...) を使います。

SUB Main()
    # WeightWatch は下に定義されています。Main は3回の測定を待たず77を返します。77は Main の結果で CallSub の戻り値ではありません。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    UO.CallSub("WeightWatch")
    Return 77
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

パラメーターと実行の説明:

  • WeightWatch は下に定義されています。Main は3回の測定を待たず77を返します。77は Main の結果で CallSub の戻り値ではありません。
  • 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch は全定義付きで、重量・マナを3回測定し、Wait(1000) は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

既存・一時停止中の処理を維持

# 既存・一時停止中の処理を維持
#
# マネージャーに登録済みのプロシージャを独立したタスクとして起動します。監視などを制御スクリプトから開始する用途です。結果を待つ通常の Basic 呼び出しとは異なり、非同期です。
#
# Unit:戻り値、関数の結果、起動成功の確認はありません。未知の名前では何も起動しません。同期実行には通常の Basic の MyFunction(...) を使います。

SUB Main()
    # StartIfIdle は定義と実行を確認します。False は要求なし、True は CallSub 要求を送っただけで、起動・完了の確認ではありません。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    Return StartIfIdle("WeightWatch")
END SUB

Function StartIfIdle(name) As Boolean
    If Not UO.SubExists(name) Then
        Return False
    End If
    If UO.FunRunning(name) Then
        Return False
    End If
    UO.CallSub(name)
    Return True
End Function

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

パラメーターと実行の説明:

  • StartIfIdle は定義と実行を確認します。False は要求なし、True は CallSub 要求を送っただけで、起動・完了の確認ではありません。
  • 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch は全定義付きで、重量・マナを3回測定し、Wait(1000) は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

独立した2つの監視

# 独立した2つの監視
#
# マネージャーに登録済みのプロシージャを独立したタスクとして起動します。監視などを制御スクリプトから開始する用途です。結果を待つ通常の Basic 呼び出しとは異なり、非同期です。
#
# Unit:戻り値、関数の結果、起動成功の確認はありません。未知の名前では何も起動しません。同期実行には通常の Basic の MyFunction(...) を使います。

SUB Main()
    # WeightWatch と ManaWatch はローカル変数を共有しません。出力順序は保証されません。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    UO.CallSub("WeightWatch")
    UO.CallSub("ManaWatch")
END SUB

Sub WeightWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Weight: " & CStr(UO.Weight()))
        End If
        UO.Wait(1000)
    Next
End Sub

Sub ManaWatch()
    Dim sample
    For sample = 1 To 3
        If UO.Connected() Then
            UO.Print("Mana: " & CStr(UO.Mana()))
        End If
        UO.Wait(1000)
    Next
End Sub

パラメーターと実行の説明:

  • WeightWatch と ManaWatch はローカル変数を共有しません。出力順序は保証されません。
  • 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch は全定義付きで、重量・マナを3回測定し、Wait(1000) は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

Clone this wiki locally