Skip to content

API UO FunRunning ja

Codex edited this page Oct 4, 2026 · 2 revisions

UO.FunRunning

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

UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

指定プロシージャの有効な実行が存在するかを調べます。一時停止中も含むため、既存の監視処理の重複起動を防げます。

正確な構文

UO.FunRunning(subrutineName:String) -> Integer

パラメーター

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

戻り値

Integer:実行が存在し未キャンセルなら 1(True)。手動・切断による一時停止も含みます。未知、未起動、終了済み、キャンセル中なら 0(False)。If UO.FunRunning(name)、= 1、= True が使えます。GetScriptState は実行中(1)と停止中(2)を区別します。

動作

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

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

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

1. FunRunning

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

Integer:実行が存在し未キャンセルなら 1(True)。手動・切断による一時停止も含みます。未知、未起動、終了済み、キャンセル中なら 0(False)。If UO.FunRunning(name)、= 1、= True が使えます。GetScriptState は実行中(1)と停止中(2)を区別します。

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

2. FindProcedureByName

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

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

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

3. FunRunning

指定プロシージャの有効な実行が存在するかを調べます。一時停止中も含むため、既存の監視処理の重複起動を防げます。

FunRunning は元のプロシージャ名とキーを使い、変更後の表示名は使いません。一時停止は実行を保持するため 1 のままです。キャンセルは後処理中でも 0 です。確認と次の呼び出しは一体の操作ではなく、その間に終了する場合があります。

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

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

使用例

実行がない場合だけ起動

# 実行がない場合だけ起動
#
# 指定プロシージャの有効な実行が存在するかを調べます。一時停止中も含むため、既存の監視処理の重複起動を防げます。
#
# Integer:実行が存在し未キャンセルなら 1(True)。手動・切断による一時停止も含みます。未知、未起動、終了済み、キャンセル中なら 0(False)。If
# UO.FunRunning(name)、= 1、= True が使えます。GetScriptState は実行中(1)と停止中(2)を区別します。

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

    If Not UO.FunRunning("WeightWatch") 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

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

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

実行中と一時停止を区別

# 実行中と一時停止を区別
#
# 指定プロシージャの有効な実行が存在するかを調べます。一時停止中も含むため、既存の監視処理の重複起動を防げます。
#
# Integer:実行が存在し未キャンセルなら 1(True)。手動・切断による一時停止も含みます。未知、未起動、終了済み、キャンセル中なら 0(False)。If
# UO.FunRunning(name)、= 1、= True が使えます。GetScriptState は実行中(1)と停止中(2)を区別します。

SUB Main()
    # NamedRunState は表示名 WeightWatch を検索し GetScriptState
    # の1、2、0を返します。固有で未変更の名前と安定した一覧を前提にします。SetScriptName 後は新表示名やパスで検索しますが、FunRunning は元の名前のままです。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    If UO.FunRunning("WeightWatch") Then
        Return NamedRunState("WeightWatch")
    End If
    Return 0
END SUB

Function NamedRunState(name) As Integer
    Dim indices = UO.GetScriptsList()
    For Each index In indices
        If UO.GetScriptName(index) = name Then
            Return UO.GetScriptState(index)
        End If
    Next
    Return 0
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

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

  • NamedRunState は表示名 WeightWatch を検索し GetScriptState の1、2、0を返します。固有で未変更の名前と安定した一覧を前提にします。SetScriptName 後は新表示名やパスで検索しますが、FunRunning は元の名前のままです。
  • 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch は全定義付きで、重量・マナを3回測定し、Wait(1000) は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

監視を1つだけ停止

# 監視を1つだけ停止
#
# 指定プロシージャの有効な実行が存在するかを調べます。一時停止中も含むため、既存の監視処理の重複起動を防げます。
#
# Integer:実行が存在し未キャンセルなら 1(True)。手動・切断による一時停止も含みます。未知、未起動、終了済み、キャンセル中なら 0(False)。If
# UO.FunRunning(name)、= 1、= True が使えます。GetScriptState は実行中(1)と停止中(2)を区別します。

SUB Main()
    # Terminate に元の名前 WeightWatch を渡し、一時停止中も含めそのタスクだけをキャンセルします。他は継続します。Main は別の制御タスクとして実行します。
    # 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch
    # は全定義付きで、重量・マナを3回測定し、Wait(1000)
    # は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

    If UO.FunRunning("WeightWatch") Then
        UO.Terminate("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

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

  • Terminate に元の名前 WeightWatch を渡し、一時停止中も含めそのタスクだけをキャンセルします。他は継続します。Main は別の制御タスクとして実行します。
  • 各例を別ファイルに保存して IDE/マネージャーで読み込み、Main を実行して他のプロシージャも登録します。WeightWatch/ManaWatch は全定義付きで、重量・マナを3回測定し、Wait(1000) は1000ミリ秒、ワールド内のときだけ出力します。有限の監視で、一時停止は所要時間を延ばします。2タスクの例では同時実行を許可してください。

Clone this wiki locally