下载 App

托纳姆编程补充篇——AirScript

2024/08/10758 浏览整活专区

1.前言

最近偷偷看哔哩哔哩的时候发现,一个用python专门写脚的平台,发现做的相当让我满意,集成的功能和我以前写的几乎一样,它支持python几乎所有的标准库并且他还集成了openCVyolov5ocr,和我前面讲的不谋而合,而且对这些功能也做了一些比较方便的封装,最主要的是,他是在安卓手机上本地运行的,意味着就算没有电脑也可以用来写python代码,就算不写脚用来学习也非常方便,从脚的方面看他也不强制需要root,主要还是集成度高了上手难度低了,测试了一下运行速度也不错,兼容性也很好,真的做的很不错。

2.环境安装

这个我就不讲了,几乎没什么好讲的,而且这个平台社区环境感觉还勉强算可以,可以在b站上找到一些相关教程,官网也是全中文的文档

3.代码

主要还是稍微讲一下代码,说实话我前面写的几乎可以直接放到这个平台上用,只有微小的差别,主要是我以前写的是通过电脑发送adb指令给手机或模拟器,而现在,这个平台的是主要是脱离电脑离线运行,所有在和手机交互的代码需要小小的更改一下,然后ocr,yolo也不需要我们那么辛苦的配置环境了,他集成封装的很好。
1.首先是获取蓝量
TapTap
#
获取蓝量这个函数基本没什么变化,只是加了一个比色的函数,我原本写的函数,当我们满状态是,会隐藏血条和蓝量,这个时候,因此就找不到蓝条,就会代码会以为我们蓝量为零。现在稍微修改一下,如果没有血条就返回满蓝。
TapTap
所有函数都可以在文档里找到
2.然后是技能释放
TapTap
几乎没有什么变化,就是前面说的和手机交互的代码变了一下
TapTap
TapTap
3.最后是清理背包
TapTap
TapTap
其实已经没什么了把点击,滑动和截图改一下就可以了
TapTap
然后这个ocr,用起来也比原来方便很多了,封装的很不错
TapTap
然后以前我清理背包是一个一个删,稍微修改了下改成了多选
__init__.py
import time
from .tool import release_skill, clear_backpack
clear_list = ['蝙蝠耳朵', "柔软围巾"]   # 要删除的物品
a = time.time()
while True:
    release_skill()
    if time.time() - a > 2 * 60:    # 多少分钟后清理背包
        clear_backpack(clear_list)
        a = time.time()
too.py
import cv2 as cv
import numpy as np
from ascript.android.ui import ImageWindow
from ascript.android import screen
from ascript.android.ui import Dialog
from ascript.android import action
from ascript.android.screen import CompareColors
import time
# 谷歌OCR 识别中文,并使用自动分割
from ascript.android.screen import Ocr
# # 将内存截图Bitmap转换为cv img
# img = screen.bitmap_to_cvimage()
def getBule(img):
    if not CompareColors.compare('801,42,#6A4C13|802,49,#776634|806,55,#7D6B36', 0.9):
        return 20
    HSV = cv.cvtColor(img, cv.COLOR_BGR2HSV)  # 转换图像为HSV格式
    # 设置颜色阈值
    lowerColor = np.array([48, 100, 200])  # 取范围最低值
    upperColor = np.array([55, 220, 255])  # 取范围最高值
    # 提取指定部分(指定区域变白,其他变黑)
    binary = cv.inRange(HSV, lowerColor, upperColor)
    # 运用中值滤波去除噪声
    median = cv.medianBlur(binary, 9)
    # 这里使用轮廓检测cv2.findContours()的方法,并且返回contours轮廓信息,以及hierachy层级(这里用不到)。
    contours, hierachy = cv.findContours(median, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
    # cv.drawContours(img, contours, -1, (0, 0, 255), 3)
    # cv.imshow("img", img)
    # cv.waitKey(0)
    BlueAmount = 10 + len(contours)  # 绿色一格等于两格
    if len(contours) != 0:
        contours = sorted(contours, key=cv.contourArea)
        if cv.contourArea(contours[0], oriented=False) < 91:
            BlueAmount -= 1
    else:
        lowerColor = np.array([80, 220, 220])  # 取范围最低值
        upperColor = np.array([90, 240, 255])  # 取范围最高值
        binary = cv.inRange(HSV, lowerColor, upperColor)
        median = cv.medianBlur(binary, 9)
        contours, hierachy = cv.findContours(median, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
        BlueAmount = len(contours)
        if len(contours) != 0:
            contours = sorted(contours, key=cv.contourArea)
            if cv.contourArea(contours[0], oriented=False) < 71:
                BlueAmount -= 1
    return BlueAmount
def release_skill():
    img_screen = screen.bitmap_to_cvimage()
    if getBule(img_screen[47:64, 482:804]) < 4:
        action.click(1056, 139)
        time。sleep(6)
        action.click(1172, 184)
        time。sleep(1)
    action.click(932, 138)
    time。sleep(0.2)
    action.click(932, 138)
    time。sleep(0.2)
    action.click(932, 138)
    time。sleep(0.2)
    action.click(932, 138)
    time。sleep(2)
def clear_backpack(item_list):
    img_screen = screen.bitmap_to_cvimage()
    action.click(1048, 244)  # 打开背包
    time。sleep(0.5)
    action.click(473, 186)  # 打开多选
    while True:
        img_screen = screen.bitmap_to_cvimage()
        if img_screen[624, 1266][1] > 20:
            # 点删除
            action.click(349, 184)
            time。sleep(0.5)
            action.click(658, 601)
            time。sleep(2)
            action.click(1225, 60)  # 关闭
            break
        bpx, bpy, epx, epy = 630, 124, 1243, 640
        img = img_screen[bpy:epy, bpx:epx]
        HSV = cv.cvtColor(img, cv.COLOR_BGR2HSV)  # 转换图像为HSV格式
        # 设置颜色阈值
        lowerColor = np.array([18, 121, 100])  # 取范围最低值
        upperColor = np.array([19, 248, 156])  # 取范围最高值
        # 提取指定部分(指定区域变白,其他变黑)
        binary = cv.inRange(HSV, lowerColor, upperColor)
        # 高斯模糊
        median = cv.GaussianBlur(binary, (7, 7), 0, 0)
        # 边沿
        edges = cv.Canny(image=median, threshold1=100, threshold2=200)
        # 闭运算
        kernel = np.ones((5, 5), np.uint8)
        edges = cv.dilate(edges, kernel)
        edges = cv.erode(edges, kernel)
        contours, hierachy = cv.findContours(edges, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
        # 后两个为轮廓检索模式和轮廓逼近模式
        if len(contours) == 0:
            # 点删除
            action.click(349, 184)
            time。sleep(0.5)
            action.click(658, 601)
            time。sleep(2)
            action.click(1225, 60)  # 关闭
            break
        # 计算每个轮廓的面积并保存到字典中
        contour_areas = {i: cv.contourArea(contour) for i, contour in enumerate(contours)}
        # 根据面积对字典进行排序
        sorted_contour_areas = dict(sorted(contour_areas.items(), key=lambda item: item[1], reverse=True))
        # 获取排序后的轮廓索引
        sorted_contour_indices = list(sorted_contour_areas.keys())
        for i in sorted_contour_indices:
            if contour_areas[i] < 13000:
                break
            M = cv.moments(contours[i])
            if M["m00"] != 0:
                cX = int(M["m10"] / M["m00"])
                cY = int(M["m01"] / M["m00"])
                action.click(cX + bpx, cY + bpy)
                time。sleep(1)
                texts = Ocr.mlkitocr_v2([47, 429, 441, 463])
                if texts:
                    if texts[0].text not in item_list:
                        action.click(cX + bpx, cY + bpy)
                # 删除
                # if text.text in item_list:
                #     d.click(349, 184)
                #     time。sleep(0.5)
                #     d.click(658, 601)
                #     time。sleep(0.5)
        # 下翻
        action.swipe(1118, 500, 1118, 117, 800)
        time。sleep(1)
环境是雷神模拟器,分辨率1280*720,dpi240
波多姆诶截图
波多姆诶
女朋友做的,周末愉快[表情_送花]
1 赞
夏活点位表更新截图
夏活点位表更新
加了海底魔导点,稍微修改了一下优先级,也会根据夏活实际情况继续更新
20 赞
2 回复
AScript--一个简单的ui截图
AScript--一个简单的ui
趁着国庆,补一个ui,ui教程,以后有时间再写吧 通过百度网盘分享的文件:airscript 链接:https://pan.baidu.com/s/1pl7ZwsqATeKCuprx3P1MCg?pwd=mm3n 提取码:mm3n --来自百度网盘超级会员V4的分享 里面有一个pj的光速虚拟机,可以在安卓手机上多开tlom。 本来想上架,这样你们就不用配置环境也能用了,但是这个开发平台是要收费
12 赞
4 回复
小雪的御姐和正太的衣柜合集截图
小雪的御姐和正太的衣柜合集
简简单单搞一篇记录,少女篇在这里: 一些说在前头的话: 因为想每个角色都可以每天穿不同的衣服才选择搞对属,每天欣赏漂亮角色,只是盯着看就已经很满足了[心动小镇_点赞](快进到每天站街)时装它好漂亮,但是它赌出属性后只能死死的穿在一个角色身上,换衣服还得需要再赌或者用图纸转(好贵好麻烦)而且赌上衣过于费露珠了,非酋落泪,拿出50抽无上衣的战绩[心动小镇_难过](说这么多其实根本原因是没钱抽时装!) 御
20 赞
18 回复
托纳姆物语编程系列(6)—— 如何认路?截图
托纳姆物语编程系列(6)—— 如何认路?
前段时间看到两年前的东西还有人看,就想着再写一点什么,本来再tlm里面做一个自动驾驶来着,但是有点过于花时间了。一是tlm视角太受限,二是我一个人每次重新训练模型很吃力。不过好在我还是基本完成了视觉部分的功能,本文中以前文章提到的东西我就不会在提了,见谅。 1. 什么是实例分割 说这个之前我得让你知道什么是对象检测,放一个图你就明白了。 对象检测识别场景中你感兴趣的目标并输出是一组边界框,这些
16 赞
13 回复
01:42
异抗压血魔导(轮椅输出)神圣教导之力截图
异抗压血魔导(轮椅输出)神圣教导之力
异抗压血魔导三维分析(满5星) 生存:★★★★★ 输出:★★ 辅助:★★★★ 声明:(等后续点燃补强了_(:з」∠)_) 有什么意见或者建议可以在帖子下面讨论(๑>؂<๑) 1.不要想着魔导输出能多高,想玩输出可以看法师攻略。 2.优点是不惧怕百分比伤害(把假血算在内的除外),正常boss伤害大部分也能抗(高额双抗)。 3.刚需卡斯魔导,没有的话,也不要考虑,附魔魔导不行。 4.不是很建议从
150 赞
106 回复
02:22
手残也能身法的力耐大剑连击演示截图
手残也能身法的力耐大剑连击演示
如题,测试了一晚上的大剑连击,拿机器人反复试验,最终得出了这一看上去很奇怪的连击搭配。 核心思路:降低开爆气+狂战+战吼的蓝耗,连击多夹回旋镖可以很多时候自动回避控制打断,音速瞬间位移起手,直接打破坏之刃用增伤,然后立刻回旋镖后拉同时连击收尾。用迅捷起手魔怪斩是因为顺捷顾名思义动作快,初步有点帧伤的概念了。 之前实验的连击还不如我纯手动打,就很难蚌。这个虽然不一定比得过全手动,但至少在玩得简单好上
4 赞
4 回复
全对属门牌哦截图
全对属门牌哦
收集完了,单独为对属开一贴
29 赞
3 回复
新主线属性图2026截图
新主线属性图2026
整合了大佬的数据,有错的,请留言。[表情_微笑]
10 赞
2 回复
01:17
设计双菜刀的是天才截图
设计双菜刀的是天才
升级路上注意力都只顾着搓招了,有时候突然间搓不出能够调动咱们的情绪使咱们懊恼,完整顺畅的搓出一套来那爽感别提多舒服了,特别是超快速的搓出来帅帅的,就是打出四季的时候,要不给他安排一个无敌就好了,要不然冲进去受到伤害触发免伤的话,四季的伤害貌似是会降低的。(๐•̆·̭•̆๐)情绪价值拉满了。
7 赞
3 回复