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("非寮突破界面")
Exemple #2
0
 def on_begin_battle(self, end_method):
     try:
         self.begin_battle()
     except Exception as e:
         logger.exception(e)
     finally:
         logger.info("战斗结束")
         end_method()
Exemple #3
0
 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
Exemple #4
0
 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)
Exemple #7
0
 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("点击结束运行")
Exemple #8
0
 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
Exemple #10
0
 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("非结界界面")
Exemple #12
0
 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
Exemple #13
0
 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)
Exemple #14
0
 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)
Exemple #15
0
 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
Exemple #16
0
 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
Exemple #18
0
# 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_()代替