From a83529864dbb34160e40c8d5378f267bdecec9c2 Mon Sep 17 00:00:00 2001 From: zawz Date: Mon, 8 Jun 2020 11:56:15 +0200 Subject: [PATCH] Improve rct2 --- zrct2/zrct2-install | 11 ++-- zrct2/zsrct2 | 155 +++++++++++++++++++++++++++----------------- 2 files changed, 99 insertions(+), 67 deletions(-) diff --git a/zrct2/zrct2-install b/zrct2/zrct2-install index 18b4ee7..4326ddc 100755 --- a/zrct2/zrct2-install +++ b/zrct2/zrct2-install @@ -36,13 +36,13 @@ DNF_PACKAGES="gcc gcc-c++ jansson-devel openssl-devel SDL2-devel libicu-devel sp PACMAN_PACKAGES="gcc gcc-libs git cmake sdl2 fontconfig libzip libpng curl jansson speexdsp openssl icu duktape" echo_white "Installing packages" -if which apt >/dev/null +if which apt >/dev/null 2>&1 then sudo apt install --no-install-recommends -y $APT_PACKAGES || abort $? -elif which dnf >/dev/null +elif which dnf >/dev/null 2>&1 then sudo dnf install $DNF_PACKAGES || abort $? -elif which pacman >/dev/null +elif which pacman >/dev/null 2>&1 then sudo pacman -S --needed $PACMAN_PACKAGES || abort $? else @@ -53,9 +53,6 @@ _done [ -z "$DESTDIR" ] && DESTDIR='OpenRCT2' [ -z "$SRCDIR" ] && SRCDIR='openrct2-src' -mkdir -p "$SRCDIR" -cd "$SRCDIR" || abort $? - ## PULLING SOURCE ## . echo_white "Getting source code" if [ -d "$SRCDIR" ] @@ -138,7 +135,7 @@ then fi mkdir -p build || abort $? cd build || abort $? -cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. || abort $? +cmake -DCMAKE_BUILD_TYPE=Release .. || abort $? _done ## BUILD ## ./$SCRDIR/build diff --git a/zrct2/zsrct2 b/zrct2/zsrct2 index 4800df6..24fe1a8 100755 --- a/zrct2/zsrct2 +++ b/zrct2/zsrct2 @@ -1,5 +1,7 @@ #!/bin/sh +version=1.1 + usage() { echo "Usage: zrct [options] " echo 'Set of operations for OpenRCT2 server management. @@ -9,35 +11,48 @@ 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 from latest source. Will overwrite previous server + 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" - cp "$save_file" "$backup_path/$1.sv6" - gzip "$backup_path/$1.sv6" + 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:" opt; +while getopts ":hS:s:c:b:" opt; do case $opt in h) usage - exit 0 + exit 1 + ;; + v) + echo $VERSION + exit 1 ;; S) server_path=${OPTARG} @@ -58,72 +73,92 @@ done if [ ! -f "$config_file" ] then echo "Generating default config file" - echo '# zsrct2 1.0 config file -SAVE_NAME= -SERVER_NAME=server + echo '# zsrct2 1.1 config file + +# listening port of the server PORT=11753 + +# name of the screen instance for background start SCREEN_NAME=OpenRCT2 -SAVE_FOLDER=saves -BACKUP_FOLDER=saves/backup -DATA_FOLDER=data -SRC_FOLDER=src +# 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 -save_name=$(grep "SAVE_NAME=" "$config_file" | cut -d '=' -f2-) -server_path=$(grep "SERVER_PATH=" "$config_file" | cut -d '=' -f2-) -port=$(grep "PORT=" "$config_file" | cut -d '=' -f2-) -screen_name=$(grep "SCREEN_NAME=" "$config_file" | cut -d '=' -f2-) -save_path=$(grep "SAVE_PATH=" "$config_file" | cut -d '=' -f2-) -backup_path=$(grep "BACKUP_PATH=" "$config_file" | cut -d '=' -f2-) -data_path=$(grep "DATA_PATH=" "$config_file" | cut -d '=' -f2-) -src_path=$(grep "SRC_PATH=" "$config_file" | cut -d '=' -f2-) +[ $(echo "$config_file" | cut -c1) != '/' ] && config_file="$(pwd)/$config_file" +. "$config_file" -[ -z "$save_file" ] && save_file="$save_path/$save_name.sv6" +# resolve command +if [ -z "$COMMAND" ] +then + COMMAND=openrct2 + [ -n "$SERVER_PATH" ] && COMMAND="$SERVER_PATH/openrct2" +fi -[ ! -d "$backup_path" ] && mkdir -p "$backup_path" -[ ! -d "$save_path" ] && mkdir -p "$save_path" -[ ! -d "$data_path" ] && mkdir -p "$data_path" +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)) -if [ "$1" ] - then - if [ "$1" = "start" ] - then - screen -dmS "$screen_name" "$server_path/openrct2" host "$save_file" --user-data-path "$data_path" --port "$port" --headless - - elif [ "$1" = "startLocal" ] - then - "$server_path/openrct2" host "$save_file" --user-data-path "$data_path" --port "$port" --headless - - elif [ "$1" = "console" ] - then - screen -r "$screen_name" - - elif [ "$1" = "backup" ] - then - +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")" + save_backup "$SAVE_NAME"_"$(date -u "+20%y-%m-%d_%H%M%S")" fi - - elif [ "$1" = "getautosave" ] || [ "$1" = "get" ] - then - 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" - - elif [ "$1" = "update" ] - then - DISCORD_RPC=false DESKTOP_ENTRY=false CLEAN_SRC=false SRCDIR="$src_path" DESTDIR="$server_path" zrct2-install - - else - usage - fi -else - usage -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