Nick-Hopps / Arkknights_autoscript

明日方舟自动化脚本,基于Autojs
GNU General Public License v3.0
32 stars 8 forks source link

当前的最佳选择:https://maa.plus/

😃 明日方舟自动化脚本

众所周知明日方舟是个休闲游戏,然而每天反复看录像(代理指挥)也很烦人,因此就用蚂蚁森林脚本的一些组件又写了这个脚本。这个脚本中提供的开发模板和函数功能可以很方便的应用到各种需要找图的脚本。

注意:方舟更新游戏界面后脚本未更新,现在只能手动进入图然后开启脚本,由于工作繁忙暂时没有更新的计划。

📕 脚本使用方法

首先安装 Autojs,我开发时使用的是版本是收费的 Autojs Pro 8,免费版的 Autojs 4.1.1 Alpha 2 经过测试同样可以运行,因此使用免费版即可。下载好后把整个项目丢到 "/sdcard/脚本/" 路径下面,然后打开软件,运行项目或者 "launch.js" 即可。

由于目前还没有提供配置的UI界面,因此需要手动去 "config_main.js" 里面修改相应的配置,每个配置项的解释可在文件内查看。

config.put("developer", false);
config.put("threshold_all", 0.9);
config.put("max_running_times", 99);
config.put("using_potion", true);
config.put("using_originite", false);
config.put("using_times", 1);
config.put("target_material", "固源岩");
config.put("target_quantity", 10);

⭕ 找图相关

当前已测试并完美支持 16:9(1920x1080) 和 20:9(2400x1080) 的设备。

对于其他的全面屏设备,大部分的像素密度ppi其实都是一样的,只是屏幕高度不同罢了,因此脚本默认使用的图片和游戏截图的分辨率是一致的,一般不需要更换。但是坐标和区域相关的数值,不同分辨率的设备无法通过按比例缩放直接得到,需要自己获取后添加到 "SCALES_MAIN.js" 文件里面,至于哪些数据需要单独获取,可见该文件中的注释部分。

一般来说,如果出现识图失败的问题,请修改找图精度(threshold_all)配置项,从大往小调整,直到识别成功为止。如果反复修改找图精确度之后还是识图失败,或者需要添加新的识别功能,就需要自己替换/添加图片。方法按步骤:

  1. 在脚本目录 "tool/images" 下面的两个子目录中可以看到脚本识别需要用到的图片。其中 "images_main" 中的图片即游戏中对应部分的截图,如果需要添加新的识别功能就直接把对应的截图保存到这个目录下;如果是替换图片则要注意和原文件名要一致。"images_material" 中的图片是脚本自动截取并保存的,在配置中设置 developertrue 即可触发该机制(详情见 "launch.js" 中的 runCount() 函数);
  2. 运行 "tool/generateImageData.js" 之后即可在 "tool/images" 目录下得到对应的 JSON 文件。用获得的 JSON 文件替换掉 "asset" 目录下的 JSON 文件,然后在 "IMAGES_MAIN.js" 或者 "IMAGES_MATERIAL.js" 中按格式修改或者添加图片;
  3. 如果只是替换部分图片,则需要手动计算并单独修改这部分图片的 scale_ratio 值;如果是替换了全部图片,则直接去 "config_main.js" 中修改 sampling_rslt 为图片采样设备的分辨率,代码会根据该分辨率自动计算 scale_ratio 值。

默认取样设备:HUAWEI P10PLUS

  • 分辨率:1920*1080
  • 屏幕尺寸:5.5 inches
  • ppi:400

⭕ 添加新的材料

脚本把所有的关卡都抽象成三个部分:

熟悉上面说到的概念之后就可以自己添加自己想要刷的材料了(活动关卡的添加方法一致),具体方法步骤:

  1. 首先获取目标材料对应的 "episode" 和 "operation" 部分的截图(top 就那几个基本不会变);
  2. 在 "OBJECTS_MATERIAL.js" 中按如下格式添加,以作战记录为例:
    作战记录: { 
    top: "supplies",             // 顶级区域
    episode: "tactical_drill",   // 章节
    operation: "operation_ls_5", // 行动
    update: false,               // 是否更新区域
    category: "others",          // 材料类别
    count: false,                // 是否统计材料数量
    plural: false                // 需要统计的单个材料数量是否多于一个
    },

🧐 脚本目录结构

 ├── /asset
 │   ├── IMAGES_EVENT.json        // 活动所需要的识图图片数据
 │   ├── IMAGES_MAIN.js           // 脚本主要功能的识图图片
 │   ├── IMAGES_MAIN.json         // 脚本主要功能的识图图片数据
 │   ├── IMAGES_MATERIAL.js       // 结算材料统计图片
 │   ├── IMAGES_MATERIAL.json     // 结算材料统计图片数据
 │   ├── OBJECTS_MATERIAL.js      // 材料对应关卡相关信息
 │   └── SCALES_MAIN.js           // 脚本中需要按宽高比缩放的数据
 ├── /lib
 │   ├── Automator.js             // 自动化工厂方法
 │   ├── CommonFuncs.js           // 公用函数
 │   ├── Inspector.js             // 服务检测
 │   ├── TaskQueue.js             // 任务队列
 │   └── Unlock.js                // 解锁模块(来自SuperMonster003)
 ├── /tool
 │   ├── generateImageData.js     // 将 images_main 和 images_material 中的图片转为 BASE64 后保存为 JSON 文件
 │   └── /images
 │       ├── images_main          // 对应 IMAGES_MAIN 中的图片
 │       └── images_material      // 对应 IMAGES_MATERIAL 中的图片
 ├── config_main.js               // 主要预设文件
 ├── config_unlock.js             // 解锁预设文件(来自SuperMonster003)
 ├── launch.js                    // 入口程序
 └── project.json                 // 项目信息

⚡ 功能简介

😶 待完成的功能(优先度降序)

😥 待解决的问题