StoryTeller 互動故事系統
StoryTeller 是一個互動故事系統,允許用戶新增自己的劇本、管理和遊玩他人文字冒險遊戲。系統支援多種平台(Discord、Line、Telegram、WhatsApp),並希望以豐富的功能來創造沉浸式的互動體驗。你可以用它來設計抉擇叢書式遊戲或知識測驗等等。
快速開始
基本指令
# 啟動劇本
.st start <alias|title> [alone|all|poll
 x]  
 
 # 查看可玩劇本清單
.st list     
# 遊戲控制
.st pause                                   # 暫停目前進行中的劇本
.st continue [runId]                        # 繼續暫停中的劇本
.st end                                     # 結束目前劇本遊戲進行
.st goto <page>                             # 跳至指定頁面/選項
.st set <var> <value>                       # 設定變數詳細功能說明
1. 劇本管理
新增和更新劇本
Discord 專用功能:
# 以附件方式上傳及下載
.st import <alias> [title]                  # 上傳檔案以新增劇本
.st update <alias> [title]                  # 上傳檔案以覆蓋既有劇本
.st export <alias>                      # 將劇本以私訊傳送文字檔支援的檔案格式:
- .json- 完整的 StoryTeller 格式
- .txt- RUN_DESIGN 語法格式
劇本管理指令
.st my [alias]                              # 查看自己新增之劇本統計
.st mylist                                  # 顯示自己所有新增之劇本清單
.st list <alias>                            # 顯示該劇本簡介與可用資訊
.st delete <alias>                          # 刪除自己擁有的劇本
.st verify <alias>                          # 檢查劇本內容格式是否正確2. 權限管理
.st allow <alias> AUTHOR                    # 僅作者本人可在任何地方啟動(預設)
.st allow <alias>                           # 在本群組/頻道允許啟動
.st allow <alias> <groupId...>              # 允許指定之群組/頻道啟動(可多個)
.st allow <alias> all                       # 任何人皆可啟動(公開)3. 遊戲設定
.st edit alone|all|poll x                   # 發起者可切換參與權限參與權限選項:
- alone- 僅發起者可互動
- all- 任何人可參與
- poll x- 啟用 Discord 投票 x 分鐘(預設 3,僅 Discord)
4. 狀態檢視
.st game                                    # 顯示目前運行與暫停中的遊戲
.st debug                                   # 顯示詳細的除錯資訊RUN_DESIGN 語法
StoryTeller 支援 RUN_DESIGN 語法,這是一種簡潔的文字格式來定義互動故事。
基本語法結構
[meta] title "故事標題"
[intro] 故事簡介內容
[player_var] name "請輸入角色名稱" "範例:小明"
[stat_def] hp 1 20 "生命值"
[var_def] gold 0 1000 "金幣"
[label] 0
[title] 開始頁面
[text] 歡迎來到這個故事世界!
[text|if=hp>10] 你的生命值看起來不錯。
[set] gold=100
[random] 50%
[text] 你發現了一些寶藏!
[choice]
-> 繼續前進 | 1
-> 休息一下 | 2 | if=hp<5
-> 結束遊戲 | END
[label] 1
[title] 第二頁
[text] 你繼續前進了...
[ending]
[text] 恭喜你完成了故事!語法元素說明
元數據
- [meta] title "標題"- 設定故事標題
簡介
- [intro] 內容- 設定故事簡介
玩家變數
- [player_var] key "提示文字" "預設值"- 定義玩家需要設定的變數
統計值定義
- [stat_def] key min max "標籤"- 定義遊戲統計值(如生命值、攻擊力等)
變數定義
- [var_def] key min max "標籤"- 定義遊戲變數
頁面結構
- [label] id- 定義頁面 ID
- [title] 標題- 設定頁面標題
- [text] 內容- 顯示文字內容
- [text|if=條件] 內容- 條件性文字
- [text|speaker=角色] 內容- 指定說話角色
變數操作
- [set] key=value- 設定變數值
- [set|if=條件] key=value- 條件性設定變數
隨機事件
- [random] 百分比%- 設定隨機觸發機率
選項
- [choice]- 開始定義選項
- -> 選項文字 | 目標頁面 | if=條件 | stat=統計變化
結局
- [ending]- 標記為結局頁面
變數系統
變數類型
- 玩家變數 ( - playerVariables)- 由玩家設定的角色相關資訊 
- 例如:角色名稱、職業等 
 
- 統計值 ( - stats)- 遊戲中的數值屬性 
- 例如:生命值、攻擊力、防禦力等 
 
- 遊戲變數 ( - variables)- 故事進行中的狀態變數 
- 例如:金幣數量、任務進度等 
 
變數操作
.st set name 小花          # 設定角色名稱
.st set hp 12             # 設定生命值
.st set gold 500          # 設定金幣數量條件表達式
支援多種條件判斷:
[text|if=hp>10] 你的生命值很高
[text|if=gold>=100] 你有足夠的金幣
[text|if=name=="小明"] 你好,小明!
[text|if=hp>5 && gold>50] 你的狀態不錯骰子系統
支援骰子表達式:
[text] 你投出了 {2d6} 點傷害
[text] 你的攻擊力是 {1d20+5}平台特定功能
Discord 專用功能
- 投票系統 - .st start story poll 5 # 啟用 5 分鐘投票 .st edit poll 3 # 切換為 3 分鐘投票
- 檔案上傳 - 支援拖拽上傳 - .json或- .txt檔案
- 自動解析和驗證檔案格式 
 
- 私訊功能 - 可將劇本以私訊方式傳送給用戶 
 
跨平台相容性
- Line/Telegram/WhatsApp: 支援基本功能,不支援投票和檔案上傳 
- Discord: 支援所有功能,包括投票、檔案上傳等 
限制和規則
檔案大小限制
- 最大上傳檔案:1MB 
- 最大頁數:400 頁 
- 每段文字最大長度:500 字 
用戶限制
根據 VIP 等級有不同的限制:
0
3
3
1
10
10
2+
100
100
權限系統
- AUTHOR_ONLY: 僅作者可啟動 
- GROUP_ONLY: 僅指定群組可啟動 
- ANYONE: 任何人可啟動 
最佳實踐
新增劇本
- 規劃故事結構 - 先設計主要情節和分支 
- 確定結局數量和多樣性 
 
- 變數設計 - 合理設計統計值範圍 
- 提供有意義的玩家變數 
 
- 測試和驗證 - 使用 - .st verify檢查格式
- 測試所有分支和結局 
 
遊戲進行
- 角色設定 - 鼓勵玩家設定豐富的角色資訊 
- 根據角色資訊提供個性化內容 
 
- 進度管理 - 適時使用暫停功能 
- 記錄重要的遊戲狀態 
 
- 社群互動 - 在 Discord 中使用投票功能增加參與感 
- 鼓勵玩家分享遊戲體驗 
 
故障排除
常見問題
- 找不到劇本 - 檢查 alias 是否正確 
- 確認權限設定 
 
- 無法啟動遊戲 - 檢查是否已達同時進行遊戲數限制 
- 確認劇本格式是否正確 
 
- 變數設定失敗 - 檢查變數名稱是否正確 
- 確認數值範圍是否合理 
 
除錯工具
.st debug    # 顯示詳細的遊戲狀態資訊範例劇本
簡單冒險故事
[meta] title "森林冒險"
[intro] 你是一個勇敢的冒險者,正在探索神秘的森林。
[player_var] name "請輸入你的角色名稱" "範例:亞瑟"
[stat_def] hp 10 20 "生命值"
[stat_def] strength 1 10 "力量"
[label] 0
[title] 森林入口
[text] 歡迎,{name}!你來到了神秘的森林入口。
[text] 你的生命值:{hp},力量:{strength}
[choice]
-> 進入森林 | 1
-> 先休息一下 | 2 | if=hp<15
-> 離開 | END
[label] 1
[title] 森林深處
[text] 你進入了森林深處,發現了一個古老的遺跡。
[random] 30%
[text] 突然,一隻野獸出現了!
[set] hp=hp-5
[choice]
-> 戰鬥 | 3 | if=strength>5
-> 逃跑 | 4
-> 投降 | END
[label] 2
[title] 休息
[text] 你決定先休息一下,恢復了一些體力。
[set] hp=hp+5
[choice]
-> 現在進入森林 | 1
-> 繼續休息 | 2
[label] 3
[title] 戰鬥勝利
[text] 你勇敢地擊敗了野獸!
[set] strength=strength+1
[ending]
[text] 恭喜你完成了冒險!
[label] 4
[title] 逃跑
[text] 你選擇了逃跑,雖然安全但錯過了寶藏。
[ending]
[text] 你安全離開了森林,但沒有獲得任何獎勵。這個範例展示了 StoryTeller 的基本功能,包括變數設定、條件判斷、隨機事件和多重結局。
更新日誌
最新功能
- 支援 RUN_DESIGN 語法 
- Discord 投票系統 
- 跨平台暫停/繼續功能 
- 增強的角色統計系統 
- 改進的權限管理 
已知限制
- 投票功能僅限 Discord 
- 檔案上傳僅限 Discord 
- 某些進階功能需要 VIP 等級 
StoryTeller 系統持續更新中,請關注最新版本的功能和改進。
Last updated
