#!/usr/bin/python3 def run_server(config, full_server_id): cluster_id, server_id = full_server_id.split(".") cluster = config["clusters"][cluster_id] server = config[cluster_id][server_id] map_name = server["map"] map_title = map_name.replace("_P", "") session_name = f"{cluster['name']}: {map_title}" port_index = server["port"] game_port = config["ports"]["game"] + port_index * 2 query_port = config["ports"]["query"] + port_index rcon_port = config["ports"]["rcon"] + port_index mod_names = cluster["mods"] if "mods" in server: mod_names += server["mods"] mod_ids = [str(config["mods"][name]) for name in mod_names] game_uri = "?".join([ server["map"], "listen", f"SessionName={session_name}", f"AltSaveDirectoryName={full_server_id}", f"Port={game_port}", f"QueryPort={query_port}", f"RCONPORT={rcon_port}", f"GameModIds={','.join(mod_ids)}", ]) args = [ config["exe"], game_uri, "-server", "-log", "-NoBattlEye", "-exclusivejoin", "-NoTransferFromFiltering", f"-clusterid={cluster['name']}", ] from os import execv execv(config["exe"], args) if __name__ == "__main__": from argparse import ArgumentParser p = ArgumentParser(description="ARK Server launcher script") p.add_argument("--config", "-c", metavar="FILE", default="ark_servers.toml", help="Config file path") p.add_argument("server", metavar="NAME", help="Which server config entry to run") args = p.parse_args() from toml import load config = load(args.config) run_server(config, args.server)