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
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("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
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
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("不在程序运行所需场景,请切换至{万事屋=>事件}场景。")
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))
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("未获取到结界目标")