肉鴿輔助協定
約 9322 字大約 31 分鐘
提示
請注意,json 檔案不支援註解。文件中的註解僅供說明參考,請勿直接複製使用。
肉鴿資源存放位置
resource/roguelike/:依照主題存放各個肉鴿的作業資源- 主題資料夾:
Phantom/(傀影)、Mizuki/(水月)、Sami/(薩米)、Sarkaz/(薩卡茲)、JieGarden/(界園)。autopilot/:存放各個關卡的作戰 json 邏輯。關卡名稱.json:關卡的作戰邏輯。
encounter/:存放不期而遇類(所有非戰鬥與商店節點)事件邏輯。default.json:刷等級模式。deposit.json:刷源石錠模式。
recruitment.json:幹員招募邏輯。shopping.json:商店購買收藏品邏輯。
- 主題資料夾:
薩米肉鴿
Sami/下的特殊檔案:foldartal.json:密文板的使用邏輯。collapsal_paradigms.json:坍縮範式的類型。autopilot/關卡名稱_collapse.json:刷坍縮範式模式的作戰邏輯。encounter/collapse.json:刷坍縮範式模式的不期而遇邏輯。
薩卡茲肉鴿
Sarkaz/下的特殊檔案:fragments.json:思緒的基本資訊。map.json:藍圖過圖的範本圖片資訊。
界園肉鴿
JieGarden/下的特殊檔案:coppers.json:通寶的基本資訊與拾取、替換邏輯。
肉鴿第一步——幹員招募
resource/roguelike/主題名/recruitment.json 描述了幹員招募的邏輯。 在 tools/RoguelikeRecruitmentTool 和 tools/RoguelikeOperSearch 中有輔助工具可查看與幫助編寫。
{
"theme": "Phantom", // 肉鴿主題名稱(這裡是傀影)
"priority": [ // 群組的優先度,有先後順序
...
],
"team_complete_condition": [ // 陣容完備度偵測
...
]
}幹員分類
按照你的遊戲理解將幹員分成不同的 groups (群组,相關概念請參閱 戰鬥流程協定)
注意
同一 group 內的幹員和召喚物必須部署方式一致(即同為近戰或同為高台),攻擊範圍應儘量相同。
允許同一幹員或召喚物根據用法不同,被分類至不同的 group。
請勿修改已存在的 group 名稱,以免在 MAA 更新後導致舊版作業無法使用。
請儘量不要新增 group,儘量將新加入的單位依照用法納入已有的 group。
提示
預設僅招募精 1 55 級以上的幹員。
{
"theme": "Phantom",
"priority": [ // 群組,有先後順序
{
"name": "棘刺", // 群組名稱(這個群組名稱是棘刺)
"opers": [ // 群組內包含的幹員,有先後順序,代表部署此組幹員時的優先度
// (例如部署此組合時,先偵測有無棘刺,有則部署;無棘刺再偵測有無號角)
{
"name": "棘刺", // 幹員名稱
...
},
{
"name": "号角",
...
}
]
},
"team_complete_condition": [
...
]
]
}現有的群組介紹
以薩米肉鴿的作業為例,主要將幹員分為以下組合:
組合名稱 主要考量 主要包括職業 幹員名稱舉例 地面阻擋 站場與清雜 重裝、近衛 奶盾、基石、羽毛筆、山、M3、令和稀音的召喚物、斑點、重裝預備幹員 地面單切 / 處決者 單獨對戰精英怪 處決者特種 史爾特爾、異德、麒麟 R 夜刀、M3、紅 高台 C 常態與決戰輸出 狙擊、術師 維什戴爾、邏各斯、假日威龍陳、澄閃 高台輸出 對空與常態輸出 狙擊、術師 空弦、能天使、克洛絲、史都華德 速狙 物理輸出,標準射程 狙擊 艾拉、能天使、躍躍、克洛絲 術師 法術輸出,標準射程 單法 艾雅法拉、邏各斯、史都華德 輔助 可攻擊到身後 1 格 輔助 塑心、鈴蘭、躍躍、梓蘭 狙擊 射程較遠的高台 投擲手、攻城手 維什戴爾、提豐、早露 奶 治療能力 醫療、輔助 凱爾希、濁心斯卡蒂、芙蓉、安賽爾 單奶 攻擊範圍縱深 >= 4 醫療 凱爾希、焰影葦草、純燼艾雅法拉、芙蓉、安賽爾 群奶 範圍縱深 < 4,可治療身後 醫療、輔助 夜鶯、白面鸮、濁心斯卡蒂 回費 回復 Cost 先鋒 桃金娘、伊內絲、芬、香草 地刺 無阻擋,於盾前提供輸出或減速 伏擊客 歸溟幽靈鯊、阿斯卡綸、獅蠍 地面遠程 地面長手,可於盾後輸出 教官、領主 號角、帕拉斯、棘刺、銀灰 領主 地面攻擊範圍縱深 > 4,可對空 要塞、領主 棘刺、銀灰、仇白 盾法 範圍短,具備一定承傷能力 陣法術師 林、卡涅利安 炮灰 吸收砲彈、再部署用 特種、召喚物 M3、紅、桃金娘、預備幹員 大龍 盾前承傷,緊靠阻擋位方便合體 召喚物 令的小龍、滌火傑西卡的盾牌 補給站 加快主 C 幹員技力回轉 召喚物 支援補給站、工匠類幹員的召喚物 無人機 無視高低地的治療召喚物 召喚物 斯卡蒂的海嗣、赫默的無人機 支援陷阱 部署於地面的爆炸物 召喚物 支援霧機、支援轟隆隆 障礙物 不佔部署位,用於吸引仇恨或阻擋 召喚物 鳥籠、障礙物 其他地面 不希望被優先使用的地面單位 推拉、擋 1 先鋒、劍豪 風笛、可頌 高台預備 / 其他高台 不希望被優先使用的高台單位 群法、鏈法、戰術家 梓蘭、預備幹員 提示
地面阻擋主要考量幹員防守的綜合能力(有時候全殺了也是防守強的表現對吧),包括地面遠程和領主組合。
奶主要考慮綜合治療能力,包括單奶和群奶,需要考慮攻擊範圍覆蓋時要單獨使用單奶(奶 4 格)或者群奶(奶身後)。
高台輸出只考慮輸出能力,主要是狙擊和術師職業的混雜排序,需要考慮輸出類型、攻擊範圍等限制條件時單獨使用速狙、術師、輔助、盾法組合。
夾子類召喚物因為數量較多,不要放在支援陷阱組合中,讓 MAA 自動部署效果比較好。
需要特殊操作的群組
除了上述較籠統的分組,有時我們需要對一些幹員或幹員種類進行一些客製化的精細操作,例如:
組合名稱 包含幹員 主要特點 益達 維什戴爾 高台輸出,優先部署可以減輕壓力 棘刺 棘刺、號角 地面遠程輸出,傀影肉鴿中部分地圖有非常適合的站位 召喚類 凱爾希、令、稀音 具備地面阻擋能力,部分地圖需要優先部署,召喚物可以當阻擋也可以當炮灰 情報官 曉歌、伊內絲 既可以回費、又可以側向輸出、還可以單切 濁心斯卡蒂 濁心斯卡蒂 低壓時治療量尚可,但是範圍特殊,一些地圖有比較適合的站位 焰葦 焰影葦草 薩米肉鴿常用開局幹員,兼具治療和輸出,一些地圖有比較適合的站位 瑪恩納 瑪恩納、銀灰 地面大範圍決戰輸出,可以針對 Boss 進行部署 史爾特爾 史爾特爾 由於精二後固定攜帶 3 技能,此時站場能力幾乎為零,需要阻擋位時部署優先度極低 骰子 骰子 水月肉鴿中的骰子需要單獨操作
注意
目前固定將未辨識到的地面幹員歸入倒數第二個組合(其他地面),未辨識到的高台幹員則歸入最後一個組合(其他高台)。
提示
新實裝的幹員需要手動加入各主題的 recruitment.json,畢竟開發者不一定能即時想起要做適配。 如果您發現漏掉了哪些幹員,可以發個 Issue 提醒開發者,或是直接提交 PR。
預設陣容——陣容完備度偵測
在您預計通關或打到高層的隊伍中,哪些幹員屬於核心陣容?哪些是必不可少的?又分別需要幾位?
注意
目前腳本的招募邏輯:在陣容未滿足完備度前,僅招募 0 希望(暫時僅限三星)與 key(可理解為白名單)幹員,以保留希望給高星級的 key 幹員。 (目前的實作方式是將高強度幹員與三星幹員手動標註為 key 幹員,招募時僅選擇 key 幹員)(TODO:辨識 0 希望幹員)
因此需要盡量讓完備度總數維持在合適範圍,建議所有需要的幹員數量(基本核心陣容,一般為 1 核心、2 地面、1-2 醫療、1 高台)加起來約 4-8 位。
隊伍滿足陣容完備度偵測後,每次獲得招募券會依照幹員評分與進階優先度進行招募。為了避免希望浪費,不希望招募的幹員可以不設定評分,或將評分設定在同職業三星 / 預備隊員以下。 (對於必拿或完全不想要的幹員,可以賦予極高或極低的特殊分數,詳見 Sami 中的 止頌)
作戰編隊時,會先對幹員選擇介面的預設排序(從上到下、從左到右)進行有先後順序的讀取與儲存。 基於此順序,在保持相對順序的前提下,將最先出現且滿足陣容完備度的幹員移至開頭,直到陣容完備度被全部滿足,或不存在滿足條件的幹員為止。 接著將預備幹員移至末尾形成新順序,並依此選擇。 特別的是,由於六星臨時招募幹員在編隊時預設位於最前端,因此實際編隊中很容易編入六星臨時招募幹員。(TODO:排除無法使用的精一臨時招募幹員)
對於萌新號:若招募 10 次後仍未滿足半數 key 幹員,會放棄完備度偵測,直接依照評分「有什麼用什麼」。因此沒練三星的萌新號可能會出現只拿了兩三個六星,剩下全拿預備隊員的情況。
{
"theme": "Phantom", // 肉鴿主題
"priority": [ // 群組
...
],
"team_complete_condition": [ // 陣容完備度偵測
{ // 一個策略組 (condition)
"groups": [ // 需要哪些群組中的幹員
"高台输出" // (這裡表示需要「高台輸出」組的幹員 1 名)
],
"threshold": 1 // 這些幹員需要多少數量
},
{ // 可以有多個策略組
"groups": [
"棘刺", // (這裡表示「棘刺、地面阻擋、地面單切、炮灰」分組的幹員最少需要 2 個)
"地面阻挡",
"地面单切",
"炮灰"
],
"threshold": 2
},
{
"groups": [
"奶" // (這裡表示需要「奶」分組的幹員 1 名)
],
"threshold": 1
}
...
]
}警告
當一名幹員出現在多個幹員群組時,僅會進行一次計數。 例如:幹員 棘刺 可能同時出現在 棘刺 和 地面阻挡 群組中,在同一個策略組內,僅會對幹員 棘刺 計入一次。
但每個策略組會分別計數。 例如:幹員 焰影苇草 可能同時出現在 高台输出 和 奶 群組中,此時兩個不同的策略組都可以計入幹員 焰影苇草。
調整幹員招募參數
群組內的幹員順序代表作戰部署該幹員組合時,選擇幹員的優先度。
臨時招募幹員會在原有評分基礎上加 600 分。
隨機直升幹員的評分是招募評分 + 精二評分合計計算。
群組內幹員各個欄位的意義和腳本相關邏輯:
{ "theme": "Phantom", "priority": [ "name": "地面阻挡", // 群組名稱(這裡是地面阻擋組) "doc": "標準線為 1 檔(清雜或站場能力比山強)> 山 > 2 檔(阻擋 > 2, 可自回)> 斑點,站場能力小於斑點者放到單切或炮灰組", // 標註為「doc」的欄位均為 JSON 備註,不影響程式執行 "opers": [ // 應該包括哪些幹員,有先後順序,代表部署優先度 { "name": "百炼嘉维尔", // 幹員名稱(這裡是百嘉,在組內第 1 位,表示需要部署地面阻擋組時,首先偵測是否為百嘉) "skill": 3, // 使用幾技能(這裡舉例使用 3 技能) "skill_usage": 2, // 技能使用模式,可參閱戰鬥流程協定,不同之處在於「此處不寫時預設為 1」 // (0 為不自動使用,1 為好了就用,2 為好了就用 x 次(x 透過 "skill_times" 欄位設定),3 暫時不支援) "skill_times": 2, // 技能使用次數,預設為 1,在 "skill_usage" 欄位為 2 時生效 "alternate_skill": 2, // 當沒有指定技能時使用的備選技能,通常是 6 星幹員未精二且精二後使用 3 技能時才需要指定(這裡指沒有 3 技能時使用 2 技能) "alternate_skill_usage": 1, // 備選技能的技能使用模式(該欄位尚未實作) "alternate_skill_times": 1, // 備選技能的技能使用次數(該欄位尚未實作) "recruit_priority": 900, // 招募優先級,數字越大優先級越高,900 以上屬於看到必招募,400 以下招募優先級比一些關鍵幹員精二優先度還低 // 臨時招募的幹員優先度自動 +600 "promote_priority": 600, // 進階優先級,數字越大優先級越高,900 以上屬於有希望就精二,400 以下招募優先級低於招募普通三星幹員 // 小技巧:當你將招募優先度壓低或不寫,拉高一些精二優先度,實際上就是在拉高臨時招募到這些幹員的精二優先度 "is_key": true, // true 為 key(關鍵)幹員,false 或省略為非 key 幹員。在陣容完備偵測未通過時,僅招募 key 幹員與 0 希望幹員,保存希望 "is_start": true, // true 為開局選擇幹員,false 或省略為非開局幹員。在隊伍中沒有 start 幹員時,僅招募 start 幹員與 0 希望幹員 // 與使用者圖形介面的開局幹員設定連動,且使用者手動填寫的幹員會強制設定為 start 幹員 "auto_retreat": 0, // 部署幾秒後自動撤退,整數,大於 0 時生效,主要用於特種幹員和投鋒,由於肉鴿一般是 2 倍速,建議設定為「技能持續時間 / 2」 "recruit_priority_when_team_full": 850, // 無需單獨設定,滿足陣容完備度時,招募優先級預設為「招募優先級 - 100」 "promote_priority_when_team_full": 850, // 無需單獨設定,滿足陣容完備度時,進階優先級預設為「精二優先級 + 300」 "recruit_priority_offsets": [ // 依照目前陣容調控招募優先級 { "groups": [ // 需要哪些組滿足條件,按組計數,這些組裡不要出現重複幹員,否則會重複計數 "凯尔希", "地面阻挡", "棘刺" ], "is_less": false, // 條件是大於還是小於,false 是大於等於,true 是小於等於,不寫預設為 false "threshold": 2, // 滿足條件的門檻值,不寫預設為 0 "offset": -300 // 滿足後對招募優先級的調整,不寫預設為 0 // (這裡表示當「凯尔希, 地面阻挡, 棘刺」這三個群組中有 2 名以上幹員時,百炼嘉维尔的招募優先級減 300) } ] }, ... ], ], "team_complete_condition": [ ... ] }注意
recruit_priority_offsets的group中,各個群組請勿出現重複幹員。設定
auto_retreat後,通常不需要再在作戰計畫中為其設定retreat_plan。依照您的理解新增群組與幹員
新增群組後,您可以從既有的群組中複製幹員,並參考大佬們已有的評分並在此基礎上進行修改。
肉鴿第二步——戰鬥邏輯
resource/roguelike/主題名稱/autopilot/關卡名稱.json 描述了每個關卡的作戰策略。
MAA 肉鴿通用戰鬥邏輯——牛牛高血壓來源
(在關卡名稱對應作戰邏輯檔案不存在時套用)
根據地圖上格子類型進行基本的戰鬥操作
MAA 會根據地圖上的格子是藍門還是紅門、是高台還是地面、能否被部署,來進行基本的戰鬥操作。
MAA 僅根據地圖名稱或編號決定使用哪份作業,不會判斷地圖的普通、緊急、路網、密文板使用等情況。
MAA 不會判斷作戰中地圖上無法確定的格子情況,例如
馴獸小屋的祭壇位置,或從眾效應是從左邊還是從右邊出怪。
所以在後續設定中,您需要盡量設計一套能應付地圖名稱下所有不同情況(上述幾種情況)的戰鬥邏輯。小心被大家掛到 Issue 上說這張圖操作讓人高血壓哦(笑)。
MAA 的通用作戰策略——堵藍門
地面幹員會優先部署在藍門的格子上(為什麼是格子上,請往下看)或其周圍,方向朝向紅門(自動計算)。
優先部署地面單位,接著部署醫療幹員與高台幹員,由藍門向四周一圈一圈地部署。
會不斷依照上述邏輯部署可部署的單位(幹員、召喚物、支援物品等等)。
優化基本戰鬥策略
藍門替代方案
僅僅把幹員堆在藍門門口顯然不太聰明,有些關卡設有「一夫當關,萬夫莫開」的格子,防守在這些位置顯然效率更高。
或者有些關卡有多個藍門,MAA 無法得知哪個藍門對應哪個紅門,也會導致胡亂部署。
此時您需要開啟 地圖 Wiki,一邊對照地圖一邊在腦海中指揮作戰。
首先在
設定中將座標展示切換為MAA。接著根據您的經驗,尋找需要優先防守的點位座標與朝向(通常是朝向敵方出現的方向),寫入到 json 的
"replacement_home"欄位中。{ "stage_name": "蓄水池", // 關卡名稱 "replacement_home": [ // 重要防守點(藍門替代點),至少需要填寫 1 個 { "location": [ // 格子座標,從地圖 Wiki 獲得 6, 4 ], "direction_Doc1": "優先朝向,但並不代表絕對是這個方向(算法請自行判斷)", "direction_Doc2": "不填預設為 none,即沒有推薦方向,完全由算法自行判斷", "direction_Doc3": "none / left / right / up / down / 無 / 上 / 下 / 左 / 右", "direction": "left" // (這裡表示將幹員優先部署到座標 6,4 的格子並朝左,周圍自動部署的幹員也盡量朝向左) } ],提示
藍門替代方案會在
deploy_plan全部完成,但待部署區仍有幹員時套用,邏輯與通用作戰策略相同。部署格子黑名單
既然有優先防守的點位,自然也有優先不部署幹員的點位。例如大火球經過的位置、Boss 腳下,或是一些難以輸出的位置。
此時我們引入了
"blacklist_location",將不想部署幹員的格子加入黑名單中。注意
凡是加入此處的格子,即便後續在部署策略中寫入,也無法進行部署。
... "blacklist_location_Doc": "這裡是用法範例,並非指「蓄水池」這張地圖需要禁用這兩個點位", "blacklist_location": [ // 禁止程式進行部署的位置 [ 0, 0 ], [ 1, 1 ] ],其他地圖策略
例如在水月肉鴿中,若藍門進怪時是否要使用骰子,以緩解堆怪壓力。
"not_use_dice_Doc": "藍門幹員撤退時是否需要使用骰子,不寫預設為 false", "not_use_dice": false,
還是高血壓?是時候展現真正的技術了——客製化作戰策略!
使用 "deploy_plan" 和 "retreat_plan" 實作客製化操作。
客製化策略優於通用戰鬥策略。當客製化策略中的所有步驟都嘗試執行完畢後,剩餘的幹員或倒下後再部署的幹員,會依照通用戰鬥策略不斷進行部署。
有時不需要設定過多客製化策略,完成關鍵步驟後再交給 MAA,兩者結合的效果可能更好。
使用各個群組部署幹員
"deploy_plan": [ // 部署邏輯:從上到下依序嘗試,部署該步驟中找到的第一名幹員,若無則跳過。 { "groups": [ "百嘉", "基石", "地面C", "号角", "挡人先锋" ], // 這一步從這些群組中尋找幹員 "location": [ 6, 4 ], // 遍歷「百嘉、基石、地面 C」等群組 "direction": "left" // 將找到的第一名幹員部署到 6,4 這個座標上並朝向左邊 }, // 沒找到就進行下一個部署操作 { "groups": [ "召唤" ], "location": [ 6, 3 ], "direction": "left" }, { "groups": [ "单奶", "群奶" ], "location": [ 6, 2 ], "direction": "down" } ]注意
MAA 會將所有部署指令整合為單一清單後,依序執行優先級最高的部署操作。 範例:在 [6,4] 部署 ["百嘉", "基石", "地面 C"],在 [6,3] 部署 ["基石", "地面 C"],那麼 MAA 會將部署指令攤平成一張帶有座標的總清單:["百嘉", "基石", "地面 C", "基石", "地面 C"]。 若在戰鬥中 [6,4] 位置的 "百嘉" 組幹員倒下,且手中有可部署的 "基石" 組幹員,會優先部署到 [6,4] 而非 [6,3]。
這意味著就整體邏輯而言,每次完成部署動作後,都會從頭開始檢查可執行的策略(判斷目前步驟的位置是否尚未放置幹員,且待部署區是否有幹員屬於該步驟的幹員群組)。
提示
一些常用的幹員群組用法:
許多作業中主要防守點的組合是 ["地面阻挡", "处决者", "其他地面"],這代表當主要扛傷位幹員倒下時,會嘗試用處決者拖延冷卻時間;當此點位生存壓力過大時,可考慮使用 ["重装", "地面阻挡", "处决者", "炮灰", "其他地面"];盾後點位則可優先部署盾後輸出單位 ["地面远程", "地面阻挡", "处决者", "其他地面"];若單純為了吸引仇恨或送死,可以使用 ["炮灰", "障碍物", "其他地面"]。
高台位置常用組合為 ["高台输出", "其他高台"]。若想讓任何高台幹員都能放置,可以使用 ["高台输出", "狙击", "辅助", "盾法", "其他高台"]。
一些地面位置非常適合瑪恩納與地刺類幹員的組合,例如 ["玛恩纳", "地刺"]。 :::
在某個時間點部署幹員
提示
適用於某些單切幹員或需要炮灰的使用情境。
"deploy_plan": [ { "groups": [ "异德", "刺客", "挡人先锋", "其他地面" ], "location": [ 5, 3 ], "direction": "left", "condition": [ 0, 3 ] // 此操作僅於擊殺數為 0-3 時執行 }, { "groups": [ "异德", "刺客", "挡人先锋", "其他地面" ], "location": [ 5, 3 ], "direction": "left", "condition": [ 6, 10 ] }, ... ]在某個時間點撤退幹員
提示
有時炮灰太強導致一直站場,或是需要騰出部署位來調整陣容該怎麼辦?撤退!
同一位置的部署與撤退命令,其
condition數值盡量不要重疊,否則會出現「秒放秒撤」的情況。"retreat_plan": [ // 在特定時間點撤退目標 { "location": [ 4, 1 ], "condition": [ 7, 8 ] // 在擊殺數為 7-8 時,撤退位於座標 [4,1] 的幹員,若無則跳過 } ]在某個時間點釋放技能(TODO)
一些其他的欄位(不建議使用)
"role_order_Doc": "幹員職業部署順序,未寫明部分依近衛、先鋒、醫療、重裝、狙擊、術師、輔助、特種、召喚物的順序補全,請輸入英文", "role_order": [ // 不建議使用,請改為設定 deploy_plan 欄位 "warrior", "pioneer", "medic", "tank", "sniper", "caster", "support", "special", "drone" ], "force_air_defense_when_deploy_blocking_num_Doc": "場上有 10000 個阻擋單位時,開始強制部署總共 1 個對空單位(填寫與否均不影響正常部署邏輯),在此期間不禁止部署醫療單位(不寫預設為 false)", "force_air_defense_when_deploy_blocking_num": { // 不建議使用,請改為設定 deploy_plan 欄位 "melee_num": 10000, "air_defense_num": 1, "ban_medic": false }, "force_deploy_direction_Doc": "這些點位針對特定職業強制設定部署方向", "force_deploy_direction": [ // 不建議使用,請改為設定 deploy_plan 欄位 { "location": [ 1, 1 ], "role_Doc": "填入的職業將套用強制方向", "role": [ "warrior", "pioneer" ], "direction": "up" }, { "location": [ 3, 1 ], "role": [ "sniper" ], "direction": "left" } ],
注意
當 MAA 無法找到當前關卡對應的客製化作戰策略時,會自動執行通用作戰策略。
當 MAA 對當前關卡名稱辨識失敗後,不會執行任何作戰邏輯。
對某名幹員打法有特殊理解?——精細化操作特定幹員
請將這位幹員單獨分組。
撰寫作業時,請考慮這位幹員與既有作業的順序優先度。
您也可以不用考慮那麼多,單獨為這位幹員寫一份作戰邏輯。
僅使用一名幹員也是可行的!嘗試使用 MAA 來挑戰單人通關吧(由於其他邏輯尚不完善,成功機率較低)。
參考範例:1. 傀影肉鴿的棘刺,2. 水月肉鴿的異德,3. 薩米肉鴿的焰影葦草 / 維什戴爾,4. 薩卡茲肉鴿的維什戴爾。
肉鴿第三步——不期而遇類節點邏輯
resource/roguelike/主題名稱/encounter/default.json 描述了「刷等級模式」下不期而遇事件選擇的策略。
resource/roguelike/主題名稱/encounter/deposit.json 描述了「刷源石錠模式」與「刷開局模式」下不期而遇事件選擇的策略。
MAA 現有對不期而遇的判斷方法
透過 OCR 辨識不期而遇事件名稱,但選項是操作固定的位置。
若事件名稱辨識失敗,會點擊選項類型圖示(若有),或點擊最下方的選項。
一個常見的卡死原因,在於選項類型的圖示存在,但該選項實際上不可選取(TODO)。
改進肉鴿邏輯時,通常只需要微調或不調整(畢竟大佬們都寫好了嘛)。
優化不期而遇選項的優先度
請結合 prts.wiki 查看各個事件的選項效果,請注意選項不一定固定。
您可以自行修改不期而遇事件選項,以引導 MAA 走向特定地圖的特殊結局。
{
"theme": "Sami", // 肉鴿主題
"stage": [ // 不期而遇類事件
{
"name": "低地市集", // 不期而遇事件名稱
"option_num": 3, // 總共有幾個選項(這裡是 3)
"choose": 3, // 優先選擇第幾個選項(這裡優先選第三個),若選不到就選離開選項(基本上是最後一個)
"choices": [ // 選擇選項的要求(暫時不影響程式執行,僅作適用情況的標註方便修改)
{
"name": "选择碎草药", // 選項名稱
"ChaosLevel": { // 抗干擾 / 燈火等級
"value": "3", // 要求的數字
"type": ">" // 是大於還是小於(這裡表示抗干擾 / 燈火大於 3 時才啟動「选择碎草药」選項)
}
},
{
"name": "选择好看的织物",
"ChaosLevel": {
"value": "3",
"type": ">"
}
},
...根據隊伍情況動態調整某些選項的優先度(TODO)
肉鴿第四步——商店藏品的優先度
resource/roguelike/主題名稱/shopping.json 描述了商店購買藏品(以及戰鬥後選擇藏品?)的策略。
{
"theme": "Phantom", // 肉鴿主題名稱(這裡是傀影)
"priority": [ // 優先度,清單順序即為優先級,愈靠前者愈優先購買。
// 但優先級判斷在 chars、roles 的篩選之前,可能出現高優先級商品被篩掉而什麼都不買的情況。
{
"name": "金酒之杯", // 藏品名稱(這裡為金杯)
"no_longer_buy": true, // true 表示獲得該藏品後不再花錢買藏品;false 或省略表示繼續花錢買藏品。
"ignore_no_longer_buy": true, // true 表示商店有該藏品時忽略 "no_longer_buy",即仍會購買;false 或省略表示拿到有 "no_longer_buy" 的藏品後不會再買此藏品。
"effect": "每有 5 源石錠,所有我方單位的攻擊速度 +7", // 藏品效果(不影響程式執行,僅作備註方便排序)
"No": 167 // 藏品編號,Wiki 可查(不影響程式執行,僅作備註方便排序)
},
...
{
"name": "扩散之手",
"chars": [ // 隊伍中有這些幹員時購買此藏品
"异客" // (這裡表示隊伍中有異客時,若遇到擴散之手,就會嘗試購買)
],
"effect": "【擴散術師】、【鏈術師】和【轟擊術師】每對一個單位造成傷害就回復 2 點技力值",
"No": 136
},
...
{
"name": "折戟-破釜沉舟",
"roles": [ // 隊伍中有這些職業時購買此藏品
"WARRIOR" // (這裡表示隊伍中有近衛幹員時,若遇到折戟-破釜沉舟,就會嘗試購買)
],
"effect": "所有【近衛】幹員的防禦力 -40%,但攻擊力 +40%,攻擊速度 +30",
"No": 16
},
...
{
"name": "Miss.Christine摸摸券",
"promotion": 2, // 隊伍中有 2 名幹員需進階時購買(吧?)
"effect": "立即進階兩名幹員(不消耗希望)",
"No": 15
},
...
{
"name": "警戒篱木",
"effect": "坍縮值 -2,目標生命上限 +2",
"No": 198,
"decrease_collapse": true // true 表示獲得該藏品會降低坍縮值。在 mode 為 5 時將不會購買。
},
...
"others": // MAA 不會購買的收藏品,例如結局藏品與起重機
{
"name": "无人起重机"
},肉鴿特殊機制
薩米肉鴿——密文板
resource/roguelike/Sami/foldartal.json 描述了薩米肉鴿密文板的策略。
{
"theme": "Sami", // 肉鴿主題名稱(這裡是薩米)
"groups": [ // 對使用情況與用法的分組
{
"usage": "SkipBattle", // 用法(這裡是「跳過戰鬥」,用於刷錢與「燒開水」模式的作戰節點,使用板子跳過戰鬥以節省時間)
"doc": "跳過戰鬥,刷錢與燒開水模式",
"pairs": [ // 密文板組合(遇到對應節點時,會判斷有無符合下方設定的組合,若有則儘可能全部使用;若無則直接進入節點)
{ // (這裡「伤痕」僅能與「空无」聯結)
"up": [ // 上板子
"伤痕"
],
"down": [ // 下板子
"空无"
]
},
{ // (這裡會依照順序搜尋 "黜人"+"惊讶"、"黜人"+"疑惑"、"黜人"+...、"猎手"+"惊讶"、"猎手"+"疑惑" 等組合)
"up": [
"黜人",
"猎手",
...
],
"down": [
"惊讶",
"疑惑",
...
]
}
]
},
{
"usage": "Boss", // (這裡表示遇到 Boss 關卡時會使用的密文板組合)
"doc": "有的用全用了",
...
}
],
"foldartal": [ // 密文板效果備註(僅作備註方便查看效果,不影響程式執行)
{
"name": "布局", // 密文板類型(上板子或下板子)
"foldartal": [
{
"name": "黜人", // 密文板名稱
"effect": "選擇所有右側鄰近的戰鬥節點" // 密文板效果
},薩米肉鴿——坍縮範式
當 check_collapsal_paradigms 為 true 時,MAA 將以兩種不同的手段檢查坍縮範式:
- 在選關介面點擊螢幕中上方展開坍縮狀態欄位,以下稱為 Panel Check;
- 觀察螢幕右側是否有坍縮範式通知,以下稱為 Banner Check。
獲取坍縮值的方法多種多樣,我們考慮了以下情況:
- 戰鬥後因非完美戰鬥導致坍縮值增加,執行 Banner Check。
- 戰鬥後因獲得收藏品導致坍縮值變動,執行 Banner Check。
- 在不期而遇等節點中,因選擇選項導致坍縮值變動,執行 Banner Check。
- 在詭異行商節點中,因購買收藏品導致坍縮值變動,執行 Banner Check。
- 因使用密文板導致坍縮值減少,執行 Banner Check。
- 因進入新的一層導致坍縮值增加,執行 Panel Check。
- 若執行 Banner Check 時發現坍縮範式消退,因無法確定是否會一次消退兩層(即便會,機率也極低),會在下一次回到選關介面時,額外觸發一次 Panel Check。
- 在
double_check_collapsal_paradigms為true時,每次回到選關介面都會額外觸發一次 Panel Check,以驗證先前是否有遺漏或多紀錄的坍縮範式。
以下為刷隱藏坍縮範式的任務設定範例:
{
"theme": "Sami",
"mode": 5,
"investment_enabled": false,
"squad": "远程战术分队",
"roles": "稳扎稳打",
"core_char": "维什戴尔",
"expected_collapsal_paradigms": ["目空一些", "睁眼瞎", "图像损坏", "一抹黑"]
}當 mode 為 5 時:
- 優先使用
stage_name為關卡名稱_collapse的作戰策略。範例:resource/roguelike/Sami/autopilot/事不过四_collapse.json。 - 使用
resource/roguelike/Sami/encounter/collapse.json中描述的不期而遇事件選擇策略。 - 不會購買
decrease_collapse為true的藏品。
當 mode 不為 5 但 check_collapsal_paradigms 為 true 時,仍會偵測坍縮範式,並在遇到 expected_collapsal_paradigms 清單中的坍縮範式時停止任務;若遇到其他坍縮範式則不會重新開始。
刷隱藏坍縮範式時,推薦 N10 難度,建議使用以下隊伍:
- 維什戴爾 + 斑點 + 史都華德
- 焰影葦草 + 梓蘭 + 泡普卡
- 提豐 + 斑點 + 史都華德
界園肉鴿——通寶
resource/roguelike/JieGarden/coppers.json 描述了界園肉鴿通寶的設定與交換策略。
{
"theme": "JieGarden", // 肉鴿主題名稱(這裡是界園)
"addons": { // 通寶附加屬性說明(僅作註釋,不影響程式執行)
"锈色": "投出時,每經過一個節點,獲得源石錠 +1",
"存护": "加入錢盒時,獲得護盾值 +2",
"入幻": "加入錢盒時,獲得希望 +1",
"引光": "加入錢盒時,獲得燭火 +1",
"巡游": "投出時,每完成一場戰鬥,獲得票券 +1"
},
"coppers": [ // 通寶清單
{
"name": "大炎通宝", // 通寶名稱
"desc": "普通又空白,什麼也沒有", // 通寶效果描述(僅作註釋,不影響程式執行)
"rarity": "NORMAL", // 稀有度:NONE / NORMAL / RARE / SUPER_RARE(僅作註釋,不影響程式執行)
"pickup_priority": 0, // 拾取優先級,在掉落選擇時使用,數值愈高愈優先拾取
"discard_priority": 1000 // 丟棄優先級,在交換時使用,數值愈高愈優先被丟棄
},
{
"name": "衡-奇土生金",
"desc": "投出時,立即獲得源石錠 +4(下次投錢前變化為-大炎通寶)",
"rarity": "NORMAL",
"pickup_priority": 200,
"discard_priority": 800,
"cast_discard_priority": 999 // 可選欄位,已投出時的丟棄優先級。僅在已投出且值 >= 0 時替代 discard_priority
// 這通常適用於一些投出後效果發生變化的通寶(如變為大炎通寶的通寶)
},
{
"name": "厉-西廉贞",
"desc": "投出時,精英及領袖敵人的生命值、攻擊力 +10%,在險路惡敵及歲獸殘識中攻擊力、生命值額外 +20%",
"rarity": "NORMAL",
"pickup_priority": 0,
"discard_priority": 1998,
"cast_discard_priority": 2098 // 同上,有時也會用於一些投出後帶來負面效果的通寶
},
...
]
}通寶交換邏輯
MAA 在界園肉鴿中會自動處理通寶的拾取與交換:
啟用條件
通寶交換功能僅在以下模式中啟用:
- 投資模式:需要開啟
投資模式啟用購物、招募、進入第 2 層選項。 - 其他模式:預設啟用。
拾取掉落通寶:在戰鬥結束後,若出現通寶掉落選擇介面,MAA 會根據
pickup_priority選擇優先級最高的通寶。交換錢盒通寶:當新拾取的通寶需要與錢盒中的通寶交換時:
- 辨識錢盒中所有通寶的類型、名稱以及是否為「已投出」狀態。
- 找到錢盒中
discard_priority最高(最不重要)的通寶。 - 若新通寶的
discard_priority比現有最不重要的通寶更低,則放棄交換。 - 否則將最不重要的通寶替換為新通寶。
已投出通寶的特殊處理:
- 針對標記了
cast_discard_priority欄位的通寶,在已投出狀態時會使用該優先級,而非discard_priority。 - 這通常適用於某些投出後效果發生變化的通寶(例如變為大炎通寶的通寶)。
- 針對標記了
通寶辨識機制
MAA 使用以下方法辨識並處理通寶:
- 透過範本匹配(Template Matching)辨識通寶的類型圖示(厲/衡/花)。
- 基於類型圖示的位置,使用 ROI 偏移進行 OCR 辨識通寶名稱。
- 辨識通寶是否處於「已投出」狀態。
- 在通寶交換介面中自動滑動列表,掃描所有通寶進行比較。
辨識流程示意


注意
- 若 OCR 辨識出的通寶名稱在設定檔案中未找到,MAA 會將偵錯影像儲存至
debug/roguelike/coppers/unknown資料夾,以供排查原因。
希望實作的邏輯(TODO)
自動編隊邏輯
可根據不同地圖設定不同的地圖陣容完備性檢測與技能優先級。
可根據現有陣容避開一些難度較高的作戰。
優化尋路算法(已初步實作)
例如:可實現前三層多進戰鬥點、後三層少進戰鬥點,讓前期發育更穩健。
例如:辨識節點間的連線,藉此判斷更優路徑。
技能保留
部署於某格子的幹員,在技能冷卻完成後等待 x 秒再開啟,以利對軸。可撰寫於 Deploy_plan 下的 Skill_hold,或另外撰寫 Skill_hold_plan。
技能關閉
針對彈藥類技能幹員有用。
