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!!!")
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
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)
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!!!")
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))
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)