add initial script to test on win10
This commit is contained in:
5
rf2/README.md
Normal file
5
rf2/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## rFactor 2 scripts
|
||||
RF2 is a pain to manage so doing it with scripts now.
|
||||
|
||||
### setup_server.py
|
||||
- All in one script to download server + content via SteamCMD (also downloaded as part of this script)
|
||||
1
rf2/requirements.txt
Normal file
1
rf2/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
requests==2.27.1
|
||||
183
rf2/setup_server.py
Normal file
183
rf2/setup_server.py
Normal file
@@ -0,0 +1,183 @@
|
||||
import argparse
|
||||
from logging import exception
|
||||
import os
|
||||
import requests
|
||||
import subprocess
|
||||
import zipfile
|
||||
|
||||
# Download / extract SteamCMD
|
||||
# Download game server
|
||||
# Download workshop - config for this
|
||||
# Move workshop files to game server folder
|
||||
# Can MAS2 etc be scripted?
|
||||
|
||||
# Also need to deal with keys
|
||||
# Run server with some basic content (have default car / track to download)
|
||||
# Once the server closes, ServerKeys.bin (or whatever its called) should be there
|
||||
# Optionally copy this somewhere?
|
||||
|
||||
# Possible args:
|
||||
# Server name
|
||||
# Path to install
|
||||
# Car list
|
||||
# Track list
|
||||
|
||||
STEAM_CMD_URL = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip"
|
||||
|
||||
SERVER_APP_ID = 400300
|
||||
GAME_APP_ID = 365960
|
||||
|
||||
# 917387157 - Silverstone 2012
|
||||
# 1515650133 - McLaren MP4/13
|
||||
SERVER_SETUP_CONTENT = ["917387157", "1515650133"]
|
||||
|
||||
def create_server_dir(server_base_path: str, server_path: str) -> bool:
|
||||
if not os.path.exists(server_path):
|
||||
response = input(f"'{server_path}' does not exist. Create? y/N: ")
|
||||
if response.upper == "Y":
|
||||
try:
|
||||
os.makedirs(server_path)
|
||||
except Exception as e:
|
||||
print(f"\nError: Could not create '{server_path}' - {e}")
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
if os.path.exists(server_base_path):
|
||||
print(f"\nError: '{server_base_path}' already exists!")
|
||||
return False
|
||||
|
||||
try:
|
||||
os.mkdir(server_base_path)
|
||||
except Exception as e:
|
||||
print(f"\nError: Could not create '{server_base_path}' - {e}")
|
||||
|
||||
return True
|
||||
|
||||
def download_steamcmd(steamcmd_path: str) -> bool:
|
||||
# Make dir for steamcmd
|
||||
print(f"Creating directory for SteamCMD at '{steamcmd_path}'...")
|
||||
if os.path.exists(steamcmd_path):
|
||||
print(f"\nError: '{steamcmd_path}' already exists!")
|
||||
return False
|
||||
|
||||
try:
|
||||
os.mkdir(steamcmd_path)
|
||||
except Exception as e:
|
||||
print(f"\nError: Could not create '{steamcmd_path}' - {e}")
|
||||
return False
|
||||
|
||||
print("Downloading SteamCMD...")
|
||||
print(f"\t{STEAM_CMD_URL}")
|
||||
|
||||
response = requests.get(STEAM_CMD_URL)
|
||||
|
||||
print("Writing downloaded file...")
|
||||
with open(f"{steamcmd_path}/steamcmd.zip", "wb") as steamcmd_file:
|
||||
steamcmd_file.write(response.content)
|
||||
|
||||
return True
|
||||
|
||||
def extract_steamcmd(steamcmd_path: str) -> bool:
|
||||
print("Extracting SteamCMD zip...")
|
||||
with zipfile.ZipFile(f"{steamcmd_path}/steamcmd.zip", "r") as steamcmd_zip:
|
||||
steamcmd_zip.extractall(steamcmd_path)
|
||||
|
||||
# Remove steamcmd.zip folder
|
||||
print("Removing downloaded zip...")
|
||||
os.remove(f"{steamcmd_path}/steamcmd.zip")
|
||||
|
||||
return True
|
||||
|
||||
def download_server(steamcmd_path: str) -> bool:
|
||||
print("Downloading rFactor 2 server...")
|
||||
|
||||
subprocess.run(
|
||||
[
|
||||
f"{steamcmd_path}/steamcmd.exe",
|
||||
"+login",
|
||||
"anonymous",
|
||||
"+app_update",
|
||||
"400300",
|
||||
"validate",
|
||||
"+quit"
|
||||
]
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
def read_steam_credentials(credentials_file: str) -> tuple:
|
||||
return (False, {})
|
||||
|
||||
def read_workshop(content_file: str) -> tuple:
|
||||
return (False, [])
|
||||
|
||||
def download_workshop(server_base_path: str, workshop_content: list) -> bool:
|
||||
return False
|
||||
|
||||
def move_workshop(server_base_path: str, workshop_content: list) -> bool:
|
||||
return False
|
||||
|
||||
def install_workshop(server_base_path: str, workshop_content: list) -> bool:
|
||||
return False
|
||||
|
||||
def uninstall_workshop(server_base_path: str, workshop_content: list) -> bool:
|
||||
return False
|
||||
|
||||
def open_mas2(server_base_path: str) -> bool:
|
||||
# MIGHT be able to create MAS files using the ModMgr it seems
|
||||
return False
|
||||
|
||||
def start_server(server_base_path: str) -> bool:
|
||||
return False
|
||||
|
||||
def server_keys(server_base_path: str) -> bool:
|
||||
# download + install basic content here
|
||||
|
||||
print("Starting server to get server keys file")
|
||||
print("\t1 - Create a server using basic content")
|
||||
print(f"\t2 - Once the server is running, ServerKeys.bin should exist at {server_base_path}/UserData/ServerKeys.bin")
|
||||
print("\t3 - Copy this file to your main rFactor 2 installation which owns the paid DLC you are installing")
|
||||
print("\t\t<steam_games_dir>\\steamapps\\common\\rFactor 2\\UserData\\ServerKeys.bin")
|
||||
print("\t4 - Start a single player race (any content I think)")
|
||||
print("\t5 - There should not be a ServerUnlock.bin file in the folder you copied ServerKeys.bin to")
|
||||
print("\t\t<steam_games_dir>\\steamapps\\common\\rFactor 2\\UserData\\ServerUnlock.bin")
|
||||
print(f"\t6 - Copy ServerUnlock.bin back to {server_base_path}/UserData/ServerUnlock.bin")
|
||||
|
||||
# start server here - dont think this can be scripted?
|
||||
|
||||
input("\nPress Enter once you have completed those steps...")
|
||||
return True
|
||||
|
||||
def setup_server(server_name: str, server_path: str, content_file: str, credentials_file: str) -> bool:
|
||||
server_base_path = f"{server_path}/{server_name}"
|
||||
steamcmd_path = f"{server_base_path}/steamcmd"
|
||||
|
||||
if not create_server_dir(server_base_path, server_path):
|
||||
return False
|
||||
|
||||
if not download_steamcmd(steamcmd_path):
|
||||
return False
|
||||
|
||||
if not extract_steamcmd(steamcmd_path):
|
||||
return False
|
||||
|
||||
if not download_server(steamcmd_path):
|
||||
return False
|
||||
|
||||
if not server_keys(server_base_path):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Set up rFactor 2 server :)")
|
||||
|
||||
parser.add_argument("name", type=str, help="Friendly name for the server")
|
||||
parser.add_argument("path", type=str, help="Path to download the server to")
|
||||
parser.add_argument("content_file", type=str, help="Path to a list of workshop IDs to download and install onto the server")
|
||||
parser.add_argument("credentials_file", type=str, help="Path to file containing Steam username and password in format username:password")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
setup_server(args.name, os.path.abspath(args.path), args.content_file, args.credentials_file)
|
||||
Reference in New Issue
Block a user