예제 #1
0
파일: yuhun.py 프로젝트: alpha87/Onmyoji
def run(number):
    """运行"""

    tools = Tools()

    for _ in range(1, number + 1):

        logger.info("任务共 {} 次 | 第 {} 次".format(number, _))
        tools.tap(x=925, y=510, _log="开始,等待任务完成")

        while True:
            tools.capture_screen()
            match_result = tools.match_img(capture_img=tools.paths["screen"],
                                           temp_img=tools.paths["shengli"])
            if match_result:
                tools.tap(700, 400, "胜利!\n")
                tools.sleep(randint(2, 5))
                break
            tools.sleep(3)
예제 #2
0
파일: diyu.py 프로젝트: alpha87/Onmyoji
class DiYu(object):
    __doc__ = "每日地域鬼王,默认使用热门"

    # TODO 重写鬼王代码,尽量每一步都有图片识别,并且能识别场景

    def __init__(self):
        self.tools = Tools()

        # 右上角 筛选
        self.shaixuan = (906, 37)

        # 热门
        self.shoucang = (969, 363)

        # 姑获鸟 (选择第一个)
        self.guhuoniao = (812, 208)

        # 以津真天 (选择第二个)
        self.yijin = (807, 312)

        # 山童 (选择第三个)
        self.shantong = (822, 417)

        # 挑战
        self.tiaozhan = (907, 424)

        # 40级按钮坐标
        self.jibie_40 = (327, 236)

        # 1级按钮坐标
        self.jibie_1 = (102, 241)

    def difficulty_adjustment(self):
        """难度从 40 级调整到 1 级"""

        logger.info("难度从 40 级下调至 1 级")
        self.tools.swipe(self.jibie_40[0], self.jibie_40[1], self.jibie_1[0],
                         self.jibie_1[1])

    def process(self, name):
        # 寻找准备按钮
        self.tools.find_img(path=self.tools.paths["zhunbei"],
                            x=933,
                            y=472,
                            log="点击准备按钮")

        # 寻找胜利(经验页面)按钮
        self.tools.find_img(path=self.tools.paths["qianshengli"],
                            x=416,
                            y=83,
                            log="点击胜利按钮")

        # 寻找胜利图标
        self.tools.find_img(path=self.tools.paths["shengli"],
                            x=700,
                            y=400,
                            log="胜利")

        search_num = 0

        # 寻找进攻按钮的次数,当前设定 3,
        search_total = 3

        while True:
            self.tools.capture_screen()
            # 点击进攻按钮
            match_result = self.tools.match_img(
                capture_img=self.tools.paths["screen"],
                temp_img=self.tools.paths["tiaozhan"])
            if match_result:
                self.tools.tap(925, 88, "退出\n{} - 结束".format(name))
                break

            if search_num == search_total:
                logger.warning("匹配超时,自动跳过当前操作")
                break

            search_num += 1
            logger.debug(f"第{search_num}次匹配图像")
            self.tools.sleep(1)

        self.tools.sleep(4)

    def beat(self):
        # 如果点地域鬼王出现新挑战鬼王,自动关闭
        self.tools.capture_screen()
        _color = self.tools.get_pixel(46, 47)
        logger.debug(f"像素:{_color}")
        if _color == (140, 144, 159):
            self.tools.tap(self.shaixuan[0], self.shaixuan[1])

        self.tools.tap(self.shaixuan[0], self.shaixuan[1], "点击【筛选】")

        self.tools.tap(self.shoucang[0], self.shoucang[1], "点击【热门】")

        self.tools.tap(self.guhuoniao[0], self.guhuoniao[1], "点击【鬼王】")

        self.difficulty_adjustment()

        self.tools.tap(self.tiaozhan[0], self.tiaozhan[1], "点击挑战")

        self.process("鬼王")

        # ------------------------------------------------ #

        self.tools.tap(self.shaixuan[0], self.shaixuan[1], "点击【筛选】")

        self.tools.tap(self.shoucang[0], self.shoucang[1], "点击【热门】")

        self.tools.tap(self.yijin[0], self.yijin[1], "点击【鬼王】")

        self.tools.tap(self.tiaozhan[0], self.tiaozhan[1], "点击挑战")

        self.process("鬼王")

        # ------------------------------------------------ #

        self.tools.tap(self.shaixuan[0], self.shaixuan[1], "点击【筛选】")

        self.tools.tap(self.shoucang[0], self.shoucang[1], "点击【热门】")

        self.tools.tap(self.shantong[0], self.shantong[1], "点击【鬼王】")

        self.tools.tap(self.tiaozhan[0], self.tiaozhan[1], "点击挑战")

        self.process("鬼王")
예제 #3
0
파일: liaotupo.py 프로젝트: alpha87/Onmyoji
class TuPo(object):
    __doc__ = "结界突破。默认每次进攻前失败一次(防止结界突破难度提升)。" \
              "会调用腾讯 AI OCR 接口查询剩余结界券数量。" \
              "请确保阵容是解锁状态。"

    def __init__(self):
        self.tools = Tools()

    @staticmethod
    def shuffle_location():
        """寮结界突破坐标"""

        # 因为攻击胜利会自动补上,所以只需要点第一个位置就可以
        p1 = ((475, 142), (527, 305))
        p2 = ((489, 141), (534, 303))
        p3 = ((531, 138), (512, 302))

        # 随机将上述坐标打乱
        result = [p1, p2, p3, p1, p2, p3]
        shuffle(result)
        return result

    def beat(self, p):
        """进攻操作,包含主动失败退出,正常攻击"""

        # 结界坐标
        x = p[0][0]
        y = p[0][1]

        # 结界对应进攻按钮坐标
        xj = p[1][0]
        yj = p[1][1]

        # 点击结界
        self.tools.tap(x, y, "点击结界")

        # 点击进攻按钮
        while True:
            self.tools.capture_screen()
            match_result = self.tools.match_img(
                capture_img=self.tools.paths["screen"],
                temp_img=self.tools.paths["jingong"])
            if match_result and self.tools.get_pixel(530,
                                                     277) != (173, 170, 156):
                self.tools.tap(xj, yj, "点击进攻按钮")
                break
            else:
                logger.warning("冷却时间未到")
                self.tools.tap(x, y)
                sys.exit(0)
            self.tools.sleep(1)

        # 开始后点击 4 号式神
        click_list = [(662, 314), (659, 333), (658, 352)]
        while True:
            self.tools.capture_screen()
            self.tools.sleep(0.2)
            c = self.tools.get_pixel(431, 568)
            if c == (255, 255, 255):
                x, y = choice(click_list)
                self.tools.tap(x, y, "点击茨林")
                break
            self.tools.sleep(1)

        # 寻找胜利图标
        self.tools.find_img(path=self.tools.paths["shengli"],
                            x=501,
                            y=436,
                            log="胜利")

    def run(self):
        n = 0
        logger.warning("数据库无数据,默认使用本地坐标")
        loc_list = self.shuffle_location()

        for loc in loc_list:
            n += 1
            self.tools.sleep(1)
            logger.info("第{}次突破".format(n))
            self.beat(loc)

            if n == 6:
                break
예제 #4
0
파일: tupo.py 프로젝트: alpha87/Onmyoji
class TuPo(object):
    __doc__ = "结界突破。默认每次进攻前失败一次(防止结界突破难度提升)。" \
              "会调用腾讯 AI OCR 接口查询剩余结界券数量。" \
              "请确保阵容是解锁状态。"

    def __init__(self):
        self.tools = Tools()

    @staticmethod
    def shuffle_location():
        """结界突破九宫格坐标"""

        # 第一个元组是结界按钮,第二个元组是对应进攻按钮
        p1 = ((275, 138), (307, 309))
        p2 = ((546, 141), (574, 309))
        p3 = ((810, 143), (839, 310))
        p4 = ((287, 251), (306, 415))
        p5 = ((553, 254), (574, 419))
        p6 = ((821, 255), (840, 417))
        p7 = ((284, 360), (307, 526))
        p8 = ((538, 361), (573, 526))
        p9 = ((807, 362), (838, 528))

        # 随机将上述坐标打乱
        result = [p1, p2, p3, p4, p5, p6, p7, p8, p9]
        shuffle(result)
        return result

    def beat(self, p):
        """进攻操作,包含主动失败退出,正常攻击"""

        # 结界坐标
        x = p[0][0]
        y = p[0][1]

        # 结界对应进攻按钮坐标
        xj = p[1][0]
        yj = p[1][1]

        num = 2  # 进攻次数 2 次
        n = 0

        for _ in range(num):

            # 点击结界
            self.tools.tap(x, y, "点击结界")

            # 判断结界是否手动操作过
            search_num = 0
            # 寻找进攻按钮的次数,当前设定 3,
            search_total = 3
            while True:
                self.tools.capture_screen()
                # 点击进攻按钮
                match_result = self.tools.match_img(
                    capture_img=self.tools.paths["screen"],
                    temp_img=self.tools.paths["jingong"])
                if match_result:
                    self.tools.tap(xj, yj, "点击进攻按钮")
                    break

                if search_num == search_total:
                    break

                search_num += 1
                logger.debug(f"第{search_num}次匹配图像")

                self.tools.sleep(1)

            if search_num == search_total:
                logger.warning("匹配超时,自动跳过当前操作")
                break

            if n == 0:
                # 寻找退出按钮
                while True:
                    self.tools.capture_screen()
                    match_result = self.tools.match_img(
                        capture_img=self.tools.paths["screen"],
                        temp_img=self.tools.paths["zhunbei"])
                    if match_result:
                        self.tools.tap(28, 26, "找到退出按钮")
                        self.tools.tap(592, 338, "点击退出按钮")
                        self.tools.tap(408, 143, "退出")
                        self.tools.sleep(2)
                        break
                    self.tools.sleep(1)
                n += 1
            else:
                # 寻找准备按钮
                self.tools.find_img(path=self.tools.paths["zhunbei"],
                                    x=933,
                                    y=472,
                                    log="点击准备按钮")

                # 开始后点击 4 号式神
                click_list = [(662, 314), (659, 333), (658, 352)]
                while True:
                    self.tools.capture_screen()
                    self.tools.sleep(0.2)
                    c = self.tools.get_pixel(431, 568)
                    if c == (255, 255, 255):
                        x, y = choice(click_list)
                        self.tools.tap(x, y, "点击茨林")
                        break
                    self.tools.sleep(1)

                # 寻找胜利图标
                self.tools.find_img(path=self.tools.paths["shengli"],
                                    x=501,
                                    y=436,
                                    log="胜利")

    def run(self):
        # 先从数据库获取坐标列表,如果有数据去
        n = 0
        logger.warning("数据库无数据,默认使用本地坐标")
        loc_list = self.shuffle_location()

        for loc in loc_list:
            n += 1
            self.tools.sleep(1)
            logger.success("第{}次突破".format(n))
            self.beat(loc)

            if n in (3, 6, 9):
                self.tools.sleep(1)
                self.tools.tap(167, 483)
                self.tools.sleep(1)
                self.tools.tap(167, 483)

        # 截图识别次数
        if self.tools.capture_png():
            result = self.tools.ocr_api()
            if result < 9:
                logger.warning("不足9次,停止")
                logger.info("任务完成")
            else:
                logger.success("剩余结界突破券:{}".format(result))
                self.run()
        else:
            logger.error("截图失败")