def refresh_hut(self): """ 阴阳寮突破向下滑动 :return: """ logger.info("阴阳寮突破下滑") fail_list = self.screenshot_mutlfind(u"resource/img/enchantment/enchantmentFail.png") attacked = self.screenshot_mutlfind(u"resource/img/enchantment/attacked.png") list = fail_list + attacked fail_size = len(list) if fail_size == 0: logger.info("不存在攻击失败的结界") else: logger.info("寮突破向下移动") x = int((list[0][0][0] + list[0][1][0]) / 2) y = int((list[0][0][1] + list[0][1][1]) / 2) while True: self.window.mouse_drag_distance((x, y), (0, -10)) sense = self.find_imgs( [u"resource/img/enchantment/person.png", u"resource/img/enchantment/slideEnd.png", u"resource/img/enchantment/hutEnchantment.png"]) if sense is not None: if sense[0] == 0: logger.info("找到了可攻击目标") return True elif sense[0] == 1: logger.info("滑动到了底部") return False time.sleep(0.3) else: raise Exception("非寮突破界面")
def on_begin_battle(self, end_method): try: self.begin_battle() except Exception as e: logger.exception(e) finally: logger.info("战斗结束") end_method()
def __init__(self, window): if isinstance(window, str): self.hwnd = FindWindow(win32con.NULL, window) if self.hwnd == 0: raise Exception("未找到该名称的窗口句柄") logger.info("窗口加载成功") else: self.hwnd = window
def change(self): self.time = time() if not Config.isRun: self.battle() else: stop_thread(self.battle_thread) logger.info("手动停止战斗") self.stop()
def check_canbattle_num(self, personal): if personal: if self.screenshot_find("resource/img/enchantment/personZero.png") is not None: logger.info("个人没有结界挑战卷") return True else: if self.screenshot_find("resource/img/enchantment/battleNumZero.png") is not None: logger.info("阴阳寮没有战斗次数") return True return False
def re_in(self): """ 重新进入来刷新阴阳寮的战斗状态 :return: """ logger.info("刷新阴阳寮状态") self.wait_img(u"resource/img/enchantment/enchantment.png") self.click_img(u"resource/img/enchantment/exit.png") time.sleep(1) self.wait_img_click(u"resource/img/enchantment/enchantmentIcon.png", center=True) time.sleep(1) self.wait_img_click(u"resource/img/enchantment/hutButton.png", center=True)
def battle(self): logger.info("开始运行") window = Window(self.hwnd) battle = None if self.battleTypeBox.currentIndex() == 0: battle = Probe(window) else: battle = Enchantment(window) self.battle_thread = _thread.start_new_thread(battle.on_begin_battle, (self.stop, )) Config.isRun = True self.startButton.setText("关闭") self.startButton.setToolTip("点击结束运行")
def start_assist(self): logger.info("启动辅助") hwnd = self.spyLabel.get_select_window() if hwnd is not None: self.parent.hwnd = hwnd self.hide() else: msgBox = QMessageBox(self) msgBox.setWindowTitle('错误') msgBox.setIcon(QMessageBox.Critical) msgBox.setText("先选择阴阳师窗口") msgBox.setStandardButtons(QMessageBox.Close) msgBox.setModal(True) msgBox.show()
def refresh_personal(self): """ 刷新个人突破 :return: """ logger.info("个人突破刷新") pos = self.click_img(u"resource/img/enchantment/refreshButton.png") if pos is None: return False else: self.wait_img_click(u"resource/img/enchantment/refreshPersonal.png") time.sleep(0.2) self.click_img(u"resource/img/okButton.png") return True
def fail_deal(self, teammates_number, captain): """ 战斗失败处理 :return: """ self.click_img(u"resource/img/fail.png") if teammates_number > 0 and captain: sleep(1) if self.screenshot_find(u"resource/img/battleData.png") is not None: logger.info("等待邀请画面") if self.wait_img(u"resource/img/inviteDefatlt.png", 5) is not None: logger.info("需要点击默认邀请") sleep(0.5) self.click_img(u"resource/img/okButton.png", True)
def check_personal(self): """ 检查是个人突破还是阴阳寮突破 :return:个人:True,阴阳寮:False 否则抛出异常 """ time.sleep(1) hut = self.find_imgs( [u"resource/img/enchantment/hutEnchantment.png", u"resource/img/enchantment/defendRecond.png"]) if hut is not None: if hut[0] == 0: logger.info("阴阳寮突破") return False elif hut[0] == 1: logger.info("个人突破") return True else: raise Exception("非结界界面")
def battle(self, teammates_number, captain=False): """ 战斗模块 :return: """ isWin = False logger.info("等待战斗开始") if self.wait_img(u"resource/img/battleLeftTop.png", 120) is not None: logger.info("进入战斗场景") """ 进入了战斗画面 """ self.click_ready() else: raise Exception("进入战斗场景失败") logger.info("等待战斗结束") count = 0 while True: sleep(0.2) pos = self.wait_imgs([u"resource/img/win.png", u"resource/img/fail.png", u"resource/img/guihuo.png"], 10) if pos is not None: count = 0 if pos[0] == 0: logger.info("战斗胜利") isWin = True self.win_deal(teammates_number, captain) break elif pos[0] == 1: logger.info("战斗失败") self.fail_deal(teammates_number, captain) break elif pos[0] == 2: logger.debug("战斗中...") else: count = count + 1 if count > 5: raise Exception("未知战斗场景") return isWin
def battle_self(self): pos = self.wait_img(u"resource/img/four/elcx.png") if pos is not None: logger.info("进入御魂页面") pos = self.click_img(u"resource/img/four/challenge.png", True) if pos is not None: logger.info("开始单人战斗") self.count = self.count + 1 logger.info("第" + str(self.count) + "次御魂") self.battle(0, False)
def win_deal(self, teammates_number, captain): """ 战斗成功处理 :return: """ while self.wait_img_click(u"resource/img/clickToContinue.png", max_time=2) is not None: logger.info("结算后点击") sleep(0.2) if teammates_number > 0: if captain and self.wait_img(u"resource/img/inviteDefatlt.png", max_time=3) is not None: logger.info("需要点击默认邀请") sleep(0.5) if config.getboolean("game", "inviteDefaultMode"): logger.info("默认邀请队友") self.click_img(u"resource/img/check.png", True) sleep(0.5) logger.info("邀请队友") self.click_img(u"resource/img/okButton.png", True)
def wait_teammate(self, img_path, teammates_number, max_time=30 * 1000): """ 等待游戏图像并点击 :param teammates_number: :param max_time: :param self: :param img_path: :return: 成功返回图片位置[left_top,right_bottom],失败返回None """ if teammates_number > 0: logger.info("检查队友") start_time = time() while time() - start_time <= max_time: sleep(1) pos = self.screenshot_mutlfind(img_path) if len(pos) <= 2 - teammates_number: logger.info("队友已就位") return True logger.info("等待队友中...") logger.error("等待队友失败") raise Exception("等待队友失败") else: return True
def click_ready(self): """ 检测并点击开始按钮 :return: """ max_time = 120 start_time = time() while time() - start_time <= max_time: sleep(0.1) pos = self.find_imgs([u"resource/img/needBegin.png", u"resource/img/guihuo.png"]) if pos is not None: if pos[0] == 0: ready_sense = self.find_imgs([u"resource/img/btn_ready.png", u"resource/img/readyed.png"]) if ready_sense is not None: if ready_sense[0] == 0: logger.info("点击ready按钮") self.click_img(u"resource/img/btn_ready.png") elif ready_sense[0] == 1: logger.info("等待队友准备") elif pos[0] == 1: logger.info("战斗已经开始") sleep(0.5) self.check_auto_battle() return
def begin_battle(self): while True: self.wait_img(u"resource/img/enchantment/enchantment.png") logger.info("进入突破页面") personal = self.check_personal() if self.check_canbattle_num(personal): if not personal: logger.info("等待突破次数恢复") time.sleep(hutRecoverTime) logger.info("突破次数恢复继续战斗") self.re_in() else: logger.info("退出挑战") return else: time.sleep(1) pos = self.wait_imgs([u"resource/img/enchantment/person.png", u"resource/img/enchantment/person1.png"], max_time=5) if pos is not None: if pos[0] is not 0 and pos[0] is not 1: logger.info("开始第一次战斗尝试") self.click(pos[0]) time.sleep(0.5) pos = self.wait_img_click(u"resource/img/enchantment/attack.png", center=True) time.time() print(pos) self.battle(0, False) elif pos[1] is not 0: logger.info("开始第一次战斗尝试") self.click(pos[1]) time.sleep(0.5) pos = self.wait_img_click(u"resource/img/enchantment/attack.png", center=True) time.time() print(pos) self.battle(0, False) else: logger.info("不存在未攻击的结界") if self.refresh(personal): logger.info("找到战斗目标继续战斗") else: logger.info("已经全部攻击过") return
# coding=utf-8 import sys from PyQt5.QtWidgets import QApplication, QMainWindow from src.util import permissionUtil from src.util.log import logger from src.window.MainWindow import Ui_MainWindow if __name__ == '__main__': # 创建应用程序和对象 permissionUtil.check_get_permission() logger.info("权限判断结束") app = QApplication(sys.argv) ex = Ui_MainWindow() MainWindow = QMainWindow() ex.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_()) # 系统exit()方法确保应用程序干净的退出 # 的exec_()方法有下划线。因为执行是一个Python关键词。因此,exec_()代替