基于Python的阴阳师后台全平台辅助

基于Python的阴阳师后台全平台辅助

  • Python 版本:Python 3.8
  • 模拟器:雷电模拟器(推荐)|网易 MuMu
  • 模拟器分辨率:1024*576
  • 网易 MuMu 显卡渲染模式:兼容(OpenGL)
  • 兼容 Windows 系统和 MacOS 系统(不太友好,发热严重且需要重新截图)
  • ** 下载「彩云天气」APP,输入我的邀请码:24066808,白嫖一年 SVIP。**

个人使用顺序

每周首先挂秘闻副本,每天三大地域鬼王,结界突破券满了挂突破,突破用完了挂御魂,大概 80-100 次左右御魂结界突破券会满,满了继续挂突破…

想法:

利用 adb 截图后,使用 opencv 找图找色,模拟点击。使用 adb 操作模拟器,相当于后台操作。

我的主要目的是刷勾玉,所以这个工具更侧重于区域鬼王、结界突破和秘境地牢,而玉魂则是用来刷突破券的。

为了防止收到鬼使黑的来信,所以增加随机等待的时间比较多,每次随机等待 2-3 秒,导致整体运行速度稍微慢了一些。

这个工具适合在后台做其他工作的学生。观赏价值不高。

区域鬼王需要先收集古守鸟、伊豆震天和山通。

基于Python的阴阳师后台全平台辅助

结界突破主要是把九宫格的坐标保存到列表,使用shuffle方法随机打乱,然后循环执行。

目前只支持个人壁垒突破,阵容需要解锁。

基于Python的阴阳师后台全平台辅助

第一次进入突破,自动失败一次。如果你失败了,难度不会增加,方便排名和使用钩子。

每突破三次会领取一次奖励,等待九次全部完成后,会把右上角突破剩余数量截图上传到腾讯 OCR 识别接口,如果剩余次数大于等于九次,递归执行,否则停止执行。

腾讯 OCR 每月有一千次免费次数。如果只是识别结界券使用,应该是够用了,如果不够用可以按需付费或者自建字典识别。

基于Python的阴阳师后台全平台辅助

这一步需要申请腾讯云文字识别 OCR的 secretId 和 secretKey。

然后新建文件tencentcloudKeys.py,写入:

secretId = "AKI***********************aYHDtmaOw"
secretKey = "Sg**************************QdZ7X"

模拟器版本

部分操作参考网易 MuMu 开发者必备说明书和【雷神命令】常用adb命令整理贴。

建议直接看雷神模拟器社区的命令安排,比较详细。

运行阴阳师

如果不知道应用程序的启动命令,可以先手动运行程序,然后使用命令:

adb shell dumpsys window | findstr mCurrentFocus

查找正在运行的应用程序。

启动阴阳师的命令是:
http://www.biyezuopin.vip

adb shell am start -n com.netease.onmyoji.netease_simulator/com.netease.onmyoji.Client

因为我是 iOS,只能扫码登录,所以启动命令对我来说并不实用。

模拟点击

例如我们需要点击 500, 266 这个坐标:

adb shell input tap 500 266

模拟滑动

从0, 0滑动到200, 200,耗时 0.5 秒:

adb shell input swipe 0 0 200 200 500

截屏

您需要先运行此命令:

adb shell screencap /data/screen.png

然后将截图推送到电脑:

adb pull /data/screen.png .

注意:示例中的命令将图像保存到当前路径。

查找图片

这里借助 opencv 库实现。
http://www.biyezuopin.vip

import cv2

def p():
    capture_img = ""  # 程序运行时的截图
    temp_img = ""  # 已经保存好的图片

    img1 = cv2.imread(capture_img)
    img2 = cv2.imread(temp_img)
    result = cv2.matchTemplate(img1, img2, cv2.TM_CCOEFF_NORMED)

    if result.max() > 0.9:
        return True

找到颜色

如何获取截图中某个坐标的像素值?

import cv2

def p(x, y):
    capture_img = ""
    _img = cv2.imread(capture_img)
    img = cv2.cvtColor(_img, cv2.COLOR_BGR2RGB)
    r, g, b = img[y, x]  # 注意这里的坐标是相反的
    return r, g, b

裁剪图片

我们完成截图后,如何从截图中获取结界突破的剩余数量?

import cv2

capture_img = ""
img = cv2.imread(capture_img)
cv2.imwrite("new.png", img[12:30, 705:750])  # 裁剪坐标为 [y0:y1, x0:x1]

需要注意的是坐标都是 y, x。

双应用切换

由于多开改版后(2.2.2×86/x64 版本之后)所有的多开应用和原应用都是同一个包名,所以需要通过 UserId 来控制多开的应用。

这里以网易云游戏为例。打开多个后,获取包名,使用命令:

adb shell dumpsys window | findstr mCurrentFocus

全部都是com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity。

所以需要通过切换 UserId 来切换应用。

通过包名来获取对应 UserId:

adb shell ps|findstr com.netease.android.cloudgame

返回以下内容:

基于Python的阴阳师后台全平台辅助

可以看到原端应用的进程 id 是 u0_a36 ,看_前面的 u0 就行,即 UserId=0;
在 MuMu 上一般原端的 UserId=0,多开端 #N1 的 UserId=10,如此类推 #N2 的 UserId=11,#N3 的 UserId=12,#N4 的 UserId=13

因此,多开操作分为两个步骤:

  1. 切换 UserId
  2. 打开应用程序

根据上边的截图,UserId 分别是 0 和 10,如果要在两个应用之间切换可以使用:

# 切换原应用
adb shell am start-user 0
adb shell am start --user 0 com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity

# 切换多开应用
adb shell am start-user 10
adb shell am start --user 10 com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity

切换后可以继续操作。

版权声明:本文为博主biyezuopinvip原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/newlw/article/details/123043166

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(1)
青葱年少的头像青葱年少普通用户
上一篇 2022年2月24日 上午11:52
下一篇 2022年2月24日

相关推荐