mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
docs: 更新3.4任务流程协议文档
This commit is contained in:
@@ -242,7 +242,7 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
|
||||
| `#`(双目) | 虚任务 | `StartUpThemes#next` |
|
||||
| `*` | 重复多个任务 | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | 任务列表合并(在 next 系列属性中同名任务只保留最靠前者) | `A+B` |
|
||||
| `^` | 任务列表差(在前者但不在后者,顺序不变)| `(A+A+B+C)-(A+B+D)`(结果为 `C`) |
|
||||
| `^` | 任务列表差(在前者但不在后者,顺序不变)| `(A+A+B+C)^(A+B+D)`(结果为 `C`) |
|
||||
|
||||
运算符 `@`, `#`, `*`, `+`, `^` 有优先级:`#`(单目)> `@` = `#`(双目)> `*` > `+` = `^`。
|
||||
|
||||
|
||||
@@ -235,7 +235,7 @@ In this case above, `"C@B" -> next` (i.e. `C@A#next`) is `["N1"]` instead of `["
|
||||
| `#` (binary) | Virtual task | `StartUpThemes#next` |
|
||||
| `*` | Repeat tasks | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | Task list merge | `A+B` |
|
||||
| `^` | Task list difference (in the former but not in the latter, the order remains the same) | `(A+A+B+C)-(A+B+D)` (= `C`) |
|
||||
| `^` | Task list difference (in the former but not in the latter, the order remains the same) | `(A+A+B+C)^(A+B+D)` (= `C`) |
|
||||
|
||||
The operators `@`, `#`, `*`, `+`, `^` have priority: `#` (unary) > `@` = `#` (binary) > `*` > `+` = `^`.
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
|
||||
| `#` (binary/이항) | 가상 작업 | `StartUpThemes#next` |
|
||||
| `*` | 작업 반복 | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | 작업 목록 병합 | `A+B` |
|
||||
| `^` | 작업 목록 차집합 (앞쪽에는 있지만 뒤쪽에는 없는 작업으로, 순서는 유지됨) | `(A+A+B+C)-(A+B+D)` (= `C`) |
|
||||
| `^` | 작업 목록 차집합 (앞쪽에는 있지만 뒤쪽에는 없는 작업으로, 순서는 유지됨) | `(A+A+B+C)^(A+B+D)` (= `C`) |
|
||||
|
||||
`@`, `#`, `*`, `+`, `^` 연산자의 우선순위는 다음과 같습니다: `#` (단항) > `@` = `#` (이항) > `*` > `+` = `^`.
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
# 任務流程協議
|
||||
|
||||
`resource/tasks.json` 的使用方法及各字段說明
|
||||
`resource/tasks.json` 的使用方法及各欄位說明
|
||||
|
||||
## 完整字段一覽
|
||||
::: tip
|
||||
請注意 JSON 檔是不支援注釋的,文本中的注釋僅用於演示,請勿直接複製使用
|
||||
:::
|
||||
|
||||
## 完整欄位一覽
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -21,10 +25,10 @@
|
||||
// 不填寫時默認為 DoNothing
|
||||
// - ClickSelf: 點擊識別到的位置(識別到的目標範圍內隨機點)
|
||||
// - ClickRand: 點擊整個畫面中隨機位置
|
||||
// - ClickRect: 點擊指定的區域,對應 specificRect 字段,不建議使用該選項
|
||||
// - ClickRect: 點擊指定的區域,對應 specificRect 欄位,不建議使用該選項
|
||||
// - DoNothing: 什麼都不做
|
||||
// - Stop: 停止當前任務
|
||||
// - Swipe: 滑動,對應 specificRect 與 rectMove 字段
|
||||
// - Swipe: 滑動,對應 specificRect 與 rectMove 欄位
|
||||
|
||||
"sub": [ "SubTaskName1", "SubTaskName2" ],
|
||||
// 可選項,子任務。會在執行完當前任務後,依次執行每一個子任務
|
||||
@@ -45,11 +49,11 @@
|
||||
|
||||
"maxTimes": 10, // 可選項,表示該任務最大執行次數
|
||||
// 不填寫時默認無窮大
|
||||
// 達到最大次數後,若存在 exceededNext 字段,則執行 exceededNext;否則直接任務停止
|
||||
// 達到最大次數後,若存在 exceededNext 欄位,則執行 exceededNext;否則直接任務停止
|
||||
|
||||
"exceededNext": [ "OtherTaskName1", "OtherTaskName2" ],
|
||||
// 可選項,表示達到了最大執行次數後要執行的任務
|
||||
// 不填寫時,達到了最大執行次數則停止;填寫後就執行這裏的,而不是 next 裏的
|
||||
// 不填寫時,達到了最大執行次數則停止;填寫後就執行這裡的,而不是 next 裡的
|
||||
"onErrorNext": [ "OtherTaskName1", "OtherTaskName2" ],
|
||||
// 可選項,表示執行出錯時,後續要執行的任務
|
||||
|
||||
@@ -65,7 +69,7 @@
|
||||
// 但僅適用於待識別目標位置完全不會變的任務,若待識別目標位置會變請設為 false
|
||||
|
||||
"rectMove": [ 0, 0, 0, 0 ], // 可選項,識別後的目標移動,不建議使用該選項。以 1280 * 720 為基準自動縮放
|
||||
// 例如識別到了 A ,但實際要點擊的是 A 下方 10 像素 5 * 2 區域的某個位置,
|
||||
// 例如識別到了 A ,但實際要點擊的是 A 下方 10 圖元 5 * 2 區域的某個位置,
|
||||
// 則可填寫[ 0, 10, 5, 2 ],可以的話儘量直接識別要點擊的位置,不建議使用該選項
|
||||
// 額外的,當 action 為 Swipe 時有效且必選,表示滑動終點。
|
||||
|
||||
@@ -81,22 +85,22 @@
|
||||
"specialParams": [ int, ... ], // 某些特殊識別器需要的參數
|
||||
// 額外的,當 action 為 Swipe 時可選,[0] 表示 duration,[1] 表示 是否啟用額外滑動
|
||||
|
||||
/* 以下字段僅當 algorithm 為 MatchTemplate 時有效 */
|
||||
/* 以下欄位僅當 algorithm 為 MatchTemplate 時有效 */
|
||||
|
||||
"template": "xxx.png", // 可選項,要匹配的圖片檔案名
|
||||
// 默認 "任務名.png"
|
||||
|
||||
"templThreshold": 0.8, // 可選項,圖片範本匹配得分的閾值,超過閾值才認為識別到了。
|
||||
// 默認 0.8, 可根據日誌查看實際得分是多少
|
||||
// 預設 0.8, 可根據日誌查看實際得分是多少
|
||||
|
||||
"maskRange": [ 1, 255 ], // 可選項,灰度掩碼範圍。例如將圖片不需要識別的部分塗成黑色(灰度值為 0)
|
||||
"maskRange": [ 1, 255 ], // 可選項,灰度遮罩範圍。例如將圖片不需要識別的部分塗成黑色(灰度值為 0)
|
||||
// 然後設置"maskRange"的範圍為 [ 1, 255 ], 匹配的時候即刻忽略塗黑的部分
|
||||
|
||||
/* 以下字段僅當 algorithm 為 OcrDetect 時有效 */
|
||||
/* 以下欄位僅當 algorithm 為 OcrDetect 時有效 */
|
||||
|
||||
"text": [ "接管作戰", "代理指揮" ], // 必選項,要識別的文字內容,只要任一匹配上了即認為識別到了
|
||||
|
||||
"ocrReplace": [ // 可選項,針對常見識別錯的文字進行替換(支持正則)
|
||||
"ocrReplace": [ // 可選項,針對常見識別錯的文字進行替換(支援正則)
|
||||
[ "千員", "幹員" ],
|
||||
[ ".+擊幹員", "狙擊幹員" ]
|
||||
],
|
||||
@@ -111,7 +115,7 @@
|
||||
"withoutDet": false // 可選項,是否不使用檢測模型
|
||||
// 不填寫默認 false
|
||||
|
||||
/* 以下字段僅當 algorithm 為 Hash 時有效 */
|
||||
/* 以下欄位僅當 algorithm 為 Hash 時有效 */
|
||||
// 演算法不成熟,僅部分特例情況中用到了,暫不推薦使用
|
||||
// Todo
|
||||
}
|
||||
@@ -126,7 +130,7 @@ Template task 與 base task 合稱**範本任務**。
|
||||
|
||||
允許把某個任務 "A" 當作範本,然後 "B@A" 表示由 "A" 生成的任務。
|
||||
|
||||
- 如果 `tasks.json` 中未顯式定義任務 "B@A",則在 `sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes` 字段中增加 `B@` 首碼(如遇任務名開頭為 `#` 則增加 `B` 首碼),其餘參數與 "A" 任務相同。就是說如果任務 "A" 有以下參數:
|
||||
- 如果 `tasks.json` 中未顯式定義任務 "B@A",則在 `sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes` 欄位中增加 `B@` 首碼(如遇任務名開頭為 `#` 則增加 `B` 首碼),其餘參數與 "A" 任務相同。就是說如果任務 "A" 有以下參數:
|
||||
|
||||
```json
|
||||
"A": {
|
||||
@@ -147,26 +151,28 @@ Template task 與 base task 合稱**範本任務**。
|
||||
```
|
||||
|
||||
- 如果 `tasks.json` 中定義了任務 "B@A",則:
|
||||
1. 如果 "B@A" 與 "A" 的 `algorithm` 字段不同,則派生類參數不繼承(只繼承 `TaskInfo` 定義的參數)
|
||||
1. 如果 "B@A" 與 "A" 的 `algorithm` 欄位不同,則派生類參數不繼承(只繼承 `TaskInfo` 定義的參數)
|
||||
2. 如果是圖像匹配任務,`template` 若未顯式定義則為 `B@A.png`(而不是繼承"A"的 `template` 名),其餘情況任何派生類參數若未顯式定義,直接繼承 "A" 任務的參數
|
||||
3. 對於 `TaskInfo` 基類中定義的參數(任何類型任務都有的參數,例如 `algorithm`, `roi`, `next` 等),若沒有在 "B@A" 內顯式定義,則除了上面提到的 `sub` 等五個字段在繼承時會增加 "B@" 首碼外,其餘參數直接繼承 "A" 任務的參數
|
||||
3. 對於 `TaskInfo` 基類中定義的參數(任何類型任務都有的參數,例如 `algorithm`, `roi`, `next` 等),若沒有在 "B@A" 內顯式定義,則除了上面提到的 `sub` 等五個欄位在繼承時會增加 "B@" 首碼外,其餘參數直接繼承 "A" 任務的參數
|
||||
|
||||
### Base Task
|
||||
|
||||
Base task 與 template task 合稱**範本任務**。
|
||||
|
||||
有字段 `baseTask` 的任務即為 base task。
|
||||
有欄位 `baseTask` 的任務即為 base task。
|
||||
|
||||
除了 `template` 未顯式定義時仍為 `"任務名.png"`,其餘任何參數若未顯式定義直接使用 `baseTask` 對應任務的參數。(不加首碼)
|
||||
Base task 的邏輯優先於 template task。這意味著 `"B@A": { "baseTask": "C", ... }` 與任務 A 沒有任何相關。
|
||||
|
||||
#### 其他相關
|
||||
任何參數若未顯式定義則不加首碼地直接使用 `baseTask` 對應任務的參數,除了 `template` 未顯式定義時仍為 `"任務名.png"`。
|
||||
|
||||
- 外服 `tasks.json` 中定義的同名任務直接繼承國服 `tasks.json` 的參數,相當於 `"A": { "baseTask": "國服的A" }`
|
||||
- 如果國服 `tasks.json` 中定義了任務 "B@A",外服 `tasks.json` 中也定義了 "B@A",那麼
|
||||
1. 如果外服 "B@A" 有字段 `"baseTask": ""`,則不繼承國服 "B@A"
|
||||
- 若有定義任務 "A",則以 template task 的邏輯處理 "B@A"
|
||||
#### 多檔任務
|
||||
|
||||
- 後載入的任務檔 (例如外服 `tasks.json`; 下稱檔二) 中定義的同名任務直接繼承先載入的任務檔 (例如國服 `tasks.json`; 下稱文件一) 的參數。
|
||||
- 如果檔二中定義的任務在檔一中也定義了同名任務,那麼:
|
||||
1. 如果檔二中任務沒有 `baseTask` 欄位,則直接繼承檔一中同名任務的參數。
|
||||
2. 如果檔二中任務有欄位 `"baseTask": "#none"`,則不繼承檔一中同名任務的參數。
|
||||
- **若有定義任務 "A",則以 template task 的邏輯處理 "B@A"**
|
||||
- 若未定義任務 "A",則以普通任務的邏輯處理 "B@A"
|
||||
2. 如果外服 "B@A" 沒有 `baseTask`,則直接繼承國服 "B@A" 參數
|
||||
|
||||
### Virtual Task(虛任務)
|
||||
|
||||
@@ -178,7 +184,7 @@ Virtual task 也稱 sharp task(`#` 型任務)。
|
||||
|:---------:|:---:|:--------:|
|
||||
| self | 父任務名 | `"A": {"next": "#self"}` 中的 `"#self"` 被解釋為 `"A"`<br>`"B": {"next": "A@B@C#self"}` 中的 `"A@B@C#self"` 被解釋為 `"B"`。<sup>1</sup> |
|
||||
| back | # 前面的任務名 | `"A@B#back"` 被解釋為 `"A@B"`<br>`"#back"` 直接出現則會被跳過 |
|
||||
| next, sub 等 | # 前任務名對應字段 | 以 `next` 為例:<br>`"A#next"` 被解釋為 `Task.get("A")->next`<br>`"#next"` 直接出現則會被跳過 |
|
||||
| next, sub 等 | # 前任務名對應欄位 | 以 `next` 為例:<br>`"A#next"` 被解釋為 `Task.get("A")->next`<br>`"#next"` 直接出現則會被跳過 |
|
||||
|
||||
_Note<sup>1</sup>: `"XXX#self"` 與 `"#self"` 含義相同。_
|
||||
|
||||
@@ -212,7 +218,7 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
|
||||
|
||||
- 當幾個任務有 `"next": [ "#back" ]` 時,`"Task1@Task2@Task3"` 代表依次執行 `Task3`, `Task2`, `Task1`。
|
||||
|
||||
#### 其他相關
|
||||
#### 其它相關
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -224,9 +230,22 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
|
||||
|
||||
以上這種情況, `"C@B" -> next`(即 `C@A#next`)為 `[ "N1" ]` 而不是 `[ "C@N0" ]`.
|
||||
|
||||
## 運算式計算
|
||||
|
||||
| 符號 | 含義 | 實例 |
|
||||
|:---------:|:---:|:--------:|
|
||||
| `@` | 範本任務 | `Fight@ReturnTo` |
|
||||
| `#`(單目) | 虛任務 | `#self` |
|
||||
| `#`(雙目) | 虛任務 | `StartUpThemes#next` |
|
||||
| `*` | 重複多個任務 | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | 任務清單合併(在 next 系列屬性中同名任務只保留最靠前者) | `A+B` |
|
||||
| `^` | 任務列表差(在前者但不在後者,順序不變)| `(A+A+B+C)^(A+B+D)`(結果為 `C`) |
|
||||
|
||||
運算子 `@`, `#`, `*`, `+`, `^` 有優先順序:`#`(單目)> `@` = `#`(雙目)> `*` > `+` = `^`。
|
||||
|
||||
## Schema 檢驗
|
||||
|
||||
本項目為 `tasks.json` 配置了 json schema 檢驗,schema 檔為`docs/maa_tasks_schema.json`。
|
||||
本項目為 `tasks.json` 配置了 json schema 檢驗,schema 文件為`docs/maa_tasks_schema.json`。
|
||||
|
||||
### Visual Studio
|
||||
|
||||
@@ -234,5 +253,4 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
|
||||
|
||||
### Visual Studio Code
|
||||
|
||||
在 `.vscode/settings.json` 中已對其進行配置,用 vscode 打開該**專案檔夾**即可使用。提示效果較好。
|
||||
|
||||
在 `.vscode/settings.json` 中已對其進行配置,用 vscode 打開該**專案檔案夾**即可使用。提示效果較好。
|
||||
|
||||
Reference in New Issue
Block a user