Esempio n. 1
0
 def wanshiwu(self):
     """万事屋自动领取
     该功能用于万事屋活动。用于自动领取奖励,需要处于庭院或万事屋主界面。
     :return:
     """
     self.module = "万事屋/"
     # 进入万事屋
     self.adb.screenshot()
     self.logger.info("尝试进入万事屋")
     self.match_touch("进入万事屋.png")
     self.mood.mood_sleep()
     self.adb.screenshot()
     self.logger.info("尝试进入事件")
     self.match_touch("进入事件.png")
     self.mood.mood_sleep()
     # 自动领取奖励主循环
     while True:
         self.adb.screenshot()
         # 异常检查
         self._check_()
         # 检测突发状况Buff
         if self.match("事件_突发状况.png"):
             self.logger.info("检测到突发状况Buff")
             self.match_touch(fun.choice(["事件_一键领取.png"]))
         # 检测未关闭的奖励页面
         if self.match("事件_奖励.png"):
             self.match_touch(fun.choice(["事件_一键领取.png"]))
         # 领取循环
         self.mood.mood_sleep()
         self.adb.screenshot()
         if self.match_touch("事件_一键领取.png"):
             self.logger.info("一键领取奖励")
             start = time.time()
             while True:
                 self.mood.mood_sleep()
                 self.adb.screenshot()
                 if self.match("事件_奖励.png"):
                     self.match_touch(fun.choice(["事件_一键领取.png"]))
                     self.logger.info("成功领取奖励")
                     # 检测无法自动领取的奖励
                     # pass
                     self.logger.info("进入等待")
                     break
                 if time.time() - start > 15:
                     self.logger.warning("点击了一键领取奖励,但未检测到奖励页面。")
                     break
             # 等待5-10分钟
             fun.random_time(60 * 5, 60 * 10)
         else:
             self.logger.error("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
Esempio n. 2
0
 def __end__(self, invite=False):
     """
     判断并点击界面跳过结算界面
     :return: 结算结果
     """
     # 等待结束
     while True:
         end_sign = None  # 结算成功标志
         self.adb.screenshot()  # 截图
         # 一旦检测到结算标志进入循环,再次检测不到退出
         while self.match(self.get_module_path("结束标志.png", "公共")) or self.match(
                 self.get_module_path("战斗胜利.png", "公共")) or self.match(self.get_module_path("战斗失败.png", "公共")):
             end_sign = True
             if invite:
                 self.__invite__()
             if self.match(self.get_module_path("战斗失败.png", "公共")):
                 end_sign = False
             end_regions = [
                 [[0.625, 0.9], [0.8, 0.98]],
                 [[0.93, 0.33], [0.98, 0.66]],
             ]
             pos = fun.get_random_pos(*get_ratio_pos(self.adb.screen, *fun.choice(end_regions)))
             self.adb.touch_event(*pos)
             fun.random_time(0.5, 0.8)  # 随机等待
             self.adb.screenshot()  # 截图
         fun.random_time(0.8, 1)  # 随机等待
         if end_sign is not None:  # 结算后跳出结算循环
             self.logger.info("结算成功!")
             return end_sign
Esempio n. 3
0
 def wanshiwu(self):
     self.module = "万事屋/"
     # 进入万事屋
     self.adb.screenshot()
     self.logger.info("尝试进入万事屋!")
     self.match_touch(self.get_module_path("进入万事屋.png"))
     fun.random_time(3, 5)
     self.adb.screenshot()
     self.logger.info("尝试进入事件!")
     self.match_touch(self.get_module_path("进入事件.png"))
     fun.random_time(2, 3.5)
     # 自动领取奖励主循环
     while True:
         self.adb.screenshot()
         # 异常检查
         self.__check__()
         # 检测突发状况Buff
         if self.match(self.get_module_path("事件_突发状况.png")):
             self.logger.info("检测到突发状况Buff")
             self.match_touch(self.get_module_path(fun.choice(["事件_一键领取.png"])))
         # 检测未关闭的奖励页面
         if self.match(self.get_module_path("事件_奖励.png")):
             self.match_touch(self.get_module_path(fun.choice(["事件_一键领取.png"])))
         # 领取循环
         fun.random_time(3, 5)
         self.adb.screenshot()
         if self.match_touch(self.get_module_path("事件_一键领取.png")):
             self.logger.info("一键领取奖励")
             start = time.time()
             while True:
                 fun.random_time(2, 5)
                 self.adb.screenshot()
                 if self.match(self.get_module_path("事件_奖励.png")):
                     self.match_touch(self.get_module_path(fun.choice(["事件_一键领取.png"])))
                     self.logger.info("成功领取奖励")
                     # 检测无法自动领取的奖励
                     # pass
                     self.logger.info("进入等待")
                     break
                 if time.time() - start > 15:
                     self.logger.warning("点击了一键领取奖励,但未检测到奖励页面。")
                     break
             fun.random_time(60 * 5, 60 * 10)
         else:
             self.logger.error("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
Esempio n. 4
0
    def chaoguiwang(self):
        """超鬼王
        该功能用于超鬼王活动。通过挑战单人觉醒刷超鬼王并自动击杀。需要预先配置好觉醒挑战层数和超鬼王阵容。
        可能会因为网络波动而错过检测到超鬼王弹出界面,导致错过该超鬼王,并在该超鬼王存在期间持续挑战觉醒。
        :return:
        """
        self.module = "超鬼王"
        rouse_count = 0
        count = 0
        kyLin = ["火麒麟.png", "风麒麟.png", "水麒麟.png", "雷麒麟.png"]
        self.logger.info("任务: 超鬼王")
        while count < 100:
            self.adb.screenshot()  # 截图
            self.match_touch("觉醒.png", "公共")  # 匹配点击图片
            self.mood.mood_sleep()  # 随机等待
            self.adb.screenshot()  # 截图
            self.match_touch(fun.choice(kyLin))  # 选择列表中随机一个进行点击
            if self._locking_():
                self.logger.info("当前阵容已处于锁定状态")

                # 进入循环挑战觉醒阶段
                self.logger.info("进入循环挑战觉醒阶段")
                while True:
                    self.mood.mood_sleep()  # 随机等待
                    self.adb.screenshot()  # 截图
                    if self.match_touch("发现超鬼王.png"):
                        self.match_touch("发现超鬼王.png")
                        self.logger.info("发现超鬼王")
                        break  # 跳出觉醒循环
                    if self.match_touch("挑战.png", "觉醒"):
                        self.logger.info("开始挑战")
                        # 等待挑战结束
                        if self._end_():
                            rouse_count += 1
                            self.logger.info("当前已进行%s次觉醒" % rouse_count)

                # 进入超鬼王阶段
                self.logger.info("进入超鬼王阶段")
                while True:
                    self.mood.mood_sleep()  # 随机等待
                    self.adb.screenshot()  # 截图
                    while True:
                        self.mood.mood_sleep()  # 随机等待
                        self.adb.screenshot()  # 截图
                        if not self.match_touch("挑战.png"):
                            break
                        self.logger.info("开始挑战超鬼王")
                        # 准备
                        self._ready_()
                        # 等待结束
                        if self._end_():
                            count += 1
                    if self.match_touch("返回.png", "公共"):
                        self.logger.info("击败超鬼王,跳出超鬼王阶段")
                        self.logger.info("当前已击败%s只鬼王" % count)
                        break
Esempio n. 5
0
    def chaoguiwang(self):
        """
        超鬼王功能
        :return:
        """
        self.module = "超鬼王"
        rouse_count = 0
        count = 0
        kyLin = ["火麒麟.png", "风麒麟.png", "水麒麟.png", "雷麒麟.png"]
        self.logger.info("任务: 超鬼王")
        while count < 100:
            self.adb.screenshot()  # 截图
            self.match_touch(self.get_module_path("觉醒.png", "公共"))  # 匹配点击图片
            fun.random_time(1, 1.8)  # 随机等待
            self.adb.screenshot()  # 截图
            self.match_touch(fun.choice(kyLin))  # 选择列表中随机一个进行点击
            if self.__locking__():
                self.logger.info("当前阵容已处于锁定状态")

                # 进入循环挑战觉醒阶段
                self.logger.info("进入循环挑战觉醒阶段")
                while True:
                    fun.random_time(0.8, 1.3)  # 随机等待
                    self.adb.screenshot()  # 截图
                    if self.match_touch(self.get_module_path("发现超鬼王.png")):
                        self.match_touch(self.get_module_path("发现超鬼王.png"))
                        self.logger.info("发现超鬼王")
                        break  # 跳出觉醒循环
                    if self.match_touch(self.get_module_path("挑战.png", "觉醒")):
                        self.logger.info("开始挑战!")
                        # 等待挑战结束
                        if self.__end__():
                            rouse_count += 1
                            self.logger.info("当前已进行%s次觉醒!" % rouse_count)

                # 进入超鬼王阶段
                self.logger.info("进入超鬼王阶段")
                while True:
                    fun.random_time(1.3, 1.8)  # 随机等待
                    self.adb.screenshot()  # 截图
                    while True:
                        fun.random_time(0.8, 1.3)  # 随机等待
                        self.adb.screenshot()  # 截图
                        if not self.match_touch(self.get_module_path("挑战.png")):
                            break
                        self.logger.info("开始挑战超鬼王!")
                        # 准备
                        self.__ready__()
                        # 等待结束
                        if self.__end__():
                            count += 1
                    if self.match_touch(self.get_module_path("返回.png", "公共")):
                        self.logger.info("击败超鬼王!跳出超鬼王阶段")
                        self.logger.info("当前已击败%s只鬼王!" % count)
                        break
Esempio n. 6
0
 def _end_(self, invite=False):
     """
     判断并点击界面跳过结算界面(旧版本宝箱结算)
     :return: 结算结果
     """
     # 等待结束
     while True:
         end_sign = None  # 结算成功标志
         self.adb.screenshot()  # 截图
         # 一旦检测到结算标志进入循环,再次检测不到退出
         while self.matchs(
                 ("战斗胜利.png", "公共"),
                 ("战斗失败.png", "公共"),
                 ("结束标志.png", "公共"),
                 ("贪吃鬼.png", "公共"),
                 ("宝箱.png", "公共"),
                 ("宝箱2.png", "公共"),
         ):
             self.logger.info("检测到结算页面")
             end_sign = True
             # 默认邀请队友
             if invite:
                 if self._invite_():
                     break
             if self.match("战斗失败.png", "公共"):
                 self.logger.info("检测到战斗失败")
                 end_sign = False
             end_regions = [
                 [[0.625, 0.9], [0.8, 0.98]],
                 [[0.93, 0.33], [0.98, 0.66]],
             ]
             pos = fun.get_random_pos(*Match.get_ratio_pos(self.adb.screen, *fun.choice(end_regions)))
             self.logger.info(f"点击屏幕:{pos}")
             self.adb.click(pos)
             self.mood.mood_sleep()  # 随机等待
             self.adb.screenshot()  # 截图
         self.mood.mood_sleep()  # 随机等待
         if end_sign is not None:  # 结算后跳出结算循环
             self.logger.info("结算成功")
             return end_sign