Initial commit
This commit is contained in:
60
ark_server.py
Executable file
60
ark_server.py
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user