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
2
3
4
5
array = {"Google", "Runoob"}
for key,value in ipairs(array)
do
   print(key, value)
end

迭代器通常好像都不用真的自己實現,或是只有我沒做過?

Metatable:
setmetatable(table,metatable)
getmetatable(mytable)
可以對特定 table 設定一些操作符行為
有點複雜,需要實際操作後才能更熟悉

coroutine:
Lua 的 coroutine 跟 Kotlin 的很像,都算是對 thread 進行封裝與優化
解釋成協作的 thread 就滿好理解了,雖然 coroutine 彼此間是平行的,但同一時間只有一條 coroutine 在執行,需要開發者顯式進行切換

TTS API

Tabletop Simulator API:官方 API