shtools/zrct2/zsrct2
2020-06-08 11:56:15 +02:00

164 lines
3.7 KiB
Bash
Executable file

#!/bin/sh
version=1.1
usage() {
echo "Usage: zrct [options] <operation>"
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 <file> use this file for config
-s <save> uses provided save file
-S <server> uses this server instance (folder)
-C <command> 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