#!/bin/sh version=1.1 usage() { echo "Usage: zrct [options] " echo 'Set of operations for OpenRCT2 server management. By default reads zsrct2.conf for config Operations: start start in screen instance in background startLocal start the server in the current console console prompt the screen instance (C-a + d to leave) stop save the park and stop backup make a backup of current save getautosave get latest autosave and sets it as active save -> auto backup of current save | alias: get update recompile portable instance from latest source Options: -h display help -v display version of script -c use this file for config -s uses provided save file -S uses this server instance (folder) -C command to execute for starting server' } save_backup () { echo "Backing up '$save_file' to $1.sv6.gz" gzip -c "$save_file" > "$BACKUP_PATH/$1.sv6.gz" } stop_server () { screen -S "$SCREEN_NAME" -X stuff "^M" sleep 1 screen -S "$SCREEN_NAME" -X stuff "save_park^M" sleep 1 screen -S "$SCREEN_NAME" -X stuff "quit^M" } unset save_file config_file="zsrct2.conf" while getopts ":hS:s:c:b:" opt; do case $opt in h) usage exit 1 ;; v) echo $VERSION exit 1 ;; S) server_path=${OPTARG} ;; s) save_file=${OPTARG} ;; c) config_file=${OPTARG} ;; *) echo "Incorrect option: $OPTARG" exit ;; esac done if [ ! -f "$config_file" ] then echo "Generating default config file" echo '# zsrct2 1.1 config file # listening port of the server PORT=11753 # name of the screen instance for background start SCREEN_NAME=OpenRCT2 # path to store user data DATA_PATH=data # path to save backups BACKUP_PATH=backup # specify the full path to a save SAVE_FILE= # specify a save name inside a save path # .sv6 is omitted #SAVE_NAME= #SAVE_PATH=saves # path to a portable instance of openrct2 #SERVER_NAME= # specific command to use when staring #COMMAND=openrct2 # additionnal command options #OPTS= # source path for updating portable instance #SRC_PATH=src ' >> "$config_file" || exit 1 exit 100 fi [ $(echo "$config_file" | cut -c1) != '/' ] && config_file="$(pwd)/$config_file" . "$config_file" # resolve command if [ -z "$COMMAND" ] then COMMAND=openrct2 [ -n "$SERVER_PATH" ] && COMMAND="$SERVER_PATH/openrct2" fi if [ -z "$save_file" ] then if [ -n "$SAVE_FILE" ] then save_file="$SAVE_FILE" else save_file="$SAVE_PATH/$SAVE_NAME.sv6" fi fi [ -z "$BACKUP_PATH" ] && BACKUP_PATH=backup mkdir -p "$BACKUP_PATH" 2>/dev/null mkdir -p "$SAVE_PATH" 2>/dev/null mkdir -p "$DATA_PATH" 2>/dev/null shift $((OPTIND-1)) case $1 in start) screen -dmS "$SCREEN_NAME" "$COMMAND" host "$save_file" --user-data-path "$DATA_PATH" --port "$PORT" --headless $OPTS ;; startLocal) "$COMMAND" host "$save_file" --user-data-path "$DATA_PATH" --port "$PORT" --headless $OPTS ;; console) screen -r "$SCREEN_NAME" ;; stop) stop_server ;; backup) if [ -n "$2" ] then save_backup "$2" else save_backup "$SAVE_NAME"_"$(date -u "+20%y-%m-%d_%H%M%S")" fi ;; getautosave|get) autosave=$(ls -l "$DATA_PATH/save/autosave/" | grep autosave | tail -1 | tr -s ' ' | cut -d ' ' -f9-) mv "$save_file" "$BACKUP_PATH/$(basename "$save_file")"_"$(date -u "+20%y-%m-%d_%H%M%S")" mv "$DATA_PATH/save/autosave/$autosave" "$save_file" ;; update) DISCORD_RPC=false DESKTOP_ENTRY=false CLEAN_SRC=false SRCDIR="$SRC_PATH" DESTDIR="$SERVER_PATH" zrct2-install ;; *) usage && exit 1 ;; esac