menghuanzhushou/common.py
2025-03-25 10:58:51 +08:00

368 lines
9.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
import random
import threading
from . import duiwu
# 导入系统资源模块
from ascript.android.system import R
# 导入动作模块
from ascript.android import action
# 导入图色检索模块
from ascript.android.screen import FindImages
from ascript.android.screen import FindColors
# 文字识别
from ascript.android.screen import Ocr
# 战斗状态
isfire_wfstatus = False
# 捉鬼状态
zhuoguiisover = False
# 领取双倍状态
shuangbei = False
# 定义一个全局变量来管理定时器
alllive_task_timer = None
def huodong():
while True:
res_last = zhaotu("活动.png")
if res_last is not None:
findandclick(res_last)
sleep(1)
res_hd_c = FindImages.find([R.img("活动-c.png"), ], rect=[421, 76, 620, 137], confidence=0.95)
if res_hd_c is not None:
return True
else:
continue
else:
print("没找到活动按钮")
if isfire():
print("战斗中,打开所有按钮")
res_suoyoutubiao = zhaotu("所有图标.png")
if res_suoyoutubiao is None:
print("未找到目标图片:所有图标.png")
# 异常情况
closeAllbtn()
else:
# 找到所有活动图标,点击
findandclick(res_suoyoutubiao)
else:
closeAllbtn()
sleep(1)
def findandclick(res):
# 提取矩形范围
rect = res["rect"] # [x1, y1, x2, y2]
# 随机生成矩形范围内的一个点
x = random.randint(rect[0], rect[2]) # 随机 x 坐标
y = random.randint(rect[1], rect[3]) # 随机 y 坐标
# 执行点击操作
print(f"点击", rect)
action.click(x, y) # 在随机点点击
time.sleep(0.5)
def closeAllbtn():
res_allclose = zhaotu("总开关.png")
if res_allclose is None:
print("未找到目标图片:总开关.png")
else:
print("关闭-总开关弹框")
findandclick(res_allclose)
res_flkg = zhaotu("福利-开关.png")
if res_flkg is None:
print("未找到目标图片:福利-开关.png")
else:
print("关闭-福利-开关弹框")
findandclick(res_flkg)
# 见面礼-关闭.png
res_flkg = zhaotu("见面礼-关闭.png")
if res_flkg is None:
print("未找到目标图片:见面礼-关闭.png")
else:
print("关闭-见面礼-开关弹框")
findandclick(res_flkg)
# 师门-关闭.png
res_smgb = zhaotu("/shimen/师门-关闭.png")
if res_smgb is not None:
print("关闭-师门任务-弹框")
findandclick(res_smgb)
def zhaotu(name):
print(f"找图--", name)
result = FindImages.find(
[
R.img(name),
],
confidence=0.95,
)
if result is None:
print(f"未找到图片:", name)
return result
def isfire():
global isfire_wfstatus
# 战斗中
res_zdqx = zhaotu("战斗-取消.png")
if res_zdqx is None:
print("未找到目标图片:战斗-取消.png")
isfire_wfstatus = False
else:
print("战斗中.....")
isfire_wfstatus = True
return isfire_wfstatus
def denglu():
while True:
res_fwq = FindColors.find("382,434,#BC3010|380,442,#CE3116|643,431,#FFE986")
if res_fwq is None:
print("未找到服务器信息")
# 找聊天框,找到认为已经进入游戏
res_liaotian = zhaotu("聊天.png")
if res_liaotian is None:
print("找不到聊天,异常情况")
else:
# 在游戏中
print("在游戏中-------")
return
else:
res_denglu = zhaotu("登录游戏.png")
# 判断是否找到目标图片
if res_denglu is None:
print("未找到目标图片:登录游戏.png")
else:
findandclick(res_denglu)
sleep(5)
while True:
res_tcpd = zhaotu("退出排队.png")
if res_tcpd is None:
print("未找到目标图片:退出排队.png")
return
else:
# findandclick(res_tcpd)
sleep(60)
sleep(1)
def zhaorenwu(name):
# zhaorenwu.py 中优化滑动逻辑
for i in range(3):
res_tu = zhaotu(name)
if res_tu is not None:
return res_tu
action.slide(731, 427, 408, 148, 2000)
sleep(1)
for i in range(3):
res_tu = zhaotu(name)
if res_tu is not None:
return res_tu
action.slide(408, 148, 731, 427, 2000)
sleep(1)
return None
def zhaocanjia_text(renwu_fanwei):
# 266273
# 499,y1- x1+320,y+50
# x+234,y ,x+320,y+50
gui_rect = renwu_fanwei["rect"] # [x1, y1, x2, y2]
print(gui_rect)
x = gui_rect[0]
y = gui_rect[1]
x1 = x + 234
x2 = x + 320
y2 = y + 50
search_region = [x1, y, x2, y2]
print(f"找----参加-----文字坐标: ({x1}, {y},{x2}, {y2})")
res = Ocr.paddleocr_v2(rect=search_region)
if res is None:
print("未找到参加文字")
return None
if res[0].text == "参加":
res = {"rect": res[0].rect}
return res
else:
return None
def zhaocanjia(renwu_fanwei):
gui_rect = renwu_fanwei["rect"] # [x1, y1, x2, y2]
print(gui_rect)
x1 = gui_rect[0]
y1 = gui_rect[1]
expand_x = 337 # X 方向扩展 337 像素
expand_y = 93 # Y 方向扩展 93 像素
x2 = x1 + expand_x
y2 = y1 + expand_y
search_region = [x1, y1, x2, y2]
print(f"随机点击坐标: ({x1}, {y1},{x2}, {y2})")
res_canjia = FindImages.find(
[
R.img("参加.png"),
],
rect=search_region,
confidence=0.95,
)
return res_canjia
def zhaowancheng_text(renwu_fanwei):
# 266273
# 499,y1- x1+320,y+50
# x+234,y ,x+320,y+50
gui_rect = renwu_fanwei["rect"] # [x1, y1, x2, y2]
print(gui_rect)
x = gui_rect[0]
y = gui_rect[1]
x1 = x + 234
x2 = x + 320
y2 = y + 50
search_region = [x1, y, x2, y2]
print(f"找----完成-----文字坐标: ({x1}, {y},{x2}, {y2})")
res = Ocr.paddleocr_v2(rect=search_region)
if res is None:
print("未找到参加文字")
return None
if res[0].text == "完成":
res = {"rect": res[0].rect}
return res
else:
return None
def zhaowancheng(renwu_fanwei):
gui_rect = renwu_fanwei["rect"] # [x1, y1, x2, y2]
print(gui_rect)
x1 = gui_rect[0]
y1 = gui_rect[1]
expand_x = 337 # X 方向扩展 337 像素
expand_y = 93 # Y 方向扩展 93 像素
x2 = x1 + expand_x
y2 = y1 + expand_y
search_region = [x1, y1, x2, y2]
print(f"随机点击坐标: ({x1}, {y1},{x2}, {y2})")
res_canjia = FindImages.find(
[
R.img("完成.png"),
],
rect=search_region,
confidence=0.95,
)
return res_canjia
def shizi(fanwei):
print("开始识别")
# 截取屏幕指定区域
# fanwei=[500, 616, 545, 649] # 定义区域范围
res = Ocr.paddleocr_v2(rect=fanwei)
# print(res)
if res:
# 循环打印识别到的每一个段落
for r in res:
return r.text
else:
return None
def alllive_task(num):
print("---------------定时任务-寻找异常弹窗----------------")
# zhaotu("道具领取-弹框.png")
ref_daoju = zhaotu("道具领取-弹框.png")
if ref_daoju is None:
print("未找到目标图片:弹框.png")
else:
findandclick(ref_daoju)
res_map = zhaotu("地图.png")
if res_map is None:
print("未找到目标图片:地图.png")
else:
findandclick(res_map)
res_dmj = zhaotu("洞冥记.png")
if res_dmj is None:
print("未找到目标图片:地图.png")
else:
findandclick(res_dmj)
# 指引-关闭.png
res_zy = zhaotu("指引-关闭.png")
if res_zy is None:
print("未找到目标图片:指引-关闭.png")
else:
findandclick(res_zy)
# 充值-关闭.png
res_cz = zhaotu("充值.png")
if res_cz is None:
print("未找到目标图片:充值.png")
else:
findandclick(res_cz)
res_sl = zhaotu("算了.png")
if res_sl is None:
print("未找到目标图片算了.png")
else:
findandclick(res_sl)
res_jj = zhaotu("拒绝.png")
if res_jj is None:
print("未找到目标图片:拒绝.png")
else:
findandclick(res_jj)
# 战斗状态监控
isfire()
duiwu.shifoukaping()
start_alllive_task_timer(num)
def start_alllive_task_timer(num):
global alllive_task_timer
if alllive_task_timer is not None:
alllive_task_timer.cancel()
alllive_task_timer = threading.Timer(num, alllive_task, args=(num,))
alllive_task_timer.start()
print("定时任务已启动")
def stop_alllive_task_timer():
global alllive_task_timer
if alllive_task_timer is not None:
alllive_task_timer.cancel()
alllive_task_timer = None
print("定时任务已停止")
def sleep(num):
time.sleep(num)