Bash_Scripts/CentOS/Arma/Arma-Start-Server.bash

152 lines
3.6 KiB
Bash
Raw Normal View History

2021-07-28 09:29:40 -05:00
#!/bin/bash --posix
usage() {
2021-07-28 17:46:10 -05:00
printf "%s\n" \
"Usage: Autodelete-Files -u <steam username> -p <steam password>
2021-07-28 09:29:40 -05:00
--user <steam username> | -u <steam username>
2021-07-28 17:46:10 -05:00
The username used to login for steam
2021-07-28 09:29:40 -05:00
Example:
--user Sbinalla
2021-07-28 17:46:10 -05:00
Note:
Only required when --no-update is not passed
2021-07-28 09:29:40 -05:00
--server <server number> | -s <server number>
2021-07-28 17:46:10 -05:00
The server number (the ID of the server within the Arma directory)
Example:
--server 0
--no-update | -n
Skips the steam update and validation and just starts the server
2021-07-28 09:29:40 -05:00
Example:
2021-07-28 17:46:10 -05:00
--no-update
--force-checksum | -c
"
2021-07-28 09:29:40 -05:00
}
error() {
printf "\n%s\n" "$1" >&2
exit 1
}
confirmation() {
while true; do
read -p "${1}" -n 1 -r choice
case "$choice" in
y | Y) return 1 ;;
n | N) return 0 ;;
*) echo -e "\nInput must be either y, Y, n, or N" ;;
esac
done
}
2021-07-28 17:46:10 -05:00
servernum=""
steamuser=""
no_update=0
use_checksum=0
2021-07-28 09:29:40 -05:00
while :; do
case $1 in
-h | -\? | --help)
usage # Display a usage synopsis.
exit
;;
--) # End of all options.
shift
break
;;
-s | --server)
shift
2021-07-28 17:46:10 -05:00
servernum="${1}"
2021-07-28 09:29:40 -05:00
;;
-u | --user)
shift
2021-07-28 17:46:10 -05:00
steamuser="${1}"
;;
-n | --no-update)
no_update=1
;;
-f | --force-checksum)
use_checksum=0
2021-07-28 09:29:40 -05:00
;;
-?*)
printf 'Unknown option: %s\n' "$1" >&2
usage
error
;;
*) # Default case: No more options, so break out of the loop.
break ;;
esac
shift
done
2021-07-28 17:46:10 -05:00
[[ "${servernum}" == "" ]] && error "Error: A server number must be provided"
[[ "${servernum}" =~ [^0-9]+. ]] && error "Error: The argument for server must be a number"
2021-07-28 09:29:40 -05:00
2021-07-28 17:46:10 -05:00
[[ "${steamuser}" == "" && ${no_update} == 0 ]] && error "Error: A steam user must be provided"
2021-07-28 09:29:40 -05:00
[[ -d ~/Arma/ ]] || \
mkdir -p ~/Arma/ && echo "Created the Arma directory..."
2021-07-28 17:46:10 -05:00
if [ ${no_update} == 0 ]; then
steamcmd +quit
steamcmd +login "${steamuser}" +force_install_dir ~/Arma/Server-"${servernum}" +app_update 233780 validate +quit
fi
2021-07-28 09:29:40 -05:00
2021-07-28 17:46:10 -05:00
[[ -d ~/Arma/Server-"${servernum}"/mods ]] || \
mkdir ~/Arma/Server-"${servernum}"/mods && echo "Creating new mods directory"
2021-07-28 09:29:40 -05:00
# These directories are necessary for Arma servers on linux
[[ -d ~/".local/share/Arma 3" ]] || \
mkdir -p ~/".local/share/Arma 3" && echo "Created the Arma 3 share"
[[ -d ~/".local/share/Arma 3 - Other Profiles" ]] || \
mkdir -p ~/".local/share/Arma 3 - Other Profiles" && echo "Created the Arma 3 Other Profiles"
MODS=""
2021-07-28 17:46:10 -05:00
MODPATH=~/Arma/Server-"${servernum}"/mods
for mod in $(ls "${MODPATH}")
2021-07-28 09:29:40 -05:00
do
echo "Adding mod ${mod}"
2021-07-28 17:46:10 -05:00
new_mod="${MODPATH}/${mod}"
# rsync -ah -r --info=progress2 "${new_mod}" ~/Arma/Server-"${servernum}"/
# rsync_error=${?}
# [[ ${rsync_error} != 0 ]] && \
# echo "Rsync error: ${rsync_error}, could be an interrupt - exiting..." && exit ${rsync_error}
MODS="${MODS}\\${new_mod};"
echo "Successfully added mod ${mod}"
2021-07-28 09:29:40 -05:00
done
echo "Mods added to startup: ${MODS}"
2021-07-28 17:46:10 -05:00
SERVERPORT=$(("2300" + "${servernum}"))
tmux has-session -t "Arma-Server-${servernum}" 2>/dev/null
if [ ${?} != 0 ]; then
echo \
"Startup Args:
-name=Arma-Server-${servernum}
-config=~/Arma/Server-${servernum}/server.cfg
-noSound
-port=${SERVERPORT}
-mod=\"${MODS}\""
echo "Starting new session..."
cd ~/Arma/Server-"${servernum}"/
tmux new-session -d -s \
"Arma-Server-${servernum}" \
~/Arma/Server-"${servernum}"/arma3server_x64 \
-name=Arma-Server-"${servernum}" \
-config=~/Arma/Server-"${servernum}"/server.cfg \
2021-07-28 09:29:40 -05:00
-noSound \
2021-07-28 17:46:10 -05:00
-port="${SERVERPORT}" \
-mod="\"${MODS}\""
else
echo "The session Arma-Server-${servernum} already exists, please close it before running a new session"
exit 1
fi