Skip to content

API UO Exec zh tw

Codex edited this page Oct 3, 2026 · 1 revision

UO.Exec

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

UO.Exec · UO.Launch · UO.CallSub · UO.FunRunning · UO.SubExists

ClassicUO • Runtime API

執行一條主控台格式的文字命令,適合動態組合名稱或參數。一般腳本直接呼叫 UO.UseSkill("Hiding") 較清楚;Exec 不會求值任意 Basic 原始碼。

完整語法

UO.Exec(parameters:String) -> Unit

參數

  • parameters — 必要的 String:命令名稱及以空格分隔的參數,例如 useskill Hiding。字串內省略 UO.、呼叫括號及逗號;Basic 本身仍寫 UO.Exec(...)。空字串不執行任何動作。

傳回值

Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

行為

  • 單引號或雙引號可包住含空格的參數。'' 保留空參數;'00123' 保持 String 及前導零。未加引號的數字會轉為數值,其他項目保持字串。2+3 不會被計算。
  • Windows/UNC 的反斜線會保留。緊接結尾引號前的最後一個反斜線須重複,或使用 /。參數內的同類引號可重複或以反斜線跳脫。引號未閉合會產生錯誤。Print/Msg/Say/ConsolePrint/TextPrint 將剩餘項目合為文字;ColorPrint/CharPrint 保留前面的獨立參數。
  • 先找符合的 UO 處理程序,再找此 runtime 內參數個數符合的區域 Sub/Function;區域呼叫為同步。特殊形式 exec 程序名稱 向管理員要求不帶參數的獨立工作;此形式的未知名稱不啟動任何工作。程序名稱不是檔案路徑。
  • 一般命令未知、參數數量錯誤或引號錯誤可由 Try/Catch 捕捉。exec 必須只有一個非空名稱。重複呼叫有效工作不會複製或解除暫停。檔案用 startscript,目錄檢查用 SubExists/FunRunning。別名:sayu→Say、closeuo→CloseHandle、CountOnGround→CountGround、clearignorelist→IgnoreReset、canceltarget→CancelTarget、cancelmove→MoveOff。

內部函式:從呼叫到結果

以下是用戶端的實作階段,不是額外的 Basic 命令。範例輔助程序都有完整定義。

1. Tokenize

單引號或雙引號可包住含空格的參數。'' 保留空參數;'00123' 保持 String 及前導零。未加引號的數字會轉為數值,其他項目保持字串。2+3 不會被計算。

Windows/UNC 的反斜線會保留。緊接結尾引號前的最後一個反斜線須重複,或使用 /。參數內的同類引號可重複或以反斜線跳脫。引號未閉合會產生錯誤。Print/Msg/Say/ConsolePrint/TextPrint 將剩餘項目合為文字;ColorPrint/CharPrint 保留前面的獨立參數。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; 函式 Tokenize.

2. Exec / CallNativeSubrutine

先找符合的 UO 處理程序,再找此 runtime 內參數個數符合的區域 Sub/Function;區域呼叫為同步。特殊形式 exec 程序名稱 向管理員要求不帶參數的獨立工作;此形式的未知名稱不啟動任何工作。程序名稱不是檔案路徑。

Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; 函式 Exec / CallNativeSubrutine.

以下是用戶端的實作階段,不是額外的 Basic 命令。範例輔助程序都有完整定義。

範例

使用技能

# 使用技能
#
# 執行一條主控台格式的文字命令,適合動態組合名稱或參數。一般腳本直接呼叫 UO.UseSkill("Hiding") 較清楚;Exec 不會求值任意 Basic 原始碼。
#
# Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

SUB Main()
    # Hiding 是 UseSkill 的唯一參數。角色在世界內時提出技能要求;成功由伺服器決定。直接形式為 UO.UseSkill("Hiding")。

    UO.Exec("useskill Hiding")
END SUB

參數與執行說明:

  • Hiding 是 UseSkill 的唯一參數。角色在世界內時提出技能要求;成功由伺服器決定。直接形式為 UO.UseSkill("Hiding")。

將名稱傳給區域程序

# 將名稱傳給區域程序
#
# 執行一條主控台格式的文字命令,適合動態組合名稱或參數。一般腳本直接呼叫 UO.UseSkill("Hiding") 較清楚;Exec 不會求值任意 Basic 原始碼。
#
# Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

SUB Main()
    # 下方完整定義 SelectSavedRoute,儲存路線名稱。引號保留 00123;同步呼叫結束後 Main 回傳此字串。這只儲存名稱,不移動角色。

    UO.Exec("SelectSavedRoute '00123'")
    Return UO.GetGlobal("manual", "savedRoute")
END SUB

Sub SelectSavedRoute(name)
    UO.SetGlobal("manual", "savedRoute", name)
End Sub

參數與執行說明:

  • 下方完整定義 SelectSavedRoute,儲存路線名稱。引號保留 00123;同步呼叫結束後 Main 回傳此字串。這只儲存名稱,不移動角色。

啟動獨立監看

# 啟動獨立監看
#
# 執行一條主控台格式的文字命令,適合動態組合名稱或參數。一般腳本直接呼叫 UO.UseSkill("Hiding") 較清楚;Exec 不會求值任意 Basic 原始碼。
#
# Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

SUB Main()
    # 在管理員/IDE 載入整個檔案並執行 Main,讓 WeightWatch 進入目錄。每隔 1000 毫秒量測重量,共三次,獨立執行。須允許同時程序;重複呼叫不解除暫停。

    UO.Exec("exec WeightWatch")
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

參數與執行說明:

  • 在管理員/IDE 載入整個檔案並執行 Main,讓 WeightWatch 進入目錄。每隔 1000 毫秒量測重量,共三次,獨立執行。須允許同時程序;重複呼叫不解除暫停。

從含空格的路徑載入

# 從含空格的路徑載入
#
# 執行一條主控台格式的文字命令,適合動態組合名稱或參數。一般腳本直接呼叫 UO.UseSkill("Hiding") 較清楚;Exec 不會求值任意 Basic 原始碼。
#
# Unit:無回傳值。內部命令或區域 Function 的回傳值也會被丟棄;要取得結果請直接呼叫。Exec 返回不代表伺服器已完成動作。

SUB Main()
    # 改為實際存在且有 Main 的 Basic 檔案。startscript 載入並要求 Main。內層引號屬於主控台命令。請在 IDE 查看錯誤,Exec 不確認啟動成功。

    UO.Exec("startscript 'C:\UO Scripts\Gather.bas'")
END SUB

參數與執行說明:

  • 改為實際存在且有 Main 的 Basic 檔案。startscript 載入並要求 Main。內層引號屬於主控台命令。請在 IDE 查看錯誤,Exec 不確認啟動成功。

Clone this wiki locally