dayzdockerserver/files/bin/dz-common
Daniel Ceregatti 9fb3504bac Ensure that the mpmissions being used has all the files we need. Some don't, like Namalsk, which lacks cfggameplay.json.
Account for default ports. Another consequence from the bad merge.
2024-06-27 14:34:21 -07:00

170 lines
3.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -eEa
# If you want/need the server and rcon ports to be different, set them here.
# The steam query port is set in serverDZ.cfg.
# Server port. Set these in the .env file for the container.
if [[ ${SERVER_PORT} = "" ]]
then
export SERVER_PORT=2302
fi
if [[ ${RCON_PORT} = "" ]]
then
export RCON_PORT=2303
fi
export port=${SERVER_PORT}
export rcon_port=${RCON_PORT}
# Don't change anything else.
# Colors
export default="\e[0m"
export red="\e[31m"
export green="\e[32m"
export yellow="\e[93m"
export lightblue="\e[94m"
export blue="\e[34m"
export magenta="\e[35m"
export cyan="\e[36m"
# DayZ release server Steam app ID.
# Now that the Linux server is released, the binaries will come from this ID.
export release_server_appid=223350
# Leaving the experimental server appid here to allow for the use of the experimental server.
#export release_server_appid=1042420
# DayZ release client SteamID. This is for mods, as only the release client has them.
export release_client_appid=221100
# Server container profile directory
export SERVER_PROFILE="/profiles"
# Common container base directories
export FILES="/files"
export SERVER_FILES="/serverfiles"
# Used to check if dayZ is installed
export SERVER_INSTALL_FILE="${SERVER_FILES}/DayZServer"
# Steam files
export STEAM_LOGIN="${HOME}/steamlogin"
export STEAMCMD=steamcmd
# Other stuff
export YES="${green}yes${default}"
export NO="${red}no${default}"
# Convenience function
prompt_yn(){
echo -n "${1} (y|N) " >&2
read -s -n 1 a
a=$(echo ${a} | tr A-Z a-z)
echo
if [[ "${a}" = "y" ]]
then
return 0
else
return 1
fi
}
# List mods
list(){
X=1
C="${green}"
spaces=" "
FIRST=1
for link in $(ls -d ${SERVER_FILES}/@* 2> /dev/null | sort)
do
if [[ ${FIRST} = 1 ]]
then
echo
echo -e " ID Name URL Size"
echo "-------------------------------------------------------------------------------------------------------------------------"
FIRST=0
fi
ID=$(readlink ${link} | awk -F/ '{print $NF}')
MODNAME=$(get_mod_name ${ID})
SIZE=$(du -sh "${WORKSHOP_DIR}/${ID}" | awk '{print $1}')
printf "${C}%.3d %s %.30s %s https://steamcommunity.com/sharedfiles/filedetails/?id=%s %s${default}\n" ${X} ${ID} "${MODNAME}" "${spaces:${#MODNAME}}" ${ID} ${SIZE}
X=$((X+1))
done
echo
}
# Get mod name by ID or index
get_mod_name(){
# Check for an ID
if ! [ -d "${WORKSHOP_DIR}/${1}" ]
then
echo "Mod ID ${1} doesn't exist" >&2
exit 1
fi
NAME=$(grep name "${WORKSHOP_DIR}/${1}/meta.cpp" | cut -d '"' -f2 | tr -cd "[:alnum:]")
if [[ ${NAME} = "" ]]
then
echo "Could not get metadata. See above. Exiting..."
exit 1
fi
echo -n ${NAME}
}
get_mod_id(){
# If we were passed a valid mod id, just return it
if [ -d "${WORKSHOP_DIR}/${1}" ]
then
echo -n ${1}
return
fi
# If we have a second argument, we want to iterate over active server mods
DIR=${SERVER_FILES}
ARG="-d"
if [[ ${2} = "0" ]]
then
ARG="-tdr"
DIR=${SERVER_PROFILE}
fi
# echo "DIR: ${DIR}, ARG: ${ARG}" >&2
X=1
# Loop over mods
for link in $(ls ${ARG} ${DIR}/@* 2> /dev/null)
do
ID=$(readlink ${link} | awk -F/ '{print $NF}')
if [[ "${X}" = "${1}" ]]
then
echo -n ${ID}
return
fi
X=$((X+1))
done
}
get_mods(){
workshoplist=""
for link in $(ls -d ${SERVER_FILES}/@* 2> /dev/null | sort)
do
ID=$(readlink ${link} | awk -F/ '{print $NF}')
MODNAME=$(get_mod_name ${ID})
workshoplist+=" +workshop_download_item ${release_client_appid} ${ID}"
done
get_mod_command_line
}
get_mod_command_line(){
mod_command_line=""
for link in $(ls -tdr ${SERVER_PROFILE}/@* 2> /dev/null)
do
ID=$(readlink ${link} | awk -F/ '{print $NF}')
MODNAME=$(get_mod_name ${ID})
mod_command_line+="@${MODNAME};"
done
if [[ ${mod_command_line} != "" ]]
then
mod_command_line='-mod='${mod_command_line::-1}
fi
}