Skip to content

API UO SubExists ja

Codex edited this page Oct 4, 2026 · 2 revisions

UO.SubExists

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

現在のマネージャーカタログに定義があるか調べます。任意モジュールの起動前確認に使いますが、存在しても実行中とは限らず、引数なしで起動できる保証もありません。

正確な構文

UO.SubExists(subrutineName:String) -> Integer

パラメーター

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

戻り値

Integer:定義が見つかれば 1(True)、なければ 0(False)。If UO.SubExists(name)、= 1、= True が使え、0 は False に対応します。ファイルの存在、正しさ、実行中かどうかの確認ではありません。

動作

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

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

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

1. SubExists

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

Integer:定義が見つかれば 1(True)、なければ 0(False)。If UO.SubExists(name)、= 1、= True が使え、0 は False に対応します。ファイルの存在、正しさ、実行中かどうかの確認ではありません。

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

2. FindProcedureByName

同名の場合は選択中の Autoload を優先します。そのファイル内に複数の定義があれば曖昧として拒否します。別途読み込んだ補助手続きには一意の名前が必要です。ファイル順でバックアップを選びません。 SubExists と FunRunning は Load/Reload 後の新しいスナップショットを含むセッションの宣言カタログを使い、毎回ディスクを読み直しません。宣言の存在はファイルの存在や削除後の起動を保証しません。FunRunning は解決された手続きの実行状態も確認します。

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

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

3. SubExists

現在のマネージャーカタログに定義があるか調べます。任意モジュールの起動前確認に使いますが、存在しても実行中とは限らず、引数なしで起動できる保証もありません。

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

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

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

使用例

利用可能な任意プロシージャを起動

# 利用可能な任意プロシージャを起動
#
# 現在のマネージャーカタログに定義があるか調べます。任意モジュールの起動前確認に使いますが、存在しても実行中とは限らず、引数なしで起動できる保証もありません。
#
# Integer:定義が見つかれば 1(True)、なければ 0(False)。If UO.SubExists(name)、= 1、= True が使え、0 は False
# に対応します。ファイルの存在、正しさ、実行中かどうかの確認ではありません。

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

    If UO.SubExists("WeightWatch") = True Then
        UO.CallSub("WeightWatch")
    End If
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

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

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

代替処理を選択

# 代替処理を選択
#
# 現在のマネージャーカタログに定義があるか調べます。任意モジュールの起動前確認に使いますが、存在しても実行中とは限らず、引数なしで起動できる保証もありません。
#
# Integer:定義が見つかれば 1(True)、なければ 0(False)。If UO.SubExists(name)、= 1、= True が使え、0 は False
# に対応します。ファイルの存在、正しさ、実行中かどうかの確認ではありません。

SUB Main()
    # WeightWatch は別ファイルにあっても構いません。存在しなければ本例の ManaWatch を選びます。主処理が存在するのに起動拒否された場合は代替に切り替えません。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    If UO.SubExists("WeightWatch") = 1 Then
        UO.CallSub("WeightWatch")
    ElseIf UO.SubExists("ManaWatch") Then
        UO.CallSub("ManaWatch")
    End If
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タスクの例では同時実行を許可してください。

両方の定義を確認

# 両方の定義を確認
#
# 現在のマネージャーカタログに定義があるか調べます。任意モジュールの起動前確認に使いますが、存在しても実行中とは限らず、引数なしで起動できる保証もありません。
#
# Integer:定義が見つかれば 1(True)、なければ 0(False)。If UO.SubExists(name)、= 1、= True が使え、0 は False
# に対応します。ファイルの存在、正しさ、実行中かどうかの確認ではありません。

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

    If HaveMonitors() Then
        UO.CallSub("WeightWatch")
        UO.CallSub("ManaWatch")
    End If
END SUB

Function HaveMonitors() As Boolean
    Return UO.SubExists("WeightWatch") AndAlso UO.SubExists("ManaWatch")
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

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

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

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

Clone this wiki locally