跳至主要內容

肉鸽辅助协议

大约 18 分钟

肉鸽辅助协议

提示

请注意 JSON 文件是不支持注释的,文本中的注释仅用于演示,请勿直接复制使用

肉鸽资源存放位置

  • resource/roguelike/下按照主题存放各个肉鸽的作业资源
    • 主题文件夹:Phantom/ 为傀影肉鸽资源,Mizuki/ 为水月肉鸽资源,Sami/ 为萨米肉鸽资源
      • autopilot/内是各个关卡的作战 json
        • 关卡名.json 关卡的作战逻辑
      • encounter.json 不期而遇类事件逻辑(刷等级模式)
      • encounter_for_deposit.json 不期而遇类事件逻辑(刷源石锭模式)
      • recruitment.json 干员招募逻辑
      • shopping.json 商店购买藏品逻辑

特别地,在Sami/下的foldartal.json表示萨米肉鸽密文板的使用逻辑

肉鸽第一步——干员招募

resource/roguelike/主题名/recruitment.json 描述了干员招募的逻辑

{
    "theme": "Phantom",              //肉鸽主题(这里是傀影)
    "priority": [                    //群组的优先度,有序
             ...
        ],
    "team_complete_condition": [     //阵容完备度检测
             ...
        ]
}

干员分类

按照你的游戏理解将干员分成不同的 groups (群组,相关概念参考 战斗流程协议

注意

  1. 同一 group 内的干员和召唤物必须部署方式一致(即同为近战或者同为高台)

  2. 允许同一干员或者召唤物根据用法不同,被分类至不同的 group

  3. 请不要修改已经存在的 group 名称,以免在 MAA 更新时导致之前版本的作业无法使用

  4. 请尽量不要新增 group,尽量将新添加进作业的单位按照用法纳入已经存在的 group

提示

默认仅招募精 1 55 级以上等级干员

{
    "theme": "Phantom",
    "priority": [                     // 群组,有序
        {
            "name": "棘刺",           // 群组名(这个群组名是棘刺)
            "opers": [                // 群组包含的干员,有序,代表部署这一组干员时的部署优先度,
                                      // (比如需要部署该组干员时,先检测有没有棘刺,有棘刺就部署棘刺,没有棘刺再检测有没有号角)
                {
                    "name": "棘刺",   // 干员名
                    ...
                },
                {
                    "name": "号角",
                    ...
                }
            ]
        },
       "team_complete_condition": [
             ...
        ]
    ]
}
  1. 已有群组介绍

    以傀影肉鸽的作业为例:主要将干员分为了

    分组主要考量主要包括职业举例干员
    地面阻挡站场和清杂重装、近卫奶盾、基石、羽毛笔、山、M3、令和稀音的召唤物、斑点、重装预备干员
    地面单切单独对战精英怪处决者特种史尔特尔、异德、麒麟 R 夜刀、M3、红
    高台 C常态和决战输出狙击、术士假日威龙陈、澄闪、艾雅法拉、肥鸭
    高台输出对空和常态输出狙击、术士空弦、能天使、克洛丝、史都华德
    治疗能力治疗、辅助凯尔希、浊心斯卡蒂、芙蓉、安赛尔
    回费回复 cost先锋桃金娘、伊内丝、芬、香草
    炮灰吸收炮弹、再部署特种、召唤物M3、红、桃金娘、预备干员
    高台预备有一定输出能力梓兰、预备干员
  2. 需要特殊操作的群组

    除了上面那些比较笼统的分组,我们有时候需要对一些干员或者干员种类进行一些定制的精细化操作,比如

    分组包括干员主要特点
    棘刺棘刺、号角地面远程输出,有些图有非常适配的位置
    召唤类凯尔希、令、稀音自带地面阻挡,有的图需要优先部署,召唤物可以当阻挡也可以当炮灰
    情报官晓歌、伊内丝既可以回费、又可以侧面输出、还可以单切
    浊心斯卡蒂浊心斯卡蒂低压时奶量尚可,但是范围特殊,一些图有比较适配的位置
    焰苇焰影苇草萨米肉鸽常用开局干员,兼具治疗和输出,一些图有比较适配的位置
    银灰银灰、玛恩纳地面大范围决战输出,可以针对 boss 进行部署
    史尔特尔史尔特尔由于精二后固定携带 3 技能,这时站场能力几乎为零,需要阻挡位的部署优先度极低
    骰子骰子水月肉鸽中的骰子需要单独操作

注意

目前固定将未识别到的地面干员归入倒数第二个编组后面(其他地面),未识别到的高台干员归入倒数第一个编组后面(其他高台)

预设阵容——阵容完备检测

在你预计能够通关或者打到高层的队伍中,哪些干员属于基本核心阵容?是比不可少的?又需要几个?

注意

目前脚本的招募逻辑是在阵容未满足阵容完备度之前,只招募 0 希望和核心干员,存希望给高星核心干员
所以不要将完备度数字设置太高,建议所有需要的干员数量(基本核心阵容)加起来在 4-8 位

{
    "theme": "Phantom",              //肉鸽主题
    "priority": [                    //群组
             ...
        ],
    "team_complete_condition": [     //阵容完备度检测
             {
            "groups": [              //需要哪些群组中的干员
                "高台C"
            ],
            "threshold": 1           //这些干员需要多少数量
        },                           //(这里表示需要高台C组的干员1名)
        {
            "groups": [
                "棘刺",              //(这里表示棘刺、地面阻挡、地面单切、炮灰分组的干员最少需要2个)
                "地面阻挡",
                "地面单切",
                "炮灰"
            ],
            "threshold": 2
        },
        ...
        ]
}

调整干员招募参数

  1. 群组内的顺序代表部署检测的优先度

  2. 群组内干员各个字段的意思和脚本相关的逻辑

{
    "theme": "Phantom",
    "priority": [
        "name": "地面阻挡",                                // 群组名(这里是地面阻挡组)
        "doc": "标准线为1档(清杂能力或者站场能力比山强)>山>2档(阻挡>2,可自回)>斑点,站场能力小于斑点放到单切或者炮灰组",
                                                          // 带“doc”字段均为json内备注文档,对程序运行没有影响
        "opers": [                                        // 该包括哪些干员,有序,代表部署优先度
            {
                "name": "百炼嘉维尔",                      // 干员名称(这里是百嘉,在组内第1位,表示需要部署地面阻挡组的时候,首先检测是不是百嘉)
                "skill": 3,                               // 使用几技能(这里举例使用3技能)
                "skill_usage": 2,                         // 技能使用模式,参考3-3战斗流程协议,不填或者1为自动放,2为只放x次(x通过"skill_times"字段设置),3暂时不支持
                "skill_times": 2,                         // 技能使用次数,默认为1,在"skill_usage"字段为2时生效
                "alternate_skill": 2,                     // 当没有指定技能时使用的备选技能,一般是6星干员未精二且精二后使用3技能时才需要指定(这里指没有3技能时使用2技能)
                "alternate_skill_usage": 1                // 备选技能的技能使用模式(该字段尚未实现)
                "alternate_skill_times": 1                // 备选技能的技能使用次数(该字段尚未实现)
                "recruit_priority": 900,                  // 招募优先级,数字越大优先级越高,900以上属于看到必招,400以下招募优先级比一些关键干员精二优先度还低
                                                            // 临时招募的干员优先度自动+800
                "promote_priority": 600,                  // 进阶优先级,数字越大优先级越高,900以上属于有希望就精二,400以下招募优先级低于招募普通三星干员
                                                            // 小技巧:当你将招募优先度压低或者不写,拉高一些精二优先度,实际上就是在拉高临时招募到这些干员的精二优先度
                "is_key": true,                           // true为key(关键)干员,false或省略为非key干员。在阵容完备检测未通过时,仅招募key干员与0希望干员,保存希望。
                "is_start": true,                         // true为开局选择干员,false或省略为非开局干员。在队伍中没有start干员时,仅招募start干员与0希望干员,用户填写的干员会强制未start干员
                "auto_retreat": 0,                        // 部署几秒后自动撤退,整数,大于 0 时生效,主要用于特种干员和投锋,由于肉鸽一般是2倍速,推荐设置为技能持续时间/2
                "promote_priority_when_team_full": 850,
                "recruit_priority_offsets": [             // 按当前阵容调控招募优先级
                    {
                        "groups": [                       // 需要哪些组满足条件
                            "凯尔希",
                            "地面阻挡",
                            "棘刺"
                        ],
                        "is_less": false,                 // 条件是大于还是小于, false或者省略是大于, true是小于
                        "threshold": 2,                   // 满足条件的数量
                        "offset": -300                    // 满足后对招募优先级的调整
                                                    // (这里表示当 凯尔希, 地面阻挡, 棘刺 这三个群组中有2名以上干员时, 百炼嘉维尔的招募优先级减300)
                    }
                ]
            },
            ...
        ],
    ],
    "team_complete_condition": [
        ...
    ]
}
  1. 按照你的理解新增群组和干员

    新增群组后,你可以从已有的群组中复制干员过来,参考大佬们已有的评分,在此基础上修改

肉鸽第二步——战斗逻辑

resource/roguelike/主题名/autopilot/关卡名.json 描述了每个关卡的作战策略

MAA 肉鸽基本战斗逻辑——牛牛高血压之源

  1. 根据地图上格子类型进行基本的战斗操作

    • MAA 会根据地图上的格子是蓝门还是红门,是高台还是地面,能不能被部署来进行基本的战斗操作

    • MAA 仅根据地图名称或者编号决定使用哪份作业,不会判断地图的普通紧急路网密文板使用等情况

    • MAA 不会判断作战中地图上无法确定的格子的情况,比如驯兽小屋的祭坛位置,从众效应是从左边还是从右边出怪

    所以在后面,你需要尽量设计一套能够应付一个地图名所有不同情况(上面提到的几种情况)的战斗逻辑,小心被大家挂到 issue 上说这张图操作高血压哦(笑)

  2. MAA 的基本作战策略--堵蓝门

    1. 地面干员会优先部署在蓝门的格子上(为什么是格子上,请往下看)或者周围,方向朝向红门(自动计算),

    2. 优先部署地面,然后部署治疗干员和高台干员,一圈一圈的由蓝门向四周部署,

    3. 会不停的按照上面的逻辑部署可以部署的东西(干员、召唤物、支援物品等等)

优化基本战斗策略

  1. 蓝门替代方案

    仅仅把干员堆在蓝门门口显然不太聪明,有些关卡有格子是一夫当关万夫莫开,防守在这里显然效率很高,

    或者有些关卡有多个蓝门,MAA 不知道哪个蓝门对应哪个红门,也会胡乱部署,

    这个时候你需要打开 地图 Wikiopen in new window 一边对着地图一边在脑海里指挥作战了

    首先在设置里将坐标展示切换为MAA

    然后根据你的经验寻找需要优先防守的点的坐标和朝向,写入到 json 的"replacement_home"里面

    {
    "stage_name": "蓄水池",        // 关卡名
    "replacement_home": [         // 重要防守点(蓝门替代点),至少需要填写1个
        {
            "location": [         // 格子坐标,从地图wiki获得
                6,
                4
            ],
            "direction_Doc1": "优先朝向,但并不代表绝对是这个方向(算法自行判断)",
            "direction_Doc2": "不填默认 none,即没有推荐方向,完全由算法自行判断",
            "direction_Doc3": "none / left / right / up / down / 无 / 上 / 下 / 左 / 右",
            "direction": "left"   // (这里表示将干员优先部署到坐标6,4的格子朝左)
        }
    ],
    
  2. 部署格子黑名单

    有优先防守的点就有优先不部署干员的点,比如大火球经过的位置,boss 脚底下,一些不好输出的位置,

    这个时候我们引入了"blacklist_location"将不想让他部署干员的格子加到黑名单里

    注意

    这里加入的格子,就算在后面的部署策略里面写进去的话,也是没法部署的

        ...
        "blacklist_location_Doc": "这里是用法举例,不是说蓄水池这个图需要 ban 这两个点",
        "blacklist_location": [  // 禁止程序进行部署的位置
            [
                0,
                0
            ],
            [
                1,
                1
            ]
        ],
    
  3. 其他地图策略

    比如水月肉鸽中如果蓝门进怪了是不是要用骰子,缓解堆怪压力

        "not_use_dice_Doc": "蓝门干员撤退时是否需要用骰子,不写默认false",
        "not_use_dice": false,
    

还是高血压?是时候展现你真正的技术了——定制作战策略!

使用"deploy_plan""retreat_plan"实现定制化操作

定制化策略优先与基本战斗策略,当定制化策略中的所有步骤都尝试执行完毕后,省下的干员或者倒下再部署的干员会按照基本战斗策略不断部署

有时候不需要设置太多的定制策略,完成关键步骤后再交给 MAA,二者结合可能效果更好

  1. 使用各个群组部署干员

    "deploy_plan": [ // 部署逻辑,按从上到下、从左到右的顺序进行检索,并尝试部署找到的第一个干员,如果没有就跳过
        {
            "groups": [ "百嘉", "基石", "地面C", "号角", "挡人先锋" ],//这一步从这些群组中寻找干员
            "location": [ 6, 4 ],             //遍历百嘉群组、基石群组、地面C群组等等群组
            "direction": "left"               //将找到的第一个干员部署到6,4这个坐标上并朝向左边
        },                                    //没找到就进行下一个部署操作
        {
            "groups": [ "召唤" ],
            "location": [ 6, 3 ],
            "direction": "left"
        },
        {
            "groups": [ "单奶", "群奶" ],
            "location": [ 6, 2 ],
            "direction": "down"
        }
    ]
    

    注意

    MAA 会将所有部署指令扁平化后,执行最优先级部署操作
    例:在[6,4]部署[ "百嘉", "基石", "地面 C"],在[6,3]部署[ "基石", "地面 C"],那么 MAA 会将部署指令扁平化成附带坐标的[ "百嘉", "基石", "地面 C","基石", "地面 C"]
    如果在战斗中[6,4]位置的"百嘉"组干员倒下,手里有有可部署的“基石”组干员,会优先布置到[6,4]而不是[6,3]

  2. 在某个时间点部署干员

    提示

    适用于某些单切干员或者需要炮灰的使用场景

    "deploy_plan": [
            {
                "groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
                "location": [ 5, 3 ],
                "direction": "left",
                "condition": [ 0, 3 ]       // 该操作仅在击杀数为0-3时进行
            },
            {
                "groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
                "location": [ 5, 3 ],
                "direction": "left",
                "condition": [ 6, 10 ]
            },
            ...
        ]
    
  3. 在某个时间点撤退干员

    提示

    有时候炮灰过强站住场或者需要部署位腾挪阵容怎么办,撤退!

     "retreat_plan": [  // 在特定时间点撤退目标
            {
                "location": [ 4, 1 ],
                "condition": [ 7, 8 ] // 在击杀数为7-8时,撤去位置[4,1]的干员,没有就跳过
            }
        ]
    
  4. 在某个时间点释放技能(to do)

  5. 一些其他的字段(不推荐使用)

        "role_order_Doc": "干员类型部署顺序,未写出部分以近卫,先锋,医疗,重装,狙击,术士,辅助,特种,召唤物的顺序补全,输入英文",
        "role_order": [ // 不推荐使用,请配置deploy_plan字段
            "warrior",
            "pioneer",
            "medic",
            "tank",
            "sniper",
            "caster",
            "support",
            "special",
            "drone"
        ],
        "force_air_defense_when_deploy_blocking_num_Doc": "场上有10000个阻挡单位时就开始强制部署总共1个对空单位(填不填写均不影响正常部署逻辑),在此期间不禁止部署医疗单位(不写默认false)",
        "force_air_defense_when_deploy_blocking_num": { // 不推荐使用,请配置deploy_plan字段
            "melee_num": 10000,
            "air_defense_num": 1,
            "ban_medic": false
        },
        "force_deploy_direction_Doc": "这些点对某些职业强制部署方向",
        "force_deploy_direction": [ // 不推荐使用,请配置deploy_plan字段
            {
                "location": [
                    1,
                    1
                ],
                "role_Doc": "填入的职业适用强制方向",
                "role": [
                    "warrior",
                    "pioneer"
                ],
                "direction": "up"
            },
            {
                "location": [
                    3,
                    1
                ],
                "role": [
                    "sniper"
                ],
                "direction": "left"
            }
        ],
    

对某个干员打法有特殊理解?——精细化操作特定干员

请将这位干员单独分组

编写作业时请考虑这位干员与现有作业的顺序优先度

你也可以不考虑那么多,单独为这个干员写一份作战逻辑

仅使用一位干员也是可行的!使用 MAA 来凹单人通关吧(由于其他逻辑的不完善,可能性很低)

参考例子:1.傀影肉鸽的棘刺 2.水月肉鸽的异德 3.萨米肉鸽的焰苇

肉鸽第三步——不期而遇类节点逻辑

resource/roguelike/主题名/encounter.json 描述了刷等级模式下不期而遇事件选择的策略

resource/roguelike/主题名/encounter_for_deposit.json 描述了刷源石锭模式下不期而遇事件选择的策略

MAA 现有对不期而遇的判断方法

OCR 识别不期而遇事件,但是选项是操作固定的位置

没有识别到时间的话会点最下面的选项

一般只需要微调或者不调整(大佬都写好了嘛)

优化不期而遇选项的优先度

请结合 prts.wikiopen in new window 查看各个事件的选项效果,注意选项不一定固定

可以自己修改不期而遇事件选项以指引 MAA 走向某些图的特殊结局

{
    "theme": "Sami",                              //肉鸽主题
    "stage": [                                    //不期而遇类事件
        {
            "name": "低地市集",                    //不期而遇事件名称
            "option_num": 3,                      //总共有几个选项(这里是3)
            "choose": 3,                          //优先选择第几个选项(这里优先选第三个),如果选不到就选跑路选项(基本上是最后一个)
            "choice_require": [                   //选择选项的要求(暂时不影响程序运行,只做适用情况的标注方便修改)
                {
                    "name": "选择碎草药",          //选项的名字
                    "ChaosLevel": {               //抗干扰/灯火等级
                        "value": "3",             //要求的数字
                        "type": ">"               //是大于还是小于(这里表示抗干扰/灯火大于3时才激活选择碎草药选项)
                    }
                },
                {
                    "name": "选择好看的织物",
                    "ChaosLevel": {
                        "value": "3",
                        "type": ">"
                    }
                },
                ...

根据队伍情况动态调整某些选项的优先度(TODO)

肉鸽第四步——商店藏品的优先度

resource/roguelike/主题名/shopping.json 描述了商店购买藏品(和战斗后选择藏品?)的策略

{
    "theme": "Phantom",                                       //肉鸽主题名(这里是傀影)
    "priority": [                                             //优先度,有序,顺序即为优先级,越在前面越优先购买,
                                                              //但优先级判断在chars,roles的筛选之前, 可能出现高优先级商品被筛掉, 什么都不买的情况
        {
            "name": "金酒之杯",                                //藏品名字(这里金杯)
            "no_longer_buy": true,                             //true表示获得该藏品后不在花钱买藏品,false或者省略表示继续花钱买藏品
            "ignore_no_longer_buy": true,                      //true表示商店有该藏品时忽略"no_longer_buy",就是还会买它,false或者省略表示拿到有"no_longer_buy"的藏品后不会购买这个藏品
            "effect": "每有5源石锭,所有我方单位的攻击速度+7",    //藏品效果(不影响程序运行,备注效果方便排序)
            "no": 167                                          //藏品编号,wiki可查(不影响程序运行,备注方便排序)
        },

        ...
        {
            "name": "扩散之手",
            "chars": [                                         //队伍中有这些干员的时候买这件藏品
                "异客"                                         //(这里表示队伍中有异客时,遇到扩散之手,就会尝试购买)
            ],
            "effect": "【扩散术师】、【链术师】和【轰击术师】每对一个单位造成伤害就回复2点技力值",
            "no": 136
        },
        ...

        {
            "name": "折戟-破釜沉舟",
            "roles": [                                         //队伍中有这些职业的时候买这件藏品
                "WARRIOR"                                      //(这里表示队伍中有近卫干员时,遇到折戟-破釜沉舟,就会尝试购买)
            ],
            "effect": "所有【近卫】干员的防御力-40%,但攻击力+40%,攻击速度+30",
            "no": 16
        },
        ...

        {
            "name": "Miss.Christine摸摸券",
            "promotion": 2,                                   //队伍中有2个干员要晋升的时候购买(吧?)
            "effect": "立即进阶两个干员(不消耗希望)",
            "no": 15
        },

单独肉鸽定制逻辑

萨米肉鸽——密文板

resource/roguelike/Sami/foldartal.json 描述了萨米肉鸽密文板的策略

{
    "theme": "Sami",                                         //肉鸽主题名(这里是萨米)
    "groups": [                                              //对使用情况和用法的分组
        {
            "usage": "SkipBattle",                           //用法(这里是跳过战斗,用于刷钱和烧水模式的作战节点,使用板子跳过战斗以节省时间)
            "doc": "跳过战斗,刷钱和烧开水模式",
            "pairs": [                                       //板子对(遇到对应的节点时,会判断有没有符合下面设定的板子对,如果有,就使用能用的全用,如果没有就直接进点)
                {                                            //(这里伤痕只能和空无联结)
                    "up": [                                  //上板子
                        "伤痕"
                    ],
                    "down": [                                //下板子
                        "空无"
                    ]
                },
                {                                            //(这里会按顺序搜索 "黜人"+"惊讶","黜人"+ "疑惑","黜人"+...,"猎手"+"惊讶","猎手"+ "疑惑","猎手"+... , ...)
                    "up": [
                        "黜人",
                        "猎手",
                        ...
                    ],
                    "down": [
                        "惊讶",
                        "疑惑",
                        ...
                    ]
                }
            ]
        },
        {
            "usage": "Boss",                                 //(这里表示遇到boss点会用的板子对)
            "doc": "有的用全用了",
            ...
        }
    ],
    "foldartal": [                                          //密文板效果备注(这里仅做备注方便查看板子效果,不影响程序运行)
        {
            "name": "布局",                                  //密文板类型(上板子还是下板子)
            "foldartal": [
                {
                    "name": "黜人",                           //密文板名称
                    "effect": "选择所有右侧邻近的战斗节点"       //密文板效果
                },

希望实现的逻辑(todo)

自动编队逻辑

  1. 可以根据不同地图设置不同的地图阵容完备性检测和技能优先度

  2. 可以根据现有阵容避开一些难度高的作战

优化寻路算法(已初步实现)

比如可以实现前三层多战,后面的少战,这样发育会更好

技能保留

某格部署的干员,技能转好后等待 x 秒再开,方便对轴;可以写 Deploy_plan 下的 Skill_hold,也可以写 Skill_hold_plan

技能关闭

对弹药类干员有用