Skip to content

任务配置说明

葉修齊 edited this page Jan 4, 2025 · 6 revisions

若需快速查阅常用的示例,请跳转到任务配置示例
说明:下方表格中必填为否的意思是这个键值对可以不用出现在json中,而不是说可以写成诸如 "key": null"key": ""的形式。

一、任务配置格式

一个任务配置为json字典对象,主要格式如下:

配置名称 是否必填 值类型 可填入值 说明 默认值
name 字符串 任意字符串 这份配置的名称
type 字符串 "normal"或"interrupt" 配置类型,执行一般任务序列用normal,执行中断任务序列用interrupt,其作用详见任务类型说明 "normal"
tasks 数组 详见任务序列格式说明 任务序列,将依次执行数组内给定的任务,数组内任务的类型必须与本配置的type一致

二、任务序列格式

一个任务序列是一个数组,数组内的每一个元素都是一个json字典对象,即形如 [{...}, {...}, {...},...]的格式。
数组内的每个元素代表了一个任务,任务格式如下:

配置名称 是否必填 值类型 可填入值 说明 默认值
type 字符串 详见任务类型说明 任务类型
id 字符串 任意字符串 自定义的任务名称,比如“启动”,“刷1-7”等
enable 布尔值 true或false 是否启用该任务 true
screenshot 字符串 "before"或"after" 若填写该配置,将在任务运行结束后的消息通知中附带任务运行前(或运行后)截图,若不需要,请不要加入该配置
block 字符串 "executed"或"enable" 只对Fight任务生效,若填写该配置,将对后面剩余的Fight任务进行阻塞,可实现两种阻塞效果:1、执行才阻塞:当值为"executed"时,若当前Fight任务结束后实际执行作战次数大于0了,就不会继续执行后面的其他Fight任务;2、启用就阻塞:当值为"enable"时,若当前Fight任务启用了(只要本任务的enable配置项为true即可,不管实际理智、condition够不够执行),就不会继续执行后面的其他Fight任务。该配置项实际上可以通过condition等价实现,但是为了方便就加了进来。若不需要阻塞,而是正常依次顺序执行战斗任务,请不要加入该配置
params 字典对象 详见任务运行参数说明 maa任务运行的参数
condition 字典对象 详见任务启用条件说明 任务运行的条件。若填写该配置,将任务运行前检查所提供的字典对象表达的条件,若不通过,则不启用任务。若不需要检查条件,请不要加入该配置

您还可以填入其他你可能需要的键值对,以便在接收消息时实现echo或其他作用,但是MAA-LRC只会解析上述内容。

三、任务类型

  1. 在MAA-LRC的实现中,任务类型参数(type)有两个大的种类,一般任务中断任务
  2. 一般任务主要是运行耗时较长的MAA官方任务。中断任务主要是临时进行的一些操作。
  3. 两种任务是放在各自的运行队列线程中进行处理的,可以同时进行,比如运行Fight刷理智这一一般任务的过程中可以同时调用运行Screenshot这一中断任务对安卓设备端进行截图。
  4. 中断任务并不意味着会强制打断任务的运行。比如Screenshot任务不会干扰一般任务的运行,Stop任务是调用maa的stop()方法并设置标志位,等待一些结束事务处理完毕,而非强制kill。

3.1 【一般任务】

只允许在type"normal" 的任务配置中使用,任务自身的type参数允许填写的字符串包括如下加粗的英文。

3.1.1 [ 官方任务 ]

  • StartUp 开始唤醒
  • CloseDown 关闭游戏
  • Fight 刷理智
  • Recruit 公开招募
  • Infrast 基建换班
  • Mall 领取信用及商店购物
  • Award 领取日常奖励
  • Custom 自定义任务

以下官方任务理论上也能用,但是我尚未测试过

  • Roguelike 无限刷肉鸽
  • Copilot 自动抄作业
  • SSSCopilot 自动抄保全作业
  • Depot 仓库识别
  • OperBox 干员 box 识别
  • ReclamationAlgorithm 生息演算
  • SingleStep 单步任务
  • VideoRecognition 视频识别

3.1.2 [ 本项目中新增的任务 ]

  • Update 更新MAA版本,目前还没测试完善。这个任务一般不用加在日常配置里面,因为每次激活MAA都会自动检查并更新版本。

3.2 【中断任务】

只允许在type"interrupt" 的任务配置中使用,任务自身的type参数允许填写的字符串包括如下加粗的英文。

  • Screenshot 立即获取截图
  • Stop_config 立即停止或删除一个normal类型的任务配置
  • Stop 立即停止并删除所有normal类型的任务配置

四、任务运行参数

  • 任务运行参数(params)是一个字典对象,形如 {...}
  • 任务运行参数将传给MAA内核,以控制任务运行时功能的配置。

4.1 官方任务

官方任务请参照官方文档的要求 来填写,比如 StartUp 的任务参数为:

// 对应的任务参数
{
    "enable": bool,              // 是否启用本任务,可选,默认为 true
    "client_type": string,       // 客户端版本,可选,默认为空
                                 // 选项:"Official" | "Bilibili" | "txwy" | "YoStarEN" | "YoStarJP" | "YoStarKR"
    "start_game_enabled": bool,  // 是否自动启动客户端,可选,默认不启动
    "account_name": string       // 切换账号,可选,默认不切换
                                 // 仅支持切换至已登录的账号,使用登录名进行查找,保证输入内容在所有已登录账号唯一即可
                                 // 官服:123****4567,可输入 123****4567、4567、123、3****4567
                                 // B服:张三,可输入 张三、张、三
}

为了实现部分界面的截图,MAA-LRC新增了一些任务动作(自适应性可能差,请尽可能紧跟在对应的官方任务后面运行),可以填入Custom 任务的运行参数中以调用,包括:

  • 进入进驻总览
  • 进驻总览上拉
  • 点开基建简报
  • 简报开合
  • 进入日常任务
  • 进入周常任务

其参数填写示例如:

 {
    "task_names": [
                     "点开基建简报"
                  ]
 }

4.2 MAA-LRC新增的任务类型

对于本项目中新增的任务类型,一般都不需要有任务运行参数,目前仅有 Stop_config 任务在需要删除指定的等待运行的配置时可以填写参数:

//若想要停止当前运行中的配置,则不需要有任务运行参数(`params`)
{"name": "需要删除的配置名称"}

五、任务启用条件

  • 任务启用条件(condition)是一个字典对象,形如 {...}
  • 任务启用条件字典内的每个键值对将对应一个大条件;
  • 任务启用条件字典内的每个大条件之间是 and(逻辑与)的关系,也就是说只有所有条件满足才执行该任务;
  • 任务启用条件字典内的每个大条件参数可取如下值之一:weekdayhournotandor,条件的编写要求见下方 1.2.3.4.5.
  1. weekday条件的值只能为一个数组,数组内填入星期序号,1到7对应星期一到星期日。只要今天对应的星期序号在数组内,该条件就成立,如下方的条件实现只有当周一或周日才执行任务:
{
	"weekday": [
		1,
		7
	]
}
  1. hour条件的值只能为一个字典,字典内允许最多存放两种键值对:时间范围关键词><,以及对应的小时时段值(整数类型0到23),当时间大于且小于各自对应的时段时,条件成立,如下方的两种条件分别实现只在12点前允许执行该任务和只在15点到20点之间允许执行该任务;
{
	"hour": {
		"<": 12
	}
}

{
	"hour": {
		">": 15,
		"<": 20
	}
}
  1. not条件的值只能为一个子条件字典,字典内只能有一个键值对,子条件的关键字只能为:executedenablenotandor;MAA-LRC会进一步这些子条件是否成立,检查方法与3.4.5.6.7.中描述的一致。写法如下方所示;
{
	"not": {
		"executed":"刷1-7"
	}
}
  1. and条件的值只能为一个数组,数组存放着待判断的多个子条件,每个子条件是个仅存放着一个键值对的字典,字典内关键字的取值只能为 executedenablenotandor。maa-lrc将逐个检查子条件(检查方法与3.4.5.6.7.中描述的一致),只有当所有子条件都满足时,条件成立。写法如下方所示;
{
	"and": [
		{
			"executed": "刷1-7"
		},
		{
			"not": {"executed": "前面的作战任务A"}
		}
	]
}
  1. or条件的值只能为一个数组,数组存放着待判断的子条件,每个子条件是个仅存放着一个键值对的字典,字典内关键字的取值只能为 executedenablenotandor。maa-lrc将逐个检查子条件(检查方法与3.4.5.6.7.中描述的一致),只要有一个子条件都满足,条件就成立。写法如下方所示;
{
	"or": [
		{
			"id": "刷1-7"
		},
		{
			"not": {"executed": "前面的作战任务A"}
		}
	]
}
  1. 当子条件为executed时,值填写为任务id,MAA-LRC会检查id对应的Fight任务是否成功执行了,只有当该任务实际执行作战次数大于0,(也就是既没有被跳过也没有因为理智不够而执行不了)时,条件成立。写法如下方所示;
{"executed": "前面的作战任务A"}
  1. 当子条件为enable时,值填写为任务id,MAA-LRC会检查id对应的Fight任务是否启用了,只要对应任务的enable配置项为true(或者没有填写这个配置项,默认启用),条件就成立。与对应任务实际有没有因为条件检查不通过而被跳过无关,与对应任务有没有因为理智不够而执行不了无关。写法如下方所示;
{"enable": "前面的作战任务A"}

通过上述的递归检查方法,任务执行条件允许嵌套判断语句实现更全面的控制,比如 “在周一20点前,如果“刷剿灭作战”任务没被实际执行,且“刷活动关”没启用时才执行当前任务” 这个需求,就可以使用:

{
	"weekday": [1],
	"hour": {"<": 20},
	"and": [
		{"not": {"executed": "刷剿灭作战"}
		},
		{"not": {"enable": "刷活动关"}}
	]
}

未来将允许逻辑判断语句内嵌套 weekdayhour,也将允许判断除了Fight任务外的其他任务是否执行,先画个饼。

六、任务配置示例

6.1 一般任务配置

下方配置实际执行效果如下:
关闭游戏重启 ->
启动并选择手机号中包含数字123的账号登录 ->
如果今天周一的话就执行剿灭,如果剿灭顺利执行了就不会执行后续的战斗任务 ->
如果剿灭因为理智不够或者已经完成1800/1800合成玉了,就会刷名为RS-5的活动关卡,并且打开了“启用时阻塞”,使得后面那个刷1-7任务不会执行。 ->
发起三个公招,会检查并勾选能锁定4,5,6星的标签组合,会自动发起能锁定3,4,5星的公招,6星的不会招掉,会留着等你处理。 ->
基建换班和线索处理;无人机拿去加速贸易站的龙门币;干员心情高于30%的时候不会换班(虽然也不知道到底有没有生效);源石碎片自动补货;如果干员已经进驻其他设施的话即使心情不够也不会放到宿舍,防止把训练室的加速干员下了,但是这样会让加工站心情没满的干员一直傻站着不会自动拉到宿舍去;宿舍空位会自动蹭信赖;如果可以继续专精的话会自动继续专精直到专三。 ->
逛别人家收信用,买东西 ->
领取日常周常奖励,领取邮件,领取抽签活动的合成玉,用掉每日免费单抽 ->
关闭游戏退出

{
	"name": "示例配置",
	"tasks": [
		{
			"type": "CloseDown",
			"id": "关闭游戏重启"
		},
		{
			"type": "StartUp",
			"id": "明日方舟启动",
			"screenshot": "after",
			"params": {
				"client_type": "Official",
				"start_game_enabled": true,
				"account_name": "123"
			}
		},
		{
			"type": "Fight",
			"id": "每周剿灭",
			"screenshot": "after",
			"enable": true,
			"block": "executed",
			"params": {
				"expiring_medicine": 1000,
				"stage": "Annihilation",
				"times": 5
			},
			"condition": {
				"weekday": [
					1
				]
			}
		},
		{
			"type": "Fight",
			"enable": true,
			"id": "活动关卡",
			"block": "enable",
			"screenshot": "after",
			"params": {
				"expiring_medicine": 1000,
				"stage": "RS-5"
			},
		},
		{
			"type": "Fight",
			"id": "1-7",
			"screenshot": "after",
			"params": {
				"expiring_medicine": 1000,
				"stage": "1-7"
			}
		},
		{
			"type": "Recruit",
			"id": "公招任务",
			"params": {
				"refresh": true,
				"select": [
					6,
					5,
					4
				],
				"confirm": [
					5,
					4,
					3
				],
				"times": 3
			}
		},
		{
			"type": "Custom",
			"id": "公招",
			"说明": "重新进入公招界面截个图,因为公招券不够的时候上一步会停留在公招选项标签详情的窗口出",
			"screenshot": "after",
			"params": {
				"task_names": [
					"RecruitBegin"
				]
			}
		},
		{
			"type": "Infrast",
			"id": "基建",
			"screenshot": "after",
			"params": {
				"facility": [
					"Mfg",
					"Trade",
					"Power",
					"Control",
					"Reception",
					"Office",
					"Training",
					"Dorm"
				],
				"drones": "Money",
				"threshold": 0.3,
				"replenish": true,
				"dorm_notstationed_enabled": true,
				"dorm_trust_enabled": true,
				"continue_training": true
			}
		},
		{
			"type": "Custom",
			"id": "进驻总览1F",
			"screenshot": "after",
			"说明": "截几张图",
			"params": {
				"task_names": [
					"进入进驻总览"
				]
			}
		},
		{
			"type": "Custom",
			"id": "进驻总览B1",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进驻总览上拉"
				]
			}
		},
		{
			"type": "Custom",
			"id": "进驻总览B2",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进驻总览上拉"
				]
			}
		},
		{
			"type": "Custom",
			"id": "进驻总览B3",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进驻总览上拉"
				]
			}
		},
		{
			"type": "Custom",
			"id": "进驻总览B4",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进驻总览上拉"
				]
			}
		},
		{
			"type": "Custom",
			"id": "基建简报",
			"screenshot": "after",
			"params": {
				"task_names": [
					"点开基建简报"
				]
			}
		},
		{
			"type": "Custom",
			"id": "基建合上",
			"params": {
				"task_names": [
					"简报开合"
				]
			}
		},
		{
			"type": "Mall",
			"id": "信用",
			"screenshot": "after",
			"params": {
				"shopping": true,
				"buy_first": [
					"招聘许可",
					"固源岩",
					"装置",
					"龙门币",
					"家具零件"
				],
				"blacklist": [
					"加急许可"
				]
			}
		},
		{
			"type": "Custom",
			"id": "信用商店",
			"screenshot": "after",
			"说明": "重新进入信用商店截个图",
			"params": {
				"task_names": [
					"MallBegin"
				]
			}
		},
		{
			"type": "Award",
			"params": {
				"award": true,
				"mail": true,
				"recruit": true,
				"orundum": true
			}
		},
		{
			"type": "Custom",
			"id": "日常任务",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进入日常任务"
				]
			}
		},
		{
			"type": "Custom",
			"id": "周常任务",
			"screenshot": "after",
			"params": {
				"task_names": [
					"进入周常任务"
				]
			}
		},
		{
			"type": "Custom",
			"id": "任务完成后主界面",
			"说明":"当任务id为【任务完成后主界面】,且执行任务时间在中午12点整以后,凌晨4点整以前时,会自动检查提醒是否存在签到活动/合成玉抽签/每日免费单抽没完成以及基建冒红色异常的情况",
			"screenshot": "after",
			"params": {
				"task_names": [
					"ReturnButton"
				]
			}
		},
		{
			"type": "CloseDown"
		}
	]
}

6.2 中断任务配置

{
	"name": "立即截图配置",
	"type": "interrupt",
	"tasks": [
		{
			"type": "Screenshot",
			"id": "立即截图"
		}
	]
}
{
	"name": "立即终止配置",
	"type": "interrupt",
	"tasks": [
		{
			"type": "Stop",
			"id": "终止所有配置"
		}
	]
}
{
	"name": "终止指定配置",
	"type": "interrupt",
	"tasks": [
		{
			"type": "Stop_config",
			"id": "终止指定配置-日常配置",
			"params": {
				"name": "日常配置"
			}
		}
	]
}