Skip to content

API UO FunRunning zh tw

Codex edited this page Oct 3, 2026 · 1 revision

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)。

行為

  • 只搜尋目前工作階段的目錄。同名時選第一筆,因此不同程序請使用唯一名稱。這三個命令不會載入未知檔案或搜尋磁碟。
  • 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

只搜尋目前工作階段的目錄。同名時選第一筆,因此不同程序請使用唯一名稱。這三個命令不會載入未知檔案或搜尋磁碟。

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 都有完整定義:量測重量/魔力三次,Wait(1000) 為
    # 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

    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 都有完整定義:量測重量/魔力三次,Wait(1000) 為 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

區分執行與暫停

# 區分執行與暫停
#
# 檢查所選程序是否仍有有效執行個體,包含暫停中的個體。可避免重複啟動已有的監看工作。
#
# 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 都有完整定義:量測重量/魔力三次,Wait(1000) 為
    # 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

    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 都有完整定義:量測重量/魔力三次,Wait(1000) 為 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

只停止一個監看工作

# 只停止一個監看工作
#
# 檢查所選程序是否仍有有效執行個體,包含暫停中的個體。可避免重複啟動已有的監看工作。
#
# Integer:1(True)表示執行個體存在且未取消,包含手動暫停及斷線暫停;0(False)表示未知、未啟動、已結束或取消中。可用 If UO.FunRunning(name)、= 1
# 或 = True。GetScriptState 區分執行中(1)與暫停(2)。

SUB Main()
    # Terminate 接收原始名稱 WeightWatch,取消該工作,包含暫停狀態;其他工作繼續。Main 必須作為另一個控制工作執行。
    # 每個範例各存成一個檔案,在 IDE/管理員載入後執行 Main,讓其他程序登錄到目錄。WeightWatch/ManaWatch 都有完整定義:量測重量/魔力三次,Wait(1000) 為
    # 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

    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 都有完整定義:量測重量/魔力三次,Wait(1000) 為 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

Clone this wiki locally