ZH Basic - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Basic Runtime 與 IDE

Home · BASIC · UO API · A–Z · Examples · Languages

Basic Runtime 執行 Basic 腳本,並把 UO.* 呼叫連接到 ClassicUO 的實際功能。內建 IDE 使用 Eclipse Theia 與 Monaco 編輯器。

腳本進入點

一般可執行腳本必須包含:

SUB Main()
    UO.Print('Hello from Basic')
END SUB

開啟或修改檔案時,Runtime/語言服務會索引整份文件,包括 procedures、functions、parameters、local/global declarations、API calls 與 diagnostics。SUB Main() 位於檔案開頭或末尾都可以,執行不依賴編輯器捲動位置。

IDE 面板

  • Explorer:檔案與目前腳本;
  • Editor:Basic 編輯器;
  • Outline:目前檔案的 SUBFUNCTION
  • Problems:語法與驗證問題,可跳至來源行;
  • Output / Debug Console:按時間排序的輸出;
  • API Inspector:目前 API 元素的簽章與說明;
  • Variables / Watch / Call Stack:除錯停止時的實際值與 frame;
  • API Manual:由 Runtime 註冊內容形成的完整目錄。

面板可調整大小。選取不同面板不應使其他面板變成空白;多腳本狀態由同一 Runtime 同步。

腳本狀態

狀態 指示色
running 綠色
paused 黃色
stopped 且被選取 黑色/目前主題的一般顏色
debugging 由除錯狀態與目前停止行共同顯示

可同時執行多個腳本。Explorer 中選取哪一個腳本,Run、Pause、Stop 與逐步命令就作用於該實例,不應改變其他腳本的狀態。

Run 與除錯快捷鍵

動作 按鍵 行為
Run Current Script F5 驗證並執行目前腳本
Start Script (SUB Main) / Run Without Debugging Ctrl+F5 不使用 breakpoint 啟動 SUB Main()
Start Debugging F4 在除錯器下啟動 SUB Main()
Validate F6 只驗證語法,不執行
Pause/Resume Current Script F7 暫停或繼續目前實例
Continue F8 從 pause 或 breakpoint 繼續
Toggle Breakpoint F9 新增或移除目前行 breakpoint
Step Over F10 執行目前語句並到下一個實際語句
Step Into F11 進入被呼叫的 SUBFUNCTION
Step Out Shift+F11 完成目前 procedure 並回到呼叫端
Stop Shift+F5 停止選取的腳本
Restart Debugging Ctrl+Shift+F5 重新以除錯模式啟動選取腳本
API Documentation for Symbol Ctrl+F1 開啟游標符號的 Manual 項目

Stop All ScriptsPause All Scripts 位於 Run 選單,只有存在適用的 running/paused 實例時才可用。灰色表示目前狀態不允許該操作,不代表按鈕損壞。

逐步執行與值

F10F11Shift+F11 只在除錯器停在可執行語句時有效。目前執行行會在 Editor 中醒目顯示。除錯停止時,Variables、Watch 與 Call Stack 顯示該 frame 的精確快照;連續執行時只能安全顯示最近一次捕捉的快照。

若要查看某個 API 呼叫的實際回傳值,請把結果存入變數,在下一行設 breakpoint,然後在 Variables/Watch 查看,或使用 UO.Print(...) 輸出。

編輯輔助與保存

  • 自動完成顯示完整 UO.* 語法;
  • API 項目單擊顯示說明,雙擊插入完整形式;
  • 只有按住 Ctrl 時,Ctrl-hover 才顯示緊湊說明;
  • tooltip 會換行並限制在螢幕範圍內;
  • 新的未命名檔案 Save 到 Autoload\Scripts
  • 已從磁碟開啟的檔案 Save 回原路徑;
  • 關閉 IDE 視窗不會停止腳本,只要 ClassicUO Runtime 仍在執行;重新開啟 IDE 後會重新讀取狀態。

避免介面停頓

Runtime 使用隔離工作內容、準備好的來源快取、協作式 yielding 與受限制的遊戲執行緒工作量。腳本仍必須在重複迴圈中使用 UO.Wait(...),不可用無等待的 active loop 長時間佔用執行緒。