def battle(): while not elp.find("continue.png", crop_from=Coord(630, 480), crop_to=Coord(780, 550)): if is_dock_full(): retire_ship() elp.tap(Button.AUTO_SEARCH) elp.wait(1.5)
def __handle_end_battle(self): while (not Elp.find('trust_meter', crop_from=Coord(822, 443), crop_to=Coord(880, 516)) and not Elp.find('lvlup', crop_from=Coord(652, 316), crop_to=Coord(844, 416))): Elp.wait(1.5) Elp.tap(self.BUTTONS['center']) Elp.tap(self.BUTTONS['center']) Elp.wait_until_find('home')
def retire_ship(): print("Retiring ship...") elp.wait(0.75) elp.tap(Button.SORT, 1.7, randomize=False) elp.wait_until_find("qr.png") elp.wait(1) elp.tap(Button.QR, randomize=False) elp.tap(Coord(808, 598)) # confirm2 elp.tap(Coord(630, 484)) # confirm >=elite elp.tap(Coord(785, 621)) # Tap to continue elp.tap(Coord(765, 511)) # confirm3 elp.tap(Button.DISASSEMBLE) elp.tap(Coord(785, 621)) # Tap to continue elp.tap(Button.BACK) wait_until_main()
def start(): elp = Elp(find_path="./assets") if not elp.find("combat.png"): print("going home") elp.tap(buttons["home1"]) elp.tap(buttons["home2"]) elp.tap(buttons["combat_skadi"]) elp.wait(1.5) elp.tap(buttons["operation_map"]) gt_5 = True gt_5_count = 0 try: while True: current_map = buttons["gt_5"] if gt_5 else buttons["gt_6"] elp.tap(current_map) if not elp.find("auto_enabled.png"): elp.tap(buttons["auto_deploy"]) elp.tap(buttons["start_battle1"], 2.5) elp.tap(buttons["start_battle2"]) elp.wait(35) elp.wait_until_find("trust.png") elp.tap(Coord(512, 512)) elp.wait(7.5) elp.tap(buttons["back"]) if gt_5: gt_5_count += 1 if gt_5 and gt_5_count == 2: gt_5 = not gt_5 gt_5_count = 0 elif not gt_5: gt_5 = not gt_5 except KeyboardInterrupt: print("done.")
class Button: BACK = Coord(50, 45) GO_1 = Coord(759, 487) GO_2 = Coord(864, 554) DISASSEMBLE = Coord(640, 530) SORT = Coord(345, 500) QR = Coord(614, 669) AUTO_SEARCH = Coord(1000, 590) CONTINUE = Coord(700, 520)
def find_stage(self, stage): current_stages = self.__find_stage_boxes(stage) if stage.name not in current_stages: current_stages = [ int(x.split('-')[1]) for x in list(current_stages.keys()) ] stage_level = int(stage.level) swipe_modifier = 0.25 try: if stage_level > max(current_stages): swipe_modifier = swipe_modifier * (stage_level - max(current_stages)) Elp.swipe(Coord(640, 360), Coord(640 - (640 * swipe_modifier), 360), delay=3.5) elif stage_level < min(current_stages): swipe_modifier = swipe_modifier * (min(current_stages) - stage_level) Elp.swipe(Coord(640, 360), Coord(640 + (640 * swipe_modifier), 360), delay=3.5) return self.find_stage(stage) except ValueError: Elp.swipe(Coord(640, 360), Coord(randint(0, 1280), 360), delay=3.5) return self.find_stage(stage) else: return current_stages[stage.name]
class CombatHandler: BUTTONS = { 'home1': Coord(270, 38), 'home2': Coord(90, 283), 'combat': Coord(995, 200), 'combat2': Coord(535, 185), 'next_chp': Coord(1185, 665), 'prev_chp': Coord(980, 665), 'auto_toggle': Coord(1150, 600), 'start1': Coord(1142, 665), 'start2': Coord(1105, 505), 'refill': Coord(1100, 575), 'center': Coord(720, 360), 'chips': Coord(400, 650), 'supplies': Coord(250, 650) } def __init__(self, task=None, refill=0, manual=0): self.task = task self.refill = refill self.manual = manual def __enter_battle(self): Elp.tap(self.BUTTONS['start1'], delay=3) if Elp.find('sanity_out', sim_to=0.75): Logger.log('You ran out of sanity') if self.refill <= 0: self.terminate() Logger.log('Refilling sanity...') Elp.tap(self.BUTTONS['refill'], delay=2.6) Elp.tap(self.BUTTONS['start1']) self.refill -= 1 Elp.wait_until_find('mission_start') Elp.tap(self.BUTTONS['start2']) def __enter_stage(self): if stage.classifier == 'supplies' or stage.classifier == 'chips': if not stage.isopen: Logger.log(f'{stage.name.upper()} is currently not open', mode='warn') return False Elp.tap(self.BUTTONS[stage.classifier]) op_coord = Elp.find(f'daily_resources/{stage.opcode}', sim_from=0.98, sim_to=0.9) Elp.tap(op_coord) Elp.tap(stage.coord) elif stage.classifier == 'event': Logger.log( 'Event stages are not implemented yet. Use manual mode instead', mode='warn') return False else: Elp.tap(self.BUTTONS['combat'], delay=3.5) current_chapter = Elp.find_current_chapter() target_chapter = int(stage.chapter) for _ in range(abs(target_chapter - current_chapter)): if target_chapter > current_chapter: Elp.tap(self.BUTTONS['next_chp'], delay=3) else: Elp.tap(self.BUTTONS['prev_chp'], delay=3) stage_coord = Elp.find_stage(stage) Elp.tap(stage_coord, random_radius=5) if Elp.find('auto_off', sim_from=0.9, sim_to=0.8): Elp.tap(self.BUTTONS['auto_toggle']) if Elp.find('auto_off', sim_from=0.9, sim_to=0.8): Logger.log( "You don't have auto enabled for this stage! Skipping...", mode='warn') return False return True def __handle_end_battle(self): while (not Elp.find('trust_meter', crop_from=Coord(822, 443), crop_to=Coord(880, 516)) and not Elp.find('lvlup', crop_from=Coord(652, 316), crop_to=Coord(844, 416))): Elp.wait(1.5) Elp.tap(self.BUTTONS['center']) Elp.tap(self.BUTTONS['center']) Elp.wait_until_find('home') def terminate(self, code=0): if self.task: Logger.log('Saving task...') Elp.save_task(self.task) Logger.log('Exitting...') Elp.exit(code) def start(self): if self.manual == 0: if not Elp.find('combat'): Elp.tap(self.BUTTONS['home1']) Elp.tap(self.BUTTONS['combat2']) else: Elp.tap(self.BUTTONS['combat']) Elp.wait_until_find('home') try: if self.manual > 0: Logger.log("Waiting for you to enter a stage...") Elp.wait_until_find('exit_battle') Logger.log("Entered a stage") self.__handle_end_battle() self.manual -= 1 while self.manual > 0: self.__enter_battle() self.__handle_end_battle() self.manual -= 1 else: for stage in list(self.task.keys()): Logger.log( f'Doing {stage.name} run for {self.task[stage]} time(s)' ) if not self.__enter_stage(): continue while self.task[stage] > 0: self.__enter_battle() self.__handle_end_battle() self.task[stage] -= 1 Elp.tap(self.BUTTONS['home1']) Elp.tap(self.BUTTONS['combat2']) del (self.task[stage]) Logger.log('Completed all task') Logger.log('Exiting...') except KeyboardInterrupt: self.terminate() except Exception as e: Logger.log('Something went horribly wrong', mode='error') self.terminate(1)
from gacha_elper.elper import Elper as Elp from gacha_elper.elper import Coordinate as Coord buttons = { "home1": Coord(215, 30), "home2": Coord(73, 230), "back": Coord(70, 35), "combat_skadi": Coord(927, 255), "operation_map": Coord(766, 385), "gt_5": Coord(682, 376), "gt_6": Coord(774, 282), "auto_deploy": Coord(919, 616), "start_battle1": Coord(913, 666), "start_battle2": Coord(888, 475), } def start(): elp = Elp(find_path="./assets") if not elp.find("combat.png"): print("going home") elp.tap(buttons["home1"]) elp.tap(buttons["home2"]) elp.tap(buttons["combat_skadi"]) elp.wait(1.5) elp.tap(buttons["operation_map"]) gt_5 = True gt_5_count = 0 try: while True: current_map = buttons["gt_5"] if gt_5 else buttons["gt_6"]
def is_dock_full(): return elp.find("sort.png", crop_from=Coord(273, 444), crop_to=Coord(430, 510))
def wait_until_main(): elp.wait_until_find("auto_search.png", crop_from=Coord(930, 530), crop_to=Coord(1024, 630))