61 lines
1.7 KiB
Python
Executable File
61 lines
1.7 KiB
Python
Executable File
#!/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)
|