diff --git a/docs/zh-cn/protocol/copilot-schema.md b/docs/zh-cn/protocol/copilot-schema.md index 04197ed37e..e8f3be89d9 100644 --- a/docs/zh-cn/protocol/copilot-schema.md +++ b/docs/zh-cn/protocol/copilot-schema.md @@ -57,12 +57,15 @@ icon: ph:sword-bold ] } ], - "actions": [ - // 战斗中的操作。有序,执行完前一个才会去执行下一个。必选 + "actions": [ // 战斗中的操作。有序,执行完前一个才会去执行下一个。必选 + // 以下介绍一个操作通用携带的属性,包括类型、触发、延时、说明、命令补充信息等 { - "type": "部署", // 操作类型,可选,默认为 "Deploy" + "type": "打印", // 操作类型,可选,默认为 "Deploy" // "Deploy" | "Skill" | "Retreat" | "SpeedUp" | "BulletTime" | "SkillUsage" | "Output" | "SkillDaemon" | "MoveCamera" // "部署" | "技能" | "撤退" | "二倍速" | "子弹时间" | "技能用法" | "打印" | "摆完挂机" | "移动镜头" + // + // "Loop" | "Case" | "Check" | "Until" | "SavePoint" | "SyncPoint" | "CheckPoint" + // "循环" | "派发" | "确认" | "轮询" | "保存锚点" | "同步锚点" | "检查锚点" // 中英文皆可,效果相同 // 若为 "部署", 当费用不够时,会一直等待到费用够(除非 timeout) // 若为 "技能", 当技能 cd 没转好时,一直等待到技能 cd 好(除非 timeout) @@ -74,9 +77,17 @@ icon: ph:sword-bold // "打印" 界面不显示这条步骤,仅用于输出 doc 里的内容(用来做字幕之类的) // "摆完挂机" 仅使用 "好了就用" 的技能,其他什么都不做,直到战斗结束 // "移动镜头" 用于 “引航者试炼” 模式,还需要填写 distance 字段 - // 目前下面四个条件是且的关系,即 && - "kills": 0, // 击杀数条件,如果没达到就一直等待。可选,默认为 0,直接执行 - "costs": 50, // 费用条件,如果没达到就一直等待。可选,默认为 0,直接执行 + // "循环" 用于构建循环流程,可以重复执行包含的动作 + // "派发" 用于根据当前用户在抄作业时在干员组中选定的干员派发出不同的动作 + // "检查" 用于根据当前战场中的信息条件做出不同的分支选择,不阻塞 + // "直到" 用于创建一个无序的动作集合, 直到其中一个完成,或者是全部完成 + // "保存锚点" 手动创建锚点,保存当前的 击杀数,费用数,时间戳等信息快照 + // "同步锚点" 表示等待至当前信息快照减去指定锚点的信息快照之后满足指定区间 + // "检查锚点" 表示当前信息快照减去指定锚点的信息快照之后是否满足指定区间,不阻塞,根据判断结果来执行分支动作 + + // 动作的触发前提 + "kills": 0, // 可选, 击杀数条件,如果没达到就一直等待。 + "costs": 50, // 可选, 费用条件,如果没达到就一直等待。 // 费用受潜能等影响,可能并不完全正确,仅适合对时间轴要求不严格的战斗。 // 否则请使用下面的 cost_changes // 另外仅在费用是两位数的时候识别的比较准,三位数的费用可能会识别错,不推荐使用 @@ -85,14 +96,35 @@ icon: ph:sword-bold // 支持负数,即费用变少了(例如“孑”等吸费干员使得费用变少了) // 另外仅在费用是两位数的时候识别的比较准,三位数的费用可能会识别错,不推荐使用 "cooling": 2, // CD 中干员数量条件,如果没达到就一直等待。可选,默认为 -1,不识别 + "count" : 0, // 用于循环操作的计数, 0表示一次都不执行,100则表示循环执行100次。 // TODO: 其他条件 - // TODO: "condition_type": 0, // 执行条件间的关系,可选,默认为 0 - // // 0 - 且; 1 - 或 + "category" : "all", // 可选,succ|not|all|any 表示动作触发条件的组合策略,默认是all + // succ表示跳过判断触发动作直接成功 + // not 表示所有触发条件都不满足 + // all 表示所有触发条件都要满足 + // any 表示只要有一个触发条件满足 + + // 延时操作 + "pre_delay": 0, // 前置延时。可选,默认为 0, 单位毫秒,表示在前面的触发条件满足之后,指定延迟才开始执行动作 + "post_delay": 0, // 后置延时。可选,默认为 0, 单位毫秒,表示在动作执行完毕之后,指定延迟 + // "timeout": 999999999, // 保留字段,暂未实现。 + // 超时时间。当 type 为 "部署" | "技能" 时可选。默认 INT_MAX, 单位毫秒 + // 等待超时则放弃当前动作, 转而执行下一个动作 + + "point_code" :"POINT-1", // 可选,表示在执行命令之前注册锚点,锚点功能在后续举例中进行补充 + + // 说明操作 + "doc": "请开始你的表演~", // 描述,可选。会显示在界面上,没有实际作用 + "doc_color": "green" // 描述文字的颜色,可选,默认灰色。会显示在界面上,没有实际作用。 + }, + + // 干员操作类动作,一般是 "部署" | "技能" | "撤退" | "子弹时间" | "技能用法" + { "name": "棘刺", // 干员名 或 群组名, type 为 "部署" 时必选,为 "技能" | "撤退" 时可选 "location": [ 5, 5 - ], // 部署干员的位置。 + ], // 部署干员的位置,使用技能的位置。 // type 为 "部署" 时必选。 // type 为 "技能" | "撤退" 时可选, // "技能":仅推荐场地上自动的装置等,不填写 name,并使用 location 开启技能。正常部署的干员推荐使用 name 开启技能 @@ -105,17 +137,7 @@ icon: ph:sword-bold // 举例:刚下淘金娘需要她帮忙打几个怪,不能自动开技能,中后期平稳了需要她自动开技能 // 则可以在对应时刻设置为 1 "skill_times": 5, // 技能使用次数。可选,默认为 1 - "pre_delay": 0, // 前置延时。可选,默认为 0, 单位毫秒 - "post_delay": 0, // 后置延时。可选,默认为 0, 单位毫秒 - // "timeout": 999999999, // 保留字段,暂未实现。 - // 超时时间。当 type 为 "部署" | "技能" 时可选。默认 INT_MAX, 单位毫秒 - // 等待超时则放弃当前动作, 转而执行下一个动作 - "distance": [ - 4.5, - 0 - ], // type 为 "移动镜头" 时必选 - // [ x 移动格子数,y 移动格子数 ],可为小数 - // 注意 "移动镜头" 时是识别不到正在站场中的,需要用 sleep 完整覆盖整个移动动画 + "doc": "下棘刺了!", // 描述,可选。会显示在界面上,没有实际作用 "doc_color": "orange" // 描述文字的颜色,可选,默认灰色。会显示在界面上,没有实际作用。 }, @@ -139,10 +161,159 @@ icon: ph:sword-bold "doc": "你史尔特尔奶奶来啦!", "doc_color": "red" }, - // 举例 3 + + // 工具类 { - "type": "二倍速" - } + "type": "二倍速", // 切换速度,如果机器性能不好,建议加一点后置延时,让屏幕点击能流畅衔接 + "post_delay" : 200 + }, + { + "type": "打印", // 单纯用来打印,也可以用来说明一些操作场景的开始与结束 + "doc": "你史尔特尔奶奶来啦!", + "doc_color": "red" + }, + { + "type": "摆完挂机", // 如果没有摆完挂机,maa会直接结束所有操作不再控制,在需要自动开启干员技能时,都建议在最后加上"摆完挂机"操作 + }, + + // 流程类 + { + "type" : "循环", + "kills" : 10, + "costs" : 20, + "category" : "any", // 这里表示 击杀10和费用20 等待到只要其中一个发生就开始触发 + + "end" : { // 必选,循环结束的触发条件 + "kills" : 20, + "costs" : 99, + "count" : 10, + "category" : "all", // 这里表示 击杀20,费用99, 循环10次 全部满足才结束循环 + }, + + "continue" : { // 可选,循环重新执行的条件 + "costs" : 20, + "category" : "all", // 表示执行循环操作中的间隙,费用超过了20,就不继续执行后面的操作,重新开头执行 + }, + + "break" : { // 可选,循环中止的条件 + "cooling" : 2, + "category" : "all", // 表示执行循环操作中的间隙,有两个干员意外撤退了,终止循环,结束循环命令 + }, + + "loop_actions" :[] // 这里放需要循环执行的操作 + }, + { + "type" : "派发", + "select" : "法卫", // 必选,需要匹配的干员组,如果不匹配,什么也不做 + "dispatch_actions" :{ + "史尔特尔" : [ + { + "type": "打印", + "doc": "你史尔特尔奶奶来啦!", + "doc_color": "red" + }, + ], + "拉普兰德" : [ + { + "type": "打印", + "doc": "拉狗也有法术输出", + "doc_color": "grey" + } + ], + + }, + "default_action" :[ + { + "type": "打印", + "doc": "法卫中的其他杂鱼", + "doc_color": "grey" + } + ] + }, + { + "type" : "确认", + "condition" : { // 检查的相关条件,不阻塞 + "kill" : 50, + "costs" : 60, + "category" : "not" // 表示当前的状态,击杀数小于50,且 costs也低于60 + }, + "then_actions" :[ + { + "type": "打印", + "doc": "危!练度不足,先锋疲软。" + } + ], + "else_actions" :[ + { + "type": "打印", + "doc": "不足为惧!" + } + ] + }, + { + "type" : "轮询", // 轮询执行候选操作中的一个,只要满足就可以执行 + "mode" : "all", // 可选,默认为all,all表示全部执行完才退出,any表示其中一个满足就执行并退出,其余不识别的字符当作 all策略 + "limit" : 100, // 表示当前直到动作满足的过程中限制的循环次数,与 "count" 等效,limit指定的优先级更高 + "candidate_actions" :[ + { + "type": "打印", + "kills" : 2, + "doc": "一鼓作气" + }, + { + "type": "打印", + "kills" : 3, + "doc": "再而衰" + }, + { + "type": "打印", + "kills" : 1, + "doc": "三而竭" + } + ] + }, + + // 锚点操作类,锚点表示在命令执行前一刻记录下的击杀,费用,时间戳等信息,可以跨操作进行区间比较,减小多个操作连续允许造成的相对误差 + { + "type":"保存锚点", + "point_code" : "Point-1" // 必选,设定一个锚点编码。如果多个操作的编码重复,则覆盖之前保存的锚点信息 + }, + { + "type": "同步锚点", // 等待至条件满足 + "point_code" : "Point-2", // 可选,同步锚点在执行时也可以创建锚点 + "target_code" : "Point-1", // 需要进行比较的锚点,如果锚点编码不存在,结束操作 + "kill_range":[-1, 1], // 当前的击杀数-目标的击杀数 在 [-1,1]之间 + "cost_range":[0, 50], + "cooling_range":[0, 50], + "time_range":[5000, 5000], // 相比指定锚点,过去了5000ms也就是5s + "mode" : "all", // 表示条件策略, 满足条件策略之后才执行后续的操作。 succ|not|all|any + "then_actions" :[] + }, + { + "type": "检查锚点", // 如果条件满足执行then_actions,否则执行else_actions,不等待。 + "point_code" : "Point-3", // 可选,同步锚点在执行时也可以创建锚点 + "target_code" : "Point-2", // 需要进行比较的锚点,如果锚点编码不存在,结束操作 + "kill_range":[-1, 1], // 当前的击杀数-目标的击杀数 在 [-1,1]之间 + "cost_range":[0, 50], + "cooling_range":[0, 50], + "time_range":[5000, 5000], // 相比指定锚点,过去了5000ms也就是5s + "mode" : "all", // 表示条件策略, 满足条件策略之后才执行后续的操作。 succ|not|all|any + "then_actions" :[], + "else_actions" :[], + }, + + // 特殊场景类 + { + "type": "移动镜头", + "distance": [ + 4.5, + 0 + ], // type 为 "移动镜头" 时必选 + // [ x 移动格子数,y 移动格子数 ],可为小数, 也可以是负数,用来校准镜头 + // 注意 "移动镜头" 时是识别不到正在站场中的,需要用 sleep 完整覆盖整个移动动画 + }, + + ], "minimum_required": "v4.0", // 最低要求 maa 版本号,必选。保留字段,暂未实现 "doc": {