PortValhalla/scripts/Common/Software/docker/services/trackmania/tmforever-entrypoint.sh
2024-11-29 01:15:08 +01:00

145 lines
4 KiB
Bash
Executable file

#!/bin/bash
set -e
configSource="GameData/Config/dedicated_cfg"
configFile="GameData/Config/live_config.xml"
settingsPath="/dedicated"
authLevelsPath="$settingsPath/authorization_levels/level"
accountPath="$settingsPath/masterserver_account"
serverPath="$settingsPath/server_options"
systemPath="$settingsPath/system_config"
TM_SUPERADMIN_PASSWORD="${TM_SUPERADMIN_PASSWORD:-$(openssl rand -base64 33)}"
TM_ADMIN_PASSWORD="${TM_ADMIN_PASSWORD:-$(openssl rand -base64 33)}"
echo "Checking whether the server is present…"
levels=(
TM_SUPERADMIN_PASSWORD 1
TM_ADMIN_PASSWORD 2
TM_USER_PASSWORD 3
)
accountOption=(
TM_SERVER_USER login
TM_SERVER_PASSWORD password
TM_SERVER_VALIDATION_KEY validation_key
)
serverOptions=(
TM_TITLE name
TM_COMMENT comment
TM_HIDDEN hide_server
\
TM_MAX_PLAYERS max_players
TM_PLAYER_PASSWORD password
\
TM_MAX_SPECTATORS max_spectators
TM_SPECTATOR_PASSWORD password_spectator
\
TM_LADDER_MODE ladder_mode
TM_LADDER_LIMIT_MIN ladder_serverlimit_min
TM_LADDER_LIMIT_MAX ladder_serverlimit_max
\
TM_ENABLE_P2P_UPLOAD enable_p2p_upload
TM_ENABLE_P2P_DOWNLOAD enable_p2p_download
\
TM_CALLVOTE_TIMEOUT callvote_timeout
TM_CALLVOTE_RATIO callvote_ratio
\
TM_ALLOW_CHALLENGE_DOWNLOAD allow_challenge_download
TM_AUTOSAVE_REPLAYS autosave_replays
TM_AUTOSAVE_VALIDATION_REPLAYS autosave_validation_replays
\
TM_REFEREE_PASSWORD referee_password
TM_REFEREE_VALIDATION_MODE referee_validation_mode
\
TM_USE_CHANGING_VALIDATION_SEED use_changing_validation_seed
)
systemOptions=(
TM_BIND_IP bind_ip_address
TM_BIND_PORT server_port
TM_P2P_PORT server_p2p_port
TM_CLIENT_PORT client_port
TM_USE_NAT_UPNP use_nat_upnp
\
TM_XMLRPC_PORT xmlrpc_port
TM_XMLRPC_ALLOWED_REMOTE xmlrpc_allowremote
\
TM_PACKMASK packmask
\
TM_CONNECTION_UPLOADRATE connection_uploadrate
TM_CONNECTION_DOWNLOADRATE connection_downloadrate
\
TM_P2P_CACHE_SIZE p2p_cache_size
\
TM_BLACKLIST_URL blacklist_url
TM_GUESTLIST_FILENAME guestlist_filename
TM_BLACKLIST_FILENAME blacklist_filename
\
TM_ALLOW_SPECTATOR_RELAYS allow_spectator_relays
\
TM_USE_PROXY use_proxy
TM_PROXY_LOGIN proxy_login
TM_PROXY_PASSWORD proxy_password
)
if [[ ! -x "./TrackmaniaServer" ]] || [ ! -f "$configSource".* ]; then
echo "Server not found!"
echo "Downloading TrackMania Forever Dedicated Server…"
file="$(mktemp)"
dir="$(mktemp -d)"
wget http://files2.trackmaniaforever.com/TrackmaniaServer_2011-02-21.zip -O "$file" && unzip -o "$file" -d .
fi
if [ -f "$configSource.xml" ]; then
cp "$configSource.xml" "$configFile"
elif [ -f "$configSource.txt" ]; then
cp "$configSource.txt" "$configFile"
fi
for i in $(seq 0 2 $((${#levels[@]} - 1))); do
var="${levels[$i]}"
index="${levels[$(($i + 1))]}"
password="${!var}"
if [ -n "$password" ]; then
xmlstarlet edit --inplace --update "$authLevelsPath[$index]/password" --value "$password" "$configFile"
fi
done
for i in $(seq 0 2 $((${#accountOption[@]} - 1))); do
var="${accountOption[$i]}"
option="${accountOption[$(($i + 1))]}"
value="${!var}"
if [ -n "$value" ]; then
xmlstarlet edit --inplace --update "$accountPath/$option" --value "$value" "$configFile"
fi
done
for i in $(seq 0 2 $((${#serverOptions[@]} - 1))); do
var="${serverOptions[$i]}"
option="${serverOptions[$(($i + 1))]}"
value="${!var}"
if [ -n "$value" ]; then
xmlstarlet edit --inplace --update "$serverPath/$option" --value "$value" "$configFile"
fi
done
for i in $(seq 0 2 $((${#systemOptions[@]} - 1))); do
var="${systemOptions[$i]}"
option="${systemOptions[$(($i + 1))]}"
value="${!var}"
if [ -n "$value" ]; then
xmlstarlet edit --inplace --update "$systemPath/$option" --value "$value" "$configFile"
fi
done
if [ -z "$TM_LOG_FILES" ]; then
set -- "$@" /nologs
fi
unbuffer -p ./TrackmaniaServer /dedicated_cfg="$(basename "$configFile")" /nodaemon $@