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
"rearDelay": 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
。
在 MeoAssistant.vcxporj
中已对其进行配置,开箱即用。提示效果较为晦涩,且有部分信息缺失。
在 .vscode/settings.json
中已对其进行配置,用 vscode 打开该项目文件夹即可使用。提示效果较好。