├── .gitignore ├── LICENSE.md ├── README.md ├── image_bot ├── controller.py ├── needles │ ├── earthstation_start_1.png │ ├── earthstation_start_10.png │ ├── earthstation_start_11.png │ ├── earthstation_start_12.png │ ├── earthstation_start_13.png │ ├── earthstation_start_14.png │ ├── earthstation_start_15.png │ ├── earthstation_start_16.png │ ├── earthstation_start_2.png │ ├── earthstation_start_3.png │ ├── earthstation_start_4.png │ ├── earthstation_start_5.png │ ├── earthstation_start_6.png │ ├── earthstation_start_7.png │ ├── earthstation_start_8.png │ ├── earthstation_start_9.png │ ├── lokistation_start_1.png │ ├── lokistation_start_10.png │ ├── lokistation_start_11.png │ ├── lokistation_start_12.png │ ├── lokistation_start_13.png │ ├── lokistation_start_14.png │ ├── lokistation_start_15.png │ ├── lokistation_start_16.png │ ├── lokistation_start_17.png │ ├── lokistation_start_18.png │ ├── lokistation_start_19.png │ ├── lokistation_start_2.png │ ├── lokistation_start_20.png │ ├── lokistation_start_21.png │ ├── lokistation_start_22.png │ ├── lokistation_start_3.png │ ├── lokistation_start_4.png │ ├── lokistation_start_5.png │ ├── lokistation_start_6.png │ ├── lokistation_start_7.png │ ├── lokistation_start_8.png │ └── lokistation_start_9.png ├── playback.py ├── recorder.py └── recordings │ ├── earthstation_do_trading.json │ ├── earthstation_goto_lokistation.json │ ├── earthstation_goto_ship.json │ ├── earthstation_goto_trader.json │ ├── earthstation_start_1.json │ ├── earthstation_start_10.json │ ├── earthstation_start_11.json │ ├── earthstation_start_12.json │ ├── earthstation_start_13.json │ ├── earthstation_start_14.json │ ├── earthstation_start_15.json │ ├── earthstation_start_16.json │ ├── earthstation_start_2.json │ ├── earthstation_start_3.json │ ├── earthstation_start_4.json │ ├── earthstation_start_5.json │ ├── earthstation_start_6.json │ ├── earthstation_start_7.json │ ├── earthstation_start_8.json │ ├── earthstation_start_9.json │ ├── lokistation_do_trading.json │ ├── lokistation_goto_earthstation.json │ ├── lokistation_goto_ship.json │ ├── lokistation_goto_trader.json │ ├── lokistation_start_1.json │ ├── lokistation_start_10.json │ ├── lokistation_start_11.json │ ├── lokistation_start_12.json │ ├── lokistation_start_13.json │ ├── lokistation_start_14.json │ ├── lokistation_start_15.json │ ├── lokistation_start_16.json │ ├── lokistation_start_17.json │ ├── lokistation_start_18.json │ ├── lokistation_start_19.json │ ├── lokistation_start_2.json │ ├── lokistation_start_20.json │ ├── lokistation_start_21.json │ ├── lokistation_start_22.json │ ├── lokistation_start_3.json │ ├── lokistation_start_4.json │ ├── lokistation_start_5.json │ ├── lokistation_start_6.json │ ├── lokistation_start_7.json │ ├── lokistation_start_8.json │ └── lokistation_start_9.json ├── recording_bot ├── playback.py ├── recorder.py └── recordings │ ├── actions_test_01.json │ ├── earthstation_do_trading.json │ ├── earthstation_goto_lokistation.json │ ├── earthstation_goto_ship.json │ └── earthstation_goto_trader.json └── timing_bot └── main.py /.gitignore: -------------------------------------------------------------------------------- 1 | /enb_bot 2 | /.vscode 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Ben Johnson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyAutoGUI Video Game Bot Tutorial 2 | 3 | Source code for the PyAutoGUI tutorial series on the **Learn Code By Gaming** YouTube channel. 4 | 5 | - Video 1 & 2: Timing Bot 6 | - Video 3: Recording Bot 7 | - Video 4: Image Bot 8 | 9 | Watch the tutorial here: https://www.youtube.com/playlist?list=PL1m2M8LQlzfJDe1xV1py5EusLt8FFzhMA 10 | -------------------------------------------------------------------------------- /image_bot/controller.py: -------------------------------------------------------------------------------- 1 | from playback import initializePyAutoGUI, countdownTimer, playActions 2 | from time import sleep 3 | import pyautogui 4 | import os 5 | 6 | 7 | def main(): 8 | 9 | initializePyAutoGUI() 10 | countdownTimer() 11 | 12 | # This trade loop begins by docking at Loki Station 13 | LOOP_REPITITIONS = 3 14 | for i in range(0, LOOP_REPITITIONS): 15 | 16 | if i > 0: 17 | # Wait for station to load 18 | sleep(10.00) 19 | 20 | # Start docked at Loki Station, get to our universal starting position 21 | # get_starting_pos() should return an integer that corresponds with which 22 | # recorded action script should be played 23 | starting_pos = get_starting_pos("loki") 24 | try: 25 | action_filename = "lokistation_start_{}.json".format(starting_pos) 26 | playActions(action_filename) 27 | except FileNotFoundError as e: 28 | if not starting_pos: 29 | print("Starting position not recognized in Loki") 30 | else: 31 | print("No recorded actions for position {}".format(starting_pos)) 32 | exit(0) 33 | else: 34 | print("Played starting actions {}".format(action_filename)) 35 | sleep(2.00) 36 | 37 | # Confirm we're at the correct starting position 38 | confirmPosition("lokistation_starting_pos") 39 | 40 | # Playback those four steps to go to the trader, do the buying/selling, 41 | # go back to the ship, fly to Earth Station 42 | playActions("lokistation_goto_trader.json") 43 | sleep(2.00) 44 | playActions("lokistation_do_trading.json") 45 | sleep(2.00) 46 | confirmPosition("lokistation_done_trading") 47 | playActions("lokistation_goto_ship.json") 48 | sleep(10.00) # allow time for loading screen when exiting station 49 | playActions("lokistation_goto_earthstation.json") 50 | 51 | # Wait for station to load 52 | sleep(10.00) 53 | 54 | # Now docked at Earth Station, get to that starting position 55 | # get_starting_pos() should return an integer that corresponds with which 56 | # recorded action script should be played 57 | starting_pos = get_starting_pos("earth") 58 | try: 59 | action_filename = "earthstation_start_{}.json".format(starting_pos) 60 | playActions(action_filename) 61 | except FileNotFoundError as e: 62 | if not starting_pos: 63 | print("Starting position not recognized in Earth") 64 | else: 65 | print("No recorded actions for position {}".format(starting_pos)) 66 | exit(0) 67 | else: 68 | print("Played starting actions {}".format(action_filename)) 69 | sleep(2.00) 70 | 71 | # Playback four steps to go to the trader, do the buying/selling, 72 | # go back to the ship, fly to Loki Station 73 | playActions("earthstation_goto_trader.json") 74 | sleep(2.00) 75 | playActions("earthstation_do_trading.json") 76 | sleep(2.00) 77 | playActions("earthstation_goto_ship.json") 78 | sleep(10.00) # allow time for loading screen when exiting station 79 | playActions("earthstation_goto_lokistation.json") 80 | 81 | # Completed loop 82 | print("Completed loop") 83 | 84 | print("Done") 85 | 86 | 87 | def get_starting_pos(station): 88 | # set the list of images we are trying to match 89 | if station == 'loki': 90 | images_to_check = [ 91 | 'lokistation_start_1.png', 92 | 'lokistation_start_2.png', 93 | 'lokistation_start_3.png', 94 | 'lokistation_start_4.png', 95 | 'lokistation_start_5.png', 96 | 'lokistation_start_6.png', 97 | 'lokistation_start_7.png', 98 | 'lokistation_start_8.png', 99 | 'lokistation_start_9.png', 100 | 'lokistation_start_10.png', 101 | 'lokistation_start_11.png', 102 | 'lokistation_start_12.png', 103 | 'lokistation_start_13.png', 104 | 'lokistation_start_14.png', 105 | 'lokistation_start_15.png', 106 | 'lokistation_start_16.png', 107 | 'lokistation_start_17.png', 108 | 'lokistation_start_18.png', 109 | 'lokistation_start_19.png', 110 | ] 111 | elif station == 'earth': 112 | images_to_check = [ 113 | 'earthstation_start_1.png', 114 | 'earthstation_start_2.png', 115 | 'earthstation_start_3.png', 116 | 'earthstation_start_4.png', 117 | 'earthstation_start_5.png', 118 | 'earthstation_start_6.png', 119 | 'earthstation_start_7.png', 120 | 'earthstation_start_8.png', 121 | 'earthstation_start_9.png', 122 | 'earthstation_start_10.png', 123 | 'earthstation_start_11.png', 124 | 'earthstation_start_12.png', 125 | 'earthstation_start_13.png', 126 | 'earthstation_start_14.png', 127 | 'earthstation_start_15.png', 128 | ] 129 | 130 | # loop over images until one is found, then return the index of the found 131 | # image 132 | for index, image_filename in enumerate(images_to_check): 133 | script_dir = os.path.dirname(__file__) 134 | needle_path = os.path.join( 135 | script_dir, 136 | 'needles', 137 | image_filename 138 | ) 139 | image_pos = pyautogui.locateOnScreen(needle_path) 140 | if image_pos: 141 | return index + 1 142 | 143 | return None 144 | 145 | 146 | def confirmPosition(position_name): 147 | 148 | if position_name == "lokistation_starting_pos": 149 | x, y = (898, 153) 150 | rgb = (172, 178, 41) 151 | elif position_name == "lokistation_done_trading": 152 | x, y = (450, 296) 153 | rgb = (79, 78, 13) 154 | else: 155 | raise Exception("Position to confirm not recognized") 156 | 157 | pixel_matches = pyautogui.pixelMatchesColor(x, y, rgb, tolerance=10) 158 | if not pixel_matches: 159 | debug_str = "Pos: {} RGB expected: {} RGB found: {}".format( 160 | (x, y), 161 | rgb, 162 | pyautogui.pixel(x, y) 163 | ) 164 | raise Exception("Detected off course for {}. Debug: {}".format( 165 | position_name, 166 | debug_str 167 | )) 168 | 169 | print("On track for {}".format(position_name)) 170 | 171 | 172 | if __name__ == "__main__": 173 | main() 174 | -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_1.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_10.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_11.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_12.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_13.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_14.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_15.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_16.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_2.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_3.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_4.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_5.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_6.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_7.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_8.png -------------------------------------------------------------------------------- /image_bot/needles/earthstation_start_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/earthstation_start_9.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_1.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_10.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_11.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_12.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_13.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_14.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_15.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_16.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_17.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_18.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_19.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_2.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_20.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_21.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_22.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_3.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_4.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_5.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_6.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_7.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_8.png -------------------------------------------------------------------------------- /image_bot/needles/lokistation_start_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learncodebygaming/enb_bot/83bfcc67f96ef6cfda52314770a34bac66d96133/image_bot/needles/lokistation_start_9.png -------------------------------------------------------------------------------- /image_bot/playback.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | from time import sleep, time 3 | import os 4 | import json 5 | 6 | 7 | def initializePyAutoGUI(): 8 | # Initialized PyAutoGUI 9 | # https://pyautogui.readthedocs.io/en/latest/introduction.html 10 | # When fail-safe mode is True, moving the mouse to the upper-left corner will abort your program. 11 | pyautogui.FAILSAFE = True 12 | 13 | 14 | def countdownTimer(): 15 | # Countdown timer 16 | print("Starting", end="", flush=True) 17 | for i in range(0, 6): 18 | print(".", end="", flush=True) 19 | sleep(1) 20 | print("Go") 21 | 22 | 23 | def playActions(filename): 24 | # Read the file 25 | script_dir = os.path.dirname(__file__) 26 | filepath = os.path.join( 27 | script_dir, 28 | 'recordings', 29 | filename 30 | ) 31 | with open(filepath, 'r') as jsonfile: 32 | # parse the json 33 | data = json.load(jsonfile) 34 | 35 | # loop over each action 36 | # Because we are not waiting any time before executing the first action, any delay before the initial 37 | # action is recorded will not be reflected in the playback. 38 | for index, action in enumerate(data): 39 | action_start_time = time() 40 | 41 | # look for escape input to exit 42 | if action['button'] == 'Key.esc': 43 | break 44 | 45 | # perform the action 46 | if action['type'] == 'keyDown': 47 | key = convertKey(action['button']) 48 | pyautogui.keyDown(key) 49 | print("keyDown on {}".format(key)) 50 | elif action['type'] == 'keyUp': 51 | key = convertKey(action['button']) 52 | pyautogui.keyUp(key) 53 | print("keyUp on {}".format(key)) 54 | elif action['type'] == 'click': 55 | pyautogui.click(action['pos'][0], action['pos'][1], duration=0.25) 56 | print("click on {}".format(action['pos'])) 57 | 58 | # then sleep until next action should occur 59 | try: 60 | next_action = data[index + 1] 61 | except IndexError: 62 | # this was the last action in the list 63 | break 64 | elapsed_time = next_action['time'] - action['time'] 65 | 66 | # if elapsed_time is negative, that means our actions are not ordered correctly. throw an error 67 | if elapsed_time < 0: 68 | raise Exception('Unexpected action ordering.') 69 | 70 | # adjust elapsed_time to account for our code taking time to run 71 | elapsed_time -= (time() - action_start_time) 72 | if elapsed_time < 0: 73 | elapsed_time = 0 74 | print('sleeping for {}'.format(elapsed_time)) 75 | sleep(elapsed_time) 76 | 77 | 78 | # convert pynput button keys into pyautogui keys 79 | # https://pynput.readthedocs.io/en/latest/_modules/pynput/keyboard/_base.html#Key 80 | # https://pyautogui.readthedocs.io/en/latest/keyboard.html 81 | def convertKey(button): 82 | PYNPUT_SPECIAL_CASE_MAP = { 83 | 'alt_l': 'altleft', 84 | 'alt_r': 'altright', 85 | 'alt_gr': 'altright', 86 | 'caps_lock': 'capslock', 87 | 'ctrl_l': 'ctrlleft', 88 | 'ctrl_r': 'ctrlright', 89 | 'page_down': 'pagedown', 90 | 'page_up': 'pageup', 91 | 'shift_l': 'shiftleft', 92 | 'shift_r': 'shiftright', 93 | 'num_lock': 'numlock', 94 | 'print_screen': 'printscreen', 95 | 'scroll_lock': 'scrolllock', 96 | } 97 | 98 | # example: 'Key.F9' should return 'F9', 'w' should return as 'w' 99 | cleaned_key = button.replace('Key.', '') 100 | 101 | if cleaned_key in PYNPUT_SPECIAL_CASE_MAP: 102 | return PYNPUT_SPECIAL_CASE_MAP[cleaned_key] 103 | 104 | return cleaned_key 105 | -------------------------------------------------------------------------------- /image_bot/recorder.py: -------------------------------------------------------------------------------- 1 | from pynput import mouse, keyboard 2 | from time import time 3 | import json 4 | import os 5 | 6 | 7 | OUTPUT_FILENAME = 'lokistation_start_22' 8 | # declare mouse_listener globally so that keyboard on_release can stop it 9 | mouse_listener = None 10 | # declare our start_time globally so that the callback functions can reference it 11 | start_time = None 12 | # keep track of unreleased keys to prevent over-reporting press events 13 | unreleased_keys = [] 14 | # storing all input events 15 | input_events = [] 16 | 17 | class EventType(): 18 | KEYDOWN = 'keyDown' 19 | KEYUP = 'keyUp' 20 | CLICK = 'click' 21 | 22 | 23 | def main(): 24 | runListeners() 25 | print("Recording duration: {} seconds".format(elapsed_time())) 26 | global input_events 27 | print(json.dumps(input_events)) 28 | 29 | # write the output to a file 30 | script_dir = os.path.dirname(__file__) 31 | filepath = os.path.join( 32 | script_dir, 33 | 'recordings', 34 | '{}.json'.format(OUTPUT_FILENAME) 35 | ) 36 | with open(filepath, 'w') as outfile: 37 | json.dump(input_events, outfile, indent=4) 38 | 39 | 40 | def elapsed_time(): 41 | global start_time 42 | return time() - start_time 43 | 44 | 45 | def record_event(event_type, event_time, button, pos=None): 46 | 47 | if str(button) == "Key.esc": 48 | return 49 | 50 | global input_events 51 | input_events.append({ 52 | 'time': event_time, 53 | 'type': event_type, 54 | 'button': str(button), 55 | 'pos': pos 56 | }) 57 | 58 | if event_type == EventType.CLICK: 59 | print('{} on {} pos {} at {}'.format(event_type, button, pos, event_time)) 60 | else: 61 | print('{} on {} at {}'.format(event_type, button, event_time)) 62 | 63 | 64 | def on_press(key): 65 | # we only want to record the first keypress event until that key has been 66 | # released 67 | global unreleased_keys 68 | if key in unreleased_keys: 69 | return 70 | else: 71 | unreleased_keys.append(key) 72 | 73 | try: 74 | record_event(EventType.KEYDOWN, elapsed_time(), key.char) 75 | except AttributeError: 76 | record_event(EventType.KEYDOWN, elapsed_time(), key) 77 | 78 | 79 | def on_release(key): 80 | # mark key as no longer pressed 81 | global unreleased_keys 82 | try: 83 | unreleased_keys.remove(key) 84 | except ValueError: 85 | print('ERROR: {} not in unreleased_keys'.format(key)) 86 | 87 | try: 88 | record_event(EventType.KEYUP, elapsed_time(), key.char) 89 | except AttributeError: 90 | record_event(EventType.KEYUP, elapsed_time(), key) 91 | 92 | # stop listeners with the escape key 93 | if key == keyboard.Key.esc: 94 | # Stop mouse listener 95 | global mouse_listener 96 | mouse_listener.stop() 97 | # Stop keyboard listener 98 | raise keyboard.Listener.StopException 99 | 100 | 101 | def on_click(x, y, button, pressed): 102 | # when pressed is False, that means it's a release event. 103 | # let's listen only to mouse click releases 104 | if not pressed: 105 | record_event(EventType.CLICK, elapsed_time(), button, (x, y)) 106 | 107 | 108 | def runListeners(): 109 | 110 | # Collect mouse input events 111 | global mouse_listener 112 | mouse_listener = mouse.Listener(on_click=on_click) 113 | mouse_listener.start() 114 | mouse_listener.wait() # wait for the listener to become ready 115 | 116 | # Collect keyboard inputs until released 117 | # https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard 118 | with keyboard.Listener( 119 | on_press=on_press, 120 | on_release=on_release) as listener: 121 | global start_time 122 | start_time = time() 123 | listener.join() 124 | 125 | 126 | if __name__ == "__main__": 127 | main() 128 | -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_do_trading.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 25.191999197006226, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 172, 8 | 347 9 | ] 10 | }, 11 | { 12 | "time": 30.50200057029724, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 356, 17 | 798 18 | ] 19 | }, 20 | { 21 | "time": 33.757999897003174, 22 | "type": "click", 23 | "button": "Button.left", 24 | "pos": [ 25 | 47, 26 | 673 27 | ] 28 | }, 29 | { 30 | "time": 34.78600001335144, 31 | "type": "click", 32 | "button": "Button.left", 33 | "pos": [ 34 | 47, 35 | 673 36 | ] 37 | }, 38 | { 39 | "time": 35.83000063896179, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 47, 44 | 673 45 | ] 46 | }, 47 | { 48 | "time": 36.7960000038147, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 47, 53 | 673 54 | ] 55 | }, 56 | { 57 | "time": 37.769999504089355, 58 | "type": "click", 59 | "button": "Button.left", 60 | "pos": [ 61 | 47, 62 | 673 63 | ] 64 | }, 65 | { 66 | "time": 40.70799970626831, 67 | "type": "click", 68 | "button": "Button.left", 69 | "pos": [ 70 | 77, 71 | 407 72 | ] 73 | }, 74 | { 75 | "time": 42.0239999294281, 76 | "type": "keyDown", 77 | "button": "Key.shift", 78 | "pos": null 79 | }, 80 | { 81 | "time": 43.11999988555908, 82 | "type": "click", 83 | "button": "Button.left", 84 | "pos": [ 85 | 77, 86 | 407 87 | ] 88 | }, 89 | { 90 | "time": 44.5719997882843, 91 | "type": "click", 92 | "button": "Button.left", 93 | "pos": [ 94 | 79, 95 | 478 96 | ] 97 | }, 98 | { 99 | "time": 45.42200064659119, 100 | "type": "click", 101 | "button": "Button.left", 102 | "pos": [ 103 | 83, 104 | 553 105 | ] 106 | }, 107 | { 108 | "time": 46.29599976539612, 109 | "type": "click", 110 | "button": "Button.left", 111 | "pos": [ 112 | 75, 113 | 623 114 | ] 115 | }, 116 | { 117 | "time": 46.67200040817261, 118 | "type": "keyUp", 119 | "button": "Key.shift", 120 | "pos": null 121 | }, 122 | { 123 | "time": 47.41000032424927, 124 | "type": "click", 125 | "button": "Button.left", 126 | "pos": [ 127 | 165, 128 | 422 129 | ] 130 | }, 131 | { 132 | "time": 47.79199957847595, 133 | "type": "keyDown", 134 | "button": "Key.shift", 135 | "pos": null 136 | }, 137 | { 138 | "time": 48.477999687194824, 139 | "type": "click", 140 | "button": "Button.left", 141 | "pos": [ 142 | 178, 143 | 407 144 | ] 145 | }, 146 | { 147 | "time": 49.48799991607666, 148 | "type": "click", 149 | "button": "Button.left", 150 | "pos": [ 151 | 179, 152 | 473 153 | ] 154 | }, 155 | { 156 | "time": 50.555999755859375, 157 | "type": "click", 158 | "button": "Button.left", 159 | "pos": [ 160 | 174, 161 | 543 162 | ] 163 | }, 164 | { 165 | "time": 51.84600043296814, 166 | "type": "click", 167 | "button": "Button.left", 168 | "pos": [ 169 | 166, 170 | 629 171 | ] 172 | }, 173 | { 174 | "time": 52.39200043678284, 175 | "type": "keyUp", 176 | "button": "Key.shift", 177 | "pos": null 178 | }, 179 | { 180 | "time": 53.12199950218201, 181 | "type": "click", 182 | "button": "Button.left", 183 | "pos": [ 184 | 264, 185 | 417 186 | ] 187 | }, 188 | { 189 | "time": 53.44799995422363, 190 | "type": "keyDown", 191 | "button": "Key.shift", 192 | "pos": null 193 | }, 194 | { 195 | "time": 54.2739999294281, 196 | "type": "click", 197 | "button": "Button.left", 198 | "pos": [ 199 | 268, 200 | 409 201 | ] 202 | }, 203 | { 204 | "time": 55.15400052070618, 205 | "type": "click", 206 | "button": "Button.left", 207 | "pos": [ 208 | 271, 209 | 477 210 | ] 211 | }, 212 | { 213 | "time": 56.36000037193298, 214 | "type": "click", 215 | "button": "Button.left", 216 | "pos": [ 217 | 253, 218 | 554 219 | ] 220 | }, 221 | { 222 | "time": 57.33399987220764, 223 | "type": "click", 224 | "button": "Button.left", 225 | "pos": [ 226 | 262, 227 | 610 228 | ] 229 | }, 230 | { 231 | "time": 57.920000076293945, 232 | "type": "keyUp", 233 | "button": "Key.shift", 234 | "pos": null 235 | }, 236 | { 237 | "time": 59.14199995994568, 238 | "type": "click", 239 | "button": "Button.left", 240 | "pos": [ 241 | 293, 242 | 671 243 | ] 244 | }, 245 | { 246 | "time": 59.567999601364136, 247 | "type": "click", 248 | "button": "Button.left", 249 | "pos": [ 250 | 293, 251 | 671 252 | ] 253 | }, 254 | { 255 | "time": 60.21799993515015, 256 | "type": "click", 257 | "button": "Button.left", 258 | "pos": [ 259 | 293, 260 | 671 261 | ] 262 | }, 263 | { 264 | "time": 61.33800005912781, 265 | "type": "click", 266 | "button": "Button.left", 267 | "pos": [ 268 | 73, 269 | 409 270 | ] 271 | }, 272 | { 273 | "time": 61.66399955749512, 274 | "type": "keyDown", 275 | "button": "Key.shift", 276 | "pos": null 277 | }, 278 | { 279 | "time": 62.35000038146973, 280 | "type": "click", 281 | "button": "Button.left", 282 | "pos": [ 283 | 78, 284 | 408 285 | ] 286 | }, 287 | { 288 | "time": 63.58799982070923, 289 | "type": "click", 290 | "button": "Button.left", 291 | "pos": [ 292 | 81, 293 | 468 294 | ] 295 | }, 296 | { 297 | "time": 64.54599976539612, 298 | "type": "click", 299 | "button": "Button.left", 300 | "pos": [ 301 | 78, 302 | 541 303 | ] 304 | }, 305 | { 306 | "time": 65.59800052642822, 307 | "type": "click", 308 | "button": "Button.left", 309 | "pos": [ 310 | 88, 311 | 614 312 | ] 313 | }, 314 | { 315 | "time": 66.03199982643127, 316 | "type": "keyUp", 317 | "button": "Key.shift", 318 | "pos": null 319 | }, 320 | { 321 | "time": 66.7639992237091, 322 | "type": "click", 323 | "button": "Button.left", 324 | "pos": [ 325 | 180, 326 | 412 327 | ] 328 | }, 329 | { 330 | "time": 67.2720000743866, 331 | "type": "keyDown", 332 | "button": "Key.shift", 333 | "pos": null 334 | }, 335 | { 336 | "time": 67.95400047302246, 337 | "type": "click", 338 | "button": "Button.left", 339 | "pos": [ 340 | 172, 341 | 404 342 | ] 343 | }, 344 | { 345 | "time": 68.87400031089783, 346 | "type": "click", 347 | "button": "Button.left", 348 | "pos": [ 349 | 166, 350 | 471 351 | ] 352 | }, 353 | { 354 | "time": 69.78599953651428, 355 | "type": "click", 356 | "button": "Button.left", 357 | "pos": [ 358 | 170, 359 | 535 360 | ] 361 | }, 362 | { 363 | "time": 70.76799988746643, 364 | "type": "click", 365 | "button": "Button.left", 366 | "pos": [ 367 | 169, 368 | 613 369 | ] 370 | }, 371 | { 372 | "time": 71.14400005340576, 373 | "type": "keyUp", 374 | "button": "Key.shift", 375 | "pos": null 376 | }, 377 | { 378 | "time": 72.2139995098114, 379 | "type": "click", 380 | "button": "Button.left", 381 | "pos": [ 382 | 293, 383 | 673 384 | ] 385 | }, 386 | { 387 | "time": 72.6159999370575, 388 | "type": "keyDown", 389 | "button": "Key.shift", 390 | "pos": null 391 | }, 392 | { 393 | "time": 74.43999981880188, 394 | "type": "click", 395 | "button": "Button.left", 396 | "pos": [ 397 | 174, 398 | 419 399 | ] 400 | }, 401 | { 402 | "time": 75.75399947166443, 403 | "type": "click", 404 | "button": "Button.left", 405 | "pos": [ 406 | 173, 407 | 474 408 | ] 409 | }, 410 | { 411 | "time": 76.60399961471558, 412 | "type": "click", 413 | "button": "Button.left", 414 | "pos": [ 415 | 176, 416 | 545 417 | ] 418 | }, 419 | { 420 | "time": 77.54599976539612, 421 | "type": "click", 422 | "button": "Button.left", 423 | "pos": [ 424 | 179, 425 | 610 426 | ] 427 | }, 428 | { 429 | "time": 77.81600046157837, 430 | "type": "keyUp", 431 | "button": "Key.shift", 432 | "pos": null 433 | }, 434 | { 435 | "time": 78.55199980735779, 436 | "type": "click", 437 | "button": "Button.left", 438 | "pos": [ 439 | 265, 440 | 391 441 | ] 442 | }, 443 | { 444 | "time": 78.96799969673157, 445 | "type": "keyDown", 446 | "button": "Key.shift", 447 | "pos": null 448 | }, 449 | { 450 | "time": 79.61799955368042, 451 | "type": "click", 452 | "button": "Button.left", 453 | "pos": [ 454 | 267, 455 | 400 456 | ] 457 | }, 458 | { 459 | "time": 80.50600028038025, 460 | "type": "click", 461 | "button": "Button.left", 462 | "pos": [ 463 | 258, 464 | 462 465 | ] 466 | }, 467 | { 468 | "time": 81.38799977302551, 469 | "type": "click", 470 | "button": "Button.left", 471 | "pos": [ 472 | 254, 473 | 537 474 | ] 475 | }, 476 | { 477 | "time": 82.58599948883057, 478 | "type": "click", 479 | "button": "Button.left", 480 | "pos": [ 481 | 268, 482 | 617 483 | ] 484 | }, 485 | { 486 | "time": 82.9839997291565, 487 | "type": "keyUp", 488 | "button": "Key.shift", 489 | "pos": null 490 | }, 491 | { 492 | "time": 84.67600011825562, 493 | "type": "click", 494 | "button": "Button.left", 495 | "pos": [ 496 | 51, 497 | 676 498 | ] 499 | }, 500 | { 501 | "time": 85.36400032043457, 502 | "type": "click", 503 | "button": "Button.left", 504 | "pos": [ 505 | 51, 506 | 676 507 | ] 508 | }, 509 | { 510 | "time": 85.985999584198, 511 | "type": "click", 512 | "button": "Button.left", 513 | "pos": [ 514 | 51, 515 | 676 516 | ] 517 | }, 518 | { 519 | "time": 86.51200008392334, 520 | "type": "click", 521 | "button": "Button.left", 522 | "pos": [ 523 | 51, 524 | 676 525 | ] 526 | }, 527 | { 528 | "time": 87.0839991569519, 529 | "type": "click", 530 | "button": "Button.left", 531 | "pos": [ 532 | 51, 533 | 676 534 | ] 535 | }, 536 | { 537 | "time": 87.79600024223328, 538 | "type": "click", 539 | "button": "Button.left", 540 | "pos": [ 541 | 51, 542 | 676 543 | ] 544 | }, 545 | { 546 | "time": 89.53399991989136, 547 | "type": "click", 548 | "button": "Button.left", 549 | "pos": [ 550 | 1260, 551 | 408 552 | ] 553 | }, 554 | { 555 | "time": 91.44799971580505, 556 | "type": "keyDown", 557 | "button": "Key.shift", 558 | "pos": null 559 | }, 560 | { 561 | "time": 92.63399934768677, 562 | "type": "click", 563 | "button": "Button.left", 564 | "pos": [ 565 | 1190, 566 | 401 567 | ] 568 | }, 569 | { 570 | "time": 93.77799987792969, 571 | "type": "click", 572 | "button": "Button.left", 573 | "pos": [ 574 | 1190, 575 | 401 576 | ] 577 | }, 578 | { 579 | "time": 94.76799964904785, 580 | "type": "click", 581 | "button": "Button.left", 582 | "pos": [ 583 | 1190, 584 | 400 585 | ] 586 | }, 587 | { 588 | "time": 95.72599911689758, 589 | "type": "click", 590 | "button": "Button.left", 591 | "pos": [ 592 | 1190, 593 | 400 594 | ] 595 | }, 596 | { 597 | "time": 96.78599977493286, 598 | "type": "click", 599 | "button": "Button.left", 600 | "pos": [ 601 | 1190, 602 | 400 603 | ] 604 | }, 605 | { 606 | "time": 97.69799947738647, 607 | "type": "click", 608 | "button": "Button.left", 609 | "pos": [ 610 | 1190, 611 | 400 612 | ] 613 | }, 614 | { 615 | "time": 98.6499993801117, 616 | "type": "click", 617 | "button": "Button.left", 618 | "pos": [ 619 | 1190, 620 | 400 621 | ] 622 | }, 623 | { 624 | "time": 99.56199979782104, 625 | "type": "click", 626 | "button": "Button.left", 627 | "pos": [ 628 | 1190, 629 | 400 630 | ] 631 | }, 632 | { 633 | "time": 100.46599960327148, 634 | "type": "click", 635 | "button": "Button.left", 636 | "pos": [ 637 | 1190, 638 | 400 639 | ] 640 | }, 641 | { 642 | "time": 101.46999979019165, 643 | "type": "click", 644 | "button": "Button.left", 645 | "pos": [ 646 | 1190, 647 | 400 648 | ] 649 | }, 650 | { 651 | "time": 102.52199983596802, 652 | "type": "click", 653 | "button": "Button.left", 654 | "pos": [ 655 | 1190, 656 | 400 657 | ] 658 | }, 659 | { 660 | "time": 103.55799984931946, 661 | "type": "click", 662 | "button": "Button.left", 663 | "pos": [ 664 | 1190, 665 | 400 666 | ] 667 | }, 668 | { 669 | "time": 104.71799993515015, 670 | "type": "click", 671 | "button": "Button.left", 672 | "pos": [ 673 | 1190, 674 | 400 675 | ] 676 | }, 677 | { 678 | "time": 105.60799980163574, 679 | "type": "click", 680 | "button": "Button.left", 681 | "pos": [ 682 | 1190, 683 | 400 684 | ] 685 | }, 686 | { 687 | "time": 106.66600012779236, 688 | "type": "click", 689 | "button": "Button.left", 690 | "pos": [ 691 | 1190, 692 | 400 693 | ] 694 | }, 695 | { 696 | "time": 107.67199969291687, 697 | "type": "click", 698 | "button": "Button.left", 699 | "pos": [ 700 | 1190, 701 | 400 702 | ] 703 | }, 704 | { 705 | "time": 108.6920006275177, 706 | "type": "click", 707 | "button": "Button.left", 708 | "pos": [ 709 | 1190, 710 | 400 711 | ] 712 | }, 713 | { 714 | "time": 109.6340000629425, 715 | "type": "click", 716 | "button": "Button.left", 717 | "pos": [ 718 | 1190, 719 | 400 720 | ] 721 | }, 722 | { 723 | "time": 110.53199982643127, 724 | "type": "click", 725 | "button": "Button.left", 726 | "pos": [ 727 | 1190, 728 | 400 729 | ] 730 | }, 731 | { 732 | "time": 111.37399983406067, 733 | "type": "click", 734 | "button": "Button.left", 735 | "pos": [ 736 | 1190, 737 | 400 738 | ] 739 | }, 740 | { 741 | "time": 112.27800035476685, 742 | "type": "click", 743 | "button": "Button.left", 744 | "pos": [ 745 | 1190, 746 | 400 747 | ] 748 | }, 749 | { 750 | "time": 113.22200036048889, 751 | "type": "click", 752 | "button": "Button.left", 753 | "pos": [ 754 | 1190, 755 | 400 756 | ] 757 | }, 758 | { 759 | "time": 114.16600036621094, 760 | "type": "click", 761 | "button": "Button.left", 762 | "pos": [ 763 | 1190, 764 | 400 765 | ] 766 | }, 767 | { 768 | "time": 115.12399983406067, 769 | "type": "click", 770 | "button": "Button.left", 771 | "pos": [ 772 | 1190, 773 | 400 774 | ] 775 | }, 776 | { 777 | "time": 116.0600004196167, 778 | "type": "click", 779 | "button": "Button.left", 780 | "pos": [ 781 | 1190, 782 | 400 783 | ] 784 | }, 785 | { 786 | "time": 116.91799974441528, 787 | "type": "click", 788 | "button": "Button.left", 789 | "pos": [ 790 | 1190, 791 | 400 792 | ] 793 | }, 794 | { 795 | "time": 117.82999992370605, 796 | "type": "click", 797 | "button": "Button.left", 798 | "pos": [ 799 | 1190, 800 | 400 801 | ] 802 | }, 803 | { 804 | "time": 118.7339997291565, 805 | "type": "click", 806 | "button": "Button.left", 807 | "pos": [ 808 | 1190, 809 | 400 810 | ] 811 | }, 812 | { 813 | "time": 119.68399930000305, 814 | "type": "click", 815 | "button": "Button.left", 816 | "pos": [ 817 | 1190, 818 | 400 819 | ] 820 | }, 821 | { 822 | "time": 120.61200046539307, 823 | "type": "click", 824 | "button": "Button.left", 825 | "pos": [ 826 | 1190, 827 | 400 828 | ] 829 | }, 830 | { 831 | "time": 121.11199975013733, 832 | "type": "keyUp", 833 | "button": "Key.shift", 834 | "pos": null 835 | }, 836 | { 837 | "time": 131.43399953842163, 838 | "type": "click", 839 | "button": "Button.left", 840 | "pos": [ 841 | 47, 842 | 673 843 | ] 844 | }, 845 | { 846 | "time": 133.3980007171631, 847 | "type": "click", 848 | "button": "Button.left", 849 | "pos": [ 850 | 290, 851 | 296 852 | ] 853 | }, 854 | { 855 | "time": 135.46200037002563, 856 | "type": "click", 857 | "button": "Button.left", 858 | "pos": [ 859 | 489, 860 | 757 861 | ] 862 | } 863 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_goto_lokistation.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 7.887999773025513, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 163, 8 | 837 9 | ] 10 | }, 11 | { 12 | "time": 11.72999906539917, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 527, 17 | 551 18 | ] 19 | }, 20 | { 21 | "time": 13.729999780654907, 22 | "type": "keyDown", 23 | "button": "z", 24 | "pos": null 25 | }, 26 | { 27 | "time": 13.834000825881958, 28 | "type": "keyUp", 29 | "button": "z", 30 | "pos": null 31 | }, 32 | { 33 | "time": 37.1560001373291, 34 | "type": "click", 35 | "button": "Button.left", 36 | "pos": [ 37 | 1548, 38 | 627 39 | ] 40 | }, 41 | { 42 | "time": 56.80450129508972, 43 | "type": "click", 44 | "button": "Button.left", 45 | "pos": [ 46 | 166, 47 | 838 48 | ] 49 | }, 50 | { 51 | "time": 60.85449504852295, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 260, 56 | 522 57 | ] 58 | }, 59 | { 60 | "time": 63.538488149642944, 61 | "type": "keyDown", 62 | "button": "z", 63 | "pos": null 64 | }, 65 | { 66 | "time": 63.634488105773926, 67 | "type": "keyUp", 68 | "button": "z", 69 | "pos": null 70 | }, 71 | { 72 | "time": 94.48848724365234, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1545, 77 | 628 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_goto_ship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.1470212936401367, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 3.8500213623046875, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.4670209884643555, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 5.210022449493408, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.08302116394043, 28 | "type": "keyDown", 29 | "button": "a", 30 | "pos": null 31 | }, 32 | { 33 | "time": 7.371022462844849, 34 | "type": "keyUp", 35 | "button": "a", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.21902084350586, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.659021615982056, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.59502100944519, 52 | "type": "keyDown", 53 | "button": "a", 54 | "pos": null 55 | }, 56 | { 57 | "time": 16.338021516799927, 58 | "type": "keyUp", 59 | "button": "a", 60 | "pos": null 61 | }, 62 | { 63 | "time": 17.787020206451416, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 23.77002215385437, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 24.202022314071655, 76 | "type": "keyDown", 77 | "button": "a", 78 | "pos": null 79 | }, 80 | { 81 | "time": 24.42602300643921, 82 | "type": "keyUp", 83 | "button": "a", 84 | "pos": null 85 | }, 86 | { 87 | "time": 26.88202142715454, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 267, 92 | 280 93 | ] 94 | } 95 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_goto_trader.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 9.592514038085938, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 10.855514526367188, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 12.296512842178345, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 12.624516248703003, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 14.128512382507324, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 15.615512371063232, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 16.736511945724487, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 17.53551197052002, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 19.368512392044067, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 23.71951198577881, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 27.13651180267334, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 27.29651141166687, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 28.264512062072754, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 30.040513277053833, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 31.064512968063354, 88 | "type": "keyDown", 89 | "button": "d", 90 | "pos": null 91 | }, 92 | { 93 | "time": 32.12751269340515, 94 | "type": "keyUp", 95 | "button": "d", 96 | "pos": null 97 | }, 98 | { 99 | "time": 33.00051259994507, 100 | "type": "keyDown", 101 | "button": "w", 102 | "pos": null 103 | }, 104 | { 105 | "time": 34.27151274681091, 106 | "type": "keyUp", 107 | "button": "w", 108 | "pos": null 109 | }, 110 | { 111 | "time": 35.13551211357117, 112 | "type": "keyDown", 113 | "button": "a", 114 | "pos": null 115 | }, 116 | { 117 | "time": 35.33551383018494, 118 | "type": "keyUp", 119 | "button": "a", 120 | "pos": null 121 | } 122 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 5.196000576019287, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 7.675999879837036, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 8.659999370574951, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 9.187999248504639, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 10.091999292373657, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 11.884000062942505, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.372008800506592, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.796008825302124, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.860007762908936, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.57200860977173, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 18.964008569717407, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.012008905410767, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.572006940841675, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 24.516008138656616, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 30.56600856781006, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 342, 92 | 361 93 | ] 94 | }, 95 | { 96 | "time": 33.628008127212524, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1370, 101 | 578 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_10.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.7289998531341553, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.232000827789307, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.8409998416900635, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 5.584000825881958, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.457001209259033, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 8.025001049041748, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 8.992552280426025, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 9.08855128288269, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 9.856552124023438, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 11.808552026748657, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 12.208550691604614, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 13.392550945281982, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 14.224550724029541, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 15.856552124023438, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 16.56055188179016, 88 | "type": "keyDown", 89 | "button": "a", 90 | "pos": null 91 | }, 92 | { 93 | "time": 16.81655216217041, 94 | "type": "keyUp", 95 | "button": "a", 96 | "pos": null 97 | }, 98 | { 99 | "time": 17.792550563812256, 100 | "type": "keyDown", 101 | "button": "w", 102 | "pos": null 103 | }, 104 | { 105 | "time": 19.25655174255371, 106 | "type": "keyUp", 107 | "button": "w", 108 | "pos": null 109 | }, 110 | { 111 | "time": 20.95855212211609, 112 | "type": "click", 113 | "button": "Button.left", 114 | "pos": [ 115 | 263, 116 | 381 117 | ] 118 | }, 119 | { 120 | "time": 23.082551956176758, 121 | "type": "click", 122 | "button": "Button.left", 123 | "pos": [ 124 | 1368, 125 | 581 126 | ] 127 | } 128 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_11.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.2059998512268066, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.414000749588013, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.965999603271484, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 5.526000261306763, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 5.981999635696411, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 7.27000093460083, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 7.870000123977661, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 8.230000019073486, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 8.950000524520874, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 11.422000408172607, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 12.238000392913818, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 13.389999866485596, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 16.989999771118164, 76 | "type": "keyDown", 77 | "button": "d", 78 | "pos": null 79 | }, 80 | { 81 | "time": 17.03000020980835, 82 | "type": "keyUp", 83 | "button": "d", 84 | "pos": null 85 | }, 86 | { 87 | "time": 17.51799988746643, 88 | "type": "keyDown", 89 | "button": "w", 90 | "pos": null 91 | }, 92 | { 93 | "time": 20.558000564575195, 94 | "type": "keyUp", 95 | "button": "w", 96 | "pos": null 97 | }, 98 | { 99 | "time": 21.851999044418335, 100 | "type": "click", 101 | "button": "Button.left", 102 | "pos": [ 103 | 221, 104 | 398 105 | ] 106 | }, 107 | { 108 | "time": 24.246000289916992, 109 | "type": "click", 110 | "button": "Button.left", 111 | "pos": [ 112 | 1374, 113 | 580 114 | ] 115 | } 116 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_12.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.673999309539795, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.058000087738037, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.146000146865845, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.282000303268433, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.978001117706299, 28 | "type": "keyDown", 29 | "button": "a", 30 | "pos": null 31 | }, 32 | { 33 | "time": 8.497999668121338, 34 | "type": "keyUp", 35 | "button": "a", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.505998849868774, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 12.505999326705933, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 12.953999280929565, 52 | "type": "keyDown", 53 | "button": "d", 54 | "pos": null 55 | }, 56 | { 57 | "time": 14.241999626159668, 58 | "type": "keyUp", 59 | "button": "d", 60 | "pos": null 61 | }, 62 | { 63 | "time": 15.369999647140503, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 19.138000011444092, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.579999923706055, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 270, 80 | 387 81 | ] 82 | }, 83 | { 84 | "time": 24.19600009918213, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1377, 89 | 587 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_13.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.2849979400634766, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.084998846054077, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.540998458862305, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.980998992919922, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 11.884997844696045, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.636998414993286, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.476998805999756, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.956998825073242, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.668998718261719, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.620997667312622, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 18.27699875831604, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 19.04499912261963, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 19.86099863052368, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 21.108998775482178, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 22.208998441696167, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 302, 92 | 366 93 | ] 94 | }, 95 | { 96 | "time": 24.293004751205444, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1367, 101 | 576 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_14.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 2.7330000400543213, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 8.50899887084961, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 9.28499984741211, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 10.452998876571655, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 11.477000713348389, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.604999303817749, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 17.5409996509552, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 233, 44 | 397 45 | ] 46 | }, 47 | { 48 | "time": 20.60700035095215, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1372, 53 | 579 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_15.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.6409995555877686, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 8.575999736785889, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 9.415998697280884, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 10.583999633789062, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 11.832998037338257, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.167999744415283, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 15.779999256134033, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 222, 44 | 398 45 | ] 46 | }, 47 | { 48 | "time": 18.751999616622925, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1371, 53 | 582 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_16.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.94199800491333, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.788999080657959, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.60599946975708, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.205997705459595, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.1259989738464355, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 10.813998699188232, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 12.061998844146729, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 13.341999053955078, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 14.25399899482727, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.54999876022339, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 20.988998413085938, 64 | "type": "click", 65 | "button": "Button.left", 66 | "pos": [ 67 | 231, 68 | 415 69 | ] 70 | }, 71 | { 72 | "time": 23.412999391555786, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1368, 77 | 580 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_2.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.615000009536743, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.734000205993652, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.567000389099121, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.263000011444092, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.63099980354309, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.222999572753906, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.022999286651611, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 15.4139986038208, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.798999309539795, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 18.478999853134155, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.910999059677124, 64 | "type": "keyDown", 65 | "button": "a", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.19099998474121, 70 | "type": "keyUp", 71 | "button": "a", 72 | "pos": null 73 | }, 74 | { 75 | "time": 20.91899847984314, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 22.806999921798706, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 24.372998476028442, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 257, 92 | 378 93 | ] 94 | }, 95 | { 96 | "time": 26.82699942588806, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1370, 101 | 580 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_3.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.553001165390015, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 10.457000732421875, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 11.513000726699829, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 12.481000423431396, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 13.328999996185303, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 16.08900022506714, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 18.140999794006348, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 349, 44 | 449 45 | ] 46 | }, 47 | { 48 | "time": 21.144999742507935, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1371, 53 | 579 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_4.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.836999416351318, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.469000339508057, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.149000644683838, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.709000825881958, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.773000717163086, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 10.724999904632568, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 11.5409996509552, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 11.964999914169312, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 12.80500078201294, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 14.117000579833984, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 14.741000413894653, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 15.445000886917114, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 16.381000995635986, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 17.933000802993774, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 19.201000452041626, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 303, 92 | 396 93 | ] 94 | }, 95 | { 96 | "time": 21.649000644683838, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1371, 101 | 573 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_5.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.398998737335205, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.430999517440796, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.11099910736084, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.670999050140381, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.7589991092681885, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 9.206999063491821, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 10.262999057769775, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 10.566997528076172, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 11.695997953414917, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 13.894999027252197, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 15.206998109817505, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 16.230998277664185, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 20.142998933792114, 76 | "type": "keyDown", 77 | "button": "d", 78 | "pos": null 79 | }, 80 | { 81 | "time": 20.19899845123291, 82 | "type": "keyUp", 83 | "button": "d", 84 | "pos": null 85 | }, 86 | { 87 | "time": 22.31899857521057, 88 | "type": "keyDown", 89 | "button": "w", 90 | "pos": null 91 | }, 92 | { 93 | "time": 24.278999090194702, 94 | "type": "keyUp", 95 | "button": "w", 96 | "pos": null 97 | }, 98 | { 99 | "time": 27.002998113632202, 100 | "type": "click", 101 | "button": "Button.left", 102 | "pos": [ 103 | 261, 104 | 388 105 | ] 106 | }, 107 | { 108 | "time": 29.464998245239258, 109 | "type": "click", 110 | "button": "Button.left", 111 | "pos": [ 112 | 1376, 113 | 578 114 | ] 115 | } 116 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_6.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.688000440597534, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.496000528335571, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.120000839233398, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 5.664000034332275, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.399999141693115, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 7.952000856399536, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.216001033782959, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 9.59999942779541, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 10.615999937057495, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 11.999999284744263, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 12.857000350952148, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 13.583999395370483, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 14.704000473022461, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 17.0239999294281, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 18.155999183654785, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 325, 92 | 397 93 | ] 94 | }, 95 | { 96 | "time": 20.690000534057617, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1367, 101 | 576 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_7.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.575000762939453, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.231000661849976, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.990999937057495, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.599000453948975, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.26300048828125, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 8.735000371932983, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 10.09499979019165, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 10.399000644683838, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 11.526999711990356, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 13.599000453948975, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 14.46299958229065, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 15.527000665664673, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 18.33500051498413, 76 | "type": "keyDown", 77 | "button": "d", 78 | "pos": null 79 | }, 80 | { 81 | "time": 18.37500023841858, 82 | "type": "keyUp", 83 | "button": "d", 84 | "pos": null 85 | }, 86 | { 87 | "time": 19.503000259399414, 88 | "type": "keyDown", 89 | "button": "w", 90 | "pos": null 91 | }, 92 | { 93 | "time": 21.535000324249268, 94 | "type": "keyUp", 95 | "button": "w", 96 | "pos": null 97 | }, 98 | { 99 | "time": 22.870999813079834, 100 | "type": "click", 101 | "button": "Button.left", 102 | "pos": [ 103 | 298, 104 | 370 105 | ] 106 | }, 107 | { 108 | "time": 25.24899983406067, 109 | "type": "click", 110 | "button": "Button.left", 111 | "pos": [ 112 | 1374, 113 | 578 114 | ] 115 | } 116 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_8.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.328001022338867, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 7.904000520706177, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 8.68000078201294, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 9.792000532150269, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 11.208000421524048, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.47200059890747, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.712000846862793, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 15.152000904083252, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.080000400543213, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.48800015449524, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.269999980926514, 64 | "type": "click", 65 | "button": "Button.left", 66 | "pos": [ 67 | 464, 68 | 340 69 | ] 70 | }, 71 | { 72 | "time": 21.5, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1375, 77 | 578 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/earthstation_start_9.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.126999855041504, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 9.622998237609863, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 11.134999513626099, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 12.301998376846313, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 13.694998025894165, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 15.909999370574951, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 16.525999546051025, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 16.910998344421387, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 17.247005701065063, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.99099898338318, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.495999336242676, 64 | "type": "click", 65 | "button": "Button.left", 66 | "pos": [ 67 | 371, 68 | 345 69 | ] 70 | }, 71 | { 72 | "time": 21.913999557495117, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1375, 77 | 575 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_do_trading.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 6.931999921798706, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 1290, 8 | 382 9 | ] 10 | }, 11 | { 12 | "time": 11.278000593185425, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 348, 17 | 796 18 | ] 19 | }, 20 | { 21 | "time": 13.810999393463135, 22 | "type": "keyDown", 23 | "button": "Key.shift", 24 | "pos": null 25 | }, 26 | { 27 | "time": 15.410000801086426, 28 | "type": "keyUp", 29 | "button": "Key.shift", 30 | "pos": null 31 | }, 32 | { 33 | "time": 16.308000564575195, 34 | "type": "click", 35 | "button": "Button.left", 36 | "pos": [ 37 | 77, 38 | 408 39 | ] 40 | }, 41 | { 42 | "time": 17.09000015258789, 43 | "type": "keyDown", 44 | "button": "Key.shift", 45 | "pos": null 46 | }, 47 | { 48 | "time": 18.065999746322632, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 69, 53 | 400 54 | ] 55 | }, 56 | { 57 | "time": 19.39400005340576, 58 | "type": "click", 59 | "button": "Button.left", 60 | "pos": [ 61 | 77, 62 | 485 63 | ] 64 | }, 65 | { 66 | "time": 20.78999972343445, 67 | "type": "click", 68 | "button": "Button.left", 69 | "pos": [ 70 | 75, 71 | 552 72 | ] 73 | }, 74 | { 75 | "time": 23.7599995136261, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 77, 80 | 622 81 | ] 82 | }, 83 | { 84 | "time": 24.617999792099, 85 | "type": "keyUp", 86 | "button": "Key.shift", 87 | "pos": null 88 | }, 89 | { 90 | "time": 25.582000017166138, 91 | "type": "click", 92 | "button": "Button.left", 93 | "pos": [ 94 | 181, 95 | 400 96 | ] 97 | }, 98 | { 99 | "time": 26.146000385284424, 100 | "type": "keyDown", 101 | "button": "Key.shift", 102 | "pos": null 103 | }, 104 | { 105 | "time": 27.157999753952026, 106 | "type": "click", 107 | "button": "Button.left", 108 | "pos": [ 109 | 171, 110 | 402 111 | ] 112 | }, 113 | { 114 | "time": 28.161999702453613, 115 | "type": "click", 116 | "button": "Button.left", 117 | "pos": [ 118 | 167, 119 | 481 120 | ] 121 | }, 122 | { 123 | "time": 29.35800075531006, 124 | "type": "click", 125 | "button": "Button.left", 126 | "pos": [ 127 | 164, 128 | 554 129 | ] 130 | }, 131 | { 132 | "time": 30.58601665496826, 133 | "type": "click", 134 | "button": "Button.left", 135 | "pos": [ 136 | 173, 137 | 615 138 | ] 139 | }, 140 | { 141 | "time": 31.122016668319702, 142 | "type": "keyUp", 143 | "button": "Key.shift", 144 | "pos": null 145 | }, 146 | { 147 | "time": 32.054017305374146, 148 | "type": "click", 149 | "button": "Button.left", 150 | "pos": [ 151 | 262, 152 | 412 153 | ] 154 | }, 155 | { 156 | "time": 32.77001667022705, 157 | "type": "keyDown", 158 | "button": "Key.shift", 159 | "pos": null 160 | }, 161 | { 162 | "time": 33.6440167427063, 163 | "type": "click", 164 | "button": "Button.left", 165 | "pos": [ 166 | 264, 167 | 408 168 | ] 169 | }, 170 | { 171 | "time": 34.894017457962036, 172 | "type": "click", 173 | "button": "Button.left", 174 | "pos": [ 175 | 265, 176 | 477 177 | ] 178 | }, 179 | { 180 | "time": 36.154016733169556, 181 | "type": "click", 182 | "button": "Button.left", 183 | "pos": [ 184 | 260, 185 | 544 186 | ] 187 | }, 188 | { 189 | "time": 37.450016498565674, 190 | "type": "click", 191 | "button": "Button.left", 192 | "pos": [ 193 | 272, 194 | 619 195 | ] 196 | }, 197 | { 198 | "time": 37.798016843795776, 199 | "type": "keyUp", 200 | "button": "Key.shift", 201 | "pos": null 202 | }, 203 | { 204 | "time": 39.388017416000366, 205 | "type": "click", 206 | "button": "Button.left", 207 | "pos": [ 208 | 293, 209 | 676 210 | ] 211 | }, 212 | { 213 | "time": 40.23003339767456, 214 | "type": "click", 215 | "button": "Button.left", 216 | "pos": [ 217 | 293, 218 | 676 219 | ] 220 | }, 221 | { 222 | "time": 41.42603421211243, 223 | "type": "click", 224 | "button": "Button.left", 225 | "pos": [ 226 | 293, 227 | 676 228 | ] 229 | }, 230 | { 231 | "time": 43.30203461647034, 232 | "type": "click", 233 | "button": "Button.left", 234 | "pos": [ 235 | 74, 236 | 408 237 | ] 238 | }, 239 | { 240 | "time": 43.811033964157104, 241 | "type": "keyDown", 242 | "button": "Key.shift", 243 | "pos": null 244 | }, 245 | { 246 | "time": 44.63203406333923, 247 | "type": "click", 248 | "button": "Button.left", 249 | "pos": [ 250 | 78, 251 | 404 252 | ] 253 | }, 254 | { 255 | "time": 45.950034618377686, 256 | "type": "click", 257 | "button": "Button.left", 258 | "pos": [ 259 | 77, 260 | 485 261 | ] 262 | }, 263 | { 264 | "time": 47.412033557891846, 265 | "type": "click", 266 | "button": "Button.left", 267 | "pos": [ 268 | 86, 269 | 557 270 | ] 271 | }, 272 | { 273 | "time": 48.84603452682495, 274 | "type": "click", 275 | "button": "Button.left", 276 | "pos": [ 277 | 71, 278 | 619 279 | ] 280 | }, 281 | { 282 | "time": 49.354034423828125, 283 | "type": "keyUp", 284 | "button": "Key.shift", 285 | "pos": null 286 | }, 287 | { 288 | "time": 50.20603370666504, 289 | "type": "click", 290 | "button": "Button.left", 291 | "pos": [ 292 | 168, 293 | 408 294 | ] 295 | }, 296 | { 297 | "time": 50.65803360939026, 298 | "type": "keyDown", 299 | "button": "Key.shift", 300 | "pos": null 301 | }, 302 | { 303 | "time": 51.502034425735474, 304 | "type": "click", 305 | "button": "Button.left", 306 | "pos": [ 307 | 172, 308 | 406 309 | ] 310 | }, 311 | { 312 | "time": 52.76003456115723, 313 | "type": "click", 314 | "button": "Button.left", 315 | "pos": [ 316 | 165, 317 | 475 318 | ] 319 | }, 320 | { 321 | "time": 54.0660343170166, 322 | "type": "click", 323 | "button": "Button.left", 324 | "pos": [ 325 | 174, 326 | 558 327 | ] 328 | }, 329 | { 330 | "time": 55.402034521102905, 331 | "type": "click", 332 | "button": "Button.left", 333 | "pos": [ 334 | 174, 335 | 622 336 | ] 337 | }, 338 | { 339 | "time": 55.96203351020813, 340 | "type": "keyUp", 341 | "button": "Key.shift", 342 | "pos": null 343 | }, 344 | { 345 | "time": 56.822033405303955, 346 | "type": "click", 347 | "button": "Button.left", 348 | "pos": [ 349 | 279, 350 | 410 351 | ] 352 | }, 353 | { 354 | "time": 57.25803351402283, 355 | "type": "keyDown", 356 | "button": "Key.shift", 357 | "pos": null 358 | }, 359 | { 360 | "time": 58.466034173965454, 361 | "type": "click", 362 | "button": "Button.left", 363 | "pos": [ 364 | 267, 365 | 403 366 | ] 367 | }, 368 | { 369 | "time": 59.58603358268738, 370 | "type": "click", 371 | "button": "Button.left", 372 | "pos": [ 373 | 264, 374 | 477 375 | ] 376 | }, 377 | { 378 | "time": 60.66803431510925, 379 | "type": "click", 380 | "button": "Button.left", 381 | "pos": [ 382 | 262, 383 | 555 384 | ] 385 | }, 386 | { 387 | "time": 61.82603359222412, 388 | "type": "click", 389 | "button": "Button.left", 390 | "pos": [ 391 | 262, 392 | 622 393 | ] 394 | }, 395 | { 396 | "time": 62.29803442955017, 397 | "type": "keyUp", 398 | "button": "Key.shift", 399 | "pos": null 400 | }, 401 | { 402 | "time": 63.27803373336792, 403 | "type": "click", 404 | "button": "Button.left", 405 | "pos": [ 406 | 292, 407 | 674 408 | ] 409 | }, 410 | { 411 | "time": 64.38803362846375, 412 | "type": "click", 413 | "button": "Button.left", 414 | "pos": [ 415 | 292, 416 | 674 417 | ] 418 | }, 419 | { 420 | "time": 66.02603340148926, 421 | "type": "click", 422 | "button": "Button.left", 423 | "pos": [ 424 | 269, 425 | 407 426 | ] 427 | }, 428 | { 429 | "time": 66.48203444480896, 430 | "type": "keyDown", 431 | "button": "Key.shift", 432 | "pos": null 433 | }, 434 | { 435 | "time": 67.5620334148407, 436 | "type": "click", 437 | "button": "Button.left", 438 | "pos": [ 439 | 269, 440 | 402 441 | ] 442 | }, 443 | { 444 | "time": 68.68203401565552, 445 | "type": "click", 446 | "button": "Button.left", 447 | "pos": [ 448 | 268, 449 | 484 450 | ] 451 | }, 452 | { 453 | "time": 69.80003452301025, 454 | "type": "click", 455 | "button": "Button.left", 456 | "pos": [ 457 | 263, 458 | 556 459 | ] 460 | }, 461 | { 462 | "time": 70.93603420257568, 463 | "type": "click", 464 | "button": "Button.left", 465 | "pos": [ 466 | 272, 467 | 619 468 | ] 469 | }, 470 | { 471 | "time": 71.74603366851807, 472 | "type": "keyUp", 473 | "button": "Key.shift", 474 | "pos": null 475 | }, 476 | { 477 | "time": 73.31403374671936, 478 | "type": "click", 479 | "button": "Button.left", 480 | "pos": [ 481 | 45, 482 | 669 483 | ] 484 | }, 485 | { 486 | "time": 73.99403476715088, 487 | "type": "click", 488 | "button": "Button.left", 489 | "pos": [ 490 | 45, 491 | 669 492 | ] 493 | }, 494 | { 495 | "time": 75.52403450012207, 496 | "type": "click", 497 | "button": "Button.left", 498 | "pos": [ 499 | 45, 500 | 676 501 | ] 502 | }, 503 | { 504 | "time": 76.29403591156006, 505 | "type": "click", 506 | "button": "Button.left", 507 | "pos": [ 508 | 45, 509 | 676 510 | ] 511 | }, 512 | { 513 | "time": 77.16003441810608, 514 | "type": "click", 515 | "button": "Button.left", 516 | "pos": [ 517 | 45, 518 | 676 519 | ] 520 | }, 521 | { 522 | "time": 82.34603428840637, 523 | "type": "click", 524 | "button": "Button.left", 525 | "pos": [ 526 | 1256, 527 | 394 528 | ] 529 | }, 530 | { 531 | "time": 84.01103377342224, 532 | "type": "keyDown", 533 | "button": "Key.shift", 534 | "pos": null 535 | }, 536 | { 537 | "time": 85.06403374671936, 538 | "type": "click", 539 | "button": "Button.left", 540 | "pos": [ 541 | 1177, 542 | 395 543 | ] 544 | }, 545 | { 546 | "time": 86.21603441238403, 547 | "type": "click", 548 | "button": "Button.left", 549 | "pos": [ 550 | 1177, 551 | 395 552 | ] 553 | }, 554 | { 555 | "time": 87.33603429794312, 556 | "type": "click", 557 | "button": "Button.left", 558 | "pos": [ 559 | 1177, 560 | 395 561 | ] 562 | }, 563 | { 564 | "time": 88.30003356933594, 565 | "type": "click", 566 | "button": "Button.left", 567 | "pos": [ 568 | 1177, 569 | 395 570 | ] 571 | }, 572 | { 573 | "time": 89.27403450012207, 574 | "type": "click", 575 | "button": "Button.left", 576 | "pos": [ 577 | 1177, 578 | 395 579 | ] 580 | }, 581 | { 582 | "time": 90.13803434371948, 583 | "type": "click", 584 | "button": "Button.left", 585 | "pos": [ 586 | 1177, 587 | 395 588 | ] 589 | }, 590 | { 591 | "time": 91.04203462600708, 592 | "type": "click", 593 | "button": "Button.left", 594 | "pos": [ 595 | 1177, 596 | 395 597 | ] 598 | }, 599 | { 600 | "time": 92.93803358078003, 601 | "type": "click", 602 | "button": "Button.left", 603 | "pos": [ 604 | 1177, 605 | 395 606 | ] 607 | }, 608 | { 609 | "time": 93.98803448677063, 610 | "type": "click", 611 | "button": "Button.left", 612 | "pos": [ 613 | 1177, 614 | 395 615 | ] 616 | }, 617 | { 618 | "time": 95.00003361701965, 619 | "type": "click", 620 | "button": "Button.left", 621 | "pos": [ 622 | 1177, 623 | 395 624 | ] 625 | }, 626 | { 627 | "time": 95.95003342628479, 628 | "type": "click", 629 | "button": "Button.left", 630 | "pos": [ 631 | 1177, 632 | 395 633 | ] 634 | }, 635 | { 636 | "time": 96.86803436279297, 637 | "type": "click", 638 | "button": "Button.left", 639 | "pos": [ 640 | 1177, 641 | 395 642 | ] 643 | }, 644 | { 645 | "time": 97.7640335559845, 646 | "type": "click", 647 | "button": "Button.left", 648 | "pos": [ 649 | 1177, 650 | 395 651 | ] 652 | }, 653 | { 654 | "time": 98.65203356742859, 655 | "type": "click", 656 | "button": "Button.left", 657 | "pos": [ 658 | 1177, 659 | 395 660 | ] 661 | }, 662 | { 663 | "time": 99.54003357887268, 664 | "type": "click", 665 | "button": "Button.left", 666 | "pos": [ 667 | 1177, 668 | 395 669 | ] 670 | }, 671 | { 672 | "time": 100.42803382873535, 673 | "type": "click", 674 | "button": "Button.left", 675 | "pos": [ 676 | 1177, 677 | 395 678 | ] 679 | }, 680 | { 681 | "time": 101.2680332660675, 682 | "type": "click", 683 | "button": "Button.left", 684 | "pos": [ 685 | 1177, 686 | 395 687 | ] 688 | }, 689 | { 690 | "time": 103.57403445243835, 691 | "type": "click", 692 | "button": "Button.left", 693 | "pos": [ 694 | 1185, 695 | 408 696 | ] 697 | }, 698 | { 699 | "time": 104.6860339641571, 700 | "type": "click", 701 | "button": "Button.left", 702 | "pos": [ 703 | 1185, 704 | 408 705 | ] 706 | }, 707 | { 708 | "time": 105.75203466415405, 709 | "type": "click", 710 | "button": "Button.left", 711 | "pos": [ 712 | 1185, 713 | 408 714 | ] 715 | }, 716 | { 717 | "time": 106.81003379821777, 718 | "type": "click", 719 | "button": "Button.left", 720 | "pos": [ 721 | 1185, 722 | 408 723 | ] 724 | }, 725 | { 726 | "time": 107.92203378677368, 727 | "type": "click", 728 | "button": "Button.left", 729 | "pos": [ 730 | 1185, 731 | 408 732 | ] 733 | }, 734 | { 735 | "time": 108.98803353309631, 736 | "type": "click", 737 | "button": "Button.left", 738 | "pos": [ 739 | 1185, 740 | 408 741 | ] 742 | }, 743 | { 744 | "time": 109.99803352355957, 745 | "type": "click", 746 | "button": "Button.left", 747 | "pos": [ 748 | 1185, 749 | 408 750 | ] 751 | }, 752 | { 753 | "time": 111.1020336151123, 754 | "type": "click", 755 | "button": "Button.left", 756 | "pos": [ 757 | 1185, 758 | 408 759 | ] 760 | }, 761 | { 762 | "time": 112.26003432273865, 763 | "type": "click", 764 | "button": "Button.left", 765 | "pos": [ 766 | 1185, 767 | 408 768 | ] 769 | }, 770 | { 771 | "time": 113.33403396606445, 772 | "type": "click", 773 | "button": "Button.left", 774 | "pos": [ 775 | 1185, 776 | 408 777 | ] 778 | }, 779 | { 780 | "time": 114.80203342437744, 781 | "type": "click", 782 | "button": "Button.left", 783 | "pos": [ 784 | 1172, 785 | 411 786 | ] 787 | }, 788 | { 789 | "time": 115.41003441810608, 790 | "type": "keyUp", 791 | "button": "Key.shift", 792 | "pos": null 793 | }, 794 | { 795 | "time": 118.84603333473206, 796 | "type": "click", 797 | "button": "Button.left", 798 | "pos": [ 799 | 297, 800 | 301 801 | ] 802 | }, 803 | { 804 | "time": 121.0840334892273, 805 | "type": "click", 806 | "button": "Button.left", 807 | "pos": [ 808 | 495, 809 | 758 810 | ] 811 | } 812 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_goto_earthstation.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 13.772506475448608, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 162, 8 | 839 9 | ] 10 | }, 11 | { 12 | "time": 17.516506671905518, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 727, 17 | 473 18 | ] 19 | }, 20 | { 21 | "time": 22.322506427764893, 22 | "type": "keyDown", 23 | "button": "z", 24 | "pos": null 25 | }, 26 | { 27 | "time": 22.44250726699829, 28 | "type": "keyUp", 29 | "button": "z", 30 | "pos": null 31 | }, 32 | { 33 | "time": 57.138505935668945, 34 | "type": "click", 35 | "button": "Button.left", 36 | "pos": [ 37 | 1546, 38 | 626 39 | ] 40 | }, 41 | { 42 | "time": 76.48988389968872, 43 | "type": "click", 44 | "button": "Button.left", 45 | "pos": [ 46 | 165, 47 | 839 48 | ] 49 | }, 50 | { 51 | "time": 80.48988437652588, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 430, 56 | 461 57 | ] 58 | }, 59 | { 60 | "time": 85.00988364219666, 61 | "type": "keyDown", 62 | "button": "z", 63 | "pos": null 64 | }, 65 | { 66 | "time": 85.12988352775574, 67 | "type": "keyUp", 68 | "button": "z", 69 | "pos": null 70 | }, 71 | { 72 | "time": 108.14388418197632, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1547, 77 | 627 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_goto_ship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 7.683999061584473, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 10.70799994468689, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 11.97999906539917, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 12.23599910736084, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 13.355998992919922, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.163999319076538, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.947999238967896, 40 | "type": "keyDown", 41 | "button": "a", 42 | "pos": null 43 | }, 44 | { 45 | "time": 15.211998701095581, 46 | "type": "keyUp", 47 | "button": "a", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.251999139785767, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 16.995999813079834, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 17.715999364852905, 64 | "type": "keyDown", 65 | "button": "a", 66 | "pos": null 67 | }, 68 | { 69 | "time": 17.89199924468994, 70 | "type": "keyUp", 71 | "button": "a", 72 | "pos": null 73 | }, 74 | { 75 | "time": 19.499999284744263, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 24.29200005531311, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 24.98100471496582, 88 | "type": "keyDown", 89 | "button": "a", 90 | "pos": null 91 | }, 92 | { 93 | "time": 25.603999376296997, 94 | "type": "keyUp", 95 | "button": "a", 96 | "pos": null 97 | }, 98 | { 99 | "time": 29.667998552322388, 100 | "type": "keyDown", 101 | "button": "w", 102 | "pos": null 103 | }, 104 | { 105 | "time": 31.723999738693237, 106 | "type": "keyUp", 107 | "button": "w", 108 | "pos": null 109 | }, 110 | { 111 | "time": 32.29300570487976, 112 | "type": "keyDown", 113 | "button": "a", 114 | "pos": null 115 | }, 116 | { 117 | "time": 32.7720000743866, 118 | "type": "keyUp", 119 | "button": "a", 120 | "pos": null 121 | }, 122 | { 123 | "time": 33.09999990463257, 124 | "type": "keyDown", 125 | "button": "w", 126 | "pos": null 127 | }, 128 | { 129 | "time": 37.13199973106384, 130 | "type": "keyUp", 131 | "button": "w", 132 | "pos": null 133 | }, 134 | { 135 | "time": 41.53800010681152, 136 | "type": "click", 137 | "button": "Button.left", 138 | "pos": [ 139 | 1366, 140 | 171 141 | ] 142 | } 143 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_goto_trader.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 2.29499888420105, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 8.374999046325684, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 9.478999137878418, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 11.64699912071228, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 13.142998933792114, 28 | "type": "keyDown", 29 | "button": "a", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.422999620437622, 34 | "type": "keyUp", 35 | "button": "a", 36 | "pos": null 37 | }, 38 | { 39 | "time": 15.094999551773071, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 20.294999599456787, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 21.56699824333191, 52 | "type": "keyDown", 53 | "button": "d", 54 | "pos": null 55 | }, 56 | { 57 | "time": 22.49499797821045, 58 | "type": "keyUp", 59 | "button": "d", 60 | "pos": null 61 | }, 62 | { 63 | "time": 23.83099937438965, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 25.174999237060547, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 26.062999486923218, 76 | "type": "keyDown", 77 | "button": "a", 78 | "pos": null 79 | }, 80 | { 81 | "time": 26.197998695373535, 82 | "type": "keyUp", 83 | "button": "a", 84 | "pos": null 85 | }, 86 | { 87 | "time": 28.1589994430542, 88 | "type": "keyDown", 89 | "button": "w", 90 | "pos": null 91 | }, 92 | { 93 | "time": 32.98699924468994, 94 | "type": "keyUp", 95 | "button": "w", 96 | "pos": null 97 | }, 98 | { 99 | "time": 34.03099846839905, 100 | "type": "keyDown", 101 | "button": "d", 102 | "pos": null 103 | }, 104 | { 105 | "time": 35.28699827194214, 106 | "type": "keyUp", 107 | "button": "d", 108 | "pos": null 109 | }, 110 | { 111 | "time": 36.6789984703064, 112 | "type": "keyDown", 113 | "button": "w", 114 | "pos": null 115 | }, 116 | { 117 | "time": 39.19899868965149, 118 | "type": "keyUp", 119 | "button": "w", 120 | "pos": null 121 | } 122 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 5.847508430480957, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 7.055508375167847, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 8.823508501052856, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 9.487507820129395, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 10.775508642196655, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 16.559508085250854, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 17.41550874710083, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 18.663508415222168, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 19.583508491516113, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 24.75950813293457, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 25.67150855064392, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 26.071508646011353, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 27.545509099960327, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1028, 80 | 386 81 | ] 82 | }, 83 | { 84 | "time": 31.32350778579712, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1375, 89 | 574 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_10.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.1710007190704346, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 3.5390000343322754, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.731000661849976, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.6670005321502686, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.939000368118286, 28 | "type": "keyDown", 29 | "button": "d", 30 | "pos": null 31 | }, 32 | { 33 | "time": 8.299000024795532, 34 | "type": "keyUp", 35 | "button": "d", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.460999488830566, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 1018, 44 | 392 45 | ] 46 | }, 47 | { 48 | "time": 13.354999542236328, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1373, 53 | 582 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_11.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.695999622344971, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.799999237060547, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.632000684738159, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 8.416000604629517, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 9.18399977684021, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.024000406265259, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.799999952316284, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 16.088000059127808, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 17.23200011253357, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.75200057029724, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 20.62399983406067, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.943999767303467, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.81600046157837, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 956, 80 | 362 81 | ] 82 | }, 83 | { 84 | "time": 25.18399977684021, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1374, 89 | 581 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_12.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.690509557723999, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.762507677078247, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.658509016036987, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.306507587432861, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.282508134841919, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.842509031295776, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.546507358551025, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 15.954524755477905, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.762508392333984, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 20.626509189605713, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 21.51450824737549, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 21.834508419036865, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 22.644508123397827, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 991, 80 | 384 81 | ] 82 | }, 83 | { 84 | "time": 25.918508291244507, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1376, 89 | 578 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_13.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 5.298998832702637, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.818999290466309, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.730999231338501, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.474998474121094, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.322998285293579, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 12.754998445510864, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 13.314998626708984, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.618998765945435, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.658998489379883, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.082999229431152, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.65099859237671, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.010998487472534, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 20.84299921989441, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 968, 80 | 387 81 | ] 82 | }, 83 | { 84 | "time": 25.416999101638794, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1381, 89 | 578 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_14.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.8610007762908936, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.40500020980835, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.901000261306763, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 9.133000373840332, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 9.668999910354614, 28 | "type": "keyDown", 29 | "button": "d", 30 | "pos": null 31 | }, 32 | { 33 | "time": 10.157000064849854, 34 | "type": "keyUp", 35 | "button": "d", 36 | "pos": null 37 | }, 38 | { 39 | "time": 11.087000608444214, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 1070, 44 | 381 45 | ] 46 | }, 47 | { 48 | "time": 14.277000427246094, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1375, 53 | 581 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_15.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.003000020980835, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.978999614715576, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.986999988555908, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.690999746322632, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.554998874664307, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 12.57099962234497, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 13.346999168395996, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.578999757766724, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.578999757766724, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.162999391555786, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.78700017929077, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.210999250411987, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.292999744415283, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1006, 80 | 379 81 | ] 82 | }, 83 | { 84 | "time": 24.722999334335327, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1369, 89 | 578 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_16.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.029999494552612, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.469999551773071, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.206002712249756, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.949999094009399, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.66200041770935, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.293999195098877, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 14.021999597549438, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 15.230000495910645, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.15000033378601, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.30999994277954, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 20.07800030708313, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.397999048233032, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.437999963760376, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1028, 80 | 384 81 | ] 82 | }, 83 | { 84 | "time": 24.842000246047974, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1369, 89 | 578 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_17.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.412998914718628, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.204999208450317, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.996999263763428, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.70099949836731, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.220998287200928, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 12.58099913597107, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 13.340998888015747, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.516998767852783, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.48499846458435, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.028998613357544, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.748998880386353, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.076998472213745, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.564998626708984, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1047, 80 | 349 81 | ] 82 | }, 83 | { 84 | "time": 24.436999082565308, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1376, 89 | 578 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_18.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.867997884750366, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.219998598098755, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 6.843998193740845, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.3079986572265625, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.987998008728027, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 14.796006917953491, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 15.427998781204224, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 16.916001796722412, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 18.491998434066772, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 21.571505308151245, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 24.113504648208618, 64 | "type": "click", 65 | "button": "Button.left", 66 | "pos": [ 67 | 1294, 68 | 370 69 | ] 70 | }, 71 | { 72 | "time": 27.779505729675293, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1373, 77 | 580 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_19.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 2.4789998531341553, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.839000701904297, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.287000894546509, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.030999183654785, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.391000032424927, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 10.622999906539917, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 11.23099970817566, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 12.495003461837769, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 13.111000537872314, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 15.631000280380249, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 16.72700047492981, 64 | "type": "click", 65 | "button": "Button.left", 66 | "pos": [ 67 | 1197, 68 | 372 69 | ] 70 | }, 71 | { 72 | "time": 24.28700041770935, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1367, 77 | 580 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_2.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.7129993438720703, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.056999921798706, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.601000070571899, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 8.600999116897583, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 9.937000036239624, 28 | "type": "keyDown", 29 | "button": "d", 30 | "pos": null 31 | }, 32 | { 33 | "time": 10.20099925994873, 34 | "type": "keyUp", 35 | "button": "d", 36 | "pos": null 37 | }, 38 | { 39 | "time": 11.861000299453735, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 1063, 44 | 369 45 | ] 46 | }, 47 | { 48 | "time": 15.298999071121216, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1373, 53 | 581 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_20.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.4920008182525635, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 3.811999559402466, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.3640007972717285, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 4.94800066947937, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.396000623703003, 28 | "type": "keyDown", 29 | "button": "a", 30 | "pos": null 31 | }, 32 | { 33 | "time": 6.884000062942505, 34 | "type": "keyUp", 35 | "button": "a", 36 | "pos": null 37 | }, 38 | { 39 | "time": 7.484000205993652, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 11.052000045776367, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 11.715999603271484, 52 | "type": "keyDown", 53 | "button": "d", 54 | "pos": null 55 | }, 56 | { 57 | "time": 12.987999677658081, 58 | "type": "keyUp", 59 | "button": "d", 60 | "pos": null 61 | }, 62 | { 63 | "time": 13.908000946044922, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 16.763999700546265, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 18.380000114440918, 76 | "type": "keyDown", 77 | "button": "d", 78 | "pos": null 79 | }, 80 | { 81 | "time": 18.604000568389893, 82 | "type": "keyUp", 83 | "button": "d", 84 | "pos": null 85 | }, 86 | { 87 | "time": 19.827999353408813, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 1077, 92 | 351 93 | ] 94 | }, 95 | { 96 | "time": 23.848012685775757, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1378, 101 | 580 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_21.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 2.75100040435791, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 5.6949992179870605, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.943000316619873, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.286999702453613, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.0309998989105225, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 9.071000337600708, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 10.48099970817566, 40 | "type": "click", 41 | "button": "Button.left", 42 | "pos": [ 43 | 1228, 44 | 390 45 | ] 46 | }, 47 | { 48 | "time": 13.841007232666016, 49 | "type": "click", 50 | "button": "Button.left", 51 | "pos": [ 52 | 1377, 53 | 587 54 | ] 55 | } 56 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_22.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 1.5100479125976562, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 412, 8 | 1060 9 | ] 10 | }, 11 | { 12 | "time": 2.3140900135040283, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 1322, 17 | 648 18 | ] 19 | }, 20 | { 21 | "time": 6.425947666168213, 22 | "type": "click", 23 | "button": "Button.left", 24 | "pos": [ 25 | 1103, 26 | 620 27 | ] 28 | }, 29 | { 30 | "time": 9.702017545700073, 31 | "type": "click", 32 | "button": "Button.left", 33 | "pos": [ 34 | 1095, 35 | 611 36 | ] 37 | } 38 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_3.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.4120233058929443, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 8.020024538040161, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 8.964024543762207, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 9.308024406433105, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 10.140024423599243, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 12.500024557113647, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 13.260023832321167, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 13.716023683547974, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 14.814024209976196, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 912, 56 | 375 57 | ] 58 | }, 59 | { 60 | "time": 18.174023628234863, 61 | "type": "click", 62 | "button": "Button.left", 63 | "pos": [ 64 | 1371, 65 | 579 66 | ] 67 | } 68 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_4.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 9.037999629974365, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 13.629998207092285, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 14.389997959136963, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 14.78999948501587, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 15.453999519348145, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 18.453999519348145, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 19.189998865127563, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 19.54999876022339, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 21.099998950958252, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 1029, 56 | 375 57 | ] 58 | }, 59 | { 60 | "time": 24.593998193740845, 61 | "type": "click", 62 | "button": "Button.left", 63 | "pos": [ 64 | 1373, 65 | 580 66 | ] 67 | } 68 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_5.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 5.06200098991394, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 7.086000680923462, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.56600022315979, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.902000665664673, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 8.230000019073486, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 9.99000096321106, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 10.382000207901001, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 10.590000867843628, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 11.48600149154663, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 1120, 56 | 412 57 | ] 58 | }, 59 | { 60 | "time": 14.81600022315979, 61 | "type": "click", 62 | "button": "Button.left", 63 | "pos": [ 64 | 1376, 65 | 582 66 | ] 67 | } 68 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_6.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.7680342197418213, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.368033409118652, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.2000346183776855, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 7.7680344581604, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.824033260345459, 28 | "type": "keyDown", 29 | "button": "d", 30 | "pos": null 31 | }, 32 | { 33 | "time": 7.904033422470093, 34 | "type": "keyUp", 35 | "button": "d", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.384035348892212, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.60003399848938, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 16.152034759521484, 52 | "type": "keyDown", 53 | "button": "d", 54 | "pos": null 55 | }, 56 | { 57 | "time": 17.45603346824646, 58 | "type": "keyUp", 59 | "button": "d", 60 | "pos": null 61 | }, 62 | { 63 | "time": 18.112035036087036, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 21.336033821105957, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 22.67203378677368, 76 | "type": "keyDown", 77 | "button": "d", 78 | "pos": null 79 | }, 80 | { 81 | "time": 23.21604013442993, 82 | "type": "keyUp", 83 | "button": "d", 84 | "pos": null 85 | }, 86 | { 87 | "time": 24.92404007911682, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 919, 92 | 366 93 | ] 94 | }, 95 | { 96 | "time": 28.140034198760986, 97 | "type": "click", 98 | "button": "Button.left", 99 | "pos": [ 100 | 1375, 101 | 579 102 | ] 103 | } 104 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_7.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.917001008987427, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.629000186920166, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.652999401092529, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 8.38100004196167, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 10.509001016616821, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 15.365000486373901, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 16.725000143051147, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 17.9730007648468, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 19.61300039291382, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 23.092999935150146, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 24.245001077651978, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 24.50100040435791, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 25.893000841140747, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1002, 80 | 366 81 | ] 82 | }, 83 | { 84 | "time": 29.393000841140747, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1375, 89 | 579 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_8.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 5.6829993724823, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 6.8669984340667725, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 7.723010540008545, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 8.449999570846558, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 9.14699912071228, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 13.850999355316162, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 15.346998929977417, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 16.547014236450195, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 17.121999502182007, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.98599886894226, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 20.93099880218506, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 21.177999019622803, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 22.237998723983765, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 1036, 80 | 389 81 | ] 82 | }, 83 | { 84 | "time": 25.273998975753784, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1373, 89 | 577 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /image_bot/recordings/lokistation_start_9.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 4.0869996547698975, 4 | "type": "keyDown", 5 | "button": "w", 6 | "pos": null 7 | }, 8 | { 9 | "time": 4.830000877380371, 10 | "type": "keyUp", 11 | "button": "w", 12 | "pos": null 13 | }, 14 | { 15 | "time": 5.6150126457214355, 16 | "type": "keyDown", 17 | "button": "d", 18 | "pos": null 19 | }, 20 | { 21 | "time": 6.2860002517700195, 22 | "type": "keyUp", 23 | "button": "d", 24 | "pos": null 25 | }, 26 | { 27 | "time": 7.454001188278198, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 12.614000082015991, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 13.486000299453735, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.814000606536865, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.470000982284546, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 19.254000425338745, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 19.8940007686615, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 20.23900079727173, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 21.134000539779663, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 990, 80 | 368 81 | ] 82 | }, 83 | { 84 | "time": 24.124001502990723, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 1375, 89 | 581 90 | ] 91 | } 92 | ] -------------------------------------------------------------------------------- /recording_bot/playback.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | from time import sleep, time 3 | import os 4 | import json 5 | 6 | 7 | def main(): 8 | 9 | initializePyAutoGUI() 10 | countdownTimer() 11 | 12 | playActions("earthstation_goto_trader.json") 13 | sleep(2.00) 14 | playActions("earthstation_do_trading.json") 15 | sleep(2.00) # After trading wait for zoom out animation to finish 16 | playActions("earthstation_goto_ship.json") 17 | sleep(10.00) # Allow time for the outside world to load 18 | playActions("earthstation_goto_lokistation.json") 19 | 20 | print("Done") 21 | 22 | 23 | def initializePyAutoGUI(): 24 | # Initialized PyAutoGUI 25 | # https://pyautogui.readthedocs.io/en/latest/introduction.html 26 | # When fail-safe mode is True, moving the mouse to the upper-left corner will abort your program. 27 | pyautogui.FAILSAFE = True 28 | 29 | 30 | def countdownTimer(): 31 | # Countdown timer 32 | print("Starting", end="", flush=True) 33 | for i in range(0, 10): 34 | print(".", end="", flush=True) 35 | sleep(1) 36 | print("Go") 37 | 38 | 39 | def playActions(filename): 40 | # Read the file 41 | script_dir = os.path.dirname(__file__) 42 | filepath = os.path.join( 43 | script_dir, 44 | 'recordings', 45 | filename 46 | ) 47 | with open(filepath, 'r') as jsonfile: 48 | # parse the json 49 | data = json.load(jsonfile) 50 | 51 | # loop over each action 52 | # Because we are not waiting any time before executing the first action, any delay before the initial 53 | # action is recorded will not be reflected in the playback. 54 | for index, action in enumerate(data): 55 | action_start_time = time() 56 | 57 | # look for escape input to exit 58 | if action['button'] == 'Key.esc': 59 | break 60 | 61 | # perform the action 62 | if action['type'] == 'keyDown': 63 | key = convertKey(action['button']) 64 | pyautogui.keyDown(key) 65 | print("keyDown on {}".format(key)) 66 | elif action['type'] == 'keyUp': 67 | key = convertKey(action['button']) 68 | pyautogui.keyUp(key) 69 | print("keyUp on {}".format(key)) 70 | elif action['type'] == 'click': 71 | pyautogui.click(action['pos'][0], action['pos'][1], duration=0.25) 72 | print("click on {}".format(action['pos'])) 73 | 74 | # then sleep until next action should occur 75 | try: 76 | next_action = data[index + 1] 77 | except IndexError: 78 | # this was the last action in the list 79 | break 80 | elapsed_time = next_action['time'] - action['time'] 81 | 82 | # if elapsed_time is negative, that means our actions are not ordered correctly. throw an error 83 | if elapsed_time < 0: 84 | raise Exception('Unexpected action ordering.') 85 | 86 | # adjust elapsed_time to account for our code taking time to run 87 | elapsed_time -= (time() - action_start_time) 88 | if elapsed_time < 0: 89 | elapsed_time = 0 90 | print('sleeping for {}'.format(elapsed_time)) 91 | sleep(elapsed_time) 92 | 93 | 94 | # convert pynput button keys into pyautogui keys 95 | # https://pynput.readthedocs.io/en/latest/_modules/pynput/keyboard/_base.html#Key 96 | # https://pyautogui.readthedocs.io/en/latest/keyboard.html 97 | def convertKey(button): 98 | PYNPUT_SPECIAL_CASE_MAP = { 99 | 'alt_l': 'altleft', 100 | 'alt_r': 'altright', 101 | 'alt_gr': 'altright', 102 | 'caps_lock': 'capslock', 103 | 'ctrl_l': 'ctrlleft', 104 | 'ctrl_r': 'ctrlright', 105 | 'page_down': 'pagedown', 106 | 'page_up': 'pageup', 107 | 'shift_l': 'shiftleft', 108 | 'shift_r': 'shiftright', 109 | 'num_lock': 'numlock', 110 | 'print_screen': 'printscreen', 111 | 'scroll_lock': 'scrolllock', 112 | } 113 | 114 | # example: 'Key.F9' should return 'F9', 'w' should return as 'w' 115 | cleaned_key = button.replace('Key.', '') 116 | 117 | if cleaned_key in PYNPUT_SPECIAL_CASE_MAP: 118 | return PYNPUT_SPECIAL_CASE_MAP[cleaned_key] 119 | 120 | return cleaned_key 121 | 122 | 123 | if __name__ == "__main__": 124 | main() 125 | -------------------------------------------------------------------------------- /recording_bot/recorder.py: -------------------------------------------------------------------------------- 1 | from pynput import mouse, keyboard 2 | from time import time 3 | import json 4 | import os 5 | 6 | 7 | OUTPUT_FILENAME = 'actions_test_01' 8 | # declare mouse_listener globally so that keyboard on_release can stop it 9 | mouse_listener = None 10 | # declare our start_time globally so that the callback functions can reference it 11 | start_time = None 12 | # keep track of unreleased keys to prevent over-reporting press events 13 | unreleased_keys = [] 14 | # storing all input events 15 | input_events = [] 16 | 17 | class EventType(): 18 | KEYDOWN = 'keyDown' 19 | KEYUP = 'keyUp' 20 | CLICK = 'click' 21 | 22 | 23 | def main(): 24 | runListeners() 25 | print("Recording duration: {} seconds".format(elapsed_time())) 26 | global input_events 27 | print(json.dumps(input_events)) 28 | 29 | # write the output to a file 30 | script_dir = os.path.dirname(__file__) 31 | filepath = os.path.join( 32 | script_dir, 33 | 'recordings', 34 | '{}.json'.format(OUTPUT_FILENAME) 35 | ) 36 | with open(filepath, 'w') as outfile: 37 | json.dump(input_events, outfile, indent=4) 38 | 39 | 40 | def elapsed_time(): 41 | global start_time 42 | return time() - start_time 43 | 44 | 45 | def record_event(event_type, event_time, button, pos=None): 46 | global input_events 47 | input_events.append({ 48 | 'time': event_time, 49 | 'type': event_type, 50 | 'button': str(button), 51 | 'pos': pos 52 | }) 53 | 54 | if event_type == EventType.CLICK: 55 | print('{} on {} pos {} at {}'.format(event_type, button, pos, event_time)) 56 | else: 57 | print('{} on {} at {}'.format(event_type, button, event_time)) 58 | 59 | 60 | def on_press(key): 61 | # we only want to record the first keypress event until that key has been 62 | # released 63 | global unreleased_keys 64 | if key in unreleased_keys: 65 | return 66 | else: 67 | unreleased_keys.append(key) 68 | 69 | try: 70 | record_event(EventType.KEYDOWN, elapsed_time(), key.char) 71 | except AttributeError: 72 | record_event(EventType.KEYDOWN, elapsed_time(), key) 73 | 74 | 75 | def on_release(key): 76 | # mark key as no longer pressed 77 | global unreleased_keys 78 | try: 79 | unreleased_keys.remove(key) 80 | except ValueError: 81 | print('ERROR: {} not in unreleased_keys'.format(key)) 82 | 83 | try: 84 | record_event(EventType.KEYUP, elapsed_time(), key.char) 85 | except AttributeError: 86 | record_event(EventType.KEYUP, elapsed_time(), key) 87 | 88 | # stop listeners with the escape key 89 | if key == keyboard.Key.esc: 90 | # Stop mouse listener 91 | global mouse_listener 92 | mouse_listener.stop() 93 | # Stop keyboard listener 94 | raise keyboard.Listener.StopException 95 | 96 | 97 | def on_click(x, y, button, pressed): 98 | # when pressed is False, that means it's a release event. 99 | # let's listen only to mouse click releases 100 | if not pressed: 101 | record_event(EventType.CLICK, elapsed_time(), button, (x, y)) 102 | 103 | 104 | def runListeners(): 105 | 106 | # Collect mouse input events 107 | global mouse_listener 108 | mouse_listener = mouse.Listener(on_click=on_click) 109 | mouse_listener.start() 110 | mouse_listener.wait() # wait for the listener to become ready 111 | 112 | # Collect keyboard inputs until released 113 | # https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard 114 | with keyboard.Listener( 115 | on_press=on_press, 116 | on_release=on_release) as listener: 117 | global start_time 118 | start_time = time() 119 | listener.join() 120 | 121 | 122 | if __name__ == "__main__": 123 | main() 124 | -------------------------------------------------------------------------------- /recording_bot/recordings/actions_test_01.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 0.34999942779541016, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 877, 8 | 898 9 | ] 10 | }, 11 | { 12 | "time": 0.4979984760284424, 13 | "type": "keyDown", 14 | "button": "s", 15 | "pos": null 16 | }, 17 | { 18 | "time": 0.6819984912872314, 19 | "type": "keyUp", 20 | "button": "s", 21 | "pos": null 22 | }, 23 | { 24 | "time": 0.6979985237121582, 25 | "type": "keyDown", 26 | "button": "g", 27 | "pos": null 28 | }, 29 | { 30 | "time": 0.7779982089996338, 31 | "type": "keyUp", 32 | "button": "g", 33 | "pos": null 34 | }, 35 | { 36 | "time": 0.8019983768463135, 37 | "type": "keyDown", 38 | "button": "e", 39 | "pos": null 40 | }, 41 | { 42 | "time": 0.8819980621337891, 43 | "type": "keyDown", 44 | "button": "g", 45 | "pos": null 46 | }, 47 | { 48 | "time": 0.8979983329772949, 49 | "type": "keyUp", 50 | "button": "e", 51 | "pos": null 52 | }, 53 | { 54 | "time": 0.9459974765777588, 55 | "type": "keyDown", 56 | "button": "s", 57 | "pos": null 58 | }, 59 | { 60 | "time": 1.0659983158111572, 61 | "type": "keyUp", 62 | "button": "g", 63 | "pos": null 64 | }, 65 | { 66 | "time": 1.0819988250732422, 67 | "type": "keyUp", 68 | "button": "s", 69 | "pos": null 70 | }, 71 | { 72 | "time": 1.6975393295288086, 73 | "type": "keyDown", 74 | "button": "Key.esc", 75 | "pos": null 76 | }, 77 | { 78 | "time": 1.7775123119354248, 79 | "type": "keyUp", 80 | "button": "Key.esc", 81 | "pos": null 82 | } 83 | ] -------------------------------------------------------------------------------- /recording_bot/recordings/earthstation_do_trading.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 8.33899474143982, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 142, 8 | 375 9 | ] 10 | }, 11 | { 12 | "time": 15.758992910385132, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 356, 17 | 796 18 | ] 19 | }, 20 | { 21 | "time": 18.860994577407837, 22 | "type": "keyDown", 23 | "button": "Key.shift", 24 | "pos": null 25 | }, 26 | { 27 | "time": 19.862993478775024, 28 | "type": "click", 29 | "button": "Button.left", 30 | "pos": [ 31 | 76, 32 | 415 33 | ] 34 | }, 35 | { 36 | "time": 21.54099440574646, 37 | "type": "keyUp", 38 | "button": "Key.shift", 39 | "pos": null 40 | }, 41 | { 42 | "time": 22.34499430656433, 43 | "type": "click", 44 | "button": "Button.left", 45 | "pos": [ 46 | 79, 47 | 409 48 | ] 49 | }, 50 | { 51 | "time": 23.52499294281006, 52 | "type": "keyDown", 53 | "button": "Key.shift", 54 | "pos": null 55 | }, 56 | { 57 | "time": 24.330993175506592, 58 | "type": "click", 59 | "button": "Button.left", 60 | "pos": [ 61 | 79, 62 | 411 63 | ] 64 | }, 65 | { 66 | "time": 27.020994186401367, 67 | "type": "click", 68 | "button": "Button.left", 69 | "pos": [ 70 | 80, 71 | 477 72 | ] 73 | }, 74 | { 75 | "time": 29.230992555618286, 76 | "type": "click", 77 | "button": "Button.left", 78 | "pos": [ 79 | 75, 80 | 552 81 | ] 82 | }, 83 | { 84 | "time": 31.442993879318237, 85 | "type": "click", 86 | "button": "Button.left", 87 | "pos": [ 88 | 76, 89 | 621 90 | ] 91 | }, 92 | { 93 | "time": 32.21299409866333, 94 | "type": "keyUp", 95 | "button": "Key.shift", 96 | "pos": null 97 | }, 98 | { 99 | "time": 34.64299392700195, 100 | "type": "click", 101 | "button": "Button.left", 102 | "pos": [ 103 | 295, 104 | 296 105 | ] 106 | }, 107 | { 108 | "time": 37.27099418640137, 109 | "type": "click", 110 | "button": "Button.left", 111 | "pos": [ 112 | 492, 113 | 758 114 | ] 115 | } 116 | ] -------------------------------------------------------------------------------- /recording_bot/recordings/earthstation_goto_lokistation.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 8.809997797012329, 4 | "type": "click", 5 | "button": "Button.left", 6 | "pos": [ 7 | 162, 8 | 838 9 | ] 10 | }, 11 | { 12 | "time": 14.127997159957886, 13 | "type": "click", 14 | "button": "Button.left", 15 | "pos": [ 16 | 527, 17 | 552 18 | ] 19 | }, 20 | { 21 | "time": 17.687998056411743, 22 | "type": "keyDown", 23 | "button": "z", 24 | "pos": null 25 | }, 26 | { 27 | "time": 17.807998418807983, 28 | "type": "keyUp", 29 | "button": "z", 30 | "pos": null 31 | }, 32 | { 33 | "time": 45.61400103569031, 34 | "type": "click", 35 | "button": "Button.left", 36 | "pos": [ 37 | 1545, 38 | 626 39 | ] 40 | }, 41 | { 42 | "time": 64.33393931388855, 43 | "type": "click", 44 | "button": "Button.left", 45 | "pos": [ 46 | 162, 47 | 837 48 | ] 49 | }, 50 | { 51 | "time": 68.20593905448914, 52 | "type": "click", 53 | "button": "Button.left", 54 | "pos": [ 55 | 225, 56 | 523 57 | ] 58 | }, 59 | { 60 | "time": 70.72794008255005, 61 | "type": "keyDown", 62 | "button": "z", 63 | "pos": null 64 | }, 65 | { 66 | "time": 70.83194041252136, 67 | "type": "keyUp", 68 | "button": "z", 69 | "pos": null 70 | }, 71 | { 72 | "time": 104.21993851661682, 73 | "type": "click", 74 | "button": "Button.left", 75 | "pos": [ 76 | 1545, 77 | 629 78 | ] 79 | } 80 | ] -------------------------------------------------------------------------------- /recording_bot/recordings/earthstation_goto_ship.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 3.1470212936401367, 4 | "type": "keyDown", 5 | "button": "a", 6 | "pos": null 7 | }, 8 | { 9 | "time": 3.8500213623046875, 10 | "type": "keyUp", 11 | "button": "a", 12 | "pos": null 13 | }, 14 | { 15 | "time": 4.4670209884643555, 16 | "type": "keyDown", 17 | "button": "w", 18 | "pos": null 19 | }, 20 | { 21 | "time": 5.210022449493408, 22 | "type": "keyUp", 23 | "button": "w", 24 | "pos": null 25 | }, 26 | { 27 | "time": 6.08302116394043, 28 | "type": "keyDown", 29 | "button": "a", 30 | "pos": null 31 | }, 32 | { 33 | "time": 7.371022462844849, 34 | "type": "keyUp", 35 | "button": "a", 36 | "pos": null 37 | }, 38 | { 39 | "time": 9.21902084350586, 40 | "type": "keyDown", 41 | "button": "w", 42 | "pos": null 43 | }, 44 | { 45 | "time": 14.659021615982056, 46 | "type": "keyUp", 47 | "button": "w", 48 | "pos": null 49 | }, 50 | { 51 | "time": 15.59502100944519, 52 | "type": "keyDown", 53 | "button": "a", 54 | "pos": null 55 | }, 56 | { 57 | "time": 16.338021516799927, 58 | "type": "keyUp", 59 | "button": "a", 60 | "pos": null 61 | }, 62 | { 63 | "time": 17.787020206451416, 64 | "type": "keyDown", 65 | "button": "w", 66 | "pos": null 67 | }, 68 | { 69 | "time": 23.77002215385437, 70 | "type": "keyUp", 71 | "button": "w", 72 | "pos": null 73 | }, 74 | { 75 | "time": 24.202022314071655, 76 | "type": "keyDown", 77 | "button": "a", 78 | "pos": null 79 | }, 80 | { 81 | "time": 24.42602300643921, 82 | "type": "keyUp", 83 | "button": "a", 84 | "pos": null 85 | }, 86 | { 87 | "time": 26.88202142715454, 88 | "type": "click", 89 | "button": "Button.left", 90 | "pos": [ 91 | 267, 92 | 280 93 | ] 94 | } 95 | ] -------------------------------------------------------------------------------- /recording_bot/recordings/earthstation_goto_trader.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "time": 9.592514038085938, 4 | "type": "keyDown", 5 | "button": "s", 6 | "pos": null 7 | }, 8 | { 9 | "time": 10.855514526367188, 10 | "type": "keyUp", 11 | "button": "s", 12 | "pos": null 13 | }, 14 | { 15 | "time": 12.296512842178345, 16 | "type": "keyDown", 17 | "button": "a", 18 | "pos": null 19 | }, 20 | { 21 | "time": 12.624516248703003, 22 | "type": "keyUp", 23 | "button": "a", 24 | "pos": null 25 | }, 26 | { 27 | "time": 14.128512382507324, 28 | "type": "keyDown", 29 | "button": "w", 30 | "pos": null 31 | }, 32 | { 33 | "time": 15.615512371063232, 34 | "type": "keyUp", 35 | "button": "w", 36 | "pos": null 37 | }, 38 | { 39 | "time": 16.736511945724487, 40 | "type": "keyDown", 41 | "button": "d", 42 | "pos": null 43 | }, 44 | { 45 | "time": 17.53551197052002, 46 | "type": "keyUp", 47 | "button": "d", 48 | "pos": null 49 | }, 50 | { 51 | "time": 19.368512392044067, 52 | "type": "keyDown", 53 | "button": "w", 54 | "pos": null 55 | }, 56 | { 57 | "time": 23.71951198577881, 58 | "type": "keyUp", 59 | "button": "w", 60 | "pos": null 61 | }, 62 | { 63 | "time": 27.13651180267334, 64 | "type": "keyDown", 65 | "button": "d", 66 | "pos": null 67 | }, 68 | { 69 | "time": 27.29651141166687, 70 | "type": "keyUp", 71 | "button": "d", 72 | "pos": null 73 | }, 74 | { 75 | "time": 28.264512062072754, 76 | "type": "keyDown", 77 | "button": "w", 78 | "pos": null 79 | }, 80 | { 81 | "time": 30.040513277053833, 82 | "type": "keyUp", 83 | "button": "w", 84 | "pos": null 85 | }, 86 | { 87 | "time": 31.064512968063354, 88 | "type": "keyDown", 89 | "button": "d", 90 | "pos": null 91 | }, 92 | { 93 | "time": 32.12751269340515, 94 | "type": "keyUp", 95 | "button": "d", 96 | "pos": null 97 | }, 98 | { 99 | "time": 33.00051259994507, 100 | "type": "keyDown", 101 | "button": "w", 102 | "pos": null 103 | }, 104 | { 105 | "time": 34.27151274681091, 106 | "type": "keyUp", 107 | "button": "w", 108 | "pos": null 109 | }, 110 | { 111 | "time": 35.13551211357117, 112 | "type": "keyDown", 113 | "button": "a", 114 | "pos": null 115 | }, 116 | { 117 | "time": 35.33551383018494, 118 | "type": "keyUp", 119 | "button": "a", 120 | "pos": null 121 | } 122 | ] -------------------------------------------------------------------------------- /timing_bot/main.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | from time import sleep 3 | 4 | DELAY_BETWEEN_COMMANDS = 1.00 5 | 6 | 7 | def main(): 8 | 9 | initializePyAutoGUI() 10 | countdownTimer() 11 | 12 | # Starting Point: Loki Station central landing platform. Wedge yourself between Louden MacEwen and the edge of the 13 | # wall. Then talk to him, and just close the interaction. It's important that you get the initial character 14 | # alignment just right or the whole routine will be off. 15 | 16 | goToMerchant() 17 | tradeWithMerchant() 18 | returnToShip() 19 | flyToEarthStation() 20 | 21 | # Ending Point: Docked at Earth Station. 22 | print("Done") 23 | 24 | 25 | def initializePyAutoGUI(): 26 | # Initialized PyAutoGUI 27 | # https://pyautogui.readthedocs.io/en/latest/introduction.html 28 | # When fail-safe mode is True, moving the mouse to the upper-left corner will abort your program. 29 | pyautogui.FAILSAFE = True 30 | 31 | 32 | def countdownTimer(): 33 | # Countdown timer 34 | print("Starting", end="", flush=True) 35 | for i in range(0, 10): 36 | print(".", end="", flush=True) 37 | sleep(1) 38 | print("Go") 39 | 40 | 41 | def holdKey(key, seconds=1.00): 42 | pyautogui.keyDown(key) 43 | sleep(seconds) 44 | pyautogui.keyUp(key) 45 | sleep(DELAY_BETWEEN_COMMANDS) 46 | 47 | 48 | def reportMousePosition(seconds=10): 49 | for i in range(0, seconds): 50 | print(pyautogui.position()) 51 | sleep(1) 52 | 53 | 54 | def goToMerchant(): 55 | # Back away from Louden MacEwen 56 | holdKey('s', 6.00) 57 | # Face the entrance 58 | holdKey('a', 0.10) 59 | # Go through the entrance into the main lobby 60 | holdKey('w', 7.00) 61 | # Turn to the bazaar lobby 62 | holdKey('d', 0.65) 63 | # Go through the entrance into the bazaar lobby 64 | holdKey('w', 5.60) 65 | # Turn to the trade merchant 66 | holdKey('d', 1.16) 67 | # Walk up to the trade merchant 68 | holdKey('w', 1.50) 69 | 70 | 71 | def tradeWithMerchant(): 72 | # Hover our mouse over the merchant 73 | pyautogui.moveTo(1200, 355, 0.25) 74 | sleep(DELAY_BETWEEN_COMMANDS) 75 | # Click the merchant to start our chat 76 | pyautogui.click() 77 | # Allow time for the chat to begin 78 | sleep(3.00) 79 | 80 | # Click the trade button 81 | pyautogui.click(378, 799, duration=0.25) 82 | # Allow time for the inventory to load 83 | sleep(1.00) 84 | 85 | # Move to the item. Was having trouble when I combined the movement with click() on this step 86 | pyautogui.moveTo(1159, 398, 0.25) 87 | sleep(1.0) 88 | # Now click on it to select it 89 | pyautogui.click() 90 | sleep(1.00) 91 | 92 | # Buy the item 93 | numToBuy = 28 94 | pyautogui.keyDown('shiftleft') 95 | for i in range(0, numToBuy): 96 | pyautogui.click() 97 | sleep(0.5) 98 | pyautogui.keyUp('shiftleft') 99 | 100 | # Click the close button 101 | pyautogui.click(1573, 320, duration=0.5) 102 | 103 | # Click the done button and wait for zoom out animation to finish 104 | pyautogui.click(486, 759, duration=0.5) 105 | sleep(2.00) 106 | 107 | 108 | def returnToShip(): 109 | # Change our body angle 110 | holdKey('a', 0.20) 111 | # Backup to center of the bazaar 112 | holdKey('s', 2.65) 113 | # Turn to the exit 114 | holdKey('d', 0.08) 115 | # Go through the exit back into the main lobby 116 | holdKey('w', 5.76) 117 | # Turn to the hangar 118 | holdKey('a', 0.68) 119 | # Go through the exit into the hangar 120 | holdKey('w', 6.20) 121 | # Turn towards our ship 122 | holdKey('a', 0.30) 123 | # Click our ship to exit the station 124 | pyautogui.click(438, 285, duration=0.25) 125 | # Allow time for the outside world to load 126 | sleep(10.00) 127 | 128 | 129 | def flyToEarthStation(): 130 | # Open the navigation map 131 | pyautogui.click(160, 840, duration=0.5) 132 | # Select the sector gate to Earth 133 | pyautogui.click(766, 469, duration=0.5) 134 | # Wait for warp path to be calculated 135 | sleep(1.5) 136 | # Initiate warp 137 | holdKey('z', 0.10) 138 | # Wait for warp to finish 139 | sleep(36) 140 | # Enter the gate 141 | pyautogui.click(1544, 627, duration=0.5) 142 | # Wait for the sector change to load 143 | sleep(15) 144 | # Open the navigation map 145 | pyautogui.click(160, 840, duration=0.5) 146 | # Select Earth Station 147 | pyautogui.click(428, 460, duration=0.5) 148 | # Wait for warp path to be calculated 149 | sleep(1.0) 150 | # Initiate warp 151 | holdKey('z', 0.10) 152 | # Wait for warp to finish 153 | sleep(17) 154 | # Dock at the station 155 | pyautogui.click(1544, 627, duration=0.5) 156 | 157 | 158 | if __name__ == "__main__": 159 | main() 160 | --------------------------------------------------------------------------------