Files
ark_launcher/ark_server.py
2025-05-27 20:38:48 -07:00

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)