resource/tasks.json
的使用方法及各欄位說明
{
"TaskName" : { // 任務名
"algorithm": "MatchTemplate", // 可選項,表示辨識算法的類型
// 不填寫時預設為 MatchTemplate
// - JustReturn: 不進行辨識,直接執行 action
// - MatchTemplate: 匹配圖片
// - OcrDetect: 字元辨識
// - Hash: 雜湊計算
"template": "xxx.png", // 僅當 algorithm 為 MatchTemplate 時有效;可選項,要匹配的圖片檔案名
// 不填時寫預設 "任務名.png"
"text": [ "接管作戰", "代理指揮" ], // 僅當 algorithm 為 OcrDetect 時有效;必選項,要辨識的文字內容,只要任一匹配上了即認為辨識到了
"action": "ClickSelf", // 可選項,表示辨識到後的動作
// 不填寫時預設為 DoNothing
// - ClickSelf: 點擊辨識到的位置(辨識到的目標範圍內隨機點)
// - ClickRand: 點擊整個畫面中隨機位置
// - DoNothing: 什麼都不做
// - Stop: 停止當前任務
// - ClickRect: 點擊指定的區域,對應 specificRect 欄位,不建議使用該選項
// - SwipeToTheLeft: 滑動到最左側
// - SwipeToTheRight: 滑動到最右側
// - SlowlySwipeToTheLeft: 緩慢左滑
// - SlowlySwipeToTheRight: 緩慢右滑
"sub": [ "SubTaskName1", "SubTaskName2" ],
// 可選項,子任務。會在執行完當前任務後,依次執行每一個子任務
// 可以套娃,子任務再套子任務。但要注意不要寫出了無窮迴圈
"subErrorIgnored": true, // 可選項,是否忽略子任務的錯誤。
// 不填寫預設 false
// 為 false 時,若某個子任務出錯,則不繼續執行後續任務(相當於本任務出錯了)
// 為 true 時,子任務是否出錯沒有影響
"next": [ "OtherTaskName1", "OtherTaskName2"],
// 可選項,表示執行完當前任務和 sub 任務後,下一個要執行的任務
// 會從前往後依次去辨識,去執行第一個匹配上的
// 不填寫預設執行完當前任務直接停止
"maxTimes": 10, // 可選項,表示該任務最大執行次數
// 不填寫時預設無窮大
// 達到最大次數後,若存在 exceededNext 欄位,則執行 exceededNext;否則直接任務停止
"exceededNext": [ "OtherTaskName1", "OtherTaskName2" ],
// 可選項,表示達到了最大執行次數後要執行的任務
// 不填寫時,達到了最大執行次數則停止;填寫後就執行這裡的,而不是 next 裡的
"onErrorNext": [ "OtherTaskName1", "OtherTaskName2" ],
// 可選項,表示執行出錯時,後續要執行的任務
"preDelay": 1000, // 可選項,表示辨識到後延遲多久才執行 action,單位毫秒;不填寫時預設 0
"postDelay": 1000, // 可選項,表示 action 執行完後延遲多久才去辨識 next, 單位毫秒;不填寫時預設 0
"roi": [ 0, 0, 1280, 720], // 可選項,表示辨識的範圍,格式為 [ x, y, width, height ]
// 以 1280 * 720 為基準自動縮放;不填寫時預設 [ 0, 0, 1280, 720 ]
// 盡量填寫,減小辨識範圍可以減少性能消耗,加快辨識速度
"cache": true, // 可選項,表示該任務是否使用快取,預設為 true;
// 第一次辨識到後,以後永遠只在第一次辨識到的位置進行辨識,開啟可大幅節省性能
// 但僅適用於待辨識目標位置完全不會變的任務,若待辨識目標位置會變請設為 false
"rectMove": [0, 0, 0, 0], // 可選項,辨識後的目標移動,不建議使用該選項。以 1280 * 720 為基準自動縮放
// 例如辨識到了 A 圖示,但實際要點擊的是 A 圖示旁邊的某個位置,則進行移動後再點擊。
// 可以的話盡量直接辨識要點擊的位置,不建議使用該選項
"reduceOtherTimes": [ "OtherTaskName1", "OtherTaskName2" ],
// 可選項,執行後減少其他任務的執行計數。
// 例如執行了吃理智藥,則說明上一次點擊藍色開始行動按鈕沒生效,所以藍色開始行動要-1
"specificRect": [ 100, 100, 50, 50],
// 僅當 action 為 ClickRect 時有效且必選,表示指定的點擊位置(範圍內隨機一點)。
// 以 1280 * 720 為基準自動縮放
/* 以下欄位僅當 algorithm 為 MatchTemplate 時有效 */
"templThreshold": 0.8, // 可選項,圖片模板匹配得分的閾值,超過閾值才認為辨識到了。
// 預設 0.8, 可根據紀錄查看實際得分是多少
"maskRange": [ 1, 255 ], // 可選項,灰階遮罩範圍。例如將圖片不需要辨識的部分塗成黑色(灰階值為 0)
// 然後設置"maskRange"的範圍為 [ 1, 255 ], 匹配的時候即刻忽略塗黑的部分
/* 以下欄位僅當 algorithm 為 OcrDetect 時有效 */
"fullMatch": false, // 可選項,文字辨識是否需要全字匹配(不能多字),預設為 false
// false 時只要是子串即可:例如 text: [ "開始" ],實際辨識到了 "開始行動",也算辨識成功;
// true 時則必須辨識到了 "開始",多一個字都不行
"ocrReplace": [ // 可選項,針對常見辨識錯的文字進行替換(支持正規表示式)
[ "乾員", "幹員" ],
[ ".+擊幹員", "狙擊幹員" ]
]
/* 以下欄位僅當 algorithm 為 Hash 時有效 */
// 算法不成熟,僅部分特例情況中用到了,暫不推薦使用
// Todo
}
}
next
中再填寫自身的任務名,可形成迴圈。例如
{
"Waiting": {
"algorithm": "OcrDetect",
"text": [ "正在加載" ],
"next": [
"Succeed", // 首先辨識 "加載完成",
"Waiting" // 如果沒辨識到,再辨識 "正在加載"
]
},
"Succeed": {
"algorithm": "OcrDetect",
"text": [ "加載完成" ],
"next": [
"OtherTask"
]
}
}
-
algorithm
的JustReturn
不建議形成迴圈,如果出現 adb 斷開等情況,會出現一直當做辨識成功 -
某些任務每次要執行 N 次,可將該任務複製 N 遍,分別取不同的名字,例如
{
"DoIt": {
"next": [
"DoItAgain"
]
},
"DoItAgain": {
"next": [
"OtherTask"
]
}
}
本項目為 tasks.json
配置了 json schema 檢驗,schema 檔案為docs/maa_tasks_schema.json
。
在 MaaCore.vcxporj
中已對其進行配置,開箱即用。提示效果較為晦澀,且有部分資訊缺失。
在 .vscode/settings.json
中已對其進行配置,用 vscode 打開該項目資料夾即可使用。提示效果較好。