Beispiel #1
0
def launch():
    if ui_util.get_new_capture() is not None:
        common_util.execute_shell("open /Applications/命运-冠位指定.app")
        print("game has launched")
        return
    count = 0
    while ui_util.get_new_capture() is None:
        print("try launch {}".format(count + 1))
        common_util.execute_shell("open /Applications/命运-冠位指定.app")
        count = count + 1
        if count > 5:
            print("error!!! cant launch game!!!")
            raise Exception()
        time.sleep(4)
    common_util.wait_for(resources.launch_first_step_click_screen, step=5, max_count=10)
    if not ui_util.match_and_click(resources.launch_first_step_click_screen):
        print("error!!! cant enter game")
        raise Exception()
    common_util.wait_for(resources.launch_second_step_game_slogen, step=5, max_count=10)
    count = 0
    while ui_util.match_and_click(resources.launch_second_step_game_slogen):
        count = count + 1
        if count > 10:
            print("error!!! login error")
            raise Exception()
        time.sleep(5)
    common_util.wait_for(resources.launch_game_post)
    ui_util.match_and_click(resources.launch_game_post_close_button)
    print("launch finish!!!")
Beispiel #2
0
 def execute(self):
     _wait_for(resources.battle_attack_button)
     # if self.use_skill:
     #     skill_list = [resources.skill_single_np_up, resources.skill_single_defense_up,
     #                   resources.skill_single_attack_up]
     #     skill_used_state = ServantClickedStatusDialogState()
     #     for skill in skill_list:
     #         if skill_used_state.match(ui_util.get_new_capture()):
     #             skill_used_state.execute()
     #         _wait_for(resources.battle_attack_button)
     #         ui_util.match_and_click(skill, match_threshold=0.9)
     #     if skill_used_state.match(ui_util.get_new_capture()):
     #         skill_used_state.execute()
     # _wait_for(resources.battle_attack_button)
     max_val, tl_loc, br_loc = cv_util.match_template(
         resources.np_progress_full, ui_util.get_new_capture())
     print("match baoju", max_val, tl_loc, br_loc, config.window_size)
     baoju_position = -1
     if max_val > 0.9:
         center_x = (br_loc[0] + tl_loc[0]) / 2
         window_w = config.window_size[0]
         if window_w is not None and window_w > 0:
             p = center_x / window_w
             print(property)
             if p < 1 / 4:
                 baoju_position = 0
             elif p < 2 / 4:
                 baoju_position = 1
             elif p < 3 / 4:
                 baoju_position = 2
     print("baoju rsult ", baoju_position)
     ui_util.match_and_click(resources.battle_attack_button)
     time.sleep(3)
     _wait_for(resources.battle_speed_set_button)
     while cv_util.has_match(resources.battle_speed_set_button,
                             ui_util.get_new_capture()):
         if baoju_position != -1:
             position_set = [(250, 250), (400, 250), (550, 250)]
             ui_util.click(
                 position_set[baoju_position][0] +
                 random.randrange(-10, 10),
                 position_set[baoju_position][1] +
                 random.randrange(-10, 10))
             baoju_position = -1
             time.sleep(3)
         for card in [
                 resources.action_buster, resources.action_arts,
                 resources.action_quick
         ]:
             if ui_util.match_and_click(card):
                 time.sleep(3)
                 break
Beispiel #3
0
 def execute(self):
     for runner in self.runner_list:
         runner.run(ui_util.get_new_capture())
     if not self.last_turn:
         time.sleep(5)
         _wait_for(resources.battle_attack_button, step=4)
     else:
         time.sleep(10)
Beispiel #4
0
def go_to_exp():
    if cv_util.has_match(resources.daily_task_title, ui_util.get_new_capture()):
        return
    common_util.wait_for(resources.launch_chaldea_gate)
    ui_util.match_and_click(resources.launch_chaldea_gate)
    common_util.wait_for(resources.launch_daily_task)
    ui_util.match_and_click(resources.launch_daily_task)
    common_util.wait_for(resources.launch_exp_ap_40_unpass, extra_resources=[resources.launch_exp_ap_40_passed])
    for t in [resources.launch_exp_ap_40_passed, resources.launch_exp_ap_40_unpass]:
        if ui_util.match_and_click(t):
            break
    print("go to exp finished!!!")
Beispiel #5
0
def battle(battle_state_list, battle_count=None, apple_count=None):
    if battle_count is None and apple_count is None:
        print("please select battleCount or appleCount")
        return
    battle_count_local = 0
    apple_count_local = 0
    try:
        running = True
        while running:
            for state in battle_state_list:
                capture = ui_util.get_new_capture()
                if state.accept(capture):
                    if isinstance(state, SelectFriendState):
                        battle_count_local = battle_count_local + 1
                        common_util.write_log("start battle {}/{}".format(
                            battle_count_local, battle_count))
                    if isinstance(state, AppleEatState):
                        apple_count_local = apple_count_local + 1
                        common_util.write_log("eat apple {}/{}".format(
                            apple_count_local, apple_count))
                    if isinstance(state, BattleSettleConfirmState):
                        common_util.write_log("finish battle {}/{}".format(
                            battle_count_local, battle_count))
                        if battle_count is not None and battle_count_local >= battle_count:
                            running = False
                            break
                        if apple_count is not None and apple_count_local >= apple_count:
                            running = False
                            break
                    state.execute()
                    time.sleep(1)
    except StopBattleException:
        common_util.write_log(
            "stop battle {}/{}(apple {}/{}) by StopBattleException".format(
                battle_count_local, battle_count, apple_count_local,
                apple_count))
Beispiel #6
0
 def run(self, capture_path):
     common_util.delete_file(capture_path)
     common_util.write_log("use skill")
     _wait_for(self.skill_template)
     capture_path = ui_util.get_new_capture()
     max_val, tl_loc, br_loc = cv_util.match_template(
         self.skill_template, capture_path)
     common_util.delete_file(capture_path)
     if max_val < 0.6:
         return
     left, top, right, bottom = tl_loc[0], tl_loc[1], br_loc[0], br_loc[1]
     width = right - left
     item_width = width / 3
     center_y = (top + bottom) / 2
     for index in self.skill_index:
         x = left + item_width * (index - 1) + item_width / 2
         random_x = random.Random().randrange(start=-10, stop=10)
         random_y = random.Random().randrange(start=-10, stop=10)
         common_util.write_log(
             "click skill {}, origin_position = ({}, {}), random_delta = ({}, {})"
             .format(index, x, center_y, random_x, random_y))
         ui_util.click(x + random_x, center_y + random_y)
         time.sleep(2)
         _wait_for(resources.battle_attack_button)