Skip to content

Latest commit

 

History

History
162 lines (124 loc) · 8.96 KB

3.4-任務流程協定.md

File metadata and controls

162 lines (124 loc) · 8.96 KB

任務流程協定

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"
        ]
    }
}
  • algorithmJustReturn 不建議形成迴圈,如果出現 adb 斷開等情況,會出現一直當做辨識成功

  • 某些任務每次要執行 N 次,可將該任務複製 N 遍,分別取不同的名字,例如

{
    "DoIt": {
        "next": [
            "DoItAgain"
        ]
    },
    "DoItAgain": {
        "next": [
            "OtherTask"
        ]
    }
}

Schema 檢驗

本項目為 tasks.json 配置了 json schema 檢驗,schema 檔案為docs/maa_tasks_schema.json

Visual Studio

MaaCore.vcxporj 中已對其進行配置,開箱即用。提示效果較為晦澀,且有部分資訊缺失。

Visual Studio Code

.vscode/settings.json 中已對其進行配置,用 vscode 打開該項目資料夾即可使用。提示效果較好。