def start_match_helper(bot_list: List[dict], match_settings: dict, launcher_prefs: RocketLeagueLauncherPreference): print(bot_list) print(match_settings) match_config = MatchConfig() match_config.game_mode = match_settings['game_mode'] match_config.game_map = match_settings['map'] match_config.skip_replays = match_settings['skip_replays'] match_config.instant_start = match_settings['instant_start'] match_config.enable_lockstep = match_settings['enable_lockstep'] match_config.enable_rendering = match_settings['enable_rendering'] match_config.enable_state_setting = match_settings['enable_state_setting'] match_config.auto_save_replay = match_settings['auto_save_replay'] match_config.existing_match_behavior = match_settings['match_behavior'] match_config.mutators = MutatorConfig() mutators = match_settings['mutators'] match_config.mutators.match_length = mutators['match_length'] match_config.mutators.max_score = mutators['max_score'] match_config.mutators.overtime = mutators['overtime'] match_config.mutators.series_length = mutators['series_length'] match_config.mutators.game_speed = mutators['game_speed'] match_config.mutators.ball_max_speed = mutators['ball_max_speed'] match_config.mutators.ball_type = mutators['ball_type'] match_config.mutators.ball_weight = mutators['ball_weight'] match_config.mutators.ball_size = mutators['ball_size'] match_config.mutators.ball_bounciness = mutators['ball_bounciness'] match_config.mutators.boost_amount = mutators['boost_amount'] match_config.mutators.rumble = mutators['rumble'] match_config.mutators.boost_strength = mutators['boost_strength'] match_config.mutators.gravity = mutators['gravity'] match_config.mutators.demolish = mutators['demolish'] match_config.mutators.respawn_time = mutators['respawn_time'] human_index_tracker = IncrementingInteger(0) match_config.player_configs = [ create_player_config(bot, human_index_tracker) for bot in bot_list ] match_config.script_configs = [ create_script_config(script) for script in match_settings['scripts'] ] sm = get_fresh_setup_manager() try: setup_match(sm, match_config, launcher_prefs) except Exception as e: print(e) eel.matchStartFailed(str(e)) return # Note that we are not calling infinite_loop because that is not compatible with the way eel works! # Instead we will reproduce the important behavior from infinite_loop inside this file. eel.matchStarted()
def create_player_config(bot, human_index_tracker: IncrementingInteger): player_config = PlayerConfig() player_config.bot = bot['type'] in ('rlbot', 'psyonix') player_config.rlbot_controlled = bot['type'] in ('rlbot', 'party_member_bot') player_config.bot_skill = bot['skill'] player_config.human_index = 0 if player_config.bot else human_index_tracker.increment() player_config.name = bot['name'] player_config.team = int(bot['team']) if 'path' in bot and bot['path']: player_config.config_path = bot['path'] return player_config
def parse_match_config(config_parser: ConfigObject, config_location, config_bundle_overrides, looks_config_overrides) -> MatchConfig: match_config = MatchConfig() match_config.mutators = MutatorConfig() # Determine number of participants num_players = get_num_players(config_parser) parse_match_settings(match_config, config_parser) # Retrieve bot config files config_bundles = get_bot_config_bundles(num_players, config_parser, config_location, config_bundle_overrides) match_config.player_configs = [] human_index_tracker = IncrementingInteger(0) # Set configuration values for bots and store name and team for i in range(num_players): config_bundle = config_bundles[i] looks_config_object = None if i in looks_config_overrides: looks_config_object = looks_config_overrides[i] player_config = _load_bot_config(i, config_bundle, looks_config_object, config_parser, human_index_tracker) match_config.player_configs.append(player_config) extension_path = config_parser.get(RLBOT_CONFIGURATION_HEADER, EXTENSION_PATH_KEY) if extension_path and extension_path != 'None': # The string 'None' ends up in people's config a lot. match_config.extension_config = ExtensionConfig() match_config.extension_config.python_file_path = extension_path match_config.networking_role = config_parser.get( RLBOT_CONFIGURATION_HEADER, NETWORKING_ROLE_KEY) match_config.network_address = config_parser.get( RLBOT_CONFIGURATION_HEADER, NETWORK_ADDRESS_KEY) match_config.script_configs = [ ScriptConfig(bundle.config_path) for bundle in get_script_config_bundles(config_parser, config_location) ] return match_config
def start_match_helper(bot_list, match_settings): print(bot_list) print(match_settings) match_config = MatchConfig() match_config.game_mode = match_settings['game_mode'] match_config.game_map = match_settings['map'] match_config.skip_replays = match_settings['skip_replays'] match_config.instant_start = match_settings['instant_start'] match_config.enable_lockstep = match_settings['enable_lockstep'] match_config.enable_rendering = match_settings['enable_rendering'] match_config.enable_state_setting = match_settings['enable_state_setting'] match_config.auto_save_replay = match_settings['auto_save_replay'] match_config.existing_match_behavior = match_settings['match_behavior'] match_config.mutators = MutatorConfig() mutators = match_settings['mutators'] match_config.mutators.match_length = mutators['match_length'] match_config.mutators.max_score = mutators['max_score'] match_config.mutators.overtime = mutators['overtime'] match_config.mutators.series_length = mutators['series_length'] match_config.mutators.game_speed = mutators['game_speed'] match_config.mutators.ball_max_speed = mutators['ball_max_speed'] match_config.mutators.ball_type = mutators['ball_type'] match_config.mutators.ball_weight = mutators['ball_weight'] match_config.mutators.ball_size = mutators['ball_size'] match_config.mutators.ball_bounciness = mutators['ball_bounciness'] match_config.mutators.boost_amount = mutators['boost_amount'] match_config.mutators.rumble = mutators['rumble'] match_config.mutators.boost_strength = mutators['boost_strength'] match_config.mutators.gravity = mutators['gravity'] match_config.mutators.demolish = mutators['demolish'] match_config.mutators.respawn_time = mutators['respawn_time'] human_index_tracker = IncrementingInteger(0) match_config.player_configs = [create_player_config(bot, human_index_tracker) for bot in bot_list] match_config.script_configs = [create_script_config(script) for script in match_settings['scripts']] global sm if sm is not None: try: sm.shut_down() except Exception as e: print(e) sm = SetupManager() sm.early_start_seconds = 5 sm.connect_to_game() sm.load_match_config(match_config) sm.launch_early_start_bot_processes() sm.start_match() sm.launch_bot_processes()
def parse_match_config(config_parser: ConfigObject, config_location, config_bundle_overrides, looks_config_overrides) -> MatchConfig: match_config = MatchConfig() match_config.mutators = MutatorConfig() # Determine number of participants num_players = get_num_players(config_parser) parse_match_settings(match_config, config_parser) # Retrieve bot config files config_bundles = get_bot_config_bundles(num_players, config_parser, config_location, config_bundle_overrides) match_config.player_configs = [] human_index_tracker = IncrementingInteger(0) # Set configuration values for bots and store name and team for i in range(num_players): config_bundle = config_bundles[i] if i not in looks_config_overrides: looks_config_object = config_bundle.get_looks_config() else: looks_config_object = looks_config_overrides[i] player_config = _load_bot_config(i, config_bundle, looks_config_object, config_parser, human_index_tracker) match_config.player_configs.append(player_config) for path in config_parser.get(BOTLESS_AGENT_CONFIGURATION_HEADER, BOTLESS_AGENT_PATH_KEY): if path != 'None': match_config.botless_agents.append(path) extension_path = config_parser.get(RLBOT_CONFIGURATION_HEADER, EXTENSION_PATH_KEY) if extension_path and extension_path != 'None': # The string 'None' ends up in people's config a lot. match_config.extension_config = ExtensionConfig() match_config.extension_config.python_file_path = extension_path return match_config
def start_match_helper(bot_list, match_settings): print(bot_list) print(match_settings) num_participants = len(bot_list) match_config = MatchConfig() match_config.num_players = num_participants match_config.game_mode = match_settings['game_mode'] match_config.game_map = match_settings['map'] match_config.mutators = MutatorConfig() mutators = match_settings['mutators'] match_config.mutators.match_length = mutators['match_length'] match_config.mutators.max_score = mutators['max_score'] match_config.mutators.overtime = mutators['overtime'] match_config.mutators.series_length = mutators['series_length'] match_config.mutators.game_speed = mutators['game_speed'] match_config.mutators.ball_max_speed = mutators['ball_max_speed'] match_config.mutators.ball_type = mutators['ball_type'] match_config.mutators.ball_weight = mutators['ball_weight'] match_config.mutators.ball_size = mutators['ball_size'] match_config.mutators.ball_bounciness = mutators['ball_bounciness'] match_config.mutators.boost_amount = mutators['boost_amount'] match_config.mutators.rumble = mutators['rumble'] match_config.mutators.boost_strength = mutators['boost_strength'] match_config.mutators.gravity = mutators['gravity'] match_config.mutators.demolish = mutators['demolish'] match_config.mutators.respawn_time = mutators['respawn_time'] human_index_tracker = IncrementingInteger(0) match_config.player_configs = [ create_player_config(bot, human_index_tracker) for bot in bot_list ] global sm if sm is not None: try: sm.shut_down() except Exception as e: print(e) sm = SetupManager() sm.connect_to_game() sm.load_match_config(match_config) sm.launch_ball_prediction() sm.launch_quick_chat_manager() sm.launch_bot_processes() sm.start_match()
def start_match_helper(bot_list: List[dict], match_settings: dict, launcher_prefs: RocketLeagueLauncherPreference): print(bot_list) print(match_settings) match_config = MatchConfig() match_config.game_mode = match_settings['game_mode'] match_config.game_map = match_settings['map'] match_config.skip_replays = match_settings['skip_replays'] match_config.instant_start = match_settings['instant_start'] match_config.enable_lockstep = match_settings['enable_lockstep'] match_config.enable_rendering = match_settings['enable_rendering'] match_config.enable_state_setting = match_settings['enable_state_setting'] match_config.auto_save_replay = match_settings['auto_save_replay'] match_config.existing_match_behavior = match_settings['match_behavior'] match_config.mutators = MutatorConfig() mutators = match_settings['mutators'] match_config.mutators.match_length = mutators['match_length'] match_config.mutators.max_score = mutators['max_score'] match_config.mutators.overtime = mutators['overtime'] match_config.mutators.series_length = mutators['series_length'] match_config.mutators.game_speed = mutators['game_speed'] match_config.mutators.ball_max_speed = mutators['ball_max_speed'] match_config.mutators.ball_type = mutators['ball_type'] match_config.mutators.ball_weight = mutators['ball_weight'] match_config.mutators.ball_size = mutators['ball_size'] match_config.mutators.ball_bounciness = mutators['ball_bounciness'] match_config.mutators.boost_amount = mutators['boost_amount'] match_config.mutators.rumble = mutators['rumble'] match_config.mutators.boost_strength = mutators['boost_strength'] match_config.mutators.gravity = mutators['gravity'] match_config.mutators.demolish = mutators['demolish'] match_config.mutators.respawn_time = mutators['respawn_time'] human_index_tracker = IncrementingInteger(0) match_config.player_configs = [ create_player_config(bot, human_index_tracker) for bot in bot_list ] match_config.script_configs = [ create_script_config(script) for script in match_settings['scripts'] ] sm = get_fresh_setup_manager() setup_match(sm, match_config, launcher_prefs)
def parse_configurations(start_match_configuration, config_parser, config_location, config_bundle_overrides, looks_configs): bot_names = [] bot_teams = [] python_files = [] # Determine number of participants num_participants = get_num_players(config_parser) parse_match_settings(start_match_configuration, config_parser) # Retrieve bot config files config_bundles = get_bot_config_bundles(num_participants, config_parser, config_location, config_bundle_overrides) # Create empty lists bot_parameter_list = [] name_dict = {} start_match_configuration.num_players = num_participants player_configuration_list = get_player_configuration_list(start_match_configuration) human_index_tracker = IncrementingInteger(0) # Set configuration values for bots and store name and team for i in range(num_participants): config_bundle = config_bundles[i] if i not in looks_configs: looks_config_object = get_looks_config(config_bundle) else: looks_config_object = looks_configs[i] bot_name, team_number, python_file, bot_parameters = load_bot_config(i, player_configuration_list[i], config_bundle, looks_config_object, config_parser, name_dict, human_index_tracker) bot_names.append(bot_name) bot_teams.append(team_number) python_files.append(python_file) bot_parameter_list.append(bot_parameters) return num_participants, bot_names, bot_teams, python_files, bot_parameter_list
def _load_bot_config(index, config_bundle: BotConfigBundle, looks_config_object: ConfigObject, overall_config: ConfigObject, human_index_tracker: IncrementingInteger) -> PlayerConfig: """ Loads the config data of a single bot :param index: This is the bot index (where it appears in game_cars) :param bot_configuration: A config object that will eventually be transformed and sent to the game. :param config_bundle: A config object for a single bot :param overall_config: This is the config for the entire session not one particular bot :param human_index_tracker: An object of type HumanIndexManager that helps set human_index correctly. :return: """ bot_configuration = PlayerConfig() bot_configuration.config_path = config_bundle.config_path team_num = get_team(overall_config, index) bot_configuration.team = team_num # Setting up data about what type of bot it is bot_type = overall_config.get(PARTICIPANT_CONFIGURATION_HEADER, PARTICIPANT_TYPE_KEY, index) bot_configuration.bot, bot_configuration.rlbot_controlled = get_bot_options( bot_type) bot_configuration.bot_skill = overall_config.getfloat( PARTICIPANT_CONFIGURATION_HEADER, PARTICIPANT_BOT_SKILL_KEY, index) if not bot_configuration.bot: bot_configuration.human_index = human_index_tracker.increment() # Setting up the bots name bot_configuration.name = config_bundle.name if looks_config_object: loadout_config = load_bot_appearance(looks_config_object, team_num) else: loadout_config = config_bundle.generate_loadout_config(index, team_num) bot_configuration.loadout_config = loadout_config return bot_configuration
def load_bot_config(index, bot_configuration, config_bundle: BotConfigBundle, looks_config_object, overall_config, name_dict, human_index_tracker: IncrementingInteger): """ Loads the config data of a single bot :param index: This is the bot index (where it appears in game_cars) :param bot_configuration: This is the game_tick_packet configuration that is sent back to the game :param config_bundle: A config object for a single bot :param overall_config: This is the config for the entire session not one particular bot :param name_dict: A mapping of used names so we can make sure to not reuse bot names. :param human_index_tracker: An object of type HumanIndexManager that helps set human_index correctly. :return: """ team_num = get_team(overall_config, index) bot_configuration.team = team_num # Setting up data about what type of bot it is bot_type = overall_config.get(PARTICIPANT_CONFIGURATION_HEADER, PARTICIPANT_TYPE_KEY, index) bot_configuration.bot, bot_configuration.rlbot_controlled = get_bot_options( bot_type) bot_configuration.bot_skill = overall_config.getfloat( PARTICIPANT_CONFIGURATION_HEADER, PARTICIPANT_BOT_SKILL_KEY, index) if not bot_configuration.bot: bot_configuration.human_index = human_index_tracker.increment() loadout_header = BOT_CONFIG_LOADOUT_HEADER if team_num == 1 and looks_config_object.has_section( BOT_CONFIG_LOADOUT_ORANGE_HEADER): loadout_header = BOT_CONFIG_LOADOUT_ORANGE_HEADER # Setting up the bots name bot_name = config_bundle.config_obj.get(BOT_CONFIG_MODULE_HEADER, BOT_NAME_KEY) bot_configuration.name = get_sanitized_bot_name(name_dict, bot_name) BaseAgent._parse_bot_loadout(bot_configuration, looks_config_object, loadout_header) if team_num == 0 and looks_config_object.has_section( BOT_CONFIG_LOADOUT_PAINT_BLUE_HEADER): BaseAgent._parse_bot_loadout_paint( bot_configuration, looks_config_object, BOT_CONFIG_LOADOUT_PAINT_BLUE_HEADER) if team_num == 1 and looks_config_object.has_section( BOT_CONFIG_LOADOUT_PAINT_ORANGE_HEADER): BaseAgent._parse_bot_loadout_paint( bot_configuration, looks_config_object, BOT_CONFIG_LOADOUT_PAINT_ORANGE_HEADER) python_file = 'NO_MODULE_FOR_PARTICIPANT' bot_parameters = None if bot_configuration.rlbot_controlled: # Python file relative to the config location. python_file = config_bundle.get_absolute_path(BOT_CONFIG_MODULE_HEADER, PYTHON_FILE_KEY) agent_class_wrapper = import_agent(python_file) bot_parameters = agent_class_wrapper.get_loaded_class( ).base_create_agent_configurations() bot_parameters.parse_file( config_bundle.config_obj, config_directory=config_bundle.config_directory) return bot_name, team_num, python_file, bot_parameters