格陣工坊:自動出牌腳本玩家手冊
本指南說明如何撰寫 deckScript.txt,讓遊戲依照你的策略出牌、處理 produce 選牌,以及決定起手留牌與換牌。文中的完整範例可以直接複製使用;標示「片段」的範例需放入對應區塊。
文件更新:2026-10-29。本文整理此日期專案所支援的玩家腳本語法;實際可用功能以你使用的遊戲版本為準。
你可以用文字描述「先出哪張牌」「放在哪裡」「效果選哪張」「起手留哪些牌」,讓遊戲按照規則自動操作。不需要安裝程式開發工具,也不需要撰寫遊戲底層程式。
第一次使用,請先看第 1、2 節;要修改策略,查第 3 至 11 節;需要一份較完整的起點,直接使用第 16 節。
目錄
- 放置與啟用策略
- 可直接使用的基本策略
- 檔案結構與書寫規則
- 規則先後與多步出牌
- 條件與比較
- 定義卡牌集合變數與共用篩選
- 可使用的資料名稱
- 查詢操作完整列表
- 函式與位置語法完整列表
- Produce 效果選牌
- 起手留牌與換牌
- 保留名稱總表
- 常見錯誤
- 查看成功規則
- 各種語法怎麼搭配
- 可直接貼上的整合策略
- 使用限制與分享策略
範例如何使用
- 完整策略:可以整份複製到
deckScript.txt,取代舊內容。 - 完整入口範例:取代檔案中的同名入口,例如整個
效果選牌 { … }。不要重複新增同名入口。 - 片段:放入指定位置,不能單獨當作完整腳本。
- 程式碼框外的說明、Markdown 的三個反引號,以及示意用的
…都不要貼入腳本。 - 範例中的卡牌 ID 是卡牌識別碼,不是中文顯示名稱;指定卡牌的策略只有在符合卡牌及條件時才會命中。
1. 放置與啟用策略
- 在主選單開啟「腳本編輯」,按「產生範例腳本」,或自行將
.txt腳本放入gamesettings.json所在目錄下的playScripts資料夾。可存放多個腳本,檔名可以自訂。 - 以文字編輯器修改腳本,使用 UTF-8 儲存。在腳本清單點選要引用的檔案;預設為「無引用」,點選只保存
SelectedPlayScript檔名,不讀取或執行腳本。 - 新對局開始或重新連線收到狀態同步時,讀取並驗證目前引用的腳本,依「腳本代打」偏好決定是否自動執行。重連會清除舊操作與選牌請求,等待伺服器重新發送請求及回合就緒通知;不重送斷線前的腳本操作。其餘時間修改檔案不會改變當前已載入的策略。
- 已引用的檔案遺失時,會自動恢復「無引用」並寫回設定檔。選擇「無引用」不會刪除任何檔案。產生範例不會自動引用,也不會覆蓋現有腳本。
舊的設定目錄根層 deckScript.txt 不再自動載入;請自行移入 playScripts 並從選單引用。
請使用純文字檔,並確認實際檔名不是 deckScript.txt.txt。若要停用下一場的自動操作,可關閉「腳本代打」按鈕,或在遊戲關閉時將 gamesettings.json 的 ScriptAutomationEnabled 設為 false。若尚未找到設定目錄或腳本檔,請依遊戲發行頁提供的平台說明定位;不要將腳本貼進 gamesettings.json。
空白檔案、只有註解或沒有規則的檔案不會啟用自動操作。語法驗證不通過時,也維持手動操作。
腳本代打預設關閉。對局中的「腳本代打」按鈕可隨時開關代打,並立即將選擇儲存至 gamesettings.json 的 ScriptAutomationEnabled(預設 false)。下一場對局或重新開啟遊戲後,只有設定為 true 且腳本合法時才會自動啟用。斷線或對局結束造成的暫停不會改寫此偏好。啟用時顯示亮綠色,停用時顯示暗色,兩種狀態都能點擊;沒有合法可執行腳本時,開啟失敗並顯示「無設定腳本」。規則實際執行成功後,畫面依序顯示「命中規則:名稱」跳字。關閉不會撤回已送出的操作,這些操作仍由伺服器結算。
沒有適用的一般出牌規則時,遊戲會自動結束回合。不要在腳本中寫「結束回合」。 如果有選牌或換牌需求,卻沒有適用的對應規則,會交回手動操作。因此建議保留三種入口,並為效果選牌準備最後一條通用規則。
2. 可直接使用的基本策略
此策略會優先出能量需求較低且有合法位置的牌;produce 選牌也優先選低能量牌;起手全部保留。
一般操作 {
規則 "通用出牌" {
依序 {
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最低(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
}
效果選牌 {
規則 "通用選牌" {
選擇 {
候選牌 → 排序(能量 升序) → 取前(請求.最少選取數)
}
}
}
起手換牌 {
規則 "全部保留" {
留牌 { 起手牌 }
其餘 = 換掉
}
}3. 檔案結構與書寫規則
| 名稱 | 用途 |
|---|---|
一般操作 | 我方回合的出牌策略 |
效果選牌 | produce 等效果要求選牌時的策略 |
起手換牌 | 開局留牌、換牌策略 |
規則 "名稱" | 一條具名策略;名稱必須加雙引號 |
如果 { … } | 規則條件,可以省略 |
依序 { … } | 一般操作的出牌步驟,至少一個 |
出牌 { … } | 指定一張卡牌及一個位置 |
卡牌 = …、位置 = … | 出牌區塊中的必要欄位,按此順序撰寫 |
選擇 { … } | 效果選牌,內含且僅含一個選牌查詢 |
留牌 { … } | 指定起手要保留的牌 |
換牌 { … } | 指定起手要換掉的牌 |
其餘 = 換掉 | 必須搭配留牌模式 |
其餘 = 保留 | 必須搭配換牌模式 |
每種入口最多出現一次;同一入口內可以放多條規則,規則名稱不得重複。若要合併兩份策略,請把同類入口的規則合併到同一區塊。
使用半形 { } ( ) , . = " ",查詢連接符號使用 →。不使用分號,也不能以 -> 取代 →。縮排方便閱讀,不影響意思。
// 後方至該行結尾都是註解。一般文字與規則名稱使用半形雙引號;字串不能跨行。字串內的雙引號寫成 \",反斜線寫成 \\。
卡牌 ID 例如 core_energyRecycle、ra_vacuumHerald 可不加雙引號,也可以寫成 "core_energyRecycle"。ID 區分大小寫,應使用卡牌的正確 ID,不是卡牌顯示名稱。
4. 規則先後與多步出牌
規則由上往下檢查。條件不符、找不到卡牌或找不到合法位置,就繼續檢查下方規則。
一條一般規則可以包含多個 出牌。開始執行該規則時檢查一次 如果;後續步驟使用當時最新的手牌、場上單位與數值選擇目標,不再重檢該規則的 如果。
每張牌出完並完成動畫與必要選牌後,才執行下一步。整條規則完成後,重新從最上方規則檢查,所以同一規則可以在同回合執行多次。
中途某一步找不到目標時,已出的牌不會撤回;該規則剩餘步驟停止,改查下方規則。換回合後不保留未完成步驟。
一般出牌的卡牌查詢與位置查詢,各必須選出一個結果。 沒有結果會略過;多個結果會造成執行錯誤。通常以 取前(1)、最高(…)、最低(…) 或 隨機取(1) 收尾。
5. 條件與比較
完整範例:
一般操作 {
規則 "前期部署" {
如果 {
我方.HP > 30
我方.回合數 < 5
存在(我方單位 → 篩選(id = core_energyRecycle 且 耐久 > 10))
}
依序 {
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最高(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
}如果 中的每一行都必須成立。省略 如果 表示沒有額外條件。
| 寫法 | 意思 |
|---|---|
=、!= | 相等、不相等 |
>、>=、<、<= | 大於、大於等於、小於、小於等於;只比較數值 |
條件 且 條件 | 兩者皆成立 |
條件 或 條件 | 至少一者成立 |
非 (條件) | 條件不成立 |
是、否 | 布林值,表示成立或不成立 |
( … ) | 指定組合順序 |
數值使用整數,支援加法 +、減法 - 與取負(例如 -能量),不支援小數、乘法或除法。加減同優先序,由左至右計算,先於比較與 且、或;括號可改變順序。兩端必須是數值,不能將文字、布林或集合相加。整數運算超出 32 位元範圍時會報錯。
混用 且、或、非 時建議加括號;且 優先於 或。否定比較時請寫 非 (能量 > 3),不要寫 非 能量 > 3。
6. 定義卡牌集合變數與共用篩選
在三種入口區塊外宣告,建議放在檔案最上方:
經濟牌 = core_energyRecycle, core_bank
使者牌 = ra_vacuumHerald變數可以在三種入口的條件與查詢中使用。下列都是查詢片段:
手牌 → 篩選(id = 經濟牌) → 最低(能量)
候選牌 → 篩選(id = 使者牌) → 取前(1)
起手牌 → 篩選(id = 經濟牌)
我方單位 → 篩選(id = 經濟牌) → 最高(耐久)| 寫法 | 意思 |
|---|---|
id = 經濟牌 | ID 是集合中任一種 |
id != 經濟牌 | ID 不在集合中 |
包含(經濟牌, id) | 與 id = 經濟牌 相同 |
請求.來源.id = 經濟牌 | 效果選牌的來源屬於經濟牌 |
數量(經濟牌) | 集合中不同 ID 的數量 |
使用限制:
- 變數名稱不加雙引號;
"經濟牌"是普通文字,不是變數引用。 - 名稱可用中文字、英文字母、數字與底線,第一字不能是數字;例如
經濟牌、EconomyCards、經濟牌2。 - 不可使用本指南列出的保留名稱,亦不可使用看起來像卡牌 ID 的名稱,例如
core_group。 - 每個名稱只能宣告一次;宣告順序不影響引用。
- 至少填一個 ID,多個 ID 用半形逗號分隔;逗號後可以換行,最後一個 ID 後不要加逗號。
- ID 格式為英文字母開頭的英數前綴,加底線,再接英數或底線,例如
core_bank。請確認遊戲中確實有該卡牌,拼錯的 ID 不會命中。 - 單一 ID 仍是集合;重複 ID 只計一次。
- 卡牌集合只接受固定 ID,不支援數值變數、變數重新賦值,或用另一個集合變數定義集合;共用篩選則使用下方語法。
- 集合不是實際手牌,不能直接寫
卡牌 = 經濟牌;應從手牌篩選。 - 不支援兩個集合互相比較,例如
經濟牌 = 使者牌。
共用篩選:宣告一次,多處套用
在入口區塊外寫「名稱 = 篩選(條件)」,後續以「→ 名稱」套用。以下為完整策略:
經濟牌 = core_energyRecycle, core_bank
低費牌 = 篩選(能量 <= 2)
經濟篩選 = 篩選(id = 經濟牌)
可出牌 = 篩選(存在(合法落點(目前牌)))
一般操作 {
規則 "低費經濟優先" {
依序 {
出牌 {
卡牌 = 手牌 → 經濟篩選 → 低費牌 → 可出牌 → 最低(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
}
效果選牌 {
規則 "優先低費" {
選擇 { 候選牌 → 低費牌 → 取前(1) }
}
規則 "其餘候選" {
選擇 { 候選牌 → 最低(能量) }
}
}
起手換牌 {
規則 "保留低費經濟牌" {
留牌 { 起手牌 → 經濟篩選 → 低費牌 }
其餘 = 換掉
}
}「手牌 → 低費牌」等同「手牌 → 篩選(能量 <= 2)」。連續套用多個名稱表示必須符合所有篩選,後方仍可接排序、取前或其他操作。
也能宣告格子篩選,例如「鄰近敵人 = 篩選(存在(敵方單位 → 範圍內(目前格, 範圍("周圍"))))」,再使用「合法落點(卡牌) → 鄰近敵人 → 取前(1)」。
- 篩選名稱與 ID 集合共用命名規則,不能重名;宣告順序不影響引用,建議集中放在開頭。
- 名稱必須直接接在 → 後方,不加引號或括號;不要寫「篩選(低費牌)」或「低費牌()」。
- 篩選保存條件,不保存結果。每次使用都依當時的牌、單位、格子與玩家數值重新計算。
- 篩選內可以使用 ID 集合,也能在巢狀查詢中引用其他篩選;不可直接或間接循環引用。
- 型別與入口限制在實際引用處檢查。能量篩選可用於卡牌或單位,不能用於格子;包含「合法落點(目前牌)」的篩選只能用於一般操作的卡牌查詢。
- 未使用的宣告只檢查語法、引用結構、循環與展開限制;其型別須在實際引用後才能驗證。
- 目前只宣告單個「篩選(條件)」,不支援把排序、取前或整條查詢存進變數。
7. 可使用的資料名稱
卡牌與單位來源
| 名稱 | 用途與可用範圍 |
|---|---|
手牌 | 我方目前手牌;只用於一般操作 |
候選牌 | 本次效果選牌的選項;只用於效果選牌 |
起手牌 | 起手換牌時的所有手牌;只用於起手換牌 |
可換起手牌 | 起手中允許換掉的牌;只用於起手換牌 |
所有單位 | 場上全部單位,包含我方、敵方與中立;三種入口皆可使用 |
我方單位 | 場上我方單位;三種入口皆可使用 |
敵方單位 | 場上對方單位,不含中立單位;三種入口皆可使用 |
中立單位 | 場上不歸屬我方或對方的單位;三種入口皆可使用 |
不能查詢對方隱藏手牌或牌庫內容。
玩家數值
以下名稱皆為整數,三種入口均可用:
| 我方 | 對方 | 意思 |
|---|---|---|
我方.HP | 對方.HP | 玩家 HP |
我方.能量 | 對方.能量 | 玩家目前能量 |
我方.金幣 | 對方.金幣 | 玩家目前金幣 |
我方.回合數 | 對方.回合數 | 該玩家的回合次數 |
注意玩家使用 對方,場上單位來源使用 敵方單位。
卡牌與單位屬性
這些名稱用在卡牌或單位的篩選、排序及評分中,例如 手牌 → 最低(能量)。
| 名稱 | 意思 | 資料類別 |
|---|---|---|
id | 卡牌 ID | 文字 |
能量 | 卡牌能量需求 | 整數 |
價格 | 卡牌價格 | 整數 |
耐久 | 卡牌或單位耐久 | 整數 |
武力 | 卡牌或單位武力 | 整數 |
前線 | 卡牌前線數值 | 整數 |
冷卻上限 | 卡牌冷卻上限 | 整數 |
冷卻 | 卡牌目前冷卻 | 整數 |
種族 | 卡牌的種族標籤 | 文字集合 |
狀態 | 卡牌目前的狀態 | 文字集合 |
合法種族名稱:水族、鳥類、構造物、龍、起源、植物、資源、法術、靈體、武器、工人。
合法狀態名稱:停擺、感染、燃燒、冰凍、護盾、新手。
種族不是陣營。種族及狀態可能同時有多個值,請用 包含,不要直接寫 種族 = "構造物"。
查詢片段:
手牌 → 篩選(包含(種族, "構造物")) → 最低(能量)
我方單位 → 篩選(包含(狀態, "感染")) → 最高(耐久)
起手牌 → 篩選(數量(狀態) = 0)
手牌 → 篩選(非 包含(狀態, "停擺")) → 取前(1)關鍵詞固定使用上述繁體中文,即使遊戲介面使用其他語言也一樣。費用、攻擊力、金錢 不是合法屬性,請分別使用 能量、武力、金幣。
當前選取對象
| 名稱 | 用法 |
|---|---|
卡牌 | 這次出牌已選中的牌,只能用在該次 位置 = … 查詢 |
目前牌 | 卡牌查詢正在檢查的牌 |
目前單位 | 單位查詢正在檢查的單位 |
目前格 | 位置查詢正在檢查的格子 |
例如 手牌 → 篩選(存在(合法落點(目前牌))) 會留下有合法位置的手牌。
巢狀查詢中的「目前」指內層正在檢查的對象。卡牌屬性直接寫 能量、id 等,不支援 目前牌.能量 這類寫法。
選牌需求
| 名稱 | 用途 | 可用入口 |
|---|---|---|
請求.效果 | 效果種類,目前使用 produce | 效果選牌 |
請求.來源.id | 觸發選牌的來源卡牌 ID | 效果選牌 |
請求.最少選取數 | 至少要選幾張 | 效果選牌、起手換牌 |
請求.最多選取數 | 最多可以選幾張 | 效果選牌、起手換牌 |
8. 查詢操作完整列表
查詢由來源開始,以 → 接續操作:
來源 → 操作 → 操作
下表中的「數值」可以是數字、數值屬性,或 數量、總和 等得出數值的寫法;「N」是 0 至 4096 的整數或符合該範圍的數值。
| 操作 | 效果 |
|---|---|
→ 篩選(條件) | 保留符合條件的對象 |
→ 最高(數值) | 選出數值最高的一個 |
→ 最低(數值) | 選出數值最低的一個 |
→ 排序(數值 升序) | 從小到大排列,仍保留全部對象 |
→ 排序(數值 降序) | 從大到小排列,仍保留全部對象 |
→ 取前(N) | 選前 N 個;不足 N 個時選全部 |
→ 隨機取(N) | 隨機選最多 N 個,不重複 |
→ 範圍內(中心位置, 範圍("名稱")) | 保留範圍內的單位或格子 |
→ 上方(N) | 把單位或格子轉為其上方 N 格的位置 |
→ 下方(N) | 轉為下方 N 格的位置 |
→ 左方(N) | 轉為左方 N 格的位置 |
→ 右方(N) | 轉為右方 N 格的位置 |
最高、最低 遇到平手會選來源順序中較前的一個,不會選出多個。排序平手也保留原順序。空集合的最高或最低仍沒有結果。取前(0) 與 隨機取(0) 都得到空集合;若用於出牌,該步驟會找不到目標;若用於選牌,仍須符合本次最少選取數。
排序建議統一寫成 排序(能量 升序)。若使用逗號分隔,方向必須加雙引號,例如 排序(能量, "升序");排序(能量, 升序) 不合法。排序只能依數值,不能直接按 id、種族 或 狀態 排序。
方向查詢若讓多個來源指向同一格,只保留該位置一次。隨機取 不會重複抽中同一個來源項目,但同名的不同卡牌仍可同時被選中。隨機不是「每次一定換一個結果」。
篩選與排序的先後會改變意思:
手牌 → 篩選(存在(合法落點(目前牌))) → 最低(能量):在能出的牌中選最低能量。手牌 → 最低(能量) → 篩選(存在(合法落點(目前牌))):先選最低能量那張;若不能出就沒有結果,不會改選其他牌。
9. 函式與位置語法完整列表
函式直接寫,不接在 → 後方;方向函式另有上一節的查詢轉換用法。
| 函式 | 結果與用途 |
|---|---|
存在(查詢或文字集合) | 至少有一個結果或一個文字項目時成立 |
數量(查詢或文字集合) | 結果數量 |
總和(查詢, 數值) | 加總每個對象的指定數值,沒有結果時為 0 |
包含(文字集合, 文字) | 集合是否包含指定文字 |
合法落點(卡牌) | 已選中手牌的合法位置;一般操作的位置查詢使用 |
合法落點(目前牌) | 正在檢查的手牌的合法位置;一般操作的卡牌查詢使用 |
可放置(卡牌或目前牌, 位置) | 指定手牌是否可以放到指定位置;卡牌與目前牌須在各自有效的查詢範圍內 |
有單位(位置) | 該格有任意歸屬的單位 |
有我方單位(位置) | 該格有我方單位 |
有敵方單位(位置) | 該格有對方單位 |
上方(位置或目前單位, N) | 上方 N 格的位置 |
下方(位置或目前單位, N) | 下方 N 格的位置 |
左方(位置或目前單位, N) | 左方 N 格的位置 |
右方(位置或目前單位, N) | 右方 N 格的位置 |
範圍("名稱") | 指定卡牌範圍,例如 範圍("十字")、範圍("周圍") |
合法落點 只適用一般操作,不可拿 produce 候選牌或起手換牌選項查落點。方向位置查詢的距離為 0 至 4096;範圍形狀則固定依下表定義。
範圍名稱完整列表
統一寫成 範圍("名稱")。範圍與卡牌描述中的同名範圍一致,不可自行修改大小或是否計入中心。以下 33 種範圍都不包含施放中心格;超出棋盤的部分不計入,也不會繞到另一側。
| 名稱 | 涵蓋位置 |
|---|---|
橫排 | 中心所在的整條橫排,向左右延伸到棋盤邊緣 |
縱排 | 中心所在的整條縱排,向上下延伸到棋盤邊緣 |
十字 | 相鄰的上、下、左、右四格 |
叉字 | 相鄰的左上、右上、左下、右下四格 |
周圍 | 周邊相鄰八格 |
全十字 | 上、下、左、右四個方向的整條直線,直到棋盤邊緣 |
全叉字 | 四個斜向的整條斜線,直到棋盤邊緣 |
全左方 | 同一橫排中,中心左側的所有格子 |
全上方 | 同一縱排中,中心上側的所有格子 |
全右方 | 同一橫排中,中心右側的所有格子 |
全下方 | 同一縱排中,中心下側的所有格子 |
上方 | 緊鄰的上方一格 |
下方 | 緊鄰的下方一格 |
左方 | 緊鄰的左方一格 |
右方 | 緊鄰的右方一格 |
左上方 | 緊鄰的左上斜角一格 |
右上方 | 緊鄰的右上斜角一格 |
左下方 | 緊鄰的左下斜角一格 |
右下方 | 緊鄰的右下斜角一格 |
左右方 | 緊鄰的左方與右方,共兩格 |
上下方 | 緊鄰的上方與下方,共兩格 |
上方橫排3格 | 左上、正上、右上,共三格 |
下方橫排3格 | 左下、正下、右下,共三格 |
左方縱排3格 | 左上、正左、左下,共三格 |
右方縱排3格 | 右上、正右、右下,共三格 |
向上3格 | 正上方連續一、二、三格 |
向下3格 | 正下方連續一、二、三格 |
向左3格 | 正左方連續一、二、三格 |
向右3格 | 正右方連續一、二、三格 |
左上轉角 | 正上、左上、正左,共三格 |
右上轉角 | 正上、右上、正右,共三格 |
左下轉角 | 正下、左下、正左,共三格 |
右下轉角 | 正下、右下、正右,共三格 |
範圍名稱必須加雙引號,且使用表中完整名稱。範圍("上方") 表示一格範圍;上方(目前格, 1) 則取得一個位置,兩者用途不同。
查詢片段,放在出牌的「位置」欄位,可選出周圍敵方數量最多的位置:
位置 = 合法落點(卡牌)
→ 最高(數量(敵方單位 → 範圍內(目前格, 範圍("周圍"))))若要以整條橫排的敵方武力總和評分:
位置 = 合法落點(卡牌)
→ 最高(總和(敵方單位 → 範圍內(目前格, 範圍("橫排")), 武力))方向依棋盤固定方向,不會因輪到另一方而反轉。超出棋盤的位置不能放牌;方向查詢轉換會略過越界結果。位置必須由合法落點或方向查詢取得,目前不能直接寫座標。
不分陣營或跨陣營統計
以下為出牌區塊的位置片段。「所有單位」包含我方、敵方與中立,範圍仍不包含中心格。
不分陣營,選十字內武力總和最高的落點:
位置 = 合法落點(卡牌)
→ 最高(總和(所有單位 → 範圍內(目前格, 範圍("十字")), 武力))只計我方與敵方、不計中立,選周圍單位數量合計最多的落點:
位置 = 合法落點(卡牌)
→ 最高(
數量(我方單位 → 範圍內(目前格, 範圍("周圍")))
+ 數量(敵方單位 → 範圍內(目前格, 範圍("周圍"))))也可用「敵方總和 - 我方總和」評估淨收益;例如把兩邊的數量改為 總和(查詢, 武力),並將 + 改為 -。
十字範圍內,對方武力總和最高的位置
放在 出牌 區塊內的「位置」片段:
位置 = 合法落點(卡牌)
→ 最高(總和(
敵方單位 → 範圍內(目前格, 範圍("十字")),
武力))左右兩邊都有單位的隨機位置
「位置」片段:
位置 = 合法落點(卡牌)
→ 篩選(有單位(左方(目前格, 1)) 且 有單位(右方(目前格, 1)))
→ 隨機取(1)我方最高耐久能源回收單位的上方
「位置」片段:
位置 = 我方單位
→ 篩選(id = core_energyRecycle)
→ 最高(耐久)
→ 上方(1)
→ 篩選(可放置(卡牌, 目前格))此寫法先挑最高耐久單位。如果它上方不能放牌,這一步沒有結果,不會自動改找次高耐久單位。
若要在「上方可放牌」的單位中選最高耐久,改用:
位置 = 我方單位
→ 篩選(id = core_energyRecycle)
→ 篩選(可放置(卡牌, 上方(目前單位, 1)))
→ 最高(耐久)
→ 上方(1)篩選指定範圍內的特定中立單位
完整一般操作範例。將 core_bank 改成要尋找的卡牌 ID:
一般操作 {
規則 "靠近中立目標" {
依序 {
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最低(能量)
位置 = 合法落點(卡牌)
→ 篩選(存在(
中立單位
→ 範圍內(目前格, 範圍("周圍"))
→ 篩選(id = core_bank 且 耐久 > 10)
))
→ 取前(1)
}
}
}
}此規則只選周圍有指定中立單位、且該單位耐久大於 10 的落點。沒有符合位置時,繼續檢查下方規則;沒有其他可執行規則時自動結束回合。
也可將 id = core_bank 改成 id = 經濟牌,使用已宣告的卡牌集合變數。數量(中立單位 → …) 可計數,總和(中立單位 → …, 武力) 可加總武力,用於選擇落點。
「中立」指場上單位不歸屬我方或對方,不是卡牌的中立陣營。原本是中立陣營的卡牌,只要已歸屬玩家,就會列入該玩家的單位。單位歸屬改變後,後續查詢會依新的歸屬判斷。
10. Produce 效果選牌
完整入口範例,可取代基本策略的 效果選牌 區塊:
效果選牌 {
規則 "能源回收優先選使者" {
如果 {
請求.效果 = produce
請求.來源.id = core_energyRecycle
}
選擇 {
候選牌 → 篩選(id = ra_vacuumHerald) → 取前(1)
}
}
規則 "其餘選最高能量" {
選擇 {
候選牌 → 最高(能量)
}
}
}目前 produce 需要選一張牌。第一條找不到使者時,繼續檢查第二條。選出數量不符合本次需求,也會繼續檢查下方規則。
一個 選擇 區塊只能放一個查詢;不能把第一選擇與第二選擇分成兩行塞在同一區塊,應拆成兩條規則。
效果選牌優先於接下來的出牌步驟。自動選牌完成後,才繼續原本的出牌策略。如果沒有任何適用規則而交回手動,腳本會暫停;完成手動選牌不代表一定會自動恢復腳本。
11. 起手留牌與換牌
留牌模式
完整入口範例:
起手換牌 {
規則 "保留組合與低能量牌" {
留牌 {
起手牌 → 篩選(id = core_energyRecycle) → 取前(1)
起手牌 → 篩選(能量 <= 2) → 最低(能量)
}
其餘 = 換掉
}
}先保留一張能源回收,再從尚未選中的起手牌保留一張低能量牌。
換牌模式
完整入口範例,與上面的留牌模式擇一使用:
起手換牌 {
規則 "換掉高能量牌" {
換牌 {
可換起手牌 → 篩選(能量 >= 5)
}
其餘 = 保留
}
}每條規則只能選擇留牌或換牌一種模式。區塊中可以有多行查詢,逐行累積選取;已選中的那張牌不會再次被後面的查詢選中。同名的兩張卡牌仍是兩張不同的牌。
找不到符合的換牌對象,可以合法地一張也不換。留牌模式若沒有留下任何牌,表示換掉全部可換的起手牌。不可換的牌始終保留。
每次起手換牌只處理一次,不會再次更換新抽到的牌。
12. 保留名稱總表
下列名稱依各節說明使用,不可用來命名變數;並非每個名稱都能單獨構成一句指令。
| 類別 | 名稱 |
|---|---|
| 入口 | 一般操作、效果選牌、起手換牌 |
| 規則結構 | 規則、如果、依序、出牌、卡牌、位置、選擇、留牌、換牌、其餘、換掉、保留 |
| 資料來源 | 手牌、起手牌、可換起手牌、候選牌、我方單位、敵方單位、中立單位、所有單位 |
| 當前對象 | 目前牌、目前格、目前單位 |
| 屬性 | id、能量、價格、耐久、武力、前線、冷卻上限、冷卻、種族、狀態 |
| 資料前綴與名稱 | 我方、對方、請求、HP、produce |
| 邏輯與值 | 是、否、非、且、或 |
| 查詢操作 | 篩選、最高、最低、排序、取前、隨機取、範圍內 |
| 查詢參數 | 升序、降序 |
| 函式 | 包含、存在、數量、總和、合法落點、可放置、有單位、有我方單位、有敵方單位 |
| 方向與範圍 | 上方、下方、左方、右方、範圍 |
| 禁止作為指令或變數 | 結束回合 |
回合數、金幣、效果、來源.id、最少選取數、最多選取數 的完整可用名稱請依第 7 節;不要省略所需的 我方.、對方. 或 請求.。
13. 常見錯誤
| 問題寫法或狀況 | 正確做法 |
|---|---|
id == core_bank | 使用單一等號:id = core_bank |
卡牌 = 手牌,手牌有多張 | 加上 取前(1)、最高、最低 或 隨機取(1) |
位置 = 合法落點(卡牌),有多個位置 | 加上 → 取前(1) 等明確選取方式 |
排序(種族 升序) | 排序依據必須是數值,例如 排序(能量 升序) |
篩選(種族 = "構造物") | 使用 篩選(包含(種族, "構造物")) |
篩選(id = "經濟牌") | 引用集合變數時不加引號:篩選(id = 經濟牌) |
卡牌 = 經濟牌 | 使用 卡牌 = 手牌 → 篩選(id = 經濟牌) → 取前(1) |
使用 目前牌.能量 | 在卡牌查詢內直接寫 能量 |
| 用卡牌顯示名稱代替 ID | 使用正確卡牌 ID |
| 沒有合適的牌就停在那裡 | 一般操作會自動結束回合;如想繼續出其他牌,請在下方加通用規則 |
| 只寫一般操作,沒有選牌或換牌規則 | 遇到無適用策略的互動會交回手動;建議補齊三種入口 |
在規則中寫 結束回合 | 刪除該動作;沒有可執行的一般規則時會自動結束回合 |
腳本最長 65536 個字元,查詢巢狀最多 64 層。過於龐大的策略或重複組合也可能超過大小或計算限制,請拆簡條件與查詢。未支援的功能包括迴圈、自訂函式、字串拼接與執行中變數賦值。
14. 查看成功規則
設定目錄中的 ScriptLog.txt 只列出命中並成功完成的規則,例如:
[event1]命中 規則全部保留
[event2]命中 規則通用出牌多步出牌規則須全部步驟成功完成才有該規則的成功紀錄。沒有命中的規則、只完成部分步驟的規則,以及自動結束回合,都不列入這份紀錄。每場啟用合法策略的新對局會重新開始記錄。
15. 各種語法怎麼搭配
15.1 先認識查詢與單一結果
手牌、我方單位、合法落點(卡牌) 都是一組對象。篩選 會縮小集合,排序 只改變順序,最高、最低 才會從非空集合選出一個結果。
| 目的 | 查詢片段 |
|---|---|
| 選一張最低能量手牌 | 手牌 → 最低(能量) |
| 選兩張最低能量候選牌 | 候選牌 → 排序(能量 升序) → 取前(2) |
| 保留所有能量不超過 2 的起手牌 | 起手牌 → 篩選(能量 <= 2) |
| 找所有感染中的敵方單位 | 敵方單位 → 篩選(包含(狀態, "感染")) |
| 找最多敵方單位相鄰的合法落點 | 合法落點(卡牌) → 最高(數量(敵方單位 → 範圍內(目前格, 範圍("周圍")))) |
第二列只是選多張的語法示意;目前 produce 只接受一張,不能直接用它回覆 produce。
15.2 條件是判斷,不是指令
以下為 如果 區塊片段,可放在規則名稱後、依序/選擇/留牌/換牌 前面:
如果 {
我方.HP <= 30
我方.能量 >= 2
數量(敵方單位) >= 2
非 存在(我方單位 → 篩選(包含(狀態, "感染")))
}上面的四個條件必須全部成立。如果 只能放條件,不能在裡面出牌、宣告變數,或再放另一個 如果。也沒有 否則 語法;要安排第二選擇,寫下一條規則。
運算結合順序由高到低為:括號內的內容、非/數值取負、比較、且、或、→。不要把數值比較串成 1 < 能量 < 5;應寫 能量 > 1 且 能量 < 5。
15.3 一條規則連出兩張牌
完整入口範例,可取代原本的 一般操作:
一般操作 {
規則 "先出最低能量再出最高武力" {
如果 {
數量(手牌) >= 2
}
依序 {
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最低(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最高(武力)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
規則 "剩餘手牌" {
依序 {
出牌 {
卡牌 = 手牌 → 篩選(存在(合法落點(目前牌))) → 最低(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
}第二步會重新查看第一張牌結算後的手牌和合法位置;不會預先鎖定兩張牌,也不保證第二張一定能出。第二步失敗時,第一張不會撤回,接著檢查「剩餘手牌」。
每個 出牌 的 卡牌 只代表該步剛選中的牌,不能用它引用前一步的卡牌或落點。
15.4 對卡牌、玩家與格子使用正確屬性
能量:查詢當中的卡牌或單位屬性。我方.能量:玩家目前的能量。目前格:正在評估的位置,可交給範圍或方向函式。
例如這是一般操作的卡牌查詢片段:
手牌 → 篩選(能量 <= 我方.能量 且 存在(合法落點(目前牌))) → 最高(武力)只比較能量不足以判斷能否出牌;還有位置、目標等限制,所以保留 存在(合法落點(目前牌))。
格子沒有 能量 或 武力 屬性。若要評分落點,必須透過周圍單位的數量、總和等數值,例如第 9 節的範圍範例。
15.5 查詢中再放查詢
以下是「位置」片段:
位置 = 合法落點(卡牌)
→ 最高(總和(
敵方單位 → 範圍內(目前格, 範圍("十字")),
武力))它會對每個合法落點,找出該位置十字範圍內的敵方單位,再加總那些單位的武力,最後選出總和最高的位置。
這裡的 目前格 是外層正在評分的格子;總和 的 武力 是逐一計算的敵方單位屬性。進入內層 篩選 或評分時,「目前」對象會換成內層項目;不要在單位篩選條件裡把 目前格 當成可以任意引用的外層變數。
15.6 明確選擇零張
以下是完整起手換牌入口,表示全部保留:
起手換牌 {
規則 "不換任何牌" {
換牌 {
可換起手牌 → 取前(0)
}
其餘 = 保留
}
}留牌 { } 與 換牌 { } 也接受空區塊:前者表示不主動留任何可換牌,後者表示不換任何牌。為了方便閱讀與分享,建議使用明確查詢。選擇 { } 則不合法,效果選牌必須寫一個查詢。
16. 可直接貼上的整合策略
以下是完整策略,可以整份取代 deckScript.txt。 它示範集合變數、優先規則、範圍評分、效果選牌和起手留牌;用於學習語法,不代表最適合每一副牌組。
// 依自己的牌組修改這組卡牌 ID。
經濟牌 = core_energyRecycle, core_bank
一般操作 {
規則 "前期優先經濟牌" {
如果 {
我方.回合數 <= 3
}
依序 {
出牌 {
卡牌 = 手牌
→ 篩選(id = 經濟牌)
→ 篩選(存在(合法落點(目前牌)))
→ 最低(能量)
位置 = 合法落點(卡牌) → 取前(1)
}
}
}
規則 "其餘優先低能量並靠近敵方" {
依序 {
出牌 {
卡牌 = 手牌
→ 篩選(存在(合法落點(目前牌)))
→ 最低(能量)
位置 = 合法落點(卡牌)
→ 最高(數量(敵方單位 → 範圍內(目前格, 範圍("周圍"))))
}
}
}
}
效果選牌 {
規則 "優先經濟牌" {
選擇 {
候選牌 → 篩選(id = 經濟牌) → 取前(請求.最少選取數)
}
}
規則 "其餘選低能量" {
選擇 {
候選牌 → 排序(能量 升序) → 取前(請求.最少選取數)
}
}
}
起手換牌 {
規則 "留一張經濟牌與其他低能量牌" {
留牌 {
起手牌 → 篩選(id = 經濟牌) → 最低(能量)
起手牌 → 篩選(能量 <= 2)
}
其餘 = 換掉
}
}這份策略會有以下行為:
- 起手優先保留一張最低能量的經濟牌,再保留其餘能量不超過 2 的牌。
- 我方回合數不超過 3 時,優先出有合法落點的經濟牌。
- 其他情況選有合法落點的最低能量手牌,放到周圍敵方單位最多的位置。若所有位置分數相同,取來源順序較前的位置。
- 效果選牌先找經濟牌;數量不足時,改用低能量候選牌。
- 每次規則完成後重新從第一條檢查;沒有可執行的一般規則時自動結束回合。
想調整落點偏好,可以把 敵方單位 換成 我方單位,或將 最高 換成 最低。這只會改變位置評分,不會改變卡牌本身的效果範圍。
17. 使用限制與分享策略
支援範圍
- 只使用本文列出的關鍵詞與函式;介面語言改變不會改變腳本關鍵詞。
- 沒有迴圈、自訂函式、
否則、字串拼接、任意座標、檔案引用或執行中的變數賦值。 - 不能查詢對方隱藏手牌、牌庫內容或任意遊戲內部資料。
- 不能預先模擬一串出牌的結果。多步規則是逐步實際出牌,失敗不會回復之前的動作。
- 所有出牌仍須符合遊戲合法操作;腳本不能透過選定位置略過出牌限制。
- 回放與觀戰不執行自動出牌。斷線重連後,本局需改用手動操作,新對局再載入策略。
大小與計算限制
| 項目 | 限制 |
|---|---|
| 腳本文字長度 | 最多 65536 個字元 |
| 語法單元數 | 最多 16384 個;大量名稱、符號與條件可能先達到此限制 |
| 運算式深度 | 最多 64 層;過長的連續查詢鏈也可能達到限制 |
| 篩選展開語法節點 | 最多 65536 個;包含宣告檢查與各引用處的展開,深度亦受 64 層限制 |
| 卡牌集合引用展開總量 | 最多 65536 個項目;同一大集合在許多地方引用也會累計 |
取前、隨機取 與方向距離 | 求值後必須是 0 至 4096 的整數 |
| 單次決策計算量 | 由遊戲限制;過於複雜的查詢可能超限並停止腳本 |
數值過大或加總超出可表示範圍也可能產生錯誤。遇到限制時,簡化條件、縮短查詢、減少重複的大集合引用。
分享前確認
- 附上適用的遊戲版本、牌組和策略目的。
- 提供完整腳本,或明確標註應替換哪個入口。
- 將卡牌 ID 與用途一併說明;卡牌名稱不能直接代替 ID。
- 同類入口合併在一起,並確保同一入口中的規則名稱不重複。
- 保留通用的效果選牌規則,避免沒有符合條件的候選牌時交回手動。
- 先在遊戲中確認語法與實際行為,再分享;可參照
ScriptLog.txt確認哪些規則成功完成。