Skip to content

API UO SubExists zh tw

Codex edited this page Oct 3, 2026 · 1 revision

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。不是檔案存在、語法正確或正在執行的檢查。

行為

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

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

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

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

選擇備用處理程序

# 選擇備用處理程序
#
# 檢查管理員目前目錄中是否有程序定義,適合在啟動選用模組前使用。存在不代表正在執行,也不代表可用零個引數啟動。
#
# Integer:找到定義時為 1(True),否則為 0(False)。可用 If UO.SubExists(name)、= 1 或 = True;0 對應
# False。不是檔案存在、語法正確或正在執行的檢查。

SUB Main()
    # WeightWatch 可以來自另一個已載入檔案;不存在時選本檔的 ManaWatch。若找到主要程序但啟動被拒,不會自動改用備用程序。
    # 每個範例各存成一個檔案,在 IDE/管理員載入後執行 Main,讓其他程序登錄到目錄。WeightWatch/ManaWatch 都有完整定義:量測重量/魔力三次,Wait(1000) 為
    # 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

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

啟動前檢查兩個定義

# 啟動前檢查兩個定義
#
# 檢查管理員目前目錄中是否有程序定義,適合在啟動選用模組前使用。存在不代表正在執行,也不代表可用零個引數啟動。
#
# Integer:找到定義時為 1(True),否則為 0(False)。可用 If UO.SubExists(name)、= 1 或 = True;0 對應
# False。不是檔案存在、語法正確或正在執行的檢查。

SUB Main()
    # HaveMonitors 以 AndAlso 檢查兩個名稱。缺少任一個,Main 都不啟動。這不是並行啟動成功的保證。
    # 每個範例各存成一個檔案,在 IDE/管理員載入後執行 Main,讓其他程序登錄到目錄。WeightWatch/ManaWatch 都有完整定義:量測重量/魔力三次,Wait(1000) 為
    # 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

    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 檢查兩個名稱。缺少任一個,Main 都不啟動。這不是並行啟動成功的保證。
  • 每個範例各存成一個檔案,在 IDE/管理員載入後執行 Main,讓其他程序登錄到目錄。WeightWatch/ManaWatch 都有完整定義:量測重量/魔力三次,Wait(1000) 為 1000 毫秒,只在已進入世界時輸出。不是無限監看;暫停會延長時間。雙工作範例須允許並行程序。

Clone this wiki locally