Tabletop Simulator Note:Lua 腳本編寫
Tabletop Simulator 是一款在 Steam 平台上的遊戲,主要是拿來玩線上桌遊,並且提供了 API 讓有志之士構建自己想玩的桌遊。
開發前準備
- 開始編寫腳本前必須將遊戲桌面佈置成可以遊戲的樣子,即所有物件都存在,且整理成想要的狀態(之後可以將 json 全移到 Lua 腳本中)
- 儲存桌面
- 讀取桌面
Lua
Tabletop Simulator 中開放玩家使用 Lua 語言構建腳本,實現簡易甚至稍微複雜的遊戲自動化。
TTS 使用的 Lua 版本: 5.2
Lua 5.2 Reference Manual:很難看懂
Lua 教程:可以快速理解一些概念
Learning Lua
Learning MORE Lua
Learning Lua Functions
重要概念
Lua 無 main 程式啟動點的概念,主要是與使用的主要語言框架合作
table 索引有 a[“name”] 跟語法糖的 a.name 兩種表示法
默認情況下變量總是全局的
函數為多返回值
支援可變數目參數 (…)
select(‘#’, …):返回可變參數的長度
select(n, …):返回從起點 n 開始到結束位置的所有參數列表
~=:不等於
..:連接兩字符串
#:返回字串或表的長度
[[]]:這樣包裝文字也是 string
utf8.len():含中文的字串計算長度
string.len():只包含 ASCII 的字串計算長度
字串匹配模式 (%):跟其他語言一樣需要知道有這種用法,真要用時再查表
索引從 1 開始,並且可以為負數
迭代器:ipairs 是 Lua 默認提供的迭代函數
1 | array = {"Google", "Runoob"} |
迭代器通常好像都不用真的自己實現,或是只有我沒做過?
Metatable:
setmetatable(table,metatable)
getmetatable(mytable)
可以對特定 table 設定一些操作符行為
有點複雜,需要實際操作後才能更熟悉
coroutine:
Lua 的 coroutine 跟 Kotlin 的很像,都算是對 thread 進行封裝與優化
解釋成協作的 thread 就滿好理解了,雖然 coroutine 彼此間是平行的,但同一時間只有一條 coroutine 在執行,需要開發者顯式進行切換
TTS API
Tabletop Simulator API:官方 API