Code Monkey home page Code Monkey logo

arkhelper's Introduction

simpleArknightHelper

One Easy-Use Arknight Helper 一款明日方舟护肝小助手

写在前面:

我本人并不是一名专业的程序员,代码质量并不高,时间也不充裕。同时也是一名github的新使用者,还请大家多多指教。

下载地址:
网盘 链接
蓝奏云 下载地址
Github release
  • 下载提供的是master分支使用pyinstaller打包后的文件,可以直接使用,而无需安装python。

  • 国内用户可以使用蓝奏云链接,速度较快

Requirements
版本
opencv_python 4.4.0.42
win10toast 0.9
numpy 1.19.2
PyQt5 5.15.4
requests 2.25.1

库的版本由于我的失误发生了一些变化 你也可以在仓库里找到requirements.txt,并使用pip install -r requirements.txt来部署环境。


适用场景

任何场景!

特别适用的场景
活动 主线 剿灭作战 你想要养成干员的时候
骑兵与猎人 1-7 全部 快使用计划作战吧!
火蓝之心
生于黑夜

关于这个小助手:

界面


UI2_6_4.png

  • metro风格的界面参考了windows10的菜单,简洁明了

模拟器支持


menu_simulator_2_6_4.png

  • 选单中有的模拟器我们都做了支持和验证
  • 但也有可能出现一些小问题,如果您发现任何问题还请通知我

特色功能!——计划战斗

打开计划战斗选项


schedule_right_2_6_4.png

  • 小助手会根据您的配置,自动按规划的路线进行战斗
  • 不论是正好差一次剿灭,还是想要从1-7中获得8个固源岩,都可以实现
  • 仅支持主线、物资筹备、芯片搜索和剿灭作战,即一般不支持活动关卡
  • 如果启用计划战斗,请在首页或是可以看到HOME图标的界面启动小助手
  • 在右键菜单中打开配置界面

使用路线规划窗口编辑您的计划


scheduleGIF.gif

通过次数设定

  • 不选中素材模式,即可设定目标关卡的目标次数

更棒的!通过素材设定!

  • 选中素材模式,您便可以打开选择掉落物窗口,指定您想要获得的素材和它的个数!

  • 可以通过新建配置将您的计划存储起来,而加载配置则可以方便的调用
  • 素材设定的关卡与次数设定的关卡可以同时在规划中出现,图片中未演示
  • 设置关卡的时候请务必填入正确的关卡名,否则会发生什么我也没试过(笑)

通用功能

单一关卡循环作战


loop_right_2_6_4.png

  • 这个选项用于在您已选择的关卡不断循环,直到理智耗尽
  • 您也可以在右键菜单中设置循环次数,那么将会循环到设定的次数(除非没有理智了)

在何时启动

auto.png

  • 如果您仅使用循环作战,您至少应当在此状态下启动
  • 实际上,您也可以先进入代理指挥开始战斗,再启动小助手

任务交付


  • 不知您有没有注意到界面上被选中的任务开关,这代表在战斗结束后小助手会帮助您交付任务!

获取信用


  • 点击按钮打开任务交付功能吧!
  • 自动访问你的好友来获取更多的信用点数!

自动公招


pc_right_2_6_4.png

  • 打开自动公招功能,小助手会帮助你自动聘用和招募干员
  • 在右键菜单中进行一些简单的设置
  • 自动招募指的是搜寻干员,而自动聘用则是指招募完成后的聘用

获取额外的理智


menu_autoRec_2_6_4.png

  • 您可以在这里设置当理智不足时是否使用理智合剂或源石恢复
  • 源石恢复可以设置上限,计划作战与循环战斗共用一个上限值

实际上,使用源石恢复理智我并没有测试过,但是大概没有问题(笑)

关闭计算机


  • 启用此选项,当小助手完成全部工作,它就会尝试关闭计算机并自动退出
  • 该功能关闭计算机有2分钟倒计时,您可以用shutdown -a指令来取消关闭计算机的计划

这些是开关


  • 所有的按键都有右键菜单
  • 因此,如果您不需要这个功能,可以单击以关闭
  • 使用右键菜单来设置功能的默认状态

公开招募计算器


newpubliccall.png

  • 便捷的公开招募计算器,从你的模拟器屏幕上直接获取标签信息!
  • 主要的作用是避免错过一些不起眼的标签组合

提示!


notice.png

  • 在理智耗尽或是其他一些活动完成后,会通知提示您!

一些小细节

1. 小助手执行任务的顺序

实际上是 计划战斗 ⟶ 循环战斗 ⟶ 任务交付 ⟶ 信用获取 ⟶ 关闭计算机,在战斗环节中判断是否消耗额外理智

2. 我想要在计划作战中无限循环某一关

当然,你可以设置某一关的次数是999。 但实际上,由执行顺序可以发现,如果你把想要无限循环的那一关放在计划的最后,并同时启用计划战斗和循环战斗,这一关就会不断执行直到理智耗尽了。

3. 关于ADB

实际上,只有当你按下开始按钮或者点击公招计算器的时候,小助手才会开始尝试启动adb。 但当你点击小助手的退出时,它会终止电脑上的所有adb进程,因此请注意在使用其它依赖adb的的程序时,不要退出小助手。

4. 有关下一步更新的计划

大概是在计划战斗中加入某材料多少个这样的判断条件吧,想着直接设置要3个扭转醇和5个固源岩就可以运行了,太美好了。 至于什么时候能真的上线,我并不清楚,而我目前的进度是,约1%我猜,还处在思考怎么实现的阶段(悲)。 已经实现了,而且还挺好用,期待大家提出优化建议 基建 基建 基建

arkhelper's People

Contributors

leng-yue avatar mangetsuc avatar wicast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

arkhelper's Issues

bug report

在方舟更新2022/4/21版本后,结束界面变化导致之前的版本中”endNormal.png“的“束”字体发生变化,卡在结束界面无法继续,
二而新版本配置资源是出现
[2022-04-24 11:21:35]b"error: device '127.0.0.1:7555' not found\r\n"
[2022-04-24 11:21:35]截取屏幕失败:截图解码失败
[2022-04-24 11:21:35]OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:816: error: (-215:Assertion failed) !buf.empty() in function 'cv::imdecode_'
[2022-04-24 11:22:42]b"error: device '127.0.0.1:7555' not found\r\n"
[2022-04-24 11:22:42]截取屏幕失败:截图解码失败
[2022-04-24 11:22:42]OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:816: error: (-215:Assertion failed) !buf.empty() in function 'cv::imdecode_'
[2022-04-24 11:28:15]b"* daemon not running; starting now at tcp:5037\r\n* daemon started successfully\r\nerror: device '127.0.0.1:7555' not found\r\n"
[2022-04-24 11:28:15]截取屏幕失败:截图解码失败
[2022-04-24 11:28:15]OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:816: error: (-215:Assertion failed) !buf.empty() in function 'cv::imdecode_'

路径无中文,mumu模拟器

建议截图使用 raw+pipe 方案,跳过文件系统存取

目前的方案需要在 ext4 和 ntfs 分别存取一次,实际对于获取截图数据并不是必要的,通过管道直接在内存中交换数据理论更快,png也不建议使用,在带宽完全足够的情况下使用压缩只会加大延迟

实测也是如此,用 raw+pipe 在我这里能从1000ms+降低到250-300ms左右(夜神模拟器),png+pipe大概500-800ms

测试代码如下

from subprocess import Popen, PIPE
from cv2 import (COLOR_RGBA2BGRA, cvtColor,
                 imdecode, imshow, waitKey)
from numpy import fromfile, frombuffer

import time


def current_milli_time():
    return round(time.time() * 1000)


def from_std_raw():
    startT = current_milli_time()
    p = Popen('adb shell screencap', shell=True, stdout=PIPE, stderr=PIPE)
    print("1:", current_milli_time() - startT)
    # reg = p.stdout.read()
    # f = open('adb-cap-color.raw', 'wb')
    # f.write(reg)
    # f.close()

    ### 跳过头文件, 本地替换clrf的速度实测比用 exec-out 更快
    reg = p.stdout.read()[12:].replace(b"\r\n", b"\n")
    print("2:", current_milli_time() - startT)

    im = frombuffer(reg, dtype="uint8")
    im.shape = (1080, 1920, 4)
    ### raw格式为RGBA, imshow要BGRA,对于具体硬件可能raw格式不同,可以通过与png截图对比缺点具体的格式
    im = cvtColor(im, COLOR_RGBA2BGRA)
    print("3:", current_milli_time() - startT)

    # imshow("a", im)
    # waitKey(0)  # waits until a key is pressed


def from_std():
    startT = current_milli_time()
    p = Popen('adb shell screencap -p', shell=True, stdout=PIPE, stderr=PIPE)
    ### 不建议用 exec-out 实测下来不如自己本地替换
    # p = Popen('adb exec-out screencap -p', shell = True, stdout = PIPE, stderr = PIPE)
    print("1:", current_milli_time() - startT)

    reg = p.stdout.read().replace(b"\r\n", b"\n")
    print("2:", current_milli_time() - startT)
    # reg = p.stdout.read()

    im = imdecode(frombuffer(reg, dtype="uint8"), -1)
    print("3:", current_milli_time() - startT)
    # imshow("a",im)
    # waitKey(0) # waits until a key is pressed


def from_file():
    startT = current_milli_time()
    p = Popen('adb shell screencap -p /sdcard/arktemp.png',
              shell=True, stdout=PIPE, stderr=PIPE)
    p.communicate()
    print("1:", current_milli_time() - startT)
    p = Popen('adb pull \"/sdcard/arktemp.png\" \"arktemp.png\"',
              shell=True, stdout=PIPE, stderr=PIPE)
    p.communicate()
    print("2:", current_milli_time() - startT)

    im = imdecode(fromfile('arktemp.png', dtype="uint8"), -1)
    print("3:", current_milli_time() - startT)
    # imshow("a", im)
    # waitKey(0)  # waits until a key is pressed


from_std_raw()

通过文件的时间

> python .\adb-screen.py
1: 1213
2: 1308
3: 1346

通过png+pipe的时间

> python .\adb-screen.py
1: 2
2: 766
3: 814

raw+pipe的时间

> python .\adb-screen.py
1: 1
2: 284
3: 296

关于一些UI界面的显示

当前计划使用素材模式时,选择相应的掉落物后,是否能将当前选择的掉落物显示出来,(或许可以在“选择掉落物”按钮的右边,因为目前版本的“添加”按钮的宽度似乎没有必要这么大)。

以及询问一句,在您的更新计划中,是否有打算在UI主界面中 或者添加一个按钮(点击后查看) 查看启动虚拟博士后获得的所有掉落物,并且随着每次关卡结束更新数据,使用文字显示就可以(像 已获得: 研磨石 10个)。

希望可以增加安卓设备的支持

adb已经测试过可以正常连接但是手头并没有16:9的设备,希望可以增加更多的分辨率的支持
(也可以针对不同的分辨率先上一个通用版同时调异形屏ui适配)
其次是手机设备的横屏识别不出来

增加可视反馈

有时候我不知道它到底在尝试干什么(笑
加之模拟器在后台,也不方便看
打开控制台也没有信息,只有连接消息
希望可以在菜单下增加个滚动条提示当前动作、当前理智状态和关卡识别
另外一个问题就是不知道刷了多少材料了(闷着头直接1-7),可以加个材料输出到文件吗?

关于3.0里的设置资源

我是完全的萌新之前没用过这款软件,寻找可以给日服用的工具时才发现的
然后就是在截取时它自动生成的是一整张截图,理论上讲应该不是这样的吧?
image
如果要手动修正的话要怎么操作呢?

更新新主线后的计划战斗问题

更新了第九章之后,计划战斗不能用了,控制台输出如下日志
图片

是不是更新新主线后,新增的这个按钮导致逻辑出错?
图片
图片

mumu模拟器连接失败

[2021-06-14 15:35:49]系统无法执行指定的程序。

[2021-06-14 15:35:49]系统无法执行指定的程序。

[2021-06-14 15:35:49]

[2021-06-14 15:35:50]系统无法执行指定的程序。

[2021-06-14 15:35:50]系统无法执行指定的程序。

[2021-06-14 15:35:50]

[2021-06-14 15:35:50]连接模拟器失败,请检查设置和模拟器

[2021-06-14 15:35:50]unable to connect simulator

进入基建报错

[2021-11-24 14:42:18]Exception in thread Thread-3:
Traceback (most recent call last):
File "threading.py", line 926, in bootstrap_inner
File "threading.py", line 870, in run
File "appQT.py", line 983, in start
File "foo\ui\UILogistic.py", line 275, in run
File "foo\logisticDepartment\Logistic.py", line 560, in run
File "foo\logisticDepartment\Logistic.py", line 94, in enterLogisticPanel
File "foo\ocr\ocr.py", line 35, in getText
File "json_init
.py", line 348, in loads
File "json\decoder.py", line 337, in decode
File "json\decoder.py", line 355, in raw_decode
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

雷电模拟器无法使用

[2020-08-23 21:25:09]127.0.0.1:5555
[2020-08-23 21:25:29]127.0.0.1:62026
[2020-08-23 21:25:31]127.0.0.1:5555
[2020-08-23 21:26:02]* daemon not running. starting it now on port 5037 *
* daemon started successfully *
connected to 127.0.0.1:5555

[2020-08-23 21:26:02]error: device offline

[2020-08-23 21:26:02]
[2020-08-23 21:26:03]Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.py", line 926, in _bootstrap_inner
  File "threading.py", line 870, in run
  File "appQT.py", line 667, in start
  File "foo\arknight\Battle.py", line 47, in connect
  File "foo\adb\adbCtrl.py", line 91, in connect
ValueError: invalid literal for int() with base 10: ''

应该是在获取屏幕尺寸的时候出错,但是device offline错误似乎和adb的版本有关


我将arkhelper中自带的adb替换为airtest的adb后,可以正常获取到屏幕尺寸,但是似乎传过来的截图无法打开
但是如果使用airtest进行截图的话是正常显示的

[2020-08-23 22:09:34]already connected to 127.0.0.1:5555

[2020-08-23 22:09:38]Physicalsize:1280x720
[2020-08-23 22:09:41]Exception in thread Thread-22:
Traceback (most recent call last):
  File "threading.py", line 926, in _bootstrap_inner
  File "threading.py", line 870, in run
  File "appQT.py", line 669, in start
  File "foo\arknight\Schedule.py", line 332, in run
  File "foo\arknight\Schedule.py", line 71, in goLevel
  File "foo\adb\adbCtrl.py", line 125, in screenShot
  File "site-packages\PIL\Image.py", line 2818, in open
OSError: cannot identify image file 'D:/python/arkhelper/bin/adb/arktemp.png'

基建相关:希望添加跨房间组合和组合共同下班的设定

RT,看了看基建并没有类似的说明
(还有控制中枢的组合、无人机加速)
跨房间组合例如絮雨去会客室,爱丽丝去宿舍,夕去控制中枢+迷迭香建造站+塞满宿舍;
lancet去电站+森蚺去基建,从而三电站温蒂75的搭配
组合共同下班就类似稀音刻俄泊红云,稀音会早些耗尽体力,可不可以整个组合一起下班?
这个助手功能真的很强,谢谢!

雷电模拟器无法使用,其他issue里提到的方法无法解决

雷电版本4.0.59,小助手版本Vdev和release最新版
adb devices 显示emulator-5554 (状态)
点击启动控制台报错 b"adb.exe: device '127.0.0.1:5555' not found\r\n"
自定义连127.0.0.1:5554会显示计算机积极拒绝blabla
自定义连127.0.0.1:5555是* daemon started successfully
failed to connect to 127.0.0.1:5555(此时点停止虚拟博士会卡死)
百度到的方法(重启,重装,改路径和环境变量,关相关的进程)都没法解决
issue提到的在目录打开无法解决
其他脚本的一个gui可以直接选择emulator-5554连接,不知道是什么原理……https://github.com/ninthDevilHAUNSTER/ArknightsAutoHelper
另外不开模拟器直接点开也会导致点击停止之后卡死,控制台不停刷新 no devices/emulator found
另另外,master的代码,foo\logisticDepartment目录下的Logistic.py开头小写变成大写了

雷电模拟器无法使用

[2021-01-31 17:59:13]127.0.0.1:5555
[2021-01-31 17:59:24]connected to 127.0.0.1:5555

[2021-01-31 17:59:24]error: device offline

[2021-01-31 17:59:24]
[2021-01-31 17:59:24]Exception in thread [2021-01-31 17:59:24]Thread-2[2021-01-31 17:59:24]:
[2021-01-31 17:59:24]Traceback (most recent call last):
[2021-01-31 17:59:24]  File "threading.py", line 932, in _bootstrap_inner
[2021-01-31 17:59:24]  File "threading.py", line 870, in run
[2021-01-31 17:59:24]  File "appQT.py", line 803, in start
[2021-01-31 17:59:24]  File "foo\arknight\Battle.py", line 47, in connect
[2021-01-31 17:59:24]  File "foo\adb\adbCtrl.py", line 105, in connect
[2021-01-31 17:59:24]ValueError[2021-01-31 17:59:24]: [2021-01-31 17:59:24]invalid literal for int() with base 10: ''
[2021-01-31 17:59:24]Exception in threading.excepthook:
[2021-01-31 17:59:24]Exception ignored in thread started by[2021-01-31 17:59:24]: [2021-01-31 17:59:24]<bound method Thread._bootstrap of <Thread(Thread-2, started daemon 12716)>>
[2021-01-31 17:59:24]Traceback (most recent call last):
[2021-01-31 17:59:24]  File "threading.py", line 890, in _bootstrap
[2021-01-31 17:59:24]  File "threading.py", line 934, in _bootstrap_inner
[2021-01-31 17:59:24]  File "threading.py", line 1212, in invoke_excepthook
[2021-01-31 17:59:24]AttributeError[2021-01-31 17:59:24]: [2021-01-31 17:59:24]'EmittingStr' object has no attribute 'flush'
[2021-01-31 17:59:24]Exception ignored in sys.unraisablehook[2021-01-31 17:59:24]: [2021-01-31 17:59:24]<built-in function unraisablehook>
[2021-01-31 17:59:24]AttributeError[2021-01-31 17:59:24]: [2021-01-31 17:59:24]'EmittingStr' object has no attribute 'flush'

高分辨率下无法进入连锁竞赛关卡

在1920*1080分辨率下,无法进入连锁竞赛关卡,手动点开进入队伍界面后可顺利进行一次

临时解决方案

  • 将模拟器分辨率改为1600900或1440810,更低分辨率暂未经过测试

逍遥模拟器的一个小问题

用的久了逍遥占用变大了,于是建了一个新的,在管理界面的序号也变了,当序号不是0的时候,无法正常使用,控制台信息是:
[2021-10-15 14:50:30]正在连接adb...第10次
[2021-10-15 14:50:36]unable to connect to 127.0.0.1:21503:21503
[2021-10-15 14:50:37]第10次连接尝试失败
[2021-10-15 14:50:37]连接模拟器失败,请检查设置和模拟器
[2021-10-15 14:50:37]连接adb失败

//前9次的错误没有复制,都是一样格式的。

试了几次,只要序号是0(默认)就没有问题,建立新的只要序号0也没问题。不是0就无法连接。

无法启动模拟器

如题,点击启动虚拟博士没有反应,不会弹出模拟器窗口。
用的是雷电模拟器
控制台输出:

[2021-06-12 11:34:44]error: device not found

[2021-06-12 11:34:44]
[2021-06-12 11:34:44]Exception in thread Thread-53:
Traceback (most recent call last):
  File "threading.py", line 926, in _bootstrap_inner
  File "threading.py", line 870, in run
  File "appQT.py", line 991, in start
  File "foo\arknight\Battle.py", line 64, in connect
  File "foo\adb\adbCtrl.py", line 157, in connect
ValueError: invalid literal for int() with base 10: ''

arkHelper版本:2.6.6

MuMu模拟器,无法正常开始,显示的控制台如下,请问应该如何解决?

[2020-07-21 09:13:57]127.0.0.1:7555
[2020-07-21 09:14:14]* daemon not running. starting it now on port 5037 *

  • daemon started successfully *
    connected to 127.0.0.1:7555

[2020-07-21 09:14:15]Physicalsize:1280x720

然后就不动了,模拟器打开的是活动图的界面,arkhelper.exe是用管理员权限打开的
我就是今天早上看到这个就下载下来直接运行的,请问是对安装位置有什么要求还是需要再下载个什么东西吗

bluestacks5 调试问题

bluestacks 5 的调试端口可能会改变,重新添加比较麻烦,希望能增加个编辑模拟器配置的功能

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.