class ActionAgent(object): def __init__(self): self.scr = ImageGrab.grab() self.enter_game() self.state_machine = StateMachine() def _refresh_screen(self): self.scr = ImageGrab.grab() def _click(self, point, delay=0.3): pyautogui.moveTo(point[0], point[1]) time.sleep(delay) pyautogui.click(point[0], point[1]) def activate_stripers(self, number): # Selection by mouse ''' template = Image.open('img_templates/one_striper.jpg') self._refresh_screen() clicks = multi_detector(self.scr, template) clicks = clicks[:1] + [x for x in clicks if abs(x[0] - clicks[0][0]) > 4][:1] #print(clicks) for click in clicks: self._click(click) ''' # selection by hotkeys hotkey = 'F{}'.format(number) pyautogui.keyDown(hotkey) pyautogui.keyUp(hotkey) time.sleep(0.2) self.aproach() def enter_game(self): template = Image.open('img_templates/ico_win_EVE.JPG') click = detector(self.scr, template) self._click(click) def warp_random_belt(self): self._refresh_screen() self.state_machine.get_objects(overview='Mining', n_obj=4) try: list_places = [ x[2] for x in self.state_machine.objects if x[1][:4] == 'Auve' ] go_to = random.choice(list_places) self._click(go_to) self.warp_zero() except: pass def warp_zero(self): ''' template = Image.open('img_templates/warp_zero.jpg') self._refresh_screen() clicks = multi_detector(self.scr, template) self._click(clicks[0]) ''' pyautogui.keyDown('s') pyautogui.keyUp('s') time.sleep(60) def dock(self): pyautogui.keyDown('d') pyautogui.keyUp('d') time.sleep(50) self.state_machine.change_state(1) def aproach(self): ''' template = Image.open('img_templates/aproach.jpg') self._refresh_screen() clicks = multi_detector(self.scr, template) self._click(clicks[0]) ''' pyautogui.keyDown('q') pyautogui.keyUp('q') def target(self): ''' template = Image.open('img_templates/target.jpg') self._refresh_screen() clicks = multi_detector(self.scr, template) self._click(clicks[0]) ''' pyautogui.keyDown('Ctrl') pyautogui.keyUp('Ctrl') def aproach_asteroid(self): self.state_machine.get_objects(overview='Mining', n_obj=10) try: go_to = [ x[2] for x in self.state_machine.objects if x[1] == 'Asteroid' ][0] self._click(go_to) time.sleep(1) self.target() time.sleep(0.3) self.aproach() except: pass def dock_station(self): self.state_machine.get_objects(overview='General') try: go_to = [x[2] for x in self.state_machine.objects][0] self._click(go_to) time.sleep(1) self.dock() time.sleep(40) except: pass def undock(self): # click undock pyautogui.moveTo(1797, 190) time.sleep(0.1) pyautogui.click(1797, 190) time.sleep(30) # click tactical view configuration pyautogui.moveTo(850, 967) time.sleep(0.1) pyautogui.click(850, 967) time.sleep(0.2) pyautogui.moveTo(924, 980) time.sleep(0.1) pyautogui.click(924, 980) def unload(self): # open inventory pyautogui.keyDown('Alt') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('Alt') time.sleep(3) # click on ore hold pyautogui.moveTo(193, 320) time.sleep(0.2) pyautogui.click(193, 320) time.sleep(3) # click ore pyautogui.moveTo(337, 335) time.sleep(0.2) pyautogui.click(337, 335) time.sleep(3) # select all pyautogui.keyDown('Ctrl') pyautogui.keyDown('a') pyautogui.keyUp('a') pyautogui.keyUp('Ctrl') # drag to station pyautogui.mouseDown(337, 335) time.sleep(0.2) pyautogui.moveTo(187, 394) time.sleep(0.2) pyautogui.mouseUp(187, 394) time.sleep(2) # close inventory pyautogui.keyDown('Alt') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('Alt') time.sleep(1) self.state_machine.cargo = 0 def decision_tree(self): self._refresh_screen() if self.state_machine.test_docked(self.scr): if self.state_machine.cargo < 20: self.undock() else: self.unload() else: self.state_machine.check_cargo(self.scr) self.state_machine.read_location(self.scr) if self.state_machine.cargo > 95: self.dock_station() else: if 'Aste' not in self.state_machine.location: self.warp_random_belt() else: if self.state_machine.check_target(self.scr): self.state_machine.check_stripers(self.scr) self.state_machine.check_stripers_half(self.scr) if not self.state_machine.stripers[0]: self.activate_stripers(1) else: if self.state_machine.stripers_half[0]: self.activate_stripers(1) if not self.state_machine.stripers[1]: self.activate_stripers(2) else: if self.state_machine.stripers_half[1]: self.activate_stripers(2) else: self.aproach_asteroid() if not [ x for x in self.state_machine.objects if 'Aste' in x[1] ]: self.warp_random_belt() def run(self): while True: self.decision_tree() pyautogui.moveTo(500, 500) time.sleep(5)