示例#1
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
示例#2
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("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
示例#3
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
示例#4
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("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
示例#5
0
 def yeyuanhuo(self, tan=0, zen=0, chi=0):
     self.module = "业原火"
     self.logger.info("任务: " + self.module)
     option = list("贪嗔痴")
     options = {"贪": int(tan), "嗔": int(zen), "痴": int(chi)}
     for category in option:
         self.logger.info("%s\t%s" % (category, options[category]))
     self.adb.screenshot()
     # 进入业原火界面
     for i in range(5):
         if self.match_touch(self.get_module_path("探索.png", "主页")):
             self.logger.info("进入探索页面")
             fun.random_time(4, 5)
             self.adb.screenshot()
             if self.match_touch(self.get_module_path("御魂.png", "公共")):
                 self.logger.info("进入御魂页面")
                 fun.random_time(1.5, 3)
                 pos = get_ratio_pos(self.adb.screen, [0.6, 0.3], [0.8, .75])
                 self.logger.info(pos)
                 self.adb.touch_event(*pos)
                 self.logger.info("进入业原火页面")
                 break
     # 检查是否锁定阵容
     self.__locking__()
     # 开始业原火流程
     for category in option:
         count = options[category]
         if count:
             if self.match_touch(self.get_module_path("%s.png" % category)):
                 self.logger.info("切换至" + category)
             i = 0
             while i < count:
                 if self.__combat__():
                     i += 1
                     self.logger.info("当前为第%s次%s" % (i, category))
             self.logger.info("总共进行了%s次%s" % (i, category))
示例#6
0
 def jiejie(self):
     """
     结界突破功能
     :return:
     """
     self.module = "结界"
     self.logger.info("任务: 结界突破")
     # 结界对象大小
     jiejie_object_width = 455
     jiejie_object_height = 160
     while True:
         self.adb.screenshot()
         # 检查是否在结界界面
         if not (self.match(self.get_module_path("突破标志.png")) or self.match(self.get_module_path("突破标志.png"))):
             self.logger.warning("当前不在结界界面")
             if self.match_touch(self.get_module_path("结界突破.png", "公共")):
                 self.logger.info("已自动进入结界突破界面")
                 self.adb.screenshot()
             else:
                 self.logger.error("无法进入结界突破界面,任务停止")
                 break
         # 匹配目标
         screen = self.adb.screen
         self.adb.threshold = 0.98
         # 判断当前次数
         if self.match(self.get_img(self.get_module_path("寮次数.png"))):
             self.logger.warning("突破次数不足!")
             fun.random_time(1500, 2000)
         self.adb.threshold = 0.9
         self.logger.info("获取结界目标")
         pos_list = get_match_pos(self.adb.screen, self.get_img(self.get_module_path("突破对象标志.png")), 0.92)
         if pos_list:
             self.logger.info("获取到{}个结界目标".format(len(pos_list)))
             # 开始遍历结界目标
             for pos in pos_list:
                 self.adb.screenshot()
                 if not self.match_touch(self.get_module_path("宝箱.png", "公共")):
                     self.match_touch(self.get_module_path("宝箱2.png", "公共"))
                 pos_begin = (pos[1][0] - jiejie_object_width, pos[1][1] - jiejie_object_height)
                 pos_end = pos[1]
                 self.logger.info("开始节点:{}结束节点:{}".format(pos_begin, pos_end))
                 # 判断坐标真实有效,排除显示不全的目标
                 if pos_begin[0] > 0 and pos_begin[1] > 0:
                     jiejie_img = screen[pos_begin[1]:pos_end[1], pos_begin[0]:pos_end[0]]
                     show_img(jiejie_img, time=800)
                     if match(jiejie_img, self.get_img(self.get_module_path("败北.png"))):
                         self.logger.info("目标状态:败北")
                     elif match(jiejie_img, self.get_img(self.get_module_path("击破.png"))):
                         self.logger.info("目标状态:击破")
                     else:
                         self.logger.info("目标状态:未突破")
                         self.adb.touch_event(*fun.get_random_pos(*pos))  # ####
                         fun.random_time(1.2, 1.8)
                         self.adb.screenshot()
                         if self.match_touch(self.get_module_path("进攻.png")):
                             self.logger.info("开始突破")
                             self.adb.screenshot()
                             if self.__box_end__():
                                 self.logger.info("突破成功")
                                 fun.random_time(2.5, 3)
                                 break
                             else:
                                 self.logger.info("突破失败")
                         else:
                             self.logger.info("未检测到结界挑战页面")
                 else:
                     self.logger.warning("无效的坐标")
             # 遍历完后滑动列表
             else:
                 self.adb.slide_event(1200, 875, dc="u", distance=700)
                 fun.random_time(0.5, 1)
         else:
             self.logger.warning("未获取到结界目标")